github.com/aaa256/atlantis@v0.0.0-20210707112435-42ee889287a2/consensus/ethash/algorithm.go (about)

     1  // Copyright 2017 The go-athereum Authors
     2  // This file is part of the go-athereum library.
     3  //
     4  // The go-athereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-athereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-athereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package athash
    18  
    19  import (
    20  	"encoding/binary"
    21  	"hash"
    22  	"math/big"
    23  	"reflect"
    24  	"runtime"
    25  	"sync"
    26  	"sync/atomic"
    27  	"time"
    28  	"unsafe"
    29  
    30  	"github.com/athereum/go-athereum/common"
    31  	"github.com/athereum/go-athereum/common/bitutil"
    32  	"github.com/athereum/go-athereum/crypto"
    33  	"github.com/athereum/go-athereum/crypto/sha3"
    34  	"github.com/athereum/go-athereum/log"
    35  )
    36  
    37  const (
    38  	datasetInitBytes   = 1 << 30 // Bytes in dataset at genesis
    39  	datasetGrowthBytes = 1 << 23 // Dataset growth per epoch
    40  	cacheInitBytes     = 1 << 24 // Bytes in cache at genesis
    41  	cacheGrowthBytes   = 1 << 17 // Cache growth per epoch
    42  	epochLength        = 30000   // Blocks per epoch
    43  	mixBytes           = 128     // Width of mix
    44  	hashBytes          = 64      // Hash length in bytes
    45  	hashWords          = 16      // Number of 32 bit ints in a hash
    46  	datasetParents     = 256     // Number of parents of each dataset element
    47  	cacheRounds        = 3       // Number of rounds in cache production
    48  	loopAccesses       = 64      // Number of accesses in hashimoto loop
    49  )
    50  
    51  // cacheSize returns the size of the athash verification cache that belongs to a certain
    52  // block number.
    53  func cacheSize(block uint64) uint64 {
    54  	epoch := int(block / epochLength)
    55  	if epoch < maxEpoch {
    56  		return cacheSizes[epoch]
    57  	}
    58  	return calcCacheSize(epoch)
    59  }
    60  
    61  // calcCacheSize calculates the cache size for epoch. The cache size grows linearly,
    62  // however, we always take the highest prime below the linearly growing threshold in order
    63  // to reduce the risk of accidental regularities leading to cyclic behavior.
    64  func calcCacheSize(epoch int) uint64 {
    65  	size := cacheInitBytes + cacheGrowthBytes*uint64(epoch) - hashBytes
    66  	for !new(big.Int).SetUint64(size / hashBytes).ProbablyPrime(1) { // Always accurate for n < 2^64
    67  		size -= 2 * hashBytes
    68  	}
    69  	return size
    70  }
    71  
    72  // datasetSize returns the size of the athash mining dataset that belongs to a certain
    73  // block number.
    74  func datasetSize(block uint64) uint64 {
    75  	epoch := int(block / epochLength)
    76  	if epoch < maxEpoch {
    77  		return datasetSizes[epoch]
    78  	}
    79  	return calcDatasetSize(epoch)
    80  }
    81  
    82  // calcDatasetSize calculates the dataset size for epoch. The dataset size grows linearly,
    83  // however, we always take the highest prime below the linearly growing threshold in order
    84  // to reduce the risk of accidental regularities leading to cyclic behavior.
    85  func calcDatasetSize(epoch int) uint64 {
    86  	size := datasetInitBytes + datasetGrowthBytes*uint64(epoch) - mixBytes
    87  	for !new(big.Int).SetUint64(size / mixBytes).ProbablyPrime(1) { // Always accurate for n < 2^64
    88  		size -= 2 * mixBytes
    89  	}
    90  	return size
    91  }
    92  
    93  // hasher is a repetitive hasher allowing the same hash data structures to be
    94  // reused between hash runs instead of requiring new ones to be created.
    95  type hasher func(dest []byte, data []byte)
    96  
    97  // makeHasher creates a repetitive hasher, allowing the same hash data structures to
    98  // be reused between hash runs instead of requiring new ones to be created. The returned
    99  // function is not thread safe!
   100  func makeHasher(h hash.Hash) hasher {
   101  	// sha3.state supports Read to get the sum, use it to avoid the overhead of Sum.
   102  	// Read alters the state but we reset the hash before every operation.
   103  	type readerHash interface {
   104  		hash.Hash
   105  		Read([]byte) (int, error)
   106  	}
   107  	rh, ok := h.(readerHash)
   108  	if !ok {
   109  		panic("can't find Read method on hash")
   110  	}
   111  	outputLen := rh.Size()
   112  	return func(dest []byte, data []byte) {
   113  		rh.Reset()
   114  		rh.Write(data)
   115  		rh.Read(dest[:outputLen])
   116  	}
   117  }
   118  
   119  // seedHash is the seed to use for generating a verification cache and the mining
   120  // dataset.
   121  func seedHash(block uint64) []byte {
   122  	seed := make([]byte, 32)
   123  	if block < epochLength {
   124  		return seed
   125  	}
   126  	keccak256 := makeHasher(sha3.NewKeccak256())
   127  	for i := 0; i < int(block/epochLength); i++ {
   128  		keccak256(seed, seed)
   129  	}
   130  	return seed
   131  }
   132  
   133  // generateCache creates a verification cache of a given size for an input seed.
   134  // The cache production process involves first sequentially filling up 32 MB of
   135  // memory, then performing two passes of Sergio Demian Lerner's RandMemoHash
   136  // algorithm from Strict Memory Hard Hashing Functions (2014). The output is a
   137  // set of 524288 64-byte values.
   138  // This method places the result into dest in machine byte order.
   139  func generateCache(dest []uint32, epoch uint64, seed []byte) {
   140  	// Print some debug logs to allow analysis on low end devices
   141  	logger := log.New("epoch", epoch)
   142  
   143  	start := time.Now()
   144  	defer func() {
   145  		elapsed := time.Since(start)
   146  
   147  		logFn := logger.Debug
   148  		if elapsed > 3*time.Second {
   149  			logFn = logger.Info
   150  		}
   151  		logFn("Generated athash verification cache", "elapsed", common.PrettyDuration(elapsed))
   152  	}()
   153  	// Convert our destination slice to a byte buffer
   154  	header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest))
   155  	header.Len *= 4
   156  	header.Cap *= 4
   157  	cache := *(*[]byte)(unsafe.Pointer(&header))
   158  
   159  	// Calculate the number of theoretical rows (we'll store in one buffer nonatheless)
   160  	size := uint64(len(cache))
   161  	rows := int(size) / hashBytes
   162  
   163  	// Start a monitoring goroutine to report progress on low end devices
   164  	var progress uint32
   165  
   166  	done := make(chan struct{})
   167  	defer close(done)
   168  
   169  	go func() {
   170  		for {
   171  			select {
   172  			case <-done:
   173  				return
   174  			case <-time.After(3 * time.Second):
   175  				logger.Info("Generating athash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start)))
   176  			}
   177  		}
   178  	}()
   179  	// Create a hasher to reuse between invocations
   180  	keccak512 := makeHasher(sha3.NewKeccak512())
   181  
   182  	// Sequentially produce the initial dataset
   183  	keccak512(cache, seed)
   184  	for offset := uint64(hashBytes); offset < size; offset += hashBytes {
   185  		keccak512(cache[offset:], cache[offset-hashBytes:offset])
   186  		atomic.AddUint32(&progress, 1)
   187  	}
   188  	// Use a low-round version of randmemohash
   189  	temp := make([]byte, hashBytes)
   190  
   191  	for i := 0; i < cacheRounds; i++ {
   192  		for j := 0; j < rows; j++ {
   193  			var (
   194  				srcOff = ((j - 1 + rows) % rows) * hashBytes
   195  				dstOff = j * hashBytes
   196  				xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes
   197  			)
   198  			bitutil.XORBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes])
   199  			keccak512(cache[dstOff:], temp)
   200  
   201  			atomic.AddUint32(&progress, 1)
   202  		}
   203  	}
   204  	// Swap the byte order on big endian systems and return
   205  	if !isLittleEndian() {
   206  		swap(cache)
   207  	}
   208  }
   209  
   210  // swap changes the byte order of the buffer assuming a uint32 representation.
   211  func swap(buffer []byte) {
   212  	for i := 0; i < len(buffer); i += 4 {
   213  		binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:]))
   214  	}
   215  }
   216  
   217  // prepare converts an athash cache or dataset from a byte stream into the internal
   218  // int representation. All athash methods work with ints to avoid constant byte to
   219  // int conversions as well as to handle both little and big endian systems.
   220  func prepare(dest []uint32, src []byte) {
   221  	for i := 0; i < len(dest); i++ {
   222  		dest[i] = binary.LittleEndian.Uint32(src[i*4:])
   223  	}
   224  }
   225  
   226  // fnv is an algorithm inspired by the FNV hash, which in some cases is used as
   227  // a non-associative substitute for XOR. Note that we multiply the prime with
   228  // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the
   229  // prime with one byte (octet) in turn.
   230  func fnv(a, b uint32) uint32 {
   231  	return a*0x01000193 ^ b
   232  }
   233  
   234  // fnvHash mixes in data into mix using the athash fnv method.
   235  func fnvHash(mix []uint32, data []uint32) {
   236  	for i := 0; i < len(mix); i++ {
   237  		mix[i] = mix[i]*0x01000193 ^ data[i]
   238  	}
   239  }
   240  
   241  // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes,
   242  // and hashes that to compute a single dataset node.
   243  func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte {
   244  	// Calculate the number of theoretical rows (we use one buffer nonatheless)
   245  	rows := uint32(len(cache) / hashWords)
   246  
   247  	// Initialize the mix
   248  	mix := make([]byte, hashBytes)
   249  
   250  	binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index)
   251  	for i := 1; i < hashWords; i++ {
   252  		binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)])
   253  	}
   254  	keccak512(mix, mix)
   255  
   256  	// Convert the mix to uint32s to avoid constant bit shifting
   257  	intMix := make([]uint32, hashWords)
   258  	for i := 0; i < len(intMix); i++ {
   259  		intMix[i] = binary.LittleEndian.Uint32(mix[i*4:])
   260  	}
   261  	// fnv it with a lot of random cache nodes based on index
   262  	for i := uint32(0); i < datasetParents; i++ {
   263  		parent := fnv(index^i, intMix[i%16]) % rows
   264  		fnvHash(intMix, cache[parent*hashWords:])
   265  	}
   266  	// Flatten the uint32 mix into a binary one and return
   267  	for i, val := range intMix {
   268  		binary.LittleEndian.PutUint32(mix[i*4:], val)
   269  	}
   270  	keccak512(mix, mix)
   271  	return mix
   272  }
   273  
   274  // generateDataset generates the entire athash dataset for mining.
   275  // This method places the result into dest in machine byte order.
   276  func generateDataset(dest []uint32, epoch uint64, cache []uint32) {
   277  	// Print some debug logs to allow analysis on low end devices
   278  	logger := log.New("epoch", epoch)
   279  
   280  	start := time.Now()
   281  	defer func() {
   282  		elapsed := time.Since(start)
   283  
   284  		logFn := logger.Debug
   285  		if elapsed > 3*time.Second {
   286  			logFn = logger.Info
   287  		}
   288  		logFn("Generated athash verification cache", "elapsed", common.PrettyDuration(elapsed))
   289  	}()
   290  
   291  	// Figure out whather the bytes need to be swapped for the machine
   292  	swapped := !isLittleEndian()
   293  
   294  	// Convert our destination slice to a byte buffer
   295  	header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest))
   296  	header.Len *= 4
   297  	header.Cap *= 4
   298  	dataset := *(*[]byte)(unsafe.Pointer(&header))
   299  
   300  	// Generate the dataset on many goroutines since it takes a while
   301  	threads := runtime.NumCPU()
   302  	size := uint64(len(dataset))
   303  
   304  	var pend sync.WaitGroup
   305  	pend.Add(threads)
   306  
   307  	var progress uint32
   308  	for i := 0; i < threads; i++ {
   309  		go func(id int) {
   310  			defer pend.Done()
   311  
   312  			// Create a hasher to reuse between invocations
   313  			keccak512 := makeHasher(sha3.NewKeccak512())
   314  
   315  			// Calculate the data segment this thread should generate
   316  			batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads)))
   317  			first := uint32(id) * batch
   318  			limit := first + batch
   319  			if limit > uint32(size/hashBytes) {
   320  				limit = uint32(size / hashBytes)
   321  			}
   322  			// Calculate the dataset segment
   323  			percent := uint32(size / hashBytes / 100)
   324  			for index := first; index < limit; index++ {
   325  				item := generateDatasetItem(cache, index, keccak512)
   326  				if swapped {
   327  					swap(item)
   328  				}
   329  				copy(dataset[index*hashBytes:], item)
   330  
   331  				if status := atomic.AddUint32(&progress, 1); status%percent == 0 {
   332  					logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start)))
   333  				}
   334  			}
   335  		}(i)
   336  	}
   337  	// Wait for all the generators to finish and return
   338  	pend.Wait()
   339  }
   340  
   341  // hashimoto aggregates data from the full dataset in order to produce our final
   342  // value for a particular header hash and nonce.
   343  func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) {
   344  	// Calculate the number of theoretical rows (we use one buffer nonatheless)
   345  	rows := uint32(size / mixBytes)
   346  
   347  	// Combine header+nonce into a 64 byte seed
   348  	seed := make([]byte, 40)
   349  	copy(seed, hash)
   350  	binary.LittleEndian.PutUint64(seed[32:], nonce)
   351  
   352  	seed = crypto.Keccak512(seed)
   353  	seedHead := binary.LittleEndian.Uint32(seed)
   354  
   355  	// Start the mix with replicated seed
   356  	mix := make([]uint32, mixBytes/4)
   357  	for i := 0; i < len(mix); i++ {
   358  		mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:])
   359  	}
   360  	// Mix in random dataset nodes
   361  	temp := make([]uint32, len(mix))
   362  
   363  	for i := 0; i < loopAccesses; i++ {
   364  		parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows
   365  		for j := uint32(0); j < mixBytes/hashBytes; j++ {
   366  			copy(temp[j*hashWords:], lookup(2*parent+j))
   367  		}
   368  		fnvHash(mix, temp)
   369  	}
   370  	// Compress mix
   371  	for i := 0; i < len(mix); i += 4 {
   372  		mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])
   373  	}
   374  	mix = mix[:len(mix)/4]
   375  
   376  	digest := make([]byte, common.HashLength)
   377  	for i, val := range mix {
   378  		binary.LittleEndian.PutUint32(digest[i*4:], val)
   379  	}
   380  	return digest, crypto.Keccak256(append(seed, digest...))
   381  }
   382  
   383  // hashimotoLight aggregates data from the full dataset (using only a small
   384  // in-memory cache) in order to produce our final value for a particular header
   385  // hash and nonce.
   386  func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
   387  	keccak512 := makeHasher(sha3.NewKeccak512())
   388  
   389  	lookup := func(index uint32) []uint32 {
   390  		rawData := generateDatasetItem(cache, index, keccak512)
   391  
   392  		data := make([]uint32, len(rawData)/4)
   393  		for i := 0; i < len(data); i++ {
   394  			data[i] = binary.LittleEndian.Uint32(rawData[i*4:])
   395  		}
   396  		return data
   397  	}
   398  	return hashimoto(hash, nonce, size, lookup)
   399  }
   400  
   401  // hashimotoFull aggregates data from the full dataset (using the full in-memory
   402  // dataset) in order to produce our final value for a particular header hash and
   403  // nonce.
   404  func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) {
   405  	lookup := func(index uint32) []uint32 {
   406  		offset := index * hashWords
   407  		return dataset[offset : offset+hashWords]
   408  	}
   409  	return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup)
   410  }
   411  
   412  const maxEpoch = 2048
   413  
   414  // datasetSizes is a lookup table for the athash dataset size for the first 2048
   415  // epochs (i.e. 61440000 blocks).
   416  var datasetSizes = [maxEpoch]uint64{
   417  	1073739904, 1082130304, 1090514816, 1098906752, 1107293056,
   418  	1115684224, 1124070016, 1132461952, 1140849536, 1149232768,
   419  	1157627776, 1166013824, 1174404736, 1182786944, 1191180416,
   420  	1199568512, 1207958912, 1216345216, 1224732032, 1233124736,
   421  	1241513344, 1249902464, 1258290304, 1266673792, 1275067264,
   422  	1283453312, 1291844992, 1300234112, 1308619904, 1317010048,
   423  	1325397376, 1333787776, 1342176128, 1350561664, 1358954368,
   424  	1367339392, 1375731584, 1384118144, 1392507008, 1400897408,
   425  	1409284736, 1417673344, 1426062464, 1434451072, 1442839168,
   426  	1451229056, 1459615616, 1468006016, 1476394112, 1484782976,
   427  	1493171584, 1501559168, 1509948032, 1518337664, 1526726528,
   428  	1535114624, 1543503488, 1551892096, 1560278656, 1568669056,
   429  	1577056384, 1585446272, 1593831296, 1602219392, 1610610304,
   430  	1619000192, 1627386752, 1635773824, 1644164224, 1652555648,
   431  	1660943488, 1669332608, 1677721216, 1686109312, 1694497664,
   432  	1702886272, 1711274624, 1719661184, 1728047744, 1736434816,
   433  	1744829056, 1753218944, 1761606272, 1769995904, 1778382464,
   434  	1786772864, 1795157888, 1803550592, 1811937664, 1820327552,
   435  	1828711552, 1837102976, 1845488768, 1853879936, 1862269312,
   436  	1870656896, 1879048064, 1887431552, 1895825024, 1904212096,
   437  	1912601216, 1920988544, 1929379456, 1937765504, 1946156672,
   438  	1954543232, 1962932096, 1971321728, 1979707264, 1988093056,
   439  	1996487552, 2004874624, 2013262208, 2021653888, 2030039936,
   440  	2038430848, 2046819968, 2055208576, 2063596672, 2071981952,
   441  	2080373632, 2088762752, 2097149056, 2105539712, 2113928576,
   442  	2122315136, 2130700672, 2139092608, 2147483264, 2155872128,
   443  	2164257664, 2172642176, 2181035392, 2189426048, 2197814912,
   444  	2206203008, 2214587264, 2222979712, 2231367808, 2239758208,
   445  	2248145024, 2256527744, 2264922752, 2273312128, 2281701248,
   446  	2290086272, 2298476672, 2306867072, 2315251072, 2323639168,
   447  	2332032128, 2340420224, 2348808064, 2357196416, 2365580416,
   448  	2373966976, 2382363008, 2390748544, 2399139968, 2407530368,
   449  	2415918976, 2424307328, 2432695424, 2441084288, 2449472384,
   450  	2457861248, 2466247808, 2474637184, 2483026816, 2491414144,
   451  	2499803776, 2508191872, 2516582272, 2524970368, 2533359232,
   452  	2541743488, 2550134144, 2558525056, 2566913408, 2575301504,
   453  	2583686528, 2592073856, 2600467328, 2608856192, 2617240448,
   454  	2625631616, 2634022016, 2642407552, 2650796416, 2659188352,
   455  	2667574912, 2675965312, 2684352896, 2692738688, 2701130624,
   456  	2709518464, 2717907328, 2726293376, 2734685056, 2743073152,
   457  	2751462016, 2759851648, 2768232832, 2776625536, 2785017728,
   458  	2793401984, 2801794432, 2810182016, 2818571648, 2826959488,
   459  	2835349376, 2843734144, 2852121472, 2860514432, 2868900992,
   460  	2877286784, 2885676928, 2894069632, 2902451584, 2910843008,
   461  	2919234688, 2927622784, 2936011648, 2944400768, 2952789376,
   462  	2961177728, 2969565568, 2977951616, 2986338944, 2994731392,
   463  	3003120256, 3011508352, 3019895936, 3028287104, 3036675968,
   464  	3045063808, 3053452928, 3061837696, 3070228352, 3078615424,
   465  	3087003776, 3095394944, 3103782272, 3112173184, 3120562048,
   466  	3128944768, 3137339264, 3145725056, 3154109312, 3162505088,
   467  	3170893184, 3179280256, 3187669376, 3196056704, 3204445568,
   468  	3212836736, 3221224064, 3229612928, 3238002304, 3246391168,
   469  	3254778496, 3263165824, 3271556224, 3279944576, 3288332416,
   470  	3296719232, 3305110912, 3313500032, 3321887104, 3330273152,
   471  	3338658944, 3347053184, 3355440512, 3363827072, 3372220288,
   472  	3380608384, 3388997504, 3397384576, 3405774208, 3414163072,
   473  	3422551936, 3430937984, 3439328384, 3447714176, 3456104576,
   474  	3464493952, 3472883584, 3481268864, 3489655168, 3498048896,
   475  	3506434432, 3514826368, 3523213952, 3531603584, 3539987072,
   476  	3548380288, 3556763264, 3565157248, 3573545344, 3581934464,
   477  	3590324096, 3598712704, 3607098752, 3615488384, 3623877248,
   478  	3632265856, 3640646528, 3649043584, 3657430144, 3665821568,
   479  	3674207872, 3682597504, 3690984832, 3699367808, 3707764352,
   480  	3716152448, 3724541056, 3732925568, 3741318016, 3749706368,
   481  	3758091136, 3766481536, 3774872704, 3783260032, 3791650432,
   482  	3800036224, 3808427648, 3816815488, 3825204608, 3833592704,
   483  	3841981568, 3850370432, 3858755968, 3867147904, 3875536256,
   484  	3883920512, 3892313728, 3900702592, 3909087872, 3917478784,
   485  	3925868416, 3934256512, 3942645376, 3951032192, 3959422336,
   486  	3967809152, 3976200064, 3984588416, 3992974976, 4001363584,
   487  	4009751168, 4018141312, 4026530432, 4034911616, 4043308928,
   488  	4051695488, 4060084352, 4068472448, 4076862848, 4085249408,
   489  	4093640576, 4102028416, 4110413696, 4118805632, 4127194496,
   490  	4135583104, 4143971968, 4152360832, 4160746112, 4169135744,
   491  	4177525888, 4185912704, 4194303616, 4202691968, 4211076736,
   492  	4219463552, 4227855488, 4236246656, 4244633728, 4253022848,
   493  	4261412224, 4269799808, 4278184832, 4286578048, 4294962304,
   494  	4303349632, 4311743104, 4320130432, 4328521088, 4336909184,
   495  	4345295488, 4353687424, 4362073472, 4370458496, 4378852736,
   496  	4387238528, 4395630208, 4404019072, 4412407424, 4420790656,
   497  	4429182848, 4437571456, 4445962112, 4454344064, 4462738048,
   498  	4471119232, 4479516544, 4487904128, 4496289664, 4504682368,
   499  	4513068416, 4521459584, 4529846144, 4538232704, 4546619776,
   500  	4555010176, 4563402112, 4571790208, 4580174464, 4588567936,
   501  	4596957056, 4605344896, 4613734016, 4622119808, 4630511488,
   502  	4638898816, 4647287936, 4655675264, 4664065664, 4672451968,
   503  	4680842624, 4689231488, 4697620352, 4706007424, 4714397056,
   504  	4722786176, 4731173248, 4739562368, 4747951744, 4756340608,
   505  	4764727936, 4773114496, 4781504384, 4789894784, 4798283648,
   506  	4806667648, 4815059584, 4823449472, 4831835776, 4840226176,
   507  	4848612224, 4857003392, 4865391488, 4873780096, 4882169728,
   508  	4890557312, 4898946944, 4907333248, 4915722368, 4924110976,
   509  	4932499328, 4940889728, 4949276032, 4957666432, 4966054784,
   510  	4974438016, 4982831488, 4991221376, 4999607168, 5007998848,
   511  	5016386432, 5024763776, 5033164672, 5041544576, 5049941888,
   512  	5058329728, 5066717056, 5075107456, 5083494272, 5091883904,
   513  	5100273536, 5108662144, 5117048192, 5125436032, 5133827456,
   514  	5142215296, 5150605184, 5158993024, 5167382144, 5175769472,
   515  	5184157568, 5192543872, 5200936064, 5209324928, 5217711232,
   516  	5226102656, 5234490496, 5242877312, 5251263872, 5259654016,
   517  	5268040832, 5276434304, 5284819328, 5293209728, 5301598592,
   518  	5309986688, 5318374784, 5326764416, 5335151488, 5343542144,
   519  	5351929472, 5360319872, 5368706944, 5377096576, 5385484928,
   520  	5393871232, 5402263424, 5410650496, 5419040384, 5427426944,
   521  	5435816576, 5444205952, 5452594816, 5460981376, 5469367936,
   522  	5477760896, 5486148736, 5494536832, 5502925952, 5511315328,
   523  	5519703424, 5528089984, 5536481152, 5544869504, 5553256064,
   524  	5561645696, 5570032768, 5578423936, 5586811264, 5595193216,
   525  	5603585408, 5611972736, 5620366208, 5628750464, 5637143936,
   526  	5645528192, 5653921408, 5662310272, 5670694784, 5679082624,
   527  	5687474048, 5695864448, 5704251008, 5712641408, 5721030272,
   528  	5729416832, 5737806208, 5746194304, 5754583936, 5762969984,
   529  	5771358592, 5779748224, 5788137856, 5796527488, 5804911232,
   530  	5813300608, 5821692544, 5830082176, 5838468992, 5846855552,
   531  	5855247488, 5863636096, 5872024448, 5880411008, 5888799872,
   532  	5897186432, 5905576832, 5913966976, 5922352768, 5930744704,
   533  	5939132288, 5947522432, 5955911296, 5964299392, 5972688256,
   534  	5981074304, 5989465472, 5997851008, 6006241408, 6014627968,
   535  	6023015552, 6031408256, 6039796096, 6048185216, 6056574848,
   536  	6064963456, 6073351808, 6081736064, 6090128768, 6098517632,
   537  	6106906496, 6115289216, 6123680896, 6132070016, 6140459648,
   538  	6148849024, 6157237376, 6165624704, 6174009728, 6182403712,
   539  	6190792064, 6199176064, 6207569792, 6215952256, 6224345216,
   540  	6232732544, 6241124224, 6249510272, 6257899136, 6266287744,
   541  	6274676864, 6283065728, 6291454336, 6299843456, 6308232064,
   542  	6316620928, 6325006208, 6333395584, 6341784704, 6350174848,
   543  	6358562176, 6366951296, 6375337856, 6383729536, 6392119168,
   544  	6400504192, 6408895616, 6417283456, 6425673344, 6434059136,
   545  	6442444672, 6450837376, 6459223424, 6467613056, 6476004224,
   546  	6484393088, 6492781952, 6501170048, 6509555072, 6517947008,
   547  	6526336384, 6534725504, 6543112832, 6551500672, 6559888768,
   548  	6568278656, 6576662912, 6585055616, 6593443456, 6601834112,
   549  	6610219648, 6618610304, 6626999168, 6635385472, 6643777408,
   550  	6652164224, 6660552832, 6668941952, 6677330048, 6685719424,
   551  	6694107776, 6702493568, 6710882176, 6719274112, 6727662976,
   552  	6736052096, 6744437632, 6752825984, 6761213824, 6769604224,
   553  	6777993856, 6786383488, 6794770816, 6803158144, 6811549312,
   554  	6819937664, 6828326528, 6836706176, 6845101696, 6853491328,
   555  	6861880448, 6870269312, 6878655104, 6887046272, 6895433344,
   556  	6903822208, 6912212864, 6920596864, 6928988288, 6937377152,
   557  	6945764992, 6954149248, 6962544256, 6970928768, 6979317376,
   558  	6987709312, 6996093824, 7004487296, 7012875392, 7021258624,
   559  	7029652352, 7038038912, 7046427776, 7054818944, 7063207808,
   560  	7071595136, 7079980928, 7088372608, 7096759424, 7105149824,
   561  	7113536896, 7121928064, 7130315392, 7138699648, 7147092352,
   562  	7155479168, 7163865728, 7172249984, 7180648064, 7189036672,
   563  	7197424768, 7205810816, 7214196608, 7222589824, 7230975104,
   564  	7239367552, 7247755904, 7256145536, 7264533376, 7272921472,
   565  	7281308032, 7289694848, 7298088832, 7306471808, 7314864512,
   566  	7323253888, 7331643008, 7340029568, 7348419712, 7356808832,
   567  	7365196672, 7373585792, 7381973888, 7390362752, 7398750592,
   568  	7407138944, 7415528576, 7423915648, 7432302208, 7440690304,
   569  	7449080192, 7457472128, 7465860992, 7474249088, 7482635648,
   570  	7491023744, 7499412608, 7507803008, 7516192384, 7524579968,
   571  	7532967296, 7541358464, 7549745792, 7558134656, 7566524032,
   572  	7574912896, 7583300992, 7591690112, 7600075136, 7608466816,
   573  	7616854912, 7625244544, 7633629824, 7642020992, 7650410368,
   574  	7658794112, 7667187328, 7675574912, 7683961984, 7692349568,
   575  	7700739712, 7709130368, 7717519232, 7725905536, 7734295424,
   576  	7742683264, 7751069056, 7759457408, 7767849088, 7776238208,
   577  	7784626816, 7793014912, 7801405312, 7809792128, 7818179968,
   578  	7826571136, 7834957184, 7843347328, 7851732352, 7860124544,
   579  	7868512384, 7876902016, 7885287808, 7893679744, 7902067072,
   580  	7910455936, 7918844288, 7927230848, 7935622784, 7944009344,
   581  	7952400256, 7960786048, 7969176704, 7977565312, 7985953408,
   582  	7994339968, 8002730368, 8011119488, 8019508096, 8027896192,
   583  	8036285056, 8044674688, 8053062272, 8061448832, 8069838464,
   584  	8078227328, 8086616704, 8095006592, 8103393664, 8111783552,
   585  	8120171392, 8128560256, 8136949376, 8145336704, 8153726848,
   586  	8162114944, 8170503296, 8178891904, 8187280768, 8195669632,
   587  	8204058496, 8212444544, 8220834176, 8229222272, 8237612672,
   588  	8246000768, 8254389376, 8262775168, 8271167104, 8279553664,
   589  	8287944064, 8296333184, 8304715136, 8313108352, 8321497984,
   590  	8329885568, 8338274432, 8346663296, 8355052928, 8363441536,
   591  	8371828352, 8380217984, 8388606592, 8396996224, 8405384576,
   592  	8413772672, 8422161536, 8430549376, 8438939008, 8447326592,
   593  	8455715456, 8464104832, 8472492928, 8480882048, 8489270656,
   594  	8497659776, 8506045312, 8514434944, 8522823808, 8531208832,
   595  	8539602304, 8547990656, 8556378752, 8564768384, 8573154176,
   596  	8581542784, 8589933952, 8598322816, 8606705024, 8615099264,
   597  	8623487872, 8631876992, 8640264064, 8648653952, 8657040256,
   598  	8665430656, 8673820544, 8682209152, 8690592128, 8698977152,
   599  	8707374464, 8715763328, 8724151424, 8732540032, 8740928384,
   600  	8749315712, 8757704576, 8766089344, 8774480768, 8782871936,
   601  	8791260032, 8799645824, 8808034432, 8816426368, 8824812928,
   602  	8833199488, 8841591424, 8849976448, 8858366336, 8866757248,
   603  	8875147136, 8883532928, 8891923328, 8900306816, 8908700288,
   604  	8917088384, 8925478784, 8933867392, 8942250368, 8950644608,
   605  	8959032704, 8967420544, 8975809664, 8984197504, 8992584064,
   606  	9000976256, 9009362048, 9017752448, 9026141312, 9034530688,
   607  	9042917504, 9051307904, 9059694208, 9068084864, 9076471424,
   608  	9084861824, 9093250688, 9101638528, 9110027648, 9118416512,
   609  	9126803584, 9135188096, 9143581312, 9151969664, 9160356224,
   610  	9168747136, 9177134464, 9185525632, 9193910144, 9202302848,
   611  	9210690688, 9219079552, 9227465344, 9235854464, 9244244864,
   612  	9252633472, 9261021824, 9269411456, 9277799296, 9286188928,
   613  	9294574208, 9302965888, 9311351936, 9319740032, 9328131968,
   614  	9336516736, 9344907392, 9353296768, 9361685888, 9370074752,
   615  	9378463616, 9386849408, 9395239808, 9403629184, 9412016512,
   616  	9420405376, 9428795008, 9437181568, 9445570688, 9453960832,
   617  	9462346624, 9470738048, 9479121536, 9487515008, 9495903616,
   618  	9504289664, 9512678528, 9521067904, 9529456256, 9537843584,
   619  	9546233728, 9554621312, 9563011456, 9571398784, 9579788672,
   620  	9588178304, 9596567168, 9604954496, 9613343104, 9621732992,
   621  	9630121856, 9638508416, 9646898816, 9655283584, 9663675776,
   622  	9672061312, 9680449664, 9688840064, 9697230464, 9705617536,
   623  	9714003584, 9722393984, 9730772608, 9739172224, 9747561088,
   624  	9755945344, 9764338816, 9772726144, 9781116544, 9789503872,
   625  	9797892992, 9806282624, 9814670464, 9823056512, 9831439232,
   626  	9839833984, 9848224384, 9856613504, 9865000576, 9873391232,
   627  	9881772416, 9890162816, 9898556288, 9906940544, 9915333248,
   628  	9923721088, 9932108672, 9940496512, 9948888448, 9957276544,
   629  	9965666176, 9974048384, 9982441088, 9990830464, 9999219584,
   630  	10007602816, 10015996544, 10024385152, 10032774016, 10041163648,
   631  	10049548928, 10057940096, 10066329472, 10074717824, 10083105152,
   632  	10091495296, 10099878784, 10108272256, 10116660608, 10125049216,
   633  	10133437312, 10141825664, 10150213504, 10158601088, 10166991232,
   634  	10175378816, 10183766144, 10192157312, 10200545408, 10208935552,
   635  	10217322112, 10225712768, 10234099328, 10242489472, 10250876032,
   636  	10259264896, 10267656064, 10276042624, 10284429184, 10292820352,
   637  	10301209472, 10309598848, 10317987712, 10326375296, 10334763392,
   638  	10343153536, 10351541632, 10359930752, 10368318592, 10376707456,
   639  	10385096576, 10393484672, 10401867136, 10410262144, 10418647424,
   640  	10427039104, 10435425664, 10443810176, 10452203648, 10460589952,
   641  	10468982144, 10477369472, 10485759104, 10494147712, 10502533504,
   642  	10510923392, 10519313536, 10527702656, 10536091264, 10544478592,
   643  	10552867712, 10561255808, 10569642368, 10578032768, 10586423168,
   644  	10594805632, 10603200128, 10611588992, 10619976064, 10628361344,
   645  	10636754048, 10645143424, 10653531776, 10661920384, 10670307968,
   646  	10678696832, 10687086464, 10695475072, 10703863168, 10712246144,
   647  	10720639616, 10729026688, 10737414784, 10745806208, 10754190976,
   648  	10762581376, 10770971264, 10779356288, 10787747456, 10796135552,
   649  	10804525184, 10812915584, 10821301888, 10829692288, 10838078336,
   650  	10846469248, 10854858368, 10863247232, 10871631488, 10880023424,
   651  	10888412032, 10896799616, 10905188992, 10913574016, 10921964672,
   652  	10930352768, 10938742912, 10947132544, 10955518592, 10963909504,
   653  	10972298368, 10980687488, 10989074816, 10997462912, 11005851776,
   654  	11014241152, 11022627712, 11031017344, 11039403904, 11047793024,
   655  	11056184704, 11064570752, 11072960896, 11081343872, 11089737856,
   656  	11098128256, 11106514816, 11114904448, 11123293568, 11131680128,
   657  	11140065152, 11148458368, 11156845696, 11165236864, 11173624192,
   658  	11182013824, 11190402688, 11198790784, 11207179136, 11215568768,
   659  	11223957376, 11232345728, 11240734592, 11249122688, 11257511296,
   660  	11265899648, 11274285952, 11282675584, 11291065472, 11299452544,
   661  	11307842432, 11316231296, 11324616832, 11333009024, 11341395584,
   662  	11349782656, 11358172288, 11366560384, 11374950016, 11383339648,
   663  	11391721856, 11400117376, 11408504192, 11416893568, 11425283456,
   664  	11433671552, 11442061184, 11450444672, 11458837888, 11467226752,
   665  	11475611776, 11484003968, 11492392064, 11500780672, 11509169024,
   666  	11517550976, 11525944448, 11534335616, 11542724224, 11551111808,
   667  	11559500672, 11567890304, 11576277376, 11584667008, 11593056128,
   668  	11601443456, 11609830016, 11618221952, 11626607488, 11634995072,
   669  	11643387776, 11651775104, 11660161664, 11668552576, 11676940928,
   670  	11685330304, 11693718656, 11702106496, 11710496128, 11718882688,
   671  	11727273088, 11735660416, 11744050048, 11752437376, 11760824704,
   672  	11769216128, 11777604736, 11785991296, 11794381952, 11802770048,
   673  	11811157888, 11819548544, 11827932544, 11836324736, 11844713344,
   674  	11853100928, 11861486464, 11869879936, 11878268032, 11886656896,
   675  	11895044992, 11903433088, 11911822976, 11920210816, 11928600448,
   676  	11936987264, 11945375872, 11953761152, 11962151296, 11970543488,
   677  	11978928512, 11987320448, 11995708288, 12004095104, 12012486272,
   678  	12020875136, 12029255552, 12037652096, 12046039168, 12054429568,
   679  	12062813824, 12071206528, 12079594624, 12087983744, 12096371072,
   680  	12104759936, 12113147264, 12121534592, 12129924992, 12138314624,
   681  	12146703232, 12155091584, 12163481216, 12171864704, 12180255872,
   682  	12188643968, 12197034112, 12205424512, 12213811328, 12222199424,
   683  	12230590336, 12238977664, 12247365248, 12255755392, 12264143488,
   684  	12272531584, 12280920448, 12289309568, 12297694592, 12306086528,
   685  	12314475392, 12322865024, 12331253632, 12339640448, 12348029312,
   686  	12356418944, 12364805248, 12373196672, 12381580928, 12389969024,
   687  	12398357632, 12406750592, 12415138432, 12423527552, 12431916416,
   688  	12440304512, 12448692352, 12457081216, 12465467776, 12473859968,
   689  	12482245504, 12490636672, 12499025536, 12507411584, 12515801728,
   690  	12524190592, 12532577152, 12540966272, 12549354368, 12557743232,
   691  	12566129536, 12574523264, 12582911872, 12591299456, 12599688064,
   692  	12608074624, 12616463488, 12624845696, 12633239936, 12641631616,
   693  	12650019968, 12658407296, 12666795136, 12675183232, 12683574656,
   694  	12691960192, 12700350592, 12708740224, 12717128576, 12725515904,
   695  	12733906816, 12742295168, 12750680192, 12759071872, 12767460736,
   696  	12775848832, 12784236928, 12792626816, 12801014656, 12809404288,
   697  	12817789312, 12826181504, 12834568832, 12842954624, 12851345792,
   698  	12859732352, 12868122496, 12876512128, 12884901248, 12893289088,
   699  	12901672832, 12910067584, 12918455168, 12926842496, 12935232896,
   700  	12943620736, 12952009856, 12960396928, 12968786816, 12977176192,
   701  	12985563776, 12993951104, 13002341504, 13010730368, 13019115392,
   702  	13027506304, 13035895168, 13044272512, 13052673152, 13061062528,
   703  	13069446272, 13077838976, 13086227072, 13094613632, 13103000192,
   704  	13111393664, 13119782528, 13128157568, 13136559232, 13144945024,
   705  	13153329536, 13161724288, 13170111872, 13178502784, 13186884736,
   706  	13195279744, 13203667072, 13212057472, 13220445824, 13228832128,
   707  	13237221248, 13245610624, 13254000512, 13262388352, 13270777472,
   708  	13279166336, 13287553408, 13295943296, 13304331904, 13312719488,
   709  	13321108096, 13329494656, 13337885824, 13346274944, 13354663808,
   710  	13363051136, 13371439232, 13379825024, 13388210816, 13396605056,
   711  	13404995456, 13413380224, 13421771392, 13430159744, 13438546048,
   712  	13446937216, 13455326848, 13463708288, 13472103808, 13480492672,
   713  	13488875648, 13497269888, 13505657728, 13514045312, 13522435712,
   714  	13530824576, 13539210112, 13547599232, 13555989376, 13564379008,
   715  	13572766336, 13581154432, 13589544832, 13597932928, 13606320512,
   716  	13614710656, 13623097472, 13631477632, 13639874944, 13648264064,
   717  	13656652928, 13665041792, 13673430656, 13681818496, 13690207616,
   718  	13698595712, 13706982272, 13715373184, 13723762048, 13732150144,
   719  	13740536704, 13748926592, 13757316224, 13765700992, 13774090112,
   720  	13782477952, 13790869376, 13799259008, 13807647872, 13816036736,
   721  	13824425344, 13832814208, 13841202304, 13849591424, 13857978752,
   722  	13866368896, 13874754688, 13883145344, 13891533184, 13899919232,
   723  	13908311168, 13916692096, 13925085056, 13933473152, 13941866368,
   724  	13950253696, 13958643584, 13967032192, 13975417216, 13983807616,
   725  	13992197504, 14000582272, 14008973696, 14017363072, 14025752192,
   726  	14034137984, 14042528384, 14050918016, 14059301504, 14067691648,
   727  	14076083584, 14084470144, 14092852352, 14101249664, 14109635968,
   728  	14118024832, 14126407552, 14134804352, 14143188608, 14151577984,
   729  	14159968384, 14168357248, 14176741504, 14185127296, 14193521024,
   730  	14201911424, 14210301824, 14218685056, 14227067264, 14235467392,
   731  	14243855488, 14252243072, 14260630144, 14269021568, 14277409408,
   732  	14285799296, 14294187904, 14302571392, 14310961792, 14319353728,
   733  	14327738752, 14336130944, 14344518784, 14352906368, 14361296512,
   734  	14369685376, 14378071424, 14386462592, 14394848128, 14403230848,
   735  	14411627392, 14420013952, 14428402304, 14436793472, 14445181568,
   736  	14453569664, 14461959808, 14470347904, 14478737024, 14487122816,
   737  	14495511424, 14503901824, 14512291712, 14520677504, 14529064832,
   738  	14537456768, 14545845632, 14554234496, 14562618496, 14571011456,
   739  	14579398784, 14587789184, 14596172672, 14604564608, 14612953984,
   740  	14621341312, 14629724288, 14638120832, 14646503296, 14654897536,
   741  	14663284864, 14671675264, 14680061056, 14688447616, 14696835968,
   742  	14705228416, 14713616768, 14722003328, 14730392192, 14738784128,
   743  	14747172736, 14755561088, 14763947648, 14772336512, 14780725376,
   744  	14789110144, 14797499776, 14805892736, 14814276992, 14822670208,
   745  	14831056256, 14839444352, 14847836032, 14856222848, 14864612992,
   746  	14872997504, 14881388672, 14889775744, 14898165376, 14906553472,
   747  	14914944896, 14923329664, 14931721856, 14940109696, 14948497024,
   748  	14956887424, 14965276544, 14973663616, 14982053248, 14990439808,
   749  	14998830976, 15007216768, 15015605888, 15023995264, 15032385152,
   750  	15040768384, 15049154944, 15057549184, 15065939072, 15074328448,
   751  	15082715008, 15091104128, 15099493504, 15107879296, 15116269184,
   752  	15124659584, 15133042304, 15141431936, 15149824384, 15158214272,
   753  	15166602368, 15174991232, 15183378304, 15191760512, 15200154496,
   754  	15208542592, 15216931712, 15225323392, 15233708416, 15242098048,
   755  	15250489216, 15258875264, 15267265408, 15275654528, 15284043136,
   756  	15292431488, 15300819584, 15309208192, 15317596544, 15325986176,
   757  	15334374784, 15342763648, 15351151744, 15359540608, 15367929728,
   758  	15376318336, 15384706432, 15393092992, 15401481856, 15409869952,
   759  	15418258816, 15426649984, 15435037568, 15443425664, 15451815296,
   760  	15460203392, 15468589184, 15476979328, 15485369216, 15493755776,
   761  	15502146944, 15510534272, 15518924416, 15527311232, 15535699072,
   762  	15544089472, 15552478336, 15560866688, 15569254528, 15577642624,
   763  	15586031488, 15594419072, 15602809472, 15611199104, 15619586432,
   764  	15627975296, 15636364928, 15644753792, 15653141888, 15661529216,
   765  	15669918848, 15678305152, 15686696576, 15695083136, 15703474048,
   766  	15711861632, 15720251264, 15728636288, 15737027456, 15745417088,
   767  	15753804928, 15762194048, 15770582656, 15778971008, 15787358336,
   768  	15795747712, 15804132224, 15812523392, 15820909696, 15829300096,
   769  	15837691264, 15846071936, 15854466944, 15862855808, 15871244672,
   770  	15879634816, 15888020608, 15896409728, 15904799104, 15913185152,
   771  	15921577088, 15929966464, 15938354816, 15946743424, 15955129472,
   772  	15963519872, 15971907968, 15980296064, 15988684928, 15997073024,
   773  	16005460864, 16013851264, 16022241152, 16030629248, 16039012736,
   774  	16047406976, 16055794816, 16064181376, 16072571264, 16080957824,
   775  	16089346688, 16097737856, 16106125184, 16114514816, 16122904192,
   776  	16131292544, 16139678848, 16148066944, 16156453504, 16164839552,
   777  	16173236096, 16181623424, 16190012032, 16198401152, 16206790528,
   778  	16215177344, 16223567744, 16231956352, 16240344704, 16248731008,
   779  	16257117824, 16265504384, 16273898624, 16282281856, 16290668672,
   780  	16299064192, 16307449216, 16315842176, 16324230016, 16332613504,
   781  	16341006464, 16349394304, 16357783168, 16366172288, 16374561664,
   782  	16382951296, 16391337856, 16399726208, 16408116352, 16416505472,
   783  	16424892032, 16433282176, 16441668224, 16450058624, 16458448768,
   784  	16466836864, 16475224448, 16483613056, 16492001408, 16500391808,
   785  	16508779648, 16517166976, 16525555328, 16533944192, 16542330752,
   786  	16550719616, 16559110528, 16567497088, 16575888512, 16584274816,
   787  	16592665472, 16601051008, 16609442944, 16617832064, 16626218624,
   788  	16634607488, 16642996096, 16651385728, 16659773824, 16668163712,
   789  	16676552576, 16684938112, 16693328768, 16701718144, 16710095488,
   790  	16718492288, 16726883968, 16735272832, 16743661184, 16752049792,
   791  	16760436608, 16768827008, 16777214336, 16785599104, 16793992832,
   792  	16802381696, 16810768768, 16819151744, 16827542656, 16835934848,
   793  	16844323712, 16852711552, 16861101952, 16869489536, 16877876864,
   794  	16886265728, 16894653056, 16903044736, 16911431296, 16919821696,
   795  	16928207488, 16936592768, 16944987776, 16953375616, 16961763968,
   796  	16970152832, 16978540928, 16986929536, 16995319168, 17003704448,
   797  	17012096896, 17020481152, 17028870784, 17037262208, 17045649536,
   798  	17054039936, 17062426496, 17070814336, 17079205504, 17087592064,
   799  	17095978112, 17104369024, 17112759424, 17121147776, 17129536384,
   800  	17137926016, 17146314368, 17154700928, 17163089792, 17171480192,
   801  	17179864192, 17188256896, 17196644992, 17205033856, 17213423488,
   802  	17221811072, 17230198912, 17238588032, 17246976896, 17255360384,
   803  	17263754624, 17272143232, 17280530048, 17288918912, 17297309312,
   804  	17305696384, 17314085504, 17322475136, 17330863744, 17339252096,
   805  	17347640192, 17356026496, 17364413824, 17372796544, 17381190016,
   806  	17389583488, 17397972608, 17406360704, 17414748544, 17423135872,
   807  	17431527296, 17439915904, 17448303232, 17456691584, 17465081728,
   808  	17473468288, 17481857408, 17490247552, 17498635904, 17507022464,
   809  	17515409024, 17523801728, 17532189824, 17540577664, 17548966016,
   810  	17557353344, 17565741184, 17574131584, 17582519168, 17590907008,
   811  	17599296128, 17607687808, 17616076672, 17624455808, 17632852352,
   812  	17641238656, 17649630848, 17658018944, 17666403968, 17674794112,
   813  	17683178368, 17691573376, 17699962496, 17708350592, 17716739968,
   814  	17725126528, 17733517184, 17741898112, 17750293888, 17758673024,
   815  	17767070336, 17775458432, 17783848832, 17792236928, 17800625536,
   816  	17809012352, 17817402752, 17825785984, 17834178944, 17842563968,
   817  	17850955648, 17859344512, 17867732864, 17876119424, 17884511872,
   818  	17892900224, 17901287296, 17909677696, 17918058112, 17926451072,
   819  	17934843776, 17943230848, 17951609216, 17960008576, 17968397696,
   820  	17976784256, 17985175424, 17993564032, 18001952128, 18010339712,
   821  	18018728576, 18027116672, 18035503232, 18043894144, 18052283264,
   822  	18060672128, 18069056384, 18077449856, 18085837184, 18094225792,
   823  	18102613376, 18111004544, 18119388544, 18127781248, 18136170368,
   824  	18144558976, 18152947328, 18161336192, 18169724288, 18178108544,
   825  	18186498944, 18194886784, 18203275648, 18211666048, 18220048768,
   826  	18228444544, 18236833408, 18245220736}
   827  
   828  // cacheSizes is a lookup table for the athash verification cache size for the
   829  // first 2048 epochs (i.e. 61440000 blocks).
   830  var cacheSizes = [maxEpoch]uint64{
   831  	16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072,
   832  	17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088,
   833  	18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208,
   834  	19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968,
   835  	20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216,
   836  	21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104,
   837  	22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096,
   838  	23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112,
   839  	24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488,
   840  	25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096,
   841  	25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472,
   842  	26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744,
   843  	27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504,
   844  	28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752,
   845  	29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976,
   846  	30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248,
   847  	31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392,
   848  	32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768,
   849  	33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992,
   850  	34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984,
   851  	35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976,
   852  	36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656,
   853  	36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904,
   854  	37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672,
   855  	38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632,
   856  	39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032,
   857  	40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304,
   858  	41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912,
   859  	42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696,
   860  	43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432,
   861  	44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448,
   862  	45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208,
   863  	46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328,
   864  	47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936,
   865  	47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312,
   866  	48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712,
   867  	49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472,
   868  	50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848,
   869  	51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968,
   870  	52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576,
   871  	53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744,
   872  	54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248,
   873  	55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856,
   874  	56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488,
   875  	57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632,
   876  	58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984,
   877  	58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512,
   878  	59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968,
   879  	60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752,
   880  	61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512,
   881  	62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656,
   882  	63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392,
   883  	64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792,
   884  	65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296,
   885  	66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672,
   886  	67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304,
   887  	68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912,
   888  	69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184,
   889  	69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816,
   890  	70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168,
   891  	71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568,
   892  	72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944,
   893  	73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832,
   894  	74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544,
   895  	75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072,
   896  	76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832,
   897  	77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336,
   898  	78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664,
   899  	79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472,
   900  	80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848,
   901  	81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304,
   902  	81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984,
   903  	82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464,
   904  	83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608,
   905  	84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496,
   906  	85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112,
   907  	86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632,
   908  	87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264,
   909  	88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384,
   910  	89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376,
   911  	90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776,
   912  	91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384,
   913  	92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912,
   914  	92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136,
   915  	93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896,
   916  	94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016,
   917  	95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544,
   918  	96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536,
   919  	97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168,
   920  	98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928,
   921  	99352384, 99482816, 99614272, 99745472, 99876416, 100007104,
   922  	100138048, 100267072, 100401088, 100529984, 100662592, 100791872,
   923  	100925248, 101056064, 101187392, 101317952, 101449408, 101580608,
   924  	101711296, 101841728, 101973824, 102104896, 102235712, 102366016,
   925  	102498112, 102628672, 102760384, 102890432, 103021888, 103153472,
   926  	103284032, 103415744, 103545152, 103677248, 103808576, 103939648,
   927  	104070976, 104201792, 104332736, 104462528, 104594752, 104725952,
   928  	104854592, 104988608, 105118912, 105247808, 105381184, 105511232,
   929  	105643072, 105774784, 105903296, 106037056, 106167872, 106298944,
   930  	106429504, 106561472, 106691392, 106822592, 106954304, 107085376,
   931  	107216576, 107346368, 107478464, 107609792, 107739712, 107872192,
   932  	108003136, 108131392, 108265408, 108396224, 108527168, 108657344,
   933  	108789568, 108920384, 109049792, 109182272, 109312576, 109444928,
   934  	109572928, 109706944, 109837888, 109969088, 110099648, 110230976,
   935  	110362432, 110492992, 110624704, 110755264, 110886208, 111017408,
   936  	111148864, 111279296, 111410752, 111541952, 111673024, 111803456,
   937  	111933632, 112066496, 112196416, 112328512, 112457792, 112590784,
   938  	112715968, 112852672, 112983616, 113114944, 113244224, 113376448,
   939  	113505472, 113639104, 113770304, 113901376, 114031552, 114163264,
   940  	114294592, 114425536, 114556864, 114687424, 114818624, 114948544,
   941  	115080512, 115212224, 115343296, 115473472, 115605184, 115736128,
   942  	115867072, 115997248, 116128576, 116260288, 116391488, 116522944,
   943  	116652992, 116784704, 116915648, 117046208, 117178304, 117308608,
   944  	117440192, 117569728, 117701824, 117833024, 117964096, 118094656,
   945  	118225984, 118357312, 118489024, 118617536, 118749632, 118882112,
   946  	119012416, 119144384, 119275328, 119406016, 119537344, 119668672,
   947  	119798464, 119928896, 120061376, 120192832, 120321728, 120454336,
   948  	120584512, 120716608, 120848192, 120979136, 121109056, 121241408,
   949  	121372352, 121502912, 121634752, 121764416, 121895744, 122027072,
   950  	122157632, 122289088, 122421184, 122550592, 122682944, 122813888,
   951  	122945344, 123075776, 123207488, 123338048, 123468736, 123600704,
   952  	123731264, 123861952, 123993664, 124124608, 124256192, 124386368,
   953  	124518208, 124649024, 124778048, 124911296, 125041088, 125173696,
   954  	125303744, 125432896, 125566912, 125696576, 125829056, 125958592,
   955  	126090304, 126221248, 126352832, 126483776, 126615232, 126746432,
   956  	126876608, 127008704, 127139392, 127270336, 127401152, 127532224,
   957  	127663552, 127794752, 127925696, 128055232, 128188096, 128319424,
   958  	128449856, 128581312, 128712256, 128843584, 128973632, 129103808,
   959  	129236288, 129365696, 129498944, 129629888, 129760832, 129892288,
   960  	130023104, 130154048, 130283968, 130416448, 130547008, 130678336,
   961  	130807616, 130939456, 131071552, 131202112, 131331776, 131464384,
   962  	131594048, 131727296, 131858368, 131987392, 132120256, 132250816,
   963  	132382528, 132513728, 132644672, 132774976, 132905792, 133038016,
   964  	133168832, 133299392, 133429312, 133562048, 133692992, 133823296,
   965  	133954624, 134086336, 134217152, 134348608, 134479808, 134607296,
   966  	134741056, 134872384, 135002944, 135134144, 135265472, 135396544,
   967  	135527872, 135659072, 135787712, 135921472, 136052416, 136182848,
   968  	136313792, 136444864, 136576448, 136707904, 136837952, 136970048,
   969  	137099584, 137232064, 137363392, 137494208, 137625536, 137755712,
   970  	137887424, 138018368, 138149824, 138280256, 138411584, 138539584,
   971  	138672832, 138804928, 138936128, 139066688, 139196864, 139328704,
   972  	139460032, 139590208, 139721024, 139852864, 139984576, 140115776,
   973  	140245696, 140376512, 140508352, 140640064, 140769856, 140902336,
   974  	141032768, 141162688, 141294016, 141426496, 141556544, 141687488,
   975  	141819584, 141949888, 142080448, 142212544, 142342336, 142474432,
   976  	142606144, 142736192, 142868288, 142997824, 143129408, 143258944,
   977  	143392448, 143523136, 143653696, 143785024, 143916992, 144045632,
   978  	144177856, 144309184, 144440768, 144570688, 144701888, 144832448,
   979  	144965056, 145096384, 145227584, 145358656, 145489856, 145620928,
   980  	145751488, 145883072, 146011456, 146144704, 146275264, 146407232,
   981  	146538176, 146668736, 146800448, 146931392, 147062336, 147193664,
   982  	147324224, 147455936, 147586624, 147717056, 147848768, 147979456,
   983  	148110784, 148242368, 148373312, 148503232, 148635584, 148766144,
   984  	148897088, 149028416, 149159488, 149290688, 149420224, 149551552,
   985  	149683136, 149814976, 149943616, 150076352, 150208064, 150338624,
   986  	150470464, 150600256, 150732224, 150862784, 150993088, 151125952,
   987  	151254976, 151388096, 151519168, 151649728, 151778752, 151911104,
   988  	152042944, 152174144, 152304704, 152435648, 152567488, 152698816,
   989  	152828992, 152960576, 153091648, 153222976, 153353792, 153484096,
   990  	153616192, 153747008, 153878336, 154008256, 154139968, 154270912,
   991  	154402624, 154533824, 154663616, 154795712, 154926272, 155057984,
   992  	155188928, 155319872, 155450816, 155580608, 155712064, 155843392,
   993  	155971136, 156106688, 156237376, 156367424, 156499264, 156630976,
   994  	156761536, 156892352, 157024064, 157155008, 157284416, 157415872,
   995  	157545536, 157677248, 157810496, 157938112, 158071744, 158203328,
   996  	158334656, 158464832, 158596288, 158727616, 158858048, 158988992,
   997  	159121216, 159252416, 159381568, 159513152, 159645632, 159776192,
   998  	159906496, 160038464, 160169536, 160300352, 160430656, 160563008,
   999  	160693952, 160822208, 160956352, 161086784, 161217344, 161349184,
  1000  	161480512, 161611456, 161742272, 161873216, 162002752, 162135872,
  1001  	162266432, 162397888, 162529216, 162660032, 162790976, 162922048,
  1002  	163052096, 163184576, 163314752, 163446592, 163577408, 163707968,
  1003  	163839296, 163969984, 164100928, 164233024, 164364224, 164494912,
  1004  	164625856, 164756672, 164887616, 165019072, 165150016, 165280064,
  1005  	165412672, 165543104, 165674944, 165805888, 165936832, 166067648,
  1006  	166198336, 166330048, 166461248, 166591552, 166722496, 166854208,
  1007  	166985408, 167116736, 167246656, 167378368, 167508416, 167641024,
  1008  	167771584, 167903168, 168034112, 168164032, 168295744, 168427456,
  1009  	168557632, 168688448, 168819136, 168951616, 169082176, 169213504,
  1010  	169344832, 169475648, 169605952, 169738048, 169866304, 169999552,
  1011  	170131264, 170262464, 170393536, 170524352, 170655424, 170782016,
  1012  	170917696, 171048896, 171179072, 171310784, 171439936, 171573184,
  1013  	171702976, 171835072, 171966272, 172097216, 172228288, 172359232,
  1014  	172489664, 172621376, 172747712, 172883264, 173014208, 173144512,
  1015  	173275072, 173407424, 173539136, 173669696, 173800768, 173931712,
  1016  	174063424, 174193472, 174325696, 174455744, 174586816, 174718912,
  1017  	174849728, 174977728, 175109696, 175242688, 175374272, 175504832,
  1018  	175636288, 175765696, 175898432, 176028992, 176159936, 176291264,
  1019  	176422592, 176552512, 176684864, 176815424, 176946496, 177076544,
  1020  	177209152, 177340096, 177470528, 177600704, 177731648, 177864256,
  1021  	177994816, 178126528, 178257472, 178387648, 178518464, 178650176,
  1022  	178781888, 178912064, 179044288, 179174848, 179305024, 179436736,
  1023  	179568448, 179698496, 179830208, 179960512, 180092608, 180223808,
  1024  	180354752, 180485696, 180617152, 180748096, 180877504, 181009984,
  1025  	181139264, 181272512, 181402688, 181532608, 181663168, 181795136,
  1026  	181926592, 182057536, 182190016, 182320192, 182451904, 182582336,
  1027  	182713792, 182843072, 182976064, 183107264, 183237056, 183368384,
  1028  	183494848, 183631424, 183762752, 183893824, 184024768, 184154816,
  1029  	184286656, 184417984, 184548928, 184680128, 184810816, 184941248,
  1030  	185072704, 185203904, 185335616, 185465408, 185596352, 185727296,
  1031  	185859904, 185989696, 186121664, 186252992, 186383552, 186514112,
  1032  	186645952, 186777152, 186907328, 187037504, 187170112, 187301824,
  1033  	187429184, 187562048, 187693504, 187825472, 187957184, 188087104,
  1034  	188218304, 188349376, 188481344, 188609728, 188743616, 188874304,
  1035  	189005248, 189136448, 189265088, 189396544, 189528128, 189660992,
  1036  	189791936, 189923264, 190054208, 190182848, 190315072, 190447424,
  1037  	190577984, 190709312, 190840768, 190971328, 191102656, 191233472,
  1038  	191364032, 191495872, 191626816, 191758016, 191888192, 192020288,
  1039  	192148928, 192282176, 192413504, 192542528, 192674752, 192805952,
  1040  	192937792, 193068608, 193198912, 193330496, 193462208, 193592384,
  1041  	193723456, 193854272, 193985984, 194116672, 194247232, 194379712,
  1042  	194508352, 194641856, 194772544, 194900672, 195035072, 195166016,
  1043  	195296704, 195428032, 195558592, 195690304, 195818176, 195952576,
  1044  	196083392, 196214336, 196345792, 196476736, 196607552, 196739008,
  1045  	196869952, 197000768, 197130688, 197262784, 197394368, 197523904,
  1046  	197656384, 197787584, 197916608, 198049472, 198180544, 198310208,
  1047  	198442432, 198573632, 198705088, 198834368, 198967232, 199097792,
  1048  	199228352, 199360192, 199491392, 199621696, 199751744, 199883968,
  1049  	200014016, 200146624, 200276672, 200408128, 200540096, 200671168,
  1050  	200801984, 200933312, 201062464, 201194944, 201326144, 201457472,
  1051  	201588544, 201719744, 201850816, 201981632, 202111552, 202244032,
  1052  	202374464, 202505152, 202636352, 202767808, 202898368, 203030336,
  1053  	203159872, 203292608, 203423296, 203553472, 203685824, 203816896,
  1054  	203947712, 204078272, 204208192, 204341056, 204472256, 204603328,
  1055  	204733888, 204864448, 204996544, 205125568, 205258304, 205388864,
  1056  	205517632, 205650112, 205782208, 205913536, 206044736, 206176192,
  1057  	206307008, 206434496, 206569024, 206700224, 206831168, 206961856,
  1058  	207093056, 207223616, 207355328, 207486784, 207616832, 207749056,
  1059  	207879104, 208010048, 208141888, 208273216, 208404032, 208534336,
  1060  	208666048, 208796864, 208927424, 209059264, 209189824, 209321792,
  1061  	209451584, 209582656, 209715136, 209845568, 209976896, 210106432,
  1062  	210239296, 210370112, 210501568, 210630976, 210763712, 210894272,
  1063  	211024832, 211156672, 211287616, 211418176, 211549376, 211679296,
  1064  	211812032, 211942592, 212074432, 212204864, 212334016, 212467648,
  1065  	212597824, 212727616, 212860352, 212991424, 213120832, 213253952,
  1066  	213385024, 213515584, 213645632, 213777728, 213909184, 214040128,
  1067  	214170688, 214302656, 214433728, 214564544, 214695232, 214826048,
  1068  	214956992, 215089088, 215219776, 215350592, 215482304, 215613248,
  1069  	215743552, 215874752, 216005312, 216137024, 216267328, 216399296,
  1070  	216530752, 216661696, 216790592, 216923968, 217054528, 217183168,
  1071  	217316672, 217448128, 217579072, 217709504, 217838912, 217972672,
  1072  	218102848, 218233024, 218364736, 218496832, 218627776, 218759104,
  1073  	218888896, 219021248, 219151936, 219281728, 219413056, 219545024,
  1074  	219675968, 219807296, 219938624, 220069312, 220200128, 220331456,
  1075  	220461632, 220592704, 220725184, 220855744, 220987072, 221117888,
  1076  	221249216, 221378368, 221510336, 221642048, 221772736, 221904832,
  1077  	222031808, 222166976, 222297536, 222428992, 222559936, 222690368,
  1078  	222820672, 222953152, 223083968, 223213376, 223345984, 223476928,
  1079  	223608512, 223738688, 223869376, 224001472, 224132672, 224262848,
  1080  	224394944, 224524864, 224657344, 224788288, 224919488, 225050432,
  1081  	225181504, 225312704, 225443776, 225574592, 225704768, 225834176,
  1082  	225966784, 226097216, 226229824, 226360384, 226491712, 226623424,
  1083  	226754368, 226885312, 227015104, 227147456, 227278528, 227409472,
  1084  	227539904, 227669696, 227802944, 227932352, 228065216, 228196288,
  1085  	228326464, 228457792, 228588736, 228720064, 228850112, 228981056,
  1086  	229113152, 229243328, 229375936, 229505344, 229636928, 229769152,
  1087  	229894976, 230030272, 230162368, 230292416, 230424512, 230553152,
  1088  	230684864, 230816704, 230948416, 231079616, 231210944, 231342016,
  1089  	231472448, 231603776, 231733952, 231866176, 231996736, 232127296,
  1090  	232259392, 232388672, 232521664, 232652608, 232782272, 232914496,
  1091  	233043904, 233175616, 233306816, 233438528, 233569984, 233699776,
  1092  	233830592, 233962688, 234092224, 234221888, 234353984, 234485312,
  1093  	234618304, 234749888, 234880832, 235011776, 235142464, 235274048,
  1094  	235403456, 235535936, 235667392, 235797568, 235928768, 236057152,
  1095  	236190272, 236322752, 236453312, 236583616, 236715712, 236846528,
  1096  	236976448, 237108544, 237239104, 237371072, 237501632, 237630784,
  1097  	237764416, 237895232, 238026688, 238157632, 238286912, 238419392,
  1098  	238548032, 238681024, 238812608, 238941632, 239075008, 239206336,
  1099  	239335232, 239466944, 239599168, 239730496, 239861312, 239992384,
  1100  	240122816, 240254656, 240385856, 240516928, 240647872, 240779072,
  1101  	240909632, 241040704, 241171904, 241302848, 241433408, 241565248,
  1102  	241696192, 241825984, 241958848, 242088256, 242220224, 242352064,
  1103  	242481856, 242611648, 242744896, 242876224, 243005632, 243138496,
  1104  	243268672, 243400384, 243531712, 243662656, 243793856, 243924544,
  1105  	244054592, 244187072, 244316608, 244448704, 244580032, 244710976,
  1106  	244841536, 244972864, 245104448, 245233984, 245365312, 245497792,
  1107  	245628736, 245759936, 245889856, 246021056, 246152512, 246284224,
  1108  	246415168, 246545344, 246675904, 246808384, 246939584, 247070144,
  1109  	247199552, 247331648, 247463872, 247593536, 247726016, 247857088,
  1110  	247987648, 248116928, 248249536, 248380736, 248512064, 248643008,
  1111  	248773312, 248901056, 249036608, 249167552, 249298624, 249429184,
  1112  	249560512, 249692096, 249822784, 249954112, 250085312, 250215488,
  1113  	250345792, 250478528, 250608704, 250739264, 250870976, 251002816,
  1114  	251133632, 251263552, 251395136, 251523904, 251657792, 251789248,
  1115  	251919424, 252051392, 252182464, 252313408, 252444224, 252575552,
  1116  	252706624, 252836032, 252968512, 253099712, 253227584, 253361728,
  1117  	253493056, 253623488, 253754432, 253885504, 254017216, 254148032,
  1118  	254279488, 254410432, 254541376, 254672576, 254803264, 254933824,
  1119  	255065792, 255196736, 255326528, 255458752, 255589952, 255721408,
  1120  	255851072, 255983296, 256114624, 256244416, 256374208, 256507712,
  1121  	256636096, 256768832, 256900544, 257031616, 257162176, 257294272,
  1122  	257424448, 257555776, 257686976, 257818432, 257949632, 258079552,
  1123  	258211136, 258342464, 258473408, 258603712, 258734656, 258867008,
  1124  	258996544, 259127744, 259260224, 259391296, 259522112, 259651904,
  1125  	259784384, 259915328, 260045888, 260175424, 260308544, 260438336,
  1126  	260570944, 260700992, 260832448, 260963776, 261092672, 261226304,
  1127  	261356864, 261487936, 261619648, 261750592, 261879872, 262011968,
  1128  	262143424, 262274752, 262404416, 262537024, 262667968, 262799296,
  1129  	262928704, 263061184, 263191744, 263322944, 263454656, 263585216,
  1130  	263716672, 263847872, 263978944, 264108608, 264241088, 264371648,
  1131  	264501184, 264632768, 264764096, 264895936, 265024576, 265158464,
  1132  	265287488, 265418432, 265550528, 265681216, 265813312, 265943488,
  1133  	266075968, 266206144, 266337728, 266468032, 266600384, 266731072,
  1134  	266862272, 266993344, 267124288, 267255616, 267386432, 267516992,
  1135  	267648704, 267777728, 267910592, 268040512, 268172096, 268302784,
  1136  	268435264, 268566208, 268696256, 268828096, 268959296, 269090368,
  1137  	269221312, 269352256, 269482688, 269614784, 269745856, 269876416,
  1138  	270007616, 270139328, 270270272, 270401216, 270531904, 270663616,
  1139  	270791744, 270924736, 271056832, 271186112, 271317184, 271449536,
  1140  	271580992, 271711936, 271843136, 271973056, 272105408, 272236352,
  1141  	272367296, 272498368, 272629568, 272759488, 272891456, 273022784,
  1142  	273153856, 273284672, 273415616, 273547072, 273677632, 273808448,
  1143  	273937088, 274071488, 274200896, 274332992, 274463296, 274595392,
  1144  	274726208, 274857536, 274988992, 275118656, 275250496, 275382208,
  1145  	275513024, 275643968, 275775296, 275906368, 276037184, 276167872,
  1146  	276297664, 276429376, 276560576, 276692672, 276822976, 276955072,
  1147  	277085632, 277216832, 277347008, 277478848, 277609664, 277740992,
  1148  	277868608, 278002624, 278134336, 278265536, 278395328, 278526784,
  1149  	278657728, 278789824, 278921152, 279052096, 279182912, 279313088,
  1150  	279443776, 279576256, 279706048, 279838528, 279969728, 280099648,
  1151  	280230976, 280361408, 280493632, 280622528, 280755392, 280887104,
  1152  	281018176, 281147968, 281278912, 281411392, 281542592, 281673152,
  1153  	281803712, 281935552, 282066496, 282197312, 282329024, 282458816,
  1154  	282590272, 282720832, 282853184, 282983744, 283115072, 283246144,
  1155  	283377344, 283508416, 283639744, 283770304, 283901504, 284032576,
  1156  	284163136, 284294848, 284426176, 284556992, 284687296, 284819264,
  1157  	284950208, 285081536}