github.com/anthdm/go-ethereum@v1.8.4-0.20180412101906-60516c83b011/consensus/ethash/algorithm.go (about)

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