1 /** 2 Whirlpool hashing algorithm implementation. This module conforms to the APIs defined in std.digest. 3 4 Based on the original Whirlpool implementation by Paulo S.L.M. Barreto and Vincent Rijmen. 5 */ 6 module nxt.digestx.whirlpool; 7 8 public import std.digest; 9 import std.range; 10 11 /** 12 * Template API Whirlpool implementation. 13 */ 14 struct Whirlpool 15 { 16 /// Initializes the digest calculation. 17 void start() @safe pure nothrow @nogc 18 { 19 _lenBuf = 0; 20 _bufferPos = 0; 21 _hash[] = 0; 22 _tailBlock = false; 23 _bitLength[] = 0; 24 } 25 26 /// Feed the digest with data. 27 void put(scope const(ubyte)[] data...) @trusted pure nothrow @nogc 28 { 29 bufLength(data.length); 30 31 while (true) 32 { 33 immutable cap = _buffer.length - _bufferPos; 34 if (cap <= data.length) 35 { 36 _buffer[_bufferPos .. $] = data[0 .. cap]; 37 processBuffer(); 38 _bufferPos = 0; 39 40 data = data[cap .. $]; 41 } 42 else 43 { 44 _buffer[_bufferPos .. _bufferPos + data.length] = data; 45 _bufferPos += data.length; 46 47 data = null; 48 break; 49 } 50 } 51 } 52 53 void put(R)(R r) if (isInputRange!R && hasLength!R) 54 { 55 bufLength(r.length); 56 57 foreach (immutable i; r) 58 { 59 _buffer[_bufferPos] = i; 60 _bufferPos++; 61 if (_bufferPos == _buffer.length) 62 { 63 processBuffer(); 64 _bufferPos = 0; 65 } 66 } 67 } 68 69 /// Returns the Whirlpool hash. This also calls start to reset the internal state. 70 ubyte[64] finish() @trusted pure nothrow @nogc 71 { 72 // append a '1'-bit 73 // As the buffer is byte-wise in this implementation, _buffer[_bufferPos] is not used yet. 74 _buffer[_bufferPos] = 0x80; 75 _bufferPos++; 76 77 if (_bufferPos > 32) 78 { 79 _buffer[_bufferPos .. $] = 0; 80 processBuffer(); 81 _bufferPos = 0; 82 } 83 84 if (_bufferPos < 32) 85 _buffer[_bufferPos .. 32] = 0; 86 if (_lenBuf != 0) 87 addLength(_lenBuf); 88 _buffer[32 .. $] = _bitLength; 89 processBuffer(); 90 91 ubyte[64] digest = void; 92 93 for (int i = 0, j = 0; i < 8; i++, j += 8) 94 { 95 immutable h = _hash[i]; 96 digest[j] = cast(ubyte)(h >> 56); 97 digest[j + 1] = cast(ubyte)(h >> 48); 98 digest[j + 2] = cast(ubyte)(h >> 40); 99 digest[j + 3] = cast(ubyte)(h >> 32); 100 digest[j + 4] = cast(ubyte)(h >> 24); 101 digest[j + 5] = cast(ubyte)(h >> 16); 102 digest[j + 6] = cast(ubyte)(h >> 8); 103 digest[j + 7] = cast(ubyte) h; 104 } 105 106 start(); 107 108 return digest; 109 } 110 111 private: 112 113 // buffers sum of data length and add into _bitLength when necessary, 114 // to reduce bignum operation. 115 ulong _lenBuf = void; 116 117 void bufLength(ulong bytes) @safe pure nothrow @nogc 118 { 119 ulong sum = _lenBuf + bytes; 120 if (sum < _lenBuf || sum < bytes) 121 { 122 addLength(_lenBuf); 123 _lenBuf = bytes; 124 } 125 else 126 { 127 _lenBuf = sum; 128 } 129 } 130 131 ubyte[32] _bitLength = void; 132 133 void addLength(ulong bytes) @trusted pure nothrow @nogc 134 { 135 uint carry = _bitLength[31] + ((bytes << 3) & 0xFF); 136 _bitLength[31] = cast(ubyte) carry; 137 carry >>= 8; 138 bytes >>= 5; 139 for (int i = 30; i >= 0; i--) 140 { 141 carry += _bitLength[i] + (bytes & 0xFF); 142 _bitLength[i] = cast(ubyte) carry; 143 carry >>= 8; 144 bytes >>= 8; 145 } 146 } 147 148 ubyte[64] _buffer = void; 149 size_t _bufferPos = void; 150 151 ulong[8] _hash = void; 152 153 bool _tailBlock; 154 155 void processBuffer() @trusted pure nothrow @nogc 156 { 157 ulong[8] block = void; 158 159 // map the buffer to a block 160 for (int i = 0, j = 0; i < 8; i++, j += 8) 161 { 162 block[i] = (cast(ulong) _buffer[j] << 56) ^ (cast(ulong) _buffer[j + 1] << 48) ^ ( 163 cast(ulong) _buffer[j + 2] << 40) ^ (cast(ulong) _buffer[j + 3] << 32) ^ ( 164 cast(ulong) _buffer[j + 4] << 24) ^ (cast(ulong) _buffer[j + 5] << 16) ^ ( 165 cast(ulong) _buffer[j + 6] << 8) ^ (cast(ulong) _buffer[j + 7]); 166 } 167 168 // compute and apply K^0 to the cipher state 169 ulong[8] state = void; 170 state[] = block[] ^ _hash[]; 171 172 // iterate over all rounds 173 if (_tailBlock) // not the first block 174 { 175 ulong[8] K = _hash; 176 177 foreach (immutable rcr; rc) 178 { 179 ulong[8] L = void; 180 181 // compute K^r from K^{r-1} 182 mixin(genTransform("L", "K")); 183 L[0] ^= rcr; 184 185 K = L; 186 187 // apply the r-th round transformation 188 mixin(genTransform("L", "state")); 189 190 state[] = L[] ^ K[]; 191 } 192 } 193 else // use precompiled K[] for first block 194 { 195 foreach (immutable k; pcK) 196 { 197 ulong[8] L = void; 198 mixin(genTransform("L", "state")); 199 state[] = L[] ^ k[]; 200 } 201 202 _tailBlock = true; 203 } 204 205 // apply the Miyaguchi-Preneel compression function: 206 _hash[] ^= state[] ^ block[]; 207 } 208 } 209 210 /// Convenience alias for digest function in std.digest using the Whirlpool implementation. 211 auto whirlpoolOf(T...)(T data) 212 { 213 return digest!(Whirlpool, T)(data); 214 } 215 216 /// OOP API for Whirlpool 217 alias WhirlpoolDigest = WrapperDigest!Whirlpool; 218 219 /// 220 unittest 221 { 222 import nxt.digestx.whirlpool; 223 224 ubyte[1024] data; 225 Whirlpool wp; 226 wp.start(); 227 wp.put(data[]); 228 wp.start(); 229 wp.put(data[]); 230 ubyte[64] hash = wp.finish(); 231 232 // Template API 233 234 ubyte[64] hash2 = whirlpoolOf("abc"); 235 assert(digest!Whirlpool("abc") == hash2); 236 assert(hexDigest!Whirlpool("abc") == toHexString(hash2)); 237 238 // OOP API 239 240 Digest wpDigest = new WhirlpoolDigest; 241 ubyte[] hash3 = wpDigest.digest("abc"); 242 assert(toHexString(hash3) == "4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" 243 ~ "7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 244 } 245 246 @safe pure nothrow /*@nogc*/ unittest 247 { 248 static assert(isDigest!Whirlpool); 249 250 assert(digest!Whirlpool("The quick brown fox jumps over the lazy dog") 251 == hexString!"B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F" 252 ~ hexString!"D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35"); 253 254 // ISO test vectors 255 256 assert(digest!Whirlpool("") == hexString!"19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7" 257 ~ hexString!"3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3"); 258 259 assert(digest!Whirlpool("a") == hexString!"8ACA2602792AEC6F11A67206531FB7D7F0DFF59413145E6973C45001D0087B42" 260 ~ hexString!"D11BC645413AEFF63A42391A39145A591A92200D560195E53B478584FDAE231A"); 261 262 assert(digest!Whirlpool("abc") == hexString!"4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" 263 ~ hexString!"7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 264 265 assert(digest!Whirlpool("message digest") == hexString!"378C84A4126E2DC6E56DCC7458377AAC838D00032230F53CE1F5700C0FFB4D3B" 266 ~ hexString!"8421557659EF55C106B4B52AC5A4AAA692ED920052838F3362E86DBD37A8903E"); 267 268 assert(digest!Whirlpool("abcdefghijklmnopqrstuvwxyz") 269 == hexString!"F1D754662636FFE92C82EBB9212A484A8D38631EAD4238F5442EE13B8054E41B" 270 ~ hexString!"08BF2A9251C30B6A0B8AAE86177AB4A6F68F673E7207865D5D9819A3DBA4EB3B"); 271 272 assert(digest!Whirlpool("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") 273 == hexString!"DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E" 274 ~ hexString!"08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467"); 275 276 assert(digest!Whirlpool("1234567890123456789012345678901234567890" ~ "1234567890123456789012345678901234567890") 277 == hexString!"466EF18BABB0154D25B9D38A6414F5C08784372BCCB204D6549C4AFADB601429" 278 ~ hexString!"4D5BD8DF2A6C44E538CD047B2681A51A2C60481E88C5A20B2C2A80CF3A9A083B"); 279 280 assert(digest!Whirlpool("abcdbcdecdefdefgefghfghighijhijk") 281 == hexString!"2A987EA40F917061F5D6F0A0E4644F488A7A5A52DEEE656207C562F988E95C69" 282 ~ hexString!"16BDC8031BC5BE1B7B947639FE050B56939BAAA0ADFF9AE6745B7B181C3BE3FD"); 283 } 284 285 pure nothrow /*@nogc*/ unittest 286 { 287 import std.range : repeat; 288 289 assert(digest!Whirlpool(repeat('a', 290 10 ^^ 6)) == hexString!"0C99005BEB57EFF50A7CF005560DDF5D29057FD86B20BFD62DECA0F1CCEA4AF5" 291 ~ hexString!"1FC15490EDDC47AF32BB2B66C34FF9AD8C6008AD677F77126953B226E4ED8B01"); 292 } 293 294 @trusted pure nothrow /*@nogc*/ unittest 295 { 296 Whirlpool wp; 297 wp.put(cast(ubyte[])("abc")); 298 wp.start(); 299 wp.put(cast(ubyte[])("abc")); 300 assert(wp.finish() == hexString!"4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C" 301 ~ hexString!"7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5"); 302 } 303 304 private: 305 306 string genTransform(string assignTo, string from) 307 { 308 import std..string : format; 309 310 string ret; 311 foreach (i; 0 .. 8) 312 { 313 ret ~= format("%s[%s]=", assignTo, i); 314 for (int t = 0, s = 56; t < 8; t++, s -= 8) 315 { 316 ret ~= format("C[%s][(%s[%s] >> %s) & 0xFF]", t, from, (i - t) & 7, s); 317 if (t != 7) 318 ret ~= "^"; 319 } 320 ret ~= ";\n"; 321 } 322 return ret; 323 } 324 325 // number of rounds 326 enum int numRounds = 10; 327 328 // circulant table 329 immutable ulong[256][8] C = [ 330 [ 331 0x18186018c07830d8UL, 0x23238c2305af4626UL, 0xc6c63fc67ef991b8UL, 332 0xe8e887e8136fcdfbUL, 0x878726874ca113cbUL, 0xb8b8dab8a9626d11UL, 333 0x0101040108050209UL, 0x4f4f214f426e9e0dUL, 0x3636d836adee6c9bUL, 334 0xa6a6a2a6590451ffUL, 335 0xd2d26fd2debdb90cUL, 0xf5f5f3f5fb06f70eUL, 0x7979f979ef80f296UL, 336 0x6f6fa16f5fcede30UL, 0x91917e91fcef3f6dUL, 0x52525552aa07a4f8UL, 337 0x60609d6027fdc047UL, 0xbcbccabc89766535UL, 0x9b9b569baccd2b37UL, 338 0x8e8e028e048c018aUL, 0xa3a3b6a371155bd2UL, 0x0c0c300c603c186cUL, 339 0x7b7bf17bff8af684UL, 340 0x3535d435b5e16a80UL, 341 0x1d1d741de8693af5UL, 0xe0e0a7e05347ddb3UL, 0xd7d77bd7f6acb321UL, 342 0xc2c22fc25eed999cUL, 0x2e2eb82e6d965c43UL, 0x4b4b314b627a9629UL, 343 0xfefedffea321e15dUL, 0x575741578216aed5UL, 0x15155415a8412abdUL, 344 0x7777c1779fb6eee8UL, 0x3737dc37a5eb6e92UL, 0xe5e5b3e57b56d79eUL, 345 0x9f9f469f8cd92313UL, 346 0xf0f0e7f0d317fd23UL, 347 0x4a4a354a6a7f9420UL, 0xdada4fda9e95a944UL, 0x58587d58fa25b0a2UL, 348 0xc9c903c906ca8fcfUL, 0x2929a429558d527cUL, 0x0a0a280a5022145aUL, 349 0xb1b1feb1e14f7f50UL, 0xa0a0baa0691a5dc9UL, 0x6b6bb16b7fdad614UL, 350 0x85852e855cab17d9UL, 0xbdbdcebd8173673cUL, 0x5d5d695dd234ba8fUL, 351 0x1010401080502090UL, 352 0xf4f4f7f4f303f507UL, 353 0xcbcb0bcb16c08bddUL, 0x3e3ef83eedc67cd3UL, 0x0505140528110a2dUL, 354 0x676781671fe6ce78UL, 0xe4e4b7e47353d597UL, 0x27279c2725bb4e02UL, 355 0x4141194132588273UL, 0x8b8b168b2c9d0ba7UL, 0xa7a7a6a7510153f6UL, 356 0x7d7de97dcf94fab2UL, 0x95956e95dcfb3749UL, 0xd8d847d88e9fad56UL, 357 0xfbfbcbfb8b30eb70UL, 358 0xeeee9fee2371c1cdUL, 359 0x7c7ced7cc791f8bbUL, 0x6666856617e3cc71UL, 0xdddd53dda68ea77bUL, 360 0x17175c17b84b2eafUL, 0x4747014702468e45UL, 0x9e9e429e84dc211aUL, 361 0xcaca0fca1ec589d4UL, 0x2d2db42d75995a58UL, 0xbfbfc6bf9179632eUL, 362 0x07071c07381b0e3fUL, 0xadad8ead012347acUL, 0x5a5a755aea2fb4b0UL, 363 0x838336836cb51befUL, 364 0x3333cc3385ff66b6UL, 365 0x636391633ff2c65cUL, 0x02020802100a0412UL, 0xaaaa92aa39384993UL, 366 0x7171d971afa8e2deUL, 0xc8c807c80ecf8dc6UL, 0x19196419c87d32d1UL, 367 0x494939497270923bUL, 0xd9d943d9869aaf5fUL, 0xf2f2eff2c31df931UL, 368 0xe3e3abe34b48dba8UL, 0x5b5b715be22ab6b9UL, 0x88881a8834920dbcUL, 369 0x9a9a529aa4c8293eUL, 370 0x262698262dbe4c0bUL, 371 0x3232c8328dfa64bfUL, 0xb0b0fab0e94a7d59UL, 0xe9e983e91b6acff2UL, 372 0x0f0f3c0f78331e77UL, 0xd5d573d5e6a6b733UL, 0x80803a8074ba1df4UL, 373 0xbebec2be997c6127UL, 0xcdcd13cd26de87ebUL, 0x3434d034bde46889UL, 374 0x48483d487a759032UL, 0xffffdbffab24e354UL, 0x7a7af57af78ff48dUL, 375 0x90907a90f4ea3d64UL, 376 0x5f5f615fc23ebe9dUL, 377 0x202080201da0403dUL, 0x6868bd6867d5d00fUL, 0x1a1a681ad07234caUL, 378 0xaeae82ae192c41b7UL, 0xb4b4eab4c95e757dUL, 0x54544d549a19a8ceUL, 379 0x93937693ece53b7fUL, 0x222288220daa442fUL, 0x64648d6407e9c863UL, 380 0xf1f1e3f1db12ff2aUL, 0x7373d173bfa2e6ccUL, 0x12124812905a2482UL, 381 0x40401d403a5d807aUL, 382 0x0808200840281048UL, 383 0xc3c32bc356e89b95UL, 0xecec97ec337bc5dfUL, 0xdbdb4bdb9690ab4dUL, 384 0xa1a1bea1611f5fc0UL, 0x8d8d0e8d1c830791UL, 0x3d3df43df5c97ac8UL, 385 0x97976697ccf1335bUL, 0x0000000000000000UL, 0xcfcf1bcf36d483f9UL, 386 0x2b2bac2b4587566eUL, 0x7676c57697b3ece1UL, 0x8282328264b019e6UL, 387 0xd6d67fd6fea9b128UL, 388 0x1b1b6c1bd87736c3UL, 389 0xb5b5eeb5c15b7774UL, 0xafaf86af112943beUL, 0x6a6ab56a77dfd41dUL, 390 0x50505d50ba0da0eaUL, 0x45450945124c8a57UL, 0xf3f3ebf3cb18fb38UL, 391 0x3030c0309df060adUL, 0xefef9bef2b74c3c4UL, 0x3f3ffc3fe5c37edaUL, 392 0x55554955921caac7UL, 0xa2a2b2a2791059dbUL, 0xeaea8fea0365c9e9UL, 393 0x656589650fecca6aUL, 394 0xbabad2bab9686903UL, 395 0x2f2fbc2f65935e4aUL, 0xc0c027c04ee79d8eUL, 0xdede5fdebe81a160UL, 396 0x1c1c701ce06c38fcUL, 0xfdfdd3fdbb2ee746UL, 0x4d4d294d52649a1fUL, 397 0x92927292e4e03976UL, 0x7575c9758fbceafaUL, 0x06061806301e0c36UL, 398 0x8a8a128a249809aeUL, 0xb2b2f2b2f940794bUL, 0xe6e6bfe66359d185UL, 399 0x0e0e380e70361c7eUL, 400 0x1f1f7c1ff8633ee7UL, 401 0x6262956237f7c455UL, 0xd4d477d4eea3b53aUL, 0xa8a89aa829324d81UL, 402 0x96966296c4f43152UL, 0xf9f9c3f99b3aef62UL, 0xc5c533c566f697a3UL, 403 0x2525942535b14a10UL, 0x59597959f220b2abUL, 0x84842a8454ae15d0UL, 404 0x7272d572b7a7e4c5UL, 0x3939e439d5dd72ecUL, 0x4c4c2d4c5a619816UL, 405 0x5e5e655eca3bbc94UL, 406 0x7878fd78e785f09fUL, 407 0x3838e038ddd870e5UL, 0x8c8c0a8c14860598UL, 0xd1d163d1c6b2bf17UL, 408 0xa5a5aea5410b57e4UL, 0xe2e2afe2434dd9a1UL, 0x616199612ff8c24eUL, 409 0xb3b3f6b3f1457b42UL, 0x2121842115a54234UL, 0x9c9c4a9c94d62508UL, 410 0x1e1e781ef0663ceeUL, 0x4343114322528661UL, 0xc7c73bc776fc93b1UL, 411 0xfcfcd7fcb32be54fUL, 412 0x0404100420140824UL, 413 0x51515951b208a2e3UL, 0x99995e99bcc72f25UL, 0x6d6da96d4fc4da22UL, 414 0x0d0d340d68391a65UL, 0xfafacffa8335e979UL, 0xdfdf5bdfb684a369UL, 415 0x7e7ee57ed79bfca9UL, 0x242490243db44819UL, 0x3b3bec3bc5d776feUL, 416 0xabab96ab313d4b9aUL, 0xcece1fce3ed181f0UL, 0x1111441188552299UL, 417 0x8f8f068f0c890383UL, 418 0x4e4e254e4a6b9c04UL, 419 0xb7b7e6b7d1517366UL, 0xebeb8beb0b60cbe0UL, 0x3c3cf03cfdcc78c1UL, 420 0x81813e817cbf1ffdUL, 0x94946a94d4fe3540UL, 0xf7f7fbf7eb0cf31cUL, 421 0xb9b9deb9a1676f18UL, 0x13134c13985f268bUL, 0x2c2cb02c7d9c5851UL, 422 0xd3d36bd3d6b8bb05UL, 0xe7e7bbe76b5cd38cUL, 0x6e6ea56e57cbdc39UL, 423 0xc4c437c46ef395aaUL, 424 0x03030c03180f061bUL, 425 0x565645568a13acdcUL, 0x44440d441a49885eUL, 0x7f7fe17fdf9efea0UL, 426 0xa9a99ea921374f88UL, 0x2a2aa82a4d825467UL, 0xbbbbd6bbb16d6b0aUL, 427 0xc1c123c146e29f87UL, 0x53535153a202a6f1UL, 0xdcdc57dcae8ba572UL, 428 0x0b0b2c0b58271653UL, 0x9d9d4e9d9cd32701UL, 0x6c6cad6c47c1d82bUL, 429 0x3131c43195f562a4UL, 430 0x7474cd7487b9e8f3UL, 431 0xf6f6fff6e309f115UL, 0x464605460a438c4cUL, 0xacac8aac092645a5UL, 432 0x89891e893c970fb5UL, 0x14145014a04428b4UL, 0xe1e1a3e15b42dfbaUL, 433 0x16165816b04e2ca6UL, 0x3a3ae83acdd274f7UL, 0x6969b9696fd0d206UL, 434 0x09092409482d1241UL, 0x7070dd70a7ade0d7UL, 0xb6b6e2b6d954716fUL, 435 0xd0d067d0ceb7bd1eUL, 436 0xeded93ed3b7ec7d6UL, 437 0xcccc17cc2edb85e2UL, 0x424215422a578468UL, 0x98985a98b4c22d2cUL, 438 0xa4a4aaa4490e55edUL, 0x2828a0285d885075UL, 0x5c5c6d5cda31b886UL, 439 0xf8f8c7f8933fed6bUL, 0x8686228644a411c2UL, 440 ], [ 441 0xd818186018c07830UL, 0x2623238c2305af46UL, 0xb8c6c63fc67ef991UL, 442 0xfbe8e887e8136fcdUL, 0xcb878726874ca113UL, 0x11b8b8dab8a9626dUL, 443 0x0901010401080502UL, 0x0d4f4f214f426e9eUL, 0x9b3636d836adee6cUL, 444 0xffa6a6a2a6590451UL, 445 0x0cd2d26fd2debdb9UL, 0x0ef5f5f3f5fb06f7UL, 0x967979f979ef80f2UL, 446 0x306f6fa16f5fcedeUL, 0x6d91917e91fcef3fUL, 0xf852525552aa07a4UL, 447 0x4760609d6027fdc0UL, 0x35bcbccabc897665UL, 0x379b9b569baccd2bUL, 448 0x8a8e8e028e048c01UL, 0xd2a3a3b6a371155bUL, 0x6c0c0c300c603c18UL, 449 0x847b7bf17bff8af6UL, 450 0x803535d435b5e16aUL, 451 0xf51d1d741de8693aUL, 0xb3e0e0a7e05347ddUL, 0x21d7d77bd7f6acb3UL, 452 0x9cc2c22fc25eed99UL, 0x432e2eb82e6d965cUL, 0x294b4b314b627a96UL, 453 0x5dfefedffea321e1UL, 0xd5575741578216aeUL, 0xbd15155415a8412aUL, 454 0xe87777c1779fb6eeUL, 0x923737dc37a5eb6eUL, 0x9ee5e5b3e57b56d7UL, 455 0x139f9f469f8cd923UL, 456 0x23f0f0e7f0d317fdUL, 457 0x204a4a354a6a7f94UL, 0x44dada4fda9e95a9UL, 0xa258587d58fa25b0UL, 458 0xcfc9c903c906ca8fUL, 0x7c2929a429558d52UL, 0x5a0a0a280a502214UL, 459 0x50b1b1feb1e14f7fUL, 0xc9a0a0baa0691a5dUL, 0x146b6bb16b7fdad6UL, 460 0xd985852e855cab17UL, 0x3cbdbdcebd817367UL, 0x8f5d5d695dd234baUL, 461 0x9010104010805020UL, 462 0x07f4f4f7f4f303f5UL, 463 0xddcbcb0bcb16c08bUL, 0xd33e3ef83eedc67cUL, 0x2d0505140528110aUL, 464 0x78676781671fe6ceUL, 0x97e4e4b7e47353d5UL, 0x0227279c2725bb4eUL, 465 0x7341411941325882UL, 0xa78b8b168b2c9d0bUL, 0xf6a7a7a6a7510153UL, 466 0xb27d7de97dcf94faUL, 0x4995956e95dcfb37UL, 0x56d8d847d88e9fadUL, 467 0x70fbfbcbfb8b30ebUL, 468 0xcdeeee9fee2371c1UL, 469 0xbb7c7ced7cc791f8UL, 0x716666856617e3ccUL, 0x7bdddd53dda68ea7UL, 470 0xaf17175c17b84b2eUL, 0x454747014702468eUL, 0x1a9e9e429e84dc21UL, 471 0xd4caca0fca1ec589UL, 0x582d2db42d75995aUL, 0x2ebfbfc6bf917963UL, 472 0x3f07071c07381b0eUL, 0xacadad8ead012347UL, 0xb05a5a755aea2fb4UL, 473 0xef838336836cb51bUL, 474 0xb63333cc3385ff66UL, 475 0x5c636391633ff2c6UL, 0x1202020802100a04UL, 0x93aaaa92aa393849UL, 476 0xde7171d971afa8e2UL, 0xc6c8c807c80ecf8dUL, 0xd119196419c87d32UL, 477 0x3b49493949727092UL, 0x5fd9d943d9869aafUL, 0x31f2f2eff2c31df9UL, 478 0xa8e3e3abe34b48dbUL, 0xb95b5b715be22ab6UL, 0xbc88881a8834920dUL, 479 0x3e9a9a529aa4c829UL, 480 0x0b262698262dbe4cUL, 481 0xbf3232c8328dfa64UL, 0x59b0b0fab0e94a7dUL, 0xf2e9e983e91b6acfUL, 482 0x770f0f3c0f78331eUL, 0x33d5d573d5e6a6b7UL, 0xf480803a8074ba1dUL, 483 0x27bebec2be997c61UL, 0xebcdcd13cd26de87UL, 0x893434d034bde468UL, 484 0x3248483d487a7590UL, 0x54ffffdbffab24e3UL, 0x8d7a7af57af78ff4UL, 485 0x6490907a90f4ea3dUL, 486 0x9d5f5f615fc23ebeUL, 487 0x3d202080201da040UL, 0x0f6868bd6867d5d0UL, 0xca1a1a681ad07234UL, 488 0xb7aeae82ae192c41UL, 0x7db4b4eab4c95e75UL, 0xce54544d549a19a8UL, 489 0x7f93937693ece53bUL, 0x2f222288220daa44UL, 0x6364648d6407e9c8UL, 490 0x2af1f1e3f1db12ffUL, 0xcc7373d173bfa2e6UL, 0x8212124812905a24UL, 491 0x7a40401d403a5d80UL, 492 0x4808082008402810UL, 493 0x95c3c32bc356e89bUL, 0xdfecec97ec337bc5UL, 0x4ddbdb4bdb9690abUL, 494 0xc0a1a1bea1611f5fUL, 0x918d8d0e8d1c8307UL, 0xc83d3df43df5c97aUL, 495 0x5b97976697ccf133UL, 0x0000000000000000UL, 0xf9cfcf1bcf36d483UL, 496 0x6e2b2bac2b458756UL, 0xe17676c57697b3ecUL, 0xe68282328264b019UL, 497 0x28d6d67fd6fea9b1UL, 498 0xc31b1b6c1bd87736UL, 499 0x74b5b5eeb5c15b77UL, 0xbeafaf86af112943UL, 0x1d6a6ab56a77dfd4UL, 500 0xea50505d50ba0da0UL, 0x5745450945124c8aUL, 0x38f3f3ebf3cb18fbUL, 501 0xad3030c0309df060UL, 0xc4efef9bef2b74c3UL, 0xda3f3ffc3fe5c37eUL, 502 0xc755554955921caaUL, 0xdba2a2b2a2791059UL, 0xe9eaea8fea0365c9UL, 503 0x6a656589650feccaUL, 504 0x03babad2bab96869UL, 505 0x4a2f2fbc2f65935eUL, 0x8ec0c027c04ee79dUL, 0x60dede5fdebe81a1UL, 506 0xfc1c1c701ce06c38UL, 0x46fdfdd3fdbb2ee7UL, 0x1f4d4d294d52649aUL, 507 0x7692927292e4e039UL, 0xfa7575c9758fbceaUL, 0x3606061806301e0cUL, 508 0xae8a8a128a249809UL, 0x4bb2b2f2b2f94079UL, 0x85e6e6bfe66359d1UL, 509 0x7e0e0e380e70361cUL, 510 0xe71f1f7c1ff8633eUL, 511 0x556262956237f7c4UL, 0x3ad4d477d4eea3b5UL, 0x81a8a89aa829324dUL, 512 0x5296966296c4f431UL, 0x62f9f9c3f99b3aefUL, 0xa3c5c533c566f697UL, 513 0x102525942535b14aUL, 0xab59597959f220b2UL, 0xd084842a8454ae15UL, 514 0xc57272d572b7a7e4UL, 0xec3939e439d5dd72UL, 0x164c4c2d4c5a6198UL, 515 0x945e5e655eca3bbcUL, 516 0x9f7878fd78e785f0UL, 517 0xe53838e038ddd870UL, 0x988c8c0a8c148605UL, 0x17d1d163d1c6b2bfUL, 518 0xe4a5a5aea5410b57UL, 0xa1e2e2afe2434dd9UL, 0x4e616199612ff8c2UL, 519 0x42b3b3f6b3f1457bUL, 0x342121842115a542UL, 0x089c9c4a9c94d625UL, 520 0xee1e1e781ef0663cUL, 0x6143431143225286UL, 0xb1c7c73bc776fc93UL, 521 0x4ffcfcd7fcb32be5UL, 522 0x2404041004201408UL, 523 0xe351515951b208a2UL, 0x2599995e99bcc72fUL, 0x226d6da96d4fc4daUL, 524 0x650d0d340d68391aUL, 0x79fafacffa8335e9UL, 0x69dfdf5bdfb684a3UL, 525 0xa97e7ee57ed79bfcUL, 0x19242490243db448UL, 0xfe3b3bec3bc5d776UL, 526 0x9aabab96ab313d4bUL, 0xf0cece1fce3ed181UL, 0x9911114411885522UL, 527 0x838f8f068f0c8903UL, 528 0x044e4e254e4a6b9cUL, 529 0x66b7b7e6b7d15173UL, 0xe0ebeb8beb0b60cbUL, 0xc13c3cf03cfdcc78UL, 530 0xfd81813e817cbf1fUL, 0x4094946a94d4fe35UL, 0x1cf7f7fbf7eb0cf3UL, 531 0x18b9b9deb9a1676fUL, 0x8b13134c13985f26UL, 0x512c2cb02c7d9c58UL, 532 0x05d3d36bd3d6b8bbUL, 0x8ce7e7bbe76b5cd3UL, 0x396e6ea56e57cbdcUL, 533 0xaac4c437c46ef395UL, 534 0x1b03030c03180f06UL, 535 0xdc565645568a13acUL, 0x5e44440d441a4988UL, 0xa07f7fe17fdf9efeUL, 536 0x88a9a99ea921374fUL, 0x672a2aa82a4d8254UL, 0x0abbbbd6bbb16d6bUL, 537 0x87c1c123c146e29fUL, 0xf153535153a202a6UL, 0x72dcdc57dcae8ba5UL, 538 0x530b0b2c0b582716UL, 0x019d9d4e9d9cd327UL, 0x2b6c6cad6c47c1d8UL, 539 0xa43131c43195f562UL, 540 0xf37474cd7487b9e8UL, 541 0x15f6f6fff6e309f1UL, 0x4c464605460a438cUL, 0xa5acac8aac092645UL, 542 0xb589891e893c970fUL, 0xb414145014a04428UL, 0xbae1e1a3e15b42dfUL, 543 0xa616165816b04e2cUL, 0xf73a3ae83acdd274UL, 0x066969b9696fd0d2UL, 544 0x4109092409482d12UL, 0xd77070dd70a7ade0UL, 0x6fb6b6e2b6d95471UL, 545 0x1ed0d067d0ceb7bdUL, 546 0xd6eded93ed3b7ec7UL, 547 0xe2cccc17cc2edb85UL, 0x68424215422a5784UL, 0x2c98985a98b4c22dUL, 548 0xeda4a4aaa4490e55UL, 0x752828a0285d8850UL, 0x865c5c6d5cda31b8UL, 549 0x6bf8f8c7f8933fedUL, 0xc28686228644a411UL, 550 ], [ 551 0x30d818186018c078UL, 0x462623238c2305afUL, 0x91b8c6c63fc67ef9UL, 552 0xcdfbe8e887e8136fUL, 0x13cb878726874ca1UL, 0x6d11b8b8dab8a962UL, 553 0x0209010104010805UL, 0x9e0d4f4f214f426eUL, 0x6c9b3636d836adeeUL, 554 0x51ffa6a6a2a65904UL, 555 0xb90cd2d26fd2debdUL, 0xf70ef5f5f3f5fb06UL, 0xf2967979f979ef80UL, 556 0xde306f6fa16f5fceUL, 0x3f6d91917e91fcefUL, 0xa4f852525552aa07UL, 557 0xc04760609d6027fdUL, 0x6535bcbccabc8976UL, 0x2b379b9b569baccdUL, 558 0x018a8e8e028e048cUL, 0x5bd2a3a3b6a37115UL, 0x186c0c0c300c603cUL, 559 0xf6847b7bf17bff8aUL, 560 0x6a803535d435b5e1UL, 561 0x3af51d1d741de869UL, 0xddb3e0e0a7e05347UL, 0xb321d7d77bd7f6acUL, 562 0x999cc2c22fc25eedUL, 0x5c432e2eb82e6d96UL, 0x96294b4b314b627aUL, 563 0xe15dfefedffea321UL, 0xaed5575741578216UL, 0x2abd15155415a841UL, 564 0xeee87777c1779fb6UL, 0x6e923737dc37a5ebUL, 0xd79ee5e5b3e57b56UL, 565 0x23139f9f469f8cd9UL, 566 0xfd23f0f0e7f0d317UL, 567 0x94204a4a354a6a7fUL, 0xa944dada4fda9e95UL, 0xb0a258587d58fa25UL, 568 0x8fcfc9c903c906caUL, 0x527c2929a429558dUL, 0x145a0a0a280a5022UL, 569 0x7f50b1b1feb1e14fUL, 0x5dc9a0a0baa0691aUL, 0xd6146b6bb16b7fdaUL, 570 0x17d985852e855cabUL, 0x673cbdbdcebd8173UL, 0xba8f5d5d695dd234UL, 571 0x2090101040108050UL, 572 0xf507f4f4f7f4f303UL, 573 0x8bddcbcb0bcb16c0UL, 0x7cd33e3ef83eedc6UL, 0x0a2d050514052811UL, 574 0xce78676781671fe6UL, 0xd597e4e4b7e47353UL, 0x4e0227279c2725bbUL, 575 0x8273414119413258UL, 0x0ba78b8b168b2c9dUL, 0x53f6a7a7a6a75101UL, 576 0xfab27d7de97dcf94UL, 0x374995956e95dcfbUL, 0xad56d8d847d88e9fUL, 577 0xeb70fbfbcbfb8b30UL, 578 0xc1cdeeee9fee2371UL, 579 0xf8bb7c7ced7cc791UL, 0xcc716666856617e3UL, 0xa77bdddd53dda68eUL, 580 0x2eaf17175c17b84bUL, 0x8e45474701470246UL, 0x211a9e9e429e84dcUL, 581 0x89d4caca0fca1ec5UL, 0x5a582d2db42d7599UL, 0x632ebfbfc6bf9179UL, 582 0x0e3f07071c07381bUL, 0x47acadad8ead0123UL, 0xb4b05a5a755aea2fUL, 583 0x1bef838336836cb5UL, 584 0x66b63333cc3385ffUL, 585 0xc65c636391633ff2UL, 0x041202020802100aUL, 0x4993aaaa92aa3938UL, 586 0xe2de7171d971afa8UL, 0x8dc6c8c807c80ecfUL, 0x32d119196419c87dUL, 587 0x923b494939497270UL, 0xaf5fd9d943d9869aUL, 0xf931f2f2eff2c31dUL, 588 0xdba8e3e3abe34b48UL, 0xb6b95b5b715be22aUL, 0x0dbc88881a883492UL, 589 0x293e9a9a529aa4c8UL, 590 0x4c0b262698262dbeUL, 591 0x64bf3232c8328dfaUL, 0x7d59b0b0fab0e94aUL, 0xcff2e9e983e91b6aUL, 592 0x1e770f0f3c0f7833UL, 0xb733d5d573d5e6a6UL, 0x1df480803a8074baUL, 593 0x6127bebec2be997cUL, 0x87ebcdcd13cd26deUL, 0x68893434d034bde4UL, 594 0x903248483d487a75UL, 0xe354ffffdbffab24UL, 0xf48d7a7af57af78fUL, 595 0x3d6490907a90f4eaUL, 596 0xbe9d5f5f615fc23eUL, 597 0x403d202080201da0UL, 0xd00f6868bd6867d5UL, 0x34ca1a1a681ad072UL, 598 0x41b7aeae82ae192cUL, 0x757db4b4eab4c95eUL, 0xa8ce54544d549a19UL, 599 0x3b7f93937693ece5UL, 0x442f222288220daaUL, 0xc86364648d6407e9UL, 600 0xff2af1f1e3f1db12UL, 0xe6cc7373d173bfa2UL, 0x248212124812905aUL, 601 0x807a40401d403a5dUL, 602 0x1048080820084028UL, 603 0x9b95c3c32bc356e8UL, 0xc5dfecec97ec337bUL, 0xab4ddbdb4bdb9690UL, 604 0x5fc0a1a1bea1611fUL, 0x07918d8d0e8d1c83UL, 0x7ac83d3df43df5c9UL, 605 0x335b97976697ccf1UL, 0x0000000000000000UL, 0x83f9cfcf1bcf36d4UL, 606 0x566e2b2bac2b4587UL, 0xece17676c57697b3UL, 0x19e68282328264b0UL, 607 0xb128d6d67fd6fea9UL, 608 0x36c31b1b6c1bd877UL, 609 0x7774b5b5eeb5c15bUL, 0x43beafaf86af1129UL, 0xd41d6a6ab56a77dfUL, 610 0xa0ea50505d50ba0dUL, 0x8a5745450945124cUL, 0xfb38f3f3ebf3cb18UL, 611 0x60ad3030c0309df0UL, 0xc3c4efef9bef2b74UL, 0x7eda3f3ffc3fe5c3UL, 612 0xaac755554955921cUL, 0x59dba2a2b2a27910UL, 0xc9e9eaea8fea0365UL, 613 0xca6a656589650fecUL, 614 0x6903babad2bab968UL, 615 0x5e4a2f2fbc2f6593UL, 0x9d8ec0c027c04ee7UL, 0xa160dede5fdebe81UL, 616 0x38fc1c1c701ce06cUL, 0xe746fdfdd3fdbb2eUL, 0x9a1f4d4d294d5264UL, 617 0x397692927292e4e0UL, 0xeafa7575c9758fbcUL, 0x0c3606061806301eUL, 618 0x09ae8a8a128a2498UL, 0x794bb2b2f2b2f940UL, 0xd185e6e6bfe66359UL, 619 0x1c7e0e0e380e7036UL, 620 0x3ee71f1f7c1ff863UL, 621 0xc4556262956237f7UL, 0xb53ad4d477d4eea3UL, 0x4d81a8a89aa82932UL, 622 0x315296966296c4f4UL, 0xef62f9f9c3f99b3aUL, 0x97a3c5c533c566f6UL, 623 0x4a102525942535b1UL, 0xb2ab59597959f220UL, 0x15d084842a8454aeUL, 624 0xe4c57272d572b7a7UL, 0x72ec3939e439d5ddUL, 0x98164c4c2d4c5a61UL, 625 0xbc945e5e655eca3bUL, 626 0xf09f7878fd78e785UL, 627 0x70e53838e038ddd8UL, 0x05988c8c0a8c1486UL, 0xbf17d1d163d1c6b2UL, 628 0x57e4a5a5aea5410bUL, 0xd9a1e2e2afe2434dUL, 0xc24e616199612ff8UL, 629 0x7b42b3b3f6b3f145UL, 0x42342121842115a5UL, 0x25089c9c4a9c94d6UL, 630 0x3cee1e1e781ef066UL, 0x8661434311432252UL, 0x93b1c7c73bc776fcUL, 631 0xe54ffcfcd7fcb32bUL, 632 0x0824040410042014UL, 633 0xa2e351515951b208UL, 0x2f2599995e99bcc7UL, 0xda226d6da96d4fc4UL, 634 0x1a650d0d340d6839UL, 0xe979fafacffa8335UL, 0xa369dfdf5bdfb684UL, 635 0xfca97e7ee57ed79bUL, 0x4819242490243db4UL, 0x76fe3b3bec3bc5d7UL, 636 0x4b9aabab96ab313dUL, 0x81f0cece1fce3ed1UL, 0x2299111144118855UL, 637 0x03838f8f068f0c89UL, 638 0x9c044e4e254e4a6bUL, 639 0x7366b7b7e6b7d151UL, 0xcbe0ebeb8beb0b60UL, 0x78c13c3cf03cfdccUL, 640 0x1ffd81813e817cbfUL, 0x354094946a94d4feUL, 0xf31cf7f7fbf7eb0cUL, 641 0x6f18b9b9deb9a167UL, 0x268b13134c13985fUL, 0x58512c2cb02c7d9cUL, 642 0xbb05d3d36bd3d6b8UL, 0xd38ce7e7bbe76b5cUL, 0xdc396e6ea56e57cbUL, 643 0x95aac4c437c46ef3UL, 644 0x061b03030c03180fUL, 645 0xacdc565645568a13UL, 0x885e44440d441a49UL, 0xfea07f7fe17fdf9eUL, 646 0x4f88a9a99ea92137UL, 0x54672a2aa82a4d82UL, 0x6b0abbbbd6bbb16dUL, 647 0x9f87c1c123c146e2UL, 0xa6f153535153a202UL, 0xa572dcdc57dcae8bUL, 648 0x16530b0b2c0b5827UL, 0x27019d9d4e9d9cd3UL, 0xd82b6c6cad6c47c1UL, 649 0x62a43131c43195f5UL, 650 0xe8f37474cd7487b9UL, 651 0xf115f6f6fff6e309UL, 0x8c4c464605460a43UL, 0x45a5acac8aac0926UL, 652 0x0fb589891e893c97UL, 0x28b414145014a044UL, 0xdfbae1e1a3e15b42UL, 653 0x2ca616165816b04eUL, 0x74f73a3ae83acdd2UL, 0xd2066969b9696fd0UL, 654 0x124109092409482dUL, 0xe0d77070dd70a7adUL, 0x716fb6b6e2b6d954UL, 655 0xbd1ed0d067d0ceb7UL, 656 0xc7d6eded93ed3b7eUL, 657 0x85e2cccc17cc2edbUL, 0x8468424215422a57UL, 0x2d2c98985a98b4c2UL, 658 0x55eda4a4aaa4490eUL, 0x50752828a0285d88UL, 0xb8865c5c6d5cda31UL, 659 0xed6bf8f8c7f8933fUL, 0x11c28686228644a4UL, 660 ], [ 661 0x7830d818186018c0UL, 0xaf462623238c2305UL, 0xf991b8c6c63fc67eUL, 662 0x6fcdfbe8e887e813UL, 0xa113cb878726874cUL, 0x626d11b8b8dab8a9UL, 663 0x0502090101040108UL, 0x6e9e0d4f4f214f42UL, 0xee6c9b3636d836adUL, 664 0x0451ffa6a6a2a659UL, 665 0xbdb90cd2d26fd2deUL, 0x06f70ef5f5f3f5fbUL, 0x80f2967979f979efUL, 666 0xcede306f6fa16f5fUL, 0xef3f6d91917e91fcUL, 0x07a4f852525552aaUL, 667 0xfdc04760609d6027UL, 0x766535bcbccabc89UL, 0xcd2b379b9b569bacUL, 668 0x8c018a8e8e028e04UL, 0x155bd2a3a3b6a371UL, 0x3c186c0c0c300c60UL, 669 0x8af6847b7bf17bffUL, 670 0xe16a803535d435b5UL, 671 0x693af51d1d741de8UL, 0x47ddb3e0e0a7e053UL, 0xacb321d7d77bd7f6UL, 672 0xed999cc2c22fc25eUL, 0x965c432e2eb82e6dUL, 0x7a96294b4b314b62UL, 673 0x21e15dfefedffea3UL, 0x16aed55757415782UL, 0x412abd15155415a8UL, 674 0xb6eee87777c1779fUL, 0xeb6e923737dc37a5UL, 0x56d79ee5e5b3e57bUL, 675 0xd923139f9f469f8cUL, 676 0x17fd23f0f0e7f0d3UL, 677 0x7f94204a4a354a6aUL, 0x95a944dada4fda9eUL, 0x25b0a258587d58faUL, 678 0xca8fcfc9c903c906UL, 0x8d527c2929a42955UL, 0x22145a0a0a280a50UL, 679 0x4f7f50b1b1feb1e1UL, 0x1a5dc9a0a0baa069UL, 0xdad6146b6bb16b7fUL, 680 0xab17d985852e855cUL, 0x73673cbdbdcebd81UL, 0x34ba8f5d5d695dd2UL, 681 0x5020901010401080UL, 682 0x03f507f4f4f7f4f3UL, 683 0xc08bddcbcb0bcb16UL, 0xc67cd33e3ef83eedUL, 0x110a2d0505140528UL, 684 0xe6ce78676781671fUL, 0x53d597e4e4b7e473UL, 0xbb4e0227279c2725UL, 685 0x5882734141194132UL, 0x9d0ba78b8b168b2cUL, 0x0153f6a7a7a6a751UL, 686 0x94fab27d7de97dcfUL, 0xfb374995956e95dcUL, 0x9fad56d8d847d88eUL, 687 0x30eb70fbfbcbfb8bUL, 688 0x71c1cdeeee9fee23UL, 689 0x91f8bb7c7ced7cc7UL, 0xe3cc716666856617UL, 0x8ea77bdddd53dda6UL, 690 0x4b2eaf17175c17b8UL, 0x468e454747014702UL, 0xdc211a9e9e429e84UL, 691 0xc589d4caca0fca1eUL, 0x995a582d2db42d75UL, 0x79632ebfbfc6bf91UL, 692 0x1b0e3f07071c0738UL, 0x2347acadad8ead01UL, 0x2fb4b05a5a755aeaUL, 693 0xb51bef838336836cUL, 694 0xff66b63333cc3385UL, 695 0xf2c65c636391633fUL, 0x0a04120202080210UL, 0x384993aaaa92aa39UL, 696 0xa8e2de7171d971afUL, 0xcf8dc6c8c807c80eUL, 0x7d32d119196419c8UL, 697 0x70923b4949394972UL, 0x9aaf5fd9d943d986UL, 0x1df931f2f2eff2c3UL, 698 0x48dba8e3e3abe34bUL, 0x2ab6b95b5b715be2UL, 0x920dbc88881a8834UL, 699 0xc8293e9a9a529aa4UL, 700 0xbe4c0b262698262dUL, 701 0xfa64bf3232c8328dUL, 0x4a7d59b0b0fab0e9UL, 0x6acff2e9e983e91bUL, 702 0x331e770f0f3c0f78UL, 0xa6b733d5d573d5e6UL, 0xba1df480803a8074UL, 703 0x7c6127bebec2be99UL, 0xde87ebcdcd13cd26UL, 0xe468893434d034bdUL, 704 0x75903248483d487aUL, 0x24e354ffffdbffabUL, 0x8ff48d7a7af57af7UL, 705 0xea3d6490907a90f4UL, 706 0x3ebe9d5f5f615fc2UL, 707 0xa0403d202080201dUL, 0xd5d00f6868bd6867UL, 0x7234ca1a1a681ad0UL, 708 0x2c41b7aeae82ae19UL, 0x5e757db4b4eab4c9UL, 0x19a8ce54544d549aUL, 709 0xe53b7f93937693ecUL, 0xaa442f222288220dUL, 0xe9c86364648d6407UL, 710 0x12ff2af1f1e3f1dbUL, 0xa2e6cc7373d173bfUL, 0x5a24821212481290UL, 711 0x5d807a40401d403aUL, 712 0x2810480808200840UL, 713 0xe89b95c3c32bc356UL, 0x7bc5dfecec97ec33UL, 0x90ab4ddbdb4bdb96UL, 714 0x1f5fc0a1a1bea161UL, 0x8307918d8d0e8d1cUL, 0xc97ac83d3df43df5UL, 715 0xf1335b97976697ccUL, 0x0000000000000000UL, 0xd483f9cfcf1bcf36UL, 716 0x87566e2b2bac2b45UL, 0xb3ece17676c57697UL, 0xb019e68282328264UL, 717 0xa9b128d6d67fd6feUL, 718 0x7736c31b1b6c1bd8UL, 719 0x5b7774b5b5eeb5c1UL, 0x2943beafaf86af11UL, 0xdfd41d6a6ab56a77UL, 720 0x0da0ea50505d50baUL, 0x4c8a574545094512UL, 0x18fb38f3f3ebf3cbUL, 721 0xf060ad3030c0309dUL, 0x74c3c4efef9bef2bUL, 0xc37eda3f3ffc3fe5UL, 722 0x1caac75555495592UL, 0x1059dba2a2b2a279UL, 0x65c9e9eaea8fea03UL, 723 0xecca6a656589650fUL, 724 0x686903babad2bab9UL, 725 0x935e4a2f2fbc2f65UL, 0xe79d8ec0c027c04eUL, 0x81a160dede5fdebeUL, 726 0x6c38fc1c1c701ce0UL, 0x2ee746fdfdd3fdbbUL, 0x649a1f4d4d294d52UL, 727 0xe0397692927292e4UL, 0xbceafa7575c9758fUL, 0x1e0c360606180630UL, 728 0x9809ae8a8a128a24UL, 0x40794bb2b2f2b2f9UL, 0x59d185e6e6bfe663UL, 729 0x361c7e0e0e380e70UL, 730 0x633ee71f1f7c1ff8UL, 731 0xf7c4556262956237UL, 0xa3b53ad4d477d4eeUL, 0x324d81a8a89aa829UL, 732 0xf4315296966296c4UL, 0x3aef62f9f9c3f99bUL, 0xf697a3c5c533c566UL, 733 0xb14a102525942535UL, 0x20b2ab59597959f2UL, 0xae15d084842a8454UL, 734 0xa7e4c57272d572b7UL, 0xdd72ec3939e439d5UL, 0x6198164c4c2d4c5aUL, 735 0x3bbc945e5e655ecaUL, 736 0x85f09f7878fd78e7UL, 737 0xd870e53838e038ddUL, 0x8605988c8c0a8c14UL, 0xb2bf17d1d163d1c6UL, 738 0x0b57e4a5a5aea541UL, 0x4dd9a1e2e2afe243UL, 0xf8c24e616199612fUL, 739 0x457b42b3b3f6b3f1UL, 0xa542342121842115UL, 0xd625089c9c4a9c94UL, 740 0x663cee1e1e781ef0UL, 0x5286614343114322UL, 0xfc93b1c7c73bc776UL, 741 0x2be54ffcfcd7fcb3UL, 742 0x1408240404100420UL, 743 0x08a2e351515951b2UL, 0xc72f2599995e99bcUL, 0xc4da226d6da96d4fUL, 744 0x391a650d0d340d68UL, 0x35e979fafacffa83UL, 0x84a369dfdf5bdfb6UL, 745 0x9bfca97e7ee57ed7UL, 0xb44819242490243dUL, 0xd776fe3b3bec3bc5UL, 746 0x3d4b9aabab96ab31UL, 0xd181f0cece1fce3eUL, 0x5522991111441188UL, 747 0x8903838f8f068f0cUL, 748 0x6b9c044e4e254e4aUL, 749 0x517366b7b7e6b7d1UL, 0x60cbe0ebeb8beb0bUL, 0xcc78c13c3cf03cfdUL, 750 0xbf1ffd81813e817cUL, 0xfe354094946a94d4UL, 0x0cf31cf7f7fbf7ebUL, 751 0x676f18b9b9deb9a1UL, 0x5f268b13134c1398UL, 0x9c58512c2cb02c7dUL, 752 0xb8bb05d3d36bd3d6UL, 0x5cd38ce7e7bbe76bUL, 0xcbdc396e6ea56e57UL, 753 0xf395aac4c437c46eUL, 754 0x0f061b03030c0318UL, 755 0x13acdc565645568aUL, 0x49885e44440d441aUL, 0x9efea07f7fe17fdfUL, 756 0x374f88a9a99ea921UL, 0x8254672a2aa82a4dUL, 0x6d6b0abbbbd6bbb1UL, 757 0xe29f87c1c123c146UL, 0x02a6f153535153a2UL, 0x8ba572dcdc57dcaeUL, 758 0x2716530b0b2c0b58UL, 0xd327019d9d4e9d9cUL, 0xc1d82b6c6cad6c47UL, 759 0xf562a43131c43195UL, 760 0xb9e8f37474cd7487UL, 761 0x09f115f6f6fff6e3UL, 0x438c4c464605460aUL, 0x2645a5acac8aac09UL, 762 0x970fb589891e893cUL, 0x4428b414145014a0UL, 0x42dfbae1e1a3e15bUL, 763 0x4e2ca616165816b0UL, 0xd274f73a3ae83acdUL, 0xd0d2066969b9696fUL, 764 0x2d12410909240948UL, 0xade0d77070dd70a7UL, 0x54716fb6b6e2b6d9UL, 765 0xb7bd1ed0d067d0ceUL, 766 0x7ec7d6eded93ed3bUL, 767 0xdb85e2cccc17cc2eUL, 0x578468424215422aUL, 0xc22d2c98985a98b4UL, 768 0x0e55eda4a4aaa449UL, 0x8850752828a0285dUL, 0x31b8865c5c6d5cdaUL, 769 0x3fed6bf8f8c7f893UL, 0xa411c28686228644UL, 770 ], [ 771 0xc07830d818186018UL, 0x05af462623238c23UL, 0x7ef991b8c6c63fc6UL, 772 0x136fcdfbe8e887e8UL, 0x4ca113cb87872687UL, 0xa9626d11b8b8dab8UL, 773 0x0805020901010401UL, 0x426e9e0d4f4f214fUL, 0xadee6c9b3636d836UL, 774 0x590451ffa6a6a2a6UL, 775 0xdebdb90cd2d26fd2UL, 0xfb06f70ef5f5f3f5UL, 0xef80f2967979f979UL, 776 0x5fcede306f6fa16fUL, 0xfcef3f6d91917e91UL, 0xaa07a4f852525552UL, 777 0x27fdc04760609d60UL, 0x89766535bcbccabcUL, 0xaccd2b379b9b569bUL, 778 0x048c018a8e8e028eUL, 0x71155bd2a3a3b6a3UL, 0x603c186c0c0c300cUL, 779 0xff8af6847b7bf17bUL, 780 0xb5e16a803535d435UL, 781 0xe8693af51d1d741dUL, 0x5347ddb3e0e0a7e0UL, 0xf6acb321d7d77bd7UL, 782 0x5eed999cc2c22fc2UL, 0x6d965c432e2eb82eUL, 0x627a96294b4b314bUL, 783 0xa321e15dfefedffeUL, 0x8216aed557574157UL, 0xa8412abd15155415UL, 784 0x9fb6eee87777c177UL, 0xa5eb6e923737dc37UL, 0x7b56d79ee5e5b3e5UL, 785 0x8cd923139f9f469fUL, 786 0xd317fd23f0f0e7f0UL, 787 0x6a7f94204a4a354aUL, 0x9e95a944dada4fdaUL, 0xfa25b0a258587d58UL, 788 0x06ca8fcfc9c903c9UL, 0x558d527c2929a429UL, 0x5022145a0a0a280aUL, 789 0xe14f7f50b1b1feb1UL, 0x691a5dc9a0a0baa0UL, 0x7fdad6146b6bb16bUL, 790 0x5cab17d985852e85UL, 0x8173673cbdbdcebdUL, 0xd234ba8f5d5d695dUL, 791 0x8050209010104010UL, 792 0xf303f507f4f4f7f4UL, 793 0x16c08bddcbcb0bcbUL, 0xedc67cd33e3ef83eUL, 0x28110a2d05051405UL, 794 0x1fe6ce7867678167UL, 0x7353d597e4e4b7e4UL, 0x25bb4e0227279c27UL, 795 0x3258827341411941UL, 0x2c9d0ba78b8b168bUL, 0x510153f6a7a7a6a7UL, 796 0xcf94fab27d7de97dUL, 0xdcfb374995956e95UL, 0x8e9fad56d8d847d8UL, 797 0x8b30eb70fbfbcbfbUL, 798 0x2371c1cdeeee9feeUL, 799 0xc791f8bb7c7ced7cUL, 0x17e3cc7166668566UL, 0xa68ea77bdddd53ddUL, 800 0xb84b2eaf17175c17UL, 0x02468e4547470147UL, 0x84dc211a9e9e429eUL, 801 0x1ec589d4caca0fcaUL, 0x75995a582d2db42dUL, 0x9179632ebfbfc6bfUL, 802 0x381b0e3f07071c07UL, 0x012347acadad8eadUL, 0xea2fb4b05a5a755aUL, 803 0x6cb51bef83833683UL, 804 0x85ff66b63333cc33UL, 805 0x3ff2c65c63639163UL, 0x100a041202020802UL, 0x39384993aaaa92aaUL, 806 0xafa8e2de7171d971UL, 0x0ecf8dc6c8c807c8UL, 0xc87d32d119196419UL, 807 0x7270923b49493949UL, 0x869aaf5fd9d943d9UL, 0xc31df931f2f2eff2UL, 808 0x4b48dba8e3e3abe3UL, 0xe22ab6b95b5b715bUL, 0x34920dbc88881a88UL, 809 0xa4c8293e9a9a529aUL, 810 0x2dbe4c0b26269826UL, 811 0x8dfa64bf3232c832UL, 0xe94a7d59b0b0fab0UL, 0x1b6acff2e9e983e9UL, 812 0x78331e770f0f3c0fUL, 0xe6a6b733d5d573d5UL, 0x74ba1df480803a80UL, 813 0x997c6127bebec2beUL, 0x26de87ebcdcd13cdUL, 0xbde468893434d034UL, 814 0x7a75903248483d48UL, 0xab24e354ffffdbffUL, 0xf78ff48d7a7af57aUL, 815 0xf4ea3d6490907a90UL, 816 0xc23ebe9d5f5f615fUL, 817 0x1da0403d20208020UL, 0x67d5d00f6868bd68UL, 0xd07234ca1a1a681aUL, 818 0x192c41b7aeae82aeUL, 0xc95e757db4b4eab4UL, 0x9a19a8ce54544d54UL, 819 0xece53b7f93937693UL, 0x0daa442f22228822UL, 0x07e9c86364648d64UL, 820 0xdb12ff2af1f1e3f1UL, 0xbfa2e6cc7373d173UL, 0x905a248212124812UL, 821 0x3a5d807a40401d40UL, 822 0x4028104808082008UL, 823 0x56e89b95c3c32bc3UL, 0x337bc5dfecec97ecUL, 0x9690ab4ddbdb4bdbUL, 824 0x611f5fc0a1a1bea1UL, 0x1c8307918d8d0e8dUL, 0xf5c97ac83d3df43dUL, 825 0xccf1335b97976697UL, 0x0000000000000000UL, 0x36d483f9cfcf1bcfUL, 826 0x4587566e2b2bac2bUL, 0x97b3ece17676c576UL, 0x64b019e682823282UL, 827 0xfea9b128d6d67fd6UL, 828 0xd87736c31b1b6c1bUL, 829 0xc15b7774b5b5eeb5UL, 0x112943beafaf86afUL, 0x77dfd41d6a6ab56aUL, 830 0xba0da0ea50505d50UL, 0x124c8a5745450945UL, 0xcb18fb38f3f3ebf3UL, 831 0x9df060ad3030c030UL, 0x2b74c3c4efef9befUL, 0xe5c37eda3f3ffc3fUL, 832 0x921caac755554955UL, 0x791059dba2a2b2a2UL, 0x0365c9e9eaea8feaUL, 833 0x0fecca6a65658965UL, 834 0xb9686903babad2baUL, 835 0x65935e4a2f2fbc2fUL, 0x4ee79d8ec0c027c0UL, 0xbe81a160dede5fdeUL, 836 0xe06c38fc1c1c701cUL, 0xbb2ee746fdfdd3fdUL, 0x52649a1f4d4d294dUL, 837 0xe4e0397692927292UL, 0x8fbceafa7575c975UL, 0x301e0c3606061806UL, 838 0x249809ae8a8a128aUL, 0xf940794bb2b2f2b2UL, 0x6359d185e6e6bfe6UL, 839 0x70361c7e0e0e380eUL, 840 0xf8633ee71f1f7c1fUL, 841 0x37f7c45562629562UL, 0xeea3b53ad4d477d4UL, 0x29324d81a8a89aa8UL, 842 0xc4f4315296966296UL, 0x9b3aef62f9f9c3f9UL, 0x66f697a3c5c533c5UL, 843 0x35b14a1025259425UL, 0xf220b2ab59597959UL, 0x54ae15d084842a84UL, 844 0xb7a7e4c57272d572UL, 0xd5dd72ec3939e439UL, 0x5a6198164c4c2d4cUL, 845 0xca3bbc945e5e655eUL, 846 0xe785f09f7878fd78UL, 847 0xddd870e53838e038UL, 0x148605988c8c0a8cUL, 0xc6b2bf17d1d163d1UL, 848 0x410b57e4a5a5aea5UL, 0x434dd9a1e2e2afe2UL, 0x2ff8c24e61619961UL, 849 0xf1457b42b3b3f6b3UL, 0x15a5423421218421UL, 0x94d625089c9c4a9cUL, 850 0xf0663cee1e1e781eUL, 0x2252866143431143UL, 0x76fc93b1c7c73bc7UL, 851 0xb32be54ffcfcd7fcUL, 852 0x2014082404041004UL, 853 0xb208a2e351515951UL, 0xbcc72f2599995e99UL, 0x4fc4da226d6da96dUL, 854 0x68391a650d0d340dUL, 0x8335e979fafacffaUL, 0xb684a369dfdf5bdfUL, 855 0xd79bfca97e7ee57eUL, 0x3db4481924249024UL, 0xc5d776fe3b3bec3bUL, 856 0x313d4b9aabab96abUL, 0x3ed181f0cece1fceUL, 0x8855229911114411UL, 857 0x0c8903838f8f068fUL, 858 0x4a6b9c044e4e254eUL, 859 0xd1517366b7b7e6b7UL, 0x0b60cbe0ebeb8bebUL, 0xfdcc78c13c3cf03cUL, 860 0x7cbf1ffd81813e81UL, 0xd4fe354094946a94UL, 0xeb0cf31cf7f7fbf7UL, 861 0xa1676f18b9b9deb9UL, 0x985f268b13134c13UL, 0x7d9c58512c2cb02cUL, 862 0xd6b8bb05d3d36bd3UL, 0x6b5cd38ce7e7bbe7UL, 0x57cbdc396e6ea56eUL, 863 0x6ef395aac4c437c4UL, 864 0x180f061b03030c03UL, 865 0x8a13acdc56564556UL, 0x1a49885e44440d44UL, 0xdf9efea07f7fe17fUL, 866 0x21374f88a9a99ea9UL, 0x4d8254672a2aa82aUL, 0xb16d6b0abbbbd6bbUL, 867 0x46e29f87c1c123c1UL, 0xa202a6f153535153UL, 0xae8ba572dcdc57dcUL, 868 0x582716530b0b2c0bUL, 0x9cd327019d9d4e9dUL, 0x47c1d82b6c6cad6cUL, 869 0x95f562a43131c431UL, 870 0x87b9e8f37474cd74UL, 871 0xe309f115f6f6fff6UL, 0x0a438c4c46460546UL, 0x092645a5acac8aacUL, 872 0x3c970fb589891e89UL, 0xa04428b414145014UL, 0x5b42dfbae1e1a3e1UL, 873 0xb04e2ca616165816UL, 0xcdd274f73a3ae83aUL, 0x6fd0d2066969b969UL, 874 0x482d124109092409UL, 0xa7ade0d77070dd70UL, 0xd954716fb6b6e2b6UL, 875 0xceb7bd1ed0d067d0UL, 876 0x3b7ec7d6eded93edUL, 877 0x2edb85e2cccc17ccUL, 0x2a57846842421542UL, 0xb4c22d2c98985a98UL, 878 0x490e55eda4a4aaa4UL, 0x5d8850752828a028UL, 0xda31b8865c5c6d5cUL, 879 0x933fed6bf8f8c7f8UL, 0x44a411c286862286UL, 880 ], [ 881 0x18c07830d8181860UL, 0x2305af462623238cUL, 0xc67ef991b8c6c63fUL, 882 0xe8136fcdfbe8e887UL, 0x874ca113cb878726UL, 0xb8a9626d11b8b8daUL, 883 0x0108050209010104UL, 0x4f426e9e0d4f4f21UL, 0x36adee6c9b3636d8UL, 884 0xa6590451ffa6a6a2UL, 885 0xd2debdb90cd2d26fUL, 0xf5fb06f70ef5f5f3UL, 0x79ef80f2967979f9UL, 886 0x6f5fcede306f6fa1UL, 0x91fcef3f6d91917eUL, 0x52aa07a4f8525255UL, 887 0x6027fdc04760609dUL, 0xbc89766535bcbccaUL, 0x9baccd2b379b9b56UL, 888 0x8e048c018a8e8e02UL, 0xa371155bd2a3a3b6UL, 0x0c603c186c0c0c30UL, 889 0x7bff8af6847b7bf1UL, 890 0x35b5e16a803535d4UL, 891 0x1de8693af51d1d74UL, 0xe05347ddb3e0e0a7UL, 0xd7f6acb321d7d77bUL, 892 0xc25eed999cc2c22fUL, 0x2e6d965c432e2eb8UL, 0x4b627a96294b4b31UL, 893 0xfea321e15dfefedfUL, 0x578216aed5575741UL, 0x15a8412abd151554UL, 894 0x779fb6eee87777c1UL, 0x37a5eb6e923737dcUL, 0xe57b56d79ee5e5b3UL, 895 0x9f8cd923139f9f46UL, 896 0xf0d317fd23f0f0e7UL, 897 0x4a6a7f94204a4a35UL, 0xda9e95a944dada4fUL, 0x58fa25b0a258587dUL, 898 0xc906ca8fcfc9c903UL, 0x29558d527c2929a4UL, 0x0a5022145a0a0a28UL, 899 0xb1e14f7f50b1b1feUL, 0xa0691a5dc9a0a0baUL, 0x6b7fdad6146b6bb1UL, 900 0x855cab17d985852eUL, 0xbd8173673cbdbdceUL, 0x5dd234ba8f5d5d69UL, 901 0x1080502090101040UL, 902 0xf4f303f507f4f4f7UL, 903 0xcb16c08bddcbcb0bUL, 0x3eedc67cd33e3ef8UL, 0x0528110a2d050514UL, 904 0x671fe6ce78676781UL, 0xe47353d597e4e4b7UL, 0x2725bb4e0227279cUL, 905 0x4132588273414119UL, 0x8b2c9d0ba78b8b16UL, 0xa7510153f6a7a7a6UL, 906 0x7dcf94fab27d7de9UL, 0x95dcfb374995956eUL, 0xd88e9fad56d8d847UL, 907 0xfb8b30eb70fbfbcbUL, 908 0xee2371c1cdeeee9fUL, 909 0x7cc791f8bb7c7cedUL, 0x6617e3cc71666685UL, 0xdda68ea77bdddd53UL, 910 0x17b84b2eaf17175cUL, 0x4702468e45474701UL, 0x9e84dc211a9e9e42UL, 911 0xca1ec589d4caca0fUL, 0x2d75995a582d2db4UL, 0xbf9179632ebfbfc6UL, 912 0x07381b0e3f07071cUL, 0xad012347acadad8eUL, 0x5aea2fb4b05a5a75UL, 913 0x836cb51bef838336UL, 914 0x3385ff66b63333ccUL, 915 0x633ff2c65c636391UL, 0x02100a0412020208UL, 0xaa39384993aaaa92UL, 916 0x71afa8e2de7171d9UL, 0xc80ecf8dc6c8c807UL, 0x19c87d32d1191964UL, 917 0x497270923b494939UL, 0xd9869aaf5fd9d943UL, 0xf2c31df931f2f2efUL, 918 0xe34b48dba8e3e3abUL, 0x5be22ab6b95b5b71UL, 0x8834920dbc88881aUL, 919 0x9aa4c8293e9a9a52UL, 920 0x262dbe4c0b262698UL, 921 0x328dfa64bf3232c8UL, 0xb0e94a7d59b0b0faUL, 0xe91b6acff2e9e983UL, 922 0x0f78331e770f0f3cUL, 0xd5e6a6b733d5d573UL, 0x8074ba1df480803aUL, 923 0xbe997c6127bebec2UL, 0xcd26de87ebcdcd13UL, 0x34bde468893434d0UL, 924 0x487a75903248483dUL, 0xffab24e354ffffdbUL, 0x7af78ff48d7a7af5UL, 925 0x90f4ea3d6490907aUL, 926 0x5fc23ebe9d5f5f61UL, 927 0x201da0403d202080UL, 0x6867d5d00f6868bdUL, 0x1ad07234ca1a1a68UL, 928 0xae192c41b7aeae82UL, 0xb4c95e757db4b4eaUL, 0x549a19a8ce54544dUL, 929 0x93ece53b7f939376UL, 0x220daa442f222288UL, 0x6407e9c86364648dUL, 930 0xf1db12ff2af1f1e3UL, 0x73bfa2e6cc7373d1UL, 0x12905a2482121248UL, 931 0x403a5d807a40401dUL, 932 0x0840281048080820UL, 933 0xc356e89b95c3c32bUL, 0xec337bc5dfecec97UL, 0xdb9690ab4ddbdb4bUL, 934 0xa1611f5fc0a1a1beUL, 0x8d1c8307918d8d0eUL, 0x3df5c97ac83d3df4UL, 935 0x97ccf1335b979766UL, 0x0000000000000000UL, 0xcf36d483f9cfcf1bUL, 936 0x2b4587566e2b2bacUL, 0x7697b3ece17676c5UL, 0x8264b019e6828232UL, 937 0xd6fea9b128d6d67fUL, 938 0x1bd87736c31b1b6cUL, 939 0xb5c15b7774b5b5eeUL, 0xaf112943beafaf86UL, 0x6a77dfd41d6a6ab5UL, 940 0x50ba0da0ea50505dUL, 0x45124c8a57454509UL, 0xf3cb18fb38f3f3ebUL, 941 0x309df060ad3030c0UL, 0xef2b74c3c4efef9bUL, 0x3fe5c37eda3f3ffcUL, 942 0x55921caac7555549UL, 0xa2791059dba2a2b2UL, 0xea0365c9e9eaea8fUL, 943 0x650fecca6a656589UL, 944 0xbab9686903babad2UL, 945 0x2f65935e4a2f2fbcUL, 0xc04ee79d8ec0c027UL, 0xdebe81a160dede5fUL, 946 0x1ce06c38fc1c1c70UL, 0xfdbb2ee746fdfdd3UL, 0x4d52649a1f4d4d29UL, 947 0x92e4e03976929272UL, 0x758fbceafa7575c9UL, 0x06301e0c36060618UL, 948 0x8a249809ae8a8a12UL, 0xb2f940794bb2b2f2UL, 0xe66359d185e6e6bfUL, 949 0x0e70361c7e0e0e38UL, 950 0x1ff8633ee71f1f7cUL, 951 0x6237f7c455626295UL, 0xd4eea3b53ad4d477UL, 0xa829324d81a8a89aUL, 952 0x96c4f43152969662UL, 0xf99b3aef62f9f9c3UL, 0xc566f697a3c5c533UL, 953 0x2535b14a10252594UL, 0x59f220b2ab595979UL, 0x8454ae15d084842aUL, 954 0x72b7a7e4c57272d5UL, 0x39d5dd72ec3939e4UL, 0x4c5a6198164c4c2dUL, 955 0x5eca3bbc945e5e65UL, 956 0x78e785f09f7878fdUL, 957 0x38ddd870e53838e0UL, 0x8c148605988c8c0aUL, 0xd1c6b2bf17d1d163UL, 958 0xa5410b57e4a5a5aeUL, 0xe2434dd9a1e2e2afUL, 0x612ff8c24e616199UL, 959 0xb3f1457b42b3b3f6UL, 0x2115a54234212184UL, 0x9c94d625089c9c4aUL, 960 0x1ef0663cee1e1e78UL, 0x4322528661434311UL, 0xc776fc93b1c7c73bUL, 961 0xfcb32be54ffcfcd7UL, 962 0x0420140824040410UL, 963 0x51b208a2e3515159UL, 0x99bcc72f2599995eUL, 0x6d4fc4da226d6da9UL, 964 0x0d68391a650d0d34UL, 0xfa8335e979fafacfUL, 0xdfb684a369dfdf5bUL, 965 0x7ed79bfca97e7ee5UL, 0x243db44819242490UL, 0x3bc5d776fe3b3becUL, 966 0xab313d4b9aabab96UL, 0xce3ed181f0cece1fUL, 0x1188552299111144UL, 967 0x8f0c8903838f8f06UL, 968 0x4e4a6b9c044e4e25UL, 969 0xb7d1517366b7b7e6UL, 0xeb0b60cbe0ebeb8bUL, 0x3cfdcc78c13c3cf0UL, 970 0x817cbf1ffd81813eUL, 0x94d4fe354094946aUL, 0xf7eb0cf31cf7f7fbUL, 971 0xb9a1676f18b9b9deUL, 0x13985f268b13134cUL, 0x2c7d9c58512c2cb0UL, 972 0xd3d6b8bb05d3d36bUL, 0xe76b5cd38ce7e7bbUL, 0x6e57cbdc396e6ea5UL, 973 0xc46ef395aac4c437UL, 974 0x03180f061b03030cUL, 975 0x568a13acdc565645UL, 0x441a49885e44440dUL, 0x7fdf9efea07f7fe1UL, 976 0xa921374f88a9a99eUL, 0x2a4d8254672a2aa8UL, 0xbbb16d6b0abbbbd6UL, 977 0xc146e29f87c1c123UL, 0x53a202a6f1535351UL, 0xdcae8ba572dcdc57UL, 978 0x0b582716530b0b2cUL, 0x9d9cd327019d9d4eUL, 0x6c47c1d82b6c6cadUL, 979 0x3195f562a43131c4UL, 980 0x7487b9e8f37474cdUL, 981 0xf6e309f115f6f6ffUL, 0x460a438c4c464605UL, 0xac092645a5acac8aUL, 982 0x893c970fb589891eUL, 0x14a04428b4141450UL, 0xe15b42dfbae1e1a3UL, 983 0x16b04e2ca6161658UL, 0x3acdd274f73a3ae8UL, 0x696fd0d2066969b9UL, 984 0x09482d1241090924UL, 0x70a7ade0d77070ddUL, 0xb6d954716fb6b6e2UL, 985 0xd0ceb7bd1ed0d067UL, 986 0xed3b7ec7d6eded93UL, 987 0xcc2edb85e2cccc17UL, 0x422a578468424215UL, 0x98b4c22d2c98985aUL, 988 0xa4490e55eda4a4aaUL, 0x285d8850752828a0UL, 0x5cda31b8865c5c6dUL, 989 0xf8933fed6bf8f8c7UL, 0x8644a411c2868622UL, 990 ], [ 991 0x6018c07830d81818UL, 0x8c2305af46262323UL, 0x3fc67ef991b8c6c6UL, 992 0x87e8136fcdfbe8e8UL, 0x26874ca113cb8787UL, 0xdab8a9626d11b8b8UL, 993 0x0401080502090101UL, 0x214f426e9e0d4f4fUL, 0xd836adee6c9b3636UL, 994 0xa2a6590451ffa6a6UL, 995 0x6fd2debdb90cd2d2UL, 0xf3f5fb06f70ef5f5UL, 0xf979ef80f2967979UL, 996 0xa16f5fcede306f6fUL, 0x7e91fcef3f6d9191UL, 0x5552aa07a4f85252UL, 997 0x9d6027fdc0476060UL, 0xcabc89766535bcbcUL, 0x569baccd2b379b9bUL, 998 0x028e048c018a8e8eUL, 0xb6a371155bd2a3a3UL, 0x300c603c186c0c0cUL, 999 0xf17bff8af6847b7bUL, 1000 0xd435b5e16a803535UL, 1001 0x741de8693af51d1dUL, 0xa7e05347ddb3e0e0UL, 0x7bd7f6acb321d7d7UL, 1002 0x2fc25eed999cc2c2UL, 0xb82e6d965c432e2eUL, 0x314b627a96294b4bUL, 1003 0xdffea321e15dfefeUL, 0x41578216aed55757UL, 0x5415a8412abd1515UL, 1004 0xc1779fb6eee87777UL, 0xdc37a5eb6e923737UL, 0xb3e57b56d79ee5e5UL, 1005 0x469f8cd923139f9fUL, 1006 0xe7f0d317fd23f0f0UL, 1007 0x354a6a7f94204a4aUL, 0x4fda9e95a944dadaUL, 0x7d58fa25b0a25858UL, 1008 0x03c906ca8fcfc9c9UL, 0xa429558d527c2929UL, 0x280a5022145a0a0aUL, 1009 0xfeb1e14f7f50b1b1UL, 0xbaa0691a5dc9a0a0UL, 0xb16b7fdad6146b6bUL, 1010 0x2e855cab17d98585UL, 0xcebd8173673cbdbdUL, 0x695dd234ba8f5d5dUL, 1011 0x4010805020901010UL, 1012 0xf7f4f303f507f4f4UL, 1013 0x0bcb16c08bddcbcbUL, 0xf83eedc67cd33e3eUL, 0x140528110a2d0505UL, 1014 0x81671fe6ce786767UL, 0xb7e47353d597e4e4UL, 0x9c2725bb4e022727UL, 1015 0x1941325882734141UL, 0x168b2c9d0ba78b8bUL, 0xa6a7510153f6a7a7UL, 1016 0xe97dcf94fab27d7dUL, 0x6e95dcfb37499595UL, 0x47d88e9fad56d8d8UL, 1017 0xcbfb8b30eb70fbfbUL, 1018 0x9fee2371c1cdeeeeUL, 1019 0xed7cc791f8bb7c7cUL, 0x856617e3cc716666UL, 0x53dda68ea77bddddUL, 1020 0x5c17b84b2eaf1717UL, 0x014702468e454747UL, 0x429e84dc211a9e9eUL, 1021 0x0fca1ec589d4cacaUL, 0xb42d75995a582d2dUL, 0xc6bf9179632ebfbfUL, 1022 0x1c07381b0e3f0707UL, 0x8ead012347acadadUL, 0x755aea2fb4b05a5aUL, 1023 0x36836cb51bef8383UL, 1024 0xcc3385ff66b63333UL, 1025 0x91633ff2c65c6363UL, 0x0802100a04120202UL, 0x92aa39384993aaaaUL, 1026 0xd971afa8e2de7171UL, 0x07c80ecf8dc6c8c8UL, 0x6419c87d32d11919UL, 1027 0x39497270923b4949UL, 0x43d9869aaf5fd9d9UL, 0xeff2c31df931f2f2UL, 1028 0xabe34b48dba8e3e3UL, 0x715be22ab6b95b5bUL, 0x1a8834920dbc8888UL, 1029 0x529aa4c8293e9a9aUL, 1030 0x98262dbe4c0b2626UL, 1031 0xc8328dfa64bf3232UL, 0xfab0e94a7d59b0b0UL, 0x83e91b6acff2e9e9UL, 1032 0x3c0f78331e770f0fUL, 0x73d5e6a6b733d5d5UL, 0x3a8074ba1df48080UL, 1033 0xc2be997c6127bebeUL, 0x13cd26de87ebcdcdUL, 0xd034bde468893434UL, 1034 0x3d487a7590324848UL, 0xdbffab24e354ffffUL, 0xf57af78ff48d7a7aUL, 1035 0x7a90f4ea3d649090UL, 1036 0x615fc23ebe9d5f5fUL, 1037 0x80201da0403d2020UL, 0xbd6867d5d00f6868UL, 0x681ad07234ca1a1aUL, 1038 0x82ae192c41b7aeaeUL, 0xeab4c95e757db4b4UL, 0x4d549a19a8ce5454UL, 1039 0x7693ece53b7f9393UL, 0x88220daa442f2222UL, 0x8d6407e9c8636464UL, 1040 0xe3f1db12ff2af1f1UL, 0xd173bfa2e6cc7373UL, 0x4812905a24821212UL, 1041 0x1d403a5d807a4040UL, 1042 0x2008402810480808UL, 1043 0x2bc356e89b95c3c3UL, 0x97ec337bc5dfececUL, 0x4bdb9690ab4ddbdbUL, 1044 0xbea1611f5fc0a1a1UL, 0x0e8d1c8307918d8dUL, 0xf43df5c97ac83d3dUL, 1045 0x6697ccf1335b9797UL, 0x0000000000000000UL, 0x1bcf36d483f9cfcfUL, 1046 0xac2b4587566e2b2bUL, 0xc57697b3ece17676UL, 0x328264b019e68282UL, 1047 0x7fd6fea9b128d6d6UL, 1048 0x6c1bd87736c31b1bUL, 1049 0xeeb5c15b7774b5b5UL, 0x86af112943beafafUL, 0xb56a77dfd41d6a6aUL, 1050 0x5d50ba0da0ea5050UL, 0x0945124c8a574545UL, 0xebf3cb18fb38f3f3UL, 1051 0xc0309df060ad3030UL, 0x9bef2b74c3c4efefUL, 0xfc3fe5c37eda3f3fUL, 1052 0x4955921caac75555UL, 0xb2a2791059dba2a2UL, 0x8fea0365c9e9eaeaUL, 1053 0x89650fecca6a6565UL, 1054 0xd2bab9686903babaUL, 1055 0xbc2f65935e4a2f2fUL, 0x27c04ee79d8ec0c0UL, 0x5fdebe81a160dedeUL, 1056 0x701ce06c38fc1c1cUL, 0xd3fdbb2ee746fdfdUL, 0x294d52649a1f4d4dUL, 1057 0x7292e4e039769292UL, 0xc9758fbceafa7575UL, 0x1806301e0c360606UL, 1058 0x128a249809ae8a8aUL, 0xf2b2f940794bb2b2UL, 0xbfe66359d185e6e6UL, 1059 0x380e70361c7e0e0eUL, 1060 0x7c1ff8633ee71f1fUL, 1061 0x956237f7c4556262UL, 0x77d4eea3b53ad4d4UL, 0x9aa829324d81a8a8UL, 1062 0x6296c4f431529696UL, 0xc3f99b3aef62f9f9UL, 0x33c566f697a3c5c5UL, 1063 0x942535b14a102525UL, 0x7959f220b2ab5959UL, 0x2a8454ae15d08484UL, 1064 0xd572b7a7e4c57272UL, 0xe439d5dd72ec3939UL, 0x2d4c5a6198164c4cUL, 1065 0x655eca3bbc945e5eUL, 1066 0xfd78e785f09f7878UL, 1067 0xe038ddd870e53838UL, 0x0a8c148605988c8cUL, 0x63d1c6b2bf17d1d1UL, 1068 0xaea5410b57e4a5a5UL, 0xafe2434dd9a1e2e2UL, 0x99612ff8c24e6161UL, 1069 0xf6b3f1457b42b3b3UL, 0x842115a542342121UL, 0x4a9c94d625089c9cUL, 1070 0x781ef0663cee1e1eUL, 0x1143225286614343UL, 0x3bc776fc93b1c7c7UL, 1071 0xd7fcb32be54ffcfcUL, 1072 0x1004201408240404UL, 1073 0x5951b208a2e35151UL, 0x5e99bcc72f259999UL, 0xa96d4fc4da226d6dUL, 1074 0x340d68391a650d0dUL, 0xcffa8335e979fafaUL, 0x5bdfb684a369dfdfUL, 1075 0xe57ed79bfca97e7eUL, 0x90243db448192424UL, 0xec3bc5d776fe3b3bUL, 1076 0x96ab313d4b9aababUL, 0x1fce3ed181f0ceceUL, 0x4411885522991111UL, 1077 0x068f0c8903838f8fUL, 1078 0x254e4a6b9c044e4eUL, 1079 0xe6b7d1517366b7b7UL, 0x8beb0b60cbe0ebebUL, 0xf03cfdcc78c13c3cUL, 1080 0x3e817cbf1ffd8181UL, 0x6a94d4fe35409494UL, 0xfbf7eb0cf31cf7f7UL, 1081 0xdeb9a1676f18b9b9UL, 0x4c13985f268b1313UL, 0xb02c7d9c58512c2cUL, 1082 0x6bd3d6b8bb05d3d3UL, 0xbbe76b5cd38ce7e7UL, 0xa56e57cbdc396e6eUL, 1083 0x37c46ef395aac4c4UL, 1084 0x0c03180f061b0303UL, 1085 0x45568a13acdc5656UL, 0x0d441a49885e4444UL, 0xe17fdf9efea07f7fUL, 1086 0x9ea921374f88a9a9UL, 0xa82a4d8254672a2aUL, 0xd6bbb16d6b0abbbbUL, 1087 0x23c146e29f87c1c1UL, 0x5153a202a6f15353UL, 0x57dcae8ba572dcdcUL, 1088 0x2c0b582716530b0bUL, 0x4e9d9cd327019d9dUL, 0xad6c47c1d82b6c6cUL, 1089 0xc43195f562a43131UL, 1090 0xcd7487b9e8f37474UL, 1091 0xfff6e309f115f6f6UL, 0x05460a438c4c4646UL, 0x8aac092645a5acacUL, 1092 0x1e893c970fb58989UL, 0x5014a04428b41414UL, 0xa3e15b42dfbae1e1UL, 1093 0x5816b04e2ca61616UL, 0xe83acdd274f73a3aUL, 0xb9696fd0d2066969UL, 1094 0x2409482d12410909UL, 0xdd70a7ade0d77070UL, 0xe2b6d954716fb6b6UL, 1095 0x67d0ceb7bd1ed0d0UL, 1096 0x93ed3b7ec7d6ededUL, 1097 0x17cc2edb85e2ccccUL, 0x15422a5784684242UL, 0x5a98b4c22d2c9898UL, 1098 0xaaa4490e55eda4a4UL, 0xa0285d8850752828UL, 0x6d5cda31b8865c5cUL, 1099 0xc7f8933fed6bf8f8UL, 0x228644a411c28686UL, 1100 ], [ 1101 0x186018c07830d818UL, 0x238c2305af462623UL, 0xc63fc67ef991b8c6UL, 1102 0xe887e8136fcdfbe8UL, 0x8726874ca113cb87UL, 0xb8dab8a9626d11b8UL, 1103 0x0104010805020901UL, 0x4f214f426e9e0d4fUL, 0x36d836adee6c9b36UL, 1104 0xa6a2a6590451ffa6UL, 1105 0xd26fd2debdb90cd2UL, 0xf5f3f5fb06f70ef5UL, 0x79f979ef80f29679UL, 1106 0x6fa16f5fcede306fUL, 0x917e91fcef3f6d91UL, 0x525552aa07a4f852UL, 1107 0x609d6027fdc04760UL, 0xbccabc89766535bcUL, 0x9b569baccd2b379bUL, 1108 0x8e028e048c018a8eUL, 0xa3b6a371155bd2a3UL, 0x0c300c603c186c0cUL, 1109 0x7bf17bff8af6847bUL, 1110 0x35d435b5e16a8035UL, 1111 0x1d741de8693af51dUL, 0xe0a7e05347ddb3e0UL, 0xd77bd7f6acb321d7UL, 1112 0xc22fc25eed999cc2UL, 0x2eb82e6d965c432eUL, 0x4b314b627a96294bUL, 1113 0xfedffea321e15dfeUL, 0x5741578216aed557UL, 0x155415a8412abd15UL, 1114 0x77c1779fb6eee877UL, 0x37dc37a5eb6e9237UL, 0xe5b3e57b56d79ee5UL, 1115 0x9f469f8cd923139fUL, 1116 0xf0e7f0d317fd23f0UL, 1117 0x4a354a6a7f94204aUL, 0xda4fda9e95a944daUL, 0x587d58fa25b0a258UL, 1118 0xc903c906ca8fcfc9UL, 0x29a429558d527c29UL, 0x0a280a5022145a0aUL, 1119 0xb1feb1e14f7f50b1UL, 0xa0baa0691a5dc9a0UL, 0x6bb16b7fdad6146bUL, 1120 0x852e855cab17d985UL, 0xbdcebd8173673cbdUL, 0x5d695dd234ba8f5dUL, 1121 0x1040108050209010UL, 1122 0xf4f7f4f303f507f4UL, 1123 0xcb0bcb16c08bddcbUL, 0x3ef83eedc67cd33eUL, 0x05140528110a2d05UL, 1124 0x6781671fe6ce7867UL, 0xe4b7e47353d597e4UL, 0x279c2725bb4e0227UL, 1125 0x4119413258827341UL, 0x8b168b2c9d0ba78bUL, 0xa7a6a7510153f6a7UL, 1126 0x7de97dcf94fab27dUL, 0x956e95dcfb374995UL, 0xd847d88e9fad56d8UL, 1127 0xfbcbfb8b30eb70fbUL, 1128 0xee9fee2371c1cdeeUL, 1129 0x7ced7cc791f8bb7cUL, 0x66856617e3cc7166UL, 0xdd53dda68ea77bddUL, 1130 0x175c17b84b2eaf17UL, 0x47014702468e4547UL, 0x9e429e84dc211a9eUL, 1131 0xca0fca1ec589d4caUL, 0x2db42d75995a582dUL, 0xbfc6bf9179632ebfUL, 1132 0x071c07381b0e3f07UL, 0xad8ead012347acadUL, 0x5a755aea2fb4b05aUL, 1133 0x8336836cb51bef83UL, 1134 0x33cc3385ff66b633UL, 1135 0x6391633ff2c65c63UL, 0x020802100a041202UL, 0xaa92aa39384993aaUL, 1136 0x71d971afa8e2de71UL, 0xc807c80ecf8dc6c8UL, 0x196419c87d32d119UL, 1137 0x4939497270923b49UL, 0xd943d9869aaf5fd9UL, 0xf2eff2c31df931f2UL, 1138 0xe3abe34b48dba8e3UL, 0x5b715be22ab6b95bUL, 0x881a8834920dbc88UL, 1139 0x9a529aa4c8293e9aUL, 1140 0x2698262dbe4c0b26UL, 1141 0x32c8328dfa64bf32UL, 0xb0fab0e94a7d59b0UL, 0xe983e91b6acff2e9UL, 1142 0x0f3c0f78331e770fUL, 0xd573d5e6a6b733d5UL, 0x803a8074ba1df480UL, 1143 0xbec2be997c6127beUL, 0xcd13cd26de87ebcdUL, 0x34d034bde4688934UL, 1144 0x483d487a75903248UL, 0xffdbffab24e354ffUL, 0x7af57af78ff48d7aUL, 1145 0x907a90f4ea3d6490UL, 1146 0x5f615fc23ebe9d5fUL, 1147 0x2080201da0403d20UL, 0x68bd6867d5d00f68UL, 0x1a681ad07234ca1aUL, 1148 0xae82ae192c41b7aeUL, 0xb4eab4c95e757db4UL, 0x544d549a19a8ce54UL, 1149 0x937693ece53b7f93UL, 0x2288220daa442f22UL, 0x648d6407e9c86364UL, 1150 0xf1e3f1db12ff2af1UL, 0x73d173bfa2e6cc73UL, 0x124812905a248212UL, 1151 0x401d403a5d807a40UL, 1152 0x0820084028104808UL, 1153 0xc32bc356e89b95c3UL, 0xec97ec337bc5dfecUL, 0xdb4bdb9690ab4ddbUL, 1154 0xa1bea1611f5fc0a1UL, 0x8d0e8d1c8307918dUL, 0x3df43df5c97ac83dUL, 1155 0x976697ccf1335b97UL, 0x0000000000000000UL, 0xcf1bcf36d483f9cfUL, 1156 0x2bac2b4587566e2bUL, 0x76c57697b3ece176UL, 0x82328264b019e682UL, 1157 0xd67fd6fea9b128d6UL, 1158 0x1b6c1bd87736c31bUL, 1159 0xb5eeb5c15b7774b5UL, 0xaf86af112943beafUL, 0x6ab56a77dfd41d6aUL, 1160 0x505d50ba0da0ea50UL, 0x450945124c8a5745UL, 0xf3ebf3cb18fb38f3UL, 1161 0x30c0309df060ad30UL, 0xef9bef2b74c3c4efUL, 0x3ffc3fe5c37eda3fUL, 1162 0x554955921caac755UL, 0xa2b2a2791059dba2UL, 0xea8fea0365c9e9eaUL, 1163 0x6589650fecca6a65UL, 1164 0xbad2bab9686903baUL, 1165 0x2fbc2f65935e4a2fUL, 0xc027c04ee79d8ec0UL, 0xde5fdebe81a160deUL, 1166 0x1c701ce06c38fc1cUL, 0xfdd3fdbb2ee746fdUL, 0x4d294d52649a1f4dUL, 1167 0x927292e4e0397692UL, 0x75c9758fbceafa75UL, 0x061806301e0c3606UL, 1168 0x8a128a249809ae8aUL, 0xb2f2b2f940794bb2UL, 0xe6bfe66359d185e6UL, 1169 0x0e380e70361c7e0eUL, 1170 0x1f7c1ff8633ee71fUL, 1171 0x62956237f7c45562UL, 0xd477d4eea3b53ad4UL, 0xa89aa829324d81a8UL, 1172 0x966296c4f4315296UL, 0xf9c3f99b3aef62f9UL, 0xc533c566f697a3c5UL, 1173 0x25942535b14a1025UL, 0x597959f220b2ab59UL, 0x842a8454ae15d084UL, 1174 0x72d572b7a7e4c572UL, 0x39e439d5dd72ec39UL, 0x4c2d4c5a6198164cUL, 1175 0x5e655eca3bbc945eUL, 1176 0x78fd78e785f09f78UL, 1177 0x38e038ddd870e538UL, 0x8c0a8c148605988cUL, 0xd163d1c6b2bf17d1UL, 1178 0xa5aea5410b57e4a5UL, 0xe2afe2434dd9a1e2UL, 0x6199612ff8c24e61UL, 1179 0xb3f6b3f1457b42b3UL, 0x21842115a5423421UL, 0x9c4a9c94d625089cUL, 1180 0x1e781ef0663cee1eUL, 0x4311432252866143UL, 0xc73bc776fc93b1c7UL, 1181 0xfcd7fcb32be54ffcUL, 1182 0x0410042014082404UL, 1183 0x515951b208a2e351UL, 0x995e99bcc72f2599UL, 0x6da96d4fc4da226dUL, 1184 0x0d340d68391a650dUL, 0xfacffa8335e979faUL, 0xdf5bdfb684a369dfUL, 1185 0x7ee57ed79bfca97eUL, 0x2490243db4481924UL, 0x3bec3bc5d776fe3bUL, 1186 0xab96ab313d4b9aabUL, 0xce1fce3ed181f0ceUL, 0x1144118855229911UL, 1187 0x8f068f0c8903838fUL, 1188 0x4e254e4a6b9c044eUL, 1189 0xb7e6b7d1517366b7UL, 0xeb8beb0b60cbe0ebUL, 0x3cf03cfdcc78c13cUL, 1190 0x813e817cbf1ffd81UL, 0x946a94d4fe354094UL, 0xf7fbf7eb0cf31cf7UL, 1191 0xb9deb9a1676f18b9UL, 0x134c13985f268b13UL, 0x2cb02c7d9c58512cUL, 1192 0xd36bd3d6b8bb05d3UL, 0xe7bbe76b5cd38ce7UL, 0x6ea56e57cbdc396eUL, 1193 0xc437c46ef395aac4UL, 1194 0x030c03180f061b03UL, 1195 0x5645568a13acdc56UL, 0x440d441a49885e44UL, 0x7fe17fdf9efea07fUL, 1196 0xa99ea921374f88a9UL, 0x2aa82a4d8254672aUL, 0xbbd6bbb16d6b0abbUL, 1197 0xc123c146e29f87c1UL, 0x535153a202a6f153UL, 0xdc57dcae8ba572dcUL, 1198 0x0b2c0b582716530bUL, 0x9d4e9d9cd327019dUL, 0x6cad6c47c1d82b6cUL, 1199 0x31c43195f562a431UL, 1200 0x74cd7487b9e8f374UL, 1201 0xf6fff6e309f115f6UL, 0x4605460a438c4c46UL, 0xac8aac092645a5acUL, 1202 0x891e893c970fb589UL, 0x145014a04428b414UL, 0xe1a3e15b42dfbae1UL, 1203 0x165816b04e2ca616UL, 0x3ae83acdd274f73aUL, 0x69b9696fd0d20669UL, 1204 0x092409482d124109UL, 0x70dd70a7ade0d770UL, 0xb6e2b6d954716fb6UL, 1205 0xd067d0ceb7bd1ed0UL, 1206 0xed93ed3b7ec7d6edUL, 1207 0xcc17cc2edb85e2ccUL, 0x4215422a57846842UL, 0x985a98b4c22d2c98UL, 1208 0xa4aaa4490e55eda4UL, 0x28a0285d88507528UL, 0x5c6d5cda31b8865cUL, 1209 0xf8c7f8933fed6bf8UL, 0x86228644a411c286UL, 1210 ]]; 1211 1212 immutable ulong[numRounds] rc = [ 1213 0x1823c6e887b8014fUL, 0x36a6d2f5796f9152UL, 0x60bc9b8ea30c7b35UL, 1214 0x1de0d7c22e4bfe57UL, 0x157737e59ff04adaUL, 0x58c9290ab1a06b85UL, 1215 0xbd5d10f4cb3e0567UL, 0xe427418ba77d95d8UL, 0xfbee7c66dd17479eUL, 0xca2dbf07ad5a8333UL, 1216 ]; 1217 1218 // precomputed K[] based on the initial state 1219 immutable ulong[8][numRounds] pcK = [ 1220 [ 1221 0x300BEEC0AF902967, 0x2828282828282828, 0x2828282828282828, 0x2828282828282828, 1222 0x2828282828282828, 0x2828282828282828, 0x2828282828282828, 0x2828282828282828 1223 ], [ 1224 0x3BAB89F8EAD1AE24, 0x4445456645E9CBAF, 0x70FEA4A4C5A4B289, 0xC5FAA9E1E1CCE1A0, 1225 0x48ACC05CFCFCB8FC, 0x8FF70E26908F8F69, 0x96791407D7857979, 0xF8A8F868B8C878F8 1226 ], [ 1227 0xD319BFDB30467058, 0x295B23D1AFCF37DB, 0x12C8AC28B95AC98, 0x81639EB1C0B206A7, 1228 0x445E607AB0B209DB, 0x735B2CCFBC8CBC71, 0xDC670924EFEDDDD3, 0x7B8D3BF0D73B7D19 1229 ], [ 1230 0x38BEAAC1DE116586, 0x687CF3D04A87337F, 0xF337FADB98ADF057, 0xC5E24258EE358DBC, 1231 0x1109F0E8996E247E, 0x1C5D6ED10B03401, 0xFBC952F17B28ECD3, 0x3256DC0CC7F12740 1232 ], [ 1233 0xAF25A520949BCF14, 0xC13626A9E3C4534D, 0xE60F7D867740F9E1, 0x915DE6BBE26A0629, 1234 0x965A54CC4CFE5E8D, 0xBEE931CB62323AA6, 0xB17B591896846A47, 0xD4F0C9362759AF31 1235 ], [ 1236 0xE2F9B5C025370BB0, 0x392BCBA2168494A5, 0x608AF8CEFA348C14, 0x7AA53764418C9219, 1237 0xB3F346A1FA833F89, 0x97493F487802CF7C, 0xDCADE8BA1E008F23, 0x92774F49EDB0323D 1238 ], [ 1239 0x75416382774DFF2F, 0xFFFA38D055034600, 0xBF7D02493E98F361, 0xF4A860C29AE5CE0B, 1240 0xC8DF5A44EE5D9D27, 0x23F45A55047500A4, 0xB016101202F9E28C, 0xAC30CD296833331D 1241 ], [ 1242 0x36BF1826884AD89, 0x9940C662D8467163, 0x4C433E174B19C210, 0xE29CCFD34CFF86C5, 1243 0x21FF11A042DF2653, 0x1B8E00CB6CE44B13, 0xA6123BF7A347B7CE, 0xD918900E3B2833CA 1244 ], [ 1245 0xD01C677A0A9A2CF9, 0x2A942F534A63B6B2, 0x88422246FEACA8B4, 0x474A5CC73D583559, 1246 0x74A6925DA55C6FA1, 0x7717E68CC4735C39, 0x82A3B0B53EC1AC6, 0x2AF658EB814DE762 1247 ], [ 1248 0x489548B601EEBC3A, 0xA50D6BC66BED8E81, 0xE0CE3DCF88265A75, 0xC28C4ADBC0F69CE9, 1249 0x54B79CD57F718513, 0x43414B8A977D0B7B, 0x631935BBDBF6157A, 0x6A7A4EF637018227 1250 ],]; 1251 1252 version(unittest) 1253 { 1254 import std.conv : hexString; 1255 }