From 9c243aacadb771e3dd381edb217973fc86fcb6e2 Mon Sep 17 00:00:00 2001 From: RocketRobz Date: Thu, 14 Nov 2024 01:08:05 -0700 Subject: [PATCH] Compress NRIO DLDI driver to fit in bootstub (without loading from NitroFS) --- .../nrio_dldi.c | 2 +- arm9/dldi-include/dldi-include.h | 2 +- arm9/dldi-include/nrio_lz77.c | 1047 +++++++++++++++++ arm9/source/driveOperations.cpp | 31 +- arm9/source/dumpOperations.cpp | 2 +- arm9/source/lzss.c | 384 +----- arm9/source/lzss.h | 20 +- arm9/source/lzss_enc.c | 361 ++++++ arm9/source/lzss_enc.h | 22 + 9 files changed, 1496 insertions(+), 375 deletions(-) rename arm9/{dldi-include => dldi-include-unused}/nrio_dldi.c (99%) create mode 100644 arm9/dldi-include/nrio_lz77.c create mode 100644 arm9/source/lzss_enc.c create mode 100644 arm9/source/lzss_enc.h diff --git a/arm9/dldi-include/nrio_dldi.c b/arm9/dldi-include-unused/nrio_dldi.c similarity index 99% rename from arm9/dldi-include/nrio_dldi.c rename to arm9/dldi-include-unused/nrio_dldi.c index 3116cff..64cb1a2 100644 --- a/arm9/dldi-include/nrio_dldi.c +++ b/arm9/dldi-include-unused/nrio_dldi.c @@ -1,4 +1,4 @@ -#include +#include TWL_CODE ALIGN(4) unsigned char nrio_dldi[19724] = { 0xED, 0xA5, 0x8D, 0xBF, 0x20, 0x43, 0x68, 0x69, 0x73, 0x68, 0x6D, 0x00, diff --git a/arm9/dldi-include/dldi-include.h b/arm9/dldi-include/dldi-include.h index 26d1bab..dc8b30a 100644 --- a/arm9/dldi-include/dldi-include.h +++ b/arm9/dldi-include/dldi-include.h @@ -3,7 +3,7 @@ extern unsigned char ak2_dldi[]; extern unsigned char r4tf_dldi[]; -extern unsigned char nrio_dldi[]; +extern unsigned char nrio_lz77[]; // extern unsigned char dstwo_dldi[]; // extern unsigned char ttio_dldi[]; diff --git a/arm9/dldi-include/nrio_lz77.c b/arm9/dldi-include/nrio_lz77.c new file mode 100644 index 0000000..a5912ac --- /dev/null +++ b/arm9/dldi-include/nrio_lz77.c @@ -0,0 +1,1047 @@ +#include + +TWL_CODE unsigned char nrio_lz77[] = { + 0x10, 0x0c, 0x4d, 0x00, 0x00, 0xed, 0xa5, 0x8d, 0xbf, 0x20, 0x43, 0x68, + 0x69, 0x00, 0x73, 0x68, 0x6d, 0x00, 0x01, 0x0f, 0x0e, 0x00, 0x00, 0x4e, + 0x41, 0x4e, 0x44, 0x20, 0x46, 0x4c, 0x41, 0x00, 0x53, 0x48, 0x20, 0x43, + 0x41, 0x52, 0x44, 0x20, 0x00, 0x4c, 0x49, 0x42, 0x46, 0x41, 0x54, 0x4e, + 0x52, 0x18, 0x49, 0x4f, 0x00, 0xf0, 0x00, 0x20, 0x0c, 0x80, 0xbf, 0x0c, + 0x0c, 0x4d, 0x80, 0xbf, 0x98, 0x00, 0x07, 0x10, 0x03, 0x08, 0x4c, 0x18, + 0x80, 0xbf, 0x04, 0x00, 0x0f, 0x10, 0x13, 0xa4, 0x5b, 0x80, 0x50, 0xbf, + 0x10, 0x39, 0x23, 0x00, 0x34, 0xa4, 0x13, 0x80, 0xbf, 0x55, 0x34, 0x00, + 0x03, 0x78, 0x00, 0x07, 0x4c, 0x00, 0x0b, 0x3c, 0x00, 0x0f, 0x40, 0x44, + 0x00, 0x13, 0x0d, 0xc0, 0xa0, 0xe1, 0xf8, 0xdf, 0x00, 0x2d, 0xe9, 0x04, + 0xb0, 0x4c, 0xe2, 0x28, 0xd0, 0x00, 0x4b, 0xe2, 0xf0, 0x6f, 0x9d, 0xe8, + 0x1e, 0xff, 0x00, 0x2f, 0xe1, 0x10, 0x40, 0x2d, 0xe9, 0x2c, 0x40, 0x00, + 0x9f, 0xe5, 0x00, 0x30, 0xd4, 0xe5, 0x00, 0x00, 0x00, 0x53, 0xe3, 0x24, + 0x20, 0x9f, 0xe5, 0x05, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x52, 0xe3, + 0x1c, 0x00, 0x00, 0x9f, 0xe5, 0x0f, 0xe0, 0xa0, 0x11, 0x12, 0xff, 0x00, + 0x2f, 0x11, 0x01, 0x30, 0xa0, 0xe3, 0x00, 0x30, 0x07, 0xc4, 0xe5, 0x10, + 0x40, 0xbd, 0x20, 0x37, 0x10, 0x8b, 0x20, 0xa3, 0x83, 0x10, 0x87, 0xe0, + 0x2d, 0xe5, 0x40, 0x30, 0x00, 0x43, 0x00, 0x3f, 0x04, 0x04, 0xd0, 0x4d, + 0xe2, 0x38, 0x00, 0x37, 0x38, 0x10, 0xa8, 0x30, 0x3b, 0x13, 0x00, 0x3b, + 0x30, 0x00, 0x47, 0x00, 0x30, 0x90, 0xa1, 0x20, 0x5f, 0x28, 0x00, 0x27, + 0x02, 0x00, 0x00, 0x0a, 0x10, 0x6b, 0x80, 0x50, 0x1f, 0x04, 0xd0, 0x8d, + 0xe2, 0x04, 0xe0, 0x9d, 0x6b, 0xe4, 0x10, 0x8f, 0x50, 0x53, 0x10, 0x00, + 0xeb, 0x04, 0x00, 0xe3, 0x11, 0x07, 0x00, 0xa7, 0x04, 0xa0, 0xe3, 0x16, + 0x07, 0x80, 0xe2, 0x02, 0x01, 0xc3, 0xa0, 0xe3, 0x01, 0x13, 0x00, 0x03, + 0xcc, 0x00, 0x8c, 0xe2, 0x06, 0x0a, 0x80, 0xe2, 0x3f, 0x30, 0x00, 0xe0, + 0xe3, 0x66, 0x20, 0xa0, 0xe3, 0xa1, 0x31, 0x00, 0xc1, 0xe5, 0xa8, 0x20, + 0xcc, 0xe5, 0xa4, 0x01, 0x00, 0x81, 0xe5, 0xa4, 0x31, 0x91, 0xe5, 0x02, + 0x05, 0x00, 0x13, 0xe3, 0xfc, 0xff, 0xff, 0x0a, 0x41, 0x36, 0x02, 0xa0, + 0xe3, 0x10, 0x00, 0x93, 0xe5, 0x10, 0xe7, 0x70, 0xc0, 0x00, 0xe7, 0x10, + 0x3b, 0x20, 0x48, 0xa0, 0xe1, 0x20, 0x54, 0x24, 0xa0, 0xe1, 0x10, 0x3b, + 0x01, 0xe3, 0x30, 0x3b, 0x00, 0xc0, 0x80, 0x00, 0x57, 0xec, 0x8e, 0xe2, + 0xff, 0x60, 0x00, 0xe2, 0x00, 0xff, 0x40, 0x04, 0xe2, 0xff, 0x50, 0x05, + 0xe2, 0x00, 0x20, 0x0c, 0xa0, 0xe1, 0x48, 0x20, 0xe0, 0xe3, 0x00, 0xa7, + 0x34, 0xa0, 0xe3, 0xa8, 0x20, 0xce, 0xe5, 0x00, 0xa9, 0x01, 0xc1, 0xe5, + 0xaa, 0x41, 0xc1, 0xe5, 0x00, 0xab, 0x51, 0xc1, 0xe5, 0xac, 0x60, 0xce, + 0xe5, 0x05, 0xad, 0xc1, 0xc1, 0xe5, 0xae, 0x00, 0x03, 0xaf, 0x00, 0x07, + 0x35, 0xa4, 0x31, 0xf0, 0x77, 0x10, 0x77, 0x70, 0x41, 0x2b, 0xf0, 0x10, + 0x7b, 0xfa, 0x00, 0x6b, 0x10, 0xbf, 0x50, 0x7f, 0x10, 0x6f, 0x10, 0xbf, + 0x78, 0x00, 0x63, 0xa1, 0x18, 0x31, 0xcc, 0xe5, 0x10, 0x7b, 0x10, 0x67, + 0xff, 0x70, 0x01, 0x80, 0xa0, 0x83, 0x21, 0x14, 0xa0, 0xe1, 0x40, 0x30, + 0x83, 0x00, 0xe2, 0xa7, 0x24, 0xa0, 0xe3, 0xa9, 0x01, 0xcc, 0xa8, 0x00, + 0x83, 0xcc, 0x00, 0x83, 0xcc, 0x30, 0x83, 0x11, 0xcc, 0xe5, 0x04, 0xae, + 0x71, 0xcc, 0xe5, 0xaf, 0x00, 0x3f, 0xa4, 0x21, 0x55, 0x8c, 0x00, 0x83, + 0x9c, 0xe0, 0xfb, 0xf0, 0x80, 0x83, 0x21, 0x00, 0xfb, 0x79, 0x21, 0x10, + 0x7b, 0x40, 0x8b, 0x30, 0xf3, 0x00, 0x6f, 0x70, 0x02, 0x21, 0x4b, 0x08, + 0x22, 0x24, 0xa0, 0xe1, 0x50, 0xff, 0x21, 0x1c, 0xa0, 0x44, 0xe1, 0x10, + 0x97, 0xa8, 0x00, 0xce, 0x01, 0xdb, 0x83, 0xe2, 0x63, 0xa9, 0x00, 0x6b, + 0xa0, 0x7b, 0x21, 0xcc, 0xe5, 0x10, 0x93, 0xf0, 0x7f, 0xc0, 0xf0, 0x7f, + 0x21, 0x03, 0x4b, 0x2d, 0xe9, 0x34, 0xe0, 0xdd, 0x00, 0xe5, 0x20, 0x60, + 0xdd, 0xe5, 0x24, 0x70, 0xdd, 0x00, 0xe5, 0x28, 0x80, 0xdd, 0xe5, 0x2c, + 0x90, 0xdd, 0x00, 0xe5, 0xa7, 0x54, 0xa0, 0xe3, 0x04, 0x00, 0x5e, 0x10, + 0xe3, 0xa1, 0xc4, 0x01, 0xdb, 0x43, 0xa0, 0xe3, 0x06, 0x00, 0x57, 0x8c, + 0x12, 0x01, 0x4c, 0x84, 0xe2, 0x63, 0x40, 0xc4, 0x01, 0xe3, 0x57, 0x85, + 0x02, 0x3f, 0xe0, 0xe0, 0x01, 0xe3, 0x30, 0xb0, 0x9d, 0xe5, 0xa1, 0xe1, + 0x10, 0x8b, 0x34, 0xc4, 0xe5, 0x20, 0x87, 0x00, 0x7b, 0xab, 0x01, 0x33, + 0xac, 0x60, 0x12, 0xc4, 0xe5, 0xad, 0x00, 0x7f, 0xae, 0x81, 0x00, 0x83, + 0x91, 0x80, 0x01, 0xff, 0x51, 0x8c, 0xe5, 0x41, 0x26, 0xa0, 0xe3, 0x80, + 0x50, 0x87, 0x10, 0x30, 0x92, 0x15, 0x04, 0x30, 0x8b, 0x60, 0x14, 0x10, + 0x97, 0x12, 0xdb, 0xf8, 0xff, 0xff, 0xba, 0xf0, 0x60, 0x4b, 0x32, 0xbf, + 0x12, 0x0f, 0x00, 0x40, 0xa0, 0xe3, 0x18, 0x81, 0x02, 0xaf, 0x00, 0x50, + 0xa0, 0xe1, 0x04, 0x60, 0x00, 0x87, 0x00, 0x30, 0xa0, 0xe1, 0xd1, 0x00, + 0xa0, 0xe3, 0x61, 0x08, 0x10, 0xa0, 0xe3, 0x90, 0x02, 0x57, 0x00, 0x40, + 0x8d, 0x2a, 0xe5, 0x04, 0x00, 0x03, 0x08, 0x00, 0x07, 0x0c, 0x00, 0x0b, + 0x10, 0x00, 0x50, 0x8d, 0xe5, 0x14, 0x60, 0x8d, 0xe5, 0xcb, 0x06, 0xff, + 0xff, 0xeb, 0x04, 0x20, 0x00, 0x33, 0x40, 0x2f, 0x51, 0xe8, 0x00, 0x2f, + 0xf0, 0x2b, 0x30, 0x2b, 0xc0, 0x10, 0x2b, 0x10, 0xa0, 0xe1, 0x7a, 0xd0, + 0x00, 0x57, 0x50, 0x33, 0x50, 0x47, 0xd0, 0x33, 0xb5, 0x00, 0x57, 0x01, + 0xb2, 0x00, 0x7f, 0x18, 0x03, 0x0f, 0x92, 0x3b, 0x20, 0x28, 0x41, 0xb3, + 0x33, 0xb9, 0x02, 0xbf, 0xc4, 0x02, 0x13, 0x51, 0xc7, 0x12, 0xb3, 0x20, + 0x02, 0x22, 0xb7, 0xe0, 0x12, 0xaf, 0x11, 0xab, 0x12, 0x3f, 0xa9, 0x21, + 0xc3, 0xe5, 0xff, 0x30, 0xc0, 0x0c, 0x22, 0x33, 0x91, 0xcf, 0xaa, 0xc1, + 0xc3, 0xe5, 0x02, 0xab, 0x61, 0xc3, 0xe5, 0xac, 0x10, 0x02, 0xbf, 0x41, + 0x00, 0xc3, 0xe5, 0xae, 0x51, 0xc3, 0xe5, 0xaf, 0x71, 0x44, 0xc3, 0x01, + 0xbb, 0x83, 0xe5, 0x03, 0x00, 0xcf, 0xa4, 0x31, 0x6a, 0x92, 0xf1, 0xbf, + 0x92, 0x3f, 0x44, 0x02, 0x8f, 0x58, 0x32, 0x3f, 0xb7, 0x64, 0x64, 0x30, + 0x8f, 0x13, 0x37, 0x21, 0x7c, 0x72, 0x37, 0x01, 0x60, 0x00, 0x86, 0xe2, + 0xff, 0x10, 0x01, 0xe2, 0x2e, 0xc0, 0x08, 0xe0, 0xe3, 0xa8, 0xc0, 0x13, + 0x37, 0xc3, 0xe5, 0xaa, 0x66, 0x11, 0x00, 0x77, 0x00, 0x6f, 0xac, 0x50, + 0x03, 0x37, 0x00, 0x6f, 0xae, 0x9a, 0x00, 0x9f, 0xa4, 0x61, 0xf0, 0x73, + 0x23, 0xaf, 0x20, 0x72, 0xb3, 0xd1, 0x80, 0x03, 0x7b, 0x61, 0x38, 0x83, + 0xe2, 0x00, 0x04, 0x83, 0x21, 0xe1, 0x00, 0x01, 0x93, 0xbb, 0xff, 0xff, + 0xea, 0x11, 0x03, 0x04, 0x02, 0x19, 0xa0, 0xe3, 0x3d, 0x03, 0x9b, 0x01, + 0x3c, 0x04, 0x83, 0xe2, 0x80, 0x10, 0x81, 0x03, 0x37, 0xc3, 0xe5, 0x00, + 0x01, 0x18, 0x81, 0xe1, 0x01, 0x23, 0xa0, 0xe3, 0x49, 0xa7, 0x02, 0x47, + 0x41, 0x06, 0x02, 0x03, 0xc1, 0x82, 0x03, 0x93, 0xa0, 0x70, 0xcf, 0x10, + 0x04, 0x7f, 0x7f, 0x34, 0xc3, 0xe3, 0x7f, 0x50, 0x38, 0x00, 0x03, 0x3c, + 0x00, 0x07, 0x30, 0xc3, 0xe3, 0x01, 0x01, 0x00, 0x53, 0xe1, 0xf4, 0xff, + 0xff, 0x1a, 0x24, 0x77, 0xaa, 0x01, 0xa3, 0x00, 0x04, 0x4b, 0x52, 0x01, + 0xff, 0xc3, 0x00, 0x67, 0x04, 0x06, 0xa0, 0x2d, 0xe5, 0x38, 0xa0, 0x04, + 0xc7, 0x04, 0xd7, 0x0a, 0x00, 0xa0, 0x8f, 0xe0, 0x03, 0x10, 0x9a, 0xe7, + 0x00, 0x00, 0x20, 0x91, 0xe5, 0x7f, 0x1e, 0xa0, 0xe3, 0x0f, 0x80, 0x00, + 0x73, 0x02, 0x31, 0xa0, 0xe3, 0x43, 0x3a, 0x02, 0x00, 0xe0, 0x01, 0x10, + 0x02, 0xe0, 0x83, 0x12, 0x81, 0x00, 0xe1, 0x80, 0x15, 0x81, 0xe1, 0xa2, + 0x2d, 0xa0, 0x20, 0xe1, 0x55, 0x02, 0x3f, 0x00, 0x04, 0xbd, 0xe8, 0xb2, + 0x83, 0x00, 0xab, 0x44, 0x46, 0x00, 0x00, 0xc4, 0x05, 0xc8, 0x10, 0x4b, + 0x54, 0x20, 0x00, 0x4b, 0x20, 0x50, 0x4b, 0x20, 0x00, 0x4b, 0x10, 0x92, + 0x26, 0xe5, 0x53, 0x02, 0x6b, 0xa1, 0x15, 0x30, 0x77, 0x10, 0x33, 0xa5, + 0x9a, 0x00, 0xdf, 0xf8, 0x45, 0x40, 0x33, 0x05, 0x53, 0xd1, 0x04, 0xf7, + 0x61, 0x1a, 0x08, 0x80, 0xe2, 0x15, 0x53, 0x10, 0xff, 0x07, 0x04, 0xf3, + 0x7a, 0xc1, 0x02, 0x7b, 0x11, 0x0b, 0x0d, 0x02, 0xa0, 0xe3, 0x77, 0x02, + 0x87, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x1f, 0x75, 0x3f, 0x15, 0xcf, 0x02, + 0xd7, 0x05, 0x47, 0xeb, 0x03, 0x9b, 0x42, 0x4f, 0x12, 0xaf, 0x30, 0x02, + 0xd7, 0xaa, 0x02, 0xb7, 0x20, 0x13, 0xb9, 0x02, 0x47, 0x2f, 0x04, 0xdb, + 0x11, 0x53, 0x11, 0x43, 0x01, 0x03, 0x14, 0xe3, 0x20, 0xc3, 0xe5, 0x11, + 0x3b, 0xa9, 0x11, 0xc0, 0xe5, 0x3c, 0x00, 0x20, 0x84, 0xe2, 0x41, 0x16, + 0x81, 0xe2, 0xa4, 0x2c, 0xc1, 0x80, 0x04, 0xd7, 0x90, 0x81, 0x43, 0x04, + 0xe3, 0x00, 0x54, 0x08, 0xe1, 0x00, 0x30, 0x84, 0x02, 0xeb, 0x84, 0x12, + 0xf6, 0xde, 0x01, 0x3b, 0x56, 0x0f, 0x30, 0x15, 0x5f, 0x00, 0x77, 0x20, + 0xab, 0x03, 0x4f, 0x05, 0xa0, 0x03, 0x47, 0x8e, 0x03, 0x27, 0x84, 0x04, + 0xa0, 0xe1, 0xa7, 0xaf, 0x03, 0x2f, 0xe0, 0x03, 0x57, 0x8a, 0x40, 0x7b, + 0x11, 0xb7, 0x10, 0x7f, 0x21, 0xb7, 0xd8, 0x00, 0x7b, 0x11, 0xdb, 0xa1, + 0x05, 0x67, 0x10, 0x7b, 0xa4, 0x31, 0x80, 0xef, 0x43, 0xc3, 0x30, 0x77, + 0x33, 0xc3, 0x85, 0x03, 0xc3, 0x36, 0x3f, 0x13, 0xc3, 0x16, 0x2f, 0x42, + 0x30, 0x55, 0x5b, 0x44, 0x2d, 0xe9, 0xcc, 0x01, 0xa7, 0xcc, 0x83, 0xc1, + 0xa7, 0x22, 0x29, 0xa0, 0xe1, 0x02, 0x00, 0x03, 0x16, 0xc7, 0xa5, 0x11, + 0x0f, 0x01, 0x06, 0xd3, 0xf0, 0x44, 0x36, 0xbb, 0x80, 0x03, 0xe3, 0x58, + 0x67, 0x43, 0x6b, 0x84, 0x13, 0x73, 0x00, 0xff, 0x01, 0x0c, 0x80, 0x30, + 0xe2, 0x2e, 0x16, 0x13, 0x06, 0x5f, 0xa8, 0x30, 0xc0, 0xe5, 0x56, 0x44, + 0x06, 0x57, 0x2f, 0x14, 0xf7, 0x21, 0x05, 0xe7, 0x06, 0x5f, 0x04, 0x64, + 0xe0, 0x05, 0xb3, 0x07, 0x43, 0x00, 0x70, 0x05, 0x8f, 0x40, 0x84, 0x24, + 0xe2, 0xa7, 0x02, 0xff, 0x41, 0x56, 0x14, 0x33, 0x9e, 0xe4, 0x4f, 0x23, + 0x05, 0x37, 0x23, 0x18, 0x00, 0x03, 0x06, 0x33, 0x23, 0x8f, 0x02, 0xff, + 0x05, 0xff, 0x30, 0x03, 0xe2, 0xaa, 0x05, 0xd7, 0xab, 0x05, 0x27, 0x04, + 0xac, 0x10, 0xc7, 0xe5, 0xad, 0x05, 0xbb, 0xa4, 0x61, 0xc0, 0xb5, 0x23, + 0x04, 0xf7, 0xe1, 0x10, 0x30, 0x95, 0xe5, 0xed, 0xda, 0x11, 0x47, 0x04, + 0x77, 0x42, 0x04, 0x57, 0x10, 0xa3, 0x45, 0x02, 0xe7, 0x9c, 0x6b, 0x44, + 0x32, 0x3b, 0x10, 0xdf, 0xbc, 0x02, 0x87, 0xbc, 0xf0, 0xdf, 0x70, 0xdf, + 0xbb, 0x07, 0xdb, 0x24, 0x07, 0x53, 0xf0, 0xc7, 0x70, 0xc7, 0x0c, 0x00, + 0xbf, 0x50, 0xcb, 0xbe, 0x70, 0xc7, 0x8e, 0xf0, 0xc7, 0xf0, 0xc7, 0xf0, + 0xc7, 0xf0, 0xc7, 0xa0, 0xc7, 0x10, 0xb2, 0x40, 0xc7, 0x13, 0x03, 0xaf, + 0x51, 0x73, 0xbc, 0x43, 0x33, 0x0b, 0x30, 0xaa, 0x01, 0xaf, 0xec, 0x03, + 0x57, 0xec, 0x53, 0x57, 0xc0, 0x13, 0x57, 0x9c, 0xe9, 0xb1, 0xaf, 0x05, + 0x8f, 0x12, 0x4b, 0x2a, 0x28, 0x27, 0x51, 0xe3, 0x10, 0x07, 0xec, 0x24, + 0x6b, 0x17, 0x43, 0x03, 0xf3, 0x2c, 0x42, 0xbb, 0x13, 0xf7, 0xa9, 0x11, + 0x10, 0xce, 0xe5, 0x05, 0x05, 0x8b, 0x01, 0x10, 0xd2, 0xe4, 0x54, 0xe1, + 0x07, 0xab, 0x08, 0x07, 0x2b, 0xaf, 0x00, 0x13, 0xa4, 0x31, 0x00, 0x8e, + 0xe5, 0x01, 0x00, 0xd2, 0xe5, 0x01, 0x10, 0x00, 0xd5, 0xe5, 0x01, 0x20, + 0x82, 0xe2, 0x01, 0xc0, 0xc0, 0x00, 0x0b, 0x10, 0x07, 0x30, 0xd2, 0xe5, + 0x00, 0x14, 0x81, 0x20, 0xe1, 0x0c, 0x04, 0x2f, 0x03, 0x1c, 0x81, 0xe1, + 0x02, 0x94, 0x00, 0x1b, 0x41, 0x46, 0x16, 0x33, 0x9e, 0x28, 0x37, 0x02, + 0x00, 0x10, 0xa0, 0xe1, 0x09, 0x08, 0x9f, 0x10, 0x10, 0x84, 0xe5, 0x0d, + 0x01, 0x30, 0xd0, 0xe4, 0x00, 0x57, 0x01, 0x2f, 0xd0, 0x00, 0x4b, 0x80, + 0x08, 0x7f, 0x34, 0x83, 0xe1, 0x01, 0x20, 0xd0, 0xe5, 0x02, 0x0c, 0x38, + 0x83, 0xe1, 0x02, 0x1c, 0x00, 0x03, 0x20, 0x35, 0x80, 0xe2, 0x10, 0x37, + 0x19, 0x37, 0xee, 0x06, 0x5b, 0x30, 0x82, 0x5f, 0x35, 0xcf, 0xfe, 0x06, + 0x23, 0x00, 0x4b, 0xec, 0x00, 0x07, 0xcf, 0x04, 0xb7, 0x2b, 0xec, 0x42, + 0x34, 0x0b, 0x00, 0x02, 0xaf, 0x40, 0x04, 0x57, 0x19, 0x2f, 0xdb, 0xf1, + 0xcf, 0x32, 0xaf, 0x60, 0x06, 0x83, 0x12, 0xaf, 0x00, 0x51, 0x3b, 0x00, + 0x4b, 0x6e, 0xed, 0x00, 0x4f, 0x16, 0x43, 0xb9, 0x00, 0x57, 0x10, 0x17, + 0x00, 0x13, 0xea, 0x3e, 0xec, 0x41, 0x42, 0x23, 0x07, 0x5b, 0x13, 0x7b, + 0x56, 0xcb, 0x13, 0x7b, 0x04, 0x0d, 0x20, 0x8d, 0xe5, 0xae, 0x00, 0x83, + 0x13, 0x7f, 0xc7, 0x00, 0x8b, 0xbb, 0x13, 0x7f, 0xaa, 0x00, 0x93, 0x15, + 0x23, 0x23, 0xf7, 0x2c, 0x01, 0x13, 0x03, 0xf7, 0x40, 0x2f, 0x09, 0x43, + 0xa8, 0x30, 0xc2, 0xe5, 0x08, 0x10, 0x43, 0x8d, 0x07, 0x5b, 0xc0, 0xe5, + 0x08, 0x90, 0x07, 0x6b, 0x08, 0xf3, 0x11, 0x03, 0x20, 0x05, 0x00, 0xdb, + 0x80, 0xe5, 0x0c, 0x00, 0x17, 0x30, 0x10, 0x90, 0x06, 0xf7, 0x00, 0x03, + 0x02, 0x50, 0x85, 0xe0, 0x40, 0x09, 0x02, 0xff, 0x09, 0xb0, 0xa0, 0xe1, + 0x41, 0x66, 0xd0, 0x39, 0x8b, 0x58, 0xf7, 0xfb, 0x15, 0x63, 0x00, 0x96, + 0xe5, 0x04, 0x12, 0x00, 0x85, 0xe4, 0x99, 0x0b, 0x10, 0x40, 0x00, 0x13, + 0x40, 0x03, 0x85, 0xe4, 0x04, 0xc0, 0x20, 0xe0, 0x90, 0x2f, 0x25, 0x93, + 0x89, 0x40, 0x2f, 0x00, 0xe0, 0x2c, 0xf0, 0x1b, 0xc0, 0x96, 0x0a, 0x93, + 0x00, 0x27, 0xe0, 0x04, 0xc0, 0x85, 0xe4, 0x0c, 0x00, 0x05, 0x2e, 0xe0, + 0x0c, 0x80, 0x23, 0xf0, 0x23, 0x20, 0x00, 0x6f, 0x04, 0x20, 0x85, 0xe4, + 0x02, 0x00, 0xf0, 0x5b, 0x10, 0x10, 0x08, 0x9d, 0xe5, 0x10, 0xe0, 0x00, + 0x8f, 0x30, 0x21, 0xe0, 0x00, 0x0c, 0x30, 0x23, 0xe0, 0x04, 0xe0, 0x85, + 0xe4, 0x4e, 0x0e, 0x00, 0x27, 0x0e, 0x70, 0xf0, 0x47, 0x10, 0x6b, 0x30, + 0x67, 0x20, 0x09, 0xe0, 0x0c, 0x40, 0x28, 0xf0, 0x1f, 0x10, 0x96, 0x02, + 0x4b, 0x08, 0x20, 0xe0, 0x20, 0x38, 0x00, 0x1f, 0x80, 0x9d, 0xe5, 0x02, + 0x23, 0x34, 0x23, 0xe0, 0x23, 0x32, 0x00, 0x03, 0x31, 0x01, 0x23, 0xe0, + 0x02, 0x20, 0x28, 0xe0, 0x03, 0x03, 0x23, 0x00, 0x0e, 0x20, 0x22, 0xe0, + 0x01, 0x30, 0x43, 0xe2, 0x43, 0x0c, 0x10, 0x07, 0x70, 0x27, 0xe0, 0x01, + 0x10, 0x0f, 0x0b, 0x4f, 0x30, 0x10, 0x70, 0x08, 0x3b, 0x01, 0x8b, 0x00, + 0x10, 0x85, 0xe5, 0x00, 0x01, 0x70, 0x24, 0xe0, 0x00, 0xb0, 0x2b, 0xe0, + 0x00, 0x04, 0x00, 0x00, 0x9a, 0x01, 0x90, 0x89, 0xe2, 0x08, 0x0f, 0x00, + 0x59, 0xe3, 0x0b, 0x08, 0x8a, 0x04, 0x50, 0x10, 0x85, 0xe2, 0xab, 0x06, + 0xdb, 0x08, 0xc0, 0x9d, 0xe5, 0x03, 0x14, 0x00, 0x9d, 0xe5, 0x09, 0xc0, + 0x01, 0x0f, 0x00, 0x1f, 0xc8, 0x00, 0x73, 0x20, 0x23, 0x08, 0xc0, 0x08, + 0x77, 0x00, 0x8d, 0xe5, 0xa0, 0x06, 0xab, 0x9a, 0x00, 0x4b, 0xe2, 0x24, + 0x00, 0x92, 0xe8, 0x00, 0x0f, 0x44, 0xcb, 0xe3, 0x22, 0x18, 0x22, 0xe0, + 0x00, 0x27, 0xc8, 0x27, 0xe0, 0x0f, 0x48, 0xc4, 0xe3, 0x00, 0x55, 0x04, + 0xcb, 0xe3, 0x25, 0xe8, 0x25, 0xe0, 0x00, 0x01, 0x14, 0x21, 0xe0, 0x2c, + 0xc4, 0x2c, 0xe0, 0x20, 0x0f, 0x4c, 0x00, 0x13, 0x08, 0xc0, 0xe3, 0x33, + 0x34, 0x08, 0xcb, 0xe3, 0x21, 0x12, 0x01, 0x03, 0xc2, 0x2c, 0xe0, 0x02, + 0x2e, 0xe4, 0x2e, 0xe0, 0x0f, 0x40, 0x00, 0x2b, 0x0c, 0xca, 0x00, 0x17, + 0x07, 0x07, 0xff, 0x68, 0x00, 0x1b, 0x11, 0x01, 0x1f, 0xc1, 0x00, 0x2c, + 0xe0, 0x0e, 0xe2, 0x2e, 0xe0, 0x04, 0x48, 0x00, 0x24, 0xe0, 0x55, 0x00, + 0xc0, 0xe3, 0xff, 0x60, 0x10, 0xc6, 0xe3, 0x33, 0x07, 0x23, 0x81, 0x10, + 0x21, 0xe0, 0x40, 0x8c, 0x00, 0x8b, 0x2e, 0xe1, 0x2e, 0xe0, 0x24, 0x44, + 0x80, 0x00, 0xbb, 0x08, 0x20, 0xe0, 0x26, 0x68, 0x26, 0xe0, 0x52, 0x80, + 0x08, 0x5b, 0x33, 0x07, 0x3f, 0x2b, 0x2c, 0x05, 0x63, 0x1c, 0x08, 0x01, + 0xe2, 0x8e, 0xe0, 0x00, 0x3b, 0x41, 0x24, 0xe0, 0x20, 0x20, 0x04, 0x01, + 0x3f, 0x10, 0x81, 0xe1, 0x2b, 0x28, 0x00, 0x22, 0xe0, 0x03, 0x38, 0x23, + 0xe0, 0x26, 0x56, 0xc8, 0x0b, 0x6b, 0x00, 0x59, 0x84, 0x40, 0x00, 0x1b, + 0x02, 0x20, 0xe0, 0x40, 0x08, 0x01, 0x3b, 0x26, 0x54, 0x25, 0xe0, 0x22, + 0x22, 0x28, 0x22, 0xe0, 0x11, 0x43, 0x0e, 0x00, 0x2b, 0x02, 0x45, 0x04, + 0x00, 0xe2, 0x00, 0x01, 0x20, 0xe0, 0x02, 0x07, 0x00, 0x00, 0xe2, 0x02, + 0x21, 0x22, 0xe0, 0x25, 0x51, 0x25, 0x2a, 0xe0, 0x03, 0x01, 0x5b, 0x04, + 0x00, 0x47, 0x00, 0x00, 0x4b, 0x82, 0x80, 0x01, 0x57, 0x02, 0x00, 0x08, + 0xe2, 0x85, 0x50, 0x25, 0xc0, 0x01, 0x6f, 0x07, 0xa3, 0x16, 0x81, 0xe1, + 0x08, 0xc0, 0x08, 0x2a, 0xe2, 0x08, 0x08, 0xf7, 0x02, 0x0b, 0xa7, 0x83, + 0x01, 0xdb, 0x0c, 0x42, 0x17, 0x03, 0xc7, 0x36, 0x03, 0xe2, 0x14, 0x01, + 0x3f, 0x05, 0x08, 0x20, 0x82, 0xe1, 0x03, 0x00, 0x03, 0x01, 0x30, 0x08, + 0x00, 0xe2, 0x00, 0x00, 0x5c, 0xe3, 0x83, 0x25, 0x82, 0x80, 0x09, 0xa7, + 0x08, 0xe2, 0x83, 0x26, 0x82, 0xe1, 0xaa, 0x00, 0x38, 0xa0, 0x13, 0xaa, + 0x3c, 0x83, 0x12, 0x01, 0x40, 0x00, 0x00, 0x0b, 0x30, 0x83, 0x12, 0x03, + 0x30, 0x20, 0x00, 0x10, 0xa3, 0x00, 0x80, 0x11, 0xa0, 0x00, 0x80, 0x02, + 0x01, 0x00, 0x30, 0xe0, 0xe1, 0x04, 0x01, 0x7b, 0x23, 0xa8, 0x09, 0x6b, + 0x23, 0x0b, 0x73, 0x00, 0x06, 0x03, 0x02, 0x20, 0xc0, 0x98, 0x04, 0x3f, + 0xc0, 0xe5, 0x19, 0x8f, 0x5a, 0x37, 0xf0, 0x4f, 0x2d, 0x01, 0xe9, 0x58, + 0xa5, 0x9f, 0xe5, 0x58, 0x35, 0x48, 0x17, 0x40, 0xe0, 0x08, 0x17, 0xc0, + 0x9e, 0xe5, 0x2c, 0xc9, 0xa0, 0x2f, 0xe1, 0x0c, 0x00, 0x03, 0x2c, 0x1a, + 0x4f, 0x00, 0x77, 0x54, 0xc3, 0x13, 0x87, 0x2e, 0x42, 0x01, 0x34, 0xc7, + 0x43, 0x00, 0x07, 0x18, 0xa3, 0x26, 0xf3, 0xe0, 0xa3, 0x33, 0x83, 0x2c, + 0x43, 0x7f, 0xa9, 0xe1, 0xc0, 0xf4, 0xc7, 0x47, 0x0f, 0xf5, 0x14, 0xb3, + 0x64, 0xc7, 0x14, 0xd3, 0x44, 0xcf, 0x03, 0x14, 0xc7, 0xe0, 0x03, 0x97, + 0x19, 0xe0, 0x82, 0xe2, 0x28, 0x43, 0x14, 0xd3, 0x30, 0x05, 0x01, 0x1b, + 0xd5, 0x0a, 0xab, 0x03, 0xff, 0x14, 0x04, 0x03, 0x18, 0x04, 0x07, 0x1c, + 0x04, 0x0b, 0x50, 0x20, 0x04, 0x0f, 0x0c, 0x04, 0xef, 0x03, 0x00, 0x85, + 0xe0, 0x2a, 0x41, 0x96, 0x0d, 0x47, 0x63, 0x1b, 0x27, 0x96, 0x73, 0xbb, + 0x10, 0x10, 0x89, 0xe5, 0x0e, 0x0a, 0xff, 0x01, 0x70, 0xd3, 0xe4, 0x02, + 0x04, 0x80, 0x90, 0xe4, 0x01, 0x20, 0x08, 0x17, 0x40, 0x00, 0xd3, 0xe5, + 0x01, 0x50, 0xde, 0xe5, 0x02, 0x10, 0xb4, 0x05, 0x3f, 0xe0, 0x05, 0x37, + 0x0e, 0x43, 0x06, 0xc9, 0xb3, 0x05, 0x34, 0x11, 0x87, 0xe1, 0x04, 0x05, + 0x0f, 0x0e, 0x3c, 0x83, 0x06, 0xcb, 0x65, 0x89, 0x05, 0x6b, 0x0c, 0xdb, + 0x30, 0xd2, 0x05, 0x37, 0xd1, 0x35, 0x7f, 0xc5, 0x15, 0x7b, 0x05, 0x37, + 0x04, 0xb0, 0x9c, 0x25, 0x4b, 0x00, 0x05, 0x3b, 0x1d, 0x01, 0x0c, 0x83, + 0x00, 0xb7, 0x07, 0x9f, 0x00, 0x57, 0x0b, 0x13, 0x6f, 0xd9, 0x09, 0xb7, + 0xa9, 0xab, 0x00, 0x00, 0x47, 0x10, 0x8b, 0x20, 0xd3, 0x40, 0x47, 0xc9, + 0x00, 0x87, 0x0d, 0x03, 0x01, 0x24, 0x01, 0xcb, 0xc0, 0x9e, 0x05, 0x93, + 0x08, 0xd3, 0xe5, 0x00, 0x28, 0x01, 0xe3, 0x2c, 0x82, 0xe1, 0x24, 0x02, + 0x00, 0x06, 0xdb, 0x50, 0x24, 0xf3, 0xb3, 0x20, 0x89, 0xff, 0x0e, 0xd3, + 0x50, 0x43, 0x15, 0xbf, 0x00, 0xcb, 0x00, 0x3f, 0x20, 0x37, 0x0d, 0x4f, + 0x13, 0x67, 0x34, 0x04, 0x40, 0x40, 0x4b, 0x03, 0x6f, 0x04, 0x02, 0x5f, + 0x01, 0x0c, 0x83, 0x02, 0x2b, 0x80, 0x2c, 0xe0, 0x02, 0x10, 0x09, 0x13, + 0xf0, 0x93, 0xd8, 0xf0, 0x93, 0x50, 0x93, 0x70, 0x80, 0x93, 0x00, 0x43, + 0x07, 0x60, 0x25, 0xc6, 0xf0, 0x43, 0x80, 0x43, 0x18, 0x50, 0x9d, 0x06, + 0x93, 0x00, 0x47, 0x00, 0x0a, 0xd1, 0xe5, 0x05, 0x10, 0x04, 0x0f, 0x50, + 0x00, 0xd3, 0xc0, 0x1a, 0xd3, 0xe5, 0x04, 0x03, 0x6f, 0x10, 0xe7, 0x00, + 0x00, 0xe7, 0x05, 0xd4, 0x10, 0x0b, 0x00, 0xf7, 0x0c, 0x00, 0xe7, 0x24, + 0x05, 0x9b, 0x00, 0x4c, 0x99, 0x00, 0x13, 0xc0, 0x26, 0x03, 0x0b, 0xf0, + 0x57, 0x10, 0x40, 0xf0, 0xeb, 0xf4, 0x11, 0x2f, 0x20, 0xdf, 0x01, 0x33, + 0x61, 0x2f, 0x1c, 0x01, 0x2f, 0x60, 0x83, 0x2b, 0xe2, 0x0e, 0x05, 0xbf, + 0x04, 0x10, 0xf3, 0x80, 0xf1, 0x7b, 0x12, 0x07, 0x14, 0x00, 0x00, 0x9b, + 0x05, 0x3b, 0x9d, 0x21, 0x17, 0x0e, 0x20, 0x01, 0x27, 0xe0, 0x2c, 0x38, + 0x2c, 0xe0, 0x05, 0x04, 0xdf, 0xb7, 0x14, 0xf7, 0x04, 0x10, 0x07, 0x04, + 0xfb, 0x06, 0x2b, 0x2f, 0x03, 0xc7, 0x05, 0x03, 0x07, 0x01, 0x70, 0xd1, + 0xe4, 0x1c, 0x00, 0xd3, 0x12, 0x73, 0x15, 0x0b, 0x31, 0x24, 0x20, 0x00, + 0xdf, 0x05, 0x0b, 0x01, 0xe0, 0x81, 0x02, 0x97, 0xaa, 0x35, 0x07, 0x00, + 0x00, 0x6b, 0x0c, 0x11, 0x63, 0x40, 0x02, 0x17, 0x30, 0x53, 0xd6, 0x07, + 0x97, 0xde, 0x22, 0x9b, 0x14, 0x80, 0x02, 0x9f, 0x0d, 0x57, 0x09, 0x01, + 0x20, 0x8e, 0xe2, 0x03, 0x24, 0x9a, 0x08, 0x11, 0x1b, 0x82, 0x05, 0x0f, + 0x0f, 0x00, 0x55, 0xe3, 0x08, 0x0d, 0x6f, 0x11, 0xaa, 0x05, 0x1f, 0x03, + 0x42, 0x63, 0x01, 0x07, 0x73, 0x01, 0x02, 0xeb, 0x04, 0x08, 0x00, 0x8b, + 0xe2, 0x4e, 0x15, 0x2f, 0x50, 0x8d, 0xe2, 0x05, 0x20, 0x10, 0x95, 0xe8, + 0x08, 0x00, 0xab, 0x20, 0x03, 0xbb, 0xb1, 0x10, 0x37, 0x0e, 0x15, 0x3b, + 0x25, 0x37, 0x55, 0xe3, 0x0c, 0x05, 0x37, 0x72, 0x20, 0x05, 0x37, 0x10, + 0x47, 0x09, 0x63, 0x9a, 0x1c, 0x05, 0x5f, 0x1c, 0xe1, 0x00, 0x9b, 0x10, + 0xdb, 0x05, 0x4f, 0xe2, 0x21, 0x00, 0x90, 0x05, 0x47, 0x40, 0xcc, 0x05, + 0x23, 0xcc, 0xe3, 0x2e, 0x18, 0x2e, 0xe0, 0x16, 0x20, 0xc8, 0x20, 0x45, + 0x4b, 0xc2, 0xf5, 0x4b, 0x05, 0x4b, 0xff, 0x33, 0x68, 0xc2, 0x25, 0x37, + 0xf5, 0x4f, 0xc0, 0xe3, 0x10, 0xff, 0x55, 0x37, 0x9b, 0xf5, 0x53, 0xc0, + 0xe3, 0x15, 0x37, 0x15, 0x33, 0x22, 0x05, 0x33, 0xf5, 0x57, 0x1e, 0x20, + 0xe0, 0x25, 0x05, 0x33, 0x15, 0x57, 0x55, 0x37, 0xf5, 0x57, 0x81, 0xef, + 0x25, 0x4b, 0x95, 0x3f, 0x55, 0x57, 0x0c, 0x06, 0x37, 0x25, 0x4b, 0x85, + 0x3f, 0x95, 0x57, 0xfc, 0x15, 0x43, 0x55, 0x3f, 0x15, 0x57, 0x15, 0x37, + 0x15, 0x5b, 0x25, 0x43, 0x00, 0x0c, 0xfe, 0x35, 0x43, 0x01, 0xef, 0x15, + 0x3b, 0x15, 0x47, 0x15, 0x63, 0x11, 0x4f, 0x35, 0x47, 0x0c, 0xab, 0x05, + 0x47, 0x50, 0x45, 0x47, 0x0e, 0x25, 0x47, 0x08, 0x0e, 0x5b, 0x55, 0x4b, + 0xfa, 0x15, 0x7b, 0xf5, 0x4f, 0x45, 0x4f, 0x02, 0xe7, 0x75, 0x4f, 0xc5, + 0x05, 0x4f, 0xc5, 0x8a, 0x09, 0x8f, 0xc5, 0xe5, 0x2c, 0x15, 0x4f, 0x4f, + 0x7b, 0x8b, 0x84, 0x54, 0xfc, 0x39, 0x2b, 0xa1, 0x00, 0x07, 0xb6, 0x08, + 0xd7, 0x2c, 0x3e, 0xf9, 0x3d, 0x37, 0x1f, 0x0b, 0x1c, 0xd3, 0xd0, 0x07, + 0x1d, 0x1b, 0x81, 0x34, 0x3c, 0x6b, 0x58, 0x02, 0x0f, 0x5b, 0x80, 0x0c, + 0x63, 0x1e, 0x4b, 0x83, 0x0d, 0x00, 0xf3, 0x2f, 0x3f, 0x9d, 0x0f, 0xf0, + 0x2b, 0x30, 0x2b, 0x55, 0x07, 0xf0, 0x2b, 0x1d, 0x73, 0xc8, 0x1d, 0x37, + 0x1c, 0xc3, 0x4d, 0x08, 0xf0, 0x1f, 0x03, 0x00, 0x10, 0x9e, 0x10, 0x8f, + 0x01, 0xfe, 0x0e, 0x87, 0x11, 0x13, 0x10, 0x0b, 0x1e, 0x33, 0x01, 0x88, + 0x00, 0x17, 0x01, 0x30, 0x82, 0x0f, 0x8b, 0x03, 0x12, 0xa0, 0x0e, 0x00, + 0xb0, 0xe1, 0xfa, 0x0e, 0x53, 0x1a, 0x47, 0x5f, 0x37, 0x00, 0x42, 0x60, + 0x0a, 0x3f, 0x50, 0xd0, 0xe5, 0x00, 0x12, 0xfb, 0xc0, 0x09, 0xd1, 0xe5, + 0x02, 0x30, 0x00, 0x03, 0xe0, 0xd0, 0x09, 0x17, 0x72, 0x26, 0x01, 0xbb, + 0x06, 0xef, 0x07, 0x3f, 0xff, 0x10, 0x1f, 0x3f, 0x0c, 0x85, 0x0f, 0xcb, + 0x0e, 0xe2, 0x05, 0x30, 0x15, 0xa7, 0x96, 0x30, 0xdf, 0xaa, 0x0c, 0x6f, + 0x10, 0x0a, 0x8f, 0xa1, 0x08, 0xc7, 0x55, 0x0b, 0x8b, 0x55, 0xb7, 0x08, + 0x53, 0x0f, 0x1b, 0xeb, 0x0a, 0xa7, 0xdd, 0x1e, 0x0b, 0x0b, 0x27, 0x0d, + 0x6b, 0x35, 0xe1, 0xda, 0x1e, 0x17, 0x0b, 0x37, 0x06, 0x0a, 0xbf, 0xd7, + 0x0d, 0xe3, 0x04, 0x05, 0x40, 0x84, 0xe0, 0x00, 0x00, 0x03, 0x01, 0x00, + 0x02, 0x54, 0xe3, 0x03, 0x00, 0xa0, 0x13, 0x0a, 0xd7, 0x03, 0xc5, 0x1d, + 0x37, 0x5f, 0xcf, 0xa5, 0x30, 0x25, 0x60, 0x4f, 0xeb, 0x0f, 0x03, 0x14, + 0xa6, 0x30, 0x26, 0x60, 0x5f, 0xe7, 0x0f, 0x13, 0x20, 0x00, 0x14, 0x1c, + 0xe3, 0x80, 0x0f, 0xcf, 0x02, 0x2b, 0x83, 0x55, 0xe3, 0x00, 0xc0, 0x50, + 0xa0, 0x13, 0x40, 0x50, 0xa0, 0x03, 0x44, 0x08, 0x00, 0x17, 0x20, 0x50, + 0x85, 0x00, 0x4f, 0x1c, 0xe3, 0x44, 0x10, 0x00, 0x07, 0x80, 0x00, 0x11, + 0x03, 0xa7, 0x85, 0x13, 0x09, 0x20, 0x00, 0x14, 0xe3, 0x08, 0xc7, 0x13, + 0x08, 0x00, 0x07, 0xcd, 0x0a, 0x27, 0x00, 0x6f, 0x14, 0xe3, 0x03, 0xc7, + 0x00, 0x1f, 0x16, 0x1e, 0x67, 0x0b, 0x03, 0x04, 0x10, 0xa0, 0x00, 0x23, + 0x1e, 0x0b, 0x5f, 0x37, 0x0b, 0xb0, 0x04, 0x3f, 0x13, 0x01, 0xbb, 0x00, + 0x4f, 0x1e, 0xe3, 0x01, 0x10, 0x40, 0x81, 0x00, 0x9f, 0x16, 0xe3, 0x01, + 0x5c, 0x85, 0x13, 0x09, 0x07, 0x30, 0xd5, 0xe7, 0x06, 0x43, 0xe3, 0x12, + 0x19, 0x5b, 0x82, 0x0b, 0x8b, 0x07, 0x30, 0xc5, 0xe7, 0xd0, 0x4f, 0x8f, + 0x2c, 0xaf, 0x0f, 0x8f, 0x2c, 0x5f, 0x8f, 0x00, 0x1f, 0x8f, 0x1e, 0x3b, + 0x0e, 0xc7, 0x0f, 0xdb, 0x11, 0x02, 0x10, 0xc3, 0x00, 0x37, 0x82, 0xe2, + 0x3e, 0x0d, 0x0f, 0xe0, 0x11, 0x7f, 0x1f, 0x83, 0x1f, 0x0f, 0xb4, 0x36, + 0x00, 0x00, 0xb8, 0xea, 0x4f, 0x83, 0xf0, 0x3f, 0xf0, 0x3f, 0x40, 0xc0, + 0x3f, 0x74, 0x00, 0x3f, 0x54, 0xa8, 0x4f, 0xc3, 0x14, 0x00, 0x3f, 0x14, + 0x9f, 0xc3, 0x00, 0x82, 0xe5, 0xb5, 0x50, 0x67, 0x34, 0x00, 0x67, 0x5b, + 0xdf, 0x44, 0x00, 0x67, 0x44, 0x8f, 0xeb, 0x46, 0x3c, 0x0b, 0xeb, 0x00, + 0xc0, 0x92, 0x03, 0x4f, 0x0b, 0xeb, 0xe1, 0x40, 0x9c, 0x00, 0x37, 0xd2, + 0xe5, 0x9e, 0x10, 0x2c, 0xe0, 0x6a, 0x28, 0x0c, 0x03, 0x10, 0x47, 0x24, + 0x10, 0x1f, 0x10, 0x30, 0x1f, 0x8c, 0x06, 0x15, 0x81, 0xe0, 0x00, 0x10, + 0x00, 0x57, 0x4e, 0xab, 0x0c, 0xab, 0x00, 0xbf, 0x28, 0x0c, 0x37, 0x68, + 0x0c, 0x3b, 0x58, 0x0c, 0x3f, 0x13, 0x17, 0xa4, 0x10, 0xcb, 0x34, 0x00, + 0xcb, 0x34, 0x20, 0x38, 0x83, 0x02, 0x30, 0x15, 0x9a, 0xe7, 0x0b, 0x07, + 0x23, 0x55, 0x0e, 0xb3, 0x55, 0x01, 0x0f, 0x10, 0x07, 0x00, 0xc3, 0x08, + 0xbb, 0xc3, 0xe5, 0x03, 0x10, 0x1b, 0xc3, 0xe5, 0x00, 0x1f, 0x63, 0x00, + 0x07, 0x0f, 0x00, 0x13, 0x51, 0x13, 0x06, 0xa8, 0x35, 0x00, 0x00, 0x74, + 0x1e, 0x5b, 0x08, 0xcb, 0x6c, 0x05, 0xa1, 0x9f, 0xe5, 0x6c, 0x01, 0x38, + 0xcb, 0x00, 0x10, 0xd3, 0xab, 0x08, 0x6b, 0xff, 0x0a, 0xb7, 0x0c, 0x0f, + 0xc7, 0x45, 0x0d, 0x07, 0x12, 0x1f, 0x66, 0x07, 0x1d, 0x87, 0x00, 0x63, + 0x02, 0x20, 0x00, 0x63, 0x0e, 0x6f, 0x03, 0xae, 0x0d, 0x1f, 0xfe, 0x0c, + 0xe3, 0x0c, 0x83, 0xc7, 0x10, 0x3b, 0x1d, 0x5b, 0xaa, 0xd9, 0x0a, 0xf3, + 0x12, 0x33, 0x03, 0x40, 0x0b, 0x0a, 0xb3, 0x1a, 0x0f, 0x0d, 0x43, 0x48, + 0x0b, 0x18, 0xc3, 0x00, 0x53, 0x07, 0xaf, 0x00, 0x0a, 0x07, 0x87, 0x40, + 0x0b, 0x0b, 0x30, 0xc2, 0x05, 0x10, 0x73, 0x10, 0x1b, 0x10, 0x73, 0x4e, + 0xe9, 0x0b, 0x8b, 0x02, 0x80, 0x0f, 0xb7, 0x0f, 0x63, 0x1d, 0xdf, 0x02, + 0x00, 0x90, 0xa0, 0xe1, 0x0a, 0x00, 0x81, 0xe3, 0x10, 0x00, 0x30, 0x81, + 0xe2, 0x08, 0xe0, 0x81, 0xe3, 0x0c, 0x00, 0x20, 0x81, 0xe3, 0x09, 0x50, + 0x81, 0xe3, 0x04, 0x81, 0x0b, 0x0b, 0x0d, 0xc0, 0x81, 0xe3, 0x0e, 0x60, + 0x10, 0x0b, 0x00, 0x81, 0xe3, 0x05, 0x40, 0x81, 0xe3, 0x06, 0xb0, 0x00, + 0x81, 0xe3, 0x02, 0x20, 0xd8, 0xe7, 0xff, 0x10, 0x85, 0x0b, 0x8b, 0x30, + 0xd8, 0xe7, 0x02, 0x40, 0x6b, 0x00, 0x40, 0x0b, 0x00, 0x0e, 0x30, 0xc8, + 0x07, 0x0c, 0x20, 0xd7, 0xe7, 0x14, 0x05, 0x30, 0xd7, 0x60, 0x1b, 0x04, + 0x40, 0x0b, 0x05, 0x30, 0x22, 0xc7, 0x07, 0x19, 0xfb, 0x06, 0x20, 0xd9, + 0x00, 0xff, 0xd9, 0xa0, 0x60, 0x3b, 0x0b, 0x40, 0x0b, 0x00, 0x30, 0xc9, + 0x07, 0x40, 0xb5, 0x09, 0xbf, 0xdb, 0x12, 0x57, 0x0d, 0xdb, 0xc0, 0x0e, + 0xd7, 0x02, 0x41, 0x27, 0x75, 0xb8, 0xf0, 0xdf, 0xb0, 0xdf, 0x41, 0x9b, + 0xff, 0x05, 0x43, 0xb1, 0x0f, 0xe7, 0x9a, 0x00, 0x03, 0xea, 0x60, 0x41, + 0x7f, 0x12, 0x93, 0x58, 0x02, 0x93, 0x58, 0xa2, 0x82, 0x53, 0x50, 0x0e, + 0x17, 0xb0, 0x10, 0xd2, 0x0a, 0xc3, 0x9a, 0x34, 0xe7, 0x48, 0x0e, 0x23, + 0x0e, 0xb7, 0xe7, 0x22, 0x6b, 0x20, 0x92, 0x21, 0xe5, 0x0c, 0x0e, 0x4f, + 0x02, 0x30, 0xd0, 0xe7, 0x11, 0x9f, 0x04, 0x01, 0x10, 0x80, 0xe2, 0x05, + 0x0e, 0xa7, 0xff, 0x00, 0x18, 0x01, 0xe2, 0x3f, 0x05, 0x9f, 0x04, 0xb7, + 0x83, 0x0c, 0x00, 0x18, 0x50, 0xe1, 0xf6, 0x40, 0xa3, 0x52, 0xff, 0xe0, + 0x33, 0x00, 0x2d, 0x00, 0x40, 0x0e, 0x77, 0x6c, 0x0e, 0x7b, 0x12, 0xc7, + 0x10, 0x0f, 0x7f, 0x57, 0x6c, 0x03, 0x07, 0x6c, 0x0e, 0x7f, 0x6c, 0x42, + 0x3f, 0x1f, 0x83, 0x12, 0x43, 0x16, 0x00, 0x20, 0xdc, 0x0c, 0xa7, 0x93, + 0x04, 0xa7, 0x0a, 0xa3, 0x40, 0x5d, 0xc2, 0x20, 0x8b, 0x50, 0x02, 0x63, + 0x1a, 0xe3, 0x30, 0x1f, 0xde, 0x0e, 0xeb, 0xa1, 0x00, 0x1f, 0x30, 0x00, + 0x27, 0x30, 0xc2, 0xe7, 0x38, 0x42, 0xbf, 0x4c, 0x34, 0x12, 0xdf, 0x40, + 0xc2, 0x32, 0xdf, 0x13, 0x8f, 0x10, 0xce, 0xa2, 0x0c, 0xef, 0xcc, 0x0c, + 0xf3, 0xc2, 0xe5, 0x10, 0x42, 0xc7, 0x68, 0xad, 0x00, 0x87, 0xe4, 0x40, + 0x83, 0xec, 0x0f, 0x07, 0x13, 0x93, 0x4c, 0x1f, 0x0e, 0xe0, 0x13, 0x5b, + 0x05, 0xa3, 0x15, 0xcb, 0x41, 0xfb, 0xff, 0xeb, 0x40, 0xa9, 0x05, 0x63, + 0x08, 0x0f, 0x7f, 0x80, 0x05, 0x6b, 0x03, 0x30, 0x0e, 0x87, 0xf0, 0x0f, + 0x07, 0x04, 0xbf, 0x05, 0xeb, 0x75, 0xd3, 0x01, 0x30, 0x10, 0xe2, 0x6c, + 0xf9, 0x12, 0x2b, 0x00, 0x1f, 0xf7, 0x0f, 0x5b, 0x1b, 0x93, 0x38, 0xa3, + 0x8d, 0x01, 0x2b, 0x00, 0x40, 0xe2, 0x1f, 0x53, 0x12, 0xbb, 0x0a, 0x11, + 0x13, 0x00, 0xf1, 0x8f, 0x90, 0x2c, 0x00, 0x00, 0xea, 0x48, 0xaa, 0x00, + 0x03, 0x2d, 0x00, 0x07, 0xb2, 0x00, 0x0b, 0x96, 0x00, 0x0f, 0x89, 0xad, + 0x00, 0x13, 0x7b, 0x00, 0x17, 0x78, 0x00, 0x1b, 0x02, 0xe3, 0xea, 0x0f, + 0x6b, 0x30, 0xea, 0x3f, 0x00, 0x27, 0x04, 0x2a, 0xea, 0xf4, 0x02, 0x9f, + 0x1c, 0xe5, 0xf4, 0xb2, 0x03, 0xaf, 0x11, 0xb7, 0x2f, 0x9b, 0xd3, 0xe5, + 0x02, 0x02, 0x3c, 0x81, 0xe2, 0x82, 0x24, 0x06, 0x63, 0x30, 0x54, 0x82, + 0x0d, 0xd7, 0x82, 0x04, 0x3b, 0x52, 0x05, 0x9f, 0x00, 0x2a, 0x89, 0x14, + 0x7b, 0x04, 0x10, 0x82, 0x0e, 0x7f, 0x53, 0xe1, 0x0e, 0x47, 0x18, 0x8a, + 0x00, 0x40, 0x13, 0x87, 0x11, 0x03, 0xd4, 0xe5, 0x81, 0x09, 0x04, 0x80, + 0xe0, 0xc3, 0x00, 0xcf, 0xac, 0x32, 0x13, 0xdb, 0x60, 0xd4, 0x33, 0xfb, + 0x0f, 0x6b, 0x01, 0x22, 0x82, 0xe0, 0x06, 0xd5, 0x1f, 0x6f, 0x0b, 0xf3, + 0x0c, 0x0b, 0xf7, 0x04, 0x0b, 0xfb, 0x09, 0x0b, 0xff, 0x55, 0x0d, 0x0c, + 0x03, 0x05, 0x0c, 0x07, 0x0a, 0x0c, 0x0b, 0x0e, 0x10, 0x1b, 0xa5, 0x87, + 0x23, 0x6c, 0x00, 0x43, 0x5c, 0x22, 0x04, 0x2b, 0x60, 0x03, 0x83, 0xae, + 0x00, 0x63, 0x04, 0x08, 0xf7, 0x00, 0x0f, 0x6b, 0x10, 0x67, 0x1c, 0x33, + 0xfe, 0xb8, 0x01, 0x37, 0x44, 0x00, 0xb7, 0x0e, 0x56, 0x03, 0xbf, 0xd4, + 0xe5, 0x08, 0x00, 0x00, 0x80, 0xe2, 0x03, 0x02, 0x80, 0xe0, 0x05, 0x80, + 0x29, 0xa3, 0x96, 0xe5, 0x5d, 0xfe, 0xff, 0xeb, 0xea, 0xb5, 0x02, 0x77, + 0x24, 0x00, 0x8b, 0x14, 0xb7, 0x10, 0x10, 0x93, 0x00, 0x44, 0x8f, 0xae, + 0x0b, 0x93, 0x0f, 0x01, 0x77, 0xe2, 0x16, 0xd3, 0x10, 0x1f, 0x05, 0x17, + 0xed, 0x08, 0xfa, 0xff, 0xeb, 0xde, 0x02, 0xa7, 0xec, 0xb1, 0x9f, 0xdd, + 0x02, 0xd7, 0x03, 0xf7, 0x1c, 0x0c, 0x0b, 0x02, 0xdb, 0x20, 0xf3, 0x20, + 0x00, 0xf3, 0x31, 0x20, 0x83, 0x0a, 0xbb, 0x20, 0xf3, 0x3a, 0xcc, 0x31, + 0x04, 0xc3, 0x52, 0x90, 0x01, 0xf7, 0x70, 0x0c, 0x7f, 0x80, 0xe0, 0x0c, + 0xb7, 0x87, 0xa0, 0x03, 0xa7, 0x87, 0x01, 0x17, 0x87, 0xe3, 0x09, 0x00, + 0x87, 0x00, 0xe3, 0x0d, 0xc0, 0x87, 0xe3, 0x05, 0xe0, 0x87, 0x00, 0xe3, + 0x0a, 0x40, 0x87, 0xe3, 0x0e, 0x50, 0x87, 0x0a, 0xe3, 0x06, 0x60, 0x87, + 0x0f, 0x13, 0x87, 0x05, 0x67, 0x57, 0x02, 0xe3, 0x03, 0x80, 0xc9, 0xe7, + 0x02, 0x00, 0x03, 0x01, 0xaa, 0x00, 0x07, 0x00, 0x00, 0x0b, 0x0c, 0x00, + 0x0f, 0x0e, 0x00, 0x13, 0x04, 0xac, 0x00, 0x17, 0x05, 0x00, 0x1b, 0x06, + 0x00, 0x1f, 0x00, 0xb7, 0x1a, 0x0b, 0xed, 0x01, 0x57, 0x14, 0x0f, 0x18, + 0x23, 0x6e, 0x00, 0xab, 0x18, 0x2b, 0x01, 0x04, 0x1f, 0x65, 0x6b, 0x40, + 0x0b, 0x08, 0x03, 0xe3, 0x68, 0x40, 0x17, 0x03, 0x04, 0x37, 0x56, 0x65, + 0x00, 0xcf, 0x09, 0x07, 0x1f, 0x2f, 0x11, 0x7f, 0x03, 0x6f, 0xa1, 0xa9, + 0x00, 0xdf, 0xaa, 0x03, 0x77, 0x18, 0x00, 0xab, 0x1c, 0x21, 0x05, 0x73, + 0xae, 0x01, 0xd7, 0x10, 0x00, 0xb7, 0x02, 0x15, 0xc3, 0x07, 0x8f, 0x16, + 0x0b, 0x08, 0xab, 0x0c, 0xa7, 0x0c, 0x08, 0x4b, 0x8c, 0x01, 0xb7, 0x0c, + 0x01, 0xa3, 0x18, 0x93, 0x56, 0x9d, 0x03, 0xab, 0xe4, 0x06, 0x2f, 0xe8, + 0x13, 0x03, 0x06, 0x2f, 0xe8, 0xf8, 0x06, 0x3b, 0x20, 0x33, 0x0c, 0x4f, + 0x13, 0x33, 0x10, 0x33, 0x00, 0x00, 0x9c, 0x55, 0xe5, 0x11, 0xd3, 0x78, + 0x08, 0xbb, 0x91, 0x03, 0xdb, 0xbc, 0x15, 0xd3, 0xd0, 0x2e, 0x13, 0x1d, + 0xc3, 0x8c, 0x07, 0x7b, 0xde, 0xe7, 0x0c, 0x20, 0x51, 0x8c, 0x02, 0x27, + 0x8c, 0x05, 0x17, 0xce, 0xe7, 0x01, 0x00, 0x03, 0x55, 0x09, 0x40, 0x17, + 0x0d, 0x00, 0x17, 0x05, 0x80, 0x17, 0x0a, 0x10, 0x2f, 0x0a, 0x20, 0xde, + 0xe7, 0x0e, 0x00, 0x2b, 0x06, 0x00, 0x3b, 0x10, 0x20, 0xc0, 0x8c, 0x06, + 0x8f, 0x5c, 0xe3, 0x01, 0x20, 0xce, 0xaa, 0x04, 0x03, 0xce, 0x21, 0x0b, + 0x0e, 0x07, 0xf7, 0xf9, 0x01, 0x9f, 0x76, 0xd9, 0x04, 0x47, 0x14, 0x1f, + 0x48, 0x13, 0x9f, 0x02, 0x77, 0x02, 0x50, 0x16, 0x8f, 0x0e, 0xd4, 0xe5, + 0x04, 0x60, 0x02, 0x1b, 0x09, 0x13, 0x1d, 0xa7, 0x80, 0x09, 0x04, 0x85, + 0xe0, 0x77, 0x01, 0xdb, 0x28, 0x00, 0xb2, 0x1b, 0x0c, 0x83, 0x24, 0x85, + 0xe0, 0x12, 0x1f, 0x1b, 0xc3, 0xd6, 0xfd, 0x13, 0xff, 0xeb, 0x63, 0x04, + 0x93, 0x98, 0x32, 0x00, 0x3d, 0x03, 0x8f, 0x6a, 0xac, 0x03, 0x93, 0x16, + 0x1b, 0xa4, 0x03, 0x9b, 0x18, 0x16, 0x23, 0x47, 0x16, 0x2d, 0xe9, 0xdc, + 0x07, 0x37, 0xdc, 0x57, 0x37, 0x02, 0xe3, 0xd4, 0x88, 0x46, 0xb7, 0xb0, + 0x00, 0xd4, 0x0f, 0xa3, 0x92, 0xe5, 0x20, 0x43, 0x02, 0x09, 0x83, 0x05, + 0x81, 0xe0, 0x35, 0x02, 0x67, 0x19, 0x53, 0x51, 0x1a, 0x08, 0x8b, 0x67, + 0x02, 0x73, 0x00, 0x90, 0x50, 0x0b, 0xab, 0x15, 0x00, 0x1a, 0xa8, 0x46, + 0xe7, 0x0b, 0x0d, 0xff, 0xab, 0x05, 0x47, 0x88, 0x03, 0x6f, 0x0a, 0xf0, + 0x47, 0x37, 0x9f, 0xb0, 0x30, 0xd4, 0x2a, 0xe1, 0x8c, 0x06, 0xc7, 0x0f, + 0x08, 0x8b, 0x02, 0x03, 0x6f, 0x43, 0x91, 0x1f, 0xe3, 0x30, 0xc1, 0x02, + 0x87, 0x80, 0xe2, 0x08, 0x08, 0xd3, 0x54, 0x74, 0x47, 0x23, 0x70, 0x17, + 0x43, 0x80, 0x07, 0x43, 0x70, 0x9a, 0x2a, 0xe7, 0x68, 0x06, 0xf7, 0x68, + 0x25, 0x27, 0xd4, 0x0c, 0xcf, 0x9a, 0x80, 0x25, 0x1f, 0x0f, 0x10, 0x01, + 0xe2, 0x81, 0x53, 0x82, 0x22, 0xe0, 0x09, 0x09, 0x0f, 0xb5, 0x30, 0x94, + 0x0c, 0x9b, 0x97, 0x20, 0xe5, 0x03, 0x0a, 0x17, 0x00, 0x10, 0xd6, 0xe5, + 0x23, 0x00, 0x04, 0x80, 0xe1, 0x00, 0x08, 0x62, 0xe0, 0x81, 0x00, 0x15, + 0xa0, 0xe1, 0x3b, 0x0b, 0x00, 0xeb, 0x84, 0x22, 0x00, 0x88, 0x03, 0x47, + 0x84, 0xe2, 0x80, 0x09, 0x1b, 0xf3, 0xc5, 0x05, 0xbf, 0x05, 0xd7, 0xea, + 0x3c, 0x2f, 0x35, 0x27, 0xf8, 0x40, 0xff, 0xfa, 0x11, 0x0b, 0x17, 0x77, + 0x17, 0x73, 0x17, 0x7b, 0x11, 0x17, 0xf0, 0x05, 0x3b, 0x84, 0x96, 0x08, + 0x43, 0x84, 0x60, 0x35, 0x37, 0x06, 0x15, 0x33, 0x05, 0x2f, 0x78, 0xb8, + 0x07, 0x87, 0x78, 0x12, 0x1b, 0x01, 0x83, 0x10, 0x9f, 0x01, 0x46, 0x41, + 0x95, 0x1c, 0xcb, 0xea, 0xf1, 0x01, 0x5b, 0x0a, 0x06, 0x2f, 0xd6, 0x03, + 0x7f, 0x70, 0x23, 0x11, 0x0f, 0x0b, 0x47, 0x06, 0x57, 0x1a, 0x0b, 0x30, + 0xd7, 0xb0, 0x01, 0x07, 0x53, 0x03, 0x1f, 0x17, 0x57, 0xd5, 0xe5, 0x83, + 0x45, 0x40, 0x84, 0x30, 0x4b, 0x20, 0x93, 0xe5, 0x02, 0x00, 0x54, 0x55, + 0xe1, 0x1b, 0x0b, 0xef, 0x46, 0x6b, 0xf0, 0x48, 0x07, 0x1c, 0x48, 0x2b, + 0x82, 0x1a, 0xb3, 0x00, 0x40, 0x82, 0xe5, 0xf8, 0x06, 0x47, 0x30, 0x7d, + 0x2e, 0x70, 0x9f, 0x17, 0xcf, 0x10, 0xbb, 0xf8, 0x7f, 0x58, 0x7f, 0xd2, + 0x75, 0xab, 0xe1, 0x1d, 0xbb, 0x0f, 0x9b, 0x21, 0x93, 0xc0, 0xc2, 0xe5, + 0xd1, 0x02, 0x03, 0x55, 0xe9, 0x02, 0x07, 0x08, 0x06, 0xdb, 0xab, 0x04, + 0x2b, 0x9a, 0x11, 0xbb, 0xbd, 0x48, 0x7f, 0x8c, 0x05, 0x38, 0x15, 0xaf, + 0x15, 0xbb, 0x58, 0x33, 0x20, 0x08, 0x33, 0xde, 0x16, 0xcf, 0x19, 0x47, + 0x01, 0x07, 0xaf, 0x18, 0x2b, 0x03, 0xff, 0x13, 0x87, 0xe1, 0x6a, 0x3d, + 0x17, 0xfb, 0x05, 0x1f, 0x3b, 0x05, 0x1f, 0xfc, 0x01, 0x17, 0x04, 0x82, + 0x1e, 0x13, 0x20, 0x61, 0xe0, 0x04, 0x30, 0x0c, 0x4f, 0xb0, 0x12, 0x9a, + 0xe7, 0xec, 0x23, 0x43, 0x81, 0xe0, 0x24, 0x33, 0xb0, 0xc2, 0x0d, 0xf7, + 0x0a, 0xb3, 0xff, 0x60, 0x02, 0xe2, 0x14, 0xab, 0x07, 0xb7, 0x0a, 0xd3, + 0xae, 0x02, 0x8f, 0x1b, 0x97, 0x89, 0x04, 0xb3, 0x12, 0x9b, 0x17, 0x37, + 0x7d, 0x24, 0x27, 0xab, 0x1c, 0x8f, 0x18, 0x9f, 0x09, 0xb3, 0x05, 0x23, + 0x0b, 0x0a, 0xf7, 0x9d, 0x0a, 0xd7, 0xe3, 0x7f, 0x12, 0x67, 0x04, 0xf3, + 0x1f, 0x8b, 0xff, 0x0a, 0xcf, 0x45, 0x03, 0x1e, 0x6b, 0x30, 0xc4, 0xe5, + 0x06, 0x17, 0x9a, 0x00, 0xcf, 0x8d, 0x0f, 0x47, 0xa0, 0xe1, 0x99, 0x02, + 0xe3, 0x30, 0x37, 0xc4, 0x0b, 0x83, 0xdb, 0x07, 0xe7, 0x07, 0xc3, 0x71, + 0xf0, 0x37, 0x60, 0x37, 0x4c, 0x49, 0x97, 0x15, 0x1b, 0x06, 0x0b, 0x10, + 0xc9, 0xe5, 0xa2, 0x03, 0x23, 0x0c, 0x9f, 0xe3, 0x58, 0x64, 0x05, 0x47, + 0x53, 0x41, 0xc7, 0x12, 0xd7, 0x01, 0x30, 0x85, 0x80, 0x0b, 0xb3, 0x03, + 0xe2, 0x06, 0x00, 0x55, 0xe1, 0xce, 0xdf, 0x48, 0x1b, 0x95, 0xb7, 0x2c, + 0x06, 0x74, 0x13, 0x53, 0x19, 0x6b, 0x16, 0xf3, 0x12, 0x3f, 0x74, 0xa8, + 0x0a, 0x83, 0x13, 0x0f, 0x5a, 0x83, 0xa0, 0x02, 0x3b, 0xb0, 0x30, 0x45, + 0xd0, 0x04, 0xc3, 0x9a, 0xe7, 0x98, 0x23, 0xcb, 0xd1, 0x23, 0xcb, 0x55, + 0x01, 0x19, 0x03, 0x60, 0x1d, 0x37, 0x95, 0x0d, 0x87, 0xd4, 0x07, 0xf3, + 0x70, 0x52, 0x24, 0xff, 0x19, 0x17, 0x0b, 0x40, 0x0a, 0x01, 0x20, 0x84, + 0x00, 0xe2, 0xb0, 0x30, 0xd6, 0xe1, 0xff, 0x40, 0x02, 0xf2, 0x07, 0xff, + 0x0b, 0xe3, 0x08, 0xdb, 0x0c, 0x0b, 0x83, 0x04, 0x06, 0x9b, 0xf1, 0xac, + 0x08, 0x93, 0xff, 0x82, 0x3b, 0x59, 0x03, 0xe3, 0x01, 0x5b, 0xe3, 0x34, + 0x80, 0x82, 0x87, 0x00, 0x20, 0x95, 0x15, 0x01, 0x30, 0xe0, 0x06, 0x13, + 0x02, 0x30, 0xc4, 0x17, 0x1b, 0xff, 0x20, 0x67, 0x00, 0x04, 0xc4, 0xe7, + 0xb0, 0x20, 0xd6, 0x22, 0x7f, 0x02, 0x40, 0x15, 0xc7, 0xe7, 0xee, 0x17, + 0x5b, 0x2b, 0xb8, 0x3f, 0x30, 0x1c, 0xcf, 0xfa, 0x0c, 0x67, 0x2d, 0x7b, + 0x08, 0x27, 0x19, 0xa7, 0x1c, 0x7f, 0x40, 0x40, 0x63, 0x1b, 0xa4, 0x06, + 0x6b, 0x0a, 0x14, 0x07, 0x30, 0x44, 0x2e, 0x37, 0xff, 0x40, 0x7b, 0x03, + 0x06, 0x3b, 0x18, 0xa7, 0x33, 0x6b, 0x1d, 0x9b, 0x30, 0x4c, 0x83, 0x14, + 0x5b, 0x5e, 0xf0, 0x0b, 0x93, 0xf0, 0x5b, 0x93, 0x03, 0xdb, 0x15, 0x6b, + 0x25, 0x67, 0x80, 0xf6, 0x03, 0xd7, 0x06, 0xef, 0x1c, 0xd3, 0x90, 0x67, + 0x26, 0x43, 0x53, 0x0d, 0x84, 0xeb, 0x5a, 0x4e, 0x04, 0xbb, 0xfe, 0x0e, + 0x9b, 0x1c, 0xff, 0x06, 0x21, 0x8f, 0x44, 0x6f, 0xe2, 0x10, 0x6f, 0x10, + 0x6b, 0xf2, 0x09, 0x97, 0x1a, 0xa3, 0x54, 0x67, 0x14, 0x07, 0x06, 0x0b, + 0x90, 0xd7, 0xe5, 0x16, 0x43, 0x93, 0x13, 0x9b, 0x3e, 0xb1, 0x40, 0x3f, + 0xf0, 0x0a, 0x77, 0x13, 0x93, 0x03, 0x00, 0x59, 0x0a, 0x6f, 0x92, 0x19, + 0x53, 0x53, 0xe3, 0x23, 0x7f, 0x30, 0xd8, 0x2b, 0x0b, 0x0d, 0xdb, 0x0a, + 0x0b, 0x1d, 0x63, 0xbf, 0x1d, 0x63, 0x0f, 0x0b, 0xe8, 0x41, 0x5f, 0x0d, + 0x27, 0x03, 0xea, 0xff, 0x00, 0x59, 0xe3, 0xfb, 0x0a, 0xb7, 0x59, 0x0b, + 0xc1, 0x1b, 0xc7, 0x1e, 0x43, 0x01, 0x50, 0xc9, 0xe7, 0xdf, 0x17, 0x73, + 0xa0, 0x4b, 0xe3, 0xfa, 0x19, 0x93, 0x90, 0xc2, 0xe5, 0x00, 0x50, 0x13, + 0xc8, 0xe5, 0xd9, 0x0a, 0x03, 0xe0, 0x2a, 0x3b, 0x83, 0x19, 0x13, 0x70, + 0xbc, 0x49, 0x0f, 0x22, 0x23, 0x08, 0xcb, 0x94, 0xac, 0x9f, 0xe5, 0x32, + 0x94, 0x3c, 0x49, 0x9b, 0x17, 0x5b, 0x20, 0xd9, 0x05, 0xbf, 0x52, 0x20, + 0xe3, 0x5c, 0x0e, 0xef, 0x0b, 0x01, 0x00, 0x1a, 0x7c, 0xc8, 0x00, 0x1b, + 0x25, 0x7f, 0xb0, 0xd2, 0x03, 0xc7, 0x5b, 0xe3, 0xb7, 0x8c, 0x0a, 0xab, + 0x6c, 0xcc, 0x9f, 0x08, 0x4f, 0x05, 0x93, 0x20, 0xd3, 0x20, 0xe1, 0x0b, + 0x08, 0x9f, 0x0c, 0xc0, 0x8d, 0xe5, 0x51, 0x03, 0x02, 0x00, 0x0a, 0x58, + 0xec, 0x9f, 0x08, 0x4f, 0x70, 0x17, 0x00, 0x08, 0xe0, 0x8d, 0xe5, 0x95, + 0x01, 0x00, 0x0a, 0x5f, 0x44, 0x00, 0x2f, 0x14, 0x00, 0x23, 0x10, 0x33, + 0x18, 0xe3, 0x10, 0x5f, 0x09, 0x08, 0x02, 0x1a, 0x30, 0x2c, 0x9f, 0xe5, + 0x30, 0x00, 0x7b, 0x30, 0x90, 0x00, 0x37, 0x30, 0x0c, 0x00, 0x0b, 0x1c, + 0x9f, 0xe5, 0x18, 0x83, 0x03, 0xc3, 0x1c, 0x30, 0x8d, 0xe5, 0x10, 0x00, + 0x3b, 0x1b, 0x7b, 0x01, 0x00, 0x10, 0x8d, 0xe5, 0x18, 0xc0, 0x9d, 0x20, + 0x57, 0x11, 0x1c, 0xe0, 0x9d, 0x0c, 0x63, 0x9a, 0xe7, 0x0c, 0x08, 0x37, + 0x4d, 0x0e, 0x07, 0x13, 0x00, 0xe0, 0x00, 0x4b, 0x00, 0xbb, 0x01, 0x19, + 0x3b, 0x49, 0x40, 0x34, 0x73, 0xf4, 0x3b, 0x0c, 0xff, 0x50, 0xd1, 0x6a, + 0x23, 0x65, 0xe8, 0x10, 0x0f, 0x0f, 0x13, 0x00, 0x50, 0x3a, 0x33, 0xdc, + 0x10, 0x1f, 0x52, 0x10, 0x0a, 0x7b, 0x60, 0x4a, 0x43, 0x00, 0x5e, 0x0d, + 0x97, 0xc2, 0x29, 0xe5, 0xe9, 0x00, 0xeb, 0xc4, 0x00, 0x3b, 0xc4, 0x2b, + 0x38, 0xfb, 0x51, 0xc0, 0x00, 0x47, 0x20, 0x24, 0x4f, 0x9a, 0xe7, 0xb8, + 0x10, 0x53, 0x55, 0x70, 0x34, 0xd3, 0xb0, 0x10, 0x5f, 0x80, 0x34, 0xdf, + 0xa8, 0x10, 0x6b, 0x0b, 0x20, 0xd2, 0xe5, 0x30, 0x40, 0x27, 0x08, 0x04, + 0x77, 0x10, 0x0f, 0x55, 0x03, 0x0b, 0x87, 0x10, 0x00, 0xb3, 0x20, 0x00, + 0xaf, 0x0c, 0x07, 0xbb, 0x05, 0x04, 0x10, 0x9d, 0xe5, 0x2c, 0x04, 0x9b, + 0x28, 0x00, 0xd7, 0x05, 0x00, 0x20, 0x9d, 0xe5, 0x18, 0x04, 0x9f, 0x0e, + 0x08, 0xfb, 0xd5, 0x27, 0x4b, 0x0a, 0xef, 0x24, 0x01, 0x3f, 0x60, 0x00, + 0xb7, 0x01, 0x07, 0xe7, 0x57, 0x5c, 0x00, 0x7f, 0x1c, 0x00, 0x2f, 0x01, + 0x15, 0xdf, 0x0a, 0x13, 0x1d, 0x6f, 0x44, 0x4c, 0x00, 0x93, 0x00, 0x10, + 0x83, 0x0f, 0xcb, 0x9a, 0xe7, 0x48, 0x44, 0x10, 0x0b, 0x30, 0x80, 0x20, + 0x0b, 0x00, 0x30, 0x86, 0xcd, 0x00, 0x97, 0x0a, 0xfb, 0x80, 0xce, 0x00, + 0x83, 0x11, 0x1b, 0xc4, 0x0e, 0x73, 0x85, 0x01, 0x23, 0x30, 0xc5, 0xe5, + 0x28, 0x01, 0x33, 0x24, 0x01, 0x2f, 0x44, 0x01, 0x0a, 0xb7, 0xb0, 0xb0, + 0xcc, 0x0c, 0x57, 0xce, 0xe5, 0x70, 0x48, 0x08, 0x67, 0x10, 0x8b, 0x30, + 0x83, 0x8d, 0xe2, 0x08, 0x40, 0x15, 0x93, 0xe8, 0x01, 0x09, 0x83, 0x02, + 0x08, 0x5f, 0x0e, 0x0a, 0x7f, 0xf1, 0x2e, 0x67, 0x13, 0x67, 0x0a, 0x3b, + 0x14, 0xf7, 0x00, 0x30, 0xc0, 0x0a, 0x9b, 0x84, 0x0b, 0x5b, 0x40, 0xc1, + 0xe5, 0x17, 0x09, 0xd7, 0xa4, 0x3a, 0xa0, 0x3a, 0x17, 0x04, 0x15, 0x47, + 0x00, 0x05, 0xe2, 0x00, 0x40, 0x10, 0x96, 0xe5, 0x28, 0x02, 0xa7, 0x04, + 0x00, 0xc5, 0xe7, 0xcb, 0x0f, 0x7f, 0x0e, 0xcf, 0x55, 0xe3, 0x06, 0x2b, + 0x1a, 0x1c, 0xdf, 0x1a, 0xd3, 0xd5, 0x1a, 0xcf, 0x14, 0x4b, 0x23, 0x0c, + 0xdf, 0x18, 0x01, 0x03, 0x20, 0x05, 0x97, 0x64, 0x01, 0x0e, 0x77, 0x19, + 0x13, 0x80, 0x5a, 0x36, 0x27, 0x00, 0x30, 0x13, 0x91, 0xe5, 0x05, 0x11, + 0x0b, 0x10, 0xdc, 0x09, 0x1f, 0x01, 0xdf, 0x0b, 0xe0, 0xd0, 0xe5, 0x0c, + 0x81, 0x97, 0x14, 0x1f, 0xc3, 0x0c, 0x23, 0xf1, 0x0b, 0x8f, 0x22, 0x5b, + 0x0f, 0xdb, 0x06, 0x4f, 0xd3, 0xe5, 0x3f, 0x09, 0x33, 0xac, 0x13, 0x5b, + 0x1a, 0x08, 0x53, 0x67, 0x09, 0x3f, 0x15, 0x27, 0x1c, 0x00, 0x00, 0x9d, + 0x05, 0x01, 0x30, 0x84, 0xe2, 0x01, 0x10, 0x20, 0x84, 0xe2, 0x0b, 0x53, + 0x07, 0xff, 0x40, 0x01, 0x02, 0x81, 0x04, 0x13, 0x12, 0x00, 0x40, 0xc3, + 0x05, 0x05, 0x42, 0x7b, 0xce, 0x14, 0xb3, 0x04, 0x83, 0x8a, 0x14, 0x11, + 0x63, 0x2e, 0x47, 0x35, 0xe3, 0x5c, 0x93, 0x8b, 0x03, 0x94, 0x39, 0x3a, + 0x9b, 0x00, 0x20, 0x02, 0x37, 0x0f, 0xe3, 0x9a, 0x0b, 0xf7, 0x0a, 0x8c, + 0x10, 0x13, 0x4a, 0xc3, 0x00, 0x0d, 0x9f, 0x00, 0x09, 0xb0, 0xc0, 0xe5, + 0xc0, 0x0d, 0xb7, 0x7c, 0xc9, 0x08, 0x1f, 0x09, 0xe9, 0x9f, 0xe5, 0x70, + 0x00, 0x33, 0x64, 0x09, 0x06, 0x83, 0xb7, 0x02, 0xbb, 0x1c, 0x12, 0xb7, + 0x03, 0x13, 0x18, 0x02, 0xff, 0x12, 0x0b, 0x20, 0xcf, 0x0c, 0xc0, 0xd3, + 0xe5, 0x6c, 0x00, 0x57, 0x11, 0x67, 0x00, 0xe0, 0xad, 0x37, 0x1f, 0x60, + 0x00, 0x67, 0x00, 0x07, 0x13, 0x13, 0xb3, 0x58, 0x10, 0x0b, 0x5f, 0x40, + 0x02, 0xb7, 0xe0, 0x03, 0xb7, 0x12, 0x1b, 0x1d, 0x93, 0x20, 0x13, 0x13, + 0xc7, 0xeb, 0x0a, 0x03, 0x12, 0xab, 0x02, 0xc3, 0x10, 0x40, 0x87, 0x0c, + 0x20, 0x2f, 0x37, 0x67, 0x48, 0x04, 0x10, 0x47, 0x60, 0xd2, 0x03, 0x3b, + 0x9d, 0xe5, 0x02, 0xd9, 0x08, 0xb3, 0x14, 0x03, 0x1c, 0x17, 0x03, 0x0d, + 0x4b, 0xec, 0x38, 0x07, 0x17, 0xde, 0x11, 0x8f, 0x47, 0x93, 0x00, 0x11, + 0xff, 0x04, 0xef, 0x20, 0x33, 0x07, 0x97, 0xec, 0x6d, 0x28, 0x0d, 0xf7, + 0x82, 0x6b, 0xf0, 0x00, 0x0f, 0x12, 0x6b, 0xbc, 0x00, 0x37, 0xd0, 0x19, + 0x23, 0x14, 0x4f, 0xe0, 0x00, 0x43, 0x00, 0x10, 0x82, 0xe5, 0x62, 0xa4, + 0x00, 0x2b, 0x52, 0x93, 0x00, 0x40, 0xc8, 0x22, 0x93, 0x00, 0x28, 0x60, + 0xc5, 0x00, 0xeb, 0xc7, 0x00, 0x4b, 0xce, 0xe5, 0xad, 0xb0, 0x0e, 0x6f, + 0x80, 0x00, 0x6f, 0x12, 0xff, 0x60, 0x18, 0x9f, 0xe5, 0x4c, 0x54, 0x01, + 0x0b, 0x74, 0x08, 0x0e, 0x73, 0x00, 0x63, 0x44, 0xc8, 0xb6, 0x08, 0x27, + 0xe8, 0x0d, 0xe3, 0x00, 0x8f, 0x20, 0x13, 0xd7, 0x07, 0xab, 0x04, 0xf6, + 0x23, 0xdb, 0x03, 0xef, 0x11, 0x27, 0x09, 0x77, 0x38, 0x10, 0x67, 0x41, + 0x1b, 0x30, 0xaf, 0x10, 0x73, 0xb0, 0x38, 0x47, 0x28, 0x10, 0x7f, 0x48, + 0x53, 0x10, 0xd7, 0x13, 0x73, 0x69, 0x00, 0x0f, 0x43, 0x1c, 0xa3, 0x50, + 0x07, 0xf3, 0xf0, 0x37, 0x13, 0xab, 0xf7, 0x03, 0x33, 0x09, 0xaf, 0x12, + 0x67, 0x10, 0xdf, 0x02, 0x41, 0x43, 0x13, 0x47, 0x1b, 0xbf, 0xcb, 0x2e, + 0x1f, 0x01, 0x0b, 0xfc, 0x27, 0x70, 0xc3, 0x04, 0x40, 0xeb, 0x33, 0x4b, + 0x1b, 0x80, 0xe5, 0x9c, 0x00, 0x47, 0x15, 0x3f, 0x8c, 0x00, 0x4f, 0x23, + 0x07, 0x28, 0x40, 0xc9, 0x64, 0x47, 0x7c, 0x00, 0x63, 0xb0, 0x40, 0xc2, + 0xad, 0x2f, 0x2b, 0xd0, 0x00, 0x6f, 0x54, 0x21, 0x53, 0x00, 0xfb, 0xe0, + 0x00, 0xfb, 0x0c, 0xb0, 0xc8, 0xe5, 0x50, 0x03, 0xe3, 0x50, 0x1f, 0x00, + 0x10, 0x47, 0xc6, 0x03, 0xe7, 0x80, 0xe5, 0x6c, 0x0c, 0xeb, 0x33, 0x4b, + 0x01, 0x23, 0x50, 0x40, 0x00, 0x13, 0x30, 0x01, 0x27, 0x30, 0xc8, 0xe5, + 0x44, 0x85, 0x0b, 0x07, 0x54, 0x60, 0x9d, 0xe5, 0x93, 0x47, 0x56, 0x0d, + 0x37, 0xed, 0xe3, 0x47, 0x11, 0xcf, 0x83, 0x47, 0x55, 0x0e, 0x87, 0x14, + 0x3b, 0x20, 0x05, 0x0f, 0x3f, 0x40, 0x57, 0x42, 0x07, 0x0e, 0x37, 0x13, + 0x3f, 0x23, 0x4b, 0x03, 0x3b, 0x13, 0x4f, 0xef, 0x21, 0x1b, 0x13, 0x4f, + 0x84, 0xdf, 0x46, 0x0e, 0xc3, 0x23, 0x47, 0x14, 0x5b, 0x83, 0x47, 0x76, + 0x6d, 0x0d, 0x8f, 0x16, 0xa3, 0x14, 0x1b, 0x95, 0x10, 0xaf, 0x13, 0x47, + 0x20, 0xf4, 0x73, 0x47, 0x04, 0x67, 0xf3, 0x47, 0x83, 0x47, 0x30, 0x0c, + 0x1b, 0x74, 0x16, 0xab, 0x03, 0x03, 0xc6, 0x03, 0x03, 0x26, 0x0e, 0x3b, + 0x36, 0x03, 0x03, 0x15, 0xb3, 0xf7, 0x24, 0xeb, 0x05, 0xcb, 0x04, 0xdb, + 0x10, 0x6f, 0x18, 0x05, 0xbb, 0x1d, 0x03, 0x15, 0xbb, 0xb6, 0x13, 0x0b, + 0x90, 0x00, 0x27, 0x93, 0x0b, 0x84, 0x00, 0x37, 0x53, 0x0b, 0x7c, 0xfa, + 0x10, 0x0b, 0x43, 0x0b, 0x2b, 0x8f, 0x20, 0x0f, 0xb3, 0x07, 0x3c, 0x0c, + 0x93, 0xf8, 0x0d, 0x05, 0x9f, 0xe5, 0x10, 0x13, 0x6b, 0x86, 0x57, 0x4d, + 0x06, 0x6f, 0x3d, 0xd4, 0x15, 0x06, 0x6f, 0x06, 0x37, 0x10, 0xe7, 0x56, + 0x6f, 0x06, 0x0c, 0xcf, 0x02, 0xd0, 0xc5, 0x9f, 0xe5, 0xbc, 0xe5, 0x05, + 0xe3, 0x35, 0x1d, 0x9f, 0xe5, 0xb8, 0x00, 0x3b, 0xf3, 0xab, 0x73, 0xab, + 0xa8, 0x00, 0x23, 0xb6, 0x93, 0xab, 0x9c, 0x00, 0x33, 0x53, 0xab, 0x94, + 0x10, 0x0b, 0xc3, 0xab, 0x84, 0xfa, 0x20, 0x13, 0xb3, 0xab, 0x23, 0x77, + 0x15, 0x6f, 0x0e, 0xe7, 0x70, 0x00, 0x73, 0x48, 0xed, 0x00, 0x6b, 0x2b, + 0x57, 0x0f, 0xeb, 0x64, 0x10, 0x4f, 0x02, 0xdf, 0x44, 0x06, 0xdf, 0xfd, + 0x23, 0xff, 0x20, 0x5f, 0x43, 0xc3, 0x03, 0xb7, 0x63, 0xc3, 0x0b, 0xe7, + 0x40, 0x20, 0x6f, 0xe9, 0x3b, 0x53, 0x14, 0xb7, 0x13, 0xeb, 0x30, 0x00, + 0xc3, 0x30, 0x25, 0x06, 0x33, 0xde, 0x18, 0xbb, 0x46, 0x27, 0x24, 0x00, + 0x0f, 0x23, 0x93, 0x00, 0xdf, 0x53, 0xbb, 0x14, 0xca, 0x10, 0xb7, 0x03, + 0xbb, 0xe8, 0x24, 0x73, 0xbb, 0x48, 0x06, 0x83, 0x10, 0xbb, 0x15, 0xa3, + 0xb0, 0x08, 0x23, 0x0c, 0xe3, 0x16, 0x5b, 0x44, 0x15, 0x9b, 0x1b, 0xef, + 0x2a, 0xc0, 0xc3, 0x07, 0x3b, 0xce, 0x33, 0xd7, 0x00, 0x03, 0xe3, 0x00, + 0x00, 0xc7, 0xe5, 0xb7, 0xfe, 0xff, 0xea, 0x8c, 0x04, 0xa0, 0xf1, 0x6b, + 0xd3, 0x08, 0xab, 0x78, 0x14, 0x9f, 0xe5, 0x6c, 0x09, 0xc4, 0x9f, 0xe5, + 0x74, 0x00, 0x5f, 0x60, 0x34, 0xf1, 0xfb, 0x8d, 0xf1, 0xfb, 0xd3, 0xe5, + 0x64, 0x00, 0x27, 0x95, 0x07, 0x58, 0x00, 0x37, 0xb7, 0x55, 0x07, 0x50, + 0x10, 0x0b, 0x81, 0xfb, 0x44, 0x10, 0x1b, 0x04, 0xff, 0x57, 0xcf, 0xad, + 0x17, 0xc7, 0x1c, 0x00, 0x67, 0x1c, 0x00, 0x8f, 0x19, 0xb3, 0x48, 0x00, + 0x73, 0xdb, 0x14, 0x4f, 0x18, 0xf7, 0x40, 0x10, 0x47, 0x47, 0xa7, 0x38, + 0x10, 0x53, 0x47, 0xa7, 0x6d, 0x30, 0x10, 0x5f, 0x07, 0xa7, 0x40, 0x47, + 0xcf, 0x17, 0xb3, 0x3c, 0x0c, 0x2b, 0x7f, 0x10, 0x07, 0x8b, 0x1c, 0x2b, + 0x22, 0x97, 0x07, 0xa3, 0x1f, 0x67, 0x18, 0x4b, 0x15, 0x3b, 0x75, 0x34, + 0x0c, 0x4b, 0x15, 0x4f, 0x11, 0x7f, 0x02, 0x07, 0xa7, 0x38, 0x08, 0x87, + 0x21, 0xec, 0x33, 0x17, 0x87, 0x9d, 0xe5, 0xb8, 0x23, 0x07, 0xab, 0xdd, + 0x11, 0xa3, 0x47, 0x9f, 0xd8, 0x00, 0x0f, 0x2e, 0xf3, 0x47, 0xa3, 0xcc, + 0x10, 0x0f, 0x90, 0xf7, 0xa3, 0xe5, 0x40, 0x16, 0xdf, 0xc0, 0xc4, 0xe5, + 0x3c, 0x85, 0x18, 0xc7, 0xe0, 0xc5, 0xe5, 0x38, 0x04, 0xc3, 0x34, 0x17, + 0x8f, 0xa9, 0x27, 0xa3, 0xc0, 0x2e, 0x8b, 0x15, 0x01, 0x6b, 0x20, 0xe3, + 0x01, 0x6b, 0xf1, 0x09, 0x3b, 0x19, 0x4b, 0x59, 0x2f, 0x0b, 0x0f, 0x1a, + 0xfc, 0x02, 0x09, 0x47, 0x81, 0xc2, 0xef, 0x50, 0xfe, 0xff, 0x1a, 0xf8, + 0x32, 0x0a, 0xd7, 0x05, 0x22, 0x9f, 0xe5, 0xe0, 0xc2, 0x00, 0x03, 0xe2, + 0x10, 0x7b, 0xff, 0x09, 0x3b, 0x10, 0xbf, 0x45, 0x5b, 0x15, 0x2b, 0x18, + 0x2f, 0x14, 0x2b, 0x24, 0x13, 0x06, 0x8b, 0x76, 0xc8, 0x00, 0x33, 0x18, + 0x83, 0x56, 0x8b, 0xbc, 0x00, 0x43, 0x56, 0x8b, 0xb4, 0xdb, 0x10, 0x0b, + 0x83, 0x7f, 0xa8, 0x20, 0x0f, 0xb6, 0x87, 0xd0, 0x00, 0x73, 0x1a, 0x6b, + 0x7f, 0xcc, 0x20, 0x37, 0x07, 0xc7, 0x82, 0xb7, 0x14, 0xa3, 0x12, 0xb7, + 0x30, 0x47, 0x3e, 0x0b, 0x7f, 0xac, 0x10, 0x5f, 0x06, 0xa3, 0x22, 0xc3, + 0x08, 0xff, 0x28, 0x87, 0x19, 0x47, 0x19, 0x2b, 0xbd, 0x09, 0x13, 0x4c, + 0x03, 0x8b, 0x28, 0x8b, 0x0d, 0xb7, 0x18, 0xff, 0x80, 0x00, 0xd3, 0x76, + 0x50, 0x00, 0xd3, 0x15, 0xd3, 0x59, 0x07, 0x70, 0x00, 0xe3, 0x19, 0x07, + 0x20, 0xdb, 0x00, 0xef, 0x56, 0x9b, 0x60, 0x10, 0xb7, 0x06, 0x9b, 0x08, + 0x00, 0xff, 0x66, 0x9b, 0xda, 0x16, 0x97, 0x1d, 0x83, 0xc0, 0x08, 0xbf, + 0x52, 0xcb, 0x80, 0x15, 0x7b, 0xcb, 0x24, 0xe5, 0x4c, 0x05, 0x3b, 0x01, + 0x20, 0x0c, 0x4b, 0x20, 0xcc, 0x45, 0xe5, 0x0b, 0xd7, 0xea, 0xa8, 0x11, + 0xf4, 0x2b, 0xaa, 0x05, 0x2b, 0x40, 0xa0, 0x00, 0x17, 0x94, 0xc1, 0x9f, + 0xe5, 0x9c, 0x21, 0x0c, 0x9f, 0xe5, 0x88, 0x31, 0xf2, 0xd7, 0xf2, 0xd7, + 0xd3, 0xe5, 0x6d, 0x8c, 0x00, 0x27, 0x97, 0xdf, 0x80, 0x00, 0x37, 0x57, + 0xdf, 0x78, 0x10, 0x0b, 0xb5, 0x84, 0xd3, 0x6c, 0x20, 0x0f, 0xb7, 0xdb, + 0xa9, 0x0f, 0x67, 0x1c, 0x00, 0x6f, 0x3f, 0x24, 0x01, 0x00, 0x03, 0x10, + 0x97, 0x00, 0x77, 0x5b, 0x0f, 0x9b, 0x0b, 0x19, 0x5b, 0xf6, 0x1b, 0x0b, + 0x19, 0x4b, 0x21, 0xd3, 0x08, 0x5b, 0x40, 0x10, 0x7b, 0x81, 0xcf, 0x34, + 0xac, 0x80, 0x7b, 0x2c, 0xc0, 0x7b, 0x20, 0x10, 0x97, 0xc3, 0x53, 0x3f, + 0xfd, 0x17, 0xff, 0xea, 0x9c, 0x0d, 0x0f, 0x14, 0x0f, 0x43, 0x56, 0x73, + 0x18, 0xfb, 0x02, 0xb1, 0xfe, 0xff, 0x0a, 0x94, 0x10, 0x01, 0x03, 0xc0, + 0x17, 0x9f, 0xe5, 0x90, 0x0d, 0x2f, 0x7c, 0x0d, 0x3f, 0xf1, 0x0b, 0xf1, + 0x0b, 0x6d, 0xb0, 0x0d, 0x67, 0x98, 0xeb, 0xa4, 0x0d, 0x77, 0x58, 0xeb, + 0x9c, 0x10, 0x0b, 0xb4, 0x85, 0xdf, 0x90, 0x20, 0x0f, 0xb8, 0xe7, 0xaf, + 0x04, 0x73, 0xcc, 0x29, 0x1b, 0x00, 0x00, 0x60, 0x0e, 0x07, 0x1e, 0x13, + 0x34, 0x0e, 0x0f, 0x09, 0x6f, 0x2d, 0x00, 0x78, 0x4c, 0xbb, 0x4c, 0x1c, + 0xbf, 0x4c, 0xd3, 0x44, 0x0e, 0x2b, 0x55, 0x90, 0x0e, 0x2f, 0xd0, 0x0e, + 0x33, 0x10, 0x0e, 0x37, 0x50, 0x4e, 0x3f, 0xad, 0x1c, 0xe7, 0xc8, 0x0e, + 0x47, 0x98, 0x1e, 0x4b, 0x0e, 0x4f, 0x8c, 0x0e, 0x53, 0x55, 0x94, 0x0e, + 0x57, 0x28, 0x0e, 0x5b, 0x48, 0x0e, 0x5f, 0xa8, 0x0e, 0x63, 0x55, 0x68, + 0x0e, 0x67, 0x88, 0x0e, 0x6b, 0xcc, 0x0e, 0x6f, 0xd8, 0x0e, 0x73, 0x55, + 0xf4, 0x0e, 0x77, 0x5c, 0x0e, 0x7b, 0x38, 0x0e, 0x7f, 0xe8, 0x0e, 0x83, + 0x56, 0x70, 0x0e, 0x87, 0xb0, 0x0e, 0x8b, 0x1c, 0x10, 0x0b, 0x0f, 0x53, + 0x54, 0x6f, 0xa1, 0x08, 0xd7, 0x02, 0x0f, 0x54, 0x02, 0x17, 0x2f, 0x57, + 0x14, 0x1f, 0x19, 0x0f, 0x0c, 0x00, 0x93, 0xe5, 0x44, 0x02, 0x27, 0x2c, + 0x53, 0xc0, 0x95, 0x80, 0x04, 0x27, 0x92, 0xe5, 0x20, 0xe1, 0xa0, 0xe1, + 0x0c, 0x22, 0x00, 0x5e, 0x2e, 0xbf, 0x01, 0x60, 0x80, 0x1d, 0x86, 0x0a, + 0x73, 0x24, 0x40, 0x23, 0x21, 0x83, 0x4c, 0xb3, 0x26, 0xc1, 0x10, 0x27, + 0x1f, 0x6f, 0xa0, 0x17, 0xc3, 0x85, 0x08, 0x17, 0x0c, 0xe0, 0xac, 0x06, + 0x00, 0x00, 0xeb, 0xe1, 0x33, 0xa0, 0xe3, 0x21, 0x38, 0x83, 0x20, 0xe2, + 0xa0, 0x07, 0xab, 0x21, 0x3d, 0x83, 0xe2, 0x93, 0x0c, 0xc1, 0x82, 0xe0, + 0xec, 0x01, 0x87, 0x1c, 0x53, 0x22, 0x22, 0x80, 0x0f, 0x37, 0x38, 0xa0, + 0xe1, 0xb0, 0x10, 0xdc, 0xe1, 0x40, 0x23, 0x00, 0x07, 0x82, 0x22, 0x62, + 0xe0, 0x82, 0x00, 0x54, 0x40, 0x0f, 0xe7, 0x51, 0x0f, 0xa7, 0x00, 0x0f, + 0xaf, 0xcc, 0x11, 0x05, 0x86, 0xfc, 0xff, 0x1b, 0xc0, 0x4e, 0x13, 0xbc, + 0x11, 0x7f, 0xc0, 0x09, 0xef, 0x5e, 0x37, 0x04, 0x00, 0x50, 0xe1, 0x01, + 0x00, 0x2b, 0xd4, 0xe7, 0x1e, 0x6f, 0xff, 0x07, 0xf3, 0x15, 0x1e, 0x77, + 0x08, 0x13, 0x30, 0x69, 0xf9, 0x0f, 0x4f, 0x08, 0x0f, 0x44, 0xfa, 0xff, + 0xeb, 0x61, 0x8c, 0x0f, 0x1f, 0x2a, 0x03, 0x30, 0x06, 0xe2, 0x0b, 0x1e, + 0x53, 0xd0, 0x04, 0x9f, 0x1f, 0x53, 0x70, 0x0f, 0xeb, 0x3c, 0xfa, 0xff, + 0xea, 0x50, 0x70, 0x6e, 0x87, 0xd2, 0x0b, 0xc3, 0x51, 0xe1, 0x08, 0x00, + 0x1d, 0x00, 0x8a, 0x60, 0x5e, 0x9b, 0x0a, 0x5b, 0x10, 0x57, 0xe9, 0x0f, + 0x87, 0x6d, 0xdf, 0x00, 0x53, 0x1f, 0xbb, 0x52, 0x00, 0x5b, 0x1e, 0xc7, + 0x40, 0x4e, 0xa7, 0xd5, 0x10, 0x6f, 0x1a, 0x83, 0x4c, 0x00, 0x73, 0xe1, + 0x0e, 0xbf, 0x98, 0x01, 0x64, 0x57, 0x64, 0x01, 0xab, 0x7c, 0x01, 0xaf, + 0xa0, 0x4e, 0xab, 0x11, 0x9f, 0x11, 0xff, 0xdc, 0x11, 0xf3, 0x1e, 0xb7, + 0xd4, 0x41, 0xfb, 0x11, 0xf3, 0x1e, 0xcf, 0xf0, 0x45, 0x17, 0x2d, 0xe9, + 0x98, 0x0f, 0xd7, 0x98, 0x5f, 0xd7, 0x0d, 0x6f, 0x12, 0x4f, 0xa4, 0x17, + 0x37, 0x8c, 0x0f, 0xeb, 0xa0, 0x04, 0x01, 0x57, 0xe0, 0x9c, 0x00, 0xe5, + 0xa2, 0x64, 0xa0, 0xe1, 0x01, 0xc0, 0x80, 0x67, 0xe2, 0x23, 0x8b, 0x12, + 0x9b, 0x00, 0x5c, 0x00, 0x0f, 0x16, 0xef, 0x3e, 0x07, 0x81, 0x11, 0xa3, + 0x00, 0x60, 0x82, 0xe5, 0x01, 0x40, 0x1c, 0x5f, 0x40, 0x85, 0x0d, 0x9f, + 0x00, 0x8a, 0x00, 0x00, 0x56, 0xe3, 0x59, 0x0c, 0x0f, 0x8f, 0x4c, 0x1f, + 0x57, 0x0b, 0x33, 0x05, 0x70, 0x01, 0xa3, 0x44, 0x50, 0x1a, 0x17, 0x88, + 0xe5, 0x7b, 0x1f, 0x9f, 0x30, 0x97, 0x80, 0x0b, 0x3b, 0x85, 0xe2, 0x01, + 0x30, 0x83, 0xe2, 0x05, 0x20, 0x00, 0x56, 0x0d, 0x63, 0x87, 0xe5, 0x02, + 0x4c, 0x84, 0x34, 0xe2, 0xf6, 0x19, 0xbb, 0x1c, 0x4f, 0x45, 0x3c, 0x4f, + 0x08, 0x1b, 0x15, 0x00, 0x00, 0x20, 0x40, 0xd7, 0x24, 0x02, 0x8b, 0xdc, + 0x02, 0x8f, 0x4e, 0xa4, 0x4f, 0x7f, 0xb4, 0xa2, 0x17, 0xc3, 0x01, 0xc7, + 0x05, 0xc3, 0xb0, 0x58, 0x12, 0x3f, 0x87, 0x2c, 0x10, 0x8b, 0x00, 0x87, + 0x01, 0x10, 0x8a, 0xe0, 0x01, 0xcf, 0x0e, 0x1f, 0x03, 0x93, 0x7a, 0xf8, + 0xff, 0xeb, 0x94, 0xaf, 0x05, 0xe7, 0x94, 0x00, 0x23, 0x94, 0x14, 0xeb, + 0x08, 0x53, 0x10, 0x1f, 0x15, 0xe7, 0x6d, 0x73, 0x00, 0x1b, 0x1a, 0x2b, + 0x80, 0x00, 0x3f, 0x1b, 0xc3, 0x7c, 0x15, 0x27, 0xd5, 0x02, 0x8f, 0x10, + 0x3f, 0x0c, 0x03, 0xcf, 0x6b, 0x00, 0x3b, 0x0c, 0x05, 0x63, 0x75, 0x68, + 0x40, 0x1f, 0x10, 0x57, 0x12, 0xaf, 0x65, 0x00, 0x53, 0x58, 0x06, 0x3b, + 0x52, 0x58, 0x00, 0x77, 0x03, 0x05, 0x77, 0xa4, 0x45, 0x0a, 0x8f, 0x40, + 0x49, 0x04, 0x09, 0xf7, 0x8a, 0xe0, 0x01, 0xef, 0xe1, 0x5d, 0x00, 0x73, + 0x00, 0x24, 0xe3, 0xa0, 0xe1, 0x05, 0xe0, 0x8e, 0xe2, 0x41, 0x3e, 0x0a, + 0x23, 0x10, 0x0e, 0xa0, 0xe1, 0x30, 0x06, 0x6b, 0x6d, 0x30, 0x15, 0x87, + 0x09, 0x3b, 0x2c, 0x06, 0x77, 0x14, 0x2f, 0x10, 0x09, 0x47, 0x45, 0x24, + 0x20, 0x13, 0x9d, 0xe5, 0x08, 0x1f, 0x33, 0x90, 0x08, 0xa7, 0xf7, 0x18, + 0x63, 0x17, 0x5b, 0x1c, 0x5b, 0x0f, 0x4f, 0x08, 0x17, 0x6b, 0x15, 0xb7, + 0x4c, 0x9f, 0x42, 0xfc, 0x05, 0x53, 0x01, 0xc0, 0x44, 0xe2, 0x5c, 0xff, + 0x24, 0xe2, 0x2e, 0xb7, 0x08, 0xa7, 0x05, 0x6b, 0x08, 0x18, 0xa0, 0x2b, + 0x67, 0x21, 0x4b, 0x1b, 0x02, 0xdf, 0x80, 0xc5, 0x02, 0xe3, 0xc6, 0x01, + 0xc3, 0x0b, 0x8b, 0x34, 0x00, 0x87, 0x2f, 0xd7, 0x10, 0x9b, 0x00, 0x05, + 0xc3, 0x01, 0x3c, 0x01, 0x8b, 0xe2, 0x01, 0x20, 0xc0, 0xe4, 0x03, 0x02, + 0xcb, 0x57, 0xfc, 0x0b, 0x2f, 0xb0, 0x05, 0xa7, 0xb0, 0x05, 0xaf, 0x1c, + 0x7f, 0x1a, 0x6b, 0x3b, 0x00, 0x20, 0x06, 0x2b, 0x19, 0xe3, 0x04, 0xd3, + 0xaa, 0x02, 0xcf, 0x1a, 0xdb, 0x9c, 0x04, 0x0a, 0x1a, 0xfe, 0x0a, 0x3b, + 0x15, 0xab, 0x1f, 0x7f, 0xfe, 0x2c, 0x01, 0xe0, 0xe3, 0xb0, 0x20, 0xc4, + 0xe1, 0x5f, 0x02, 0xef, 0x80, 0x1c, 0x43, 0x00, 0x30, 0x92, 0xe5, 0xfc, + 0x50, 0x93, 0xcc, 0x20, 0xcb, 0x5f, 0xd3, 0x05, 0xc8, 0x00, 0x8f, 0x09, + 0xc3, 0x2c, 0xcb, 0x80, 0x33, 0xa3, 0x8c, 0x32, 0x6c, 0xe0, 0x00, 0xe0, + 0x90, 0x10, 0xe5, 0x83, 0x30, 0x03, 0x83, 0x10, 0x81, 0xe2, 0x13, 0x0d, + 0xe1, 0x6e, 0xe0, 0x40, 0x06, 0x27, 0x1d, 0x3f, 0x3c, 0x06, 0x2f, 0xca, + 0x1b, 0x57, 0x2f, 0x9f, 0x60, 0xd3, 0x21, 0x03, 0x03, 0x0c, 0x97, 0x0c, + 0xfd, 0x08, 0x53, 0x11, 0x13, 0x20, 0x9b, 0x0b, 0xb3, 0x15, 0x3f, 0x1b, + 0xdf, 0x10, 0x06, 0x5b, 0x7a, 0x02, 0x19, 0xc3, 0x10, 0x6b, 0x16, 0x2f, + 0x4c, 0xf3, 0x00, 0x16, 0x3b, 0xe0, 0x51, 0x82, 0x27, 0x63, 0xf8, 0x05, + 0x73, 0xb0, 0x50, 0xc1, 0x02, 0x0f, 0xd3, 0x3c, 0xc7, 0x1d, 0x93, 0xe8, + 0x15, 0x4f, 0x20, 0x88, 0x27, 0x83, 0x1c, 0x13, 0xad, 0x10, 0xeb, 0xd8, + 0x43, 0xeb, 0xd4, 0x23, 0xeb, 0x49, 0x2f, 0x60, 0x09, 0x2f, 0xcf, 0x1c, + 0x33, 0x20, 0xdb, 0x82, 0xe5, 0x24, 0x07, 0x06, 0xff, 0x10, 0xf3, 0x1d, + 0xdb, 0xfc, 0x15, 0xa7, 0x1a, 0x07, 0x27, 0xe7, 0x15, 0xa3, 0x0e, 0xdf, + 0x20, 0x17, 0xc0, 0xc7, 0x8a, 0x04, 0x8f, 0xc2, 0xe5, 0x3b, 0x02, 0x77, + 0x4a, 0x02, 0x7b, 0x73, 0x88, 0x2c, 0x1b, 0xa0, 0xe3, 0x2c, 0x8f, 0x27, + 0x44, 0x1a, 0x00, 0x21, 0x00, 0xac, 0x12, 0xcb, 0xff, 0xff, 0xff, 0x74, + 0x05, 0x63, 0x6d, 0xb4, 0x00, 0x07, 0x13, 0xa3, 0xc0, 0x00, 0x0f, 0x15, + 0x7f, 0xd0, 0x00, 0x17, 0x5a, 0x6c, 0x05, 0x7b, 0xe0, 0x00, 0x1f, 0x02, + 0x70, 0x00, 0x03, 0x4b, 0x00, 0x5f, 0x3c, 0x83, 0xdb, 0x58, 0x45, 0x7f, + 0x15, 0x8f, 0x15, 0x83, 0x15, 0xe7, 0x95, 0xc7, 0xfe, 0x13, 0x33, 0x15, + 0xff, 0x55, 0x9b, 0x55, 0xeb, 0x15, 0xff, 0x15, 0xe3, 0x16, 0x03, 0x10, + 0x0c, 0x40, 0x2d, 0xe9, 0x08, 0x43, 0x2f, 0x07, 0x23, 0xe2, 0xa3, 0x40, + 0xf3, 0x0d, 0x47, 0x30, 0xdd, 0xe5, 0xec, 0x00, 0x53, 0x02, 0xe3, 0xad, + 0x00, 0x53, 0x13, 0x04, 0x04, 0xdf, 0x2c, 0xad, 0x00, 0x0b, 0x02, 0x04, + 0xe7, 0x98, 0x00, 0x13, 0x06, 0x0a, 0x0a, 0x11, 0xff, 0x41, 0x05, 0x00, + 0x23, 0x71, 0x30, 0x43, 0xe2, 0x80, 0x00, 0x27, 0x00, 0x03, 0xf1, 0x8f, + 0x90, 0x9d, 0x00, 0x00, 0xea, 0x55, 0x93, 0x00, 0x03, 0x9b, 0x00, 0x07, + 0x9a, 0x00, 0x0b, 0xa3, 0x00, 0x0f, 0x95, 0x06, 0x37, 0xea, 0x97, 0x00, + 0x17, 0x96, 0x00, 0x1b, 0x95, 0x00, 0x1f, 0x56, 0x9e, 0x40, 0x23, 0x92, + 0x00, 0x2b, 0x91, 0x00, 0x2f, 0x06, 0x73, 0xea, 0x56, 0x8f, 0x00, 0x37, + 0x8e, 0x00, 0x3b, 0x8d, 0x00, 0x3f, 0x06, 0x5f, 0xea, 0x66, 0x8b, 0x00, + 0x47, 0x04, 0x38, 0xea, 0x89, 0x00, 0x4f, 0x06, 0x57, 0xea, 0x55, 0x87, + 0x00, 0x57, 0x86, 0x00, 0x5b, 0x85, 0x00, 0x5f, 0x84, 0x00, 0x63, 0x55, + 0x83, 0x00, 0x67, 0x82, 0x00, 0x6b, 0x81, 0x00, 0x6f, 0x80, 0x00, 0x73, + 0x56, 0x7f, 0x00, 0x77, 0x7e, 0x00, 0x7b, 0x7d, 0x00, 0x7f, 0x04, 0xf7, + 0xea, 0x56, 0x7b, 0x00, 0x87, 0x7a, 0x00, 0x8b, 0x79, 0x00, 0x8f, 0x06, + 0xeb, 0xea, 0x56, 0x77, 0x00, 0x97, 0x76, 0x00, 0x9b, 0x75, 0x00, 0x9f, + 0x01, 0x63, 0xea, 0x56, 0x73, 0x00, 0xa7, 0x72, 0x00, 0xab, 0x71, 0x00, + 0xaf, 0x06, 0x9b, 0xea, 0x56, 0x6f, 0x00, 0xb7, 0x6e, 0x00, 0xbb, 0x6d, + 0x00, 0xbf, 0x01, 0x6b, 0xea, 0x56, 0x6b, 0x00, 0xc7, 0x6a, 0x00, 0xcb, + 0x69, 0x00, 0xcf, 0x06, 0xdb, 0xea, 0x56, 0x67, 0x00, 0xd7, 0x66, 0x00, + 0xdb, 0x65, 0x00, 0xdf, 0x05, 0x5b, 0xea, 0x56, 0x63, 0x00, 0xe7, 0x62, + 0x00, 0xeb, 0x61, 0x00, 0xef, 0x07, 0x5b, 0xea, 0x56, 0x5f, 0x00, 0xf7, + 0x5e, 0x00, 0xfb, 0x5d, 0x00, 0xff, 0x06, 0xf7, 0xea, 0x56, 0x5b, 0x01, + 0x07, 0x5a, 0x01, 0x0b, 0x59, 0x01, 0x0f, 0x01, 0x9f, 0xea, 0x56, 0x57, + 0x01, 0x17, 0x56, 0x01, 0x1b, 0x55, 0x01, 0x1f, 0x0a, 0x83, 0xea, 0x56, + 0x53, 0x01, 0x27, 0x52, 0x01, 0x2b, 0x51, 0x01, 0x2f, 0x07, 0x67, 0xea, + 0x55, 0x4f, 0x01, 0x37, 0x4e, 0x01, 0x3b, 0x4d, 0x40, 0x27, 0x4b, 0x01, + 0x47, 0x55, 0x2d, 0x01, 0x4b, 0x49, 0x01, 0x4f, 0x36, 0x01, 0x53, 0x47, + 0x01, 0x57, 0x59, 0x46, 0x01, 0x5b, 0x45, 0x01, 0x5f, 0x07, 0xa7, 0xea, + 0x3a, 0x01, 0x67, 0x65, 0x42, 0x40, 0x03, 0x07, 0xd7, 0xea, 0x3f, 0x01, + 0x77, 0x3e, 0x01, 0x7b, 0x65, 0x3d, 0x01, 0x7f, 0x02, 0x1b, 0xea, 0x3b, + 0x01, 0x87, 0x1d, 0x01, 0x8b, 0x55, 0x39, 0x01, 0x8f, 0x26, 0x01, 0x93, + 0x37, 0x40, 0x47, 0x35, 0x01, 0x9f, 0xa6, 0x08, 0x03, 0xea, 0x07, 0x43, + 0xea, 0x32, 0x40, 0x03, 0x07, 0xd3, 0xea, 0x55, 0x2f, 0x01, 0xb7, 0x2e, + 0x40, 0x73, 0x2c, 0x01, 0xc3, 0x2b, 0x40, 0x23, 0xa5, 0x08, 0x3a, 0xea, + 0x07, 0xe7, 0xea, 0x27, 0x40, 0x47, 0x25, 0x01, 0xdf, 0x95, 0x05, 0x7b, + 0xea, 0x23, 0x01, 0xe7, 0x22, 0x01, 0xeb, 0x21, 0x01, 0xef, 0x96, 0x05, + 0x93, 0xea, 0x1f, 0x01, 0xf7, 0x1e, 0x40, 0x73, 0x10, 0x6f, 0x07, 0x84, + 0x02, 0x3b, 0x20, 0x00, 0x13, 0xe3, 0x00, 0x4b, 0x0a, 0x04, 0x94, 0x03, + 0xdf, 0x3f, 0x1d, 0x04, 0x67, 0x24, 0x04, 0x6b, 0x07, 0xa0, 0x29, 0xe3, + 0x92, 0x0f, 0xa3, 0x08, 0x06, 0xff, 0x10, 0x40, 0x32, 0xff, 0xaa, 0x50, + 0x2b, 0x33, 0x40, 0x2b, 0x7f, 0x80, 0x2b, 0x87, 0x0f, 0xcf, 0xf3, 0xf5, + 0x0e, 0xa3, 0x50, 0x4f, 0x00, 0x63, 0x20, 0x4f, 0x0f, 0x80, 0x4f, 0x7e, + 0x00, 0x4f, 0x7d, 0xea, 0x0e, 0xc7, 0x14, 0x8f, 0x50, 0x77, 0x03, 0x52, + 0x20, 0x77, 0x1f, 0x80, 0x77, 0x7d, 0x74, 0x00, 0x77, 0x03, 0x43, 0x60, + 0x9b, 0x01, 0x1f, 0x20, 0x9b, 0x07, 0x80, 0x9b, 0x59, 0x6b, 0x00, 0x9b, + 0xd7, 0x0f, 0x13, 0x50, 0x87, 0x02, 0x25, 0x00, 0x03, 0x0b, 0x08, 0xa0, + 0xe3, 0x65, 0x00, 0xb3, 0xd1, 0x40, 0x17, 0x10, 0x53, 0xae, 0x50, 0x17, + 0x5f, 0x00, 0xcb, 0xcb, 0x40, 0x2f, 0x10, 0xe3, 0x50, 0x2f, 0x59, 0xaa, + 0x00, 0xe3, 0xc5, 0x40, 0x47, 0xff, 0x80, 0x47, 0x53, 0x00, 0xfb, 0xbf, + 0xeb, 0x40, 0x5f, 0x10, 0xc3, 0x50, 0x5f, 0x4d, 0x01, 0x13, 0xb9, 0x0f, + 0x8b, 0x16, 0xcb, 0x4a, 0xe8, 0x06, 0xcb, 0xe8, 0x92, 0x39, 0x17, 0x09, + 0x8e, 0x27, 0x14, 0xd5, 0x08, 0xff, 0x02, 0x87, 0x0a, 0xbc, 0x33, 0x92, + 0x2c, 0x3f, 0xc4, 0x2b, 0xbf, 0x88, 0x30, 0x0b, 0x01, 0xc0, 0x8c, 0x05, + 0x57, 0xd2, 0xe5, 0x2c, 0x01, 0x41, 0xa0, 0xe1, 0x34, 0xee, 0xa0, 0xe1, + 0x58, 0xff, 0x80, 0x18, 0xfb, 0xae, 0x20, 0xa0, 0xe1, 0x93, 0x12, 0x80, + 0x2d, 0xe0, 0x98, 0x0c, 0xe7, 0x98, 0x0c, 0xef, 0x16, 0x67, 0x0c, 0x0f, + 0xbf, 0x42, 0x90, 0x10, 0x0b, 0x50, 0x9d, 0xe5, 0x8c, 0x07, 0x3b, 0x20, + 0x53, 0x02, 0x36, 0x37, 0x00, 0x09, 0x17, 0x23, 0x78, 0x07, 0xef, 0x05, + 0x57, 0xa4, 0x15, 0x77, 0x05, 0x0d, 0xc3, 0x70, 0xb2, 0x3c, 0x7f, 0x04, + 0x50, 0x03, 0x8d, 0xe5, 0xb0, 0x20, 0xd8, 0xe1, 0x1c, 0x9f, 0x1c, 0x3b, + 0x40, 0x0b, 0x08, 0xdf, 0x07, 0x00, 0x52, 0xe1, 0x03, 0xc0, 0x5c, 0x0c, + 0x28, 0x1b, 0x50, 0x2d, 0x07, 0x08, 0xe7, 0x1c, 0x83, 0x02, 0x60, 0xc0, + 0x05, 0xe7, 0x35, 0x83, 0x80, 0x00, 0x4e, 0xe0, 0x06, 0x40, 0x04, 0x04, + 0xe0, 0x00, 0x40, 0xc1, 0x09, 0x47, 0xc5, 0xe5, 0x00, 0xb0, 0x70, 0xc2, + 0xe1, 0xb0, 0x70, 0xc8, 0x11, 0x05, 0x2d, 0xfa, 0xff, 0x1b, 0x0b, 0x8f, + 0x13, 0x41, 0x0d, 0xa7, 0xbf, 0x1e, 0x4b, 0x0c, 0x1c, 0xbb, 0x1d, 0xff, + 0x0e, 0xef, 0x2b, 0x4f, 0x47, 0x93, 0x3c, 0x9f, 0x12, 0xd3, 0xe5, 0xf4, + 0x1c, 0x1b, 0x00, 0xdc, 0x2c, 0xc3, 0x0c, 0xfa, 0x09, 0xb3, 0x15, 0xaf, + 0x02, 0xeb, 0x29, 0x8b, 0x03, 0x8f, 0x0a, 0x10, 0xd3, 0x05, 0x95, 0x40, + 0x2b, 0x04, 0xf7, 0x39, 0x93, 0xdf, 0x00, 0x07, 0x2c, 0x00, 0x0b, 0x54, + 0x0b, 0x0e, 0xa7, 0xb8, 0x2b, 0xc3, 0xdc, 0x2f, 0xd3, 0x01, 0x30, 0x04, + 0x85, 0xe2, 0x00, 0x20, 0x91, 0x0d, 0x4b, 0x03, 0xe2, 0x04, 0x00, 0x30, + 0xcc, 0xe5, 0xa0, 0x17, 0x5b, 0x20, 0x42, 0x22, 0xe2, 0x09, 0x0d, 0x8f, + 0x00, 0x20, 0x81, 0x36, 0x4f, 0x40, 0xf5, 0x02, 0x13, 0x19, 0xc3, 0x1d, + 0x0f, 0x0d, 0xbf, 0xcc, 0x00, 0x53, 0x04, 0x0a, 0x73, 0x4d, 0x14, 0x85, + 0xcf, 0x4c, 0xb1, 0x01, 0x0f, 0x8f, 0xdf, 0xe4, 0x09, 0xbb, 0x6b, 0x28, + 0x0c, 0xff, 0x17, 0xd3, 0x02, 0x0f, 0x1b, 0x24, 0x16, 0xe3, 0x1e, 0x43, + 0x2a, 0x30, 0xdc, 0x0a, 0x4b, 0xd1, 0x0b, 0xf7, 0x83, 0x00, 0x6f, 0x03, + 0xe9, 0x08, 0x4b, 0x05, 0x57, 0x00, 0x77, 0x17, 0x0a, 0x4b, 0xfc, 0xe0, + 0x0a, 0x9f, 0xba, 0x0e, 0xbb, 0xbd, 0x02, 0x13, 0x92, 0x03, 0x02, 0x23, + 0x1a, 0x06, 0x0f, 0xea, 0xfe, 0x18, 0x07, 0x2c, 0x5f, 0x17, 0x27, 0x51, + 0x1b, 0x01, 0x0f, 0x11, 0x03, 0x09, 0x1b, 0x8a, 0x64, 0xec, 0xca, 0x3f, + 0x09, 0x3a, 0x0a, 0x0c, 0x0a, 0x27, 0xc3, 0xf6, 0x3c, 0xff, 0xeb, 0x10, + 0x53, 0x1c, 0x3b, 0x11, 0xf7, 0x1f, 0xab, 0x00, 0x20, 0x08, 0xdc, 0xe5, + 0xe1, 0x13, 0x08, 0x07, 0x20, 0x82, 0xe2, 0x00, 0xff, 0x20, 0x02, 0xe2, + 0x21, 0x18, 0x81, 0xe2, 0x40, 0xa2, 0x0b, 0x47, 0x21, 0x1d, 0x81, 0xe2, + 0x91, 0x50, 0x00, 0x83, 0xe0, 0x23, 0x32, 0xa0, 0xe1, 0x83, 0x32, 0x03, + 0x63, 0xe0, 0x83, 0x20, 0x42, 0xe0, 0x10, 0x1f, 0x1c, 0xcf, 0xac, 0x1d, + 0xf7, 0x96, 0x0a, 0x93, 0x5c, 0x1b, 0x17, 0x0a, 0xdb, 0xb0, 0x20, 0x20, + 0xd1, 0xe1, 0x10, 0x3f, 0xb0, 0x20, 0xc1, 0xe1, 0xba, 0xad, 0x0a, 0xfb, + 0x8b, 0x02, 0xcb, 0x33, 0x01, 0x6f, 0x1a, 0xaf, 0xa6, 0x00, 0x73, 0x7a, + 0xa0, 0x02, 0xdb, 0x20, 0x2b, 0x2d, 0x6b, 0x3a, 0xaf, 0xa0, 0x00, 0x8b, + 0x9a, 0x9d, 0x02, 0xf3, 0x80, 0x13, 0x39, 0xcf, 0x5a, 0xaf, 0x16, 0xe3, + 0xb4, 0x0c, 0x6b, 0x75, 0x9c, 0x4a, 0xbb, 0x1c, 0xb7, 0x05, 0xe3, 0x00, + 0x04, 0x97, 0x00, 0x05, 0xfb, 0xda, 0x2c, 0x8f, 0x1c, 0xbb, 0x14, 0x4a, + 0x03, 0xda, 0xcb, 0x10, 0x0c, 0x5f, 0x64, 0xfd, 0x0a, 0xcb, 0x1b, 0x37, + 0x1c, 0x5b, 0x2a, 0x93, 0x1a, 0x8f, 0x0a, 0xa7, 0x09, 0x0b, 0xa7, 0x62, + 0x3a, 0x1b, 0x47, 0x18, 0xc3, 0xc0, 0xa0, 0xe1, 0x10, 0x0f, 0x3c, 0xa0, + 0x6b, 0x7f, 0x92, 0x0d, 0x83, 0xe0, 0xe3, 0x01, 0x30, 0xc4, 0x3b, 0xe7, + 0xfe, 0x0a, 0xd3, 0x1c, 0x4b, 0x1a, 0x7f, 0x10, 0x0b, 0xa7, 0x1a, 0x7f, + 0x55, 0x14, 0x80, 0x27, 0x00, 0x40, 0x27, 0xf5, 0x03, 0xb3, 0x3c, 0x0d, + 0x2c, 0x82, 0x17, 0xa7, 0xf0, 0x47, 0x2d, 0xe9, 0xdc, 0x0b, 0x43, 0xdc, + 0xde, 0x5b, 0x43, 0x08, 0xaf, 0xd4, 0x0d, 0xeb, 0x18, 0x47, 0x28, 0x9b, + 0x09, 0xcf, 0x02, 0x94, 0x1a, 0xf7, 0x30, 0xd7, 0x0b, 0xd3, 0x53, 0x24, + 0xa3, 0x00, 0x30, 0x4b, 0xd8, 0x0c, 0x4f, 0x53, 0xe3, 0x11, 0xf3, 0xe3, + 0x0a, 0x9b, 0x1b, 0xeb, 0xf8, 0x20, 0xab, 0x1b, 0xd3, 0x0f, 0x5f, 0x01, + 0x1a, 0x40, 0x23, 0xd7, 0xe5, 0x8c, 0x85, 0x0a, 0xbb, 0x00, 0x60, 0x50, + 0xe2, 0x12, 0x6f, 0x0f, 0x20, 0x3b, 0x40, 0x99, 0x0f, 0x83, 0xe0, 0xe3, + 0x03, 0x20, 0xc4, 0xe7, 0x40, 0xc1, 0x0b, 0x47, 0x01, 0x30, 0x45, 0xe2, + 0xff, 0x50, 0x01, 0x03, 0xe2, 0xff, 0x00, 0x55, 0xe3, 0xe5, 0x0c, 0x2f, + 0x63, 0x06, 0x03, 0xeb, 0x02, 0xab, 0xe1, 0xf0, 0x47, 0x38, 0x67, 0x19, + 0xeb, 0x6d, 0xfa, 0x12, 0x4f, 0x0f, 0xb7, 0xf8, 0x04, 0x6b, 0x10, 0x53, + 0xb3, 0x0b, 0x7f, 0x65, 0x34, 0x1c, 0xdb, 0x12, 0x07, 0x10, 0xd7, 0x0e, + 0x8b, 0x9c, 0x21, 0x03, 0x11, 0x02, 0x30, 0xc1, 0x0c, 0x7b, 0x9c, 0xe5, + 0x04, 0x07, 0xdb, 0xa1, 0x10, 0x47, 0x00, 0x01, 0x13, 0x00, 0x40, 0xc7, + 0xe5, 0x15, 0x67, 0x7a, 0xc4, 0x00, 0x7c, 0x1e, 0x2f, 0x1e, 0x3b, 0x50, + 0xf7, 0x10, 0x0d, 0xcf, 0x10, 0x56, 0x61, 0x3d, 0xcb, 0x06, 0x4e, 0xf7, + 0xff, 0x0e, 0xf7, 0x06, 0x6b, 0x0a, 0x70, 0xfc, 0x1d, 0x3b, 0x80, 0x13, + 0x12, 0xdf, 0xec, 0x90, 0x9f, 0xe5, 0x36, 0xec, 0x80, 0x0c, 0xbf, 0x0c, + 0x0b, 0x02, 0x03, 0x53, 0x10, 0x33, 0x09, 0xb6, 0x0a, 0x1b, 0x08, 0x20, + 0x87, 0x0f, 0x33, 0x20, 0x0f, 0x57, 0x23, 0x1f, 0xd7, 0x22, 0xe5, 0x4e, + 0x10, 0xf7, 0x50, 0x50, 0xe2, 0x06, 0x73, 0x0a, 0x70, 0xa5, 0x20, 0xe7, + 0x0a, 0xef, 0x0d, 0x6b, 0xff, 0x40, 0x03, 0xe2, 0x81, 0x08, 0x8f, 0x1a, + 0xff, 0x00, 0x54, 0xe3, 0xee, 0x0d, 0x1f, 0xf4, 0x13, 0x97, 0x50, 0xeb, + 0x1c, 0xb3, 0x19, 0xc3, 0x88, 0xad, 0xaf, 0xd2, 0xe5, 0x63, 0x01, 0x0d, + 0xaf, 0x0c, 0x93, 0x0a, 0x74, 0x60, 0x0a, 0x2f, 0x0c, 0x83, 0xd1, 0x20, + 0xab, 0x0a, 0x67, 0x1d, 0x11, 0x5b, 0x40, 0x50, 0xe2, 0x11, 0x57, 0x7e, + 0x8c, 0x41, 0x4b, 0x20, 0x63, 0x01, 0x4f, 0x1d, 0x7b, 0x11, 0x53, 0x06, + 0x87, 0x1a, 0x9a, 0x01, 0x57, 0xea, 0x9a, 0x03, 0x43, 0x19, 0xc3, 0xe3, + 0x41, 0x43, 0x62, 0xaa, 0x0c, 0xc3, 0x95, 0x03, 0x57, 0x05, 0x0e, 0x7b, + 0xde, 0x05, 0xc3, 0x92, 0xd7, 0x03, 0x63, 0x14, 0x13, 0xdb, 0x05, 0xcf, + 0xcc, 0x0d, 0x00, 0x5f, 0x5b, 0x1f, 0x6b, 0xeb, 0x1f, 0x27, 0x1d, 0x8f, + 0x1d, 0x6f, 0x2c, 0x0f, 0x03, 0x2c, 0x0b, 0x3f, 0x2e, 0xff, 0xe8, 0x05, + 0x33, 0x2d, 0x63, 0x0e, 0xef, 0x1c, 0x0f, 0x13, 0x01, 0x30, 0x80, 0x06, + 0xe2, 0x01, 0x00, 0x53, 0xe1, 0x1c, 0x87, 0x2d, 0x53, 0x00, 0x27, 0x83, + 0xe5, 0x07, 0xd3, 0x8a, 0x04, 0x5f, 0x1b, 0x1a, 0xe3, 0x15, 0xef, 0xf5, + 0x0a, 0xf3, 0x1a, 0xd7, 0x1f, 0x17, 0x2f, 0x03, 0x51, 0x1e, 0xff, 0xd8, + 0x0e, 0x47, 0x83, 0x0f, 0x07, 0x70, 0xd2, 0xe5, 0xec, 0x02, 0xfe, 0xff, + 0x1e, 0xff, 0x70, 0xc8, 0xfe, 0xff, 0xfe, 0xff, 0x4e, 0xff, 0xc6, 0xf8, + 0xff, 0x1b, 0xdf, 0x14, 0x2f, 0x5e, 0xa3, 0x04, 0x0f, 0x1b, 0x1e, 0xe7, + 0x51, 0x63, 0x23, 0x37, 0x0f, 0x03, 0xda, 0x1e, 0xa7, 0x03, 0x93, 0x0a, + 0x1e, 0x17, 0x63, 0x27, 0x20, 0x02, 0xdf, 0x01, 0x00, 0x91, 0xe7, 0x05, + 0x30, 0x07, 0xe0, 0x90, 0x32, 0x22, 0x2c, 0xe0, 0x5e, 0xd7, 0x03, 0x10, + 0x06, 0x04, 0x47, 0x92, 0x00, 0xe5, 0x0c, 0x11, 0x81, 0xe0, 0x81, 0x04, + 0x80, 0xd8, 0x03, 0xa3, 0x7d, 0xe7, 0x6a, 0x1e, 0x13, 0x0f, 0x4b, 0xe6, + 0xff, 0xff, 0x55, 0x0a, 0x1b, 0x2b, 0xf7, 0x07, 0x17, 0x20, 0x04, 0xb7, + 0xe8, 0x1e, 0xdb, 0xff, 0x0f, 0x68, 0x5e, 0x03, 0x1e, 0xdb, 0x51, 0x4f, + 0x9e, 0xdb, 0x1b, 0x07, 0x1b, 0x13, 0x1e, 0x17, 0x03, 0x54, 0xa9, 0x9f, + 0xe5, 0x54, 0x19, 0x31, 0x63, 0x17, 0x3f, 0x1c, 0x0c, 0x10, 0x8d, 0x36, + 0x4f, 0x46, 0x67, 0x0a, 0x73, 0x0a, 0x38, 0x5b, 0x39, 0x3f, 0x47, 0x34, + 0x00, 0x07, 0x57, 0x4f, 0x2c, 0x10, 0x0b, 0xf7, 0x4f, 0xcf, 0xf7, 0x4f, + 0x47, 0x4f, 0x00, 0x29, 0x07, 0x17, 0x00, 0x47, 0x17, 0x3b, 0x1e, 0x4b, + 0x88, 0x97, 0x3f, 0xec, 0x18, 0x9f, 0x03, 0x47, 0x9d, 0xe5, 0xe8, 0x7e, + 0xb8, 0x1e, 0xa3, 0x0d, 0xc7, 0x0f, 0x53, 0x16, 0xeb, 0x17, 0x2b, 0x17, + 0x4b, 0x00, 0x20, 0xc0, 0xc3, 0x27, 0x4b, 0xcc, 0x38, 0x9f, 0xe5, 0xcc, + 0x1d, 0x98, 0x9f, 0xe5, 0x27, 0x47, 0x17, 0xd3, 0x00, 0x0f, 0x09, 0x05, + 0x5b, 0xd5, 0xf7, 0x3f, 0x17, 0x3f, 0xc5, 0x06, 0x3b, 0xc1, 0x27, 0x3f, + 0x06, 0x0b, 0x8b, 0x9e, 0x07, 0x43, 0xe1, 0x5c, 0x1e, 0x9f, 0x07, 0x6f, + 0x90, 0xdf, 0x0a, 0x87, 0x0a, 0x3c, 0x80, 0x28, 0x00, 0x47, 0x0d, 0xa3, + 0x26, 0x7f, 0x0e, 0x43, 0x00, 0x20, 0x52, 0xd4, 0x0d, 0x9f, 0xd6, 0x0e, + 0xfb, 0x52, 0xe1, 0x0b, 0x2f, 0x0a, 0x41, 0x0e, 0x41, 0x6f, 0x98, 0x01, + 0x00, 0x1a, 0xc2, 0x07, 0x23, 0x19, 0x54, 0x58, 0x9f, 0x27, 0x33, 0x24, + 0x8b, 0x00, 0xc3, 0x00, 0x3b, 0x26, 0xa0, 0x03, 0x0b, 0x1f, 0x0a, 0x40, + 0x00, 0x9f, 0x55, 0x27, 0x05, 0x8e, 0x25, 0x27, 0xc0, 0xe7, 0x30, 0x00, + 0xb3, 0x05, 0x81, 0x46, 0x6b, 0xc6, 0x14, 0xe5, 0x24, 0x88, 0x31, 0x37, + 0x08, 0x1f, 0x1f, 0x20, 0xd0, 0x18, 0xe7, 0xe8, 0xe7, 0x00, 0xfb, 0x06, + 0xc7, 0x00, 0x20, 0xc3, 0xc2, 0x20, 0x13, 0x54, 0x17, 0x00, 0xc8, 0x9f, + 0xe5, 0x0b, 0x67, 0x0a, 0x03, 0xf8, 0x37, 0x9f, 0xe5, 0xc4, 0x27, 0x14, + 0x07, 0x0e, 0x6b, 0x9d, 0x0e, 0xdf, 0xd8, 0x57, 0x0d, 0xc7, 0x07, 0x63, + 0x10, 0x3f, 0x05, 0x26, 0xbf, 0xe0, 0x08, 0x0f, 0x02, 0x73, 0x10, 0xaf, + 0x00, 0x20, 0xd7, 0xe5, 0x4b, 0xc1, 0x16, 0x53, 0x02, 0x67, 0xc4, 0x01, + 0x00, 0x0a, 0xa2, 0x0a, 0x47, 0xb5, 0x94, 0x0b, 0x68, 0x00, 0xbf, 0x14, + 0x0b, 0xef, 0x07, 0x23, 0x0b, 0x1d, 0xb3, 0x60, 0x30, 0x01, 0x5b, 0x0c, + 0xbf, 0x04, 0x30, 0x63, 0xe2, 0xff, 0x11, 0x60, 0x03, 0xe2, 0x0a, 0x9f, + 0x1a, 0x8c, 0x77, 0x01, 0x5f, 0x88, 0x0e, 0xaf, 0x00, 0x30, 0x94, 0x00, + 0xff, 0x56, 0xe1, 0x1b, 0x07, 0x01, 0x00, 0x8a, 0x7c, 0x87, 0x0f, 0x2b, + 0x08, 0xa7, 0x11, 0xa3, 0x69, 0x01, 0x12, 0x9b, 0x07, 0x13, 0x50, 0x00, + 0x97, 0x00, 0x40, 0x3d, 0xc3, 0x62, 0x60, 0x10, 0x0b, 0x64, 0x43, 0xdc, + 0xe5, 0x0b, 0x0f, 0x3b, 0xf1, 0x09, 0xf4, 0xff, 0xeb, 0x11, 0x0c, 0xeb, + 0x14, 0xb7, 0xb7, 0xeb, 0x6d, 0xad, 0x0d, 0x17, 0x28, 0xc7, 0x30, 0x18, + 0xc7, 0x20, 0x7b, 0x12, 0x00, 0x7b, 0x39, 0x12, 0x48, 0x27, 0x7f, 0xb1, + 0x9b, 0x0b, 0xeb, 0x1a, 0x00, 0x00, 0x7b, 0x38, 0xf8, 0x76, 0x09, 0x3f, + 0x11, 0x9f, 0x09, 0x5f, 0x00, 0x30, 0xd4, 0xc0, 0x13, 0xbb, 0x06, 0x23, + 0xc5, 0xe5, 0xb5, 0xf5, 0xff, 0xeb, 0x51, 0x07, 0x28, 0xe7, 0x93, 0x03, + 0x5f, 0x51, 0xe3, 0xba, 0x10, 0x5b, 0x91, 0x18, 0x8b, 0x30, 0xde, 0x01, + 0xbb, 0x53, 0xe3, 0x2e, 0x01, 0x03, 0x5e, 0x0c, 0x0e, 0xfb, 0x07, 0x0f, + 0x53, 0x18, 0x57, 0x28, 0x47, 0x1f, 0xcf, 0x10, 0x27, 0x41, 0xe2, 0x28, + 0xc3, 0x10, 0x80, 0x0f, 0x87, 0x08, 0xa7, 0x07, 0xab, 0xe0, 0x01, 0x53, + 0x0d, 0xd7, 0xc8, 0xa7, 0x36, 0x9f, 0xe5, 0x78, 0xc6, 0xd8, 0x12, 0x9b, + 0x32, 0xaf, 0x0c, 0x18, 0x93, 0x05, 0x2b, 0x00, 0x30, 0xd1, 0x80, 0x02, + 0x1b, 0x50, 0xe1, 0x78, 0xff, 0xff, 0x3a, 0x54, 0x6f, 0x86, 0x01, 0x1b, + 0x85, 0xcf, 0x92, 0x08, 0x7f, 0x20, 0x27, 0x00, 0x23, 0x16, 0xb7, 0x7a, + 0x8e, 0x08, 0x8f, 0x1f, 0x7f, 0x29, 0x8f, 0x49, 0xbb, 0x89, 0x03, 0xb7, + 0x01, 0x68, 0x50, 0x35, 0xd7, 0x1e, 0xeb, 0xc6, 0x25, 0x2f, 0x50, 0xe3, + 0x67, 0xaa, 0x01, 0xb3, 0x35, 0xc1, 0xb3, 0xfb, 0x45, 0xbf, 0xf4, 0x08, + 0xd7, 0x91, 0x81, 0x0a, 0xff, 0xd4, 0x25, 0x9f, 0xe5, 0xc8, 0x95, 0x49, + 0x2b, 0xfa, 0x02, 0xab, 0x12, 0xb7, 0x31, 0xfb, 0x02, 0x63, 0x0a, 0x5f, + 0x53, 0x48, 0xff, 0xbc, 0x56, 0x35, 0xb8, 0xdf, 0x0e, 0x02, 0x0f, 0x7c, + 0x00, 0x3b, 0x13, 0x7b, 0x02, 0x86, 0x11, 0xdf, 0x10, 0xd4, 0xe5, 0x88, + 0x01, 0xa3, 0x19, 0xef, 0x63, 0xbc, 0x01, 0x47, 0xb0, 0x01, 0xaf, 0x17, + 0xf3, 0x0f, 0x2f, 0x22, 0x1b, 0x88, 0x85, 0xf9, 0x3f, 0xa3, 0x22, 0x93, + 0x01, 0x5b, 0x12, 0xe7, 0x04, 0x6c, 0x0a, 0x03, 0x0e, 0xff, 0x96, 0x07, + 0xa3, 0xe1, 0x03, 0x0f, 0xa3, 0x55, 0x01, 0x7f, 0x11, 0x8f, 0x00, 0x2e, + 0x10, 0xd5, 0x29, 0xa3, 0xff, 0x0a, 0x17, 0x15, 0x17, 0x07, 0x0b, 0xe5, + 0x03, 0xf6, 0xff, 0xff, 0x8a, 0x40, 0x75, 0x03, 0xab, 0x2a, 0xb3, 0xe1, + 0x0a, 0x8f, 0x02, 0x4b, 0x05, 0xea, 0x9a, 0x01, 0x30, 0x81, 0x20, 0x27, + 0x63, 0x08, 0x14, 0xe3, 0x29, 0xcf, 0xc2, 0xe5, 0x08, 0x05, 0xb7, 0x11, + 0x7f, 0xb9, 0x10, 0x53, 0x40, 0x40, 0x53, 0x70, 0x4f, 0x19, 0xf3, 0xc4, + 0xe5, 0x04, 0xe3, 0x67, 0x9a, 0x14, 0x23, 0x19, 0x8f, 0xd0, 0x34, 0x4b, + 0xdf, 0x00, 0x07, 0x52, 0x83, 0x6b, 0xdc, 0x10, 0x0b, 0xc2, 0x83, 0x50, + 0x02, 0x83, 0x0b, 0x07, 0x33, 0x17, 0x2b, 0x71, 0x08, 0x2a, 0x4f, 0x11, + 0x6f, 0x09, 0x9b, 0x30, 0xc1, 0xe5, 0x05, 0x43, 0x35, 0x0a, 0x01, 0x18, + 0xf3, 0x01, 0x87, 0x06, 0x0a, 0xaf, 0x22, 0x50, 0xcb, 0x54, 0x20, 0x90, + 0xcb, 0x52, 0x60, 0xcb, 0x5e, 0x18, 0xc7, 0xe4, 0x9f, 0x17, 0xe5, 0x3c, + 0x24, 0x33, 0xaf, 0x0e, 0x0a, 0x17, 0xfa, 0xa3, 0x7a, 0xa3, 0x4e, 0x45, + 0x0a, 0x87, 0x20, 0x94, 0x04, 0x9f, 0xfa, 0x3f, 0xba, 0x3f, 0xe0, 0xd5, + 0xfa, 0x3f, 0x5a, 0x3f, 0x34, 0x1a, 0xcb, 0x33, 0xfa, 0x3f, 0x2a, 0x0b, + 0xa7, 0x00, 0xcc, 0xfe, 0xff, 0xea, 0x01, 0x00, 0x56, 0xe3, 0x4b, 0x42, + 0x01, 0x17, 0xd0, 0x83, 0xb2, 0x83, 0xb5, 0x29, 0x37, 0xd1, 0x43, 0x5b, + 0xc5, 0x21, 0x67, 0x05, 0x01, 0x67, 0x10, 0xef, 0xe6, 0x11, 0xef, 0xf1, + 0x67, 0xb2, 0x21, 0x67, 0x1b, 0x03, 0xbb, 0x07, 0x9f, 0xe3, 0xdd, 0x03, + 0xc3, 0xcc, 0xcd, 0x42, 0x17, 0x0f, 0x9b, 0x1a, 0x6c, 0x10, 0x8b, 0x00, + 0xcf, 0x74, 0x00, 0x93, 0xfb, 0x10, 0xd3, 0x2c, 0x13, 0x00, 0xd3, 0x10, + 0xff, 0x1b, 0x17, 0x02, 0x08, 0x3b, 0x1a, 0xf7, 0x7c, 0xa8, 0x13, 0xe3, + 0x00, 0xf7, 0x13, 0x77, 0x1c, 0xa3, 0x21, 0x23, 0x20, 0x90, 0x3f, 0xe5, + 0x01, 0x0c, 0x27, 0x2b, 0xcb, 0x0a, 0xf3, 0x1c, 0x37, 0x1c, 0x47, 0x21, + 0x83, 0x51, 0x20, 0x13, 0x87, 0xcc, 0x07, 0xaf, 0xce, 0xe5, 0x1d, 0x1b, + 0xbb, 0xc0, 0x48, 0x73, 0x1c, 0xa3, 0xdf, 0xfe, 0xff, 0x0a, 0x04, 0xe0, + 0x12, 0x9d, 0xe5, 0x0e, 0x4c, 0xcf, 0xdb, 0xf3, 0x3c, 0xa3, 0xb6, 0xa0, + 0x04, 0x5f, 0x03, 0x42, 0xb3, 0xd6, 0xfe, 0xff, 0x1a, 0xd8, 0x71, 0x82, + 0x0d, 0x77, 0x04, 0x1b, 0x92, 0x57, 0xd1, 0xfe, 0xff, 0x62, 0x57, 0x6a, + 0xaa, 0xf0, 0xef, 0x62, 0x57, 0xc7, 0x01, 0x4b, 0x7c, 0x4e, 0x33, 0x78, + 0xd8, 0x2d, 0x97, 0x34, 0xd7, 0x88, 0x1d, 0xa3, 0x69, 0x1b, 0xd4, 0xe5, + 0x0b, 0x0d, 0xc0, 0xc2, 0xe5, 0xbb, 0x00, 0x7f, 0x12, 0x53, 0x68, 0x10, + 0x6f, 0xeb, 0xf2, 0x57, 0x23, 0x23, 0x52, 0x57, 0x09, 0x0d, 0x07, 0x8c, + 0x40, 0x77, 0xf2, 0x57, 0x84, 0x33, 0x23, 0x1c, 0x72, 0x9f, 0xe5, 0x10, + 0x7f, 0x37, 0xfd, 0xd5, 0x3b, 0x73, 0x09, 0xbf, 0x0a, 0x1b, 0x8b, 0xdb, + 0x01, 0xdf, 0xb9, 0x00, 0xeb, 0xac, 0x11, 0x87, 0x7b, 0x05, 0x4b, 0x6a, + 0x43, 0x9f, 0x0b, 0xa7, 0x01, 0x62, 0xb7, 0x0d, 0xfb, 0xe0, 0x18, 0xe7, + 0x02, 0x5b, 0xe8, 0x1d, 0x9f, 0xf1, 0x8b, 0x61, 0x8b, 0x71, 0x4b, 0x45, + 0x13, 0x21, 0x8b, 0x0e, 0xa3, 0x00, 0x10, 0xde, 0x21, 0x8b, 0xc2, 0x2c, + 0xd7, 0x0a, 0x17, 0x01, 0x10, 0x81, 0xe2, 0x21, 0x8b, 0x10, 0x40, 0x01, + 0x0d, 0xd3, 0xa0, 0xe3, 0x10, 0x40, 0xa0, 0x13, 0xaa, 0x0c, 0x0b, 0x03, + 0x91, 0x93, 0xb8, 0x02, 0x6b, 0x5c, 0x49, 0x57, 0x58, 0xff, 0x1e, 0x0f, + 0x41, 0x1f, 0x19, 0x9b, 0x5a, 0x3b, 0x10, 0x1f, 0x18, 0xfb, 0x1f, 0x77, + 0x11, 0x27, 0x4d, 0x71, 0x41, 0x27, 0x40, 0x81, 0xf1, 0x27, 0x13, 0x7f, + 0xc0, 0x83, 0x7f, 0xb0, 0x11, 0x27, 0x42, 0xf1, 0x27, 0xa3, 0x7f, 0xf4, + 0x70, 0x9f, 0xe5, 0x63, 0x7d, 0x02, 0xf3, 0xf1, 0xc3, 0xc5, 0xe5, 0x52, + 0x04, 0x6b, 0x12, 0xd7, 0xb6, 0x11, 0x6f, 0x30, 0xf1, 0xe7, 0x64, 0x3f, + 0x48, 0x1b, 0xd3, 0x17, 0x27, 0x30, 0x18, 0xc7, 0xe5, 0x3e, 0x03, 0x3f, + 0x92, 0x67, 0xb9, 0xfc, 0xff, 0x2d, 0x1b, 0xec, 0x02, 0x5b, 0x50, 0x1d, + 0x6f, 0xce, 0x1b, 0xb2, 0x00, 0x1b, 0x5c, 0xe5, 0x02, 0x77, 0xac, 0x05, + 0x7f, 0x62, 0x8b, 0x1f, 0x87, 0x20, 0xc5, 0x26, 0xe5, 0x2c, 0x03, 0x87, + 0xc8, 0xfc, 0x3d, 0x2f, 0x04, 0x4f, 0x03, 0x53, 0x98, 0x41, 0xbf, 0x6b, + 0x03, 0x9f, 0x34, 0x0c, 0xfd, 0xb7, 0x1d, 0xb7, 0xff, 0xdd, 0xb3, 0x1d, + 0xc7, 0x1d, 0xb7, 0x19, 0x9f, 0x1b, 0x0b, 0x1d, 0x2b, 0x19, 0xa7, 0x5b, + 0x13, 0xbd, 0x5d, 0xc3, 0x74, 0x4b, 0x1f, 0x19, 0xb7, 0x9d, 0x47, 0x19, + 0xb7, 0xd4, 0x0a, 0xaf, 0x67, 0x08, 0x1e, 0xaf, 0x1e, 0xf3, 0xe0, 0x93, + 0x0e, 0xbb, 0x1f, 0x8b, 0x07, 0x17, 0x21, 0xe0, 0x8e, 0x0d, 0x0f, 0x5e, + 0xe1, 0x01, 0xb0, 0x0a, 0xc7, 0xa8, 0x0d, 0xcf, 0x26, 0x0e, 0xfb, 0xac, + 0x6a, 0xab, 0xe0, 0xe3, 0x00, 0x0b, 0x10, 0x82, 0xe5, 0xa0, 0x0c, 0xdf, + 0xa0, 0x0d, 0x87, 0x1c, 0x83, 0x4a, 0x02, 0x09, 0xe7, 0x98, 0x10, 0x3e, + 0xfb, 0x00, 0x09, 0xa7, 0x04, 0x80, 0x0a, 0x0f, 0xa0, 0x94, 0xa0, 0xe1, + 0xac, 0x74, 0xa0, 0x4d, 0xe1, 0x1f, 0x53, 0x04, 0xc0, 0x3f, 0x57, 0x19, + 0x47, 0x0c, 0x19, 0xc3, 0x2c, 0x90, 0x83, 0x04, 0xff, 0x57, 0x0e, 0x13, + 0x0d, 0xb7, 0x70, 0x82, 0x91, 0x0d, 0xf7, 0xc1, 0xe5, 0x0a, 0x82, 0x0a, + 0x00, 0x60, 0x0d, 0xc7, 0x38, 0x80, 0x9d, 0x08, 0x0b, 0x05, 0x5f, 0x06, + 0xeb, 0x00, 0x40, 0x88, 0x20, 0xe5, 0x62, 0x02, 0xe3, 0x01, 0x50, 0x85, + 0xe2, 0x10, 0x80, 0x11, 0x2b, 0x60, 0xa0, 0x03, 0x07, 0x00, 0x55, 0xe1, + 0x0d, 0x02, 0x4c, 0x84, 0xe2, 0x0a, 0xbf, 0x0d, 0xea, 0x56, 0x1a, 0xcf, + 0x5d, 0x1a, 0x97, 0x7f, 0x7c, 0x0c, 0xbc, 0x1a, 0xc7, 0x1a, 0xcf, 0x64, + 0x0e, 0xdf, 0xa1, 0x11, 0x4b, 0x18, 0x4e, 0xd3, 0x01, 0x20, 0x51, 0xe2, + 0x0d, 0xb3, 0x05, 0x01, 0x36, 0x00, 0x00, 0x3a, 0x1c, 0xb3, 0x22, 0x06, + 0x5b, 0x08, 0x02, 0x00, 0x11, 0xe1, 0x1d, 0x03, 0x0e, 0x02, 0x11, 0x00, + 0xe3, 0x81, 0x11, 0xa0, 0x01, 0x08, 0x30, 0xa0, 0x44, 0x03, 0x00, 0x97, + 0x13, 0x01, 0x02, 0x16, 0xbf, 0x51, 0x31, 0x00, 0x01, 0x12, 0xa0, 0x31, + 0x03, 0x32, 0xa0, 0x31, 0x88, 0x0d, 0xe3, 0x3a, 0x02, 0x01, 0x30, 0x13, + 0x81, 0x10, 0xa0, 0x1c, 0x31, 0x83, 0x30, 0x30, 0x13, 0x28, 0x1b, 0x0c, + 0xff, 0x01, 0x00, 0x01, 0x40, 0x20, 0x03, 0x20, 0x82, 0x21, 0xa1, 0x0d, + 0x0b, 0x50, 0xa1, 0x00, 0x0b, 0xa3, 0x00, 0x0b, 0x21, 0x01, 0x50, 0xe1, + 0x03, 0x21, 0x01, 0x40, 0x20, 0x23, 0x21, 0x00, 0x17, 0x00, 0x0b, 0x58, + 0xa1, 0x00, 0x0b, 0xa3, 0x00, 0x0b, 0x1f, 0x27, 0x23, 0x32, 0xb0, 0x07, + 0x11, 0x21, 0x12, 0xa0, 0x11, 0x19, 0x57, 0x1e, 0x4f, 0x1e, 0x4b, 0xa8, + 0x04, 0xa3, 0x03, 0x0b, 0x81, 0x13, 0x20, 0x0b, 0x08, 0x51, 0xe3, 0x00, + 0x21, 0x18, 0xa0, 0x21, 0x10, 0x20, 0xa0, 0x23, 0x88, 0x0e, 0x63, 0x33, + 0x01, 0x0c, 0x00, 0x0f, 0x14, 0xa0, 0x21, 0x06, 0x08, 0x20, 0x82, 0x22, + 0x10, 0x08, 0xb7, 0x00, 0x3b, 0x21, 0x70, 0x04, 0x00, 0x0b, 0x0c, 0x37, + 0x0e, 0xab, 0x82, 0x82, 0xa1, 0x20, 0x18, 0x82, 0x90, 0x30, 0x0b, 0x27, + 0x1e, 0x93, 0x08, 0xe0, 0x2d, 0xc2, 0x17, 0x1f, 0x2d, 0x4f, 0x08, 0xe0, + 0x9d, 0xe4, 0x1e, 0xa7, 0x03, 0x08, 0x40, 0x2d, 0xe9, 0xbe, 0x0c, 0x03, + 0x06, 0x40, 0xbd, 0x00, 0xe8, 0x92, 0x00, 0x03, 0xe0, 0x03, 0x10, 0x41, + 0x68, 0xe0, 0x1e, 0xbf, 0x1e, 0xc3, 0x0d, 0x0f, 0xb3, 0xf8, 0xdf, 0x2d, + 0x00, 0xe9, 0x04, 0xb0, 0x4c, 0xe2, 0x28, 0xd0, 0x4b, 0x08, 0xe2, 0xf0, + 0x6f, 0x9d, 0x2f, 0x9b, 0x6d, 0x66, 0x74, 0x00, 0x6c, 0x5f, 0x73, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x50, 0x73, 0x0c, 0x02, 0x00, 0x30, 0x0f, 0x70, + 0x61, 0x72, 0x65, 0x80, 0x40, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x74, + 0x61, 0xc3, 0x04, 0x5b, 0x30, 0x1b, 0x66, 0x72, 0x65, 0x65, 0x30, 0x0e, + 0x70, 0x0f, 0x10, 0x70, 0x74, 0x72, 0x10, 0x3b, 0xdc, 0x00, 0x80, 0xbf, + 0x70, 0x98, 0x00, 0x03, 0x10, 0x47, 0xd0, 0x01, 0x2c, 0x4d, 0x80, 0xbf, + 0x55, 0x30, 0x00, 0x03, 0x34, 0x00, 0x07, 0x38, 0x00, 0x0b, 0x3c, 0x00, + 0x0f, 0x55, 0x7c, 0x00, 0x13, 0x80, 0x00, 0x17, 0x84, 0x00, 0x1b, 0x88, + 0x00, 0x1f, 0x55, 0x8c, 0x00, 0x23, 0x90, 0x00, 0x27, 0x94, 0x00, 0x2b, + 0x98, 0x00, 0x2f, 0x55, 0x9c, 0x00, 0x33, 0xa0, 0x00, 0x37, 0xa4, 0x00, + 0x3b, 0xe4, 0x00, 0x3f, 0x55, 0xe8, 0x00, 0x43, 0xec, 0x00, 0x47, 0xf0, + 0x00, 0x4b, 0xf4, 0x00, 0x4f, 0x54, 0xf8, 0x00, 0x53, 0x08, 0x00, 0x57, + 0xfc, 0x00, 0x5b, 0x00, 0x4e, 0xa1, 0x00, 0x77, 0x4f, 0x00, 0x7b, 0x50, + 0x80, 0xbf, 0x40, 0x00, 0x03, 0x55, 0x44, 0x00, 0x07, 0x48, 0x00, 0x0b, + 0x4c, 0x00, 0x0f, 0x50, 0x10, 0x03, 0x0a, 0x51, 0x80, 0xbf, 0x54, 0x00, + 0x03, 0x58, 0x10, 0x03, 0x52, 0x15, 0x80, 0xbf, 0x5c, 0x00, 0x03, 0x60, + 0x00, 0x07, 0x64, 0x00, 0x0b, 0x56, 0x68, 0x00, 0x0f, 0xa8, 0x10, 0x03, + 0x5a, 0x00, 0x63, 0x00, 0x03, 0xec, 0xab, 0x00, 0x07, 0xf0, 0x00, 0x0b, + 0xf4, 0x00, 0x0f, 0x28, 0x10, 0x67, 0x00, 0x17, 0x4d, 0xfc, 0x00, 0x1b, + 0x3c, 0x5b, 0x00, 0x5b, 0x00, 0x03, 0x44, 0x00, 0x07, 0x55, 0x84, 0x00, + 0x0b, 0x88, 0x00, 0x0f, 0x8c, 0x00, 0x13, 0x90, 0x00, 0x17, 0x55, 0x94, + 0x00, 0x1b, 0x98, 0x00, 0x1f, 0x9c, 0x00, 0x23, 0xa0, 0x00, 0x27, 0xa0, + 0x11, 0x4b, 0xff, 0x00, 0x00 +}; \ No newline at end of file diff --git a/arm9/source/driveOperations.cpp b/arm9/source/driveOperations.cpp index 037ab5b..a082f49 100644 --- a/arm9/source/driveOperations.cpp +++ b/arm9/source/driveOperations.cpp @@ -350,6 +350,35 @@ TWL_CODE void dldiLoadFromBin (const u8 dldiAddr[]) { dldiRelocateBinary ((data_t*)dldiAddr, dldiSize); } +TWL_CODE void dldiLoadFromLzss (const u8 dldiLzss[], const u32 len) { + *(u32*)0x02FF8000 = 0x53535A4C; + tonccpy((u32*)0x02FF8004, dldiLzss, len); + + u32* dldiAddr = new u32[0x8000/sizeof(u32)]; + LZ77_Decompress((u8*)0x02FF8004, (u8*)dldiAddr); + + // Check that it is a valid DLDI + if (!dldiIsValid ((DLDI_INTERFACE*)dldiAddr)) { + delete[] dldiAddr; + return; + } + + DLDI_INTERFACE* device = (DLDI_INTERFACE*)dldiAddr; + size_t dldiSize; + + // Calculate actual size of DLDI + // Although the file may only go to the dldiEnd, the BSS section can extend past that + if (device->dldiEnd > device->bssEnd) { + dldiSize = (char*)device->dldiEnd - (char*)device->dldiStart; + } else { + dldiSize = (char*)device->bssEnd - (char*)device->dldiStart; + } + dldiSize = (dldiSize + 0x03) & ~0x03; // Round up to nearest integer multiple + + dldiRelocateBinary ((data_t*)dldiAddr, dldiSize); + delete[] dldiAddr; +} + TWL_CODE bool UpdateCardInfo(char* gameid, char* gamename) { cardReadHeader((uint8*)0x02000000); tonccpy(&nds, (void*)0x02000000, sizeof(sNDSHeader)); @@ -416,7 +445,7 @@ TWL_CODE bool twl_flashcardMount(void) { dldiLoadFromBin(r4tf_dldi); fatMountSimple("fat", dldiGet()); } else if (!memcmp(gameid, "DSGB", 4)) { - dldiLoadFromBin(nrio_dldi); + dldiLoadFromLzss(nrio_lz77, 0x30DD); fatMountSimple("fat", dldiGet()); } /* else if (!memcmp(gameid, "ALXX", 4)) { // SuperCard DSTWO dldiLoadFromBin(dstwo_dldi); diff --git a/arm9/source/dumpOperations.cpp b/arm9/source/dumpOperations.cpp index 8a73a30..a517639 100644 --- a/arm9/source/dumpOperations.cpp +++ b/arm9/source/dumpOperations.cpp @@ -7,7 +7,7 @@ #include "fileOperations.h" #include "font.h" #include "gba.h" -#include "lzss.h" +#include "lzss_enc.h" #include "main.h" #include "ndsheaderbanner.h" #include "read_card.h" diff --git a/arm9/source/lzss.c b/arm9/source/lzss.c index ee1054d..233964e 100644 --- a/arm9/source/lzss.c +++ b/arm9/source/lzss.c @@ -1,361 +1,31 @@ -/*----------------------------------------------------------------------------*/ -/*-- lzss.c - LZSS coding for Nintendo GBA/DS --*/ -/*-- Copyright (C) 2011 CUE --*/ -/*-- --*/ -/*-- This program is free software: you can redistribute it and/or modify --*/ -/*-- it under the terms of the GNU General Public License as published by --*/ -/*-- the Free Software Foundation, either version 3 of the License, or --*/ -/*-- (at your option) any later version. --*/ -/*-- --*/ -/*-- This program is distributed in the hope that it will be useful, --*/ -/*-- but WITHOUT ANY WARRANTY; without even the implied warranty of --*/ -/*-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --*/ -/*-- GNU General Public License for more details. --*/ -/*-- --*/ -/*-- You should have received a copy of the GNU General Public License --*/ -/*-- along with this program. If not, see . --*/ -/*----------------------------------------------------------------------------*/ +#include "lzss.h" -/*----------------------------------------------------------------------------*/ -#include -#include #include -/*----------------------------------------------------------------------------*/ -#define CMD_DECODE 0x00 // decode -#define CMD_CODE_10 0x10 // LZSS magic number - -#define LZS_NORMAL 0x00 // normal mode, (0) -#define LZS_FAST 0x80 // fast mode, (1 << 7) -#define LZS_BEST 0x40 // best mode, (1 << 6) - -#define LZS_WRAM 0x00 // VRAM not compatible (LZS_WRAM | LZS_NORMAL) -#define LZS_VRAM 0x01 // VRAM compatible (LZS_VRAM | LZS_NORMAL) -#define LZS_WFAST 0x80 // LZS_WRAM fast (LZS_WRAM | LZS_FAST) -#define LZS_VFAST 0x81 // LZS_VRAM fast (LZS_VRAM | LZS_FAST) -#define LZS_WBEST 0x40 // LZS_WRAM best (LZS_WRAM | LZS_BEST) -#define LZS_VBEST 0x41 // LZS_VRAM best (LZS_VRAM | LZS_BEST) - -#define LZS_SHIFT 1 // bits to shift -#define LZS_MASK 0x80 // bits to check: - // ((((1 << LZS_SHIFT) - 1) << (8 - LZS_SHIFT) - -#define LZS_THRESHOLD 2 // max number of bytes to not encode -#define LZS_N 0x1000 // max offset (1 << 12) -#define LZS_F 0x12 // max coded ((1 << 4) + LZS_THRESHOLD) -#define LZS_NIL LZS_N // index for root of binary search trees - -#define RAW_MINIM 0x00000000 // empty file, 0 bytes -#define RAW_MAXIM 0x00FFFFFF // 3-bytes length, 16MB - 1 - -#define LZS_MINIM 0x00000004 // header only (empty RAW file) -#define LZS_MAXIM 0x01400000 // 0x01200003, padded to 20MB: - // * header, 4 - // * length, RAW_MAXIM - // * flags, (RAW_MAXIM + 7) / 8 - // 4 + 0x00FFFFFF + 0x00200000 + padding - -/*----------------------------------------------------------------------------*/ -unsigned char ring[LZS_N + LZS_F - 1]; -int dad[LZS_N + 1], lson[LZS_N + 1], rson[LZS_N + 1 + 256]; -int pos_ring, len_ring, lzs_vram; - -/*----------------------------------------------------------------------------*/ -#define BREAK(text) { printf(text); return; } -#define EXIT(text) { printf(text); exit(-1); } - -/*----------------------------------------------------------------------------*/ -unsigned char *Memory(int length, int size); - -unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len); -unsigned char *LZS_Code(unsigned char *raw_buffer, int raw_len, unsigned int *new_len, int best); - -unsigned char *LZS_Fast(unsigned char *raw_buffer, int raw_len, unsigned int *new_len); -void LZS_InitTree(void); -void LZS_InsertNode(int r); -void LZS_DeleteNode(int p); - -/*----------------------------------------------------------------------------*/ -unsigned char *Memory(int length, int size) { - unsigned char *fb; - - fb = (unsigned char *) calloc(length, size); - if (fb == NULL) EXIT("\nMemory error\n"); - - return(fb); -} - -/*----------------------------------------------------------------------------*/ -unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len) { - unsigned char *pak_buffer, *new_buffer; - unsigned int new_len; - - lzs_vram = mode & 0xF; - - // printf("- encoding '%s'", filename); - - // raw_buffer = Load(filename, &raw_len, RAW_MINIM, RAW_MAXIM); - - pak_buffer = NULL; - *pak_len = LZS_MAXIM + 1; - - if (!(mode & LZS_FAST)) { - mode = mode & LZS_BEST ? 1 : 0; - new_buffer = LZS_Code(raw_buffer, raw_len, &new_len, mode); - } else { - new_buffer = LZS_Fast(raw_buffer, raw_len, &new_len); - } - if (new_len < *pak_len) { - if (pak_buffer != NULL) free(pak_buffer); - pak_buffer = new_buffer; - if(pak_len) - *pak_len = new_len; - } - - // Save(filename, pak_buffer, pak_len); - - // free(pak_buffer); - // free(raw_buffer); - - // printf("\n"); - - return pak_buffer; -} - -/*----------------------------------------------------------------------------*/ -unsigned char *LZS_Code(unsigned char *raw_buffer, int raw_len, unsigned int *new_len, int best) { - unsigned char *pak_buffer, *pak, *raw, *raw_end, *flg; - unsigned int pak_len, len, pos, len_best, pos_best; - unsigned int len_next, pos_next, len_post, pos_post; - unsigned char mask; - -#define SEARCH(l,p) { \ - l = LZS_THRESHOLD; \ - \ - pos = raw - raw_buffer >= LZS_N ? LZS_N : raw - raw_buffer; \ - for ( ; pos > lzs_vram; pos--) { \ - for (len = 0; len < LZS_F; len++) { \ - if (raw + len == raw_end) break; \ - if (*(raw + len) != *(raw + len - pos)) break; \ - } \ - \ - if (len > l) { \ - p = pos; \ - if ((l = len) == LZS_F) break; \ - } \ - } \ -} - - pak_len = 4 + raw_len + ((raw_len + 7) / 8); - pak_buffer = (unsigned char *) Memory(pak_len, sizeof(char)); - - *(unsigned int *)pak_buffer = CMD_CODE_10 | (raw_len << 8); - - pak = pak_buffer + 4; - raw = raw_buffer; - raw_end = raw_buffer + raw_len; - - mask = 0; - - while (raw < raw_end) { - if (!(mask >>= LZS_SHIFT)) { - *(flg = pak++) = 0; - mask = LZS_MASK; - } - - SEARCH(len_best, pos_best); - - // LZ-CUE optimization start - if (best) { - if (len_best > LZS_THRESHOLD) { - if (raw + len_best < raw_end) { - raw += len_best; - SEARCH(len_next, pos_next); - raw -= len_best - 1; - SEARCH(len_post, pos_post); - raw--; - - if (len_next <= LZS_THRESHOLD) len_next = 1; - if (len_post <= LZS_THRESHOLD) len_post = 1; - - if (len_best + len_next <= 1 + len_post) len_best = 1; - } - } - } - // LZ-CUE optimization end - - if (len_best > LZS_THRESHOLD) { - raw += len_best; - *flg |= mask; - *pak++ = ((len_best - (LZS_THRESHOLD + 1)) << 4) | ((pos_best - 1) >> 8); - *pak++ = (pos_best - 1) & 0xFF; - } else { - *pak++ = *raw++; - } - } - - *new_len = pak - pak_buffer; - - return(pak_buffer); -} - -/*----------------------------------------------------------------------------*/ -unsigned char *LZS_Fast(unsigned char *raw_buffer, int raw_len, unsigned int *new_len) { - unsigned char *pak_buffer, *pak, *raw, *raw_end, *flg; - unsigned int pak_len, len, r, s, len_tmp, i; - unsigned char mask; - - pak_len = 4 + raw_len + ((raw_len + 7) / 8); - pak_buffer = (unsigned char *) Memory(pak_len, sizeof(char)); - - *(unsigned int *)pak_buffer = CMD_CODE_10 | (raw_len << 8); - - pak = pak_buffer + 4; - raw = raw_buffer; - raw_end = raw_buffer + raw_len; - - LZS_InitTree(); - - r = s = 0; - - len = raw_len < LZS_F ? raw_len : LZS_F; - while (r < LZS_N - len) ring[r++] = 0; - - for (i = 0; i < len; i++) ring[r + i] = *raw++; - - LZS_InsertNode(r); - - mask = 0; - - while (len) { - if (!(mask >>= LZS_SHIFT)) { - *(flg = pak++) = 0; - mask = LZS_MASK; - } - - if (len_ring > len) len_ring = len; - - if (len_ring > LZS_THRESHOLD) { - *flg |= mask; - pos_ring = ((r - pos_ring) & (LZS_N - 1)) - 1; - *pak++ = ((len_ring - LZS_THRESHOLD - 1) << 4) | (pos_ring >> 8); - *pak++ = pos_ring & 0xFF; - } else { - len_ring = 1; - *pak++ = ring[r]; - } - - len_tmp = len_ring; - for (i = 0; i < len_tmp; i++) { - if (raw == raw_end) break; - LZS_DeleteNode(s); - ring[s] = *raw++; - if (s < LZS_F - 1) ring[s + LZS_N] = ring[s]; - s = (s + 1) & (LZS_N - 1); - r = (r + 1) & (LZS_N - 1); - LZS_InsertNode(r); - } - while (i++ < len_tmp) { - LZS_DeleteNode(s); - s = (s + 1) & (LZS_N - 1); - r = (r + 1) & (LZS_N - 1); - if (--len) LZS_InsertNode(r); - } - } - - *new_len = pak - pak_buffer; - - return(pak_buffer); -} - -/*----------------------------------------------------------------------------*/ -void LZS_InitTree(void) { - int i; - - for (i = LZS_N + 1; i <= LZS_N + 256; i++) - rson[i] = LZS_NIL; - - for (i = 0; i < LZS_N; i++) - dad[i] = LZS_NIL; -} - -/*----------------------------------------------------------------------------*/ -void LZS_InsertNode(int r) { - unsigned char *key; - int i, p, cmp, prev; - - prev = (r - 1) & (LZS_N - 1); - - cmp = 1; - len_ring = 0; - - key = &ring[r]; - p = LZS_N + 1 + key[0]; - - rson[r] = lson[r] = LZS_NIL; - - for ( ; ; ) { - if (cmp >= 0) { - if (rson[p] != LZS_NIL) p = rson[p]; - else { rson[p] = r; dad[r] = p; return; } - } else { - if (lson[p] != LZS_NIL) p = lson[p]; - else { lson[p] = r; dad[r] = p; return; } - } - - for (i = 1; i < LZS_F; i++) - if ((cmp = key[i] - ring[p + i])) break; - - if (i > len_ring) { - if (!lzs_vram || (p != prev)) { - pos_ring = p; - if ((len_ring = i) == LZS_F) break; - } - } - } - - dad[r] = dad[p]; lson[r] = lson[p]; rson[r] = rson[p]; - - dad[lson[p]] = r; dad[rson[p]] = r; - - if (rson[dad[p]] == p) rson[dad[p]] = r; - else lson[dad[p]] = r; - - dad[p] = LZS_NIL; -} - -/*----------------------------------------------------------------------------*/ -void LZS_DeleteNode(int p) { - int q; - - if (dad[p] == LZS_NIL) return; - - if (rson[p] == LZS_NIL) { - q = lson[p]; - } else if (lson[p] == LZS_NIL) { - q = rson[p]; - } else { - q = lson[p]; - if (rson[q] != LZS_NIL) { - do { - q = rson[q]; - } while (rson[q] != LZS_NIL); - - rson[dad[q]] = lson[q]; dad[lson[q]] = dad[q]; - lson[q] = lson[p]; dad[lson[p]] = q; - } - - rson[q] = rson[p]; dad[rson[p]] = q; - } - - dad[q] = dad[p]; - - if (rson[dad[p]] == p) rson[dad[p]] = q; - else lson[dad[p]] = q; - - dad[p] = LZS_NIL; +#define __itcm __attribute__((section(".itcm"))) + +void __itcm +LZ77_Decompress(u8* source, u8* destination){ + u32 leng = (source[1] | (source[2] << 8) | (source[3] << 16)); + int Offs = 4; + int dstoffs = 0; + while (true) { + u8 header = source[Offs++]; + for (int i = 0; i < 8; i++) { + if ((header & 0x80) == 0) destination[dstoffs++] = source[Offs++]; + else + { + u8 a = source[Offs++]; + u8 b = source[Offs++]; + int offs = (((a & 0xF) << 8) | b) + 1; + int length = (a >> 4) + 3; + for (int j = 0; j < length; j++) { + destination[dstoffs] = destination[dstoffs - offs]; + dstoffs++; + } + } + if (dstoffs >= (int)leng) return; + header <<= 1; + } + } } - -/*----------------------------------------------------------------------------*/ -/*-- EOF Copyright (C) 2011 CUE --*/ -/*----------------------------------------------------------------------------*/ diff --git a/arm9/source/lzss.h b/arm9/source/lzss.h index 6fe63fd..2bbc656 100644 --- a/arm9/source/lzss.h +++ b/arm9/source/lzss.h @@ -1,22 +1,14 @@ -#ifndef LZ77_COMPRESS_H -#define LZ77_COMPRESS_H +#ifndef LZ77_DECOMPRESS_H +#define LZ77_DECOMPRESS_H + +#include #ifdef __cplusplus extern "C" { #endif - -#define LZS_WRAM 0x00 // VRAM not compatible (LZS_WRAM | LZS_NORMAL) -#define LZS_VRAM 0x01 // VRAM compatible (LZS_VRAM | LZS_NORMAL) -#define LZS_WFAST 0x80 // LZS_WRAM fast (LZS_WRAM | LZS_FAST) -#define LZS_VFAST 0x81 // LZS_VRAM fast (LZS_VRAM | LZS_FAST) -#define LZS_WBEST 0x40 // LZS_WRAM best (LZS_WRAM | LZS_BEST) -#define LZS_VBEST 0x41 // LZS_VRAM best (LZS_VRAM | LZS_BEST) - -// Returned buffer must be freed manually -// pak_len will be the length of the compressed output -unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len); +void LZ77_Decompress(u8* source, u8* destination); #ifdef __cplusplus } #endif -#endif /* LZ77_COMPRESS_H */ +#endif /* DECOMPRESS_H */ diff --git a/arm9/source/lzss_enc.c b/arm9/source/lzss_enc.c new file mode 100644 index 0000000..ee1054d --- /dev/null +++ b/arm9/source/lzss_enc.c @@ -0,0 +1,361 @@ +/*----------------------------------------------------------------------------*/ +/*-- lzss.c - LZSS coding for Nintendo GBA/DS --*/ +/*-- Copyright (C) 2011 CUE --*/ +/*-- --*/ +/*-- This program is free software: you can redistribute it and/or modify --*/ +/*-- it under the terms of the GNU General Public License as published by --*/ +/*-- the Free Software Foundation, either version 3 of the License, or --*/ +/*-- (at your option) any later version. --*/ +/*-- --*/ +/*-- This program is distributed in the hope that it will be useful, --*/ +/*-- but WITHOUT ANY WARRANTY; without even the implied warranty of --*/ +/*-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --*/ +/*-- GNU General Public License for more details. --*/ +/*-- --*/ +/*-- You should have received a copy of the GNU General Public License --*/ +/*-- along with this program. If not, see . --*/ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +#include +#include +#include + +/*----------------------------------------------------------------------------*/ +#define CMD_DECODE 0x00 // decode +#define CMD_CODE_10 0x10 // LZSS magic number + +#define LZS_NORMAL 0x00 // normal mode, (0) +#define LZS_FAST 0x80 // fast mode, (1 << 7) +#define LZS_BEST 0x40 // best mode, (1 << 6) + +#define LZS_WRAM 0x00 // VRAM not compatible (LZS_WRAM | LZS_NORMAL) +#define LZS_VRAM 0x01 // VRAM compatible (LZS_VRAM | LZS_NORMAL) +#define LZS_WFAST 0x80 // LZS_WRAM fast (LZS_WRAM | LZS_FAST) +#define LZS_VFAST 0x81 // LZS_VRAM fast (LZS_VRAM | LZS_FAST) +#define LZS_WBEST 0x40 // LZS_WRAM best (LZS_WRAM | LZS_BEST) +#define LZS_VBEST 0x41 // LZS_VRAM best (LZS_VRAM | LZS_BEST) + +#define LZS_SHIFT 1 // bits to shift +#define LZS_MASK 0x80 // bits to check: + // ((((1 << LZS_SHIFT) - 1) << (8 - LZS_SHIFT) + +#define LZS_THRESHOLD 2 // max number of bytes to not encode +#define LZS_N 0x1000 // max offset (1 << 12) +#define LZS_F 0x12 // max coded ((1 << 4) + LZS_THRESHOLD) +#define LZS_NIL LZS_N // index for root of binary search trees + +#define RAW_MINIM 0x00000000 // empty file, 0 bytes +#define RAW_MAXIM 0x00FFFFFF // 3-bytes length, 16MB - 1 + +#define LZS_MINIM 0x00000004 // header only (empty RAW file) +#define LZS_MAXIM 0x01400000 // 0x01200003, padded to 20MB: + // * header, 4 + // * length, RAW_MAXIM + // * flags, (RAW_MAXIM + 7) / 8 + // 4 + 0x00FFFFFF + 0x00200000 + padding + +/*----------------------------------------------------------------------------*/ +unsigned char ring[LZS_N + LZS_F - 1]; +int dad[LZS_N + 1], lson[LZS_N + 1], rson[LZS_N + 1 + 256]; +int pos_ring, len_ring, lzs_vram; + +/*----------------------------------------------------------------------------*/ +#define BREAK(text) { printf(text); return; } +#define EXIT(text) { printf(text); exit(-1); } + +/*----------------------------------------------------------------------------*/ +unsigned char *Memory(int length, int size); + +unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len); +unsigned char *LZS_Code(unsigned char *raw_buffer, int raw_len, unsigned int *new_len, int best); + +unsigned char *LZS_Fast(unsigned char *raw_buffer, int raw_len, unsigned int *new_len); +void LZS_InitTree(void); +void LZS_InsertNode(int r); +void LZS_DeleteNode(int p); + +/*----------------------------------------------------------------------------*/ +unsigned char *Memory(int length, int size) { + unsigned char *fb; + + fb = (unsigned char *) calloc(length, size); + if (fb == NULL) EXIT("\nMemory error\n"); + + return(fb); +} + +/*----------------------------------------------------------------------------*/ +unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len) { + unsigned char *pak_buffer, *new_buffer; + unsigned int new_len; + + lzs_vram = mode & 0xF; + + // printf("- encoding '%s'", filename); + + // raw_buffer = Load(filename, &raw_len, RAW_MINIM, RAW_MAXIM); + + pak_buffer = NULL; + *pak_len = LZS_MAXIM + 1; + + if (!(mode & LZS_FAST)) { + mode = mode & LZS_BEST ? 1 : 0; + new_buffer = LZS_Code(raw_buffer, raw_len, &new_len, mode); + } else { + new_buffer = LZS_Fast(raw_buffer, raw_len, &new_len); + } + if (new_len < *pak_len) { + if (pak_buffer != NULL) free(pak_buffer); + pak_buffer = new_buffer; + if(pak_len) + *pak_len = new_len; + } + + // Save(filename, pak_buffer, pak_len); + + // free(pak_buffer); + // free(raw_buffer); + + // printf("\n"); + + return pak_buffer; +} + +/*----------------------------------------------------------------------------*/ +unsigned char *LZS_Code(unsigned char *raw_buffer, int raw_len, unsigned int *new_len, int best) { + unsigned char *pak_buffer, *pak, *raw, *raw_end, *flg; + unsigned int pak_len, len, pos, len_best, pos_best; + unsigned int len_next, pos_next, len_post, pos_post; + unsigned char mask; + +#define SEARCH(l,p) { \ + l = LZS_THRESHOLD; \ + \ + pos = raw - raw_buffer >= LZS_N ? LZS_N : raw - raw_buffer; \ + for ( ; pos > lzs_vram; pos--) { \ + for (len = 0; len < LZS_F; len++) { \ + if (raw + len == raw_end) break; \ + if (*(raw + len) != *(raw + len - pos)) break; \ + } \ + \ + if (len > l) { \ + p = pos; \ + if ((l = len) == LZS_F) break; \ + } \ + } \ +} + + pak_len = 4 + raw_len + ((raw_len + 7) / 8); + pak_buffer = (unsigned char *) Memory(pak_len, sizeof(char)); + + *(unsigned int *)pak_buffer = CMD_CODE_10 | (raw_len << 8); + + pak = pak_buffer + 4; + raw = raw_buffer; + raw_end = raw_buffer + raw_len; + + mask = 0; + + while (raw < raw_end) { + if (!(mask >>= LZS_SHIFT)) { + *(flg = pak++) = 0; + mask = LZS_MASK; + } + + SEARCH(len_best, pos_best); + + // LZ-CUE optimization start + if (best) { + if (len_best > LZS_THRESHOLD) { + if (raw + len_best < raw_end) { + raw += len_best; + SEARCH(len_next, pos_next); + raw -= len_best - 1; + SEARCH(len_post, pos_post); + raw--; + + if (len_next <= LZS_THRESHOLD) len_next = 1; + if (len_post <= LZS_THRESHOLD) len_post = 1; + + if (len_best + len_next <= 1 + len_post) len_best = 1; + } + } + } + // LZ-CUE optimization end + + if (len_best > LZS_THRESHOLD) { + raw += len_best; + *flg |= mask; + *pak++ = ((len_best - (LZS_THRESHOLD + 1)) << 4) | ((pos_best - 1) >> 8); + *pak++ = (pos_best - 1) & 0xFF; + } else { + *pak++ = *raw++; + } + } + + *new_len = pak - pak_buffer; + + return(pak_buffer); +} + +/*----------------------------------------------------------------------------*/ +unsigned char *LZS_Fast(unsigned char *raw_buffer, int raw_len, unsigned int *new_len) { + unsigned char *pak_buffer, *pak, *raw, *raw_end, *flg; + unsigned int pak_len, len, r, s, len_tmp, i; + unsigned char mask; + + pak_len = 4 + raw_len + ((raw_len + 7) / 8); + pak_buffer = (unsigned char *) Memory(pak_len, sizeof(char)); + + *(unsigned int *)pak_buffer = CMD_CODE_10 | (raw_len << 8); + + pak = pak_buffer + 4; + raw = raw_buffer; + raw_end = raw_buffer + raw_len; + + LZS_InitTree(); + + r = s = 0; + + len = raw_len < LZS_F ? raw_len : LZS_F; + while (r < LZS_N - len) ring[r++] = 0; + + for (i = 0; i < len; i++) ring[r + i] = *raw++; + + LZS_InsertNode(r); + + mask = 0; + + while (len) { + if (!(mask >>= LZS_SHIFT)) { + *(flg = pak++) = 0; + mask = LZS_MASK; + } + + if (len_ring > len) len_ring = len; + + if (len_ring > LZS_THRESHOLD) { + *flg |= mask; + pos_ring = ((r - pos_ring) & (LZS_N - 1)) - 1; + *pak++ = ((len_ring - LZS_THRESHOLD - 1) << 4) | (pos_ring >> 8); + *pak++ = pos_ring & 0xFF; + } else { + len_ring = 1; + *pak++ = ring[r]; + } + + len_tmp = len_ring; + for (i = 0; i < len_tmp; i++) { + if (raw == raw_end) break; + LZS_DeleteNode(s); + ring[s] = *raw++; + if (s < LZS_F - 1) ring[s + LZS_N] = ring[s]; + s = (s + 1) & (LZS_N - 1); + r = (r + 1) & (LZS_N - 1); + LZS_InsertNode(r); + } + while (i++ < len_tmp) { + LZS_DeleteNode(s); + s = (s + 1) & (LZS_N - 1); + r = (r + 1) & (LZS_N - 1); + if (--len) LZS_InsertNode(r); + } + } + + *new_len = pak - pak_buffer; + + return(pak_buffer); +} + +/*----------------------------------------------------------------------------*/ +void LZS_InitTree(void) { + int i; + + for (i = LZS_N + 1; i <= LZS_N + 256; i++) + rson[i] = LZS_NIL; + + for (i = 0; i < LZS_N; i++) + dad[i] = LZS_NIL; +} + +/*----------------------------------------------------------------------------*/ +void LZS_InsertNode(int r) { + unsigned char *key; + int i, p, cmp, prev; + + prev = (r - 1) & (LZS_N - 1); + + cmp = 1; + len_ring = 0; + + key = &ring[r]; + p = LZS_N + 1 + key[0]; + + rson[r] = lson[r] = LZS_NIL; + + for ( ; ; ) { + if (cmp >= 0) { + if (rson[p] != LZS_NIL) p = rson[p]; + else { rson[p] = r; dad[r] = p; return; } + } else { + if (lson[p] != LZS_NIL) p = lson[p]; + else { lson[p] = r; dad[r] = p; return; } + } + + for (i = 1; i < LZS_F; i++) + if ((cmp = key[i] - ring[p + i])) break; + + if (i > len_ring) { + if (!lzs_vram || (p != prev)) { + pos_ring = p; + if ((len_ring = i) == LZS_F) break; + } + } + } + + dad[r] = dad[p]; lson[r] = lson[p]; rson[r] = rson[p]; + + dad[lson[p]] = r; dad[rson[p]] = r; + + if (rson[dad[p]] == p) rson[dad[p]] = r; + else lson[dad[p]] = r; + + dad[p] = LZS_NIL; +} + +/*----------------------------------------------------------------------------*/ +void LZS_DeleteNode(int p) { + int q; + + if (dad[p] == LZS_NIL) return; + + if (rson[p] == LZS_NIL) { + q = lson[p]; + } else if (lson[p] == LZS_NIL) { + q = rson[p]; + } else { + q = lson[p]; + if (rson[q] != LZS_NIL) { + do { + q = rson[q]; + } while (rson[q] != LZS_NIL); + + rson[dad[q]] = lson[q]; dad[lson[q]] = dad[q]; + lson[q] = lson[p]; dad[lson[p]] = q; + } + + rson[q] = rson[p]; dad[rson[p]] = q; + } + + dad[q] = dad[p]; + + if (rson[dad[p]] == p) rson[dad[p]] = q; + else lson[dad[p]] = q; + + dad[p] = LZS_NIL; +} + +/*----------------------------------------------------------------------------*/ +/*-- EOF Copyright (C) 2011 CUE --*/ +/*----------------------------------------------------------------------------*/ diff --git a/arm9/source/lzss_enc.h b/arm9/source/lzss_enc.h new file mode 100644 index 0000000..6fe63fd --- /dev/null +++ b/arm9/source/lzss_enc.h @@ -0,0 +1,22 @@ +#ifndef LZ77_COMPRESS_H +#define LZ77_COMPRESS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define LZS_WRAM 0x00 // VRAM not compatible (LZS_WRAM | LZS_NORMAL) +#define LZS_VRAM 0x01 // VRAM compatible (LZS_VRAM | LZS_NORMAL) +#define LZS_WFAST 0x80 // LZS_WRAM fast (LZS_WRAM | LZS_FAST) +#define LZS_VFAST 0x81 // LZS_VRAM fast (LZS_VRAM | LZS_FAST) +#define LZS_WBEST 0x40 // LZS_WRAM best (LZS_WRAM | LZS_BEST) +#define LZS_VBEST 0x41 // LZS_VRAM best (LZS_VRAM | LZS_BEST) + +// Returned buffer must be freed manually +// pak_len will be the length of the compressed output +unsigned char *LZS_Encode(unsigned char *raw_buffer, int raw_len, int mode, int *pak_len); + +#ifdef __cplusplus +} +#endif +#endif /* LZ77_COMPRESS_H */