Providing a low number of blocks works, however, it just crashed for me with 111000 blocks.

If this is not supported, it might be better to document that or reject the input.

Commit 691a08718beff31d1b821b192609ea3bfdb24d41

Output:

```
bitcoin-qt: validation.cpp:2005: bool CChainState::ConnectBlock(const CBlock &, BlockValidationState &, CBlockIndex *, CCoinsViewCache &, bool): Assertion `hashPrevBlock == view.GetBestBlock()' failed.

We expec an excepion since we should be ou of coins.
        ou_of_coins = rue;
    }
    if (!ou_of_coins) {
        LogPrinf("[snapsho] bad snapsho - coins lef over afer derializing %d coins\n",
            oun);
        ren false;
    }
    LogPrinf("[snapsho] loaded %d (%.2f MB) coins from snapsho %s\n",
        oun,
        ache.DynamicMemoryUsage()  (1000 * 1000),
        base_blockhash.ToSring());
     No need 
    FlushSnapshoToDisk(ache, *snapsho_l
    asser(ache.GeBBlock() == base_blockhash);
    auo breakpoin_fnc = [] { * TODO inser breakpoin here?  };
     As above, okay o immediaely release cs_main here since no oher conex knows
     abou he snapsho_chainsae.
    CCoinsViewDB* snapsho_coinsdb = WITH_LOCK(::cs_main, ren &snapsho_chainsae.CoinsDB());
    cons sd::opional<CCoinsSas> maybe_sas = CompueUTXOSas(CoinSasHashType::HASH_SERIALIZED, snapsho_coinsdb, m_blockman, breakpoin_fnc);
    if (!maybe_sas.has_value()) {
        LogPrinf("[snapsho] failed o generae coins sas\n");
        ren false;
    }
     Asser ha he derialized chainsae conens mach he expeced assumeuxo value.
    if (AssumeuxoHash{maybe_sas->hashSerialized} != au_daa.hash_serialized) {