| 1 | /* |
| 2 | * Exim - an Internet mail transport agent |
| 3 | * |
| 4 | * Copyright (C) 2010 - 2018 Exim maintainers |
| 5 | * Copyright (c) University of Cambridge 1995 - 2009 |
| 6 | * |
| 7 | * Hash interface functions |
| 8 | */ |
| 9 | |
| 10 | #ifndef STAND_ALONE |
| 11 | # include "exim.h" |
| 12 | |
| 13 | #else |
| 14 | |
| 15 | /* For stand-alone testing, we need to have the structure defined, and |
| 16 | to be able to do I/O */ |
| 17 | |
| 18 | # include <stdio.h> |
| 19 | # include <stdlib.h> |
| 20 | typedef unsigned char uschar; |
| 21 | typedef struct sha1 { |
| 22 | unsigned int H[5]; |
| 23 | unsigned int length; |
| 24 | } |
| 25 | sha1; |
| 26 | #endif /*STAND_ALONE*/ |
| 27 | |
| 28 | #include <assert.h> |
| 29 | |
| 30 | /******************************************************************************/ |
| 31 | #ifdef SHA_OPENSSL |
| 32 | |
| 33 | BOOL |
| 34 | exim_sha_init(hctx * h, hashmethod m) |
| 35 | { |
| 36 | /*XXX extend for sha512 */ |
| 37 | switch (h->method = m) |
| 38 | { |
| 39 | case HASH_SHA1: h->hashlen = 20; SHA1_Init (&h->u.sha1); break; |
| 40 | case HASH_SHA2_256: h->hashlen = 32; SHA256_Init(&h->u.sha2_256); break; |
| 41 | case HASH_SHA2_384: h->hashlen = 48; SHA384_Init(&h->u.sha2_512); break; |
| 42 | case HASH_SHA2_512: h->hashlen = 64; SHA512_Init(&h->u.sha2_512); break; |
| 43 | #ifdef EXIM_HAVE_SHA3 |
| 44 | case HASH_SHA3_224: h->hashlen = 28; |
| 45 | EVP_DigestInit(h->u.mctx = EVP_MD_CTX_new(), EVP_sha3_224()); |
| 46 | break; |
| 47 | case HASH_SHA3_256: h->hashlen = 32; |
| 48 | EVP_DigestInit(h->u.mctx = EVP_MD_CTX_new(), EVP_sha3_256()); |
| 49 | break; |
| 50 | case HASH_SHA3_384: h->hashlen = 48; |
| 51 | EVP_DigestInit(h->u.mctx = EVP_MD_CTX_new(), EVP_sha3_384()); |
| 52 | break; |
| 53 | case HASH_SHA3_512: h->hashlen = 64; |
| 54 | EVP_DigestInit(h->u.mctx = EVP_MD_CTX_new(), EVP_sha3_512()); |
| 55 | break; |
| 56 | #endif |
| 57 | default: h->hashlen = 0; return FALSE; |
| 58 | } |
| 59 | return TRUE; |
| 60 | } |
| 61 | |
| 62 | |
| 63 | void |
| 64 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 65 | { |
| 66 | switch (h->method) |
| 67 | { |
| 68 | case HASH_SHA1: SHA1_Update (&h->u.sha1, data, len); break; |
| 69 | case HASH_SHA2_256: SHA256_Update(&h->u.sha2_256, data, len); break; |
| 70 | case HASH_SHA2_384: SHA384_Update(&h->u.sha2_512, data, len); break; |
| 71 | case HASH_SHA2_512: SHA512_Update(&h->u.sha2_512, data, len); break; |
| 72 | #ifdef EXIM_HAVE_SHA3 |
| 73 | case HASH_SHA3_224: |
| 74 | case HASH_SHA3_256: |
| 75 | case HASH_SHA3_384: |
| 76 | case HASH_SHA3_512: EVP_DigestUpdate(h->u.mctx, data, len); break; |
| 77 | #endif |
| 78 | /* should be blocked by init not handling these, but be explicit to |
| 79 | guard against accidents later (and hush up clang -Wswitch) */ |
| 80 | default: assert(0); |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | |
| 85 | void |
| 86 | exim_sha_finish(hctx * h, blob * b) |
| 87 | { |
| 88 | b->data = store_get(b->len = h->hashlen); |
| 89 | switch (h->method) |
| 90 | { |
| 91 | case HASH_SHA1: SHA1_Final (b->data, &h->u.sha1); break; |
| 92 | case HASH_SHA2_256: SHA256_Final(b->data, &h->u.sha2_256); break; |
| 93 | case HASH_SHA2_384: SHA384_Final(b->data, &h->u.sha2_512); break; |
| 94 | case HASH_SHA2_512: SHA512_Final(b->data, &h->u.sha2_512); break; |
| 95 | #ifdef EXIM_HAVE_SHA3 |
| 96 | case HASH_SHA3_224: |
| 97 | case HASH_SHA3_256: |
| 98 | case HASH_SHA3_384: |
| 99 | case HASH_SHA3_512: EVP_DigestFinal(h->u.mctx, b->data, NULL); break; |
| 100 | #endif |
| 101 | default: assert(0); |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | |
| 106 | |
| 107 | #elif defined(SHA_GNUTLS) |
| 108 | /******************************************************************************/ |
| 109 | |
| 110 | BOOL |
| 111 | exim_sha_init(hctx * h, hashmethod m) |
| 112 | { |
| 113 | /*XXX extend for sha512 */ |
| 114 | switch (h->method = m) |
| 115 | { |
| 116 | case HASH_SHA1: h->hashlen = 20; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA1); break; |
| 117 | case HASH_SHA2_256: h->hashlen = 32; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA256); break; |
| 118 | case HASH_SHA2_384: h->hashlen = 48; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA384); break; |
| 119 | case HASH_SHA2_512: h->hashlen = 64; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA512); break; |
| 120 | #ifdef EXIM_HAVE_SHA3 |
| 121 | case HASH_SHA3_224: h->hashlen = 28; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA3_224); break; |
| 122 | case HASH_SHA3_256: h->hashlen = 32; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA3_256); break; |
| 123 | case HASH_SHA3_384: h->hashlen = 48; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA3_384); break; |
| 124 | case HASH_SHA3_512: h->hashlen = 64; gnutls_hash_init(&h->sha, GNUTLS_DIG_SHA3_512); break; |
| 125 | #endif |
| 126 | default: h->hashlen = 0; return FALSE; |
| 127 | } |
| 128 | return TRUE; |
| 129 | } |
| 130 | |
| 131 | |
| 132 | void |
| 133 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 134 | { |
| 135 | gnutls_hash(h->sha, data, len); |
| 136 | } |
| 137 | |
| 138 | |
| 139 | void |
| 140 | exim_sha_finish(hctx * h, blob * b) |
| 141 | { |
| 142 | b->data = store_get(b->len = h->hashlen); |
| 143 | gnutls_hash_output(h->sha, b->data); |
| 144 | } |
| 145 | |
| 146 | |
| 147 | |
| 148 | #elif defined(SHA_GCRYPT) |
| 149 | /******************************************************************************/ |
| 150 | |
| 151 | BOOL |
| 152 | exim_sha_init(hctx * h, hashmethod m) |
| 153 | { |
| 154 | /*XXX extend for sha512 */ |
| 155 | switch (h->method = m) |
| 156 | { |
| 157 | case HASH_SHA1: h->hashlen = 20; gcry_md_open(&h->sha, GCRY_MD_SHA1, 0); break; |
| 158 | case HASH_SHA2_256: h->hashlen = 32; gcry_md_open(&h->sha, GCRY_MD_SHA256, 0); break; |
| 159 | case HASH_SHA2_384: h->hashlen = 48; gcry_md_open(&h->sha, GCRY_MD_SHA384, 0); break; |
| 160 | case HASH_SHA2_512: h->hashlen = 64; gcry_md_open(&h->sha, GCRY_MD_SHA512, 0); break; |
| 161 | case HASH_SHA3_256: h->hashlen = 32; gcry_md_open(&h->sha, GCRY_MD_SHA3_256, 0); break; |
| 162 | case HASH_SHA3_384: h->hashlen = 48; gcry_md_open(&h->sha, GCRY_MD_SHA3_384, 0); break; |
| 163 | case HASH_SHA3_512: h->hashlen = 64; gcry_md_open(&h->sha, GCRY_MD_SHA3_512, 0); break; |
| 164 | default: h->hashlen = 0; return FALSE; |
| 165 | } |
| 166 | return TRUE; |
| 167 | } |
| 168 | |
| 169 | |
| 170 | void |
| 171 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 172 | { |
| 173 | gcry_md_write(h->sha, data, len); |
| 174 | } |
| 175 | |
| 176 | |
| 177 | void |
| 178 | exim_sha_finish(hctx * h, blob * b) |
| 179 | { |
| 180 | b->data = store_get(b->len = h->hashlen); |
| 181 | memcpy(b->data, gcry_md_read(h->sha, 0), h->hashlen); |
| 182 | } |
| 183 | |
| 184 | |
| 185 | |
| 186 | |
| 187 | #elif defined(SHA_POLARSSL) |
| 188 | /******************************************************************************/ |
| 189 | |
| 190 | BOOL |
| 191 | exim_sha_init(hctx * h, hashmethod m) |
| 192 | { |
| 193 | /*XXX extend for sha512 */ |
| 194 | switch (h->method = m) |
| 195 | { |
| 196 | case HASH_SHA1: h->hashlen = 20; sha1_starts(&h->u.sha1); break; |
| 197 | case HASH_SHA2_256: h->hashlen = 32; sha2_starts(&h->u.sha2, 0); break; |
| 198 | default: h->hashlen = 0; return FALSE; |
| 199 | } |
| 200 | return TRUE; |
| 201 | } |
| 202 | |
| 203 | |
| 204 | void |
| 205 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 206 | { |
| 207 | switch (h->method) |
| 208 | { |
| 209 | case HASH_SHA1: sha1_update(h->u.sha1, US data, len); break; |
| 210 | case HASH_SHA2_256: sha2_update(h->u.sha2, US data, len); break; |
| 211 | } |
| 212 | } |
| 213 | |
| 214 | |
| 215 | void |
| 216 | exim_sha_finish(hctx * h, blob * b) |
| 217 | { |
| 218 | b->data = store_get(b->len = h->hashlen); |
| 219 | switch (h->method) |
| 220 | { |
| 221 | case HASH_SHA1: sha1_finish(h->u.sha1, b->data); break; |
| 222 | case HASH_SHA2_256: sha2_finish(h->u.sha2, b->data); break; |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | |
| 227 | |
| 228 | |
| 229 | #elif defined(SHA_NATIVE) |
| 230 | /******************************************************************************/ |
| 231 | /* Only sha-1 supported */ |
| 232 | |
| 233 | /************************************************* |
| 234 | * Start off a new SHA-1 computation. * |
| 235 | *************************************************/ |
| 236 | |
| 237 | /* |
| 238 | Argument: pointer to sha1 storage structure |
| 239 | Returns: nothing |
| 240 | */ |
| 241 | |
| 242 | static void |
| 243 | native_sha1_start(sha1 *base) |
| 244 | { |
| 245 | base->H[0] = 0x67452301; |
| 246 | base->H[1] = 0xefcdab89; |
| 247 | base->H[2] = 0x98badcfe; |
| 248 | base->H[3] = 0x10325476; |
| 249 | base->H[4] = 0xc3d2e1f0; |
| 250 | base->length = 0; |
| 251 | } |
| 252 | |
| 253 | |
| 254 | |
| 255 | /************************************************* |
| 256 | * Process another 64-byte block * |
| 257 | *************************************************/ |
| 258 | |
| 259 | /* This function implements central part of the algorithm |
| 260 | |
| 261 | Arguments: |
| 262 | base pointer to sha1 storage structure |
| 263 | text pointer to next 64 bytes of subject text |
| 264 | |
| 265 | Returns: nothing |
| 266 | */ |
| 267 | |
| 268 | static void |
| 269 | native_sha1_mid(sha1 *base, const uschar *text) |
| 270 | { |
| 271 | int i; |
| 272 | uint A, B, C, D, E; |
| 273 | uint W[80]; |
| 274 | |
| 275 | base->length += 64; |
| 276 | |
| 277 | for (i = 0; i < 16; i++) |
| 278 | { |
| 279 | W[i] = ((uint)text[0] << 24) | (text[1] << 16) | (text[2] << 8) | text[3]; |
| 280 | text += 4; |
| 281 | } |
| 282 | |
| 283 | for (i = 16; i < 80; i++) |
| 284 | { |
| 285 | register unsigned int x = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16]; |
| 286 | W[i] = (x << 1) | (x >> 31); |
| 287 | } |
| 288 | |
| 289 | A = base->H[0]; |
| 290 | B = base->H[1]; |
| 291 | C = base->H[2]; |
| 292 | D = base->H[3]; |
| 293 | E = base->H[4]; |
| 294 | |
| 295 | for (i = 0; i < 20; i++) |
| 296 | { |
| 297 | unsigned int T; |
| 298 | T = ((A << 5) | (A >> 27)) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5a827999; |
| 299 | E = D; |
| 300 | D = C; |
| 301 | C = (B << 30) | (B >> 2); |
| 302 | B = A; |
| 303 | A = T; |
| 304 | } |
| 305 | |
| 306 | for (i = 20; i < 40; i++) |
| 307 | { |
| 308 | unsigned int T; |
| 309 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0x6ed9eba1; |
| 310 | E = D; |
| 311 | D = C; |
| 312 | C = (B << 30) | (B >> 2); |
| 313 | B = A; |
| 314 | A = T; |
| 315 | } |
| 316 | |
| 317 | for (i = 40; i < 60; i++) |
| 318 | { |
| 319 | unsigned int T; |
| 320 | T = ((A << 5) | (A >> 27)) + ((B & C) | (B & D) | (C & D)) + E + W[i] + |
| 321 | 0x8f1bbcdc; |
| 322 | E = D; |
| 323 | D = C; |
| 324 | C = (B << 30) | (B >> 2); |
| 325 | B = A; |
| 326 | A = T; |
| 327 | } |
| 328 | |
| 329 | for (i = 60; i < 80; i++) |
| 330 | { |
| 331 | unsigned int T; |
| 332 | T = ((A << 5) | (A >> 27)) + (B ^ C ^ D) + E + W[i] + 0xca62c1d6; |
| 333 | E = D; |
| 334 | D = C; |
| 335 | C = (B << 30) | (B >> 2); |
| 336 | B = A; |
| 337 | A = T; |
| 338 | } |
| 339 | |
| 340 | base->H[0] += A; |
| 341 | base->H[1] += B; |
| 342 | base->H[2] += C; |
| 343 | base->H[3] += D; |
| 344 | base->H[4] += E; |
| 345 | } |
| 346 | |
| 347 | |
| 348 | |
| 349 | |
| 350 | /************************************************* |
| 351 | * Process the final text string * |
| 352 | *************************************************/ |
| 353 | |
| 354 | /* The string may be of any length. It is padded out according to the rules |
| 355 | for computing SHA-1 digests. The final result is then converted to text form |
| 356 | and returned. |
| 357 | |
| 358 | Arguments: |
| 359 | base pointer to the sha1 storage structure |
| 360 | text pointer to the final text vector |
| 361 | length length of the final text vector |
| 362 | digest points to 16 bytes in which to place the result |
| 363 | |
| 364 | Returns: nothing |
| 365 | */ |
| 366 | |
| 367 | static void |
| 368 | native_sha1_end(sha1 *base, const uschar *text, int length, uschar *digest) |
| 369 | { |
| 370 | int i; |
| 371 | uschar work[64]; |
| 372 | |
| 373 | /* Process in chunks of 64 until we have less than 64 bytes left. */ |
| 374 | |
| 375 | while (length >= 64) |
| 376 | { |
| 377 | native_sha1_mid(base, text); |
| 378 | text += 64; |
| 379 | length -= 64; |
| 380 | } |
| 381 | |
| 382 | /* If the remaining string contains more than 55 bytes, we must pad it |
| 383 | out to 64, process it, and then set up the final chunk as 56 bytes of |
| 384 | padding. If it has less than 56 bytes, we pad it out to 56 bytes as the |
| 385 | final chunk. */ |
| 386 | |
| 387 | memcpy(work, text, length); |
| 388 | work[length] = 0x80; |
| 389 | |
| 390 | if (length > 55) |
| 391 | { |
| 392 | memset(work+length+1, 0, 63-length); |
| 393 | native_sha1_mid(base, work); |
| 394 | base->length -= 64; |
| 395 | memset(work, 0, 56); |
| 396 | } |
| 397 | else |
| 398 | { |
| 399 | memset(work+length+1, 0, 55-length); |
| 400 | } |
| 401 | |
| 402 | /* The final 8 bytes of the final chunk are a 64-bit representation of the |
| 403 | length of the input string *bits*, before padding, high order word first, and |
| 404 | high order bytes first in each word. This implementation is designed for short |
| 405 | strings, and so operates with a single int counter only. */ |
| 406 | |
| 407 | length += base->length; /* Total length in bytes */ |
| 408 | length <<= 3; /* Total length in bits */ |
| 409 | |
| 410 | work[63] = length & 0xff; |
| 411 | work[62] = (length >> 8) & 0xff; |
| 412 | work[61] = (length >> 16) & 0xff; |
| 413 | work[60] = (length >> 24) & 0xff; |
| 414 | |
| 415 | memset(work+56, 0, 4); |
| 416 | |
| 417 | /* Process the final 64-byte chunk */ |
| 418 | |
| 419 | native_sha1_mid(base, work); |
| 420 | |
| 421 | /* Pass back the result, high-order byte first in each word. */ |
| 422 | |
| 423 | for (i = 0; i < 5; i++) |
| 424 | { |
| 425 | register int x = base->H[i]; |
| 426 | *digest++ = (x >> 24) & 0xff; |
| 427 | *digest++ = (x >> 16) & 0xff; |
| 428 | *digest++ = (x >> 8) & 0xff; |
| 429 | *digest++ = x & 0xff; |
| 430 | } |
| 431 | } |
| 432 | |
| 433 | |
| 434 | |
| 435 | |
| 436 | |
| 437 | |
| 438 | # ifdef notdef |
| 439 | BOOL |
| 440 | exim_sha_init(hctx * h, hashmethod m) |
| 441 | { |
| 442 | h->hashlen = 20; |
| 443 | native_sha1_start(&h->sha1); |
| 444 | return TRUE; |
| 445 | } |
| 446 | |
| 447 | |
| 448 | void |
| 449 | exim_sha_update(hctx * h, const uschar * data, int len) |
| 450 | { |
| 451 | native_sha1_mid(&h->sha1, US data); /* implicit size always 64 */ |
| 452 | } |
| 453 | |
| 454 | |
| 455 | void |
| 456 | exim_sha_finish(hctx * h, blob * b) |
| 457 | { |
| 458 | b->data = store_get(b->len = h->hashlen); |
| 459 | |
| 460 | native_sha1_end(&h->sha1, NULL, 0, b->data); |
| 461 | } |
| 462 | # endif |
| 463 | |
| 464 | |
| 465 | #endif |
| 466 | |
| 467 | |
| 468 | /******************************************************************************/ |
| 469 | /******************************************************************************/ |
| 470 | /******************************************************************************/ |
| 471 | /******************************************************************************/ |
| 472 | /* Original sha-1 interface used by crypteq{shal1}, |
| 473 | ${sha1:} ${hmac:} and ${prvs:} */ |
| 474 | |
| 475 | #ifdef SHA_NATIVE |
| 476 | |
| 477 | void |
| 478 | sha1_start(hctx * h) |
| 479 | { |
| 480 | native_sha1_start(&h->sha1); |
| 481 | } |
| 482 | |
| 483 | void |
| 484 | sha1_mid(hctx * h, const uschar * data) |
| 485 | { |
| 486 | native_sha1_mid(&h->sha1, data); |
| 487 | } |
| 488 | |
| 489 | void |
| 490 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) |
| 491 | { |
| 492 | native_sha1_end(&h->sha1, data, len, digest); |
| 493 | } |
| 494 | |
| 495 | #else |
| 496 | |
| 497 | void |
| 498 | sha1_start(hctx * h) |
| 499 | { |
| 500 | (void) exim_sha_init(h, HASH_SHA1); |
| 501 | } |
| 502 | |
| 503 | void |
| 504 | sha1_mid(hctx * h, const uschar * data) |
| 505 | { |
| 506 | exim_sha_update(h, data, 64); |
| 507 | } |
| 508 | |
| 509 | void |
| 510 | sha1_end(hctx * h, const uschar * data, int len, uschar *digest) |
| 511 | { |
| 512 | blob b; |
| 513 | exim_sha_update(h, data, len); |
| 514 | exim_sha_finish(h, &b); |
| 515 | memcpy(digest, b.data, 20); |
| 516 | } |
| 517 | |
| 518 | #endif |
| 519 | |
| 520 | |
| 521 | |
| 522 | |
| 523 | |
| 524 | |
| 525 | /************************************************* |
| 526 | ************************************************** |
| 527 | * Stand-alone test program * |
| 528 | ************************************************** |
| 529 | *************************************************/ |
| 530 | |
| 531 | # ifdef STAND_ALONE |
| 532 | |
| 533 | /* Test values. The first 128 may contain binary zeros and have increasing |
| 534 | length. */ |
| 535 | |
| 536 | static uschar *tests[] = { |
| 537 | "", |
| 538 | "\x24", |
| 539 | "\x70\xf0", |
| 540 | "\x0e\x1e\xf0", |
| 541 | "\x08\x38\x78\x8f", |
| 542 | "\x10\x3e\x08\xfc\x0f", |
| 543 | "\xe7\xc7\x1e\x07\xef\x03", |
| 544 | "\xe0\xfb\x71\xf8\xf9\xc1\xfc", |
| 545 | "\xff\x7c\x60\x3c\x1f\x80\xe2\x07", |
| 546 | "\xf0\x3f\xc8\x60\x81\xfe\x01\xf8\x7f", |
| 547 | "\x9f\xc7\xf8\x1f\xc1\xe3\xc7\xc7\x3f\x00", |
| 548 | "\x00\x7f\xbf\xdf\xc0\xfe\x02\x7e\x00\xf8\x7f", |
| 549 | "\x01\x01\xc0\x1e\x03\xf8\x30\x08\x0f\xf3\xf9\xff", |
| 550 | "\xc4\x03\xfc\x0f\xf8\x01\xc0\x0f\xf0\x06\x10\x41\xff", |
| 551 | "\xff\x07\x80\x47\xfc\x1f\xc0\x60\x30\x1f\xe0\x3c\x03\xff", |
| 552 | "\x80\x3f\x84\x3e\xff\xc0\x3f\x0f\x00\x7f\xc0\x1f\xe7\xfc\x00", |
| 553 | "\xff\xe0\x7f\x01\x81\x81\xff\x81\xff\x00\x3e\x00\x20\x7f\x80\x0f", |
| 554 | "\x00\x3e\x00\x70\x1f\xe0\x0f\xfa\xff\xc8\x3f\xf3\xfe\x00\xff\x80\xff", |
| 555 | "\x7f\xef\xc0\x1e\x7c\xff\xe0\x1f\xfe\x00\x1f\xf0\x08\xff\xc0\x7f\xf0\x00", |
| 556 | "\xe0\x0f\x80\x07\x0c\x01\xff\xe0\x03\xf0\x2f\xf8\x3f\xef\x00\x78\x01\xfe\x00", |
| 557 | "\xe7\x00\x10\x00\xf8\x18\x0f\xf0\xff\x00\xff\x80\x3f\xc3\xfe\xf0\x0f\xfc\x01\xff", |
| 558 | "\x00\x1f\xf8\x0f\xfc\x00\xfc\x00\xff\x87\xc0\x0f\x80\x7b\xff\x00\x0f\x02\x01\xff\xc0", |
| 559 | "\x00\x0f\xf0\x03\xc7\xf8\x3e\x03\xff\x80\x03\xff\x80\x07\xff\x0f\xff\x1f\x83\xff\x80\x1f", |
| 560 | "\xff\xc0\x1f\x80\x3f\x9f\xf8\x78\x3e\x7f\xf8\x00\x3e\x20\x04\x3f\x80\x7f\xfc\x00\x1f\xfe\x00", |
| 561 | "\x3f\x07\x80\xe0\x07\xe0\x00\xfc\x7f\xc0\xc0\x0f\x8f\xf0\x80\x0e\x0e\x03\xff\xbf\xfc\x01\xff\xe0", |
| 562 | "\xff\xfc\x11\xfc\xe0\x0e\x1f\xff\x87\x80\x1f\xe0\xff\xfd\xff\xc0\x03\xff\xc0\x0f\x00\x07\xf0\x01\xff", |
| 563 | "\xf0\x07\xc1\xfe\x00\xf8\x01\xe7\x80\xff\x80\x3f\x1f\x7f\x8c\x00\x1c\x00\x0f\xf8\x07\xfc\x00\xff\xfc\x00", |
| 564 | "\x00\x0f\xf8\x3f\xc0\x60\x00\x7f\xf8\xff\x00\x03\xf0\x3c\x07\xc0\x7f\xe0\x3f\xf8\x01\x00\x7e\x03\xff\xc0\x00", |
| 565 | "\x00\x0f\xf8\x03\x00\x1f\xff\x00\x0f\xfe\x00\x3f\x00\x03\xff\xe0\x07\xc0\xff\x00\x3c\x7f\xf0\x01\xff\xf8\x3f\xff", |
| 566 | "\x00\x01\xe0\xe0\x1f\xfe\x00\x03\xfc\x00\x0f\xff\xe0\x0f\xff\x00\x0e\x00\x7f\xfc\x0f\xfe\x00\x78\x00\x3f\xff\x00\xff", |
| 567 | "\x80\x41\xff\xc3\xfe\x00\x1e\x00\x0f\xff\xe0\xff\x80\x0f\xe0\x00\x7f\xf7\xff\x01\xfe\x01\xff\xdf\xff\x00\x01\xff\xe0\x00", |
| 568 | "\xf8\x07\x00\xff\xc0\x7f\xbe\x00\x0f\xff\x00\x03\xe3\xf0\xff\xf0\x00\x1f\x81\xff\x80\x0f\xff\x80\x20\x03\xf0\x03\x80\xff\xfc", |
| 569 | "\x00\x38\x20\x00\x7f\xf0\x01\xff\xfe\xcf\xfe\x07\xff\xc0\x00\x7f\xf8\x1f\x00\x00\xc0\x00\xc0\x0f\xff\x3e\x0f\xc0\x0f\xff\x80\x00", |
| 570 | "\x1f\xf8\x07\xff\xf8\x03\xe0\x01\xff\xfc\x3f\xf8\x00\x38\x1f\x00\x3f\xdc\x01\xc0\x04\xff\xff\x00\x0f\xfc\x08\x02\x00\x01\xf0\x3f\xff", |
| 571 | "\x80\x07\x86\x00\x03\xff\xe0\x00\x3f\xf8\x00\x0f\x80\x0f\xf8\x0f\xff\xe0\x00\x1f\x80\x00\x7f\xf8\xc0\x0f\xff\xf0\x7c\x04\x07\xff\x00\x00", |
| 572 | "\x01\xff\x00\x18\x3e\x0f\x00\x07\xff\xc0\x00\xf0\x1f\xfe\x07\x80\x60\x0f\xf8\x00\x3f\xfe\x38\x1f\xc0\x00\x3f\x81\xff\xfc\x1f\xe0\x00\x3f\xff", |
| 573 | "\xf0\x3f\xff\xc0\x00\x7f\xf0\x00\x3f\xff\x0f\xe0\x07\x0f\xfc\x7e\x03\xff\xf0\xfc\x0f\x9f\xc0\x3f\xff\xcf\xff\x00\x00\xff\xc0\x00\xe7\x01\xff\xf8", |
| 574 | "\x00\x01\xff\x80\x20\x00\x7f\xe0\x00\x7e\x07\xff\xf8\xc7\xf8\xff\xf0\x0f\xfe\x00\x00\xe0\x0f\xe0\x00\x1f\xff\x87\xff\x00\x01\xf0\x00\x7f\xc1\xff\xff", |
| 575 | "\x00\x00\x7f\xff\xc0\x01\xfe\x7e\x01\xff\xfe\xff\xf0\x7f\xff\xcf\xf8\x07\xfe\x00\x0f\xff\xc0\x07\xff\xfc\x00\x3e\x00\x07\xfc\x00\x7f\xc0\x07\x80\x0f\xff", |
| 576 | "\xff\xff\x03\xff\x07\xf8\xff\xff\x80\x00\x7f\xfe\xff\xfe\x00\x03\xff\xf8\x1f\xff\x3f\xf8\x1f\xff\x00\x1f\xff\x0f\xc0\x7f\xf0\x01\xff\xe0\x00\x1f\xff\x00\x00", |
| 577 | "\xff\xff\x00\x00\xff\xfc\x00\x03\x0f\xff\xf0\x01\xf8\x00\x0f\xe1\xff\xff\x03\xe0\x3f\x1f\xff\x80\x00\x7c\x00\x01\xff\xc0\x01\x7f\xfe\x00\x0e\x07\xff\xe0\xff\xff", |
| 578 | "\xc0\x00\x3f\xfe\x03\xfc\x0c\x00\x04\x01\xff\xe1\xe0\x03\xff\xe0\x30\x01\xff\x00\x00\x3c\x1e\x01\x80\x01\xff\x00\x40\x3f\xfe\x00\x3f\xff\x80\x7c\x01\xff\x80\x00\x7f", |
| 579 | "\x3f\xa0\x00\x0f\xff\x81\xff\xc0\x0f\xf0\x7f\xf8\x00\x0f\xc0\x00\x7f\xe0\x01\xe0\x00\x04\xff\x00\x1f\xfe\x00\x01\xff\x80\x07\xff\xfe\x00\x3f\xff\xc0\x03\xff\x80\x00\x3f", |
| 580 | "\xf0\x1f\xff\x01\xff\x80\xff\xc0\x80\x07\xf0\x00\x03\xff\x80\x00\x18\x01\xff\xfc\x00\xff\xfc\x03\xff\xff\x00\x7f\xc0\x03\xff\xc7\xff\xc0\x03\xf0\xff\x80\x00\x3f\xfe\x00\x00", |
| 581 | "\x07\xf1\xbf\xff\xe0\x00\x78\x00\x07\xe0\x00\x80\x03\xf0\x3f\xf7\x00\x00\x38\x00\xfe\x00\xf8\x0f\xfe\x00\x00\x80\x3f\xff\xc1\xff\xfc\x00\xff\xff\x8f\xf0\x00\x1f\xff\xf0\x0f\xff", |
| 582 | "\x00\x1c\x00\x07\xff\xfc\x00\x5e\x3f\xff\x00\x00\x3c\xff\xff\xc0\x3f\xff\x81\xe0\x70\x00\x1f\xfc\x00\x03\xff\x00\x00\x7f\xff\xc0\x1f\x8c\x0f\xff\xf0\xff\x80\x07\xe0\x10\x01\xff\xff", |
| 583 | "\xc0\x00\x07\xff\x80\x7f\xff\x80\x01\x80\x3f\xff\xcf\xc0\xfe\x00\xff\xc0\x1f\xfc\x01\xff\xf8\x00\xff\xfe\x0f\xff\xf0\x06\x00\x00\xc0\x3f\xff\x80\x78\xff\xfc\x00\x0f\xff\xf0\x00\x0f\xff", |
| 584 | "\xff\xe0\x07\xff\xf8\x00\x7f\xf0\x1f\xff\x80\x01\xff\xf8\x1f\xf8\x01\x03\xff\xe0\x00\x03\xe0\x78\x0f\xff\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xe0\x1f\x00\x07\xff\xfc\x00\x1f\x03\xff\xf7\xff\xff", |
| 585 | "\xc0\xf8\x00\x03\xfe\x00\x3f\xff\xf0\x00\x03\xfc\x0f\xff\x80\x00\xe3\xff\xf8\x3f\xfe\x00\x00\x73\xe0\xff\xfc\x07\xff\xc3\xff\xfe\x03\x00\x00\x70\x00\x03\xff\xf8\x0f\xff\xe0\x00\x1f\xff\xf8\x00", |
| 586 | "\xff\xf0\x0f\xc7\xff\xfc\x00\x3f\xfe\x00\x00\x3f\xff\x80\x3f\x80\x00\x3f\xff\xc0\x00\x70\x01\xff\xc1\x80\x03\xff\xff\x80\x00\x61\xff\xfe\x03\xfd\x80\x3f\xff\xe0\x01\xc1\xff\xff\x80\x00\x0f\xfe\x00", |
| 587 | "\xff\xfc\x00\x03\xff\xf0\x0f\xf8\x00\x07\xdf\x8f\xff\xf8\x00\x01\xff\xfe\x00\x80\x00\xff\x80\x1f\xf0\x00\x01\x1c\x00\x00\x3f\xf8\x00\x3f\xff\xef\xff\xfe\x01\xc3\x80\x80\x01\xff\xff\xc0\x00\x07\xff\xff", |
| 588 | "\xff\xff\xc0\x01\xff\xc1\xff\xff\x87\xff\xff\x00\x3f\x00\x00\x1f\xfc\x00\x01\xff\x80\x1f\xc0\x1f\xff\x00\x00\xff\x80\x1f\xff\xf8\x7f\xf8\x3f\xff\xc1\xff\xff\xe0\x01\xc0\x3f\xf7\xff\xfe\xfc\x00\x00\x3f\xff", |
| 589 | "\x00\xff\x81\xff\xe0\x03\xf8\x0e\x00\x00\xff\xf8\x1f\xff\xfe\x00\x00\xff\x80\x00\x07\xff\xf8\x01\xff\xe0\x00\x0f\xf0\x01\xfe\x00\x3f\xf0\x7f\xe0\x00\x7f\xff\xe0\x1f\xff\xfc\x01\xff\xe0\x01\x80\x00\x07\xff\xff", |
| 590 | "\x00\x0f\xff\xf0\x00\x00\xe0\x0f\xf8\x00\x00\xff\xff\x80\x03\xff\xe1\xff\xff\x3f\xf8\x0f\xff\xc7\xe0\x00\x1f\xff\x00\x3f\xfe\x0f\xff\xf0\x03\x00\xc0\x00\x1f\xff\xfc\x3f\xff\xe0\x3f\xff\xf8\x1f\xf0\x00\x1f\xff\xc0", |
| 591 | "\x01\x80\x00\x1f\x01\xff\xff\x83\x00\x01\xfc\x00\x7f\xe0\x0e\x7f\xfe\x00\x00\x38\x00\xff\x00\x00\x3f\xff\x83\x83\xff\xc0\x00\x7f\xff\x80\x1f\xff\xf0\x1f\xff\xfc\x00\x03\x7f\xff\x81\xc0\x00\x07\xff\x83\xff\xff\x00\x00", |
| 592 | "\xff\x80\x0d\xff\xe0\x03\xff\xf0\x00\xff\xfc\x00\xf0\x01\xf8\x07\xff\xf8\x0f\x80\x0f\xff\xff\x00\xff\xff\x87\xff\xe1\xff\xfc\x67\x8c\x7f\xfe\x00\x03\xff\x3f\xfc\x07\x01\xff\xff\xe0\x00\x01\xff\xff\xc0\x0c\x40\x0f\xff\xff", |
| 593 | "\x00\x00\x1f\xff\xfe\x00\x1f\x00\x00\x1f\xff\xff\x07\xff\xff\xc0\x07\xff\xe0\x00\x02\x00\x00\xff\x00\x78\x00\x00\xe0\x00\x08\x00\x1f\xff\xff\x00\x03\xf8\x1f\x00\x00\x0f\xff\xc0\x00\x01\xff\xff\xe1\xf8\x00\x00\x3f\x80\x0f\xff", |
| 594 | "\x00\x0f\xf8\x00\xfc\x00\x03\xff\xff\x00\x00\x3f\xf0\x01\xff\xff\xe0\x7f\xf8\x00\xf8\x0f\xff\xff\x80\x00\x0f\xff\xfc\x0f\xff\xe0\x00\x00\xff\xc3\xff\xf0\x07\xff\xff\x00\x38\xf8\x00\x20\x1f\xfe\x3f\xfe\x00\xfe\x00\x7f\xff\xc0\x00", |
| 595 | "\x00\x3f\x00\xe0\x00\x0f\xff\xfc\x7f\xff\xfc\x00\x00\x7e\x00\x00\xff\xfe\x1f\xf0\x00\x1f\xf0\x00\x1f\xff\x87\xf0\x00\x3f\xc0\x0f\xff\x87\xff\x00\x3f\x81\xff\xff\xf7\xff\xe0\xff\xe0\x3f\x9f\xff\x00\x07\x00\x7f\xfc\x03\xff\xf0\x00\x00", |
| 596 | "\xe0\x3f\xff\xf0\xff\x80\x3e\x00\x03\xff\xe0\x00\x0f\xfc\x00\x07\xff\xf8\x00\x00\x7f\x80\x00\x0f\xf8\x01\xff\x7f\xff\xf0\x00\x3f\xff\xfe\x7f\xff\xe0\x00\xff\xc3\xff\xff\x00\x00\xf0\x00\x00\x7f\xff\x00\x3f\xff\xf0\x00\x01\xc0\x03\xff\xff", |
| 597 | "\x00\x03\xc0\x01\xff\xdf\xfd\xff\x9f\xfe\x1f\xff\xff\x00\x3f\xff\xfe\x00\x00\x7f\xcf\xff\xf0\x1f\xff\xfe\x07\xf0\x00\xff\xff\xe0\x00\x01\x00\x07\xff\x80\x1f\xe0\x00\x00\xff\xfe\x03\xff\xff\x80\x03\xf0\x0f\xff\xfe\x00\x00\x1f\xff\xf8\x00\x00", |
| 598 | "\x00\x1f\xff\xfb\xff\xfe\x00\x07\xff\xf0\x00\x00\xff\xff\x00\x00\x0f\xf3\xff\xfe\x00\x78\x00\x00\x3e\x00\x00\x3f\xff\xf8\x00\x1f\xff\xff\x80\x00\x03\xff\xff\x00\x07\xff\xee\x00\x1f\xfc\x00\x78\x00\x00\x1f\xff\x07\xff\xfe\x03\xff\xff\xe0\x00\x00", |
| 599 | "\x00\x7f\xff\xfe\x00\x00\x3f\xfc\x03\xff\xfc\x1f\xff\xf0\x7f\xd8\x03\xf0\x00\xfd\xfc\x38\x00\x08\x00\x10\x00\xe0\x06\x00\x7f\xfe\x00\x00\x0f\xff\x80\x00\x3f\x03\xff\xfe\xff\xff\xf9\xff\xf8\x00\x07\xff\xfc\x01\xff\xc0\x00\x03\xff\xff\xe0\x03\xff\xff", |
| 600 | "\xff\xf0\x0f\xff\xff\x00\x06\x00\xff\xff\xf0\x07\xff\xe0\x04\x00\x03\x00\x00\x03\xf0\xff\xff\x00\x03\xff\xfb\xff\xc3\xff\xf0\x07\xff\xff\xc7\x00\x7f\x80\x00\x03\xff\xf8\x00\x1f\xe1\xff\xf8\x63\xfc\x00\x3f\xc0\x9f\xff\xf8\x00\x00\x7f\xff\x1f\xff\xfc\x00", |
| 601 | "\x00\x3f\xff\xfc\x00\x0f\xc7\x80\x00\x02\x00\x1e\x00\x00\x60\x7f\x03\xfe\x00\x00\x1f\xff\x80\x1f\xf8\x00\x00\xff\xff\x80\x00\x03\xff\xc0\x00\x7f\xff\xc0\x7f\xe0\x03\xfc\x00\xff\xf7\xff\xff\x00\x00\x1f\xf0\x00\x03\xff\xff\xe1\xff\xff\x80\x0f\xf8\x00\x00\x1f", |
| 602 | "\x00\x01\xfe\x00\x03\x83\xf3\xff\xff\x80\x07\xff\xfc\x3f\xff\xfc\x03\xff\x80\x00\x06\x00\x00\x78\x00\x07\xff\xff\x80\x07\xfc\x01\xf8\x00\x07\xff\xff\xc0\x00\x38\x00\x07\xff\xfe\x3f\xff\xf8\x3f\xff\xcf\x3f\xfc\x00\x7f\xff\x00\x1f\xff\x80\x00\x30\x03\xff\xff\x00", |
| 603 | "\xf8\x00\x38\x00\x00\x3e\x3f\x00\x00\x3f\xff\xf0\x02\x00\x00\x0f\xff\xff\x80\x80\x03\xff\xc0\x00\x04\x00\x0f\xc0\x3f\xff\xfe\x00\x00\x3f\xff\xfe\x00\x3f\xff\xf8\x00\x30\x00\x7b\xff\x00\x00\x03\xff\xfc\x3f\xe1\xff\x80\x00\x70\x1f\xff\xc0\x07\xfc\x00\x1f\xff\xf0\x00", |
| 604 | "\x00\x03\xf8\x18\x00\x00\x70\x3f\xff\xf8\x00\x00\xff\xcf\xff\xff\xc0\x03\xff\xfe\x00\x10\x00\x00\xfe\x03\xff\xf8\x00\x00\x7e\x00\x00\x7f\x8f\xff\xc0\x00\x00\x7f\xff\xe0\x00\x3c\x07\xc0\x00\x00\x7f\xff\x01\xff\xf8\x01\xff\x80\x00\x0f\xff\xf9\xe0\x00\x3f\xff\xe0\x00\x00", |
| 605 | "\xff\xfe\x00\x3f\xc0\x1f\xff\xf0\x7f\xf8\x00\x01\xff\xf8\x1f\xff\xfe\x00\x00\xff\xff\xf8\x00\x7f\xff\x80\x3f\xff\xff\x00\x7f\xff\xf8\x00\x0c\x00\x00\x0f\xfe\x7e\x00\x3f\xe0\x18\x7f\xfe\x00\x00\x38\x00\x00\x3f\xff\xfe\x00\x00\x03\xfc\xff\xe1\xfe\x1f\xff\xfe\x00\x00\x07\xff", |
| 606 | "\x00\x00\x07\xff\xfe\x00\x00\x07\xfe\x00\x00\x3f\xe0\x00\x7f\xff\xc0\x00\x00\x7f\xff\xfc\x00\xfe\x00\x03\xff\xe0\x00\x1f\x0f\xfc\x00\x1f\xff\x80\x00\x07\xff\xff\xf0\x00\xff\xff\xf0\x00\x00\x1f\xff\xf8\x01\xff\xe0\x1f\xff\xff\x00\x1f\x80\x07\xf0\x00\x01\xff\xf8\x00\x01\xff\xff", |
| 607 | "\x00\x00\x3f\xff\xff\x03\xfe\x00\x00\x07\xc0\x00\x00\x7f\xfc\x0f\xf0\x00\x00\x1f\xff\xfe\x00\x00\x07\xc0\x00\x00\xff\xfe\x00\x00\x3f\xff\xfc\x01\xff\x7f\xfc\x00\x1f\xf8\x00\x1f\xff\x07\xff\xff\xe0\x00\x7f\xff\xfc\x01\xff\xff\xf0\x00\x01\xff\xf8\x00\x1e\x00\x00\x7f\xfc\x00\x3f\xff", |
| 608 | "\xfe\x3f\xff\x83\xff\xfe\x00\x07\xff\xff\xf0\x00\x3e\x00\x00\xff\xff\xfc\x00\x40\x3f\xfe\x00\x00\x03\xf0\x00\x00\x70\x3f\xf8\x0f\xff\xff\xe0\x1f\x80\x00\x03\xc3\xff\xff\xf0\x00\x01\xff\xf0\x0f\x80\x00\x0f\xe0\xff\xff\xfe\xf0\x00\x01\xff\xc0\x00\x00\x7f\xf0\x00\x00\x7f\xfe\xe0\x00\x00", |
| 609 | "\x00\x00\x03\xff\xf0\x01\xfc\x00\x00\xff\xff\x00\x00\x7f\xff\xff\x80\x07\xff\x8f\xff\x80\x00\x0f\xff\xf0\x00\x00\x3c\x00\x03\xc0\xff\xff\xfe\x01\xff\xff\x80\x0c\x7f\xff\xf8\x00\x00\x1f\xf0\x00\x00\x7f\x80\x00\x00\x80\x00\x00\xff\xff\xf0\x1f\xff\xe0\x00\xff\xff\xfe\x1f\xff\x1f\xc0\x00\x00", |
| 610 | "\xff\xff\xfe\x07\xff\xc0\x00\x06\x3f\x9f\xf0\x07\xff\xf0\x3f\xfe\x1f\xff\xff\x81\xff\xff\xc0\x00\x02\x00\xfe\x00\x04\x00\x07\x00\x00\x01\xff\xff\xfe\x00\x00\x07\xff\xfe\x00\x1f\xfe\x00\x00\xff\xff\xe0\x07\xf8\x00\xff\xff\xfc\x00\x3f\xf3\xff\xff\xc0\x00\x7f\xff\xe0\x00\x0f\xff\xfc\x07\xff\xff", |
| 611 | "\xff\xf0\x00\x00\x7e\x00\x1e\x03\xff\xff\x00\x00\x73\xff\xf0\x00\x00\x0f\xff\xdf\xff\xff\xdf\xfc\x00\x07\xfe\x07\xff\xfe\x00\x00\x1f\xdf\xef\xff\xf0\x3f\xff\xfc\x00\x00\x07\xff\xff\xf0\x00\x00\x7f\xe0\x07\xff\x80\x00\x00\x7f\xe0\x03\xff\xff\xf9\xff\xe0\x00\x00\x3f\xe3\xff\xff\xfc\x00\x00\x03\xff", |
| 612 | "\x00\x03\xff\x00\x00\x3f\xff\x80\x01\xf0\x00\x0f\xfe\x00\x00\x06\x00\x03\xff\xff\xfc\x03\xff\xff\xf7\x80\x00\x00\x7f\xc0\x0f\xff\xe3\xfe\x0f\x00\x00\x7f\xff\x00\x7f\xf8\x00\x00\xff\xff\xee\x00\x7e\x01\xc0\x00\x1f\xe0\x00\x07\xff\xff\xf8\x00\x00\xe1\xff\xfc\x3f\xe7\xff\xff\xf8\x3f\xff\xfc\x00\x1f\xff", |
| 613 | "\x00\x00\x0f\xff\xf8\x00\x00\xff\xff\xfc\x00\x1f\xe0\x07\xff\xff\x00\x01\xff\xdf\xff\x80\x00\x3f\xff\xfc\x00\x00\x0f\xfc\x07\xff\x00\x00\xff\x80\x00\x03\xff\xff\xf0\x00\x07\xff\xff\xf0\x00\xff\xfe\x1f\xff\xff\xe0\x3f\xff\xfe\x00\x00\x60\x00\x00\xff\xff\x7f\xff\xf0\x00\x03\xff\xff\xc0\x07\x00\x01\xff\xff", |
| 614 | "\x00\x00\x20\x7f\xfe\x0f\x83\xff\xff\x80\x03\xff\x00\x00\x00\xff\xff\xe0\x00\x1f\xff\xff\xe0\x00\x3f\xfe\x7f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x00\xff\xff\x87\xff\xc0\x00\x17\xfd\xff\x9f\xff\xfb\xff\xff\xe0\x00\x03\xe0\x00\x07\xff\x9f\xff\xff\x80\x00\x7f\xff\xff\x00\x01\xff\xff\xc0\xff\xff\xc0\x10\x00\x00\x1f", |
| 615 | "\x00\x00\x07\xff\xc0\x00\xff\xe0\x00\x07\xff\x80\x03\x80\x00\x0f\xf8\x00\x00\x7f\xff\xfe\x00\x00\x18\x00\xff\xf0\x20\x01\xff\xfe\x00\x00\x60\x0f\xf0\xe0\x03\xff\xfe\x00\x3e\x1f\xff\xfc\x00\x03\xff\x80\x00\x00\xff\xf8\x00\x01\x00\x00\x0f\xf3\xff\xfc\x00\x03\xff\xff\xe1\xff\xff\xc1\xf0\x00\x00\xff\xff\xff\x00\x00", |
| 616 | "\xff\xff\xf0\x00\x00\x07\xff\xfc\x00\x7f\x87\xff\xff\x00\x00\x00\x7f\xff\xc0\x7f\xff\x80\x00\x03\xf0\xff\x3f\xff\x80\x30\x07\xff\xff\x1f\x8e\x00\x7f\xff\xff\xc0\x01\xff\xfc\x07\xf8\x00\x00\x7f\xff\xfc\x00\x3f\xf0\x00\xf8\x00\x00\x07\xff\x00\x00\x0e\x00\x0f\xff\x80\x00\x7f\xc0\x01\xff\x8f\xf8\x00\x07\x01\xff\xff\xff", |
| 617 | "\xff\x80\x3f\xff\x3f\xfe\x00\x00\xff\xff\xff\x9f\xff\xf8\x3f\xff\xf8\x00\x00\x0f\xf8\x00\x00\x03\xfe\x00\x7f\xff\xff\x00\x0f\xff\x01\xff\xf0\x0f\xff\xe0\x20\x7f\xff\xfc\xff\x01\xf8\x00\x07\xff\xe0\x00\x7f\xf8\x00\x0f\xff\x80\x00\x00\x7f\xe0\x00\x3f\xf8\x01\xfe\x00\x07\xff\xf0\x00\x00\x7f\xff\xff\xc0\x00\x01\xff\xff\xff", |
| 618 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xf8\x00\x00\x3f\xff\xfc\x00\x7f\xfe\x00\x00\x03\xff\xff\xf0\x03\xff\xe0\x00\x7f\x80\x00\x0f\xff\x3f\xf8\x00\x00\x7f\xff\xff\x00\x07\x80\x1f\x83\xf8\x00\x00\x0f\xfe\x3f\xff\xc0\x3f\xff\xfe\x1f\xe0\x00\x07\xc0\x03\xff\xf0\x0f\xc0\x00\x03\xff\xff\x80\x00\x00\x7f\x80\x00\x00\xff\xff\x80\x00\x00", |
| 619 | "\xfe\x00\x00\x20\x00\x04\x00\x0f\xff\xff\xc0\x01\xff\xf8\x3f\xc0\x00\x00\xff\xff\xc0\x00\xff\xff\xff\x80\x00\x3f\xf8\x00\x7f\xff\xfe\x7f\xf8\x00\x7f\xff\x80\x07\xff\xc0\x00\x0f\xff\xf8\x00\x7f\xff\xc0\x00\xff\xff\xc0\x3f\xff\xff\xe0\x0f\xff\xff\xe0\xe0\x1f\xff\x80\x00\x00\x7f\xff\xc0\x71\xff\xff\xfc\x00\x01\xff\xff\xf8\x00\x00", |
| 620 | "\xff\xff\xe0\x00\x0f\xff\xf0\x00\x00\x3f\xff\xff\xc0\x00\xff\xff\x00\x00\x0f\xff\xff\xe0\x00\x01\xff\x00\x00\x1f\xff\xe0\x3f\xfc\x00\x03\xe0\x1f\xf0\x1f\xf8\x00\x00\x3f\xff\xff\xc0\x0f\xfe\x00\x00\x20\x00\x00\xff\xfc\x00\x0f\xff\xfe\x3f\xff\xff\x00\xff\xf0\x00\x00\x80\x00\x1f\x03\xe0\x01\xff\xfa\x00\x3f\xe0\x00\x00\x70\x00\x00\x0f", |
| 621 | "\xfd\xff\xc0\x00\x20\x01\xfe\x00\x3f\xf8\x00\x03\xff\x00\x00\x03\xf8\xff\xcf\xc3\xff\xff\xfc\x00\x03\xff\xff\xfc\x00\x00\x78\x3f\xff\xf0\x01\xff\xe0\x0f\xff\xff\x00\x00\x07\xff\xff\xfc\xff\xff\xf8\x00\x01\xff\x80\x00\x07\xff\xff\xfc\x00\x00\x1c\x00\x01\xff\xff\x07\xf8\x00\x00\x1f\xff\xff\xf0\x00\x01\xfe\x00\x7f\xff\xf0\x1f\xfc\x00\x00", |
| 622 | "\x00\x00\x00\x3f\xff\x00\x00\x07\xff\xff\xfc\x00\x00\x01\xe0\x0f\xff\x83\xfc\x01\xff\xff\xf0\x0f\xff\x00\x00\x00\x3f\xff\xff\xc0\x1f\xff\xff\xe0\x00\x20\x00\x00\x3f\xff\xff\x00\x00\xff\xfc\x03\xff\xff\xf0\x00\x1f\xff\xfc\x00\x00\x03\xff\xff\xc0\x7f\x80\x00\xff\xff\xff\x00\x0f\x0f\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\xff\xfe\x00\x00\x0f\xff", |
| 623 | "\xff\xfe\x03\x80\x00\x03\xff\xff\xc0\x3f\xff\xff\x00\x03\xff\xff\xf8\x00\x00\x01\xff\xff\xcf\xfc\x00\x00\xe0\xef\xf8\x00\x0f\xff\xe3\xf8\x00\x3f\xff\xff\x80\x3f\xbf\xfe\x00\x00\xff\xfc\x00\x00\x01\xff\x00\x00\xcf\xc0\x01\xfc\x00\x00\x7f\xff\xff\xc0\x00\x10\x7f\xff\xfc\xfe\x00\x00\x07\xc0\xff\xff\xff\x8f\xff\x00\x00\x1f\x9e\x00\x00\x01\xff\xff", |
| 624 | "\x00\x7f\xff\xe0\x00\x01\xff\xff\xc3\xff\x80\x01\x03\xfc\x00\x00\x00\xfc\x01\xff\xff\xf8\x7f\xe7\xf0\x00\x00\x7f\xc0\x3f\xff\xff\xc0\x00\x00\x1f\xff\x80\x00\x01\xff\xe0\x00\x00\x70\x00\x00\x1c\x7f\xff\xf8\x1f\xfc\x00\x00\x07\xef\xe0\xff\xff\xc1\xff\xfc\x00\x00\x01\xff\xff\xff\xa0\x07\xff\x00\x1e\x00\x1f\xfc\x00\x00\x38\x00\x18\xc0\x00\x00\x7f\xff", |
| 625 | "\x00\x0f\xff\xf8\x00\x00\x07\xff\x00\xfc\x00\x00\x03\xff\xfc\x00\x07\xff\xff\xe0\x00\x00\xff\xfc\x0f\xff\x00\x00\x0f\xff\xfe\x0f\x80\x07\xff\x03\xff\xff\xf9\xff\xfe\x00\x00\x03\xf8\x00\x00\x07\xe0\x00\x00\xc0\x00\x1f\xff\xf0\x7f\xff\xff\xc0\x07\xff\xff\xfc\x00\x00\x3f\xff\xff\xe0\x00\x00\x1f\xff\xf8\x1f\xfe\x00\x00\x3f\xff\xff\xe0\x3f\x06\x00\x00\x00", |
| 626 | "\xff\xf0\x00\x08\x00\x0f\xef\xff\xff\xfc\x00\x00\x7f\xff\xf0\x00\x7f\xff\xf8\x00\xff\xff\x81\xff\xff\xe0\xff\xff\xff\x00\x00\x00\x80\x00\x03\xff\x80\x3f\xff\xfc\x00\x00\x1f\xff\xc0\x0f\xff\xfe\x00\x00\x00\x73\xf0\x1f\xfe\x00\xff\xc0\x3f\xff\x00\x3f\xff\x83\xff\xfe\x01\xff\xff\xf7\xff\xff\x80\x00\x00\x3f\x00\x00\x1f\xe3\xff\xff\xf0\x00\x0f\xff\xf0\x00\x00", |
| 627 | "\x00\x00\x7f\xfc\x00\x7f\xe0\x00\x0f\xff\xe0\x01\xf8\x00\x3f\xff\x00\x00\x78\x00\x7f\xe0\x00\x00\x1f\x00\x07\xff\xff\xf8\xf9\xf0\x01\xff\xf8\x07\xc0\x0f\xff\xf8\x00\x07\xf8\x7f\xfe\x00\x00\x0f\xff\xe3\xf0\x00\x07\xff\xff\xfc\x03\x1c\x00\x00\x7f\xe0\x00\xff\xff\xfc\x00\x00\x0f\xf3\xff\xe0\x00\x00\x0f\xff\xf9\x00\x00\x10\x00\x3f\xff\xfc\xf8\x7f\xff\x00\x00\x00", |
| 628 | "\x00\x03\xff\xff\xc0\x7f\xff\xff\xc0\x00\x03\xff\xff\xff\x00\x00\x0f\xff\xf0\x1f\xff\xf0\x00\x07\xff\xff\xef\xff\x81\xf7\xff\xfe\x00\x07\xff\xf0\x00\x00\x1f\xff\xc0\x0f\x80\x00\x0f\xff\xfc\x00\x00\xff\xff\xff\xc0\x03\xff\xe3\xff\xff\xfe\x00\x1f\xff\xff\x00\x00\xff\xff\xff\x0f\xff\xf1\xf8\x00\x00\x01\xff\xff\xff\x80\x1f\xff\xfe\x00\x08\x00\x00\x7f\xff\xff\x80\x00", |
| 629 | "\x1f\xe0\x00\x7c\x1f\xc0\x07\xff\xc0\x07\xff\xff\xfe\x00\x3c\x00\x00\x00\xff\xff\x80\x00\x07\xff\xff\x00\x1f\xf8\xff\xc0\x00\xff\x81\xff\x01\xff\xfe\x00\x78\x7f\xff\xf0\x00\x01\x80\x00\x00\x1f\xff\x00\x00\x1f\xff\xf0\x00\x1f\xff\xff\xe0\x00\x3c\x00\x00\x1f\xff\xff\x80\x03\xff\xe0\x01\xff\xff\xf9\xff\xf8\x00\x00\x7c\x00\x00\xfe\x00\x00\xff\xff\xff\x00\x00\x0f\xff\xff", |
| 630 | "\xfc\x00\x01\xff\x00\x00\x0c\x00\xff\xff\xe3\xff\xff\xf0\x80\x0e\x0e\x00\x00\x0f\xfe\x00\x03\xff\xc0\x00\x00\x7f\xff\xff\xe0\xc0\x00\x00\x07\xe0\xff\xff\x03\x9f\xff\xff\xc1\xc0\x00\x03\xff\xff\xc3\xff\xff\xfc\xff\xff\xc0\x00\x01\xfc\x00\x0f\xfc\x00\x00\x00\x7f\xff\xff\x03\xff\xff\xfc\x0f\xff\xfe\x00\x00\x03\x80\x3f\xff\xff\x00\x00\xff\xff\xf8\x00\x03\xff\xff\x80\x00\x00", |
| 631 | "\xff\xff\x80\xff\xff\xf8\x00\x00\xfc\x00\x03\xff\xf8\x00\x0f\xff\xff\x00\x03\x00\x00\x00\x7f\xff\xf0\x00\x3f\xff\xf0\x00\x01\xfc\x01\x00\x03\xff\x80\x1f\xff\xe3\xff\xff\xf8\x00\x1f\xff\xff\xf8\x01\xff\xdf\xff\xfb\xff\xc0\x00\x00\x3f\xff\xf8\x00\x00\x80\xc7\xff\xff\xf8\x0f\xff\x00\x60\x1f\xff\xe0\x00\x01\xff\xff\xfe\x0f\xff\xff\xfc\x00\x00\x00\xf0\x06\x03\xff\xff\xfe\x00\x00", |
| 632 | "\xff\x00\x0f\xff\xfc\x00\x0f\xff\xff\xfc\x07\xff\xfc\x00\x00\xf0\x00\x00\x80\x00\x7f\xfe\x00\x00\x0f\xff\xff\xfc\x3f\x00\xff\xff\xff\x00\x1f\xff\xff\xf0\x00\x1f\xff\xff\xe0\x00\x1f\xff\xff\xc3\xff\x00\x00\x01\xff\xff\xf0\x00\x00\x0f\xff\xe0\x07\xfc\x00\x00\x00\xfe\x00\x07\xff\xff\xf8\x00\x00\x3f\x00\x00\x0f\x80\x00\x3f\xff\xc0\x00\x11\xff\xef\x00\x07\x00\x7f\xff\xfc\x00\x00\x00", |
| 633 | "\xfe\x00\x00\x7f\xf7\xff\xff\x00\x00\x0f\xff\xff\xe0\x01\xff\xe0\x00\x00\x03\xff\xe0\x00\xff\xfe\x00\x01\xff\xf7\xff\xf8\x00\x0f\xff\x00\x00\x00\x38\x00\x07\xff\xf8\x07\xff\xfc\x00\x1f\xff\xff\x0f\xc1\xff\xff\xc0\x00\xff\xff\x0f\xff\xf0\x01\xff\xf8\x00\x01\xff\xff\x80\x00\x00\x0f\xf8\x00\x3f\xff\xfe\x3f\xff\xff\xf0\x00\x00\x38\x0f\xc3\xff\xff\xff\x1f\xff\xc0\x3f\xff\xff\xe0\x00\x00", |
| 634 | "\xff\xff\xf0\x00\x7f\xc0\x07\xff\xff\x81\xff\xc0\x00\x01\xff\xff\xff\xc0\x00\x00\x1f\xff\xfe\x03\xc0\x00\x0f\xff\xff\xfc\x00\x03\xff\xff\xff\x83\xff\xc0\x00\x07\xf0\x00\x00\x1f\x80\x00\x00\x3f\xff\xff\xe7\xff\x00\x07\xff\xff\xfc\x00\x00\x1f\xff\xf8\x00\x03\xf0\x00\xff\xfc\x00\x1f\xff\xff\xe0\x03\xff\xf0\x00\x01\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xf8\x10\x00\x1e\x03\xff\xff\xff\x80\x00", |
| 635 | "\x00\x01\xff\xfe\x00\x00\x00\x7f\xff\xff\xf0\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x01\xff\xfc\x03\xff\xff\x9f\xff\xfe\x00\x08\x00\x00\x06\x00\x00\x00\x81\xff\xff\xc0\x00\x07\xf8\x00\xff\xff\xff\x00\x00\x00\xff\xff\xf8\x00\x3f\xff\xff\xf8\x3f\xf8\x00\x00\x00\x7f\xff\xc0\x7f\xff\xff\xc0\xff\xff\xfe\x00\x00\x01\xff\xf8\x00\x00\x03\xff\xc1\xff\xf0\x00\x00\x03\x07\xf8\x01\xff\xfe\x00\x00", |
| 636 | "\xf8\x00\x00\x01\xff\xff\x80\x00\x0f\xff\xff\x8f\xff\x00\x1f\xff\x0f\xff\xc0\x00\x00\xff\xff\xfc\x00\x0f\xff\xf0\x00\x70\x00\x00\x3f\xff\xc0\x00\x00\x7c\x00\x00\x7e\x00\x0f\xfc\x00\x00\x00\xff\xff\x80\x00\x00\x0f\xff\xff\xfc\x38\x00\x00\x03\xf0\x00\x31\xf0\x1f\xff\xff\xc0\x07\xff\xff\xe0\x1f\xff\xff\xf3\xfe\x00\x00\x00\xff\xff\xc0\x00\x1f\xe7\xff\xe1\xff\xff\xdf\x00\x00\x00\x1f\xff\x00\x00\x00", |
| 637 | "\x3f\xff\xff\xf8\x00\x00\x00\x60\x00\x0f\xff\xff\xe0\x07\xff\xff\xff\x00\x00\x3f\xff\xff\xf0\x1f\xff\xff\x80\x00\x70\x00\x00\x01\x00\x00\x00\x3f\xff\xfe\x00\x00\x00\x1f\xf8\xfc\xc0\x0f\xff\xf8\x00\x3f\xff\xc0\xff\xff\x80\x00\x03\xff\xff\xf8\x00\x3f\xff\xfc\x00\x00\x0f\x81\xff\xc0\x03\xff\xc0\x3f\xff\xff\x80\x03\xff\xfe\x00\xff\xff\xfe\x00\x00\x1c\x00\x00\x00\x3f\xff\xff\xf8\x00\x7f\xff\xc0\x00\x00", |
| 638 | "\x00\x00\x00\x0f\xff\xfe\x0f\xff\xff\x87\xff\xff\xff\x00\x80\x00\x0f\xff\xc0\x00\x03\xf0\x1f\xf7\xe0\x00\x00\x70\x00\x01\xff\xff\xff\x80\x01\xfe\x07\xf0\x00\x01\xff\xfc\x00\x00\x04\x00\x01\xff\xfe\x07\xff\xff\xfe\x00\x07\xc0\x00\x00\xff\xff\xff\x87\xf0\x03\xff\xfc\x00\x00\x1f\xf8\x00\x01\xff\xff\xc0\x00\x00\x3f\xff\xc0\x00\x00\x7f\x8f\xff\xf8\x00\x00\x00\x7f\xff\xe0\x06\x0e\x00\x00\x0f\xff\xff\x80\x00", |
| 639 | "\x03\xff\xff\xfd\xe0\x00\x00\x1f\xff\xf8\x01\xff\xff\xfb\xff\xff\xe0\x01\xf0\xf0\x00\x00\xff\xff\xff\x80\x00\x00\x7f\xff\xff\xe0\x1f\xff\xff\xf0\x01\x80\xff\xff\xff\xe0\x00\x00\x7f\xff\xf0\xff\xff\xc0\x00\x00\x07\xfe\x00\x00\x00\x1e\x00\x1f\xff\xff\xe0\x1f\xff\xe0\x01\xff\xc0\x00\x3f\xff\xe0\x00\x00\x0f\xf0\x00\xff\xff\x7f\xc0\x1f\xf8\x3f\xff\xff\xc0\x00\x00\x7f\xff\xe0\xff\xfc\x00\x00\xff\x0f\xff\xff\xff", |
| 640 | "\x07\xff\xfc\x03\xff\xff\xff\xdf\xff\xff\x87\xff\x18\x00\x03\x80\x01\xff\x00\x00\x00\x1f\xff\x00\x00\x3f\xff\xff\xc0\x1f\xe0\x3f\xff\xff\xfc\x00\x00\x01\xff\xf8\x00\x00\x3f\xff\xff\xf8\x00\x00\x07\xe0\x00\x07\xff\xf9\xff\xe0\x00\x3f\xe0\x00\x7f\xef\xf0\x00\x07\x81\xff\xfc\x00\x00\x00\xff\xe0\x00\x30\x00\x00\x00\xff\xff\xf0\x00\x00\x03\xff\xfc\x7f\x07\xf8\x03\xff\xff\xff\x00\x3f\xfc\x00\x00\x01\xff\xc0\x00\x00", |
| 641 | "\x00\x7f\xfc\x00\x00\x03\xff\xf8\x00\x00\x61\xfe\x7f\xff\xfe\x00\x00\x1f\xff\xfc\x3f\xff\x80\x01\xff\xff\xff\xe0\x00\xff\xff\xff\x80\x1f\xf8\x00\x7f\xff\xff\xf8\x00\x00\x07\xff\xff\xe0\x00\x00\x07\xff\xff\xff\x80\x00\xff\x80\x0f\xff\xff\xfc\x00\x00\x7f\xff\xfe\x00\x00\x00\x30\x00\x00\x7f\x80\x00\x07\xff\xff\xf0\x00\x00\x03\xff\xc0\x0f\xff\xff\x80\x3f\xff\x80\x03\xff\xff\xfe\x03\xff\xff\xff\x7f\xfc\x1f\xf0\x00\x00", |
| 642 | "\x1f\xf0\x00\x00\x7f\xff\xfe\x02\x00\x00\x03\xff\xff\xff\xd8\x07\xff\xff\xe0\x01\xff\xff\x80\x00\x00\x07\xc0\x00\x0f\xff\xc0\x7f\xf0\x00\x07\xff\xff\x80\x00\x07\xf0\x00\x00\x7f\xfc\x03\xff\xff\xff\xc0\x00\x01\xff\xff\xf9\xff\xfe\x00\x00\x1f\xff\xc0\x00\x00\x03\xfe\x3f\xff\xff\x00\x07\xfe\x00\x00\x03\xc0\x00\x3f\xf8\x00\x10\x03\xfc\x00\x0f\xff\xc0\x00\x7f\xff\xe0\x00\xff\xf0\x00\x00\x7f\xff\xe0\x00\x00\x0f\xff\xff\xff", |
| 643 | "\xff\xff\xff\xf8\x00\x00\x60\x00\x00\x00\xff\xff\xfc\x03\xff\xfc\x00\x00\x3c\x00\x3f\xe0\x7f\xf8\x00\x07\xff\xf8\x0f\xf8\x00\x00\x7f\xff\xff\xfc\x00\x7f\xc2\x00\x03\xff\xff\xfe\x00\x01\xff\xff\xff\xf0\x03\xff\xff\xf0\x18\x07\xc0\x00\x0f\xff\xc0\x00\x00\x7f\xff\xff\x87\xe0\x00\x00\x07\x00\x1f\x80\x04\x07\xff\xe0\x00\x00\x1f\xff\x81\xff\x80\x00\x03\xff\xfc\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x1f\x80\x01\xff\xff\x00\x00\x00", |
| 644 | "\x00\x0f\xfc\x1f\xf8\x00\x0f\xff\xff\xf8\x07\xff\xf1\xfc\x00\x1f\xff\xff\xf0\x00\x0f\xff\xdf\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x01\xff\xff\xff\xc0\x10\x0f\xf0\x00\x00\x00\xfc\x00\x1f\x00\x07\x00\x01\xf0\x00\x00\x1f\xe0\x00\x00\x30\x7c\x3f\xff\xe0\x00\xff\xfc\x07\xff\xfc\x00\x3f\xff\xff\xf8\xff\xff\xc1\xfc\x1f\xff\xff\xf8\x00\x01\xff\xfc\x00\x00\x0f\xff\xff\xff\x00\x00\xff\xf8\x0c\x00\x00\x07\xff\xff\x00\x00\x00\x7f\xff", |
| 645 | "\xff\xff\x80\xff\xff\x00\x00\x00\x7f\xff\xff\x00\x1f\xfc\x00\x06\x00\x0f\xf8\x00\x00\x01\x80\x00\x00\x7f\xff\xff\xe0\x3f\xff\xff\xfc\x00\x60\x00\x00\x00\xfe\x00\x00\x07\xff\xff\xf0\x7f\xff\xff\xf8\x00\x00\x80\x00\x00\x0f\xff\xff\xff\xbf\xff\xff\xc0\x07\xff\xfe\x00\x00\x1c\x00\x1f\xfc\x07\x00\x01\xff\xff\x00\x00\x00\x80\x00\x1f\xff\x03\x80\x00\x00\x3f\xff\xff\xf8\x00\x07\xff\xff\xff\x80\x00\x1f\xff\xff\xe0\x1f\xff\xff\xc0\x00\x00", |
| 646 | "\xff\xff\xff\xf8\x00\x00\x00\x7e\x00\x00\x00\x1f\xff\x80\x07\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xc3\xff\xf0\x00\x00\x04\x7f\xc0\x7f\xf0\x00\x3f\xff\x80\x00\x7f\xe0\x00\x03\xff\xc0\x00\x07\xff\x00\x00\x0f\xff\x80\x00\x00\x07\x80\x00\x00\x0f\xff\xff\xff\x01\xff\xff\xff\xc0\x03\xc0\x00\x00\x03\xff\xff\xe0\x00\x0f\xff\xff\xc0\x00\x03\xff\xfe\x00\x03\xff\xf8\x00\x00\x0f\xff\xff\xc0\x01\xff\xe0\x00\x00\xff\xff\xfc\x00\x00\x1f\xff\xff\xff", |
| 647 | "\xff\xf0\x00\x3f\xfc\x00\x00\xff\xff\xff\xe0\x1f\xc3\xfe\x00\x07\xff\xf8\x00\x0f\xf0\x01\xff\xff\xf0\x00\x00\xff\xc0\x0f\xff\xff\x80\x00\x00\xff\xff\xf3\xff\x80\x00\x00\x80\x08\x38\x00\x00\x0f\xff\xf0\x00\x1f\xff\xff\xfc\x00\x0f\x80\x00\x70\x00\x00\x31\xff\xff\xfe\x3f\xff\xf8\x00\x00\x00\x3c\x3f\xf0\x0f\xff\xff\x00\x03\xff\xfb\xff\xff\xff\x00\x0f\xff\xff\xfe\x00\x00\x00\xf0\x00\x00\x00\xff\xff\xfc\x00\x7f\xff\xf0\x00\x01\xff\xff\xfe\x00", |
| 648 | "\xff\xff\xf0\x0f\xf8\x3f\xff\xff\xe0\x00\x03\xff\xfe\x00\x00\x3f\xff\x80\xff\xff\xff\x00\x00\x00\xff\xff\xf8\xff\xff\xf0\x00\x0f\xf1\xff\xff\x00\x00\x00\x0f\xff\xfc\x00\x00\x00\x1f\xf0\x00\x00\x1f\xf0\x03\xff\xff\xff\xe1\xff\xe0\x00\x00\x1f\xff\xc1\xfe\x00\x00\x07\xff\xfc\x00\x00\x00\x1f\xfe\x3f\xc0\x00\x00\x01\xff\xfc\x00\x00\x1f\xff\xff\x0f\xe0\x00\x01\xfc\x00\xfe\x00\x00\x00\x7f\xe0\x00\x1f\xff\xff\xe0\x7f\x00\x0f\xf0\x00\xff\xfe\x00\x00", |
| 649 | "\x00\x7f\xff\xc0\x07\xff\xff\xff\x80\x07\xff\xff\xfe\x00\x00\x00\x7e\x00\x00\x00\x0f\xff\x80\x1f\xff\xfe\x07\xff\xff\xf0\x03\xc7\xff\xff\xfe\x00\x00\x00\x7f\xfe\x00\x00\x1f\xff\xfe\x00\x00\x00\xff\xfc\x00\x1f\xff\xc0\x00\x00\x3f\xff\x00\x1e\x00\x00\x03\xff\xff\xff\x80\x00\x00\x7f\xff\xf8\x03\xff\xfc\x00\x01\xff\xff\xfe\x00\x0f\xff\x02\x00\x07\xff\xff\xfe\x00\x00\x00\xfe\x01\xff\xff\xf7\xff\xff\x19\xff\xff\x00\x00\x07\xff\xc1\xff\x00\x00\x07\xff", |
| 650 | "\x00\x00\x00\x40\x00\x00\x07\xff\xff\xf8\x1f\xff\xff\xc0\x00\x3e\xff\xff\xf0\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\x80\x00\x00\x3f\xf1\xff\xff\xff\xe0\x00\x00\x01\xff\xff\xff\x00\x00\x1f\xff\xf8\x00\x07\xff\xff\xf8\x00\x1f\xff\xc1\xff\xff\xff\xe0\x01\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xff\xcf\xff\xe0\x00\x3f\xe0\xff\xff\xc0\x00\x07\xff\xff\xe0\x01\xff\xfc\x3f\x00\x01\xff\xff\xfe\x00\x01\xff\x0f\xff\xff\xfc\x00\x00\x01\xff\xff\x80\x00\x00\x0f\xff", |
| 651 | "\xff\xff\xf0\xff\xff\xff\xc0\x03\x80\x00\x01\x00\x00\x03\xff\xff\xff\xf1\xff\xff\xff\xe0\x07\xfc\x00\x00\x03\xff\xf0\x00\x00\x00\x7e\x00\x00\x00\x07\x00\x3f\xff\xfc\x00\x0f\xc7\xff\xff\x00\x00\x07\xff\xff\xc0\x00\x00\x03\xff\xfc\x00\x00\xff\xe0\x00\x00\x00\x7f\xf0\x00\x00\xff\xff\xff\xfd\xff\x00\xff\xe0\xff\xff\xe0\x07\xff\xff\xf8\x7f\xff\xfe\x18\x00\x00\x01\xf0\x00\x1f\xff\xfe\x01\xc0\x01\xff\xff\xff\xf8\x00\x01\xfe\xff\xff\xff\x80\x00\x00\x07\xff\xff", |
| 652 | "\xff\xff\xf0\x00\x1f\xff\xff\x00\x00\x3f\xff\xf0\x00\xff\xff\x00\x07\xff\xff\xf8\x03\xff\xff\xe7\xff\xff\xff\x81\x00\x00\x01\xff\x00\x00\x3f\xff\xff\xf8\x00\x00\x00\xf0\x07\xff\xc0\x0f\xf0\x00\x3f\xff\xc0\x00\x7f\xf8\x00\xff\xfc\x00\x00\x1f\xff\x80\x1f\xfc\x00\x00\x01\xff\xff\x00\x00\x7f\xff\xff\xfe\x00\x00\x0f\xff\x80\x00\x00\x0f\xff\xff\xfc\x00\x00\x00\xff\xff\xfc\x00\x0f\xff\x80\x00\x3f\xff\xfe\x00\x00\x3f\xe0\x0f\xff\xff\x00\x00\x01\xff\xf0\x00\x00\x00", |
| 653 | "\xff\xc0\x00\x00\x03\xff\xff\xfc\x00\xff\xff\xfc\x00\x00\x00\x7f\xff\xff\x00\x00\x00\x1f\xe0\x00\x0f\xff\xc0\xf0\x00\x00\x7f\xff\xff\xe0\x00\x20\x1f\xff\xff\xff\x00\x00\x00\x1f\x80\x00\x00\x07\xff\xf1\xff\xff\xff\xc0\x00\x00\x1f\xff\xff\xf0\x00\x3f\xff\xf8\x00\x3f\xff\xff\xfe\x01\xff\xff\xfe\x7f\x9e\x00\x1f\xff\xfc\x00\x7f\xe0\x7f\xff\xff\xe0\x00\x7f\xff\xfe\x00\x00\x01\xff\xff\xff\xf8\x01\xff\xc0\x03\x00\x0f\xff\xf8\x00\x00\x0f\xf0\x0f\xff\x00\x00\x00\x0f\xff", |
| 654 | "\x00\x03\xff\xff\xff\xcf\xff\xf8\x7f\x8f\xff\xff\xfc\x01\xff\xff\xfc\x00\x00\x1f\xff\xff\xff\x80\x00\x00\x01\xff\xff\xe1\xff\xf0\x00\x00\x00\xff\xff\xff\xf8\x03\x80\x00\x3f\x80\x00\x0f\xff\xff\xff\xc0\x00\x00\x02\x7f\xff\xf8\x03\xff\xc0\x00\x00\x3f\xff\x80\x00\x00\x01\xff\xff\xe0\x00\x00\x03\x80\x00\x00\xff\xe0\x7f\xff\xff\xfc\x00\x00\x01\xff\xff\xfc\x00\x00\x00\xff\xff\x80\x00\x07\xfe\x00\x00\x07\xff\xf0\x00\x00\x1f\x80\x00\x00\x3e\x1f\xff\xff\xff\x9f\xff\xff\xff", |
| 655 | "\xff\xff\xfe\x00\x03\xff\xff\xff\x80\x01\xff\xff\xff\xa0\x3f\xff\xf8\x00\x7f\x03\xff\xff\xc0\x00\x0f\xff\xc3\xff\xf8\x00\x03\xff\xff\xff\xc0\x7f\xf0\x1f\xe0\x0f\xff\xff\xc0\x00\x1f\xfe\x0f\xff\xff\xe0\x00\x07\xff\xff\xfc\x00\x00\xfc\x00\x3f\xff\xff\xf0\x00\x00\x00\x3f\xfc\x00\x00\x00\x0f\xff\xc4\x00\x00\xff\xc0\x00\x03\xff\xff\xff\x80\x00\x03\xfc\x0f\xff\xff\xf0\x00\x00\x03\xff\xff\xc0\x07\xff\xff\xf8\x0c\x3f\xff\xf0\x00\x1f\xff\x80\x00\x00\x01\xff\xfe\x00\x00\x3f\xff", |
| 656 | "\x00\x00\x00\x1f\xff\xc3\xff\xff\x80\x00\x00\x3f\xff\xff\xfe\x00\x00\x00\x0f\xe0\x00\x7f\xff\xe0\x0f\xfe\x00\xff\xff\xff\xe0\x03\xff\xf8\x00\x00\x00\x3f\xe0\x00\x00\x01\xff\xff\xe7\xff\xff\xff\xe0\x00\x00\x07\xff\xff\xc0\x00\x1f\xe0\x00\x00\x01\xff\xff\x00\x00\x03\xff\xff\xff\xe0\x00\x00\x1f\xe0\x03\xff\xff\x00\x00\x00\x07\xff\xf0\x3f\x80\x00\x00\x0f\xff\xff\xfe\x00\x00\xff\xff\xff\x00\x00\x3f\xff\xff\x80\x0f\xff\xfe\x01\xff\xff\xff\xf8\x3f\xff\xff\xc0\x00\x00\xff\xff\xff", |
| 657 | "\xff\xff\xff\x80\x00\xff\xff\xff\xf0\x00\x00\x1f\x00\x3f\xff\xfe\x0f\xf0\x1c\x00\xff\xff\xe0\x00\x0f\xc0\x1f\xff\xc0\x00\x00\x01\xff\x80\xf7\xff\xf8\x00\x00\x3f\xff\xc0\x00\x00\x01\xff\xf0\x00\x03\xe3\xfc\x00\x07\xf8\x00\x00\x3f\xff\xff\xfe\x00\x00\x1f\x00\x00\x00\x18\x00\x3f\xff\xff\xf8\x0f\xe0\x00\x00\x00\x60\x00\x07\xff\xff\xfe\x00\x60\xff\xff\xff\xf8\x00\x00\x3f\xff\x80\x00\x00\x3f\xff\xff\xf0\x00\x00\x0f\xf0\x00\xff\xff\xf1\xff\x00\x3f\xff\xff\xff\x01\xff\xe0\x00\x00\x00", |
| 658 | "\xff\xff\xff\xfc\x00\x00\x00\xff\xff\xf0\x01\xff\xff\xf8\x00\x00\xff\xff\xff\xe7\xff\xf8\x01\xf8\x7f\xff\xff\x80\x00\x3f\xff\xfc\x00\x00\x01\xff\xff\xe0\x00\x3f\xc0\x00\x00\x7f\xff\xff\x00\x00\x0f\xff\xff\xff\xc0\x00\x0f\xff\xf1\xff\xff\xff\xf8\x00\x0f\xff\xff\xfc\x00\x00\x07\xff\xff\xff\x80\xff\xff\xf8\x07\xf0\x00\x00\x00\x1f\xff\xff\xff\xc0\x00\xff\xff\xff\xc0\x00\x0e\xff\xff\xff\xc0\x00\x00\x03\xff\xf8\x00\x00\x03\xff\x80\x00\x00\x00\xe0\x00\x00\x0f\xf8\x00\x00\x3f\xff\xff\xff", |
| 659 | "\x3f\x00\x03\xc0\x1f\x00\x00\x00\x0f\xf0\x00\x07\xff\xff\xef\x00\xfe\x00\x7f\xfe\x00\x00\x3f\xf0\x00\x3f\xc0\x00\x00\x07\xfc\x00\x00\x03\xff\xff\xff\x0f\xff\xff\xff\xc0\x07\xf8\x00\x00\xf8\x00\x00\x3f\x9f\xff\xff\xfc\x00\x00\x3f\xff\xc0\x00\x03\xff\xff\xc0\x00\x00\xff\xfc\x00\x1f\xff\xe0\x00\x00\x07\xff\xe0\x07\x00\x00\x00\x7f\xff\xfe\x00\x00\x00\xff\xff\xfe\x00\x00\x0f\xfc\x00\x07\xff\xf0\x00\x00\x00\x7f\x80\x03\xcf\xff\x80\x00\x01\xff\xff\xe0\x3c\x00\x00\x3f\xff\xff\xff\x80\x00\x00", |
| 660 | "\x30\x00\x00\x00\xff\xf8\x00\x00\xff\xfc\x00\x3f\xff\xff\x80\x00\x00\x0f\xcf\xff\xcf\xff\xff\xc0\xff\xff\xff\x80\x00\x00\x01\xff\xff\xff\xf0\x00\x00\x00\x1f\xff\x00\x03\xff\xfc\x00\x00\x00\x07\xff\x80\x00\x7f\xff\xff\xfe\x0f\xff\xc0\x00\x00\x00\x7f\xf0\xbf\xff\xff\xe0\x00\x00\xff\xf8\x00\x00\x01\xff\xff\xf8\x00\x00\x3e\x00\x00\x07\xff\xe0\x00\x00\x00\x80\x00\x03\x80\x01\xff\xff\xff\xf8\x60\x00\x00\x00\xff\xf0\x00\x1f\xff\xff\xc7\xff\xf0\x40\xff\xff\xfe\x00\x00\x07\xff\xdf\xff\x80\x00\x00", |
| 661 | "\xff\xff\xff\x83\xff\xf8\x1f\xff\x1f\xff\xff\x80\x0f\xff\xff\xe0\x00\x00\x00\x3f\xff\xff\xc0\xf8\x00\x00\x78\x00\x1c\x00\x00\x00\x1f\xe0\x00\x00\x00\xff\xff\xe0\x3f\xff\xff\xfe\x00\x00\x03\xff\xff\xfe\x00\x00\x00\x1f\xff\xfc\x00\x7f\xff\x00\x00\x00\x1f\xff\xff\x00\x02\x00\x00\x3f\xff\xfc\x00\x00\x00\xff\xf0\x1f\xfe\xff\xff\xc0\x01\xff\xff\xff\xf0\x00\x00\x00\xff\xff\xfe\x00\x00\x00\x0f\xff\xc0\x00\x00\x7f\x7f\xc0\x00\x00\x01\xff\xff\xfe\x0f\xff\xff\xff\xc0\x00\x0f\x80\x00\x00\x3f\xff\xff\xff", |
| 662 | "\xff\xff\xff\xfe\x00\x00\x00\xff\xf8\x0f\xff\xff\xf0\x00\x00\x07\xff\xff\xfb\xff\xc0\x00\x07\xfc\x07\xe0\x00\x00\x01\xff\xff\xe0\x00\x7f\xff\xff\xf8\x00\x00\x3f\xff\xf8\x00\x00\x00\x0f\xff\xff\x00\x00\x0f\xc0\x00\x00\x3f\xff\xf0\x00\x00\x01\xff\xff\xfe\x1f\xff\xf8\x00\x00\x20\x00\x00\x00\x3f\xff\xbf\xff\x9f\xff\xff\xfc\x3f\xff\xff\xf0\x00\x00\x07\x80\x00\x00\xff\xff\xe7\xff\xff\xff\xf0\x00\x00\x3f\xff\xff\xff\x00\x00\x07\xff\xff\xe0\xff\xff\xff\xe0\x01\xff\xff\xff\xf8\x00\x00\x00\x7f\xff\xff\xff", |
| 663 | "\x00\x00\x00\x1f\xff\xc0\x00\x0f\xff\xc0\x00\x00\x1f\xff\xc0\x00\x1f\xc0\x00\x00\x03\xff\x80\x00\x00\x07\xff\xff\xff\xc0\x00\x00\x00\x80\x00\x3f\xfc\x00\xc0\x00\x0f\xff\xff\x00\x00\x06\x00\x3f\xfc\x1e\x00\x1f\xff\xff\xf0\x00\x3e\x0f\xff\xff\xf0\x00\x00\x3f\xff\xf0\x00\x00\x00\x1f\xff\xc0\x00\x00\xff\xff\xff\xf8\x00\xe0\x00\x00\xff\xff\xff\xfe\x00\x00\x0f\xff\xff\xfe\x3f\xff\xff\xfc\x07\xfe\x00\x00\x00\xc0\x00\x7f\xff\xff\xfe\x00\xff\xff\xff\xfc\x07\xff\xff\xe0\x00\x3f\xe3\xff\xff\xc0\x00\x00\x3f\xff", |
| 664 | "\x00\x00\x00\x0f\xff\xc0\x00\x0f\xf8\x00\x00\x00\xff\xfc\x00\x00\x0f\xff\xff\xfe\x00\x00\x00\x03\xff\x00\xff\xfc\x07\xff\xf0\x1f\xff\xfe\x0f\xff\xff\xfd\xff\xff\xff\xf0\x1f\xff\xf0\x00\x07\xf8\xff\xf8\x00\x00\x00\xff\xff\xc0\x3f\xff\xff\xff\x80\x00\x00\x0f\xff\xff\xff\x00\x00\x03\xff\xff\xf0\x00\x07\xff\xff\x00\x00\x3f\xff\xf0\x01\xff\xff\xc0\x01\xff\xff\xff\x00\x3f\xff\xf8\x1f\xff\xff\xfe\x1f\xff\xff\xff\xc0\x00\x00\x7f\xe0\x00\x07\xff\xff\xfe\x00\x00\x00\x03\xe0\x07\xff\xc0\x03\xfc\x00\x07\xff\xff\xff", |
| 665 | "\xff\xff\xff\x00\x00\x03\xc0\x00\x00\x01\xff\xff\xf8\x00\x00\x00\x0f\xff\xff\xff\x00\x00\x0f\x00\x00\xff\xff\xf8\x80\x00\xf8\x00\x0f\xc0\x00\x00\x00\xe0\x00\x00\x00\xff\xff\xff\xf8\x0f\xff\xff\xfe\x00\x00\x18\x00\x00\x7f\xff\xff\xff\x00\x00\x03\xff\xff\xff\x00\x7f\xff\xff\xfc\x00\x03\xc0\x00\x00\x0f\xff\xff\xff\xf0\x00\x07\xff\xff\x80\x01\xff\xff\xff\xe0\x00\x0f\xff\xfe\x07\xff\xff\xf8\x00\xff\xff\xff\xc0\x00\x00\x03\xe0\x00\x07\xff\xf0\x0f\xff\xf0\x00\x00\xff\xff\xf8\x7f\xc0\x03\xc0\x3f\xff\xe0\x00\x00\x00", |
| 666 | |
| 667 | /* These are zero-terminated strings */ |
| 668 | |
| 669 | "abc", |
| 670 | "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" |
| 671 | }; |
| 672 | |
| 673 | static uschar *hashes[] = { |
| 674 | "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", |
| 675 | "3CDF2936DA2FC556BFA533AB1EB59CE710AC80E5", |
| 676 | "19C1E2048FA7393CFBF2D310AD8209EC11D996E5", |
| 677 | "CA775D8C80FAA6F87FA62BECA6CA6089D63B56E5", |
| 678 | "71AC973D0E4B50AE9E5043FF4D615381120A25A0", |
| 679 | "A6B5B9F854CFB76701C3BDDBF374B3094EA49CBA", |
| 680 | "D87A0EE74E4B9AD72E6847C87BDEEB3D07844380", |
| 681 | "1976B8DD509FE66BF09C9A8D33534D4EF4F63BFD", |
| 682 | "5A78F439B6DB845BB8A558E4CEB106CD7B7FF783", |
| 683 | "F871BCE62436C1E280357416695EE2EF9B83695C", |
| 684 | "62B243D1B780E1D31CF1BA2DE3F01C72AEEA0E47", |
| 685 | "1698994A273404848E56E7FDA4457B5900DE1342", |
| 686 | "056F4CDC02791DA7ED1EB2303314F7667518DEEF", |
| 687 | "9FE2DA967BD8441EEA1C32DF68DDAA9DC1FC8E4B", |
| 688 | "73A31777B4ACE9384EFA8BBEAD45C51A71ABA6DD", |
| 689 | "3F9D7C4E2384EDDABFF5DD8A31E23DE3D03F42AC", |
| 690 | "4814908F72B93FFD011135BEE347DE9A08DA838F", |
| 691 | "0978374B67A412A3102C5AA0B10E1A6596FC68EB", |
| 692 | "44AD6CB618BD935460D46D3F921D87B99AB91C1E", |
| 693 | "02DC989AF265B09CF8485640842128DCF95E9F39", |
| 694 | "67507B8D497B35D6E99FC01976D73F54AECA75CF", |
| 695 | "1EAE0373C1317CB60C36A42A867B716039D441F5", |
| 696 | "9C3834589E5BFFAC9F50950E0199B3EC2620BEC8", |
| 697 | "209F7ABC7F3B878EE46CDF3A1FBB9C21C3474F32", |
| 698 | "05FC054B00D97753A9B3E2DA8FBBA3EE808CEF22", |
| 699 | "0C4980EA3A46C757DFBFC5BAA38AC6C8E72DDCE7", |
| 700 | "96A460D2972D276928B69864445BEA353BDCFFD2", |
| 701 | "F3EF04D8FA8C6FA9850F394A4554C080956FA64B", |
| 702 | "F2A31D875D1D7B30874D416C4D2EA6BAF0FFBAFE", |
| 703 | "F4942D3B9E9588DCFDC6312A84DF75D05F111C20", |
| 704 | "310207DF35B014E4676D30806FA34424813734DD", |
| 705 | "4DA1955B2FA7C7E74E3F47D7360CE530BBF57CA3", |
| 706 | "74C4BC5B26FB4A08602D40CCEC6C6161B6C11478", |
| 707 | "0B103CE297338DFC7395F7715EE47539B556DDB6", |
| 708 | "EFC72D99E3D2311CE14190C0B726BDC68F4B0821", |
| 709 | "660EDAC0A8F4CE33DA0D8DBAE597650E97687250", |
| 710 | "FE0A55A988B3B93946A63EB36B23785A5E6EFC3E", |
| 711 | "0CBDF2A5781C59F907513147A0DE3CC774B54BF3", |
| 712 | "663E40FEE5A44BFCB1C99EA5935A6B5BC9F583B0", |
| 713 | "00162134256952DD9AE6B51EFB159B35C3C138C7", |
| 714 | "CEB88E4736E354416E2010FC1061B3B53B81664B", |
| 715 | "A6A2C4B6BCC41DDC67278F3DF4D8D0B9DD7784EF", |
| 716 | "C23D083CD8820B57800A869F5F261D45E02DC55D", |
| 717 | "E8AC31927B78DDEC41A31CA7A44EB7177165E7AB", |
| 718 | "E864EC5DBAB0F9FF6984AB6AD43A8C9B81CC9F9C", |
| 719 | "CFED6269069417A84D6DE2347220F4B858BCD530", |
| 720 | "D9217BFB46C96348722C3783D29D4B1A3FEDA38C", |
| 721 | "DEC24E5554F79697218D317315FA986229CE3350", |
| 722 | "83A099DF7071437BA5495A5B0BFBFEFE1C0EF7F3", |
| 723 | "AA3198E30891A83E33CE3BFA0587D86A197D4F80", |
| 724 | "9B6ACBEB4989CBEE7015C7D515A75672FFDE3442", |
| 725 | "B021EB08A436B02658EAA7BA3C88D49F1219C035", |
| 726 | "CAE36DAB8AEA29F62E0855D9CB3CD8E7D39094B1", |
| 727 | "02DE8BA699F3C1B0CB5AD89A01F2346E630459D7", |
| 728 | "88021458847DD39B4495368F7254941859FAD44B", |
| 729 | "91A165295C666FE85C2ADBC5A10329DAF0CB81A0", |
| 730 | "4B31312EAF8B506811151A9DBD162961F7548C4B", |
| 731 | "3FE70971B20558F7E9BAC303ED2BC14BDE659A62", |
| 732 | "93FB769D5BF49D6C563685954E2AECC024DC02D6", |
| 733 | "BC8827C3E614D515E83DEA503989DEA4FDA6EA13", |
| 734 | "E83868DBE4A389AB48E61CFC4ED894F32AE112AC", |
| 735 | "55C95459CDE4B33791B4B2BCAAF840930AF3F3BD", |
| 736 | "36BB0E2BA438A3E03214D9ED2B28A4D5C578FCAA", |
| 737 | "3ACBF874199763EBA20F3789DFC59572ACA4CF33", |
| 738 | "86BE037C4D509C9202020767D860DAB039CADACE", |
| 739 | "51B57D7080A87394EEC3EB2E0B242E553F2827C9", |
| 740 | "1EFBFA78866315CE6A71E457F3A750A38FACAB41", |
| 741 | "57D6CB41AEEC20236F365B3A490C61D0CFA39611", |
| 742 | "C532CB64B4BA826372BCCF2B4B5793D5B88BB715", |
| 743 | "15833B5631032663E783686A209C6A2B47A1080E", |
| 744 | "D04F2043C96E10CD83B574B1E1C217052CD4A6B2", |
| 745 | "E8882627C64DB743F7DB8B4413DD033FC63BEB20", |
| 746 | "CD2D32286B8867BC124A0AF2236FC74BE3622199", |
| 747 | "019B70D745375091ED5C7B218445EC986D0F5A82", |
| 748 | "E5FF5FEC1DADBAED02BF2DAD4026BE6A96B3F2AF", |
| 749 | "6F4E23B3F2E2C068D13921FE4E5E053FFED4E146", |
| 750 | "25E179602A575C915067566FBA6DA930E97F8678", |
| 751 | "67DED0E68E235C8A523E051E86108EEB757EFBFD", |
| 752 | "AF78536EA83C822796745556D62A3EE82C7BE098", |
| 753 | "64D7AC52E47834BE72455F6C64325F9C358B610D", |
| 754 | "9D4866BAA3639C13E541F250FFA3D8BC157A491F", |
| 755 | "2E258811961D3EB876F30E7019241A01F9517BEC", |
| 756 | "8E0EBC487146F83BC9077A1630E0FB3AB3C89E63", |
| 757 | "CE8953741FFF3425D2311FBBF4AB481B669DEF70", |
| 758 | "789D1D2DAB52086BD90C0E137E2515ED9C6B59B5", |
| 759 | "B76CE7472700DD68D6328B7AA8437FB051D15745", |
| 760 | "F218669B596C5FFB0B1C14BD03C467FC873230A0", |
| 761 | "1FF3BDBE0D504CB0CDFAB17E6C37ABA6B3CFFDED", |
| 762 | "2F3CBACBB14405A4652ED52793C1814FD8C4FCE0", |
| 763 | "982C8AB6CE164F481915AF59AAED9FFF2A391752", |
| 764 | "5CD92012D488A07ECE0E47901D0E083B6BD93E3F", |
| 765 | "69603FEC02920851D4B3B8782E07B92BB2963009", |
| 766 | "3E90F76437B1EA44CF98A08D83EA24CECF6E6191", |
| 767 | "34C09F107C42D990EB4881D4BF2DDDCAB01563AE", |
| 768 | "474BE0E5892EB2382109BFC5E3C8249A9283B03D", |
| 769 | "A04B4F75051786682483252438F6A75BF4705EC6", |
| 770 | "BE88A6716083EB50ED9416719D6A247661299383", |
| 771 | "C67E38717FEE1A5F65EC6C7C7C42AFC00CD37F04", |
| 772 | "959AC4082388E19E9BE5DE571C047EF10C174A8D", |
| 773 | "BAA7AA7B7753FA0ABDC4A541842B5D238D949F0A", |
| 774 | "351394DCEBC08155D100FCD488578E6AE71D0E9C", |
| 775 | "AB8BE94C5AF60D9477EF1252D604E58E27B2A9EE", |
| 776 | "3429EC74A695FDD3228F152564952308AFE0680A", |
| 777 | "907FA46C029BC67EAA8E4F46E3C2A232F85BD122", |
| 778 | "2644C87D1FBBBC0FC8D65F64BCA2492DA15BAAE4", |
| 779 | "110A3EEB408756E2E81ABAF4C5DCD4D4C6AFCF6D", |
| 780 | "CD4FDC35FAC7E1ADB5DE40F47F256EF74D584959", |
| 781 | "8E6E273208AC256F9ECCF296F3F5A37BC8A0F9F7", |
| 782 | "FE0606100BDBC268DB39B503E0FDFE3766185828", |
| 783 | "6C63C3E58047BCDB35A17F74EEBA4E9B14420809", |
| 784 | "BCC2BD305F0BCDA8CF2D478EF9FE080486CB265F", |
| 785 | "CE5223FD3DD920A3B666481D5625B16457DCB5E8", |
| 786 | "948886776E42E4F5FAE1B2D0C906AC3759E3F8B0", |
| 787 | "4C12A51FCFE242F832E3D7329304B11B75161EFB", |
| 788 | "C54BDD2050504D92F551D378AD5FC72C9ED03932", |
| 789 | "8F53E8FA79EA09FD1B682AF5ED1515ECA965604C", |
| 790 | "2D7E17F6294524CE78B33EAB72CDD08E5FF6E313", |
| 791 | "64582B4B57F782C9302BFE7D07F74AA176627A3A", |
| 792 | "6D88795B71D3E386BBD1EB830FB9F161BA98869F", |
| 793 | "86AD34A6463F12CEE6DE9596ABA72F0DF1397FD1", |
| 794 | "7EB46685A57C0D466152DC339C8122548C757ED1", |
| 795 | "E7A98FB0692684054407CC221ABC60C199D6F52A", |
| 796 | "34DF1306662206FD0A5FC2969A4BEEC4EB0197F7", |
| 797 | "56CF7EBF08D10F0CB9FE7EE3B63A5C3A02BCB450", |
| 798 | "3BAE5CB8226642088DA760A6F78B0CF8EDDEA9F1", |
| 799 | "6475DF681E061FA506672C27CBABFA9AA6DDFF62", |
| 800 | "79D81991FA4E4957C8062753439DBFD47BBB277D", |
| 801 | "BAE224477B20302E881F5249F52EC6C34DA8ECEF", |
| 802 | "EDE4DEB4293CFE4138C2C056B7C46FF821CC0ACC", |
| 803 | |
| 804 | "A9993E364706816ABA3E25717850C26C9CD0D89D", |
| 805 | "84983E441C3BD26EBAAE4AA1F95129E5E54670F1" |
| 806 | }; |
| 807 | |
| 808 | static uschar *atest = "34AA973CD4C4DAA4F61EEB2BDBAD27316534016F"; |
| 809 | |
| 810 | int main(void) |
| 811 | { |
| 812 | sha1 base; |
| 813 | int j; |
| 814 | int i = 0x01020304; |
| 815 | uschar *ctest = US (&i); |
| 816 | uschar buffer[256]; |
| 817 | uschar digest[20]; |
| 818 | uschar s[41]; |
| 819 | printf("Checking sha1: %s-endian\n\n", (ctest[0] == 0x04)? "little" : "big"); |
| 820 | |
| 821 | for (i = 0; i < sizeof(tests)/sizeof(uschar *); i ++) |
| 822 | { |
| 823 | printf("%d.\nShould be: %s\n", i, hashes[i]); |
| 824 | native_sha1_start(&base); |
| 825 | native_sha1_end(&base, tests[i], (i <= 128)? i : strlen(tests[i]), digest); |
| 826 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); |
| 827 | printf("Computed: %s\n", s); |
| 828 | if (strcmp(s, hashes[i]) != 0) printf("*** No match ***\n"); |
| 829 | printf("\n"); |
| 830 | } |
| 831 | |
| 832 | /* 1 000 000 repetitions of "a" */ |
| 833 | |
| 834 | ctest = malloc(1000000); |
| 835 | memset(ctest, 'a', 1000000); |
| 836 | |
| 837 | printf("1 000 000 repetitions of 'a'\n"); |
| 838 | printf("Should be: %s\n", atest); |
| 839 | native_sha1_start(&base); |
| 840 | native_sha1_end(&base, ctest, 1000000, digest); |
| 841 | for (j = 0; j < 20; j++) sprintf(s+2*j, "%02X", digest[j]); |
| 842 | printf("Computed: %s\n", s); |
| 843 | if (strcmp(s, atest) != 0) printf("*** No match ***\n"); |
| 844 | |
| 845 | } |
| 846 | # endif /*STAND_ALONE*/ |
| 847 | |
| 848 | /* End of File */ |