Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

lib: add module support to crc32 tests

Extract the crc32 test code into its own source file, to allow to
compile it either to a loadable module, or builtin into the kernel.

Link: http://lkml.kernel.org/r/1483470276-10517-1-git-send-email-geert@linux-m68k.org
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Geert Uytterhoeven and committed by
Linus Torvalds
5fb7f874 738bc38d

+858 -826
+1 -2
lib/Kconfig
··· 103 103 functions require M here. 104 104 105 105 config CRC32_SELFTEST 106 - bool "CRC32 perform self test on init" 107 - default n 106 + tristate "CRC32 perform self test on init" 108 107 depends on CRC32 109 108 help 110 109 This option enables the CRC32 library functions to perform a
+1
lib/Makefile
··· 92 92 obj-$(CONFIG_CRC_T10DIF)+= crc-t10dif.o 93 93 obj-$(CONFIG_CRC_ITU_T) += crc-itu-t.o 94 94 obj-$(CONFIG_CRC32) += crc32.o 95 + obj-$(CONFIG_CRC32_SELFTEST) += crc32test.o 95 96 obj-$(CONFIG_CRC7) += crc7.o 96 97 obj-$(CONFIG_LIBCRC32C) += libcrc32c.o 97 98 obj-$(CONFIG_CRC8) += crc8.o
-824
lib/crc32.c
··· 340 340 } 341 341 #endif 342 342 EXPORT_SYMBOL(crc32_be); 343 - 344 - #ifdef CONFIG_CRC32_SELFTEST 345 - 346 - /* 4096 random bytes */ 347 - static u8 const __aligned(8) test_buf[] __initconst = 348 - { 349 - 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30, 350 - 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4, 351 - 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60, 352 - 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c, 353 - 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4, 354 - 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a, 355 - 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a, 356 - 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4, 357 - 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9, 358 - 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4, 359 - 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca, 360 - 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61, 361 - 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e, 362 - 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a, 363 - 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f, 364 - 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd, 365 - 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c, 366 - 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88, 367 - 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53, 368 - 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f, 369 - 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4, 370 - 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74, 371 - 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60, 372 - 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09, 373 - 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07, 374 - 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1, 375 - 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f, 376 - 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2, 377 - 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0, 378 - 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95, 379 - 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22, 380 - 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93, 381 - 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86, 382 - 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d, 383 - 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40, 384 - 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b, 385 - 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35, 386 - 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40, 387 - 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63, 388 - 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b, 389 - 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8, 390 - 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72, 391 - 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86, 392 - 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff, 393 - 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed, 394 - 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c, 395 - 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed, 396 - 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30, 397 - 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99, 398 - 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4, 399 - 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80, 400 - 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37, 401 - 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04, 402 - 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e, 403 - 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd, 404 - 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c, 405 - 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09, 406 - 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb, 407 - 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b, 408 - 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53, 409 - 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b, 410 - 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f, 411 - 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff, 412 - 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40, 413 - 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6, 414 - 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb, 415 - 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73, 416 - 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f, 417 - 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4, 418 - 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66, 419 - 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1, 420 - 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80, 421 - 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f, 422 - 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5, 423 - 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7, 424 - 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce, 425 - 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff, 426 - 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48, 427 - 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26, 428 - 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72, 429 - 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88, 430 - 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9, 431 - 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc, 432 - 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8, 433 - 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09, 434 - 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8, 435 - 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c, 436 - 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48, 437 - 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d, 438 - 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f, 439 - 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae, 440 - 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97, 441 - 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8, 442 - 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75, 443 - 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc, 444 - 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27, 445 - 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf, 446 - 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7, 447 - 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0, 448 - 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8, 449 - 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c, 450 - 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44, 451 - 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54, 452 - 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38, 453 - 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f, 454 - 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b, 455 - 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7, 456 - 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef, 457 - 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e, 458 - 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c, 459 - 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c, 460 - 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0, 461 - 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37, 462 - 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf, 463 - 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e, 464 - 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4, 465 - 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60, 466 - 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe, 467 - 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61, 468 - 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3, 469 - 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe, 470 - 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40, 471 - 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec, 472 - 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f, 473 - 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7, 474 - 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79, 475 - 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c, 476 - 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f, 477 - 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21, 478 - 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9, 479 - 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30, 480 - 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b, 481 - 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee, 482 - 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6, 483 - 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3, 484 - 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09, 485 - 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd, 486 - 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f, 487 - 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9, 488 - 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc, 489 - 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59, 490 - 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60, 491 - 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5, 492 - 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1, 493 - 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8, 494 - 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9, 495 - 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab, 496 - 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80, 497 - 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01, 498 - 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e, 499 - 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d, 500 - 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35, 501 - 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38, 502 - 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a, 503 - 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac, 504 - 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca, 505 - 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57, 506 - 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed, 507 - 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20, 508 - 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef, 509 - 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c, 510 - 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a, 511 - 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64, 512 - 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4, 513 - 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54, 514 - 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16, 515 - 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26, 516 - 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc, 517 - 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87, 518 - 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60, 519 - 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d, 520 - 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54, 521 - 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13, 522 - 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59, 523 - 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb, 524 - 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f, 525 - 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15, 526 - 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78, 527 - 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93, 528 - 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e, 529 - 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31, 530 - 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1, 531 - 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37, 532 - 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15, 533 - 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78, 534 - 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f, 535 - 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31, 536 - 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f, 537 - 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc, 538 - 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9, 539 - 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3, 540 - 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe, 541 - 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4, 542 - 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24, 543 - 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1, 544 - 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85, 545 - 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8, 546 - 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09, 547 - 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c, 548 - 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46, 549 - 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5, 550 - 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39, 551 - 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2, 552 - 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc, 553 - 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35, 554 - 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde, 555 - 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80, 556 - 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15, 557 - 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63, 558 - 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58, 559 - 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d, 560 - 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf, 561 - 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12, 562 - 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c, 563 - 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b, 564 - 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1, 565 - 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6, 566 - 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73, 567 - 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9, 568 - 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e, 569 - 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22, 570 - 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb, 571 - 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2, 572 - 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c, 573 - 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c, 574 - 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93, 575 - 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f, 576 - 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38, 577 - 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57, 578 - 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03, 579 - 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90, 580 - 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8, 581 - 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4, 582 - 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36, 583 - 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7, 584 - 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47, 585 - 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46, 586 - 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73, 587 - 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72, 588 - 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23, 589 - 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a, 590 - 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58, 591 - 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f, 592 - 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96, 593 - 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9, 594 - 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b, 595 - 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c, 596 - 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef, 597 - 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3, 598 - 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4, 599 - 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f, 600 - 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17, 601 - 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18, 602 - 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8, 603 - 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98, 604 - 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42, 605 - 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97, 606 - 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97, 607 - 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1, 608 - 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77, 609 - 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb, 610 - 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c, 611 - 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb, 612 - 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56, 613 - 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04, 614 - 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48, 615 - 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe, 616 - 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d, 617 - 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97, 618 - 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8, 619 - 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f, 620 - 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e, 621 - 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca, 622 - 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44, 623 - 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f, 624 - 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6, 625 - 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63, 626 - 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19, 627 - 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58, 628 - 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b, 629 - 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28, 630 - 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf, 631 - 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6, 632 - 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3, 633 - 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe, 634 - 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f, 635 - 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf, 636 - 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9, 637 - 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e, 638 - 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7, 639 - 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70, 640 - 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0, 641 - 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d, 642 - 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4, 643 - 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5, 644 - 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85, 645 - 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc, 646 - 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f, 647 - 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56, 648 - 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb, 649 - 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b, 650 - 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5, 651 - 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03, 652 - 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23, 653 - 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03, 654 - 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87, 655 - 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4, 656 - 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43, 657 - 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11, 658 - 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40, 659 - 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59, 660 - 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9, 661 - 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30, 662 - 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd, 663 - 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45, 664 - 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83, 665 - 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b, 666 - 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5, 667 - 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3, 668 - 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84, 669 - 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8, 670 - 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34, 671 - 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b, 672 - 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31, 673 - 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b, 674 - 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40, 675 - 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b, 676 - 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e, 677 - 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38, 678 - 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb, 679 - 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2, 680 - 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c, 681 - 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1, 682 - 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc, 683 - 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec, 684 - 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34, 685 - 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95, 686 - 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92, 687 - 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f, 688 - 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c, 689 - 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b, 690 - 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c, 691 - 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5, 692 - 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb, 693 - 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4, 694 - 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9, 695 - 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4, 696 - 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41, 697 - 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a, 698 - 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8, 699 - 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06, 700 - 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62, 701 - 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47, 702 - 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4, 703 - 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00, 704 - 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67, 705 - 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81, 706 - 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0, 707 - 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10, 708 - 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79, 709 - 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19, 710 - 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8, 711 - 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1, 712 - 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83, 713 - 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86, 714 - 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55, 715 - 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66, 716 - 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0, 717 - 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49, 718 - 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea, 719 - 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24, 720 - 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e, 721 - 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88, 722 - 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87, 723 - 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34, 724 - 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f, 725 - 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a, 726 - 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a, 727 - 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93, 728 - 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37, 729 - 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38, 730 - 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4, 731 - 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48, 732 - 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65, 733 - 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09, 734 - 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e, 735 - 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5, 736 - 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b, 737 - 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4, 738 - 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e, 739 - 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d, 740 - 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0, 741 - 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5, 742 - 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48, 743 - 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e, 744 - 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f, 745 - 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a, 746 - 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d, 747 - 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14, 748 - 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69, 749 - 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53, 750 - 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56, 751 - 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48, 752 - 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4, 753 - 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26, 754 - 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e, 755 - 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40, 756 - 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7, 757 - 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62, 758 - 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe, 759 - 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf, 760 - 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2, 761 - 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d, 762 - 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32, 763 - 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa, 764 - 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45, 765 - 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04, 766 - 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33, 767 - 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad, 768 - 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4, 769 - 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c, 770 - 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b, 771 - 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36, 772 - 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa, 773 - 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9, 774 - 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28, 775 - 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b, 776 - 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03, 777 - 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d, 778 - 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff, 779 - 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39, 780 - 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b, 781 - 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2, 782 - 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34, 783 - 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe, 784 - 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0, 785 - 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27, 786 - 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86, 787 - 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90, 788 - 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03, 789 - 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb, 790 - 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57, 791 - 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9, 792 - 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5, 793 - 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16, 794 - 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5, 795 - 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a, 796 - 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d, 797 - 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0, 798 - 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f, 799 - 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48, 800 - 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1, 801 - 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09, 802 - 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51, 803 - 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b, 804 - 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf, 805 - 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe, 806 - 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad, 807 - 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e, 808 - 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57, 809 - 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f, 810 - 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef, 811 - 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8, 812 - 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69, 813 - 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d, 814 - 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59, 815 - 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9, 816 - 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d, 817 - 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea, 818 - 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56, 819 - 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4, 820 - 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8, 821 - 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78, 822 - 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f, 823 - 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4, 824 - 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91, 825 - 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f, 826 - 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c, 827 - 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57, 828 - 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4, 829 - 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23, 830 - 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17, 831 - 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66, 832 - 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39, 833 - 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36, 834 - 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00, 835 - 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7, 836 - 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60, 837 - 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c, 838 - 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e, 839 - 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7, 840 - 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a, 841 - 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d, 842 - 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37, 843 - 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82, 844 - 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8, 845 - 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e, 846 - 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85, 847 - 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98, 848 - 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22, 849 - 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7, 850 - 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49, 851 - 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33, 852 - 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc, 853 - 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8, 854 - 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f, 855 - 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3, 856 - 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98, 857 - 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c, 858 - 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6, 859 - 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc, 860 - 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d, 861 - }; 862 - 863 - /* 100 test cases */ 864 - static struct crc_test { 865 - u32 crc; /* random starting crc */ 866 - u32 start; /* random 6 bit offset in buf */ 867 - u32 length; /* random 11 bit length of test */ 868 - u32 crc_le; /* expected crc32_le result */ 869 - u32 crc_be; /* expected crc32_be result */ 870 - u32 crc32c_le; /* expected crc32c_le result */ 871 - } const test[] __initconst = 872 - { 873 - {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1, 0xf6e93d6c}, 874 - {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad, 0x0fe92aca}, 875 - {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f, 0x52e1ebb8}, 876 - {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a, 0x0798af9a}, 877 - {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2, 0x18eb3152}, 878 - {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793, 0xd00d08c7}, 879 - {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed, 0x8ba966bc}, 880 - {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35, 0x11d694a2}, 881 - {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2, 0x6ab3208d}, 882 - {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10, 0xba4603c5}, 883 - {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb, 0xe6071c6f}, 884 - {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0, 0x179ec30a}, 885 - {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb, 0x0903beb8}, 886 - {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed, 0x6a7cb4fa}, 887 - {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591, 0xdb535801}, 888 - {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67, 0x92bed597}, 889 - {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd, 0x192a3f1b}, 890 - {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a, 0xccbaec1a}, 891 - {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b, 0x7eabae4d}, 892 - {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f, 0x28c72982}, 893 - {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d, 0xc3cd4d18}, 894 - {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a, 0xbca8f0e7}, 895 - {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97, 0x713f60b3}, 896 - {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2, 0xebd08fd5}, 897 - {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138, 0x64406c59}, 898 - {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032, 0x7421890e}, 899 - {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f, 0xe9347603}, 900 - {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f, 0x1bef9060}, 901 - {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32, 0x34720072}, 902 - {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef, 0x48310f59}, 903 - {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0, 0x783a4213}, 904 - {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59, 0x9e8efd41}, 905 - {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4, 0xfc3d34a5}, 906 - {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c, 0x17a52ae2}, 907 - {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51, 0x886d935a}, 908 - {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11, 0xeaaeaeb2}, 909 - {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659, 0x8e900a4b}, 910 - {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af, 0xd74662b1}, 911 - {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99, 0xd26752ba}, 912 - {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b, 0x8b1fcd62}, 913 - {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521, 0xf54342fe}, 914 - {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3, 0x5b95b988}, 915 - {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d, 0x2e1176be}, 916 - {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f, 0x66120546}, 917 - {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b, 0xf256a5cc}, 918 - {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0, 0x4af1dd69}, 919 - {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195, 0x56f0a04a}, 920 - {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d, 0x74f6b6b2}, 921 - {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4, 0x085951fd}, 922 - {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3, 0xc65387eb}, 923 - {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643, 0x1ca9257b}, 924 - {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10, 0xfd196d76}, 925 - {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d, 0x5ef88339}, 926 - {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5, 0x2c3714d9}, 927 - {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b, 0x58576548}, 928 - {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee, 0xfd7c57de}, 929 - {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14, 0xd5fedd59}, 930 - {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a, 0x1cc3b17b}, 931 - {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b, 0x270eed73}, 932 - {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3, 0x91ecbb11}, 933 - {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826, 0x05ed8d0c}, 934 - {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06, 0x0b09ad5b}, 935 - {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35, 0xf8d511fb}, 936 - {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801, 0x5ad832cc}, 937 - {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2, 0x1214d196}, 938 - {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d, 0x5747218a}, 939 - {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c, 0xde8f14de}, 940 - {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba, 0x3563b7b9}, 941 - {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5, 0x071475d0}, 942 - {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b, 0x54c79d60}, 943 - {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178, 0x4c53eee6}, 944 - {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3, 0x10137a3c}, 945 - {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605, 0xaa9d6c73}, 946 - {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1, 0xb63d23e7}, 947 - {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9, 0x7f53e9cf}, 948 - {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78, 0x13c1cd83}, 949 - {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9, 0x49ff5867}, 950 - {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd, 0x8467f211}, 951 - {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab, 0x3f9683b2}, 952 - {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb, 0x76a3f874}, 953 - {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77, 0x863b702f}, 954 - {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da, 0xdc6c58ff}, 955 - {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39, 0x0622cc95}, 956 - {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16, 0xe85605cd}, 957 - {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208, 0x31da5f06}, 958 - {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e, 0xa1f2e784}, 959 - {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5, 0xb07cc616}, 960 - {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892, 0xbf943b6c}, 961 - {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db, 0x2c01af1c}, 962 - {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43, 0x0fe5f56d}, 963 - {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac, 0xf8943b2d}, 964 - {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7, 0xe4d89272}, 965 - {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2, 0x7c2f6bbb}, 966 - {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2, 0xabbf388b}, 967 - {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640, 0x1dca1f4e}, 968 - {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f, 0x5c170e23}, 969 - {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99, 0xc0e9d672}, 970 - {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7, 0xc18bdc86}, 971 - {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499, 0xa874fcdd}, 972 - {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a, 0x9dc0bb48}, 973 - }; 974 - 975 - #include <linux/time.h> 976 - 977 - static int __init crc32c_test(void) 978 - { 979 - int i; 980 - int errors = 0; 981 - int bytes = 0; 982 - u64 nsec; 983 - unsigned long flags; 984 - 985 - /* keep static to prevent cache warming code from 986 - * getting eliminated by the compiler */ 987 - static u32 crc; 988 - 989 - /* pre-warm the cache */ 990 - for (i = 0; i < 100; i++) { 991 - bytes += 2*test[i].length; 992 - 993 - crc ^= __crc32c_le(test[i].crc, test_buf + 994 - test[i].start, test[i].length); 995 - } 996 - 997 - /* reduce OS noise */ 998 - local_irq_save(flags); 999 - local_irq_disable(); 1000 - 1001 - nsec = ktime_get_ns(); 1002 - for (i = 0; i < 100; i++) { 1003 - if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf + 1004 - test[i].start, test[i].length)) 1005 - errors++; 1006 - } 1007 - nsec = ktime_get_ns() - nsec; 1008 - 1009 - local_irq_restore(flags); 1010 - local_irq_enable(); 1011 - 1012 - pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS); 1013 - 1014 - if (errors) 1015 - pr_warn("crc32c: %d self tests failed\n", errors); 1016 - else { 1017 - pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n", 1018 - bytes, nsec); 1019 - } 1020 - 1021 - return 0; 1022 - } 1023 - 1024 - static int __init crc32c_combine_test(void) 1025 - { 1026 - int i, j; 1027 - int errors = 0, runs = 0; 1028 - 1029 - for (i = 0; i < 10; i++) { 1030 - u32 crc_full; 1031 - 1032 - crc_full = __crc32c_le(test[i].crc, test_buf + test[i].start, 1033 - test[i].length); 1034 - for (j = 0; j <= test[i].length; ++j) { 1035 - u32 crc1, crc2; 1036 - u32 len1 = j, len2 = test[i].length - j; 1037 - 1038 - crc1 = __crc32c_le(test[i].crc, test_buf + 1039 - test[i].start, len1); 1040 - crc2 = __crc32c_le(0, test_buf + test[i].start + 1041 - len1, len2); 1042 - 1043 - if (!(crc_full == __crc32c_le_combine(crc1, crc2, len2) && 1044 - crc_full == test[i].crc32c_le)) 1045 - errors++; 1046 - runs++; 1047 - cond_resched(); 1048 - } 1049 - } 1050 - 1051 - if (errors) 1052 - pr_warn("crc32c_combine: %d/%d self tests failed\n", errors, runs); 1053 - else 1054 - pr_info("crc32c_combine: %d self tests passed\n", runs); 1055 - 1056 - return 0; 1057 - } 1058 - 1059 - static int __init crc32_test(void) 1060 - { 1061 - int i; 1062 - int errors = 0; 1063 - int bytes = 0; 1064 - u64 nsec; 1065 - unsigned long flags; 1066 - 1067 - /* keep static to prevent cache warming code from 1068 - * getting eliminated by the compiler */ 1069 - static u32 crc; 1070 - 1071 - /* pre-warm the cache */ 1072 - for (i = 0; i < 100; i++) { 1073 - bytes += 2*test[i].length; 1074 - 1075 - crc ^= crc32_le(test[i].crc, test_buf + 1076 - test[i].start, test[i].length); 1077 - 1078 - crc ^= crc32_be(test[i].crc, test_buf + 1079 - test[i].start, test[i].length); 1080 - } 1081 - 1082 - /* reduce OS noise */ 1083 - local_irq_save(flags); 1084 - local_irq_disable(); 1085 - 1086 - nsec = ktime_get_ns(); 1087 - for (i = 0; i < 100; i++) { 1088 - if (test[i].crc_le != crc32_le(test[i].crc, test_buf + 1089 - test[i].start, test[i].length)) 1090 - errors++; 1091 - 1092 - if (test[i].crc_be != crc32_be(test[i].crc, test_buf + 1093 - test[i].start, test[i].length)) 1094 - errors++; 1095 - } 1096 - nsec = ktime_get_ns() - nsec; 1097 - 1098 - local_irq_restore(flags); 1099 - local_irq_enable(); 1100 - 1101 - pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n", 1102 - CRC_LE_BITS, CRC_BE_BITS); 1103 - 1104 - if (errors) 1105 - pr_warn("crc32: %d self tests failed\n", errors); 1106 - else { 1107 - pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n", 1108 - bytes, nsec); 1109 - } 1110 - 1111 - return 0; 1112 - } 1113 - 1114 - static int __init crc32_combine_test(void) 1115 - { 1116 - int i, j; 1117 - int errors = 0, runs = 0; 1118 - 1119 - for (i = 0; i < 10; i++) { 1120 - u32 crc_full; 1121 - 1122 - crc_full = crc32_le(test[i].crc, test_buf + test[i].start, 1123 - test[i].length); 1124 - for (j = 0; j <= test[i].length; ++j) { 1125 - u32 crc1, crc2; 1126 - u32 len1 = j, len2 = test[i].length - j; 1127 - 1128 - crc1 = crc32_le(test[i].crc, test_buf + 1129 - test[i].start, len1); 1130 - crc2 = crc32_le(0, test_buf + test[i].start + 1131 - len1, len2); 1132 - 1133 - if (!(crc_full == crc32_le_combine(crc1, crc2, len2) && 1134 - crc_full == test[i].crc_le)) 1135 - errors++; 1136 - runs++; 1137 - cond_resched(); 1138 - } 1139 - } 1140 - 1141 - if (errors) 1142 - pr_warn("crc32_combine: %d/%d self tests failed\n", errors, runs); 1143 - else 1144 - pr_info("crc32_combine: %d self tests passed\n", runs); 1145 - 1146 - return 0; 1147 - } 1148 - 1149 - static int __init crc32test_init(void) 1150 - { 1151 - crc32_test(); 1152 - crc32c_test(); 1153 - 1154 - crc32_combine_test(); 1155 - crc32c_combine_test(); 1156 - 1157 - return 0; 1158 - } 1159 - 1160 - static void __exit crc32_exit(void) 1161 - { 1162 - } 1163 - 1164 - module_init(crc32test_init); 1165 - module_exit(crc32_exit); 1166 - #endif /* CONFIG_CRC32_SELFTEST */
+856
lib/crc32test.c
··· 1 + /* 2 + * Aug 8, 2011 Bob Pearson with help from Joakim Tjernlund and George Spelvin 3 + * cleaned up code to current version of sparse and added the slicing-by-8 4 + * algorithm to the closely similar existing slicing-by-4 algorithm. 5 + * 6 + * Oct 15, 2000 Matt Domsch <Matt_Domsch@dell.com> 7 + * Nicer crc32 functions/docs submitted by linux@horizon.com. Thanks! 8 + * Code was from the public domain, copyright abandoned. Code was 9 + * subsequently included in the kernel, thus was re-licensed under the 10 + * GNU GPL v2. 11 + * 12 + * Oct 12, 2000 Matt Domsch <Matt_Domsch@dell.com> 13 + * Same crc32 function was used in 5 other places in the kernel. 14 + * I made one version, and deleted the others. 15 + * There are various incantations of crc32(). Some use a seed of 0 or ~0. 16 + * Some xor at the end with ~0. The generic crc32() function takes 17 + * seed as an argument, and doesn't xor at the end. Then individual 18 + * users can do whatever they need. 19 + * drivers/net/smc9194.c uses seed ~0, doesn't xor with ~0. 20 + * fs/jffs2 uses seed 0, doesn't xor with ~0. 21 + * fs/partitions/efi.c uses seed ~0, xor's with ~0. 22 + * 23 + * This source code is licensed under the GNU General Public License, 24 + * Version 2. See the file COPYING for more details. 25 + */ 26 + 27 + #include <linux/crc32.h> 28 + #include <linux/module.h> 29 + #include <linux/sched.h> 30 + 31 + #include "crc32defs.h" 32 + 33 + /* 4096 random bytes */ 34 + static u8 const __aligned(8) test_buf[] __initconst = 35 + { 36 + 0x5b, 0x85, 0x21, 0xcb, 0x09, 0x68, 0x7d, 0x30, 37 + 0xc7, 0x69, 0xd7, 0x30, 0x92, 0xde, 0x59, 0xe4, 38 + 0xc9, 0x6e, 0x8b, 0xdb, 0x98, 0x6b, 0xaa, 0x60, 39 + 0xa8, 0xb5, 0xbc, 0x6c, 0xa9, 0xb1, 0x5b, 0x2c, 40 + 0xea, 0xb4, 0x92, 0x6a, 0x3f, 0x79, 0x91, 0xe4, 41 + 0xe9, 0x70, 0x51, 0x8c, 0x7f, 0x95, 0x6f, 0x1a, 42 + 0x56, 0xa1, 0x5c, 0x27, 0x03, 0x67, 0x9f, 0x3a, 43 + 0xe2, 0x31, 0x11, 0x29, 0x6b, 0x98, 0xfc, 0xc4, 44 + 0x53, 0x24, 0xc5, 0x8b, 0xce, 0x47, 0xb2, 0xb9, 45 + 0x32, 0xcb, 0xc1, 0xd0, 0x03, 0x57, 0x4e, 0xd4, 46 + 0xe9, 0x3c, 0xa1, 0x63, 0xcf, 0x12, 0x0e, 0xca, 47 + 0xe1, 0x13, 0xd1, 0x93, 0xa6, 0x88, 0x5c, 0x61, 48 + 0x5b, 0xbb, 0xf0, 0x19, 0x46, 0xb4, 0xcf, 0x9e, 49 + 0xb6, 0x6b, 0x4c, 0x3a, 0xcf, 0x60, 0xf9, 0x7a, 50 + 0x8d, 0x07, 0x63, 0xdb, 0x40, 0xe9, 0x0b, 0x6f, 51 + 0xad, 0x97, 0xf1, 0xed, 0xd0, 0x1e, 0x26, 0xfd, 52 + 0xbf, 0xb7, 0xc8, 0x04, 0x94, 0xf8, 0x8b, 0x8c, 53 + 0xf1, 0xab, 0x7a, 0xd4, 0xdd, 0xf3, 0xe8, 0x88, 54 + 0xc3, 0xed, 0x17, 0x8a, 0x9b, 0x40, 0x0d, 0x53, 55 + 0x62, 0x12, 0x03, 0x5f, 0x1b, 0x35, 0x32, 0x1f, 56 + 0xb4, 0x7b, 0x93, 0x78, 0x0d, 0xdb, 0xce, 0xa4, 57 + 0xc0, 0x47, 0xd5, 0xbf, 0x68, 0xe8, 0x5d, 0x74, 58 + 0x8f, 0x8e, 0x75, 0x1c, 0xb2, 0x4f, 0x9a, 0x60, 59 + 0xd1, 0xbe, 0x10, 0xf4, 0x5c, 0xa1, 0x53, 0x09, 60 + 0xa5, 0xe0, 0x09, 0x54, 0x85, 0x5c, 0xdc, 0x07, 61 + 0xe7, 0x21, 0x69, 0x7b, 0x8a, 0xfd, 0x90, 0xf1, 62 + 0x22, 0xd0, 0xb4, 0x36, 0x28, 0xe6, 0xb8, 0x0f, 63 + 0x39, 0xde, 0xc8, 0xf3, 0x86, 0x60, 0x34, 0xd2, 64 + 0x5e, 0xdf, 0xfd, 0xcf, 0x0f, 0xa9, 0x65, 0xf0, 65 + 0xd5, 0x4d, 0x96, 0x40, 0xe3, 0xdf, 0x3f, 0x95, 66 + 0x5a, 0x39, 0x19, 0x93, 0xf4, 0x75, 0xce, 0x22, 67 + 0x00, 0x1c, 0x93, 0xe2, 0x03, 0x66, 0xf4, 0x93, 68 + 0x73, 0x86, 0x81, 0x8e, 0x29, 0x44, 0x48, 0x86, 69 + 0x61, 0x7c, 0x48, 0xa3, 0x43, 0xd2, 0x9c, 0x8d, 70 + 0xd4, 0x95, 0xdd, 0xe1, 0x22, 0x89, 0x3a, 0x40, 71 + 0x4c, 0x1b, 0x8a, 0x04, 0xa8, 0x09, 0x69, 0x8b, 72 + 0xea, 0xc6, 0x55, 0x8e, 0x57, 0xe6, 0x64, 0x35, 73 + 0xf0, 0xc7, 0x16, 0x9f, 0x5d, 0x5e, 0x86, 0x40, 74 + 0x46, 0xbb, 0xe5, 0x45, 0x88, 0xfe, 0xc9, 0x63, 75 + 0x15, 0xfb, 0xf5, 0xbd, 0x71, 0x61, 0xeb, 0x7b, 76 + 0x78, 0x70, 0x07, 0x31, 0x03, 0x9f, 0xb2, 0xc8, 77 + 0xa7, 0xab, 0x47, 0xfd, 0xdf, 0xa0, 0x78, 0x72, 78 + 0xa4, 0x2a, 0xe4, 0xb6, 0xba, 0xc0, 0x1e, 0x86, 79 + 0x71, 0xe6, 0x3d, 0x18, 0x37, 0x70, 0xe6, 0xff, 80 + 0xe0, 0xbc, 0x0b, 0x22, 0xa0, 0x1f, 0xd3, 0xed, 81 + 0xa2, 0x55, 0x39, 0xab, 0xa8, 0x13, 0x73, 0x7c, 82 + 0x3f, 0xb2, 0xd6, 0x19, 0xac, 0xff, 0x99, 0xed, 83 + 0xe8, 0xe6, 0xa6, 0x22, 0xe3, 0x9c, 0xf1, 0x30, 84 + 0xdc, 0x01, 0x0a, 0x56, 0xfa, 0xe4, 0xc9, 0x99, 85 + 0xdd, 0xa8, 0xd8, 0xda, 0x35, 0x51, 0x73, 0xb4, 86 + 0x40, 0x86, 0x85, 0xdb, 0x5c, 0xd5, 0x85, 0x80, 87 + 0x14, 0x9c, 0xfd, 0x98, 0xa9, 0x82, 0xc5, 0x37, 88 + 0xff, 0x32, 0x5d, 0xd0, 0x0b, 0xfa, 0xdc, 0x04, 89 + 0x5e, 0x09, 0xd2, 0xca, 0x17, 0x4b, 0x1a, 0x8e, 90 + 0x15, 0xe1, 0xcc, 0x4e, 0x52, 0x88, 0x35, 0xbd, 91 + 0x48, 0xfe, 0x15, 0xa0, 0x91, 0xfd, 0x7e, 0x6c, 92 + 0x0e, 0x5d, 0x79, 0x1b, 0x81, 0x79, 0xd2, 0x09, 93 + 0x34, 0x70, 0x3d, 0x81, 0xec, 0xf6, 0x24, 0xbb, 94 + 0xfb, 0xf1, 0x7b, 0xdf, 0x54, 0xea, 0x80, 0x9b, 95 + 0xc7, 0x99, 0x9e, 0xbd, 0x16, 0x78, 0x12, 0x53, 96 + 0x5e, 0x01, 0xa7, 0x4e, 0xbd, 0x67, 0xe1, 0x9b, 97 + 0x4c, 0x0e, 0x61, 0x45, 0x97, 0xd2, 0xf0, 0x0f, 98 + 0xfe, 0x15, 0x08, 0xb7, 0x11, 0x4c, 0xe7, 0xff, 99 + 0x81, 0x53, 0xff, 0x91, 0x25, 0x38, 0x7e, 0x40, 100 + 0x94, 0xe5, 0xe0, 0xad, 0xe6, 0xd9, 0x79, 0xb6, 101 + 0x92, 0xc9, 0xfc, 0xde, 0xc3, 0x1a, 0x23, 0xbb, 102 + 0xdd, 0xc8, 0x51, 0x0c, 0x3a, 0x72, 0xfa, 0x73, 103 + 0x6f, 0xb7, 0xee, 0x61, 0x39, 0x03, 0x01, 0x3f, 104 + 0x7f, 0x94, 0x2e, 0x2e, 0xba, 0x3a, 0xbb, 0xb4, 105 + 0xfa, 0x6a, 0x17, 0xfe, 0xea, 0xef, 0x5e, 0x66, 106 + 0x97, 0x3f, 0x32, 0x3d, 0xd7, 0x3e, 0xb1, 0xf1, 107 + 0x6c, 0x14, 0x4c, 0xfd, 0x37, 0xd3, 0x38, 0x80, 108 + 0xfb, 0xde, 0xa6, 0x24, 0x1e, 0xc8, 0xca, 0x7f, 109 + 0x3a, 0x93, 0xd8, 0x8b, 0x18, 0x13, 0xb2, 0xe5, 110 + 0xe4, 0x93, 0x05, 0x53, 0x4f, 0x84, 0x66, 0xa7, 111 + 0x58, 0x5c, 0x7b, 0x86, 0x52, 0x6d, 0x0d, 0xce, 112 + 0xa4, 0x30, 0x7d, 0xb6, 0x18, 0x9f, 0xeb, 0xff, 113 + 0x22, 0xbb, 0x72, 0x29, 0xb9, 0x44, 0x0b, 0x48, 114 + 0x1e, 0x84, 0x71, 0x81, 0xe3, 0x6d, 0x73, 0x26, 115 + 0x92, 0xb4, 0x4d, 0x2a, 0x29, 0xb8, 0x1f, 0x72, 116 + 0xed, 0xd0, 0xe1, 0x64, 0x77, 0xea, 0x8e, 0x88, 117 + 0x0f, 0xef, 0x3f, 0xb1, 0x3b, 0xad, 0xf9, 0xc9, 118 + 0x8b, 0xd0, 0xac, 0xc6, 0xcc, 0xa9, 0x40, 0xcc, 119 + 0x76, 0xf6, 0x3b, 0x53, 0xb5, 0x88, 0xcb, 0xc8, 120 + 0x37, 0xf1, 0xa2, 0xba, 0x23, 0x15, 0x99, 0x09, 121 + 0xcc, 0xe7, 0x7a, 0x3b, 0x37, 0xf7, 0x58, 0xc8, 122 + 0x46, 0x8c, 0x2b, 0x2f, 0x4e, 0x0e, 0xa6, 0x5c, 123 + 0xea, 0x85, 0x55, 0xba, 0x02, 0x0e, 0x0e, 0x48, 124 + 0xbc, 0xe1, 0xb1, 0x01, 0x35, 0x79, 0x13, 0x3d, 125 + 0x1b, 0xc0, 0x53, 0x68, 0x11, 0xe7, 0x95, 0x0f, 126 + 0x9d, 0x3f, 0x4c, 0x47, 0x7b, 0x4d, 0x1c, 0xae, 127 + 0x50, 0x9b, 0xcb, 0xdd, 0x05, 0x8d, 0x9a, 0x97, 128 + 0xfd, 0x8c, 0xef, 0x0c, 0x1d, 0x67, 0x73, 0xa8, 129 + 0x28, 0x36, 0xd5, 0xb6, 0x92, 0x33, 0x40, 0x75, 130 + 0x0b, 0x51, 0xc3, 0x64, 0xba, 0x1d, 0xc2, 0xcc, 131 + 0xee, 0x7d, 0x54, 0x0f, 0x27, 0x69, 0xa7, 0x27, 132 + 0x63, 0x30, 0x29, 0xd9, 0xc8, 0x84, 0xd8, 0xdf, 133 + 0x9f, 0x68, 0x8d, 0x04, 0xca, 0xa6, 0xc5, 0xc7, 134 + 0x7a, 0x5c, 0xc8, 0xd1, 0xcb, 0x4a, 0xec, 0xd0, 135 + 0xd8, 0x20, 0x69, 0xc5, 0x17, 0xcd, 0x78, 0xc8, 136 + 0x75, 0x23, 0x30, 0x69, 0xc9, 0xd4, 0xea, 0x5c, 137 + 0x4f, 0x6b, 0x86, 0x3f, 0x8b, 0xfe, 0xee, 0x44, 138 + 0xc9, 0x7c, 0xb7, 0xdd, 0x3e, 0xe5, 0xec, 0x54, 139 + 0x03, 0x3e, 0xaa, 0x82, 0xc6, 0xdf, 0xb2, 0x38, 140 + 0x0e, 0x5d, 0xb3, 0x88, 0xd9, 0xd3, 0x69, 0x5f, 141 + 0x8f, 0x70, 0x8a, 0x7e, 0x11, 0xd9, 0x1e, 0x7b, 142 + 0x38, 0xf1, 0x42, 0x1a, 0xc0, 0x35, 0xf5, 0xc7, 143 + 0x36, 0x85, 0xf5, 0xf7, 0xb8, 0x7e, 0xc7, 0xef, 144 + 0x18, 0xf1, 0x63, 0xd6, 0x7a, 0xc6, 0xc9, 0x0e, 145 + 0x4d, 0x69, 0x4f, 0x84, 0xef, 0x26, 0x41, 0x0c, 146 + 0xec, 0xc7, 0xe0, 0x7e, 0x3c, 0x67, 0x01, 0x4c, 147 + 0x62, 0x1a, 0x20, 0x6f, 0xee, 0x47, 0x4d, 0xc0, 148 + 0x99, 0x13, 0x8d, 0x91, 0x4a, 0x26, 0xd4, 0x37, 149 + 0x28, 0x90, 0x58, 0x75, 0x66, 0x2b, 0x0a, 0xdf, 150 + 0xda, 0xee, 0x92, 0x25, 0x90, 0x62, 0x39, 0x9e, 151 + 0x44, 0x98, 0xad, 0xc1, 0x88, 0xed, 0xe4, 0xb4, 152 + 0xaf, 0xf5, 0x8c, 0x9b, 0x48, 0x4d, 0x56, 0x60, 153 + 0x97, 0x0f, 0x61, 0x59, 0x9e, 0xa6, 0x27, 0xfe, 154 + 0xc1, 0x91, 0x15, 0x38, 0xb8, 0x0f, 0xae, 0x61, 155 + 0x7d, 0x26, 0x13, 0x5a, 0x73, 0xff, 0x1c, 0xa3, 156 + 0x61, 0x04, 0x58, 0x48, 0x55, 0x44, 0x11, 0xfe, 157 + 0x15, 0xca, 0xc3, 0xbd, 0xca, 0xc5, 0xb4, 0x40, 158 + 0x5d, 0x1b, 0x7f, 0x39, 0xb5, 0x9c, 0x35, 0xec, 159 + 0x61, 0x15, 0x32, 0x32, 0xb8, 0x4e, 0x40, 0x9f, 160 + 0x17, 0x1f, 0x0a, 0x4d, 0xa9, 0x91, 0xef, 0xb7, 161 + 0xb0, 0xeb, 0xc2, 0x83, 0x9a, 0x6c, 0xd2, 0x79, 162 + 0x43, 0x78, 0x5e, 0x2f, 0xe5, 0xdd, 0x1a, 0x3c, 163 + 0x45, 0xab, 0x29, 0x40, 0x3a, 0x37, 0x5b, 0x6f, 164 + 0xd7, 0xfc, 0x48, 0x64, 0x3c, 0x49, 0xfb, 0x21, 165 + 0xbe, 0xc3, 0xff, 0x07, 0xfb, 0x17, 0xe9, 0xc9, 166 + 0x0c, 0x4c, 0x5c, 0x15, 0x9e, 0x8e, 0x22, 0x30, 167 + 0x0a, 0xde, 0x48, 0x7f, 0xdb, 0x0d, 0xd1, 0x2b, 168 + 0x87, 0x38, 0x9e, 0xcc, 0x5a, 0x01, 0x16, 0xee, 169 + 0x75, 0x49, 0x0d, 0x30, 0x01, 0x34, 0x6a, 0xb6, 170 + 0x9a, 0x5a, 0x2a, 0xec, 0xbb, 0x48, 0xac, 0xd3, 171 + 0x77, 0x83, 0xd8, 0x08, 0x86, 0x4f, 0x48, 0x09, 172 + 0x29, 0x41, 0x79, 0xa1, 0x03, 0x12, 0xc4, 0xcd, 173 + 0x90, 0x55, 0x47, 0x66, 0x74, 0x9a, 0xcc, 0x4f, 174 + 0x35, 0x8c, 0xd6, 0x98, 0xef, 0xeb, 0x45, 0xb9, 175 + 0x9a, 0x26, 0x2f, 0x39, 0xa5, 0x70, 0x6d, 0xfc, 176 + 0xb4, 0x51, 0xee, 0xf4, 0x9c, 0xe7, 0x38, 0x59, 177 + 0xad, 0xf4, 0xbc, 0x46, 0xff, 0x46, 0x8e, 0x60, 178 + 0x9c, 0xa3, 0x60, 0x1d, 0xf8, 0x26, 0x72, 0xf5, 179 + 0x72, 0x9d, 0x68, 0x80, 0x04, 0xf6, 0x0b, 0xa1, 180 + 0x0a, 0xd5, 0xa7, 0x82, 0x3a, 0x3e, 0x47, 0xa8, 181 + 0x5a, 0xde, 0x59, 0x4f, 0x7b, 0x07, 0xb3, 0xe9, 182 + 0x24, 0x19, 0x3d, 0x34, 0x05, 0xec, 0xf1, 0xab, 183 + 0x6e, 0x64, 0x8f, 0xd3, 0xe6, 0x41, 0x86, 0x80, 184 + 0x70, 0xe3, 0x8d, 0x60, 0x9c, 0x34, 0x25, 0x01, 185 + 0x07, 0x4d, 0x19, 0x41, 0x4e, 0x3d, 0x5c, 0x7e, 186 + 0xa8, 0xf5, 0xcc, 0xd5, 0x7b, 0xe2, 0x7d, 0x3d, 187 + 0x49, 0x86, 0x7d, 0x07, 0xb7, 0x10, 0xe3, 0x35, 188 + 0xb8, 0x84, 0x6d, 0x76, 0xab, 0x17, 0xc6, 0x38, 189 + 0xb4, 0xd3, 0x28, 0x57, 0xad, 0xd3, 0x88, 0x5a, 190 + 0xda, 0xea, 0xc8, 0x94, 0xcc, 0x37, 0x19, 0xac, 191 + 0x9c, 0x9f, 0x4b, 0x00, 0x15, 0xc0, 0xc8, 0xca, 192 + 0x1f, 0x15, 0xaa, 0xe0, 0xdb, 0xf9, 0x2f, 0x57, 193 + 0x1b, 0x24, 0xc7, 0x6f, 0x76, 0x29, 0xfb, 0xed, 194 + 0x25, 0x0d, 0xc0, 0xfe, 0xbd, 0x5a, 0xbf, 0x20, 195 + 0x08, 0x51, 0x05, 0xec, 0x71, 0xa3, 0xbf, 0xef, 196 + 0x5e, 0x99, 0x75, 0xdb, 0x3c, 0x5f, 0x9a, 0x8c, 197 + 0xbb, 0x19, 0x5c, 0x0e, 0x93, 0x19, 0xf8, 0x6a, 198 + 0xbc, 0xf2, 0x12, 0x54, 0x2f, 0xcb, 0x28, 0x64, 199 + 0x88, 0xb3, 0x92, 0x0d, 0x96, 0xd1, 0xa6, 0xe4, 200 + 0x1f, 0xf1, 0x4d, 0xa4, 0xab, 0x1c, 0xee, 0x54, 201 + 0xf2, 0xad, 0x29, 0x6d, 0x32, 0x37, 0xb2, 0x16, 202 + 0x77, 0x5c, 0xdc, 0x2e, 0x54, 0xec, 0x75, 0x26, 203 + 0xc6, 0x36, 0xd9, 0x17, 0x2c, 0xf1, 0x7a, 0xdc, 204 + 0x4b, 0xf1, 0xe2, 0xd9, 0x95, 0xba, 0xac, 0x87, 205 + 0xc1, 0xf3, 0x8e, 0x58, 0x08, 0xd8, 0x87, 0x60, 206 + 0xc9, 0xee, 0x6a, 0xde, 0xa4, 0xd2, 0xfc, 0x0d, 207 + 0xe5, 0x36, 0xc4, 0x5c, 0x52, 0xb3, 0x07, 0x54, 208 + 0x65, 0x24, 0xc1, 0xb1, 0xd1, 0xb1, 0x53, 0x13, 209 + 0x31, 0x79, 0x7f, 0x05, 0x76, 0xeb, 0x37, 0x59, 210 + 0x15, 0x2b, 0xd1, 0x3f, 0xac, 0x08, 0x97, 0xeb, 211 + 0x91, 0x98, 0xdf, 0x6c, 0x09, 0x0d, 0x04, 0x9f, 212 + 0xdc, 0x3b, 0x0e, 0x60, 0x68, 0x47, 0x23, 0x15, 213 + 0x16, 0xc6, 0x0b, 0x35, 0xf8, 0x77, 0xa2, 0x78, 214 + 0x50, 0xd4, 0x64, 0x22, 0x33, 0xff, 0xfb, 0x93, 215 + 0x71, 0x46, 0x50, 0x39, 0x1b, 0x9c, 0xea, 0x4e, 216 + 0x8d, 0x0c, 0x37, 0xe5, 0x5c, 0x51, 0x3a, 0x31, 217 + 0xb2, 0x85, 0x84, 0x3f, 0x41, 0xee, 0xa2, 0xc1, 218 + 0xc6, 0x13, 0x3b, 0x54, 0x28, 0xd2, 0x18, 0x37, 219 + 0xcc, 0x46, 0x9f, 0x6a, 0x91, 0x3d, 0x5a, 0x15, 220 + 0x3c, 0x89, 0xa3, 0x61, 0x06, 0x7d, 0x2e, 0x78, 221 + 0xbe, 0x7d, 0x40, 0xba, 0x2f, 0x95, 0xb1, 0x2f, 222 + 0x87, 0x3b, 0x8a, 0xbe, 0x6a, 0xf4, 0xc2, 0x31, 223 + 0x74, 0xee, 0x91, 0xe0, 0x23, 0xaa, 0x5d, 0x7f, 224 + 0xdd, 0xf0, 0x44, 0x8c, 0x0b, 0x59, 0x2b, 0xfc, 225 + 0x48, 0x3a, 0xdf, 0x07, 0x05, 0x38, 0x6c, 0xc9, 226 + 0xeb, 0x18, 0x24, 0x68, 0x8d, 0x58, 0x98, 0xd3, 227 + 0x31, 0xa3, 0xe4, 0x70, 0x59, 0xb1, 0x21, 0xbe, 228 + 0x7e, 0x65, 0x7d, 0xb8, 0x04, 0xab, 0xf6, 0xe4, 229 + 0xd7, 0xda, 0xec, 0x09, 0x8f, 0xda, 0x6d, 0x24, 230 + 0x07, 0xcc, 0x29, 0x17, 0x05, 0x78, 0x1a, 0xc1, 231 + 0xb1, 0xce, 0xfc, 0xaa, 0x2d, 0xe7, 0xcc, 0x85, 232 + 0x84, 0x84, 0x03, 0x2a, 0x0c, 0x3f, 0xa9, 0xf8, 233 + 0xfd, 0x84, 0x53, 0x59, 0x5c, 0xf0, 0xd4, 0x09, 234 + 0xf0, 0xd2, 0x6c, 0x32, 0x03, 0xb0, 0xa0, 0x8c, 235 + 0x52, 0xeb, 0x23, 0x91, 0x88, 0x43, 0x13, 0x46, 236 + 0xf6, 0x1e, 0xb4, 0x1b, 0xf5, 0x8e, 0x3a, 0xb5, 237 + 0x3d, 0x00, 0xf6, 0xe5, 0x08, 0x3d, 0x5f, 0x39, 238 + 0xd3, 0x21, 0x69, 0xbc, 0x03, 0x22, 0x3a, 0xd2, 239 + 0x5c, 0x84, 0xf8, 0x15, 0xc4, 0x80, 0x0b, 0xbc, 240 + 0x29, 0x3c, 0xf3, 0x95, 0x98, 0xcd, 0x8f, 0x35, 241 + 0xbc, 0xa5, 0x3e, 0xfc, 0xd4, 0x13, 0x9e, 0xde, 242 + 0x4f, 0xce, 0x71, 0x9d, 0x09, 0xad, 0xf2, 0x80, 243 + 0x6b, 0x65, 0x7f, 0x03, 0x00, 0x14, 0x7c, 0x15, 244 + 0x85, 0x40, 0x6d, 0x70, 0xea, 0xdc, 0xb3, 0x63, 245 + 0x35, 0x4f, 0x4d, 0xe0, 0xd9, 0xd5, 0x3c, 0x58, 246 + 0x56, 0x23, 0x80, 0xe2, 0x36, 0xdd, 0x75, 0x1d, 247 + 0x94, 0x11, 0x41, 0x8e, 0xe0, 0x81, 0x8e, 0xcf, 248 + 0xe0, 0xe5, 0xf6, 0xde, 0xd1, 0xe7, 0x04, 0x12, 249 + 0x79, 0x92, 0x2b, 0x71, 0x2a, 0x79, 0x8b, 0x7c, 250 + 0x44, 0x79, 0x16, 0x30, 0x4e, 0xf4, 0xf6, 0x9b, 251 + 0xb7, 0x40, 0xa3, 0x5a, 0xa7, 0x69, 0x3e, 0xc1, 252 + 0x3a, 0x04, 0xd0, 0x88, 0xa0, 0x3b, 0xdd, 0xc6, 253 + 0x9e, 0x7e, 0x1e, 0x1e, 0x8f, 0x44, 0xf7, 0x73, 254 + 0x67, 0x1e, 0x1a, 0x78, 0xfa, 0x62, 0xf4, 0xa9, 255 + 0xa8, 0xc6, 0x5b, 0xb8, 0xfa, 0x06, 0x7d, 0x5e, 256 + 0x38, 0x1c, 0x9a, 0x39, 0xe9, 0x39, 0x98, 0x22, 257 + 0x0b, 0xa7, 0xac, 0x0b, 0xf3, 0xbc, 0xf1, 0xeb, 258 + 0x8c, 0x81, 0xe3, 0x48, 0x8a, 0xed, 0x42, 0xc2, 259 + 0x38, 0xcf, 0x3e, 0xda, 0xd2, 0x89, 0x8d, 0x9c, 260 + 0x53, 0xb5, 0x2f, 0x41, 0x01, 0x26, 0x84, 0x9c, 261 + 0xa3, 0x56, 0xf6, 0x49, 0xc7, 0xd4, 0x9f, 0x93, 262 + 0x1b, 0x96, 0x49, 0x5e, 0xad, 0xb3, 0x84, 0x1f, 263 + 0x3c, 0xa4, 0xe0, 0x9b, 0xd1, 0x90, 0xbc, 0x38, 264 + 0x6c, 0xdd, 0x95, 0x4d, 0x9d, 0xb1, 0x71, 0x57, 265 + 0x2d, 0x34, 0xe8, 0xb8, 0x42, 0xc7, 0x99, 0x03, 266 + 0xc7, 0x07, 0x30, 0x65, 0x91, 0x55, 0xd5, 0x90, 267 + 0x70, 0x97, 0x37, 0x68, 0xd4, 0x11, 0xf9, 0xe8, 268 + 0xce, 0xec, 0xdc, 0x34, 0xd5, 0xd3, 0xb7, 0xc4, 269 + 0xb8, 0x97, 0x05, 0x92, 0xad, 0xf8, 0xe2, 0x36, 270 + 0x64, 0x41, 0xc9, 0xc5, 0x41, 0x77, 0x52, 0xd7, 271 + 0x2c, 0xa5, 0x24, 0x2f, 0xd9, 0x34, 0x0b, 0x47, 272 + 0x35, 0xa7, 0x28, 0x8b, 0xc5, 0xcd, 0xe9, 0x46, 273 + 0xac, 0x39, 0x94, 0x3c, 0x10, 0xc6, 0x29, 0x73, 274 + 0x0e, 0x0e, 0x5d, 0xe0, 0x71, 0x03, 0x8a, 0x72, 275 + 0x0e, 0x26, 0xb0, 0x7d, 0x84, 0xed, 0x95, 0x23, 276 + 0x49, 0x5a, 0x45, 0x83, 0x45, 0x60, 0x11, 0x4a, 277 + 0x46, 0x31, 0xd4, 0xd8, 0x16, 0x54, 0x98, 0x58, 278 + 0xed, 0x6d, 0xcc, 0x5d, 0xd6, 0x50, 0x61, 0x9f, 279 + 0x9d, 0xc5, 0x3e, 0x9d, 0x32, 0x47, 0xde, 0x96, 280 + 0xe1, 0x5d, 0xd8, 0xf8, 0xb4, 0x69, 0x6f, 0xb9, 281 + 0x15, 0x90, 0x57, 0x7a, 0xf6, 0xad, 0xb0, 0x5b, 282 + 0xf5, 0xa6, 0x36, 0x94, 0xfd, 0x84, 0xce, 0x1c, 283 + 0x0f, 0x4b, 0xd0, 0xc2, 0x5b, 0x6b, 0x56, 0xef, 284 + 0x73, 0x93, 0x0b, 0xc3, 0xee, 0xd9, 0xcf, 0xd3, 285 + 0xa4, 0x22, 0x58, 0xcd, 0x50, 0x6e, 0x65, 0xf4, 286 + 0xe9, 0xb7, 0x71, 0xaf, 0x4b, 0xb3, 0xb6, 0x2f, 287 + 0x0f, 0x0e, 0x3b, 0xc9, 0x85, 0x14, 0xf5, 0x17, 288 + 0xe8, 0x7a, 0x3a, 0xbf, 0x5f, 0x5e, 0xf8, 0x18, 289 + 0x48, 0xa6, 0x72, 0xab, 0x06, 0x95, 0xe9, 0xc8, 290 + 0xa7, 0xf4, 0x32, 0x44, 0x04, 0x0c, 0x84, 0x98, 291 + 0x73, 0xe3, 0x89, 0x8d, 0x5f, 0x7e, 0x4a, 0x42, 292 + 0x8f, 0xc5, 0x28, 0xb1, 0x82, 0xef, 0x1c, 0x97, 293 + 0x31, 0x3b, 0x4d, 0xe0, 0x0e, 0x10, 0x10, 0x97, 294 + 0x93, 0x49, 0x78, 0x2f, 0x0d, 0x86, 0x8b, 0xa1, 295 + 0x53, 0xa9, 0x81, 0x20, 0x79, 0xe7, 0x07, 0x77, 296 + 0xb6, 0xac, 0x5e, 0xd2, 0x05, 0xcd, 0xe9, 0xdb, 297 + 0x8a, 0x94, 0x82, 0x8a, 0x23, 0xb9, 0x3d, 0x1c, 298 + 0xa9, 0x7d, 0x72, 0x4a, 0xed, 0x33, 0xa3, 0xdb, 299 + 0x21, 0xa7, 0x86, 0x33, 0x45, 0xa5, 0xaa, 0x56, 300 + 0x45, 0xb5, 0x83, 0x29, 0x40, 0x47, 0x79, 0x04, 301 + 0x6e, 0xb9, 0x95, 0xd0, 0x81, 0x77, 0x2d, 0x48, 302 + 0x1e, 0xfe, 0xc3, 0xc2, 0x1e, 0xe5, 0xf2, 0xbe, 303 + 0xfd, 0x3b, 0x94, 0x9f, 0xc4, 0xc4, 0x26, 0x9d, 304 + 0xe4, 0x66, 0x1e, 0x19, 0xee, 0x6c, 0x79, 0x97, 305 + 0x11, 0x31, 0x4b, 0x0d, 0x01, 0xcb, 0xde, 0xa8, 306 + 0xf6, 0x6d, 0x7c, 0x39, 0x46, 0x4e, 0x7e, 0x3f, 307 + 0x94, 0x17, 0xdf, 0xa1, 0x7d, 0xd9, 0x1c, 0x8e, 308 + 0xbc, 0x7d, 0x33, 0x7d, 0xe3, 0x12, 0x40, 0xca, 309 + 0xab, 0x37, 0x11, 0x46, 0xd4, 0xae, 0xef, 0x44, 310 + 0xa2, 0xb3, 0x6a, 0x66, 0x0e, 0x0c, 0x90, 0x7f, 311 + 0xdf, 0x5c, 0x66, 0x5f, 0xf2, 0x94, 0x9f, 0xa6, 312 + 0x73, 0x4f, 0xeb, 0x0d, 0xad, 0xbf, 0xc0, 0x63, 313 + 0x5c, 0xdc, 0x46, 0x51, 0xe8, 0x8e, 0x90, 0x19, 314 + 0xa8, 0xa4, 0x3c, 0x91, 0x79, 0xfa, 0x7e, 0x58, 315 + 0x85, 0x13, 0x55, 0xc5, 0x19, 0x82, 0x37, 0x1b, 316 + 0x0a, 0x02, 0x1f, 0x99, 0x6b, 0x18, 0xf1, 0x28, 317 + 0x08, 0xa2, 0x73, 0xb8, 0x0f, 0x2e, 0xcd, 0xbf, 318 + 0xf3, 0x86, 0x7f, 0xea, 0xef, 0xd0, 0xbb, 0xa6, 319 + 0x21, 0xdf, 0x49, 0x73, 0x51, 0xcc, 0x36, 0xd3, 320 + 0x3e, 0xa0, 0xf8, 0x44, 0xdf, 0xd3, 0xa6, 0xbe, 321 + 0x8a, 0xd4, 0x57, 0xdd, 0x72, 0x94, 0x61, 0x0f, 322 + 0x82, 0xd1, 0x07, 0xb8, 0x7c, 0x18, 0x83, 0xdf, 323 + 0x3a, 0xe5, 0x50, 0x6a, 0x82, 0x20, 0xac, 0xa9, 324 + 0xa8, 0xff, 0xd9, 0xf3, 0x77, 0x33, 0x5a, 0x9e, 325 + 0x7f, 0x6d, 0xfe, 0x5d, 0x33, 0x41, 0x42, 0xe7, 326 + 0x6c, 0x19, 0xe0, 0x44, 0x8a, 0x15, 0xf6, 0x70, 327 + 0x98, 0xb7, 0x68, 0x4d, 0xfa, 0x97, 0x39, 0xb0, 328 + 0x8e, 0xe8, 0x84, 0x8b, 0x75, 0x30, 0xb7, 0x7d, 329 + 0x92, 0x69, 0x20, 0x9c, 0x81, 0xfb, 0x4b, 0xf4, 330 + 0x01, 0x50, 0xeb, 0xce, 0x0c, 0x1c, 0x6c, 0xb5, 331 + 0x4a, 0xd7, 0x27, 0x0c, 0xce, 0xbb, 0xe5, 0x85, 332 + 0xf0, 0xb6, 0xee, 0xd5, 0x70, 0xdd, 0x3b, 0xfc, 333 + 0xd4, 0x99, 0xf1, 0x33, 0xdd, 0x8b, 0xc4, 0x2f, 334 + 0xae, 0xab, 0x74, 0x96, 0x32, 0xc7, 0x4c, 0x56, 335 + 0x3c, 0x89, 0x0f, 0x96, 0x0b, 0x42, 0xc0, 0xcb, 336 + 0xee, 0x0f, 0x0b, 0x8c, 0xfb, 0x7e, 0x47, 0x7b, 337 + 0x64, 0x48, 0xfd, 0xb2, 0x00, 0x80, 0x89, 0xa5, 338 + 0x13, 0x55, 0x62, 0xfc, 0x8f, 0xe2, 0x42, 0x03, 339 + 0xb7, 0x4e, 0x2a, 0x79, 0xb4, 0x82, 0xea, 0x23, 340 + 0x49, 0xda, 0xaf, 0x52, 0x63, 0x1e, 0x60, 0x03, 341 + 0x89, 0x06, 0x44, 0x46, 0x08, 0xc3, 0xc4, 0x87, 342 + 0x70, 0x2e, 0xda, 0x94, 0xad, 0x6b, 0xe0, 0xe4, 343 + 0xd1, 0x8a, 0x06, 0xc2, 0xa8, 0xc0, 0xa7, 0x43, 344 + 0x3c, 0x47, 0x52, 0x0e, 0xc3, 0x77, 0x81, 0x11, 345 + 0x67, 0x0e, 0xa0, 0x70, 0x04, 0x47, 0x29, 0x40, 346 + 0x86, 0x0d, 0x34, 0x56, 0xa7, 0xc9, 0x35, 0x59, 347 + 0x68, 0xdc, 0x93, 0x81, 0x70, 0xee, 0x86, 0xd9, 348 + 0x80, 0x06, 0x40, 0x4f, 0x1a, 0x0d, 0x40, 0x30, 349 + 0x0b, 0xcb, 0x96, 0x47, 0xc1, 0xb7, 0x52, 0xfd, 350 + 0x56, 0xe0, 0x72, 0x4b, 0xfb, 0xbd, 0x92, 0x45, 351 + 0x61, 0x71, 0xc2, 0x33, 0x11, 0xbf, 0x52, 0x83, 352 + 0x79, 0x26, 0xe0, 0x49, 0x6b, 0xb7, 0x05, 0x8b, 353 + 0xe8, 0x0e, 0x87, 0x31, 0xd7, 0x9d, 0x8a, 0xf5, 354 + 0xc0, 0x5f, 0x2e, 0x58, 0x4a, 0xdb, 0x11, 0xb3, 355 + 0x6c, 0x30, 0x2a, 0x46, 0x19, 0xe3, 0x27, 0x84, 356 + 0x1f, 0x63, 0x6e, 0xf6, 0x57, 0xc7, 0xc9, 0xd8, 357 + 0x5e, 0xba, 0xb3, 0x87, 0xd5, 0x83, 0x26, 0x34, 358 + 0x21, 0x9e, 0x65, 0xde, 0x42, 0xd3, 0xbe, 0x7b, 359 + 0xbc, 0x91, 0x71, 0x44, 0x4d, 0x99, 0x3b, 0x31, 360 + 0xe5, 0x3f, 0x11, 0x4e, 0x7f, 0x13, 0x51, 0x3b, 361 + 0xae, 0x79, 0xc9, 0xd3, 0x81, 0x8e, 0x25, 0x40, 362 + 0x10, 0xfc, 0x07, 0x1e, 0xf9, 0x7b, 0x9a, 0x4b, 363 + 0x6c, 0xe3, 0xb3, 0xad, 0x1a, 0x0a, 0xdd, 0x9e, 364 + 0x59, 0x0c, 0xa2, 0xcd, 0xae, 0x48, 0x4a, 0x38, 365 + 0x5b, 0x47, 0x41, 0x94, 0x65, 0x6b, 0xbb, 0xeb, 366 + 0x5b, 0xe3, 0xaf, 0x07, 0x5b, 0xd4, 0x4a, 0xa2, 367 + 0xc9, 0x5d, 0x2f, 0x64, 0x03, 0xd7, 0x3a, 0x2c, 368 + 0x6e, 0xce, 0x76, 0x95, 0xb4, 0xb3, 0xc0, 0xf1, 369 + 0xe2, 0x45, 0x73, 0x7a, 0x5c, 0xab, 0xc1, 0xfc, 370 + 0x02, 0x8d, 0x81, 0x29, 0xb3, 0xac, 0x07, 0xec, 371 + 0x40, 0x7d, 0x45, 0xd9, 0x7a, 0x59, 0xee, 0x34, 372 + 0xf0, 0xe9, 0xd5, 0x7b, 0x96, 0xb1, 0x3d, 0x95, 373 + 0xcc, 0x86, 0xb5, 0xb6, 0x04, 0x2d, 0xb5, 0x92, 374 + 0x7e, 0x76, 0xf4, 0x06, 0xa9, 0xa3, 0x12, 0x0f, 375 + 0xb1, 0xaf, 0x26, 0xba, 0x7c, 0xfc, 0x7e, 0x1c, 376 + 0xbc, 0x2c, 0x49, 0x97, 0x53, 0x60, 0x13, 0x0b, 377 + 0xa6, 0x61, 0x83, 0x89, 0x42, 0xd4, 0x17, 0x0c, 378 + 0x6c, 0x26, 0x52, 0xc3, 0xb3, 0xd4, 0x67, 0xf5, 379 + 0xe3, 0x04, 0xb7, 0xf4, 0xcb, 0x80, 0xb8, 0xcb, 380 + 0x77, 0x56, 0x3e, 0xaa, 0x57, 0x54, 0xee, 0xb4, 381 + 0x2c, 0x67, 0xcf, 0xf2, 0xdc, 0xbe, 0x55, 0xf9, 382 + 0x43, 0x1f, 0x6e, 0x22, 0x97, 0x67, 0x7f, 0xc4, 383 + 0xef, 0xb1, 0x26, 0x31, 0x1e, 0x27, 0xdf, 0x41, 384 + 0x80, 0x47, 0x6c, 0xe2, 0xfa, 0xa9, 0x8c, 0x2a, 385 + 0xf6, 0xf2, 0xab, 0xf0, 0x15, 0xda, 0x6c, 0xc8, 386 + 0xfe, 0xb5, 0x23, 0xde, 0xa9, 0x05, 0x3f, 0x06, 387 + 0x54, 0x4c, 0xcd, 0xe1, 0xab, 0xfc, 0x0e, 0x62, 388 + 0x33, 0x31, 0x73, 0x2c, 0x76, 0xcb, 0xb4, 0x47, 389 + 0x1e, 0x20, 0xad, 0xd8, 0xf2, 0x31, 0xdd, 0xc4, 390 + 0x8b, 0x0c, 0x77, 0xbe, 0xe1, 0x8b, 0x26, 0x00, 391 + 0x02, 0x58, 0xd6, 0x8d, 0xef, 0xad, 0x74, 0x67, 392 + 0xab, 0x3f, 0xef, 0xcb, 0x6f, 0xb0, 0xcc, 0x81, 393 + 0x44, 0x4c, 0xaf, 0xe9, 0x49, 0x4f, 0xdb, 0xa0, 394 + 0x25, 0xa4, 0xf0, 0x89, 0xf1, 0xbe, 0xd8, 0x10, 395 + 0xff, 0xb1, 0x3b, 0x4b, 0xfa, 0x98, 0xf5, 0x79, 396 + 0x6d, 0x1e, 0x69, 0x4d, 0x57, 0xb1, 0xc8, 0x19, 397 + 0x1b, 0xbd, 0x1e, 0x8c, 0x84, 0xb7, 0x7b, 0xe8, 398 + 0xd2, 0x2d, 0x09, 0x41, 0x41, 0x37, 0x3d, 0xb1, 399 + 0x6f, 0x26, 0x5d, 0x71, 0x16, 0x3d, 0xb7, 0x83, 400 + 0x27, 0x2c, 0xa7, 0xb6, 0x50, 0xbd, 0x91, 0x86, 401 + 0xab, 0x24, 0xa1, 0x38, 0xfd, 0xea, 0x71, 0x55, 402 + 0x7e, 0x9a, 0x07, 0x77, 0x4b, 0xfa, 0x61, 0x66, 403 + 0x20, 0x1e, 0x28, 0x95, 0x18, 0x1b, 0xa4, 0xa0, 404 + 0xfd, 0xc0, 0x89, 0x72, 0x43, 0xd9, 0x3b, 0x49, 405 + 0x5a, 0x3f, 0x9d, 0xbf, 0xdb, 0xb4, 0x46, 0xea, 406 + 0x42, 0x01, 0x77, 0x23, 0x68, 0x95, 0xb6, 0x24, 407 + 0xb3, 0xa8, 0x6c, 0x28, 0x3b, 0x11, 0x40, 0x7e, 408 + 0x18, 0x65, 0x6d, 0xd8, 0x24, 0x42, 0x7d, 0x88, 409 + 0xc0, 0x52, 0xd9, 0x05, 0xe4, 0x95, 0x90, 0x87, 410 + 0x8c, 0xf4, 0xd0, 0x6b, 0xb9, 0x83, 0x99, 0x34, 411 + 0x6d, 0xfe, 0x54, 0x40, 0x94, 0x52, 0x21, 0x4f, 412 + 0x14, 0x25, 0xc5, 0xd6, 0x5e, 0x95, 0xdc, 0x0a, 413 + 0x2b, 0x89, 0x20, 0x11, 0x84, 0x48, 0xd6, 0x3a, 414 + 0xcd, 0x5c, 0x24, 0xad, 0x62, 0xe3, 0xb1, 0x93, 415 + 0x25, 0x8d, 0xcd, 0x7e, 0xfc, 0x27, 0xa3, 0x37, 416 + 0xfd, 0x84, 0xfc, 0x1b, 0xb2, 0xf1, 0x27, 0x38, 417 + 0x5a, 0xb7, 0xfc, 0xf2, 0xfa, 0x95, 0x66, 0xd4, 418 + 0xfb, 0xba, 0xa7, 0xd7, 0xa3, 0x72, 0x69, 0x48, 419 + 0x48, 0x8c, 0xeb, 0x28, 0x89, 0xfe, 0x33, 0x65, 420 + 0x5a, 0x36, 0x01, 0x7e, 0x06, 0x79, 0x0a, 0x09, 421 + 0x3b, 0x74, 0x11, 0x9a, 0x6e, 0xbf, 0xd4, 0x9e, 422 + 0x58, 0x90, 0x49, 0x4f, 0x4d, 0x08, 0xd4, 0xe5, 423 + 0x4a, 0x09, 0x21, 0xef, 0x8b, 0xb8, 0x74, 0x3b, 424 + 0x91, 0xdd, 0x36, 0x85, 0x60, 0x2d, 0xfa, 0xd4, 425 + 0x45, 0x7b, 0x45, 0x53, 0xf5, 0x47, 0x87, 0x7e, 426 + 0xa6, 0x37, 0xc8, 0x78, 0x7a, 0x68, 0x9d, 0x8d, 427 + 0x65, 0x2c, 0x0e, 0x91, 0x5c, 0xa2, 0x60, 0xf0, 428 + 0x8e, 0x3f, 0xe9, 0x1a, 0xcd, 0xaa, 0xe7, 0xd5, 429 + 0x77, 0x18, 0xaf, 0xc9, 0xbc, 0x18, 0xea, 0x48, 430 + 0x1b, 0xfb, 0x22, 0x48, 0x70, 0x16, 0x29, 0x9e, 431 + 0x5b, 0xc1, 0x2c, 0x66, 0x23, 0xbc, 0xf0, 0x1f, 432 + 0xef, 0xaf, 0xe4, 0xd6, 0x04, 0x19, 0x82, 0x7a, 433 + 0x0b, 0xba, 0x4b, 0x46, 0xb1, 0x6a, 0x85, 0x5d, 434 + 0xb4, 0x73, 0xd6, 0x21, 0xa1, 0x71, 0x60, 0x14, 435 + 0xee, 0x0a, 0x77, 0xc4, 0x66, 0x2e, 0xf9, 0x69, 436 + 0x30, 0xaf, 0x41, 0x0b, 0xc8, 0x83, 0x3c, 0x53, 437 + 0x99, 0x19, 0x27, 0x46, 0xf7, 0x41, 0x6e, 0x56, 438 + 0xdc, 0x94, 0x28, 0x67, 0x4e, 0xb7, 0x25, 0x48, 439 + 0x8a, 0xc2, 0xe0, 0x60, 0x96, 0xcc, 0x18, 0xf4, 440 + 0x84, 0xdd, 0xa7, 0x5e, 0x3e, 0x05, 0x0b, 0x26, 441 + 0x26, 0xb2, 0x5c, 0x1f, 0x57, 0x1a, 0x04, 0x7e, 442 + 0x6a, 0xe3, 0x2f, 0xb4, 0x35, 0xb6, 0x38, 0x40, 443 + 0x40, 0xcd, 0x6f, 0x87, 0x2e, 0xef, 0xa3, 0xd7, 444 + 0xa9, 0xc2, 0xe8, 0x0d, 0x27, 0xdf, 0x44, 0x62, 445 + 0x99, 0xa0, 0xfc, 0xcf, 0x81, 0x78, 0xcb, 0xfe, 446 + 0xe5, 0xa0, 0x03, 0x4e, 0x6c, 0xd7, 0xf4, 0xaf, 447 + 0x7a, 0xbb, 0x61, 0x82, 0xfe, 0x71, 0x89, 0xb2, 448 + 0x22, 0x7c, 0x8e, 0x83, 0x04, 0xce, 0xf6, 0x5d, 449 + 0x84, 0x8f, 0x95, 0x6a, 0x7f, 0xad, 0xfd, 0x32, 450 + 0x9c, 0x5e, 0xe4, 0x9c, 0x89, 0x60, 0x54, 0xaa, 451 + 0x96, 0x72, 0xd2, 0xd7, 0x36, 0x85, 0xa9, 0x45, 452 + 0xd2, 0x2a, 0xa1, 0x81, 0x49, 0x6f, 0x7e, 0x04, 453 + 0xfa, 0xe2, 0xfe, 0x90, 0x26, 0x77, 0x5a, 0x33, 454 + 0xb8, 0x04, 0x9a, 0x7a, 0xe6, 0x4c, 0x4f, 0xad, 455 + 0x72, 0x96, 0x08, 0x28, 0x58, 0x13, 0xf8, 0xc4, 456 + 0x1c, 0xf0, 0xc3, 0x45, 0x95, 0x49, 0x20, 0x8c, 457 + 0x9f, 0x39, 0x70, 0xe1, 0x77, 0xfe, 0xd5, 0x4b, 458 + 0xaf, 0x86, 0xda, 0xef, 0x22, 0x06, 0x83, 0x36, 459 + 0x29, 0x12, 0x11, 0x40, 0xbc, 0x3b, 0x86, 0xaa, 460 + 0xaa, 0x65, 0x60, 0xc3, 0x80, 0xca, 0xed, 0xa9, 461 + 0xf3, 0xb0, 0x79, 0x96, 0xa2, 0x55, 0x27, 0x28, 462 + 0x55, 0x73, 0x26, 0xa5, 0x50, 0xea, 0x92, 0x4b, 463 + 0x3c, 0x5c, 0x82, 0x33, 0xf0, 0x01, 0x3f, 0x03, 464 + 0xc1, 0x08, 0x05, 0xbf, 0x98, 0xf4, 0x9b, 0x6d, 465 + 0xa5, 0xa8, 0xb4, 0x82, 0x0c, 0x06, 0xfa, 0xff, 466 + 0x2d, 0x08, 0xf3, 0x05, 0x4f, 0x57, 0x2a, 0x39, 467 + 0xd4, 0x83, 0x0d, 0x75, 0x51, 0xd8, 0x5b, 0x1b, 468 + 0xd3, 0x51, 0x5a, 0x32, 0x2a, 0x9b, 0x32, 0xb2, 469 + 0xf2, 0xa4, 0x96, 0x12, 0xf2, 0xae, 0x40, 0x34, 470 + 0x67, 0xa8, 0xf5, 0x44, 0xd5, 0x35, 0x53, 0xfe, 471 + 0xa3, 0x60, 0x96, 0x63, 0x0f, 0x1f, 0x6e, 0xb0, 472 + 0x5a, 0x42, 0xa6, 0xfc, 0x51, 0x0b, 0x60, 0x27, 473 + 0xbc, 0x06, 0x71, 0xed, 0x65, 0x5b, 0x23, 0x86, 474 + 0x4a, 0x07, 0x3b, 0x22, 0x07, 0x46, 0xe6, 0x90, 475 + 0x3e, 0xf3, 0x25, 0x50, 0x1b, 0x4c, 0x7f, 0x03, 476 + 0x08, 0xa8, 0x36, 0x6b, 0x87, 0xe5, 0xe3, 0xdb, 477 + 0x9a, 0x38, 0x83, 0xff, 0x9f, 0x1a, 0x9f, 0x57, 478 + 0xa4, 0x2a, 0xf6, 0x37, 0xbc, 0x1a, 0xff, 0xc9, 479 + 0x1e, 0x35, 0x0c, 0xc3, 0x7c, 0xa3, 0xb2, 0xe5, 480 + 0xd2, 0xc6, 0xb4, 0x57, 0x47, 0xe4, 0x32, 0x16, 481 + 0x6d, 0xa9, 0xae, 0x64, 0xe6, 0x2d, 0x8d, 0xc5, 482 + 0x8d, 0x50, 0x8e, 0xe8, 0x1a, 0x22, 0x34, 0x2a, 483 + 0xd9, 0xeb, 0x51, 0x90, 0x4a, 0xb1, 0x41, 0x7d, 484 + 0x64, 0xf9, 0xb9, 0x0d, 0xf6, 0x23, 0x33, 0xb0, 485 + 0x33, 0xf4, 0xf7, 0x3f, 0x27, 0x84, 0xc6, 0x0f, 486 + 0x54, 0xa5, 0xc0, 0x2e, 0xec, 0x0b, 0x3a, 0x48, 487 + 0x6e, 0x80, 0x35, 0x81, 0x43, 0x9b, 0x90, 0xb1, 488 + 0xd0, 0x2b, 0xea, 0x21, 0xdc, 0xda, 0x5b, 0x09, 489 + 0xf4, 0xcc, 0x10, 0xb4, 0xc7, 0xfe, 0x79, 0x51, 490 + 0xc3, 0xc5, 0xac, 0x88, 0x74, 0x84, 0x0b, 0x4b, 491 + 0xca, 0x79, 0x16, 0x29, 0xfb, 0x69, 0x54, 0xdf, 492 + 0x41, 0x7e, 0xe9, 0xc7, 0x8e, 0xea, 0xa5, 0xfe, 493 + 0xfc, 0x76, 0x0e, 0x90, 0xc4, 0x92, 0x38, 0xad, 494 + 0x7b, 0x48, 0xe6, 0x6e, 0xf7, 0x21, 0xfd, 0x4e, 495 + 0x93, 0x0a, 0x7b, 0x41, 0x83, 0x68, 0xfb, 0x57, 496 + 0x51, 0x76, 0x34, 0xa9, 0x6c, 0x00, 0xaa, 0x4f, 497 + 0x66, 0x65, 0x98, 0x4a, 0x4f, 0xa3, 0xa0, 0xef, 498 + 0x69, 0x3f, 0xe3, 0x1c, 0x92, 0x8c, 0xfd, 0xd8, 499 + 0xe8, 0xde, 0x7c, 0x7f, 0x3e, 0x84, 0x8e, 0x69, 500 + 0x3c, 0xf1, 0xf2, 0x05, 0x46, 0xdc, 0x2f, 0x9d, 501 + 0x5e, 0x6e, 0x4c, 0xfb, 0xb5, 0x99, 0x2a, 0x59, 502 + 0x63, 0xc1, 0x34, 0xbc, 0x57, 0xc0, 0x0d, 0xb9, 503 + 0x61, 0x25, 0xf3, 0x33, 0x23, 0x51, 0xb6, 0x0d, 504 + 0x07, 0xa6, 0xab, 0x94, 0x4a, 0xb7, 0x2a, 0xea, 505 + 0xee, 0xac, 0xa3, 0xc3, 0x04, 0x8b, 0x0e, 0x56, 506 + 0xfe, 0x44, 0xa7, 0x39, 0xe2, 0xed, 0xed, 0xb4, 507 + 0x22, 0x2b, 0xac, 0x12, 0x32, 0x28, 0x91, 0xd8, 508 + 0xa5, 0xab, 0xff, 0x5f, 0xe0, 0x4b, 0xda, 0x78, 509 + 0x17, 0xda, 0xf1, 0x01, 0x5b, 0xcd, 0xe2, 0x5f, 510 + 0x50, 0x45, 0x73, 0x2b, 0xe4, 0x76, 0x77, 0xf4, 511 + 0x64, 0x1d, 0x43, 0xfb, 0x84, 0x7a, 0xea, 0x91, 512 + 0xae, 0xf9, 0x9e, 0xb7, 0xb4, 0xb0, 0x91, 0x5f, 513 + 0x16, 0x35, 0x9a, 0x11, 0xb8, 0xc7, 0xc1, 0x8c, 514 + 0xc6, 0x10, 0x8d, 0x2f, 0x63, 0x4a, 0xa7, 0x57, 515 + 0x3a, 0x51, 0xd6, 0x32, 0x2d, 0x64, 0x72, 0xd4, 516 + 0x66, 0xdc, 0x10, 0xa6, 0x67, 0xd6, 0x04, 0x23, 517 + 0x9d, 0x0a, 0x11, 0x77, 0xdd, 0x37, 0x94, 0x17, 518 + 0x3c, 0xbf, 0x8b, 0x65, 0xb0, 0x2e, 0x5e, 0x66, 519 + 0x47, 0x64, 0xac, 0xdd, 0xf0, 0x84, 0xfd, 0x39, 520 + 0xfa, 0x15, 0x5d, 0xef, 0xae, 0xca, 0xc1, 0x36, 521 + 0xa7, 0x5c, 0xbf, 0xc7, 0x08, 0xc2, 0x66, 0x00, 522 + 0x74, 0x74, 0x4e, 0x27, 0x3f, 0x55, 0x8a, 0xb7, 523 + 0x38, 0x66, 0x83, 0x6d, 0xcf, 0x99, 0x9e, 0x60, 524 + 0x8f, 0xdd, 0x2e, 0x62, 0x22, 0x0e, 0xef, 0x0c, 525 + 0x98, 0xa7, 0x85, 0x74, 0x3b, 0x9d, 0xec, 0x9e, 526 + 0xa9, 0x19, 0x72, 0xa5, 0x7f, 0x2c, 0x39, 0xb7, 527 + 0x7d, 0xb7, 0xf1, 0x12, 0x65, 0x27, 0x4b, 0x5a, 528 + 0xde, 0x17, 0xfe, 0xad, 0x44, 0xf3, 0x20, 0x4d, 529 + 0xfd, 0xe4, 0x1f, 0xb5, 0x81, 0xb0, 0x36, 0x37, 530 + 0x08, 0x6f, 0xc3, 0x0c, 0xe9, 0x85, 0x98, 0x82, 531 + 0xa9, 0x62, 0x0c, 0xc4, 0x97, 0xc0, 0x50, 0xc8, 532 + 0xa7, 0x3c, 0x50, 0x9f, 0x43, 0xb9, 0xcd, 0x5e, 533 + 0x4d, 0xfa, 0x1c, 0x4b, 0x0b, 0xa9, 0x98, 0x85, 534 + 0x38, 0x92, 0xac, 0x8d, 0xe4, 0xad, 0x9b, 0x98, 535 + 0xab, 0xd9, 0x38, 0xac, 0x62, 0x52, 0xa3, 0x22, 536 + 0x63, 0x0f, 0xbf, 0x95, 0x48, 0xdf, 0x69, 0xe7, 537 + 0x8b, 0x33, 0xd5, 0xb2, 0xbd, 0x05, 0x49, 0x49, 538 + 0x9d, 0x57, 0x73, 0x19, 0x33, 0xae, 0xfa, 0x33, 539 + 0xf1, 0x19, 0xa8, 0x80, 0xce, 0x04, 0x9f, 0xbc, 540 + 0x1d, 0x65, 0x82, 0x1b, 0xe5, 0x3a, 0x51, 0xc8, 541 + 0x1c, 0x21, 0xe3, 0x5d, 0xf3, 0x7d, 0x9b, 0x2f, 542 + 0x2c, 0x1d, 0x4a, 0x7f, 0x9b, 0x68, 0x35, 0xa3, 543 + 0xb2, 0x50, 0xf7, 0x62, 0x79, 0xcd, 0xf4, 0x98, 544 + 0x4f, 0xe5, 0x63, 0x7c, 0x3e, 0x45, 0x31, 0x8c, 545 + 0x16, 0xa0, 0x12, 0xc8, 0x58, 0xce, 0x39, 0xa6, 546 + 0xbc, 0x54, 0xdb, 0xc5, 0xe0, 0xd5, 0xba, 0xbc, 547 + 0xb9, 0x04, 0xf4, 0x8d, 0xe8, 0x2f, 0x15, 0x9d, 548 + }; 549 + 550 + /* 100 test cases */ 551 + static struct crc_test { 552 + u32 crc; /* random starting crc */ 553 + u32 start; /* random 6 bit offset in buf */ 554 + u32 length; /* random 11 bit length of test */ 555 + u32 crc_le; /* expected crc32_le result */ 556 + u32 crc_be; /* expected crc32_be result */ 557 + u32 crc32c_le; /* expected crc32c_le result */ 558 + } const test[] __initconst = 559 + { 560 + {0x674bf11d, 0x00000038, 0x00000542, 0x0af6d466, 0xd8b6e4c1, 0xf6e93d6c}, 561 + {0x35c672c6, 0x0000003a, 0x000001aa, 0xc6d3dfba, 0x28aaf3ad, 0x0fe92aca}, 562 + {0x496da28e, 0x00000039, 0x000005af, 0xd933660f, 0x5d57e81f, 0x52e1ebb8}, 563 + {0x09a9b90e, 0x00000027, 0x000001f8, 0xb45fe007, 0xf45fca9a, 0x0798af9a}, 564 + {0xdc97e5a9, 0x00000025, 0x000003b6, 0xf81a3562, 0xe0126ba2, 0x18eb3152}, 565 + {0x47c58900, 0x0000000a, 0x000000b9, 0x8e58eccf, 0xf3afc793, 0xd00d08c7}, 566 + {0x292561e8, 0x0000000c, 0x00000403, 0xa2ba8aaf, 0x0b797aed, 0x8ba966bc}, 567 + {0x415037f6, 0x00000003, 0x00000676, 0xa17d52e8, 0x7f0fdf35, 0x11d694a2}, 568 + {0x3466e707, 0x00000026, 0x00000042, 0x258319be, 0x75c484a2, 0x6ab3208d}, 569 + {0xafd1281b, 0x00000023, 0x000002ee, 0x4428eaf8, 0x06c7ad10, 0xba4603c5}, 570 + {0xd3857b18, 0x00000028, 0x000004a2, 0x5c430821, 0xb062b7cb, 0xe6071c6f}, 571 + {0x1d825a8f, 0x0000002b, 0x0000050b, 0xd2c45f0c, 0xd68634e0, 0x179ec30a}, 572 + {0x5033e3bc, 0x0000000b, 0x00000078, 0xa3ea4113, 0xac6d31fb, 0x0903beb8}, 573 + {0x94f1fb5e, 0x0000000f, 0x000003a2, 0xfbfc50b1, 0x3cfe50ed, 0x6a7cb4fa}, 574 + {0xc9a0fe14, 0x00000009, 0x00000473, 0x5fb61894, 0x87070591, 0xdb535801}, 575 + {0x88a034b1, 0x0000001c, 0x000005ad, 0xc1b16053, 0x46f95c67, 0x92bed597}, 576 + {0xf0f72239, 0x00000020, 0x0000026d, 0xa6fa58f3, 0xf8c2c1dd, 0x192a3f1b}, 577 + {0xcc20a5e3, 0x0000003b, 0x0000067a, 0x7740185a, 0x308b979a, 0xccbaec1a}, 578 + {0xce589c95, 0x0000002b, 0x00000641, 0xd055e987, 0x40aae25b, 0x7eabae4d}, 579 + {0x78edc885, 0x00000035, 0x000005be, 0xa39cb14b, 0x035b0d1f, 0x28c72982}, 580 + {0x9d40a377, 0x0000003b, 0x00000038, 0x1f47ccd2, 0x197fbc9d, 0xc3cd4d18}, 581 + {0x703d0e01, 0x0000003c, 0x000006f1, 0x88735e7c, 0xfed57c5a, 0xbca8f0e7}, 582 + {0x776bf505, 0x0000000f, 0x000005b2, 0x5cc4fc01, 0xf32efb97, 0x713f60b3}, 583 + {0x4a3e7854, 0x00000027, 0x000004b8, 0x8d923c82, 0x0cbfb4a2, 0xebd08fd5}, 584 + {0x209172dd, 0x0000003b, 0x00000356, 0xb89e9c2b, 0xd7868138, 0x64406c59}, 585 + {0x3ba4cc5b, 0x0000002f, 0x00000203, 0xe51601a9, 0x5b2a1032, 0x7421890e}, 586 + {0xfc62f297, 0x00000000, 0x00000079, 0x71a8e1a2, 0x5d88685f, 0xe9347603}, 587 + {0x64280b8b, 0x00000016, 0x000007ab, 0x0fa7a30c, 0xda3a455f, 0x1bef9060}, 588 + {0x97dd724b, 0x00000033, 0x000007ad, 0x5788b2f4, 0xd7326d32, 0x34720072}, 589 + {0x61394b52, 0x00000035, 0x00000571, 0xc66525f1, 0xcabe7fef, 0x48310f59}, 590 + {0x29b4faff, 0x00000024, 0x0000006e, 0xca13751e, 0x993648e0, 0x783a4213}, 591 + {0x29bfb1dc, 0x0000000b, 0x00000244, 0x436c43f7, 0x429f7a59, 0x9e8efd41}, 592 + {0x86ae934b, 0x00000035, 0x00000104, 0x0760ec93, 0x9cf7d0f4, 0xfc3d34a5}, 593 + {0xc4c1024e, 0x0000002e, 0x000006b1, 0x6516a3ec, 0x19321f9c, 0x17a52ae2}, 594 + {0x3287a80a, 0x00000026, 0x00000496, 0x0b257eb1, 0x754ebd51, 0x886d935a}, 595 + {0xa4db423e, 0x00000023, 0x0000045d, 0x9b3a66dc, 0x873e9f11, 0xeaaeaeb2}, 596 + {0x7a1078df, 0x00000015, 0x0000014a, 0x8c2484c5, 0x6a628659, 0x8e900a4b}, 597 + {0x6048bd5b, 0x00000006, 0x0000006a, 0x897e3559, 0xac9961af, 0xd74662b1}, 598 + {0xd8f9ea20, 0x0000003d, 0x00000277, 0x60eb905b, 0xed2aaf99, 0xd26752ba}, 599 + {0xea5ec3b4, 0x0000002a, 0x000004fe, 0x869965dc, 0x6c1f833b, 0x8b1fcd62}, 600 + {0x2dfb005d, 0x00000016, 0x00000345, 0x6a3b117e, 0xf05e8521, 0xf54342fe}, 601 + {0x5a214ade, 0x00000020, 0x000005b6, 0x467f70be, 0xcb22ccd3, 0x5b95b988}, 602 + {0xf0ab9cca, 0x00000032, 0x00000515, 0xed223df3, 0x7f3ef01d, 0x2e1176be}, 603 + {0x91b444f9, 0x0000002e, 0x000007f8, 0x84e9a983, 0x5676756f, 0x66120546}, 604 + {0x1b5d2ddb, 0x0000002e, 0x0000012c, 0xba638c4c, 0x3f42047b, 0xf256a5cc}, 605 + {0xd824d1bb, 0x0000003a, 0x000007b5, 0x6288653b, 0x3a3ebea0, 0x4af1dd69}, 606 + {0x0470180c, 0x00000034, 0x000001f0, 0x9d5b80d6, 0x3de08195, 0x56f0a04a}, 607 + {0xffaa3a3f, 0x00000036, 0x00000299, 0xf3a82ab8, 0x53e0c13d, 0x74f6b6b2}, 608 + {0x6406cfeb, 0x00000023, 0x00000600, 0xa920b8e8, 0xe4e2acf4, 0x085951fd}, 609 + {0xb24aaa38, 0x0000003e, 0x000004a1, 0x657cc328, 0x5077b2c3, 0xc65387eb}, 610 + {0x58b2ab7c, 0x00000039, 0x000002b4, 0x3a17ee7e, 0x9dcb3643, 0x1ca9257b}, 611 + {0x3db85970, 0x00000006, 0x000002b6, 0x95268b59, 0xb9812c10, 0xfd196d76}, 612 + {0x857830c5, 0x00000003, 0x00000590, 0x4ef439d5, 0xf042161d, 0x5ef88339}, 613 + {0xe1fcd978, 0x0000003e, 0x000007d8, 0xae8d8699, 0xce0a1ef5, 0x2c3714d9}, 614 + {0xb982a768, 0x00000016, 0x000006e0, 0x62fad3df, 0x5f8a067b, 0x58576548}, 615 + {0x1d581ce8, 0x0000001e, 0x0000058b, 0xf0f5da53, 0x26e39eee, 0xfd7c57de}, 616 + {0x2456719b, 0x00000025, 0x00000503, 0x4296ac64, 0xd50e4c14, 0xd5fedd59}, 617 + {0xfae6d8f2, 0x00000000, 0x0000055d, 0x057fdf2e, 0x2a31391a, 0x1cc3b17b}, 618 + {0xcba828e3, 0x00000039, 0x000002ce, 0xe3f22351, 0x8f00877b, 0x270eed73}, 619 + {0x13d25952, 0x0000000a, 0x0000072d, 0x76d4b4cc, 0x5eb67ec3, 0x91ecbb11}, 620 + {0x0342be3f, 0x00000015, 0x00000599, 0xec75d9f1, 0x9d4d2826, 0x05ed8d0c}, 621 + {0xeaa344e0, 0x00000014, 0x000004d8, 0x72a4c981, 0x2064ea06, 0x0b09ad5b}, 622 + {0xbbb52021, 0x0000003b, 0x00000272, 0x04af99fc, 0xaf042d35, 0xf8d511fb}, 623 + {0xb66384dc, 0x0000001d, 0x000007fc, 0xd7629116, 0x782bd801, 0x5ad832cc}, 624 + {0x616c01b6, 0x00000022, 0x000002c8, 0x5b1dab30, 0x783ce7d2, 0x1214d196}, 625 + {0xce2bdaad, 0x00000016, 0x0000062a, 0x932535c8, 0x3f02926d, 0x5747218a}, 626 + {0x00fe84d7, 0x00000005, 0x00000205, 0x850e50aa, 0x753d649c, 0xde8f14de}, 627 + {0xbebdcb4c, 0x00000006, 0x0000055d, 0xbeaa37a2, 0x2d8c9eba, 0x3563b7b9}, 628 + {0xd8b1a02a, 0x00000010, 0x00000387, 0x5017d2fc, 0x503541a5, 0x071475d0}, 629 + {0x3b96cad2, 0x00000036, 0x00000347, 0x1d2372ae, 0x926cd90b, 0x54c79d60}, 630 + {0xc94c1ed7, 0x00000005, 0x0000038b, 0x9e9fdb22, 0x144a9178, 0x4c53eee6}, 631 + {0x1aad454e, 0x00000025, 0x000002b2, 0xc3f6315c, 0x5c7a35b3, 0x10137a3c}, 632 + {0xa4fec9a6, 0x00000000, 0x000006d6, 0x90be5080, 0xa4107605, 0xaa9d6c73}, 633 + {0x1bbe71e2, 0x0000001f, 0x000002fd, 0x4e504c3b, 0x284ccaf1, 0xb63d23e7}, 634 + {0x4201c7e4, 0x00000002, 0x000002b7, 0x7822e3f9, 0x0cc912a9, 0x7f53e9cf}, 635 + {0x23fddc96, 0x00000003, 0x00000627, 0x8a385125, 0x07767e78, 0x13c1cd83}, 636 + {0xd82ba25c, 0x00000016, 0x0000063e, 0x98e4148a, 0x283330c9, 0x49ff5867}, 637 + {0x786f2032, 0x0000002d, 0x0000060f, 0xf201600a, 0xf561bfcd, 0x8467f211}, 638 + {0xfebe4e1f, 0x0000002a, 0x000004f2, 0x95e51961, 0xfd80dcab, 0x3f9683b2}, 639 + {0x1a6e0a39, 0x00000008, 0x00000672, 0x8af6c2a5, 0x78dd84cb, 0x76a3f874}, 640 + {0x56000ab8, 0x0000000e, 0x000000e5, 0x36bacb8f, 0x22ee1f77, 0x863b702f}, 641 + {0x4717fe0c, 0x00000000, 0x000006ec, 0x8439f342, 0x5c8e03da, 0xdc6c58ff}, 642 + {0xd5d5d68e, 0x0000003c, 0x000003a3, 0x46fff083, 0x177d1b39, 0x0622cc95}, 643 + {0xc25dd6c6, 0x00000024, 0x000006c0, 0x5ceb8eb4, 0x892b0d16, 0xe85605cd}, 644 + {0xe9b11300, 0x00000023, 0x00000683, 0x07a5d59a, 0x6c6a3208, 0x31da5f06}, 645 + {0x95cd285e, 0x00000001, 0x00000047, 0x7b3a4368, 0x0202c07e, 0xa1f2e784}, 646 + {0xd9245a25, 0x0000001e, 0x000003a6, 0xd33c1841, 0x1936c0d5, 0xb07cc616}, 647 + {0x103279db, 0x00000006, 0x0000039b, 0xca09b8a0, 0x77d62892, 0xbf943b6c}, 648 + {0x1cba3172, 0x00000027, 0x000001c8, 0xcb377194, 0xebe682db, 0x2c01af1c}, 649 + {0x8f613739, 0x0000000c, 0x000001df, 0xb4b0bc87, 0x7710bd43, 0x0fe5f56d}, 650 + {0x1c6aa90d, 0x0000001b, 0x0000053c, 0x70559245, 0xda7894ac, 0xf8943b2d}, 651 + {0xaabe5b93, 0x0000003d, 0x00000715, 0xcdbf42fa, 0x0c3b99e7, 0xe4d89272}, 652 + {0xf15dd038, 0x00000006, 0x000006db, 0x6e104aea, 0x8d5967f2, 0x7c2f6bbb}, 653 + {0x584dd49c, 0x00000020, 0x000007bc, 0x36b6cfd6, 0xad4e23b2, 0xabbf388b}, 654 + {0x5d8c9506, 0x00000020, 0x00000470, 0x4c62378e, 0x31d92640, 0x1dca1f4e}, 655 + {0xb80d17b0, 0x00000032, 0x00000346, 0x22a5bb88, 0x9a7ec89f, 0x5c170e23}, 656 + {0xdaf0592e, 0x00000023, 0x000007b0, 0x3cab3f99, 0x9b1fdd99, 0xc0e9d672}, 657 + {0x4793cc85, 0x0000000d, 0x00000706, 0xe82e04f6, 0xed3db6b7, 0xc18bdc86}, 658 + {0x82ebf64e, 0x00000009, 0x000007c3, 0x69d590a9, 0x9efa8499, 0xa874fcdd}, 659 + {0xb18a0319, 0x00000026, 0x000007db, 0x1cf98dcc, 0x8fa9ad6a, 0x9dc0bb48}, 660 + }; 661 + 662 + #include <linux/time.h> 663 + 664 + static int __init crc32c_test(void) 665 + { 666 + int i; 667 + int errors = 0; 668 + int bytes = 0; 669 + u64 nsec; 670 + unsigned long flags; 671 + 672 + /* keep static to prevent cache warming code from 673 + * getting eliminated by the compiler */ 674 + static u32 crc; 675 + 676 + /* pre-warm the cache */ 677 + for (i = 0; i < 100; i++) { 678 + bytes += 2*test[i].length; 679 + 680 + crc ^= __crc32c_le(test[i].crc, test_buf + 681 + test[i].start, test[i].length); 682 + } 683 + 684 + /* reduce OS noise */ 685 + local_irq_save(flags); 686 + local_irq_disable(); 687 + 688 + nsec = ktime_get_ns(); 689 + for (i = 0; i < 100; i++) { 690 + if (test[i].crc32c_le != __crc32c_le(test[i].crc, test_buf + 691 + test[i].start, test[i].length)) 692 + errors++; 693 + } 694 + nsec = ktime_get_ns() - nsec; 695 + 696 + local_irq_restore(flags); 697 + local_irq_enable(); 698 + 699 + pr_info("crc32c: CRC_LE_BITS = %d\n", CRC_LE_BITS); 700 + 701 + if (errors) 702 + pr_warn("crc32c: %d self tests failed\n", errors); 703 + else { 704 + pr_info("crc32c: self tests passed, processed %d bytes in %lld nsec\n", 705 + bytes, nsec); 706 + } 707 + 708 + return 0; 709 + } 710 + 711 + static int __init crc32c_combine_test(void) 712 + { 713 + int i, j; 714 + int errors = 0, runs = 0; 715 + 716 + for (i = 0; i < 10; i++) { 717 + u32 crc_full; 718 + 719 + crc_full = __crc32c_le(test[i].crc, test_buf + test[i].start, 720 + test[i].length); 721 + for (j = 0; j <= test[i].length; ++j) { 722 + u32 crc1, crc2; 723 + u32 len1 = j, len2 = test[i].length - j; 724 + 725 + crc1 = __crc32c_le(test[i].crc, test_buf + 726 + test[i].start, len1); 727 + crc2 = __crc32c_le(0, test_buf + test[i].start + 728 + len1, len2); 729 + 730 + if (!(crc_full == __crc32c_le_combine(crc1, crc2, len2) && 731 + crc_full == test[i].crc32c_le)) 732 + errors++; 733 + runs++; 734 + cond_resched(); 735 + } 736 + } 737 + 738 + if (errors) 739 + pr_warn("crc32c_combine: %d/%d self tests failed\n", errors, runs); 740 + else 741 + pr_info("crc32c_combine: %d self tests passed\n", runs); 742 + 743 + return 0; 744 + } 745 + 746 + static int __init crc32_test(void) 747 + { 748 + int i; 749 + int errors = 0; 750 + int bytes = 0; 751 + u64 nsec; 752 + unsigned long flags; 753 + 754 + /* keep static to prevent cache warming code from 755 + * getting eliminated by the compiler */ 756 + static u32 crc; 757 + 758 + /* pre-warm the cache */ 759 + for (i = 0; i < 100; i++) { 760 + bytes += 2*test[i].length; 761 + 762 + crc ^= crc32_le(test[i].crc, test_buf + 763 + test[i].start, test[i].length); 764 + 765 + crc ^= crc32_be(test[i].crc, test_buf + 766 + test[i].start, test[i].length); 767 + } 768 + 769 + /* reduce OS noise */ 770 + local_irq_save(flags); 771 + local_irq_disable(); 772 + 773 + nsec = ktime_get_ns(); 774 + for (i = 0; i < 100; i++) { 775 + if (test[i].crc_le != crc32_le(test[i].crc, test_buf + 776 + test[i].start, test[i].length)) 777 + errors++; 778 + 779 + if (test[i].crc_be != crc32_be(test[i].crc, test_buf + 780 + test[i].start, test[i].length)) 781 + errors++; 782 + } 783 + nsec = ktime_get_ns() - nsec; 784 + 785 + local_irq_restore(flags); 786 + local_irq_enable(); 787 + 788 + pr_info("crc32: CRC_LE_BITS = %d, CRC_BE BITS = %d\n", 789 + CRC_LE_BITS, CRC_BE_BITS); 790 + 791 + if (errors) 792 + pr_warn("crc32: %d self tests failed\n", errors); 793 + else { 794 + pr_info("crc32: self tests passed, processed %d bytes in %lld nsec\n", 795 + bytes, nsec); 796 + } 797 + 798 + return 0; 799 + } 800 + 801 + static int __init crc32_combine_test(void) 802 + { 803 + int i, j; 804 + int errors = 0, runs = 0; 805 + 806 + for (i = 0; i < 10; i++) { 807 + u32 crc_full; 808 + 809 + crc_full = crc32_le(test[i].crc, test_buf + test[i].start, 810 + test[i].length); 811 + for (j = 0; j <= test[i].length; ++j) { 812 + u32 crc1, crc2; 813 + u32 len1 = j, len2 = test[i].length - j; 814 + 815 + crc1 = crc32_le(test[i].crc, test_buf + 816 + test[i].start, len1); 817 + crc2 = crc32_le(0, test_buf + test[i].start + 818 + len1, len2); 819 + 820 + if (!(crc_full == crc32_le_combine(crc1, crc2, len2) && 821 + crc_full == test[i].crc_le)) 822 + errors++; 823 + runs++; 824 + cond_resched(); 825 + } 826 + } 827 + 828 + if (errors) 829 + pr_warn("crc32_combine: %d/%d self tests failed\n", errors, runs); 830 + else 831 + pr_info("crc32_combine: %d self tests passed\n", runs); 832 + 833 + return 0; 834 + } 835 + 836 + static int __init crc32test_init(void) 837 + { 838 + crc32_test(); 839 + crc32c_test(); 840 + 841 + crc32_combine_test(); 842 + crc32c_combine_test(); 843 + 844 + return 0; 845 + } 846 + 847 + static void __exit crc32_exit(void) 848 + { 849 + } 850 + 851 + module_init(crc32test_init); 852 + module_exit(crc32_exit); 853 + 854 + MODULE_AUTHOR("Matt Domsch <Matt_Domsch@dell.com>"); 855 + MODULE_DESCRIPTION("CRC32 selftest"); 856 + MODULE_LICENSE("GPL");