diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..100a01a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +"Microcontroller Code/.pio" + diff --git a/Microcontroller Code/.gitignore b/Microcontroller Code/.gitignore new file mode 100644 index 0000000..89cc49c --- /dev/null +++ b/Microcontroller Code/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/Microcontroller Code/.vscode/extensions.json b/Microcontroller Code/.vscode/extensions.json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/Microcontroller Code/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/Microcontroller Code/include/README b/Microcontroller Code/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/Microcontroller Code/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/README.md b/Microcontroller Code/lib/Arduino_GFX-1.0.7/README.md new file mode 100644 index 0000000..a57ed17 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/README.md @@ -0,0 +1,133 @@ +# Arduino_GFX + +Arduino_GFX is a Arduino graphics library supporting various displays with various data bus interfaces. + +This library start rewrite from Adafruit_GFX, TFT_eSPI, Ucglib and more... + +## Various dat bus interfaces + +Most tiny display in hobbiest electronics world support 8-bit SPI, but some require 9-bit SPI. As I know, it should be the first Arduino display library that can support ESP32 9-bit hardware SPI. It is very important to support the displays (e.g. HX8357B, ST7701, ...) that require 9-bit SPI interface. + +Larger display most likely not support standalone SPI since it is not fast enough to refresh the full screen details. Most of them can use 8-bit/16-bit Parallel interface. + +## Ease of use +#### Simple Declaration +(not require touch the header files in libraries folder) +```C +#include +Arduino_DataBus *bus = new Arduino_HWSPI(16 /* DC */, 5 /* CS */); +Arduino_GFX *gfx = new Arduino_ILI9341(bus, 17 /* RST */); +``` + +#### And Simple Usage +``` +gfx->begin(); +gfx->fillScreen(BLACK); +gfx->setCursor(10, 10); +gfx->setTextColor(RED); +gfx->println("Hello World!"); +``` + + +## Performance +This library is not putting speed at the first priority, but still paid much effort to make the display look smooth. Below are some figures compare with other 2 Arduino common display libraries. +- Arduino IDE: 1.8.10 +- MCU: ESP32-PICO-D4 +- PSRAM: disable +- Display: ILI9341 +- Interface: SPI@40MHz +- Test time: 2019 Oct 13 + +| Benchmark | Adafruit_GFX | *Arduino_GFX* | TFT_eSPI | +| ------------------ | ------------- | ------------- | ------------- | +| Screen fill | 39,055 | ***32,229*** | 33,355 | +| Text | 96,432 | ***18,717*** | 24,010 | +| Pixels | 1,353,319 | *919,219* | **768,022** | +| Lines | 1,061,808 | *455,992* | **307,429** | +| Horiz/Vert Lines | 17,614 | ***14,277*** | 14,587 | +| Rectangles-filled | 405,880 | ***334,974*** | 346,317 | +| Rectangles | 11,656 | *9,374* | **9,251** | +| Circles-filled | 76,619 | ***55,173*** | 62,182 | +| Circles | 118,051 | *52,315* | **46,909** | +| Triangles-filled | 150,999 | *120,362* | **117,591** | +| Triangles | 58,795 | *26,143* | **18,704** | +| Rounded rects-fill | 407,755 | ***335,537*** | 376,764 | +| Rounded rects | 42,668 | ***21,100*** | 24,201 | + +| Foot print | Adafruit_GFX | *Arduino_GFX* | TFT_eSPI | +| ------------------ | ------------- | ------------- | ------------- | +| Flash | 232,572 | 245,544 | ***231,136*** | +| Estimate memory | 15,512 | 15,616 | ***15,432*** | + + +## Currently Supported data bus +- 8-bit and 9-bit hardware SPI (ESP32SPI) +- 8-bit hardware SPI (HWSPI) +- 8-bit and 9-bit software SPI (SWSPI) +- 8-bit parallel interface (ESP32PAR8) +- 16-bit parallel interface (ESP32PAR16) + +## Tobe Support data bus (Donation can make it happen) +- ESP32 I2S 8-bit/16-bit parallel interface +- FastLED + +## Currently Supported Dev Device +- M5Stack Core Family +- Odroid Go +- TTGO T-Watch +- Wio Terminal + +## Currently Supported Display +- GC9A01 round display 240x240 [[test video](https://youtu.be/kJrAFm20-zg)] +- HX8347C 240x320 [[test video](https://youtu.be/25ymuV51YQM)] +- HX8347D 240x320 [[test video](https://youtu.be/sv6LGkLRZjI)] +- HX8352C 240x400 [[test video](https://youtu.be/m2xWYbS3t7s)] +- HX8357B (9-bit SPI) 320x480 [[test video](https://youtu.be/pB6_LOCiUqg)] +- ILI9225 176x220 [[test video](https://youtu.be/jm2UrCG27F4)] +- ILI9341 240x320 [[test video](https://youtu.be/NtlEEL7MkQY)] +- ILI9341 M5Stack 320x240 [[test video](https://youtu.be/UoPpIjVSO5Q)] +- ILI9481 320x480 (18 bit color) [[test video](https://youtu.be/YxjuuCFhlqM)] +- ILI9486 320x480 (18 bit color) [[test video](https://youtu.be/pZ6izDqmVds)] +- ILI9488 320x480 (18 bit color) [[test video](https://youtu.be/NkE-LhtLHBQ)] +- JBT6K71 (8-bit Parallel) 240x320 [[test video](https://youtu.be/qid3F4Gb0mM)] +- R61529 (8-bit/16-bit Parallel) 320x480 [[test video](https://youtu.be/s93gxjbIAT8)] +- SEPS525 160x128 [[test video](https://youtu.be/tlmvFBHYv-k)] +- SSD1283A 130x130 [[test video](https://youtu.be/OrIchaRikiQ)] +- SSD1331 96x64 [[test video](https://youtu.be/v20b1A_KDcQ)] +- SSD1351 128x128 [[test video](https://youtu.be/5TIM-qMVBNQ)] +- SSD1351 128x96 +- ST7735 128x160 (various tabs) [[test video](https://youtu.be/eRBSSD_N9II)] +- ST7735 128x128 (various tabs) [[test video](https://youtu.be/6rueSV2Ee6c)] +- ST7735 80x160 [[test video](https://youtu.be/qESHDuYo_Mk)] +- ST7789 TTGO T-Display 135x240 [[test video](https://youtu.be/Zk81_T8c20E)] +- ST7789 240x240 [[test video](https://youtu.be/Z27zYg5uAsk)] +- ST7789 TTGO T-Watch 240x240 [[test video](https://youtu.be/9AqsXMB8Qbk)] +- ST7789 round corner display 240x280 [[test video](https://youtu.be/KzDC02wg8z0)] +- ST7789 240x320 [[test video](https://youtu.be/ZEvc1LkuVuQ)] +- ST7796 320x480 [[test video](https://youtu.be/hUL-RuG4MAQ)] +- Canvas (framebuffer) +- Canvas_Indexed (for saving memory space) + +## Tobe Support Display (Donation can make it happen) +- HX8357A 240x320 (first trial failed) +- LG4573 480x800 (first trial failed) +- ILI9806 480x800 (first trial failed) +- ST7701 480x800 +- FastLED Martix supported by co-operate with Canvas +- Mono display supported by co-operate with Canvas +- Multi-color e-ink display supported by co-operate with Canvas +- ILI9486 320x480 (3 bit color) supported by co-operate with Canvas + +## Used source code +- http://elm-chan.org/fsw/tjpgd/00index.html +- https://github.com/adafruit/Adafruit-GFX-Library.git +- https://github.com/adafruit/Adafruit_ILI9341.git +- https://github.com/adafruit/Adafruit-SSD1351-library.git +- https://github.com/ananevilya/Arduino-ST7789-Library.git +- https://github.com/BasementCat/arduino-tft-gif +- https://github.com/Bodmer/TFT_eSPI +- https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test +- https://github.com/espressif/arduino-esp32.git +- https://github.com/gitcnd/LCDWIKI_SPI.git +- https://github.com/lovyan03/LovyanGFX.git +- https://github.com/lovyan03/M5Stack_JpgLoopAnime diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/Clock/Clock.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/Clock/Clock.ino new file mode 100644 index 0000000..2e167c7 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/Clock/Clock.ino @@ -0,0 +1,538 @@ +/* + Arduino Watch Lite Version + You may find full version at: https://github.com/moononournation/ArduinoWatch +*/ + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +#define BACKGROUND BLACK +#define MARK_COLOR WHITE +#define SUBMARK_COLOR DARKGREY // LIGHTGREY +#define HOUR_COLOR WHITE +#define MINUTE_COLOR BLUE // LIGHTGREY +#define SECOND_COLOR RED + +#define SIXTIETH 0.016666667 +#define TWELFTH 0.08333333 +#define SIXTIETH_RADIAN 0.10471976 +#define TWELFTH_RADIAN 0.52359878 +#define RIGHT_ANGLE_RADIAN 1.5707963 + +static uint8_t conv2d(const char *p) +{ + uint8_t v = 0; + return (10 * (*p - '0')) + (*++p - '0'); +} + +static int16_t w, h, center; +static int16_t hHandLen, mHandLen, sHandLen, markLen; +static float sdeg, mdeg, hdeg; +static int16_t osx = 0, osy = 0, omx = 0, omy = 0, ohx = 0, ohy = 0; // Saved H, M, S x & y coords +static int16_t nsx, nsy, nmx, nmy, nhx, nhy; // H, M, S x & y coords +static int16_t xMin, yMin, xMax, yMax; // redraw range +static int16_t hh, mm, ss; +static unsigned long targetTime; // next action time + +static int16_t *cached_points; +static uint16_t cached_points_idx = 0; +static int16_t *last_cached_point; + +void setup(void) +{ + gfx->begin(); + gfx->fillScreen(BACKGROUND); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + + // init LCD constant + w = gfx->width(); + h = gfx->height(); + if (w < h) + { + center = w / 2; + } + else + { + center = h / 2; + } + hHandLen = center * 3 / 8; + mHandLen = center * 2 / 3; + sHandLen = center * 5 / 6; + markLen = sHandLen / 6; + cached_points = (int16_t *)malloc((hHandLen + 1 + mHandLen + 1 + sHandLen + 1) * 2 * 2); + + // Draw 60 clock marks + draw_round_clock_mark( + // draw_square_clock_mark( + center - markLen, center, + center - (markLen * 2 / 3), center, + center - (markLen / 2), center); + + hh = conv2d(__TIME__); + mm = conv2d(__TIME__ + 3); + ss = conv2d(__TIME__ + 6); + + targetTime = ((millis() / 1000) + 1) * 1000; +} + +void loop() +{ + unsigned long cur_millis = millis(); + if (cur_millis >= targetTime) + { + targetTime += 1000; + ss++; // Advance second + if (ss == 60) + { + ss = 0; + mm++; // Advance minute + if (mm > 59) + { + mm = 0; + hh++; // Advance hour + if (hh > 23) + { + hh = 0; + } + } + } + } + + // Pre-compute hand degrees, x & y coords for a fast screen update + sdeg = SIXTIETH_RADIAN * ((0.001 * (cur_millis % 1000)) + ss); // 0-59 (includes millis) + nsx = cos(sdeg - RIGHT_ANGLE_RADIAN) * sHandLen + center; + nsy = sin(sdeg - RIGHT_ANGLE_RADIAN) * sHandLen + center; + if ((nsx != osx) || (nsy != osy)) + { + mdeg = (SIXTIETH * sdeg) + (SIXTIETH_RADIAN * mm); // 0-59 (includes seconds) + hdeg = (TWELFTH * mdeg) + (TWELFTH_RADIAN * hh); // 0-11 (includes minutes) + mdeg -= RIGHT_ANGLE_RADIAN; + hdeg -= RIGHT_ANGLE_RADIAN; + nmx = cos(mdeg) * mHandLen + center; + nmy = sin(mdeg) * mHandLen + center; + nhx = cos(hdeg) * hHandLen + center; + nhy = sin(hdeg) * hHandLen + center; + + // redraw hands + redraw_hands_cached_draw_and_erase(); + + ohx = nhx; + ohy = nhy; + omx = nmx; + omy = nmy; + osx = nsx; + osy = nsy; + + delay(1); + } +} + +void draw_round_clock_mark(int16_t innerR1, int16_t outerR1, int16_t innerR2, int16_t outerR2, int16_t innerR3, int16_t outerR3) +{ + float x, y; + int16_t x0, x1, y0, y1, innerR, outerR; + uint16_t c; + + for (uint8_t i = 0; i < 60; i++) + { + if ((i % 15) == 0) + { + innerR = innerR1; + outerR = outerR1; + c = MARK_COLOR; + } + else if ((i % 5) == 0) + { + innerR = innerR2; + outerR = outerR2; + c = MARK_COLOR; + } + else + { + innerR = innerR3; + outerR = outerR3; + c = SUBMARK_COLOR; + } + + mdeg = (SIXTIETH_RADIAN * i) - RIGHT_ANGLE_RADIAN; + x = cos(mdeg); + y = sin(mdeg); + x0 = x * outerR + center; + y0 = y * outerR + center; + x1 = x * innerR + center; + y1 = y * innerR + center; + + gfx->drawLine(x0, y0, x1, y1, c); + } +} + +void draw_square_clock_mark(int16_t innerR1, int16_t outerR1, int16_t innerR2, int16_t outerR2, int16_t innerR3, int16_t outerR3) +{ + float x, y; + int16_t x0, x1, y0, y1, innerR, outerR; + uint16_t c; + + for (uint8_t i = 0; i < 60; i++) + { + if ((i % 15) == 0) + { + innerR = innerR1; + outerR = outerR1; + c = MARK_COLOR; + } + else if ((i % 5) == 0) + { + innerR = innerR2; + outerR = outerR2; + c = MARK_COLOR; + } + else + { + innerR = innerR3; + outerR = outerR3; + c = SUBMARK_COLOR; + } + + if ((i >= 53) || (i < 8)) + { + x = tan(SIXTIETH_RADIAN * i); + x0 = center + (x * outerR); + y0 = center + (1 - outerR); + x1 = center + (x * innerR); + y1 = center + (1 - innerR); + } + else if (i < 23) + { + y = tan((SIXTIETH_RADIAN * i) - RIGHT_ANGLE_RADIAN); + x0 = center + (outerR); + y0 = center + (y * outerR); + x1 = center + (innerR); + y1 = center + (y * innerR); + } + else if (i < 38) + { + x = tan(SIXTIETH_RADIAN * i); + x0 = center - (x * outerR); + y0 = center + (outerR); + x1 = center - (x * innerR); + y1 = center + (innerR); + } + else if (i < 53) + { + y = tan((SIXTIETH_RADIAN * i) - RIGHT_ANGLE_RADIAN); + x0 = center + (1 - outerR); + y0 = center - (y * outerR); + x1 = center + (1 - innerR); + y1 = center - (y * innerR); + } + gfx->drawLine(x0, y0, x1, y1, c); + } +} + +void redraw_hands_cached_draw_and_erase() +{ + gfx->startWrite(); + draw_and_erase_cached_line(center, center, nsx, nsy, SECOND_COLOR, cached_points, sHandLen + 1, false, false); + draw_and_erase_cached_line(center, center, nhx, nhy, HOUR_COLOR, cached_points + ((sHandLen + 1) * 2), hHandLen + 1, true, false); + draw_and_erase_cached_line(center, center, nmx, nmy, MINUTE_COLOR, cached_points + ((sHandLen + 1 + hHandLen + 1) * 2), mHandLen + 1, true, true); + gfx->endWrite(); +} + +void draw_and_erase_cached_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t color, int16_t *cache, int16_t cache_len, bool cross_check_second, bool cross_check_hour) +{ +#if defined(ESP8266) + yield(); +#endif + bool steep = _diff(y1, y0) > _diff(x1, x0); + if (steep) + { + _swap_int16_t(x0, y0); + _swap_int16_t(x1, y1); + } + + int16_t dx, dy; + dx = _diff(x1, x0); + dy = _diff(y1, y0); + + int16_t err = dx / 2; + int8_t xstep = (x0 < x1) ? 1 : -1; + int8_t ystep = (y0 < y1) ? 1 : -1; + x1 += xstep; + int16_t x, y, ox, oy; + for (uint16_t i = 0; i <= dx; i++) + { + if (steep) + { + x = y0; + y = x0; + } + else + { + x = x0; + y = y0; + } + ox = *(cache + (i * 2)); + oy = *(cache + (i * 2) + 1); + if ((x == ox) && (y == oy)) + { + if (cross_check_second || cross_check_hour) + { + write_cache_pixel(x, y, color, cross_check_second, cross_check_hour); + } + } + else + { + write_cache_pixel(x, y, color, cross_check_second, cross_check_hour); + if ((ox > 0) || (oy > 0)) + { + write_cache_pixel(ox, oy, BACKGROUND, cross_check_second, cross_check_hour); + } + *(cache + (i * 2)) = x; + *(cache + (i * 2) + 1) = y; + } + if (err < dy) + { + y0 += ystep; + err += dx; + } + err -= dy; + x0 += xstep; + } + for (uint16_t i = dx + 1; i < cache_len; i++) + { + ox = *(cache + (i * 2)); + oy = *(cache + (i * 2) + 1); + if ((ox > 0) || (oy > 0)) + { + write_cache_pixel(ox, oy, BACKGROUND, cross_check_second, cross_check_hour); + } + *(cache + (i * 2)) = 0; + *(cache + (i * 2) + 1) = 0; + } +} + +void write_cache_pixel(int16_t x, int16_t y, int16_t color, bool cross_check_second, bool cross_check_hour) +{ + int16_t *cache = cached_points; + if (cross_check_second) + { + for (uint16_t i = 0; i <= sHandLen; i++) + { + if ((x == *(cache++)) && (y == *(cache))) + { + return; + } + cache++; + } + } + if (cross_check_hour) + { + cache = cached_points + ((sHandLen + 1) * 2); + for (uint16_t i = 0; i <= hHandLen; i++) + { + if ((x == *(cache++)) && (y == *(cache))) + { + return; + } + cache++; + } + } + gfx->writePixel(x, y, color); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/ESPPhotoFrame.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/ESPPhotoFrame.ino new file mode 100644 index 0000000..b63d5f2 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/ESPPhotoFrame.ino @@ -0,0 +1,369 @@ +/******************************************************************************* + * ESP32 Photo Frame + * This is a simple IoT photo frame sample + * Please find more details at instructables: + * https://www.instructables.com/id/Face-Aware-OSD-Photo-Frame/ + * + * Setup steps: + * 1. Fill your own SSID_NAME, SSID_PASSWORD and URL_TEMPLATE + * 2. Change your LCD parameters in Arduino_GFX setting + ******************************************************************************/ + +/* WiFi settings */ +#define SSID_NAME "YourAP" +#define SSID_PASSWORD "PleaseInputYourPasswordHere" + +#define URL_TEMPLATE "http://YourServerNameOrIP:8080/?w=%d&h=%d" + +#define HTTP_TIMEOUT 60000 // in ms, wait a while for server processing + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +#if defined(ESP32) +#include +#include +#include +#else // ESP8266 +#include +#include +#endif + +#include "JpegDec.h" +static JpegDec jpegDec; + +static uint32_t len, offset; +static unsigned long next_show_millis = 0; + +WiFiClient client; +HTTPClient http; +char url[1024]; + +void setup() +{ + Serial.begin(115200); + gfx->begin(); + gfx->fillScreen(BLACK); + + // setup url query value with LCD dimension + sprintf(url, URL_TEMPLATE, gfx->width(), gfx->height()); + + WiFi.begin(SSID_NAME, SSID_PASSWORD); + while (WiFi.status() != WL_CONNECTED) + { + delay(500); + Serial.print("."); + } + Serial.println(" CONNECTED"); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +#if defined(ESP32) + // set WDT timeout a little bit longer than HTTP timeout + esp_task_wdt_init((HTTP_TIMEOUT / 1000) + 1, true); + enableLoopWDT(); +#endif +} + +void loop() +{ + if (WiFi.status() != WL_CONNECTED) + { + // wait for WiFi connection + delay(500); + } + else if (millis() < next_show_millis) + { + delay(1000); + } + else + { + next_show_millis = ((millis() / 60000L) + 1) * 60000L; // next minute + Serial.print("[HTTP] begin...\n"); + http.begin(client, url); + http.setTimeout(HTTP_TIMEOUT); + Serial.print("[HTTP] GET...\n"); + int httpCode = http.GET(); + + Serial.printf("[HTTP] GET... code: %d\n", httpCode); + // HTTP header has been send and Server response header has been handled + if (httpCode <= 0) + { + Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); + } + else + { + if (httpCode != HTTP_CODE_OK) + { + Serial.printf("[HTTP] Not OK!\n"); + delay(5000); + } + else + { + // get lenght of document (is -1 when Server sends no Content-Length header) + len = http.getSize(); + Serial.printf("[HTTP] size: %d\n", len); + + if (len <= 0) + { + Serial.printf("[HTTP] Unknow content size: %d\n", len); + } + else + { + // get tcp stream + WiFiClient *http_stream = http.getStreamPtr(); + jpegDec.prepare(http_stream_reader, http_stream); + jpegDec.decode(JPG_SCALE_NONE, jpegDec.gfx_writer, gfx); + } + } + } + http.end(); + } + +#if defined(ESP32) + // notify WDT still working + feedLoopWDT(); +#else // ESP8266 + yield(); +#endif +} + +static size_t http_stream_reader(JpegDec *jpegDec, size_t index, uint8_t *buf, size_t len) +{ + WiFiClient *http_stream = (WiFiClient *)jpegDec->input; + uint8_t wait = 0; + if (buf) + { + // Serial.printf("[HTTP] read: %d\n", len); + size_t a = http_stream->available(); + size_t r = 0; + while ((r < len) && (wait < 10)) + { + if (a) + { + r += http_stream->readBytes(buf + r, min((len - r), a)); + } + else + { + delay(10); + wait++; + } + a = http_stream->available(); + } + return r; + } + else + { + // Serial.printf("[HTTP] skip: %d\n", len); + size_t l = len; + while ((--l) && (wait < 10)) + { + if (http_stream->available()) + { + http_stream->read(); + } + else + { + delay(10); + wait++; + } + } + return len; + } +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/JpegDec.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/JpegDec.h new file mode 100644 index 0000000..b80be06 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/JpegDec.h @@ -0,0 +1,159 @@ +#ifndef _JPEGDEC_H_ +#define _JPEGDEC_H_ + +#include +#include + +#include "lgfx_tjpgd.h" + +typedef enum +{ + JPG_SCALE_NONE, + JPG_SCALE_2X, + JPG_SCALE_4X, + JPG_SCALE_8X, + JPG_SCALE_MAX = JPG_SCALE_8X +} jpg_scale_t; + +typedef class JpegDec JpegDec; +typedef size_t (*jpg_reader_cb)(JpegDec *jpegDec, size_t index, uint8_t *buf, size_t len); +typedef bool (*jpg_writer_cb)(JpegDec *jpegDec, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data); + +class JpegDec +{ +public: + jpg_scale_t scale; + jpg_reader_cb reader; + void *input; + jpg_writer_cb writer; + void *output; + size_t index; + uint16_t width; + uint16_t height; + uint16_t output_width; + uint16_t output_height; + + void prepare(jpg_reader_cb reader, void *input) + { + static uint8_t work[3100]; + + this->reader = reader; + this->input = input; + this->index = 0; + + JRESULT jres = lgfx_jd_prepare(&_decoder, _jpg_read, work, 3100, this); + if (jres != JDR_OK) + { + return; + } + + width = _decoder.width; + height = _decoder.height; + } + + void decode(jpg_scale_t scale, jpg_writer_cb writer, void *output) + { + this->scale = scale; + this->writer = writer; + this->output = output; + + output_width = width / (1 << (uint8_t)(scale)); + output_height = height / (1 << (uint8_t)(scale)); + + //output write + JRESULT jres = lgfx_jd_decomp(&_decoder, _jpg_write, (uint8_t)scale); + if (jres != JDR_OK) + { + return; + } + } + + static size_t file_reader(JpegDec *jpegDec, size_t index, uint8_t *buf, size_t len) + { + // Serial.printf("index: %d, len: %d\n", index, len); + File *vFile = (File *)jpegDec->input; + size_t l; + if (buf) + { + return vFile->read(buf, len); + } + else + { + vFile->seek(index + len); + return len; + } + } + + static size_t buff_reader(JpegDec *jpegDec, size_t index, uint8_t *buf, size_t len) + { + // Serial.printf("index: %d, len: %d\n", index, len); + uint8_t *b = (uint8_t *)jpegDec->input; + + if (buf) + { + memcpy(buf, b + index, len); + } + return len; // Returns number of bytes read + } + + static bool gfx_writer(JpegDec *jpegDec, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data) + { + Arduino_GFX *gfx = (Arduino_GFX *)jpegDec->output; + if (data) + { + // Serial.printf("%d, %d, %d, %d\n", x, y, w, h); + gfx->draw24bitRGBBitmap(x, y, data, w, h); + } + return true; // Continue to decompression + } + + static bool framebuffer_writer(JpegDec *jpegDec, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data) + { + uint16_t *framebuffer = (uint16_t *)jpegDec->output; + // Serial.printf("%d, %d, %d, %d\n", x, y, w, h); + if (data) + { + for (uint16_t i = 0; i < h; ++i) + { + for (uint16_t j = 0; j < w; ++j) + { + framebuffer[(y + i) * jpegDec->output_width + x + j] = ((*(data++) & 0xF8) << 8) | ((*(data++) & 0xFC) << 3) | (*(data++) >> 3); + } + } + } + return true; // Continue to decompression + } + +private: + lgfxJdec _decoder; + + static uint32_t _jpg_read(lgfxJdec *decoder, uint8_t *buf, uint32_t len) + { + JpegDec *jpegDec = (JpegDec *)decoder->device; + if (len) + { + len = jpegDec->reader(jpegDec, jpegDec->index, buf, len); + jpegDec->index += len; + } + return len; + } + + static uint32_t _jpg_write(lgfxJdec *decoder, void *bitmap, JRECT *rect) + { + uint16_t x = rect->left; + uint16_t y = rect->top; + uint16_t w = rect->right + 1 - x; + uint16_t h = rect->bottom + 1 - y; + uint8_t *data = (uint8_t *)bitmap; + + JpegDec *jpegDec = (JpegDec *)decoder->device; + + if (jpegDec->writer) + { + return jpegDec->writer(jpegDec, x, y, w, h, data); + } + return 0; + } +}; + +#endif // _JPEGDEC_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.c b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.c new file mode 100644 index 0000000..d79397b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.c @@ -0,0 +1,1009 @@ +/*----------------------------------------------------------------------------/ +/ TJpgDec - Tiny JPEG Decompressor R0.01c (C)ChaN, 2019 +/-----------------------------------------------------------------------------/ +/ The TJpgDec is a generic JPEG decompressor module for tiny embedded systems. +/ This is a free software that opened for education, research and commercial +/ developments under license policy of following terms. +/ +/ Copyright (C) 2019, ChaN, all right reserved. +/ +/ * The TJpgDec module is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/-----------------------------------------------------------------------------/ +/ Oct 04, 2011 R0.01 First release. +/ Feb 19, 2012 R0.01a Fixed decompression fails when scan starts with an escape seq. +/ Sep 03, 2012 R0.01b Added JD_TBLCLIP option. +/ Mar 16, 2019 R0.01c Supprted stdint.h. +/-----------------------------------------------------------------------------/ +/ original source is here : http://elm-chan.org/fsw/tjpgd/00index.html +/ +/ Modified for LGFX by lovyan03, 2020 +/ add support grayscale jpeg +/ add bayer pattern +/ tweak for 32bit processor +/----------------------------------------------------------------------------*/ + +#include "lgfx_tjpgd.h" + +#include // for memcpy memset + + +/*-----------------------------------------------*/ +/* Zigzag-order to raster-order conversion table */ +/*-----------------------------------------------*/ + +//#define ZIG(n) Zig[n] + +static const uint8_t Zig[64] = { /* Zigzag-order to raster-order conversion table */ + 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63 +}; + + + +/*-------------------------------------------------*/ +/* Input scale factor of Arai algorithm */ +/* (scaled up 16 bits for fixed point operations) */ +/*-------------------------------------------------*/ + +//#define IPSF(n) Ipsf[n] + +static const uint16_t Ipsf[64] = { /* See also aa_idct.png */ + (uint16_t)(1.00000*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.17588*8192), (uint16_t)(1.00000*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.27590*8192), + (uint16_t)(1.38704*8192), (uint16_t)(1.92388*8192), (uint16_t)(1.81226*8192), (uint16_t)(1.63099*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.08979*8192), (uint16_t)(0.75066*8192), (uint16_t)(0.38268*8192), + (uint16_t)(1.30656*8192), (uint16_t)(1.81226*8192), (uint16_t)(1.70711*8192), (uint16_t)(1.53636*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.02656*8192), (uint16_t)(0.70711*8192), (uint16_t)(0.36048*8192), + (uint16_t)(1.17588*8192), (uint16_t)(1.63099*8192), (uint16_t)(1.53636*8192), (uint16_t)(1.38268*8192), (uint16_t)(1.17588*8192), (uint16_t)(0.92388*8192), (uint16_t)(0.63638*8192), (uint16_t)(0.32442*8192), + (uint16_t)(1.00000*8192), (uint16_t)(1.38704*8192), (uint16_t)(1.30656*8192), (uint16_t)(1.17588*8192), (uint16_t)(1.00000*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.27590*8192), + (uint16_t)(0.78570*8192), (uint16_t)(1.08979*8192), (uint16_t)(1.02656*8192), (uint16_t)(0.92388*8192), (uint16_t)(0.78570*8192), (uint16_t)(0.61732*8192), (uint16_t)(0.42522*8192), (uint16_t)(0.21677*8192), + (uint16_t)(0.54120*8192), (uint16_t)(0.75066*8192), (uint16_t)(0.70711*8192), (uint16_t)(0.63638*8192), (uint16_t)(0.54120*8192), (uint16_t)(0.42522*8192), (uint16_t)(0.29290*8192), (uint16_t)(0.14932*8192), + (uint16_t)(0.27590*8192), (uint16_t)(0.38268*8192), (uint16_t)(0.36048*8192), (uint16_t)(0.32442*8192), (uint16_t)(0.27590*8192), (uint16_t)(0.21678*8192), (uint16_t)(0.14932*8192), (uint16_t)(0.07612*8192) +}; + + + +/*---------------------------------------------*/ +/* Conversion table for fast clipping process */ +/*---------------------------------------------*/ + +#if JD_TBLCLIP + +//#define BYTECLIP(v) Clip8[(uint16_t)(v) & 0x3FF] + +static const uint8_t Clip8[1024] = { + /* 0..255 */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + /* 256..511 */ + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + /* -512..-257 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* -256..-1 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +#else /* JD_TBLCLIP */ + +static inline int32_t BYTECLIP ( + int32_t val +) +{ + if (val < 0) val = 0; + else if (val > 255) val = 255; + return val; +} + +#endif + + +/*---------------------------------------------*/ +/* Output 4x4 bayer pattern table */ +/*---------------------------------------------*/ + +static const int_fast8_t Bayer[16] = { 0, 4, 1, 5,-2, 2,-1, 3, 1, 5, 0, 4,-1, 3,-2, 2}; + + +/*-----------------------------------------------------------------------*/ +/* Allocate a memory block from memory pool */ +/*-----------------------------------------------------------------------*/ + +static uint8_t* alloc_pool ( /* Pointer to allocated memory block (NULL:no memory available) */ + lgfxJdec* jd, /* Pointer to the decompressor object */ + uint_fast16_t nd /* Number of bytes to allocate */ +) +{ + uint8_t *rp = 0; + + + nd = (nd + 3) & ~3; /* Align block size to the word boundary */ + + if (jd->sz_pool >= nd) { + jd->sz_pool -= nd; + rp = jd->pool; /* Get start of available memory pool */ + jd->pool = (rp + nd); /* Allocate requierd bytes */ + } + + return rp; /* Return allocated memory block (NULL:no memory to allocate) */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create de-quantization and prescaling tables with a DQT segment */ +/*-----------------------------------------------------------------------*/ + +static int32_t create_qt_tbl ( /* 0:OK, !0:Failed */ + lgfxJdec* jd, /* Pointer to the decompressor object */ + const uint8_t* data, /* Pointer to the quantizer tables */ + uint_fast16_t ndata /* Size of input data */ +) +{ + const uint8_t* dataend = data + ndata; + do { /* Process all tables in the segment */ + size_t d = *data++; /* Get table property */ + if (d & 0xF0) return JDR_FMT1; /* Err: not 8-bit resolution */ + int32_t *pb = (int32_t*)alloc_pool(jd, 64 * sizeof (int32_t));/* Allocate a memory block for the table */ + if (!pb) return JDR_MEM1; /* Err: not enough memory */ + jd->qttbl[d & 3] = pb; /* Register the table */ + for (size_t i = 0; i < 64; ++i) { /* Load the table */ + uint_fast8_t z = Zig[i]; /* Zigzag-order to raster-order conversion */ + pb[z] = (int32_t)((uint32_t)data[i] * Ipsf[z]); /* Apply scale factor of Arai algorithm to the de-quantizers */ + } + } while (dataend != (data += 64)); + + return JDR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Create huffman code tables with a DHT segment */ +/*-----------------------------------------------------------------------*/ + +static int32_t create_huffman_tbl ( /* 0:OK, !0:Failed */ + lgfxJdec* jd, /* Pointer to the decompressor object */ + const uint8_t* data, /* Pointer to the packed huffman tables */ + int_fast16_t ndata /* Size of input data */ +) +{ + uint_fast16_t np; + uint8_t *pb, *pd; + uint16_t *ph; + + do { /* Process all tables in the segment */ + uint_fast8_t d = *data++; /* Get table number and class */ + if (d & 0xEE) return JDR_FMT1; /* Err: invalid class/number */ + uint_fast8_t cls = d >> 4; /* class = dc(0)/ac(1), table number = 0/1 */ + uint_fast8_t num = d & 0x0F; + pb = alloc_pool(jd, 16); /* Allocate a memory block for the bit distribution table */ + if (!pb) return JDR_MEM1; /* Err: not enough memory */ + jd->huffbits[num][cls] = pb - 1; + np = 0; + size_t i = 0; + do { /* Load number of patterns for 1 to 16-bit code */ + np += (pb[i] = data[i]); /* Get sum of code words for each code */ + } while (++i < 16); + + ph = (uint16_t*)alloc_pool(jd, np * sizeof (uint16_t));/* Allocate a memory block for the code word table */ + if (!ph) return JDR_MEM1; /* Err: not enough memory */ + jd->huffcode[num][cls] = ph - 1; + uint_fast16_t hc = 0; + i = 0; + do { /* Re-build huffman code word table */ + size_t b = pb[i]; + while (b--) *ph++ = hc++; + hc <<= 1; + } while (++i < 16); + + pd = alloc_pool(jd, np); /* Allocate a memory block for the decoded data */ + if (!pd) return JDR_MEM1; /* Err: not enough memory */ + jd->huffdata[num][cls] = pd - 1; + + memcpy(pd, data += 16, np); /* Load decoded data corresponds to each code ward */ + data += np; + } while (ndata -= 17 + np); + + return JDR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Extract N bits from input stream */ +/*-----------------------------------------------------------------------*/ + +static int32_t bitext ( /* >=0: extracted data, <0: error code */ + lgfxJdec* jd, /* Pointer to the decompressor object */ + uint_fast8_t nbit /* Number of bits to extract (1 to 11) */ +) +{ + uint8_t *dp; + uint_fast8_t msk, shift; + uint32_t v; + + msk = jd->dmsk; dp = jd->dptr; + v = 0; + + for (;;) { + if (!msk) { /* Next byte? */ + uint8_t *dpend = jd->dpend; + if (++dp == dpend) { /* No input data is available, re-fill input buffer */ + dp = jd->inbuf; /* Top of input buffer */ + jd->dpend = dpend = dp + jd->infunc(jd, dp, JD_SZBUF); + if (dp == dpend) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ + } + if (*dp == 0xff) { /* Is start of flag sequence? */ + if (++dp == dpend) { /* No input data is available, re-fill input buffer */ + dp = jd->inbuf; /* Top of input buffer */ + jd->dpend = dpend = dp + jd->infunc(jd, dp, JD_SZBUF); + if (dp == dpend) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ + } + if (*dp != 0) return 0 - (int32_t)JDR_FMT1; /* Err: unexpected flag is detected (may be collapted data) */ + *dp = 0xff; /* The flag is a data 0xFF */ + } + msk = 8; /* Read from MSB */ + } + uint_fast8_t s = *dp; /* Get next data byte */ + if (msk >= nbit) { + msk -= nbit; + jd->dmsk = msk; jd->dptr = dp; + return v + ((s >> msk) & ((1 << nbit) - 1)); /* Get bits */ + } + nbit -= msk; + v += (s & ((1 << msk) - 1)) << nbit; /* Get bits */ + msk = 0; + } +} + + +/*-----------------------------------------------------------------------*/ +/* Extract a huffman decoded data from input stream */ +/*-----------------------------------------------------------------------*/ + +static int32_t huffext ( /* >=0: decoded data, <0: error code */ + lgfxJdec* jd, /* Pointer to the decompressor object */ + const uint8_t* hbits, /* Pointer to the bit distribution table */ + const uint16_t* hcode, /* Pointer to the code word table */ + const uint8_t* hdata /* Pointer to the data table */ +) +{ + uint8_t *dp; + uint_fast8_t msk, bl; + uint32_t v; + + msk = jd->dmsk; dp = jd->dptr; + v = 0; + bl = 16; /* Max code length */ + for (;;) { + if (!msk) { /* Next byte? */ + uint8_t *dpend = jd->dpend; + if (++dp == dpend) { /* No input data is available, re-fill input buffer */ + dp = jd->inbuf; /* Top of input buffer */ + jd->dpend = dpend = dp + jd->infunc(jd, dp, JD_SZBUF); + if (dp == dpend) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ + } + if (*dp == 0xff) { /* Is start of flag sequence? */ + if (++dp == dpend) { /* No input data is available, re-fill input buffer */ + dp = jd->inbuf; /* Top of input buffer */ + jd->dpend = dpend = dp + jd->infunc(jd, dp, JD_SZBUF); + if (dp == dpend) return 0 - (int32_t)JDR_INP; /* Err: read error or wrong stream termination */ + } + if (*dp != 0) return 0 - (int32_t)JDR_FMT1; /* Err: unexpected flag is detected (may be collapted data) */ + *dp = 0xff; /* The flag is a data 0xFF */ + } + msk = 8; /* Read from MSB */ + } + uint_fast8_t s = *dp; /* Get next data byte */ + do { + v = (v << 1) + ((s >> (--msk)) & 1); /* Get a bit */ + size_t nd = *++hbits; + if (nd) { + do { /* Search the code word in this bit length */ + ++hdata; + if (v == *++hcode) goto huffext_match; /* Matched? */ + } while (--nd); + } + if (!--bl) return 0 - (int32_t)JDR_FMT1; /* Err: code not found (may be collapted data) */ + } while (msk); + } +huffext_match: + jd->dmsk = msk; + jd->dptr = dp; + return *hdata; /* Return the decoded data */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Apply Inverse-DCT in Arai Algorithm (see also aa_idct.png) */ +/*-----------------------------------------------------------------------*/ + +static void block_idct ( + int32_t* src, /* Input block data (de-quantized and pre-scaled for Arai Algorithm) */ + uint8_t* dst /* Pointer to the destination to store the block as byte array */ +) +{ + const int32_t M13 = (int32_t)(1.41421*256), M2 = (int32_t)(1.08239*256), M4 = (int32_t)(2.61313*256), M5 = (int32_t)(1.84776*256); + int32_t v0, v1, v2, v3, v4, v5, v6, v7; + int32_t t10, t11, t12, t13; + + /* Process columns */ + for (int i = 0; i < 8; ++i) { + /* Get and Process the odd elements */ + v4 = src[8 * 7]; + v5 = src[8 * 1]; + v6 = src[8 * 5]; + v7 = src[8 * 3]; + + t10 = v5 - v4; + t11 = v5 + v4; + t12 = v6 - v7; + v7 += v6; + v5 = (t11 - v7) * M13 >> 8; + t13 = (t10 + t12) * M5 >> 8; + v6 = t13 - ((t12 * M4 >> 8) + (v7 += t11)); + v4 = t13 - ((t10 * M2 >> 8) + (v5 -= v6)); + + /* Get and Process the even elements */ + v0 = src[8 * 0]; + v2 = src[8 * 4]; + t10 = v0 + v2; + t12 = v0 - v2; + + v1 = src[8 * 2]; + v3 = src[8 * 6]; + t11 = (v1 - v3) * M13 >> 8; + v3 += v1; + t11 -= v3; + + v0 = t10 + v3; + v3 = t10 - v3; + v1 = t12 + t11; + v2 = t12 - t11; + + /* Write-back transformed values */ + src[8 * 0] = v0 + v7; + src[8 * 7] = v0 - v7; + src[8 * 1] = v1 + v6; + src[8 * 6] = v1 - v6; + src[8 * 2] = v2 + v5; + src[8 * 5] = v2 - v5; + src[8 * 3] = v3 + v4; + src[8 * 4] = v3 - v4; + + ++src; /* Next column */ + } + + /* Process rows */ + src -= 8; + for (int i = 0; i < 8; ++i) { + /* Get and Process the odd elements */ + v4 = src[1]; + v5 = src[7] + v4; + v4 = (v4 << 1) - v5; + + v6 = src[5]; + v7 = src[3] + v6; + v6 = (v6 << 1) - v7; + + v7 += v5; + v5 = (v5 << 1) - v7; + + t13 = v4 + v6; + t13 = t13 * M5 >> 8; + v6 = v6 * M4 >> 8; + v6 += v7; + v6 = t13 - v6; + v5 = v5 * M13 >> 8; + v5 -= v6; + v4 = v4 * M2 >> 8; + v4 += v5; + v4 = t13 - v4; + + /* Get and Process the even elements */ + v0 = src[0] + (128L << 8); /* remove DC offset (-128) here */ + v2 = src[4]; + t10 = v0 + v2; + t12 = v0 - v2; + + v1 = src[2]; + v3 = src[6] + v1; + t11 = (v1 << 1) - v3; + t11 = t11 * M13 >> 8; + t11 -= v3; + + v0 = t10 + v3; + v3 = t10 - v3; + v1 = t12 + t11; + v2 = t12 - t11; + + /* Descale the transformed values 8 bits and output */ +#if defined (ESP32) || (CONFIG_IDF_TARGET_ESP32) || (ESP_PLATFORM) + int32_t d0 = (v0 + v7) >> 8; + int32_t d7 = (v0 - v7) >> 8; + int32_t d1 = (v1 + v6) >> 8; + int32_t d6 = (v1 - v6) >> 8; + int32_t d2 = (v2 + v5) >> 8; + int32_t d5 = (v2 - v5) >> 8; + int32_t d3 = (v3 + v4) >> 8; + int32_t d4 = (v3 - v4) >> 8; + + if (d0 < 0) d0 = 0; else if (d0 > 255) d0 = 255; + if (d1 < 0) d1 = 0; else if (d1 > 255) d1 = 255; + if (d2 < 0) d2 = 0; else if (d2 > 255) d2 = 255; + if (d3 < 0) d3 = 0; else if (d3 > 255) d3 = 255; + if (d4 < 0) d4 = 0; else if (d4 > 255) d4 = 255; + if (d5 < 0) d5 = 0; else if (d5 > 255) d5 = 255; + if (d6 < 0) d6 = 0; else if (d6 > 255) d6 = 255; + if (d7 < 0) d7 = 0; else if (d7 > 255) d7 = 255; + + dst[0] = d0; + dst[1] = d1; + dst[2] = d2; + dst[3] = d3; + dst[4] = d4; + dst[5] = d5; + dst[6] = d6; + dst[7] = d7; +#else + dst[0] = BYTECLIP((v0 + v7) >> 8); + dst[7] = BYTECLIP((v0 - v7) >> 8); + dst[1] = BYTECLIP((v1 + v6) >> 8); + dst[6] = BYTECLIP((v1 - v6) >> 8); + dst[2] = BYTECLIP((v2 + v5) >> 8); + dst[5] = BYTECLIP((v2 - v5) >> 8); + dst[3] = BYTECLIP((v3 + v4) >> 8); + dst[4] = BYTECLIP((v3 - v4) >> 8); +#endif + dst += 8; + src += 8; /* Next row */ + } +} + + + + +/*-----------------------------------------------------------------------*/ +/* Load all blocks in the MCU into working buffer */ +/*-----------------------------------------------------------------------*/ + +static JRESULT mcu_load ( + lgfxJdec* jd /* Pointer to the decompressor object */ +) +{ + int32_t *tmp = (int32_t*)jd->workbuf; /* Block working buffer for de-quantize and IDCT */ + int32_t b, d, e; + uint32_t blk, nby, nbc; + uint8_t *bp; + const uint8_t *hb, *hd; + const uint16_t *hc; + + + nby = jd->msx * jd->msy; /* Number of Y blocks (1, 2 or 4) */ + nbc = jd->comps_in_frame - 1; /* Number of C blocks (2 or 0(grayscale)) */ + bp = jd->mcubuf; /* Pointer to the first block */ + + for (blk = 0; blk < nby + nbc; ++blk) { + size_t cmp = (blk < nby) ? 0 : blk - nby + 1; /* Component number 0:Y, 1:Cb, 2:Cr */ + size_t id = cmp ? 1 : 0; /* Huffman table ID of the component */ + + /* Extract a DC element from input stream */ + hb = jd->huffbits[id][0]; /* Huffman table for the DC element */ + hc = jd->huffcode[id][0]; + hd = jd->huffdata[id][0]; + b = huffext(jd, hb, hc, hd); /* Extract a huffman coded data (bit length) */ + if (b < 0) return (JRESULT)(-b); /* Err: invalid code or input */ + d = jd->dcv[cmp]; /* DC value of previous block */ + if (b) { /* If there is any difference from previous block */ + e = bitext(jd, b); /* Extract data bits */ + if (e < 0) return (JRESULT)(-e); /* Err: input */ + b = 1 << (b - 1); /* MSB position */ + if (!(e & b)) e -= (b << 1) - 1; /* Restore sign if needed */ + d += e; /* Get current value */ + jd->dcv[cmp] = d; /* Save current DC value for next block */ + } + const int32_t *dqf = jd->qttbl[jd->qtid[cmp]]; /* De-quantizer table ID for this component */ + tmp[0] = d * dqf[0] >> 8; /* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */ + + /* Extract following 63 AC elements from input stream */ + memset(&tmp[1], 0, 63*sizeof(int32_t)); /* Clear rest of elements */ + hb = jd->huffbits[id][1]; /* Huffman table for the AC elements */ + hc = jd->huffcode[id][1]; + hd = jd->huffdata[id][1]; + uint_fast8_t i = 1; /* Top of the AC elements */ + do { + b = huffext(jd, hb, hc, hd); /* Extract a huffman coded value (zero runs and bit length) */ + if (b == 0) break; /* EOB? */ + if (b < 0) return (JRESULT)(-b); /* Err: invalid code or input error */ + i += b >> 4; /* Number of leading zero elements Skip zero elements */ + if (b &= 0x0F) { /* Bit length */ + d = bitext(jd, b); /* Extract data bits */ + if (d < 0) return (JRESULT)(-d);/* Err: input device */ + b = 1 << (b - 1); /* MSB position */ + if (!(d & b)) d -= (b << 1) - 1;/* Restore negative value if needed */ + uint_fast8_t z = Zig[i]; /* Zigzag-order to raster-order converted index */ + tmp[z] = d * dqf[z] >> 8; /* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */ + } + } while (++i < 64); /* Next AC element */ + + if (JD_USE_SCALE && jd->scale == 3) { + *bp = (uint8_t)((*tmp >> 8) + 128); /* If scale ratio is 1/8, IDCT can be ommited and only DC element is used */ + } else { + block_idct(tmp, bp); /* Apply IDCT and store the block to the MCU buffer */ + } + + bp += 64; /* Next block */ + } + + return JDR_OK; /* All blocks have been loaded successfully */ +} + + + + +/*-----------------------------------------------------------------------*/ +/* Output an MCU: Convert YCrCb to RGB and output it in RGB form */ +/*-----------------------------------------------------------------------*/ + +static JRESULT mcu_output ( + lgfxJdec* jd, /* Pointer to the decompressor object */ + uint32_t (*outfunc)(lgfxJdec*, void*, JRECT*), /* RGB output function */ + uint32_t x, /* MCU position in the image (left of the MCU) */ + uint32_t y /* MCU position in the image (top of the MCU) */ +) +{ + const int_fast16_t FP_SHIFT = 8; + uint32_t ix, iy, mx, my, rx, ry; + int32_t yy, cb, cr; + uint8_t *py, *pc, *rgb24; + JRECT rect; + + mx = jd->msx << 3; my = jd->msy << 3; /* MCU size (pixel) */ + rx = (mx < jd->width - x) ? mx : jd->width - x; /* Output rectangular size (it may be clipped at right/bottom end) */ + ry = (my < jd->height - y) ? my : jd->height - y; + + if (JD_USE_SCALE) { + rx >>= jd->scale; ry >>= jd->scale; + if (!rx || !ry) return JDR_OK; /* Skip this MCU if all pixel is to be rounded off */ + x >>= jd->scale; y >>= jd->scale; + } + rect.left = x; rect.right = x + rx - 1; /* Rectangular area in the frame buffer */ + rect.top = y; rect.bottom = y + ry - 1; + + uint8_t* workbuf = (uint8_t*)jd->workbuf; + + if (!JD_USE_SCALE || jd->scale != 3) { /* Not for 1/8 scaling */ + + uint_fast8_t ixshift = (mx == 16); + uint_fast8_t iyshift = (my == 16); + + /* Build an RGB MCU from discrete comopnents */ + rgb24 = workbuf; + iy = 0; + do { +#if JD_BAYER + const int_fast8_t* btbl = &Bayer[(iy & 3) << 2]; +#endif + py = &jd->mcubuf[((iy & 8) + iy) << 3]; + pc = &jd->mcubuf[((mx << iyshift) + (iy >> iyshift)) << 3]; + ix = 0; + do { + do { + cb = (pc[ 0] - 128); /* Get Cb/Cr component and restore right level */ + cr = (pc[64] - 128); + ++pc; + + /* Convert CbCr to RGB */ + uint_fast16_t rr = ((int32_t)(1.402 * (1<> FP_SHIFT; + uint_fast16_t gg = ((int32_t)(0.34414 * (1<> FP_SHIFT; + uint_fast16_t bb = ((int32_t)(1.772 * (1<> FP_SHIFT; + do { +#if JD_BAYER + yy = *py + btbl[ix & 3]; /* Get Y component */ +#else + yy = *py; /* Get Y component */ +#endif + ++py; + /* Convert YCbCr to RGB */ + rgb24[0] = BYTECLIP(yy + rr); + rgb24[1] = BYTECLIP(yy - gg); + rgb24[2] = BYTECLIP(yy + bb); + rgb24 += 3; + } while (++ix & ixshift); + } while (ix & 7); + py += 64 - 8; /* Jump to next block if double block heigt */ + } while (ix != mx); + } while (++iy < my); + + /* Descale the MCU rectangular if needed */ + if (JD_USE_SCALE && jd->scale) { + uint32_t x, y, r, g, b, s, w; + uint8_t *op; + + /* Get averaged RGB value of each square correcponds to a pixel */ + s = jd->scale * 2; /* Bumber of shifts for averaging */ + w = 1 << jd->scale; /* Width of square */ + op = workbuf; + iy = 0; + do { + ix = 0; + do { + rgb24 = &workbuf[(iy * mx + ix) * 3]; + r = g = b = 0; + y = 0; + do { /* Accumulate RGB value in the square */ + x = 0; + do { + r += rgb24[x*3 ]; + g += rgb24[x*3+1]; + b += rgb24[x*3+2]; + } while (++x < w); + rgb24 += mx * 3; + } while (++y < w); + /* Put the averaged RGB value as a pixel */ + op[0] = r >> s; + op[1] = g >> s; + op[2] = b >> s; + op += 3; + } while ((ix += w) < mx); + } while ((iy += w) < my); + } + + } else { /* For only 1/8 scaling (left-top pixel in each block are the DC value of the block) */ + + /* Build a 1/8 descaled RGB MCU from discrete comopnents */ + rgb24 = workbuf; + pc = jd->mcubuf + mx * my; + cb = pc[0] - 128; /* Get Cb/Cr component and restore right level */ + cr = pc[64] - 128; + iy = 0; + do { + py = jd->mcubuf; + if (iy == 8) py += 64 * 2; + ix = 0; + do { + yy = *py; /* Get Y component */ + py += 64; + + /* Convert YCbCr to RGB */ + rgb24[0] = BYTECLIP(yy + (((int32_t)(1.402 * (1<> FP_SHIFT)); + rgb24[1] = BYTECLIP(yy - (((int32_t)(0.34414 * (1<> FP_SHIFT)); + rgb24[2] = BYTECLIP(yy + (((int32_t)(1.772 * (1<> FP_SHIFT)); + rgb24 += 3; + } while ((ix += 8) < mx); + } while ((iy += 8) < my); + } + + /* Squeeze up pixel table if a part of MCU is to be truncated */ + mx >>= jd->scale; + if (rx < mx) { + uint8_t *s, *d; + s = d = workbuf; + for (size_t y = 1; y < ry; ++y) { + memcpy(d += rx * 3, s += mx * 3, rx * 3); /* Copy effective pixels */ + } + } + + /* Convert RGB888 to RGB565 if needed */ + if (JD_FORMAT == 1) { + uint8_t *s = workbuf; + uint16_t *d = (uint16_t*)s; + uint_fast16_t w; + uint_fast16_t n = rx * ry; + + do { + w = (*s++ & 0xF8) << 8; /* RRRRR----------- */ + w |= (*s++ & 0xFC) << 3; /* -----GGGGGG----- */ + w |= *s++ >> 3; /* -----------BBBBB */ + *d++ = w; + } while (--n); + } + + /* Output the RGB rectangular */ + return outfunc(jd, workbuf, &rect) ? JDR_OK : JDR_INTR; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Process restart interval */ +/*-----------------------------------------------------------------------*/ + +static JRESULT restart ( + lgfxJdec* jd, /* Pointer to the decompressor object */ + uint16_t rstn /* Expected restert sequense number */ +) +{ + uint16_t d; + uint8_t *dp = jd->dptr, *dpend = jd->dpend; + + /* Discard padding bits and get two bytes from the input stream */ + d = 0; + for (int i = 0; i < 2; ++i) { + if (++dp == dpend) { /* No input data is available, re-fill input buffer */ + dp = jd->inbuf; + jd->dpend = dpend = dp + jd->infunc(jd, dp, JD_SZBUF); + if (dp == dpend) return JDR_INP; + } + d = (d << 8) | *dp; /* Get a byte */ + } + jd->dptr = dp; jd->dmsk = 0; + + /* Check the marker */ + if ((d & 0xFFD8) != 0xFFD0 || (d & 7) != (rstn & 7)) { + return JDR_FMT1; /* Err: expected RSTn marker is not detected (may be collapted data) */ + } + + /* Reset DC offset */ + jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0; + + return JDR_OK; +} + + + + +/*-----------------------------------------------------------------------*/ +/* Analyze the JPEG image and Initialize decompressor object */ +/*-----------------------------------------------------------------------*/ + +//#define LDB_WORD(ptr) (uint16_t)(((uint16_t)*((uint8_t*)(ptr))<<8)|(uint16_t)*(uint8_t*)((ptr)+1)) + +static inline uint16_t LDB_WORD(uint8_t* ptr) { + return ptr[0]<<8 | ptr[1]; +} + + +JRESULT lgfx_jd_prepare ( + lgfxJdec* jd, /* Blank decompressor object */ + uint32_t (*infunc)(lgfxJdec*, uint8_t*, uint32_t), /* JPEG strem input function */ + void* pool, /* Working buffer for the decompression session */ + uint_fast16_t sz_pool, /* Size of working buffer */ + void* dev /* I/O device identifier for the session */ +) +{ + uint8_t *seg; + uint32_t ofs; + size_t n; + int32_t rc; + + + if (!pool) return JDR_PAR; + + jd->pool = (uint8_t*)pool; /* Work memroy */ + jd->sz_pool = sz_pool; /* Size of given work memory */ + jd->infunc = infunc; /* Stream input function */ + jd->device = dev; /* I/O device identifier */ + jd->nrst = 0; /* No restart interval (default) */ + +// memset(jd->huffbits, 0, sizeof(uint8_t*) * 4); /* Nulls pointers */ +// memset(jd->huffcode, 0, sizeof(uint16_t*) * 4); +// memset(jd->huffdata, 0, sizeof(uint8_t*) * 4); +// memset(jd->qttbl, 0, sizeof(uint32_t*) * 4); + + jd->inbuf = seg = alloc_pool(jd, JD_SZBUF); /* Allocate stream input buffer */ + if (!seg) return JDR_MEM1; + + if (infunc(jd, seg, 2) != 2) return JDR_INP;/* Check SOI marker */ + if (LDB_WORD(seg) != 0xFFD8) return JDR_FMT1; /* Err: SOI is not detected */ + ofs = 2; + + for (;;) { + if (infunc(jd, seg, 4) != 4) return JDR_INP; + uint_fast16_t len = LDB_WORD(seg + 2) - 2; /* Length field */ + if (seg[0] != 0xFF) return JDR_FMT1; /* Check a JPEG marker */ + ofs += 4 + len; /* Number of bytes loaded */ + + switch (seg[1]) { /* Marker */ + case 0xC0: /* SOF0 (baseline JPEG) */ + /* Load segment data */ + if (len > JD_SZBUF) return JDR_MEM2; + if (infunc(jd, seg, len) != len) return JDR_INP; + + jd->width = LDB_WORD(seg+3); /* Image width in unit of pixel */ + jd->height = LDB_WORD(seg+1); /* Image height in unit of pixel */ + jd->comps_in_frame = seg[5]; + if (seg[5] != 1 && seg[5] != 3) + return JDR_FMT3; /* Err: Supports only Y/Cb/Cr or Y(Grayscale) format */ + + /* Check three image components */ + for (size_t i = 0; i < seg[5]; ++i) { + uint_fast8_t b = seg[7 + 3 * i]; /* Get sampling factor */ + if (!i) { /* Y component */ + if (b != 0x11 && b != 0x22 && b != 0x21) { /* Check sampling factor */ + return JDR_FMT3; /* Err: Supports only 4:4:4, 4:2:0 or 4:2:2 */ + } + jd->msx = b >> 4; jd->msy = b & 15; /* Size of MCU [blocks] */ + } else { /* Cb/Cr component */ + if (b != 0x11) return JDR_FMT3; /* Err: Sampling factor of Cr/Cb must be 1 */ + } + b = seg[8 + 3 * i]; /* Get dequantizer table ID for this component */ + if (b > 3) return JDR_FMT3; /* Err: Invalid ID */ + jd->qtid[i] = b; + } + break; + + case 0xDD: /* DRI */ + /* Load segment data */ + if (len > JD_SZBUF) return JDR_MEM2; + if (infunc(jd, seg, len) != len) return JDR_INP; + + /* Get restart interval (MCUs) */ + jd->nrst = LDB_WORD(seg); + break; + + case 0xC4: /* DHT */ + /* Load segment data */ + if (len > JD_SZBUF) return JDR_MEM2; + if (infunc(jd, seg, len) != len) return JDR_INP; + + /* Create huffman tables */ + rc = create_huffman_tbl(jd, seg, len); + if (rc) return (JRESULT)rc; + break; + + case 0xDB: /* DQT */ + /* Load segment data */ + if (len > JD_SZBUF) return JDR_MEM2; + if (infunc(jd, seg, len) != len) return JDR_INP; + + /* Create de-quantizer tables */ + rc = create_qt_tbl(jd, seg, len); + if (rc) return (JRESULT)rc; + break; + + case 0xDA: /* SOS */ + /* Load segment data */ + if (len > JD_SZBUF) return JDR_MEM2; + if (infunc(jd, seg, len) != len) return JDR_INP; + + if (!jd->width || !jd->height) return JDR_FMT1; /* Err: Invalid image size */ + + if (seg[0] != jd->comps_in_frame) return JDR_FMT3; /* Err: Supports only three color or grayscale components format */ + + /* Check if all tables corresponding to each components have been loaded */ + for (size_t i = 0; i < jd->comps_in_frame; ++i) { + uint_fast8_t b = seg[2 + 2 * i]; /* Get huffman table ID */ + if (b != 0x00 && b != 0x11) return JDR_FMT3; /* Err: Different table number for DC/AC element */ + b = i ? 1 : 0; + if (!jd->huffbits[b][0] || !jd->huffbits[b][1]) { /* Check dc/ac huffman table for this component */ + return JDR_FMT1; /* Err: Nnot loaded */ + } + if (!jd->qttbl[jd->qtid[i]]) { /* Check dequantizer table for this component */ + return JDR_FMT1; /* Err: Not loaded */ + } + } + + /* Allocate working buffer for MCU and RGB */ + n = jd->msy * jd->msx; /* Number of Y blocks in the MCU */ + if (!n) return JDR_FMT1; /* Err: SOF0 has not been loaded */ + len = n * 64 * 2 + 64; /* Allocate buffer for IDCT and RGB output */ + if (len < 256) len = 256; /* but at least 256 byte is required for IDCT */ + jd->workbuf = alloc_pool(jd, len); /* and it may occupy a part of following MCU working buffer for RGB output */ + if (!jd->workbuf) return JDR_MEM1; /* Err: not enough memory */ + jd->mcubuf = (uint8_t*)alloc_pool(jd, (n + 2) * 64); /* Allocate MCU working buffer */ + if (!jd->mcubuf) return JDR_MEM1; /* Err: not enough memory */ + if (jd->comps_in_frame == 1) { + memset(&jd->mcubuf[64], 128, 128); /* Cb/Cr clear ( for grayscale )*/ + } + + /* Pre-load the JPEG data to extract it from the bit stream */ + ofs %= JD_SZBUF; /* Align read offset to JD_SZBUF */ + int32_t dc = infunc(jd, seg + ofs, JD_SZBUF - ofs); + jd->dptr = seg + ofs - 1; + jd->dpend = seg + ofs + dc; + jd->dmsk = 0; /* Prepare to read bit stream */ + + return JDR_OK; /* Initialization succeeded. Ready to decompress the JPEG image. */ + + case 0xC1: /* SOF1 */ + case 0xC2: /* SOF2 */ + case 0xC3: /* SOF3 */ + case 0xC5: /* SOF5 */ + case 0xC6: /* SOF6 */ + case 0xC7: /* SOF7 */ + case 0xC9: /* SOF9 */ + case 0xCA: /* SOF10 */ + case 0xCB: /* SOF11 */ + case 0xCD: /* SOF13 */ + case 0xCE: /* SOF14 */ + case 0xCF: /* SOF15 */ + case 0xD9: /* EOI */ + return JDR_FMT3; /* Unsuppoted JPEG standard (may be progressive JPEG) */ + + default: /* Unknown segment (comment, exif or etc..) */ + /* Skip segment data */ + if (infunc(jd, 0, len) != len) { /* Null pointer specifies to skip bytes of stream */ + return JDR_INP; + } + } + } +} + + + + +/*-----------------------------------------------------------------------*/ +/* Start to decompress the JPEG picture */ +/*-----------------------------------------------------------------------*/ + +JRESULT lgfx_jd_decomp ( + lgfxJdec* jd, /* Initialized decompression object */ + uint32_t (*outfunc)(lgfxJdec*, void*, JRECT*), /* RGB output function */ + uint_fast8_t scale /* Output de-scaling factor (0 to 3) */ +) +{ + uint32_t x, y, mx, my; + uint32_t nrst, rst, rsc; + JRESULT rc; + + + if (scale > (JD_USE_SCALE ? 3 : 0)) return JDR_PAR; + jd->scale = scale; + + nrst = jd->nrst; + mx = jd->msx << 3; my = jd->msy << 3; /* Size of the MCU (pixel) */ + + jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0; /* Initialize DC values */ + rst = rsc = 0; + + rc = JDR_OK; + + for (y = 0; y < jd->height; y += my) { /* Vertical loop of MCUs */ + x = 0; + do { /* Horizontal loop of MCUs */ + if (nrst && rst++ == nrst) { /* Process restart interval if enabled */ + rc = restart(jd, rsc++); + if (rc != JDR_OK) return rc; + rst = 1; + } + rc = mcu_load(jd); /* Load an MCU (decompress huffman coded stream and apply IDCT) */ + if (rc != JDR_OK) return rc; + rc = mcu_output(jd, outfunc, x, y); /* Output the MCU (color space conversion, scaling and output) */ + if (rc != JDR_OK) return rc; + } while ( (x += mx) < jd->width); + } + + return rc; +} + + + diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.h new file mode 100644 index 0000000..f4376c3 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPPhotoFrame/lgfx_tjpgd.h @@ -0,0 +1,97 @@ +/*----------------------------------------------------------------------------/ +/ TJpgDec - Tiny JPEG Decompressor include file (C)ChaN, 2019 +/-----------------------------------------------------------------------------/ +/ original source is here : http://elm-chan.org/fsw/tjpgd/00index.html +/ +/ Modified for LGFX by lovyan03, 2020 +/ add support grayscale jpeg +/ add bayer pattern +/ tweak for 32bit processor +/----------------------------------------------------------------------------*/ +#ifndef __LGFX_TJPGDEC_H__ +#define __LGFX_TJPGDEC_H__ +/*---------------------------------------------------------------------------*/ +/* System Configurations */ + +#define JD_SZBUF 512 /* Size of stream input buffer */ +#define JD_FORMAT 0 /* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */ +#define JD_USE_SCALE 1 /* Use descaling feature for output */ +#define JD_TBLCLIP 0 /* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */ +#define JD_BAYER 1 /* Use bayer pattern table */ + +/*---------------------------------------------------------------------------*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_WIN32) /* Main development platform */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned long uint32_t; +typedef long int32_t; +#else +#include "stdint.h" +#endif + +/* Error code */ +typedef enum { + JDR_OK = 0, /* 0: Succeeded */ + JDR_INTR, /* 1: Interrupted by output function */ + JDR_INP, /* 2: Device error or wrong termination of input stream */ + JDR_MEM1, /* 3: Insufficient memory pool for the image */ + JDR_MEM2, /* 4: Insufficient stream input buffer */ + JDR_PAR, /* 5: Parameter error */ + JDR_FMT1, /* 6: Data format error (may be damaged data) */ + JDR_FMT2, /* 7: Right format but not supported */ + JDR_FMT3 /* 8: Not supported JPEG standard */ +} JRESULT; + + + +/* Rectangular structure */ +typedef struct { + uint32_t left, right, top, bottom; +} JRECT; + + + +/* Decompressor object structure */ +typedef struct lgfxJdec lgfxJdec; +struct lgfxJdec { + uint8_t* dptr; /* Current data read ptr */ + uint8_t* dpend; /* data end ptr */ + uint8_t* inbuf; /* Bit stream input buffer */ + uint_fast8_t dmsk; /* Current bit in the current read byte */ + uint_fast8_t scale; /* Output scaling ratio */ + uint_fast8_t msx, msy; /* MCU size in unit of block (width, height) */ + uint_fast8_t qtid[3]; /* Quantization table ID of each component */ + int32_t dcv[3]; /* Previous DC element of each component */ + uint16_t nrst; /* Restart inverval */ + uint_fast16_t width, height;/* Size of the input image (pixel) */ + uint8_t* huffbits[2][2]; /* Huffman bit distribution tables [id][dcac] */ + uint16_t* huffcode[2][2]; /* Huffman code word tables [id][dcac] */ + uint8_t* huffdata[2][2]; /* Huffman decoded data tables [id][dcac] */ + int32_t* qttbl[4]; /* Dequantizer tables [id] */ + void* workbuf; /* Working buffer for IDCT and RGB output */ + uint8_t* mcubuf; /* Working buffer for the MCU */ + uint8_t* pool; /* Pointer to available memory pool */ + uint_fast16_t sz_pool; /* Size of momory pool (bytes available) */ + uint32_t (*infunc)(lgfxJdec*, uint8_t*, uint32_t);/* Pointer to jpeg stream input function */ + void* device; /* Pointer to I/O device identifiler for the session */ + uint8_t comps_in_frame; /* 1=Y(grayscale) 3=YCrCb */ +}; + + + +/* TJpgDec API functions */ +JRESULT lgfx_jd_prepare (lgfxJdec*, uint32_t(*)(lgfxJdec*,uint8_t*,uint32_t), void*, uint_fast16_t, void*); +JRESULT lgfx_jd_decomp (lgfxJdec*, uint32_t(*)(lgfxJdec*,void*,JRECT*), uint_fast8_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* _TJPGDEC */ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPWiFiAnalyzer/ESPWiFiAnalyzer.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPWiFiAnalyzer/ESPWiFiAnalyzer.ino new file mode 100644 index 0000000..f41e7ac --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ESPWiFiAnalyzer/ESPWiFiAnalyzer.ino @@ -0,0 +1,515 @@ +/* + * ESP WiFi Analyzer + * Require ESP8266/ESP32 board support. + */ + +//POWER SAVING SETTING +#define SCAN_INTERVAL 3000 +// #define SCAN_COUNT_SLEEP 3 +// #define LCD_PWR_PIN 14 + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +#if defined(ESP32) +#include "WiFi.h" +#else +#include "ESP8266WiFi.h" +#define log_i(format, ...) Serial.printf(format, ##__VA_ARGS__) +#endif + +int16_t w, h, text_size, banner_height, graph_baseline, graph_height, channel_width, signal_width; + +// RSSI RANGE +#define RSSI_CEILING -40 +#define RSSI_FLOOR -100 + +// Channel color mapping from channel 1 to 14 +uint16_t channel_color[] = { + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA}; + +uint8_t scan_count = 0; + +void setup() +{ + // Set WiFi to station mode and disconnect from an AP if it was previously connected + WiFi.mode(WIFI_STA); + WiFi.disconnect(); + delay(100); + +#if defined(LCD_PWR_PIN) + pinMode(LCD_PWR_PIN, OUTPUT); // sets the pin as output + digitalWrite(LCD_PWR_PIN, HIGH); // power on +#endif +#if defined(TFT_BL) + pinMode(TFT_BL, OUTPUT); // sets the pin as output + digitalWrite(TFT_BL, HIGH); // power on +#endif + + // init LCD + gfx->begin(); + w = gfx->width(); + h = gfx->height(); + text_size = (h < 200) ? 1 : 2; + banner_height = text_size * 3 * 4; + graph_baseline = h - 20; // minus 2 text lines + graph_height = graph_baseline - banner_height - 30; // minus 3 text lines + channel_width = w / 17; + signal_width = channel_width * 2; + + // init banner + gfx->setTextSize(text_size); + gfx->fillScreen(BLACK); + gfx->setTextColor(RED); + gfx->setCursor(0, 0); + gfx->print("ESP"); + gfx->setTextColor(WHITE); + gfx->print(" WiFi Analyzer"); +} + +bool matchBssidPrefix(uint8_t *a, uint8_t *b) +{ + for (uint8_t i = 0; i < 5; i++) + { // only compare first 5 bytes + if (a[i] != b[i]) + { + return false; + } + } + return true; +} + +void loop() +{ + uint8_t ap_count_list[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int32_t noise_list[] = {RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR}; + int32_t peak_list[] = {RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR}; + int16_t peak_id_list[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + int32_t channel; + int16_t idx; + int32_t rssi; + uint8_t *bssid; + String ssid; + uint16_t color; + int16_t height, offset, text_width; + + // WiFi.scanNetworks will return the number of networks found +#if defined(ESP32) + int n = WiFi.scanNetworks(false /* async */, true /* show_hidden */, true /* passive */, 500 /* max_ms_per_chan */); +#else + int n = WiFi.scanNetworks(false /* async */, true /* show_hidden */); +#endif + + // clear old graph + gfx->fillRect(0, banner_height, w, h - banner_height, BLACK); + gfx->setTextSize(1); + + if (n == 0) + { + gfx->setTextColor(WHITE); + gfx->setCursor(0, banner_height); + gfx->println("no networks found"); + } + else + { + for (int i = 0; i < n; i++) + { + channel = WiFi.channel(i); + idx = channel - 1; + rssi = WiFi.RSSI(i); + bssid = WiFi.BSSID(i); + + // channel peak stat + if (peak_list[idx] < rssi) + { + peak_list[idx] = rssi; + peak_id_list[idx] = i; + } + + // check signal come from same AP + bool duplicate_SSID = false; + for (int j = 0; j < i; j++) + { + if ( + (WiFi.channel(j) == channel) && matchBssidPrefix(WiFi.BSSID(j), bssid)) + { + duplicate_SSID = true; + break; + } + } + + if (!duplicate_SSID) + { + ap_count_list[idx]++; + + // noise stat + int32_t noise = rssi - RSSI_FLOOR; + noise *= noise; + if (channel > 4) + { + noise_list[idx - 4] += noise; + } + if (channel > 3) + { + noise_list[idx - 3] += noise; + } + if (channel > 2) + { + noise_list[idx - 2] += noise; + } + if (channel > 1) + { + noise_list[idx - 1] += noise; + } + noise_list[idx] += noise; + if (channel < 14) + { + noise_list[idx + 1] += noise; + } + if (channel < 13) + { + noise_list[idx + 2] += noise; + } + if (channel < 12) + { + noise_list[idx + 3] += noise; + } + if (channel < 11) + { + noise_list[idx + 4] += noise; + } + } + } + + // plot found WiFi info + for (int i = 0; i < n; i++) + { + channel = WiFi.channel(i); + idx = channel - 1; + rssi = WiFi.RSSI(i); + color = channel_color[idx]; + height = constrain(map(rssi, RSSI_FLOOR, RSSI_CEILING, 1, graph_height), 1, graph_height); + offset = (channel + 1) * channel_width; + + // trim rssi with RSSI_FLOOR + if (rssi < RSSI_FLOOR) + { + rssi = RSSI_FLOOR; + } + + // plot chart + // gfx->drawLine(offset, graph_baseline - height, offset - signal_width, graph_baseline + 1, color); + // gfx->drawLine(offset, graph_baseline - height, offset + signal_width, graph_baseline + 1, color); + gfx->startWrite(); + gfx->drawEllipseHelper(offset, graph_baseline + 1, signal_width, height, 0b0011, color); + gfx->endWrite(); + + if (i == peak_id_list[idx]) + { + // Print SSID, signal strengh and if not encrypted + String ssid = WiFi.SSID(i); + if (ssid.length() == 0) + { + ssid = WiFi.BSSIDstr(i); + } + text_width = (ssid.length() + 6) * 6; + if (text_width > w) + { + offset = 0; + } + else + { + offset = (channel - 1) * channel_width; + if ((offset + text_width) > w) + { + offset = w - text_width; + } + } + gfx->setTextColor(color); + gfx->setCursor(offset, graph_baseline - 10 - height); + gfx->print(ssid); + gfx->print('('); + gfx->print(rssi); + gfx->print(')'); +#if defined(ESP32) + if (WiFi.encryptionType(i) == WIFI_AUTH_OPEN) +#else + if (WiFi.encryptionType(i) == ENC_TYPE_NONE) +#endif + { + gfx->print('*'); + } + } + } + } + + // print WiFi stat + gfx->setTextColor(WHITE); + gfx->setCursor(0, banner_height); + gfx->print(n); + gfx->print(" networks found, lesser noise channels: "); + bool listed_first_channel = false; + int32_t min_noise = noise_list[0]; // init with channel 1 value + for (channel = 2; channel <= 11; channel++) // channels 12-14 may not available + { + idx = channel - 1; + log_i("min_noise: %d, noise_list[%d]: %d", min_noise, idx, noise_list[idx]); + if (noise_list[idx] < min_noise) + { + min_noise = noise_list[idx]; + } + } + + for (channel = 1; channel <= 11; channel++) // channels 12-14 may not available + { + idx = channel - 1; + // check channel with min noise + if (noise_list[idx] == min_noise) + { + if (!listed_first_channel) + { + listed_first_channel = true; + } + else + { + gfx->print(", "); + } + gfx->print(channel); + } + } + + // draw graph base axle + gfx->drawFastHLine(0, graph_baseline, 320, WHITE); + for (channel = 1; channel <= 14; channel++) + { + idx = channel - 1; + offset = (channel + 1) * channel_width; + gfx->setTextColor(channel_color[idx]); + gfx->setCursor(offset - ((channel < 10) ? 3 : 6), graph_baseline + 2); + gfx->print(channel); + if (ap_count_list[idx] > 0) + { + gfx->setCursor(offset - ((ap_count_list[idx] < 10) ? 9 : 12), graph_baseline + 8 + 2); + gfx->print('{'); + gfx->print(ap_count_list[idx]); + gfx->print('}'); + } + } + + // Wait a bit before scanning again + delay(SCAN_INTERVAL); + +#if defined(SCAN_COUNT_SLEEP) + //POWER SAVING + if (++scan_count >= SCAN_COUNT_SLEEP) + { +#if defined(LCD_PWR_PIN) + pinMode(LCD_PWR_PIN, INPUT); // disable pin +#endif +#if defined(TFT_BL) + pinMode(TFT_BL, INPUT); // disable pin +#endif + +#if defined(ESP32) + esp_sleep_enable_ext0_wakeup(GPIO_NUM_36, LOW); + esp_deep_sleep_start(); +#else + ESP.deepSleep(0); +#endif + } +#endif // defined(SCAN_COUNT_SLEEP) +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/HelloWorld/HelloWorld.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/HelloWorld/HelloWorld.ino new file mode 100644 index 0000000..c4ad652 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/HelloWorld/HelloWorld.ino @@ -0,0 +1,222 @@ +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +void setup(void) +{ + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + + gfx->setCursor(10, 10); + gfx->setTextColor(RED); + gfx->println("Hello World!"); + + delay(5000); // 5 seconds +} + +void loop() +{ + gfx->setCursor(random(gfx->width()), random(gfx->height())); + gfx->setTextColor(random(0xffff)); + gfx->setTextSize(random(9) /* x scale */, random(9) /* y scale */, random(3) /* pixel_margin */); + gfx->println("Hello World!"); + + delay(1000); // 1 second +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-optimize.gif b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-optimize.gif new file mode 100644 index 0000000..48224d2 Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-optimize.gif differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-resize.gif b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-resize.gif new file mode 100644 index 0000000..4e07389 Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/Data/ezgif.com-resize.gif differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/GifClass.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/GifClass.h new file mode 100644 index 0000000..f986f6d --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/GifClass.h @@ -0,0 +1,647 @@ +/******************************************************************************* + * GIFDEC Wrapper Class + * + * Rewrite from: https://github.com/BasementCat/arduino-tft-gif + ******************************************************************************/ +#ifndef _GIFCLASS_H_ +#define _GIFCLASS_H_ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#elif defined(ESP32) || defined(ESP8266) +#include +#else +#include +#endif + +#include + +#define MIN(A, B) ((A) < (B) ? (A) : (B)) +#define MAX(A, B) ((A) > (B) ? (A) : (B)) + +#define GIF_BUF_SIZE 1024 + +typedef struct gd_Palette +{ + int size; + uint16_t colors[256]; +} gd_Palette; + +typedef struct gd_GCE +{ + uint16_t delay; + uint8_t tindex; + uint8_t disposal; + int input; + int transparency; +} gd_GCE; + +typedef struct gd_Entry +{ + int32_t length; + uint16_t prefix; + uint8_t suffix; +} gd_Entry; + +typedef struct gd_Table +{ + int bulk; + int nentries; + gd_Entry *entries; +} gd_Table; + +typedef struct gd_GIF +{ + File *fd; + off_t anim_start; + uint16_t width, height; + uint16_t depth; + uint16_t loop_count; + gd_GCE gce; + gd_Palette *palette; + gd_Palette lct, gct; + void (*plain_text)( + struct gd_GIF *gif, uint16_t tx, uint16_t ty, + uint16_t tw, uint16_t th, uint8_t cw, uint8_t ch, + uint8_t fg, uint8_t bg); + void (*comment)(struct gd_GIF *gif); + void (*application)(struct gd_GIF *gif, char id[8], char auth[3]); + uint16_t fx, fy, fw, fh; + uint8_t bgindex; + gd_Table *table; +} gd_GIF; + +class GifClass +{ +public: + gd_GIF *gd_open_gif(File *fd) + { + uint8_t sigver[3]; + uint16_t width, height, depth; + uint8_t fdsz, bgidx, aspect; + int32_t gct_sz; + gd_GIF *gif; + + // init global variables + gif_buf_last_idx = GIF_BUF_SIZE; + gif_buf_idx = gif_buf_last_idx; // no buffer yet + file_pos = 0; + + /* Header */ + gif_buf_read(fd, sigver, 3); + if (memcmp(sigver, "GIF", 3) != 0) + { + Serial.println(F("invalid signature")); + return NULL; + } + /* Version */ + gif_buf_read(fd, sigver, 3); + if (memcmp(sigver, "89a", 3) != 0) + { + Serial.println(F("invalid version")); + return NULL; + } + /* Width x Height */ + width = gif_buf_read16(fd); + height = gif_buf_read16(fd); + /* FDSZ */ + gif_buf_read(fd, &fdsz, 1); + /* Presence of GCT */ + if (!(fdsz & 0x80)) + { + Serial.println(F("no global color table")); + return NULL; + } + /* Color Space's Depth */ + depth = ((fdsz >> 4) & 7) + 1; + /* Ignore Sort Flag. */ + /* GCT Size */ + gct_sz = 1 << ((fdsz & 0x07) + 1); + /* Background Color Index */ + gif_buf_read(fd, &bgidx, 1); + /* Aspect Ratio */ + gif_buf_read(fd, &aspect, 1); + /* Create gd_GIF Structure. */ + gif = (gd_GIF *)calloc(1, sizeof(*gif)); + gif->fd = fd; + gif->width = width; + gif->height = height; + gif->depth = depth; + /* Read GCT */ + read_palette(fd, &gif->gct, gct_sz); + gif->palette = &gif->gct; + gif->bgindex = bgidx; + gif->anim_start = file_pos; // fd->position(); + gif->table = new_table(); + return gif; + } + + /* Return 1 if got a frame; 0 if got GIF trailer; -1 if error. */ + int32_t gd_get_frame(gd_GIF *gif, uint8_t *frame) + { + char sep; + + while (1) + { + gif_buf_read(gif->fd, (uint8_t *)&sep, 1); + if (sep == 0) + { + gif_buf_read(gif->fd, (uint8_t *)&sep, 1); + } + if (sep == ',') + { + break; + } + if (sep == ';') + { + return 0; + } + if (sep == '!') + { + read_ext(gif); + } + else + { + Serial.print(F("Read sep: [")); + Serial.print(sep); + Serial.println(F("].\n")); + return -1; + } + } + // Serial.println("Do read image"); + if (read_image(gif, frame) == -1) + return -1; + return 1; + } + + void gd_rewind(gd_GIF *gif) + { +#if defined(ESP32) || defined(ESP8266) + gif->fd->seek(gif->anim_start, SeekSet); +#else + gif->fd->seek(gif->anim_start); +#endif + file_pos = gif->anim_start; + gif_buf_idx = gif_buf_last_idx; // reset buffer + } + + void gd_close_gif(gd_GIF *gif) + { + gif->fd->close(); + free(gif->table); + free(gif); + } + +private: + bool gif_buf_seek(File *fd, int len) + { + if (len > (gif_buf_last_idx - gif_buf_idx)) + { +#if defined(ESP32) || defined(ESP8266) + // fd->seek(len - (gif_buf_last_idx - gif_buf_idx), SeekCur); + fd->seek(file_pos + len - (gif_buf_last_idx - gif_buf_idx), SeekSet); +#else + fd->seek(file_pos + len - (gif_buf_last_idx - gif_buf_idx)); +#endif + + gif_buf_idx = gif_buf_last_idx; + } + else + { + gif_buf_idx += len; + } + file_pos += len; + + return true; + } + + int gif_buf_read(File *fd, uint8_t *dest, int len) + { + while (len--) + { + if (gif_buf_idx == gif_buf_last_idx) + { + gif_buf_last_idx = fd->read(gif_buf, GIF_BUF_SIZE); + gif_buf_idx = 0; + } + + file_pos++; + *(dest++) = gif_buf[gif_buf_idx++]; + } + return len; + } + + uint8_t gif_buf_read(File *fd) + { + if (gif_buf_idx == gif_buf_last_idx) + { + gif_buf_last_idx = fd->read(gif_buf, GIF_BUF_SIZE); + gif_buf_idx = 0; + } + + file_pos++; + return gif_buf[gif_buf_idx++]; + } + + uint16_t gif_buf_read16(File *fd) + { + return gif_buf_read(fd) + (((uint16_t)gif_buf_read(fd)) << 8); + } + + void read_palette(File *fd, gd_Palette *dest, int32_t num_colors) + { + uint8_t r, g, b; + dest->size = num_colors; + for (int32_t i = 0; i < num_colors; i++) + { + r = gif_buf_read(fd); + g = gif_buf_read(fd); + b = gif_buf_read(fd); + dest->colors[i] = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3); + } + } + + void discard_sub_blocks(gd_GIF *gif) + { + uint8_t size; + + do + { + gif_buf_read(gif->fd, &size, 1); + gif_buf_seek(gif->fd, size); + } while (size); + } + + void read_plain_text_ext(gd_GIF *gif) + { + if (gif->plain_text) + { + uint16_t tx, ty, tw, th; + uint8_t cw, ch, fg, bg; + off_t sub_block; + gif_buf_seek(gif->fd, 1); /* block size = 12 */ + tx = gif_buf_read16(gif->fd); + ty = gif_buf_read16(gif->fd); + tw = gif_buf_read16(gif->fd); + th = gif_buf_read16(gif->fd); + cw = gif_buf_read(gif->fd); + ch = gif_buf_read(gif->fd); + fg = gif_buf_read(gif->fd); + bg = gif_buf_read(gif->fd); + gif->plain_text(gif, tx, ty, tw, th, cw, ch, fg, bg); + } + else + { + /* Discard plain text metadata. */ + gif_buf_seek(gif->fd, 13); + } + /* Discard plain text sub-blocks. */ + discard_sub_blocks(gif); + } + + void read_graphic_control_ext(gd_GIF *gif) + { + uint8_t rdit; + + /* Discard block size (always 0x04). */ + gif_buf_seek(gif->fd, 1); + gif_buf_read(gif->fd, &rdit, 1); + gif->gce.disposal = (rdit >> 2) & 3; + gif->gce.input = rdit & 2; + gif->gce.transparency = rdit & 1; + gif->gce.delay = gif_buf_read16(gif->fd); + gif_buf_read(gif->fd, &gif->gce.tindex, 1); + /* Skip block terminator. */ + gif_buf_seek(gif->fd, 1); + } + + void read_comment_ext(gd_GIF *gif) + { + if (gif->comment) + { + gif->comment(gif); + } + /* Discard comment sub-blocks. */ + discard_sub_blocks(gif); + } + + void read_application_ext(gd_GIF *gif) + { + char app_id[8]; + char app_auth_code[3]; + + /* Discard block size (always 0x0B). */ + gif_buf_seek(gif->fd, 1); + /* Application Identifier. */ + gif_buf_read(gif->fd, (uint8_t *)app_id, 8); + /* Application Authentication Code. */ + gif_buf_read(gif->fd, (uint8_t *)app_auth_code, 3); + if (!strncmp(app_id, "NETSCAPE", sizeof(app_id))) + { + /* Discard block size (0x03) and constant byte (0x01). */ + gif_buf_seek(gif->fd, 2); + gif->loop_count = gif_buf_read16(gif->fd); + /* Skip block terminator. */ + gif_buf_seek(gif->fd, 1); + } + else if (gif->application) + { + gif->application(gif, app_id, app_auth_code); + discard_sub_blocks(gif); + } + else + { + discard_sub_blocks(gif); + } + } + + void read_ext(gd_GIF *gif) + { + uint8_t label; + + gif_buf_read(gif->fd, &label, 1); + switch (label) + { + case 0x01: + read_plain_text_ext(gif); + break; + case 0xF9: + read_graphic_control_ext(gif); + break; + case 0xFE: + read_comment_ext(gif); + break; + case 0xFF: + read_application_ext(gif); + break; + default: + Serial.print("unknown extension: "); + Serial.println(label, HEX); + } + } + + gd_Table *new_table() + { + // int key; + // int init_bulk = MAX(1 << (key_size + 1), 0x100); + // Table *table = (Table*) malloc(sizeof(*table) + sizeof(Entry) * init_bulk); + // if (table) { + // table->bulk = init_bulk; + // table->nentries = (1 << key_size) + 2; + // table->entries = (Entry *) &table[1]; + // for (key = 0; key < (1 << key_size); key++) + // table->entries[key] = (Entry) {1, 0xFFF, key}; + // } + // return table; + int s = sizeof(gd_Table) + (sizeof(gd_Entry) * 4096); + gd_Table *table = (gd_Table *)malloc(s); + if (table) + { + Serial.print(F("new_table() malloc: ")); + Serial.println(s); + } + else + { + Serial.print(F("new_table() malloc failed: ")); + Serial.println(s); + } + table->entries = (gd_Entry *)&table[1]; + return table; + } + + void reset_table(gd_Table *table, int32_t key_size) + { + table->nentries = (1 << key_size) + 2; + for (int32_t key = 0; key < (1 << key_size); key++) + { + table->entries[key] = (gd_Entry){1, 0xFFF, key}; + } + } + + /* Add table entry. Return value: + * 0 on success + * +1 if key size must be incremented after this addition + * -1 if could not realloc table */ + int32_t add_entry(gd_Table *table, int32_t length, uint16_t prefix, uint8_t suffix) + { + // Table *table = *tablep; + // if (table->nentries == table->bulk) { + // table->bulk *= 2; + // table = (Table*) realloc(table, sizeof(*table) + sizeof(Entry) * table->bulk); + // if (!table) return -1; + // table->entries = (Entry *) &table[1]; + // *tablep = table; + // } + table->entries[table->nentries] = (gd_Entry){length, prefix, suffix}; + table->nentries++; + if ((table->nentries & (table->nentries - 1)) == 0) + return 1; + return 0; + } + + uint16_t get_key(gd_GIF *gif, int key_size, uint8_t *sub_len, uint8_t *shift, uint8_t *byte) + { + int bits_read; + int rpad; + int frag_size; + uint16_t key; + + key = 0; + for (bits_read = 0; bits_read < key_size; bits_read += frag_size) + { + rpad = (*shift + bits_read) % 8; + if (rpad == 0) + { + /* Update byte. */ + if (*sub_len == 0) + gif_buf_read(gif->fd, sub_len, 1); /* Must be nonzero! */ + gif_buf_read(gif->fd, byte, 1); + (*sub_len)--; + } + frag_size = MIN(key_size - bits_read, 8 - rpad); + key |= ((uint16_t)((*byte) >> rpad)) << bits_read; + } + /* Clear extra bits to the left. */ + key &= (1 << key_size) - 1; + *shift = (*shift + key_size) % 8; + return key; + } + + /* Compute output index of y-th input line, in frame of height h. */ + int interlaced_line_index(int h, int y) + { + int p; /* number of lines in current pass */ + + p = (h - 1) / 8 + 1; + if (y < p) /* pass 1 */ + return y * 8; + y -= p; + p = (h - 5) / 8 + 1; + if (y < p) /* pass 2 */ + return y * 8 + 4; + y -= p; + p = (h - 3) / 4 + 1; + if (y < p) /* pass 3 */ + return y * 4 + 2; + y -= p; + /* pass 4 */ + return y * 2 + 1; + } + + /* Decompress image pixels. + * Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table). */ + int32_t read_image_data(gd_GIF *gif, int interlace, uint8_t *frame) + { + uint8_t sub_len, shift, byte; + int init_key_size, key_size, table_is_full; + int frm_off, str_len, p, x, y; + uint16_t key, clear, stop; + int32_t ret; + gd_Entry entry; + off_t start, end; + + // Serial.println("Read key size"); + gif_buf_read(gif->fd, &byte, 1); + key_size = (int)byte; + // Serial.println("Set pos, discard sub blocks"); + // start = gif->fd->position(); + // discard_sub_blocks(gif); + // end = gif->fd->position(); + // gif_buf_seek(gif->fd, start, SeekSet); + clear = 1 << key_size; + stop = clear + 1; + // Serial.println("New LZW table"); + // table = new_table(key_size); + reset_table(gif->table, key_size); + key_size++; + init_key_size = key_size; + sub_len = shift = 0; + // Serial.println("Get init key"); + key = get_key(gif, key_size, &sub_len, &shift, &byte); /* clear code */ + frm_off = 0; + ret = 0; + while (1) + { + if (key == clear) + { + // Serial.println("Clear key, reset nentries"); + key_size = init_key_size; + gif->table->nentries = (1 << (key_size - 1)) + 2; + table_is_full = 0; + } + else if (!table_is_full) + { + // Serial.println("Add entry to table"); + ret = add_entry(gif->table, str_len + 1, key, entry.suffix); + // if (ret == -1) { + // // Serial.println("Table entry add failure"); + // free(table); + // return -1; + // } + if (gif->table->nentries == 0x1000) + { + // Serial.println("Table is full"); + ret = 0; + table_is_full = 1; + } + } + // Serial.println("Get key"); + key = get_key(gif, key_size, &sub_len, &shift, &byte); + if (key == clear) + continue; + if (key == stop) + break; + if (ret == 1) + key_size++; + entry = gif->table->entries[key]; + str_len = entry.length; + uint8_t tindex = gif->gce.tindex; + // Serial.println("Interpret key"); + while (1) + { + p = frm_off + entry.length - 1; + x = p % gif->fw; + y = p / gif->fw; + if (interlace) + { + y = interlaced_line_index((int)gif->fh, y); + } + if (tindex != entry.suffix) + { + frame[(gif->fy + y) * gif->width + gif->fx + x] = entry.suffix; + } + if (entry.prefix == 0xFFF) + break; + else + entry = gif->table->entries[entry.prefix]; + } + frm_off += str_len; + if (key < gif->table->nentries - 1 && !table_is_full) + gif->table->entries[gif->table->nentries - 1].suffix = entry.suffix; + } + // Serial.println("Done w/ img data, free table and seek to end"); + // free(table); + gif_buf_read(gif->fd, &sub_len, 1); /* Must be zero! */ + // gif_buf_seek(gif->fd, end, SeekSet); + return 0; + } + + /* Read image. + * Return 0 on success or -1 on out-of-memory (w.r.t. LZW code table). */ + int32_t read_image(gd_GIF *gif, uint8_t *frame) + { + uint8_t fisrz; + int interlace; + + /* Image Descriptor. */ + // Serial.println("Read image descriptor"); + gif->fx = gif_buf_read16(gif->fd); + gif->fy = gif_buf_read16(gif->fd); + gif->fw = gif_buf_read16(gif->fd); + gif->fh = gif_buf_read16(gif->fd); + // Serial.println("Read fisrz?"); + gif_buf_read(gif->fd, &fisrz, 1); + interlace = fisrz & 0x40; + /* Ignore Sort Flag. */ + /* Local Color Table? */ + if (fisrz & 0x80) + { + /* Read LCT */ + // Serial.println("Read LCT"); + read_palette(gif->fd, &gif->lct, 1 << ((fisrz & 0x07) + 1)); + gif->palette = &gif->lct; + } + else + { + gif->palette = &gif->gct; + } + /* Image Data. */ + // Serial.println("Read image data"); + return read_image_data(gif, interlace, frame); + } + + void render_frame_rect(gd_GIF *gif, uint16_t *buffer, uint8_t *frame) + { + int i, j, k; + uint8_t index, *color; + i = gif->fy * gif->width + gif->fx; + for (j = 0; j < gif->fh; j++) + { + for (k = 0; k < gif->fw; k++) + { + index = frame[(gif->fy + j) * gif->width + gif->fx + k]; + // color = &gif->palette->colors[index*2]; + if (!gif->gce.transparency || index != gif->gce.tindex) + buffer[(i + k)] = gif->palette->colors[index]; + // memcpy(&buffer[(i+k)*2], color, 2); + } + i += gif->width; + } + } + + int gif_buf_last_idx, gif_buf_idx, file_pos; + uint8_t gif_buf[GIF_BUF_SIZE]; +}; + +#endif /* _GIFCLASS_H_ */ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/ImgViewerAnimatedGIF.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/ImgViewerAnimatedGIF.ino new file mode 100644 index 0000000..3a4dc59 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerAnimatedGIF/ImgViewerAnimatedGIF.ino @@ -0,0 +1,376 @@ +/******************************************************************************* + * Animated GIF Image Viewer + * This is a simple Animated GIF image viewer exsample + * Image Source: https://www.pexels.com/video/earth-rotating-video-856356/ + * cropped: x: 598 y: 178 width: 720 height: 720 resized: 240x240 + * optimized with ezgif.com + * + * Setup steps: + * 1. Change your LCD parameters in Arduino_GFX setting + * 2. Upload Animated GIF file + * SPIFFS (ESP32): + * upload SPIFFS data with ESP32 Sketch Data Upload: + * ESP32: https://github.com/me-no-dev/arduino-esp32fs-plugin + * LittleFS (ESP8266): + * upload LittleFS data with ESP8266 LittleFS Data Upload: + * ESP8266: https://github.com/earlephilhower/arduino-esp8266littlefs-plugin + * SD: + * Most Arduino system built-in support SD file system. + * Wio Terminal require extra dependant Libraries: + * - Seeed_Arduino_FS: https://github.com/Seeed-Studio/Seeed_Arduino_FS.git + * - Seeed_Arduino_SFUD: https://github.com/Seeed-Studio/Seeed_Arduino_SFUD.git + ******************************************************************************/ +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define GIF_FILENAME "/ezgif.com-optimize.gif" +#elif defined(ESP32) +#define GIF_FILENAME "/ezgif.com-optimize.gif" +#else +#define GIF_FILENAME "/ezgif.com-resize.gif" +#endif + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI_DMA(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI_DMA(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI_DMA(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI_DMA(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI_DMA(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +#ifdef ESP32 +Arduino_DataBus *bus = new Arduino_ESP32SPI_DMA(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); +#else +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); +#endif + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +// #include +#elif defined(ESP8266) +#include +#include +#else +#include +#endif + +#include "GifClass.h" +static GifClass gifClass; + +void setup() +{ + Serial.begin(115200); + + // Init Display + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) +#elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) +#elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) +#else + if (!SD.begin()) +#endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File gifFile = SD.open(GIF_FILENAME, "r"); +#elif defined(ESP32) + File gifFile = SPIFFS.open(GIF_FILENAME, "r"); + // File gifFile = SD.open(GIF_FILENAME, "r"); +#elif defined(ESP8266) + File gifFile = LittleFS.open(GIF_FILENAME, "r"); + // File gifFile = SD.open(GIF_FILENAME, "r"); +#else + File gifFile = SD.open(GIF_FILENAME, FILE_READ); +#endif + if (!gifFile || gifFile.isDirectory()) + { + Serial.println(F("ERROR: open gifFile Failed!")); + gfx->println(F("ERROR: open gifFile Failed!")); + } + else + { + // read GIF file header + gd_GIF *gif = gifClass.gd_open_gif(&gifFile); + if (!gif) + { + Serial.println(F("gd_open_gif() failed!")); + } + else + { + int32_t s = gif->width * gif->height; + uint8_t *buf = (uint8_t *)malloc(s); + if (!buf) + { + Serial.println(F("buf malloc failed!")); + } + else + { + Serial.println(F("GIF video start")); + gfx->setAddrWindow((gfx->width() - gif->width) / 2, (gfx->height() - gif->height) / 2, gif->width, gif->height); + int t_fstart, t_delay = 0, t_real_delay, res, delay_until; + int duration = 0, remain = 0; + while (1) + { + t_fstart = millis(); + t_delay = gif->gce.delay * 10; + res = gifClass.gd_get_frame(gif, buf); + if (res < 0) + { + Serial.println(F("ERROR: gd_get_frame() failed!")); + break; + } + else if (res == 0) + { + Serial.print(F("rewind, duration: ")); + Serial.print(duration); + Serial.print(F(", remain: ")); + Serial.print(remain); + Serial.print(F(" (")); + Serial.print(100.0 * remain / duration); + Serial.println(F("%)")); + duration = 0; + remain = 0; + gifClass.gd_rewind(gif); + continue; + } + + gfx->startWrite(); + gfx->writeIndexedPixels(buf, gif->palette->colors, s); + gfx->endWrite(); + + t_real_delay = t_delay - (millis() - t_fstart); + duration += t_delay; + remain += t_real_delay; + delay_until = millis() + t_real_delay; + do + { + delay(1); + } while (millis() < delay_until); + } + Serial.println(F("GIF video end")); + Serial.print(F("duration: ")); + Serial.print(duration); + Serial.print(F(", remain: ")); + Serial.print(remain); + Serial.print(F(" (")); + Serial.print(100.0 * remain / duration); + Serial.println(F("%)")); + + gifClass.gd_close_gif(gif); + free(buf); + } + } + } + } +} + +void loop() +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/BmpClass.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/BmpClass.h new file mode 100644 index 0000000..25c2e80 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/BmpClass.h @@ -0,0 +1,259 @@ +/******************************************************************************* + * JPEGDEC Wrapper Class + * + * Rewrite from: https://github.com/Jaycar-Electronics/Arduino-Picture-Frame.git + ******************************************************************************/ +#ifndef _BMPCLASS_H_ +#define _BMPCLASS_H_ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#elif defined(ESP32) || defined(ESP8266) +#include +#else +#include +#endif + +typedef void(BMP_DRAW_CALLBACK)(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + +class BmpClass +{ +public: + void draw( + File *f, BMP_DRAW_CALLBACK *bmpDrawCallback, bool useBigEndian, + int16_t x, int16_t y, int16_t widthLimit, int16_t heightLimit) + { + _bmpDrawCallback = bmpDrawCallback; + _useBigEndian = useBigEndian; + _heightLimit = heightLimit; + + int16_t u, v; + uint32_t xend; + + getbmpparms(f); + + //validate bitmap + if ((bmtype == 19778) && (bmwidth > 0) && (bmheight > 0) && (bmbpp > 0)) + { + //centre image + u = (widthLimit - bmwidth) / 2; + v = (heightLimit - bmheight) / 2; + u = (u < 0) ? x : x + u; + v = (v < 0) ? y : y + v; + xend = (bmwidth > widthLimit) ? widthLimit : bmwidth; + + bmpRow = (uint16_t *)malloc(xend * 2); + if (!bmpRow) + { + Serial.println(F("bmpRow malloc failed.")); + } + if (bmbpp < 9) + { + bmplt = (uint16_t *)malloc(bmpltsize * 2); + if (!bmplt) + { + Serial.println(F("bmplt malloc failed.")); + } + bmloadplt(f); //load palette if palettized + drawbmpal(f, u, v, xend); + free(bmplt); + } + else if (bmbpp == 16) + { + // TODO: bpp 16 should have 3 pixel types + drawbmRgb565(f, u, v, xend); + } + else + { + drawbmtrue(f, u, v, xend); + } + free(bmpRow); + } + } + +private: + void bmloadplt(File *f) + { + byte r, g, b; + if (bmpltsize == 0) + { + bmpltsize = 1 << bmbpp; //load default palette size + } + f->seek(54); //palette position in type 0x28 bitmaps + for (int16_t i = 0; i < bmpltsize; i++) + { + b = f->read(); + g = f->read(); + r = f->read(); + f->read(); //dummy byte + bmplt[i] = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); + } + } + + void drawbmpal(File *f, int16_t u, int16_t v, uint32_t xend) + { + byte bmbitmask; + int16_t i, ystart, bmppb, p, d; + uint16_t x, y; + uint16_t c; + bmbpl = ((bmbpp * bmwidth + 31) / 32) * 4; //bytes per line + bmppb = 8 / bmbpp; //pixels/byte + bmbitmask = ((1 << bmbpp) - 1); //mask for each pixel + ystart = 0; + if (bmheight > _heightLimit) + { + ystart = bmheight - _heightLimit; //don't draw if it's outside screen + } + for (y = ystart; y < bmheight; y++) + { //invert in calculation (y=0 is bottom) + f->seek(bmdataptr + y * bmbpl); //seek to start of line + x = 0; + p = 0; + while (x < xend) + { + if (p < 1) + { + d = f->read(); + p = bmppb; + } + d = d << bmbpp; + c = bmplt[(bmbitmask & (d >> 8))]; + bmpRow[x] = (_useBigEndian) ? ((c >> 8) | (c << 8)) : c; + + p--; + x++; + } + _bmpDrawCallback(u, v + bmheight - 1 - y, bmpRow, xend, 1); + } + } + + // draw 16-bit colour (RGB565) bitmap + void drawbmRgb565(File *f, int16_t u, int16_t v, uint32_t xend) + { + int16_t i, ystart; + uint32_t x, y; + byte lo, hi; + bmbpl = ((bmbpp * bmwidth + 31) / 32) * 4; //bytes per line, due to 32bit chunks + ystart = 0; + if (bmheight > _heightLimit) + { + ystart = bmheight - _heightLimit; //don't draw if it's outside screen + } + Serial.println(xend); + for (y = ystart; y < bmheight; y++) + { //invert in calculation (y=0 is bottom) + f->seek(bmdataptr + (y * bmbpl)); //seek at start of line + for (x = 0; x < xend; x++) + { + lo = f->read(); + hi = f->read(); + if (_useBigEndian) + { + bmpRow[x] = hi | lo << 8; + } + else + { + bmpRow[x] = lo | hi << 8; + } + } + _bmpDrawCallback(u, v + bmheight - 1 - y, bmpRow, xend, 1); + } + } + + // draw true colour bitmap at (u,v) handles 24/32 not 16bpp yet + void drawbmtrue(File *f, int16_t u, int16_t v, uint32_t xend) + { + int16_t i, ystart; + uint32_t x, y; + byte r, g, b; + bmbpl = ((bmbpp * bmwidth + 31) / 32) * 4; //bytes per line, due to 32bit chunks + ystart = 0; + if (bmheight > _heightLimit) + { + ystart = bmheight - _heightLimit; //don't draw if it's outside screen + } + for (y = ystart; y < bmheight; y++) + { //invert in calculation (y=0 is bottom) + f->seek(bmdataptr + y * bmbpl); //seek at start of line + for (x = 0; x < xend; x++) + { + b = f->read(); + g = f->read(); + r = f->read(); + if (bmbpp == 32) + { + f->read(); //dummy byte for 32bit + } + bmpRow[x] = (_useBigEndian) ? ((r & 0xf8) | (g >> 5) | ((g & 0x1c) << 11) | ((b & 0xf8) << 5)) : (((r & 0xf8) << 8) | ((g & 0xfc) << 3) | (b >> 3)); + } + _bmpDrawCallback(u, v + bmheight - 1 - y, bmpRow, xend, 1); + } + } + + void getbmpparms(File *f) + { //load into globals as ints-some parameters are 32 bit, but we can't handle this size anyway + byte h[48]; //header is 54 bytes typically, but we don't need it all + int16_t i; + f->seek(0); //set start of file + for (i = 0; i < 48; i++) + { + h[i] = f->read(); //read header + } + bmtype = h[0] + (h[1] << 8); //offset 0 'BM' + bmdataptr = h[10] + (h[11] << 8); //offset 0xA pointer to image data + bmhdrsize = h[14] + (h[15] << 8); //dib header size (0x28 is usual) + //files may vary here, if !=28, unsupported type, put default values + bmwidth = 0; + bmheight = 0; + bmbpp = 0; + bmpltsize = 0; + if ((bmhdrsize == 0x28) || (bmhdrsize == 0x38)) + { + bmwidth = h[18] + (h[19] << 8); //width + bmheight = h[22] + (h[23] << 8); //height + bmbpp = h[28] + (h[29] << 8); //bits per pixel + bmpltsize = h[46] + (h[47] << 8); //palette size + } + // Serial.printf("bmtype: %d, bmhdrsize: %d, bmwidth: %d, bmheight: %d, bmbpp: %d\n", bmtype, bmhdrsize, bmwidth, bmheight, bmbpp); + } + + byte isbmp(char n[]) + { //check if bmp extension + int16_t k; + k = strlen(n); + if (k < 5) + { + return 0; //name not long enough + } + if (n[k - 1] != 'P') + { + return 0; + } + if (n[k - 2] != 'M') + { + return 0; + } + if (n[k - 3] != 'B') + { + return 0; + } + if (n[k - 4] != '.') + { + return 0; + } + return 1; //passes all tests + } + + BMP_DRAW_CALLBACK *_bmpDrawCallback; + bool _useBigEndian; + int16_t _heightLimit; + + uint16_t bmtype, bmdataptr; //from header + uint32_t bmhdrsize, bmwidth, bmheight, bmbpp, bmpltsize; //from DIB Header + uint16_t bmbpl; //bytes per line- derived + uint16_t *bmplt; //palette- stored encoded for LCD + uint16_t *bmpRow; +}; + +#endif // _BMPCLASS_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatL.bmp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatL.bmp new file mode 100644 index 0000000..9e8bb3e Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatL.bmp differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatM.bmp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatM.bmp new file mode 100644 index 0000000..0e347b8 Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatM.bmp differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatS.bmp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatS.bmp new file mode 100644 index 0000000..a5014db Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/Data/octocatS.bmp differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/ImgViewerBmp.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/ImgViewerBmp.ino new file mode 100644 index 0000000..3121c43 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerBmp/ImgViewerBmp.ino @@ -0,0 +1,305 @@ +/******************************************************************************* + * JPEG Image Viewer + * This is a simple JPEG image viewer example + * Image Source: https://github.blog/2014-11-24-from-sticker-to-sculpture-the-making-of-the-octocat-figurine/ + * + * Setup steps: + * 1. Change your LCD parameters in Arduino_GFX setting + * 2. Upload JPEG file + * SPIFFS (ESP32): + * upload SPIFFS data with ESP32 Sketch Data Upload: + * ESP32: https://github.com/me-no-dev/arduino-esp32fs-plugin + * LittleFS (ESP8266): + * upload LittleFS data with ESP8266 LittleFS Data Upload: + * ESP8266: https://github.com/earlephilhower/arduino-esp8266littlefs-plugin + * SD: + * Most Arduino system built-in support SD file system. + * Wio Terminal require extra dependant Libraries: + * - Seeed_Arduino_FS: https://github.com/Seeed-Studio/Seeed_Arduino_FS.git + * - Seeed_Arduino_SFUD: https://github.com/Seeed-Studio/Seeed_Arduino_SFUD.git + ******************************************************************************/ +// #define BMP_FILENAME "/octocatS.bmp" // 243x128@IndexedColor +#define BMP_FILENAME "/octocatM.bmp" // 456x240@16bit +// #define BMP_FILENAME "/octocatL.bmp" // 608x320@24bit + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP8266) +#include +#include +#else +#include +#endif + +#include "BmpClass.h" +static BmpClass bmpClass; + +// pixel drawing callback +static void bmpDrawCallback(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h) +{ + // Serial.printf("Draw pos = %d, %d. size = %d x %d\n", x, y, w, h); + gfx->draw16bitRGBBitmap(x, y, bitmap, w, h); +} + +void setup() +{ + Serial.begin(115200); + Serial.println("BMP Image Viewer"); + + // Init Display + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) +#elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin()) +#elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin()) +#else + if (!SD.begin()) +#endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { + unsigned long start = millis(); + +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File bmpFile = SD.open(BMP_FILENAME, "r"); +#elif defined(ESP32) + File bmpFile = SPIFFS.open(BMP_FILENAME, "r"); + // File bmpFile = SD.open(BMP_FILENAME, "r"); +#elif defined(ESP8266) + File bmpFile = LittleFS.open(BMP_FILENAME, "r"); + // File bmpFile = SD.open(BMP_FILENAME, "r"); +#else + File bmpFile = SD.open(BMP_FILENAME, FILE_READ); +#endif + + // read JPEG file header + bmpClass.draw( + &bmpFile, bmpDrawCallback, false /* useBigEndian */, + 0 /* x */, 0 /* y */, gfx->width() /* widthLimit */, gfx->height() /* heightLimit */); + + bmpFile.close(); + + Serial.print("Time used: "); + Serial.println(millis() - start); + } +} + +void loop() +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/Data/octocat.jpg b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/Data/octocat.jpg new file mode 100644 index 0000000..5d8d4dc Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/Data/octocat.jpg differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/ImgViewerJpeg.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/ImgViewerJpeg.ino new file mode 100644 index 0000000..1d1e7b7 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/ImgViewerJpeg.ino @@ -0,0 +1,304 @@ +/******************************************************************************* + * JPEG Image Viewer + * This is a simple JPEG image viewer example + * Image Source: https://github.blog/2014-11-24-from-sticker-to-sculpture-the-making-of-the-octocat-figurine/ + * + * Dependent libraries: + * JPEGDEC: https://github.com/bitbank2/JPEGDEC.git + * + * Setup steps: + * 1. Change your LCD parameters in Arduino_GFX setting + * 2. Upload JPEG file + * SPIFFS (ESP32): + * upload SPIFFS data with ESP32 Sketch Data Upload: + * ESP32: https://github.com/me-no-dev/arduino-esp32fs-plugin + * LittleFS (ESP8266): + * upload LittleFS data with ESP8266 LittleFS Data Upload: + * ESP8266: https://github.com/earlephilhower/arduino-esp8266littlefs-plugin + * SD: + * Most Arduino system built-in support SD file system. + * Wio Terminal require extra dependant Libraries: + * - Seeed_Arduino_FS: https://github.com/Seeed-Studio/Seeed_Arduino_FS.git + * - Seeed_Arduino_SFUD: https://github.com/Seeed-Studio/Seeed_Arduino_SFUD.git + ******************************************************************************/ +#define JPEG_FILENAME "/octocat.jpg" + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP8266) +#include +#include +#include +#else +#include +#endif + +#include "JpegClass.h" +static JpegClass jpegClass; + +// pixel drawing callback +static int jpegDrawCallback(JPEGDRAW *pDraw) +{ + // Serial.printf("Draw pos = %d,%d. size = %d x %d\n", pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); + gfx->draw16bitBeRGBBitmap(pDraw->x, pDraw->y, pDraw->pPixels, pDraw->iWidth, pDraw->iHeight); + return 1; +} + +void setup() +{ + Serial.begin(115200); + + // Init Display + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) +#elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) +#elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) +#else + if (!SD.begin()) +#endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { + unsigned long start = millis(); + + // read JPEG file header + jpegClass.draw( +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + &SD, +#elif defined(ESP32) + &SPIFFS, + // &SD, +#elif defined(ESP8266) + &LittleFS, + // &SDFS, +#else + &SD, +#endif + (char *)JPEG_FILENAME, jpegDrawCallback, true /* useBigEndian */, + 0 /* x */, 0 /* y */, gfx->width() /* widthLimit */, gfx->height() /* heightLimit */); + + Serial.printf("Time used: %lu\n", millis() - start); + } +} + +void loop() +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/JpegClass.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/JpegClass.h new file mode 100644 index 0000000..42564e5 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerJpeg/JpegClass.h @@ -0,0 +1,124 @@ +/******************************************************************************* + * JPEGDEC Wrapper Class + * + * Dependent libraries: + * JPEGDEC: https://github.com/bitbank2/JPEGDEC.git + ******************************************************************************/ +#ifndef _JPEGCLASS_H_ +#define _JPEGCLASS_H_ + +#include + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#else +#include +#endif + +class JpegClass +{ +public: + int jpegDrawCallback(JPEGDRAW *pDraw) + { + if (pDraw->y <= _y_bound) + { + if ((pDraw->y + pDraw->iHeight - 1) > _y_bound) + { + pDraw->iHeight = _y_bound - pDraw->y + 1; + } + if (pDraw->x <= _x_bound) + { + if ((pDraw->x + pDraw->iWidth - 1) > _x_bound) + { + int16_t w = pDraw->iWidth; + int16_t h = pDraw->iHeight; + pDraw->iWidth = _x_bound - pDraw->x + 1; + pDraw->iHeight = 1; + while (h--) + { + _jpegDrawCallback(pDraw); + pDraw->y++; + pDraw->pPixels += w; + } + + return 1; + } + else + { + return _jpegDrawCallback(pDraw); + } + } + else + { + return 1; + } + } + else + { + return 0; + } + } + + void draw( + FS *fs, char *filename, JPEG_DRAW_CALLBACK *jpegDrawCallback, bool useBigEndian, + int x, int y, int widthLimit, int heightLimit) + { + _jpegDrawCallback = jpegDrawCallback; + _x = x; + _y = y; + _x_bound = _x + widthLimit - 1; + _y_bound = _y + heightLimit - 1; + +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File f = fs->open(filename, "r"); +#elif defined(ESP32) + File f = fs->open(filename, "r"); +#elif defined(ESP8266) + File f = fs->open(filename, "r"); +#else + File f = fs->open(filename, FILE_READ); +#endif + + _jpeg.open(f, jpegDrawCallback); + + // scale to fit height + int _scale; + int iMaxMCUs; + float ratio = (float)_jpeg.getHeight() / heightLimit; + if (ratio <= 1) + { + _scale = 0; + iMaxMCUs = widthLimit / 16; + } + else if (ratio <= 2) + { + _scale = JPEG_SCALE_HALF; + iMaxMCUs = widthLimit / 8; + } + else if (ratio <= 4) + { + _scale = JPEG_SCALE_QUARTER; + iMaxMCUs = widthLimit / 4; + } + else + { + _scale = JPEG_SCALE_EIGHTH; + iMaxMCUs = widthLimit / 2; + } + _jpeg.setMaxOutputSize(iMaxMCUs); + if (useBigEndian) + { + _jpeg.setPixelType(RGB565_BIG_ENDIAN); + } + _jpeg.decode(x, y, _scale); + _jpeg.close(); + } + +private: + JPEGDEC _jpeg; + JPEG_DRAW_CALLBACK *_jpegDrawCallback; + int _x, _y, _x_bound, _y_bound; +}; + +#endif // _JPEGCLASS_H_ \ No newline at end of file diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/Data/earth.mjpeg b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/Data/earth.mjpeg new file mode 100644 index 0000000..2969b78 Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/Data/earth.mjpeg differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/ImgViewerMjpeg.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/ImgViewerMjpeg.ino new file mode 100644 index 0000000..015a31b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/ImgViewerMjpeg.ino @@ -0,0 +1,355 @@ +/******************************************************************************* + * Motion JPEG Image Viewer + * This is a simple Motion JPEG image viewer example + * Image Source: https://www.pexels.com/video/earth-rotating-video-856356/ + * cropped: x: 598 y: 178 width: 720 height: 720 resized: 240x240 + * ffmpeg -i "Pexels Videos 3931.mp4" -ss 0 -t 20.4s -vf "reverse,setpts=0.5*PTS,fps=10,vflip,hflip,rotate=90,crop=720:720:178:598,scale=240:240:flags=lanczos" -pix_fmt yuv420p -q:v 9 earth.mjpeg + * + * Dependent libraries: + * JPEGDEC: https://github.com/bitbank2/JPEGDEC.git + * + * Setup steps: + * 1. Change your LCD parameters in Arduino_GFX setting + * 2. Upload Motion JPEG file + * SPIFFS (ESP32): + * upload SPIFFS data with ESP32 Sketch Data Upload: + * ESP32: https://github.com/me-no-dev/arduino-esp32fs-plugin + * LittleFS (ESP8266): + * upload LittleFS data with ESP8266 LittleFS Data Upload: + * ESP8266: https://github.com/earlephilhower/arduino-esp8266littlefs-plugin + * SD: + * Most Arduino system built-in support SD file system. + * Wio Terminal require extra dependant Libraries: + * - Seeed_Arduino_FS: https://github.com/Seeed-Studio/Seeed_Arduino_FS.git + * - Seeed_Arduino_SFUD: https://github.com/Seeed-Studio/Seeed_Arduino_SFUD.git + ******************************************************************************/ +#define MJPEG_FILENAME "/earth.mjpeg" +#define MJPEG_BUFFER_SIZE (240 * 240 * 2 / 10) // memory for a single JPEG frame + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST -1 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP8266) +#include +#include +#else +#include +#endif + +#include "MjpegClass.h" +static MjpegClass mjpeg; + +/* variables */ +static int total_frames = 0; +static unsigned long total_read_video = 0; +static unsigned long total_decode_video = 0; +static unsigned long total_show_video = 0; +static unsigned long start_ms, curr_ms; + +// pixel drawing callback +static int jpegDrawCallback(JPEGDRAW *pDraw) +{ + // Serial.printf("Draw pos = %d,%d. size = %d x %d\n", pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); + unsigned long start = millis(); + gfx->draw16bitBeRGBBitmap(pDraw->x, pDraw->y, pDraw->pPixels, pDraw->iWidth, pDraw->iHeight); + total_show_video += millis() - start; + return 1; +} + +void setup() +{ + Serial.begin(115200); + + // Init Display + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + // Init SPIFLASH + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) +#elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) +#elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) +#else + if (!SD.begin()) +#endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File mjpegFile = SD.open(MJPEG_FILENAME, "r"); +#elif defined(ESP32) + File mjpegFile = SPIFFS.open(MJPEG_FILENAME, "r"); + // File mjpegFile = SD.open(MJPEG_FILENAME, "r"); +#elif defined(ESP8266) + File mjpegFile = LittleFS.open(MJPEG_FILENAME, "r"); + // File mjpegFile = SD.open(MJPEG_FILENAME, "r"); +#else + File mjpegFile = SD.open(MJPEG_FILENAME, FILE_READ); +#endif + + if (!mjpegFile || mjpegFile.isDirectory()) + { + Serial.println(F("ERROR: Failed to open " MJPEG_FILENAME " file for reading")); + gfx->println(F("ERROR: Failed to open " MJPEG_FILENAME " file for reading")); + } + else + { + uint8_t *mjpeg_buf = (uint8_t *)malloc(MJPEG_BUFFER_SIZE); + if (!mjpeg_buf) + { + Serial.println(F("mjpeg_buf malloc failed!")); + } + else + { + Serial.println(F("MJPEG start")); + + start_ms = millis(); + curr_ms = millis(); + mjpeg.setup( + &mjpegFile, mjpeg_buf, jpegDrawCallback, true /* useBigEndian */, + 0 /* x */, 0 /* y */, gfx->width() /* widthLimit */, gfx->height() /* heightLimit */); + + while (mjpegFile.available()) + { + // Read video + mjpeg.readMjpegBuf(); + total_read_video += millis() - curr_ms; + curr_ms = millis(); + + // Play video + mjpeg.drawJpg(); + total_decode_video += millis() - curr_ms; + + curr_ms = millis(); + total_frames++; + } + int time_used = millis() - start_ms; + Serial.println(F("MJPEG end")); + mjpegFile.close(); + float fps = 1000.0 * total_frames / time_used; + total_decode_video -= total_show_video; + Serial.printf("Total frames: %d\n", total_frames); + Serial.printf("Time used: %d ms\n", time_used); + Serial.printf("Average FPS: %0.1f\n", fps); + Serial.printf("Read MJPEG: %lu ms (%0.1f %%)\n", total_read_video, 100.0 * total_read_video / time_used); + Serial.printf("Decode video: %lu ms (%0.1f %%)\n", total_decode_video, 100.0 * total_decode_video / time_used); + Serial.printf("Show video: %lu ms (%0.1f %%)\n", total_show_video, 100.0 * total_show_video / time_used); + } + } + } +} + +void loop() +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/MjpegClass.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/MjpegClass.h new file mode 100644 index 0000000..daec6c6 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerMjpeg/MjpegClass.h @@ -0,0 +1,206 @@ +/******************************************************************************* + * JPEGDEC Wrapper Class + * + * Dependent libraries: + * JPEGDEC: https://github.com/bitbank2/JPEGDEC.git + ******************************************************************************/ +#ifndef _MJPEGCLASS_H_ +#define _MJPEGCLASS_H_ + +#define READ_BUFFER_SIZE 1024 +#define MAXOUTPUTSIZE 16 + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#elif defined(ESP32) || defined(ESP8266) +#include +#else +#include +#endif + +#include + +class MjpegClass +{ +public: + bool setup( + Stream *input, uint8_t *mjpeg_buf, JPEG_DRAW_CALLBACK *pfnDraw, bool useBigEndian, + int x, int y, int widthLimit, int heightLimit) + { + _input = input; + _mjpeg_buf = mjpeg_buf; + _pfnDraw = pfnDraw; + _useBigEndian = useBigEndian; + _x = x; + _y = y; + _widthLimit = widthLimit; + _heightLimit = heightLimit; + _inputindex = 0; + + _read_buf = (uint8_t *)malloc(READ_BUFFER_SIZE); + + return true; + } + + bool readMjpegBuf() + { + if (_inputindex == 0) + { + _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE); + _inputindex += _buf_read; + } + _mjpeg_buf_offset = 0; + int i = 0; + bool found_FFD8 = false; + while ((_buf_read > 0) && (!found_FFD8)) + { + i = 0; + while ((i < _buf_read) && (!found_FFD8)) + { + if ((_read_buf[i] == 0xFF) && (_read_buf[i + 1] == 0xD8)) // JPEG header + { + // Serial.printf("Found FFD8 at: %d.\n", i); + found_FFD8 = true; + } + ++i; + } + if (found_FFD8) + { + --i; + } + else + { + _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE); + } + } + uint8_t *_p = _read_buf + i; + _buf_read -= i; + bool found_FFD9 = false; + if (_buf_read > 0) + { + i = 3; + while ((_buf_read > 0) && (!found_FFD9)) + { + if ((_mjpeg_buf_offset > 0) && (_mjpeg_buf[_mjpeg_buf_offset - 1] == 0xFF) && (_p[0] == 0xD9)) // JPEG trailer + { + // Serial.printf("Found FFD9 at: %d.\n", i); + found_FFD9 = true; + } + else + { + while ((i < _buf_read) && (!found_FFD9)) + { + if ((_p[i] == 0xFF) && (_p[i + 1] == 0xD9)) // JPEG trailer + { + found_FFD9 = true; + ++i; + } + ++i; + } + } + + // Serial.printf("i: %d\n", i); + memcpy(_mjpeg_buf + _mjpeg_buf_offset, _p, i); + _mjpeg_buf_offset += i; + size_t o = _buf_read - i; + if (o > 0) + { + // Serial.printf("o: %d\n", o); + memcpy(_read_buf, _p + i, o); + _buf_read = _input->readBytes(_read_buf + o, READ_BUFFER_SIZE - o); + _p = _read_buf; + _inputindex += _buf_read; + _buf_read += o; + // Serial.printf("_buf_read: %d\n", _buf_read); + } + else + { + _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE); + _p = _read_buf; + _inputindex += _buf_read; + } + i = 0; + } + if (found_FFD9) + { + return true; + } + } + + return false; + } + + bool drawJpg() + { + _remain = _mjpeg_buf_offset; + _jpeg.openRAM(_mjpeg_buf, _remain, _pfnDraw); + if (_scale == -1) + { + // scale to fit height + int iMaxMCUs; + int w = _jpeg.getWidth(); + int h = _jpeg.getHeight(); + float ratio = (float)h / _heightLimit; + if (ratio <= 1) + { + _scale = 0; + iMaxMCUs = _widthLimit / 16; + } + else if (ratio <= 2) + { + _scale = JPEG_SCALE_HALF; + iMaxMCUs = _widthLimit / 8; + w /= 2; + h /= 2; + } + else if (ratio <= 4) + { + _scale = JPEG_SCALE_QUARTER; + iMaxMCUs = _widthLimit / 4; + w /= 4; + h /= 4; + } + else + { + _scale = JPEG_SCALE_EIGHTH; + iMaxMCUs = _widthLimit / 2; + w /= 8; + h /= 8; + } + _jpeg.setMaxOutputSize(iMaxMCUs); + _x = (w > _widthLimit) ? 0 : ((_widthLimit - w) / 2); + _y = (_heightLimit - h) / 2; + } + if (_useBigEndian) + { + _jpeg.setPixelType(RGB565_BIG_ENDIAN); + } + _jpeg.decode(_x, _y, _scale); + _jpeg.close(); + + return true; + } + +private: + Stream *_input; + uint8_t *_mjpeg_buf; + JPEG_DRAW_CALLBACK *_pfnDraw; + bool _useBigEndian; + int _x; + int _y; + int _widthLimit; + int _heightLimit; + + uint8_t *_read_buf; + int32_t _mjpeg_buf_offset = 0; + + JPEGDEC _jpeg; + int _scale = -1; + + int32_t _inputindex = 0; + int32_t _buf_read; + int32_t _remain = 0; +}; + +#endif // _MJPEGCLASS_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/ImgViewerPng.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/ImgViewerPng.ino new file mode 100644 index 0000000..3fda5a4 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/ImgViewerPng.ino @@ -0,0 +1,344 @@ +/******************************************************************************* + * PNG Image Viewer + * This is a simple PNG image viewer example + * Image Source: https://github.com/logos + * + * Dependent libraries: + * Pngle: https://github.com/kikuchan/pngle.git + * + * Setup steps: + * 1. Change your LCD parameters in Arduino_GFX setting + * 2. Upload PNG file + * SPIFFS (ESP32): + * upload SPIFFS data with ESP32 Sketch Data Upload: + * ESP32: https://github.com/me-no-dev/arduino-esp32fs-plugin + * LittleFS (ESP8266): + * upload LittleFS data with ESP8266 LittleFS Data Upload: + * ESP8266: https://github.com/earlephilhower/arduino-esp8266littlefs-plugin + * SD: + * Most Arduino system built-in support SD file system. + * Wio Terminal require extra dependant Libraries: + * - Seeed_Arduino_FS: https://github.com/Seeed-Studio/Seeed_Arduino_FS.git + * - Seeed_Arduino_SFUD: https://github.com/Seeed-Studio/Seeed_Arduino_SFUD.git + ******************************************************************************/ +#define PNG_FILENAME "/octocat.png" + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP8266) +#include +#include +#else +#include +#endif + +#include +int16_t xOffset = 0; +int16_t yOffset = 0; + +// Pngle init callback +void pngleInitCallback(pngle_t *pngle, uint32_t w, uint32_t h) +{ + int16_t gfxW = gfx->width(); + int16_t gfxH = gfx->height(); + xOffset = (w > gfxW) ? 0 : ((gfxW - w) / 2); + yOffset = (h > gfxH) ? 0 : ((gfxH - h) / 2); +} + +// Pngle draw callback +void pngleDrawCallback(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]) +{ + if (rgba[3]) // not transparent + { + gfx->fillRect(x + xOffset, y + yOffset, w, h, gfx->color565(rgba[0], rgba[1], rgba[2])); + } +} + +void setup() +{ + Serial.begin(115200); + + // Init Display + gfx->begin(); + gfx->fillScreen(BLACK); + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) +#elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) +#elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) +#else + if (!SD.begin()) +#endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { + unsigned long start = millis(); + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File pngFile = SD.open(PNG_FILENAME, "r"); +#elif defined(ESP32) + File pngFile = SPIFFS.open(PNG_FILENAME, "r"); + // File pngFile = SD.open(PNG_FILENAME, "r"); +#elif defined(ESP8266) + File pngFile = LittleFS.open(PNG_FILENAME, "r"); + // File pngFile = SD.open(PNG_FILENAME, "r"); +#else + File pngFile = SD.open(PNG_FILENAME, FILE_READ); +#endif + + if (!pngFile || pngFile.isDirectory()) + { + Serial.println(F("ERROR: Failed to open " PNG_FILENAME " file for reading")); + gfx->println(F("ERROR: Failed to open " PNG_FILENAME " file for reading")); + } + else + { + pngle_t *pngle = pngle_new(); + pngle_set_init_callback(pngle, pngleInitCallback); + pngle_set_draw_callback(pngle, pngleDrawCallback); + char buf[16]; // buffer minimum size is 16 but it can be much larger, e.g. 2048 + int remain = 0; + int len; + gfx->fillScreen(PINK); // transprant background color + while ((len = pngFile.readBytes(buf + remain, sizeof(buf) - remain)) > 0) + { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) + { + Serial.printf("ERROR: %s\n", pngle_error(pngle)); + break; + } + + remain = remain + len - fed; + if (remain > 0) + { + memmove(buf, buf + fed, remain); + } + } + + pngle_destroy(pngle); + pngFile.close(); + + Serial.printf("Time used: %lu\n", millis() - start); + } + } +} + +void loop() +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/data/octocat.png b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/data/octocat.png new file mode 100644 index 0000000..2f044bb Binary files /dev/null and b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/ImgViewerPng/data/octocat.png differ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/MultipleDeviceTest/MultipleDeviceTest.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/MultipleDeviceTest/MultipleDeviceTest.ino new file mode 100644 index 0000000..3472861 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/MultipleDeviceTest/MultipleDeviceTest.ino @@ -0,0 +1,676 @@ +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* all display share same SPI Data Bus with individual CS and RST pins */ +#define TFT_DC 33 +#define TFT_SCK 18 +#define TFT_MOSI 23 +#define TFT_MISO -1 + +Arduino_DataBus *bus1 = new Arduino_ESP32SPI(TFT_DC, 5 /* CS */, TFT_SCK, TFT_MOSI, TFT_MISO, VSPI /* spi_num */); +Arduino_ST7735 *gfx1 = new Arduino_ST7735(bus1, 26 /* RST */, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +Arduino_DataBus *bus2 = new Arduino_ESP32SPI(TFT_DC, 10 /* CS */, TFT_SCK, TFT_MOSI, TFT_MISO, VSPI /* spi_num */); +Arduino_ST7789 *gfx2 = new Arduino_ST7789(bus2, 13 /* RST */, 2 /* rotation */, true /* IPS */); + +Arduino_DataBus *bus3 = new Arduino_ESP32SPI(TFT_DC, 4 /* CS */, TFT_SCK, TFT_MOSI, TFT_MISO, VSPI /* spi_num */); +Arduino_ILI9341 *gfx3 = new Arduino_ILI9341(bus3, 12 /* RST */, 2 /* rotation */); + +Arduino_DataBus *bus4 = new Arduino_ESP32SPI(TFT_DC, 32 /* CS */, TFT_SCK, TFT_MOSI, TFT_MISO, VSPI /* spi_num */); +Arduino_ST7796 *gfx4 = new Arduino_ST7796(bus4, 25 /* RST */); + +Arduino_GFX *gfx = gfx1; + +uint32_t w, h, n, n1, cx, cy, cx1, cy1, cn, cn1; +uint8_t tsa, tsb, tsc, ds; + +void setup() +{ + Serial.begin(115200); + while (!Serial) + { + // wait and do nothing + } + + Serial.println("Arduino_GFX library Test!"); + + gfx1->begin(); + gfx1->fillScreen(RED); + delay(200); + + gfx2->begin(); + gfx2->fillScreen(YELLOW); + delay(200); + + gfx3->begin(); + gfx3->fillScreen(GREEN); + delay(200); + + gfx4->begin(); + gfx4->fillScreen(BLUE); + delay(200); +} + +void loop() +{ + test(); + + if (gfx == gfx1) + { + gfx = gfx2; + } + else if (gfx == gfx2) + { + gfx = gfx3; + } + else if (gfx == gfx3) + { + gfx = gfx4; + } + else // gfx == gfx4 + { + gfx = gfx1; + } + delay(200); +} + +void test() +{ + w = gfx->width(); + h = gfx->height(); + n = min(w, h); + n1 = min(w, h) - 1; + cx = w / 2; + cy = h / 2; + cx1 = cx - 1; + cy1 = cy - 1; + cn = min(cx1, cy1); + cn1 = min(cx1, cy1) - 1; + tsa = ((w <= 160) || (h <= 160)) ? 1 : (((w <= 240) || (h <= 240)) ? 2 : 3); // text size A + tsb = ((w <= 240) || (h <= 220)) ? 1 : 2; // text size B + tsc = ((w <= 220) || (h <= 220)) ? 1 : 2; // text size C + ds = (w <= 160) ? 9 : 12; // digit size + + Serial.println(F("Benchmark Time (microseconds)")); + + uint32_t usecFillScreen = testFillScreen(); + gfx->flush(); + Serial.print(F("Screen fill ")); + Serial.println(usecFillScreen); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecText = testText(); + gfx->flush(); + Serial.print(F("Text ")); + Serial.println(usecText); + delay(3000); // delay for verifing the text + + gfx->fillScreen(BLACK); + uint32_t usecPixels = testPixels(); + gfx->flush(); + Serial.print(F("Pixels ")); + Serial.println(usecPixels); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecLines = testLines(BLUE); + gfx->flush(); + Serial.print(F("Lines ")); + Serial.println(usecLines); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFastLines = testFastLines(RED, BLUE); + gfx->flush(); + Serial.print(F("Horiz/Vert Lines ")); + Serial.println(usecFastLines); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFilledRects = testFilledRects(YELLOW, MAGENTA); + gfx->flush(); + Serial.print(F("Rectangles (filled) ")); + Serial.println(usecFilledRects); + delay(100); + + uint32_t usecRects = testRects(GREEN); + gfx->flush(); + Serial.print(F("Rectangles (outline) ")); + Serial.println(usecRects); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFilledCircles = testFilledCircles(10, MAGENTA); + gfx->flush(); + Serial.print(F("Circles (filled) ")); + Serial.println(usecFilledCircles); + delay(100); + + uint32_t usecCircles = testCircles(10, WHITE); + gfx->flush(); + Serial.print(F("Circles (outline) ")); + Serial.println(usecCircles); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFilledArcs = testFillArcs(); + gfx->flush(); + Serial.print(F("Fill Arcs ")); + Serial.println(usecFilledArcs); + delay(100); + + uint32_t usecArcs = testArcs(); + gfx->flush(); + Serial.print(F("Draw Arcs ")); + Serial.println(usecArcs); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFilledTrangles = testFilledTriangles(); + gfx->flush(); + Serial.print(F("Triangles (filled) ")); + Serial.println(usecFilledTrangles); + delay(100); + + uint32_t usecTriangles = testTriangles(); + gfx->flush(); + Serial.print(F("Triangles (outline) ")); + Serial.println(usecTriangles); + delay(100); + + gfx->fillScreen(BLACK); + uint32_t usecFilledRoundRects = testFilledRoundRects(); + gfx->flush(); + Serial.print(F("Rounded rects (filled) ")); + Serial.println(usecFilledRoundRects); + delay(100); + + uint32_t usecRoundRects = testRoundRects(); + gfx->flush(); + Serial.print(F("Rounded rects (outline) ")); + Serial.println(usecRoundRects); + delay(100); + + Serial.println(F("Done!")); + + uint16_t c = 4; + int8_t d = 1; + for (int32_t i = 0; i < h; i++) + { + gfx->drawFastHLine(0, i, w, c); + c += d; + if (c <= 4 || c >= 11) + d = -d; + } + + gfx->setCursor(0, 0); + gfx->setTextColor(MAGENTA); + gfx->setTextSize(tsa); + gfx->println(F("Arduino GFX")); + gfx->setTextSize(1); + gfx->println(F("")); + + if (h > w) + { + gfx->setTextColor(GREEN); + gfx->setTextSize(tsb); + gfx->print(F("Benchmark ")); + gfx->setTextSize(tsc); + if (ds == 12) + { + gfx->print(F(" ")); + } + gfx->println(F("micro-secs")); + gfx->setTextSize(1); + gfx->println(F("")); + gfx->setTextColor(YELLOW); + } + + printnice(F("Screen fill "), usecFillScreen); + printnice(F("Text "), usecText); + printnice(F("Pixels "), usecPixels); + printnice(F("Lines "), usecLines); + printnice(F("H/V Lines "), usecFastLines); + printnice(F("Rectangles F"), usecFilledRects); + printnice(F("Rectangles "), usecRects); + printnice(F("Circles F "), usecFilledCircles); + printnice(F("Circles "), usecCircles); + printnice(F("Arcs F "), usecFilledArcs); + printnice(F("Arcs "), usecArcs); + printnice(F("Triangles F "), usecFilledTrangles); + printnice(F("Triangles "), usecTriangles); + printnice(F("RoundRects F"), usecFilledRoundRects); + printnice(F("RoundRects "), usecRoundRects); + + if (h > w) + { + gfx->setTextSize(1); + gfx->println(F("")); + gfx->setTextColor(GREEN); + gfx->setTextSize(tsc); + gfx->print(F("Benchmark Complete!")); + } + + gfx->flush(); +} + +void printnice(const __FlashStringHelper *item, long unsigned int v) +{ + gfx->setTextColor(CYAN); + gfx->setTextSize(tsb); + gfx->print(item); + gfx->setTextColor(YELLOW); + gfx->setTextSize(tsc); + + char str[32] = {0}; + sprintf(str, "%lu", v); + for (char *p = (str + strlen(str)) - 3; p > str; p -= 3) + { + memmove(p + 1, p, strlen(p) + 1); + *p = ','; + } + while (strlen(str) < ds) + { + memmove(str + 1, str, strlen(str) + 1); + *str = ' '; + } + gfx->println(str); +} + +static inline uint32_t micros_start() __attribute__((always_inline)); +static inline uint32_t micros_start() +{ + uint8_t oms = millis(); + while ((uint8_t)millis() == oms) + ; + return micros(); +} + +uint32_t testFillScreen() +{ + uint32_t start = micros_start(); + // Shortened this tedious test! + gfx->fillScreen(WHITE); + gfx->fillScreen(RED); + gfx->fillScreen(GREEN); + gfx->fillScreen(BLUE); + gfx->fillScreen(BLACK); + + return (micros() - start) / 5; +} + +uint32_t testText() +{ + uint32_t start = micros_start(); + gfx->setCursor(0, 0); + gfx->setTextSize(1); + gfx->setTextColor(WHITE, BLACK); + gfx->println(F("Hello World!")); + gfx->setTextSize(2); + gfx->setTextColor(gfx->color565(0xff, 0x00, 0x00)); + gfx->print(F("RED ")); + gfx->setTextColor(gfx->color565(0x00, 0xff, 0x00)); + gfx->print(F("GREEN ")); + gfx->setTextColor(gfx->color565(0x00, 0x00, 0xff)); + gfx->println(F("BLUE")); + gfx->setTextSize(tsa); + gfx->setTextSize(3); + gfx->setTextColor(YELLOW); + gfx->println(1234.56); + gfx->setTextColor(WHITE); + gfx->println((w > 128) ? 0xDEADBEEF : 0xDEADBEE, HEX); + gfx->setTextColor(CYAN, WHITE); + gfx->println(F("Groop,")); + gfx->setTextSize(tsc); + gfx->setTextColor(MAGENTA, WHITE); + gfx->println(F("I implore thee,")); + gfx->setTextSize(1); + gfx->setTextColor(NAVY, WHITE); + gfx->println(F("my foonting turlingdromes.")); + gfx->setTextColor(DARKGREEN, WHITE); + gfx->println(F("And hooptiously drangle me")); + gfx->setTextColor(DARKCYAN, WHITE); + gfx->println(F("with crinkly bindlewurdles,")); + gfx->setTextColor(MAROON, WHITE); + gfx->println(F("Or I will rend thee")); + gfx->setTextColor(PURPLE, WHITE); + gfx->println(F("in the gobberwartsb")); + gfx->setTextColor(OLIVE, WHITE); + gfx->println(F("with my blurglecruncheon,")); + gfx->setTextColor(DARKGREY, WHITE); + gfx->println(F("see if I don't!")); + gfx->setTextColor(RED); + gfx->setTextSize(2); + gfx->println(F("Size 2")); + gfx->setTextColor(ORANGE); + gfx->setTextSize(3); + gfx->println(F("Size 3")); + gfx->setTextColor(YELLOW); + gfx->setTextSize(4); + gfx->println(F("Size 4")); + gfx->setTextColor(GREENYELLOW); + gfx->setTextSize(5); + gfx->println(F("Size 5")); + gfx->setTextColor(GREEN); + gfx->setTextSize(6); + gfx->println(F("Size 6")); + gfx->setTextColor(BLUE); + gfx->setTextSize(7); + gfx->println(F("Size 7")); + gfx->setTextColor(PURPLE); + gfx->setTextSize(8); + gfx->println(F("Size 8")); + gfx->setTextColor(PINK); + gfx->setTextSize(9); + gfx->println(F("Size 9")); + uint32_t t = micros() - start; + return t; +} + +uint32_t testPixels() +{ + uint32_t start = micros_start(); + + for (uint16_t y = 0; y < h; y++) + { + for (uint16_t x = 0; x < w; x++) + { + gfx->drawPixel(x, y, gfx->color565(x << 3, y << 3, x * y)); + } + yield(); // avoid long run triggered ESP8266 WDT restart + } + + return micros() - start; +} + +uint32_t testLines(uint16_t color) +{ + uint32_t start, t; + int32_t x1, y1, x2, y2; + + x1 = y1 = 0; + y2 = h - 1; + + start = micros_start(); + + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + x2 = w - 1; + + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + t = micros() - start; // fillScreen doesn't count against timing + + x1 = w - 1; + y1 = 0; + y2 = h - 1; + + start = micros_start(); + + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + x2 = 0; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + t += micros() - start; + + x1 = 0; + y1 = h - 1; + y2 = 0; + + start = micros_start(); + + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + x2 = w - 1; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + t += micros() - start; + + x1 = w - 1; + y1 = h - 1; + y2 = 0; + + start = micros_start(); + + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + x2 = 0; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, color); + } + + t += micros() - start; + + return t; +} + +uint32_t testFastLines(uint16_t color1, uint16_t color2) +{ + uint32_t start; + int32_t x, y; + + start = micros_start(); + + for (y = 0; y < h; y += 5) + gfx->drawFastHLine(0, y, w, color1); + for (x = 0; x < w; x += 5) + gfx->drawFastVLine(x, 0, h, color2); + + return micros() - start; +} + +uint32_t testFilledRects(uint16_t color1, uint16_t color2) +{ + uint32_t start, t = 0; + int32_t i, i2; + + for (i = n; i > 0; i -= 6) + { + i2 = i / 2; + + start = micros_start(); + + gfx->fillRect(cx1 - i2, cy1 - i2, i, i, color1); + + t += micros() - start; + + // Outlines are not included in timing results + gfx->drawRect(cx - i2, cy - i2, i, i, color2); + } + + return t; +} + +uint32_t testRects(uint16_t color) +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + for (i = 2; i < n; i += 6) + { + i2 = i / 2; + gfx->drawRect(cx - i2, cy - i2, i, i, color); + } + + return micros() - start; +} + +uint32_t testFilledCircles(uint8_t radius, uint16_t color) +{ + uint32_t start; + int32_t x, y, r2 = radius * 2; + + start = micros_start(); + + for (x = radius; x < w; x += r2) + { + for (y = radius; y < h; y += r2) + { + gfx->fillCircle(x, y, radius, color); + } + } + + return micros() - start; +} + +uint32_t testCircles(uint8_t radius, uint16_t color) +{ + uint32_t start; + int32_t x, y, r2 = radius * 2; + int32_t w1 = w + radius; + int32_t h1 = h + radius; + + // Screen is not cleared for this one -- this is + // intentional and does not affect the reported time. + start = micros_start(); + + for (x = 0; x < w1; x += r2) + { + for (y = 0; y < h1; y += r2) + { + gfx->drawCircle(x, y, radius, color); + } + } + + return micros() - start; +} + +uint32_t testFillArcs() +{ + int16_t i, r = 360 / cn; + uint32_t start = micros_start(); + + for (i = 6; i < cn; i += 6) + { + gfx->fillArc(cx1, cy1, i, i - 3, 0, i * r, RED); + } + + return (micros() - start) / 5; +} + +uint32_t testArcs() +{ + int16_t i, r = 360 / cn; + uint32_t start = micros_start(); + + for (i = 6; i < cn; i += 6) + { + gfx->drawArc(cx1, cy1, i, i - 3, 0, i * r, WHITE); + } + + return (micros() - start) / 5; +} + +uint32_t testFilledTriangles() +{ + uint32_t start, t = 0; + int32_t i; + + start = micros_start(); + + for (i = cn1; i > 10; i -= 5) + { + start = micros_start(); + gfx->fillTriangle(cx1, cy1 - i, cx1 - i, cy1 + i, cx1 + i, cy1 + i, + gfx->color565(0, i, i)); + t += micros() - start; + gfx->drawTriangle(cx1, cy1 - i, cx1 - i, cy1 + i, cx1 + i, cy1 + i, + gfx->color565(i, i, 0)); + } + + return t; +} + +uint32_t testTriangles() +{ + uint32_t start; + int32_t i; + + start = micros_start(); + + for (i = 0; i < cn; i += 5) + { + gfx->drawTriangle( + cx1, cy1 - i, // peak + cx1 - i, cy1 + i, // bottom left + cx1 + i, cy1 + i, // bottom right + gfx->color565(0, 0, i)); + } + + return micros() - start; +} + +uint32_t testFilledRoundRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + + for (i = n1; i > 20; i -= 6) + { + i2 = i / 2; + gfx->fillRoundRect(cx1 - i2, cy1 - i2, i, i, i / 8, gfx->color565(0, i, 0)); + } + + return micros() - start; +} + +uint32_t testRoundRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + + for (i = 0; i < n1; i += 6) + { + i2 = i / 2; + gfx->drawRoundRect(cx1 - i2, cy1 - i2, i, i, i / 8, gfx->color565(i, 0, 0)); + } + + return micros() - start; +} + +/*************************************************** + Original sketch text: + + This is an example sketch for the Adafruit 2.2" SPI display. + This library works with the Adafruit 2.2" TFT Breakout w/SD card + ----> http://www.adafruit.com/products/1480 + + Check out the links above for our tutorials and wiring diagrams + These displays use SPI to communicate, 4 or 5 pins are required to + interface (RST is optional) + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruit Industries. + MIT license, all text above must be included in any redistribution + ****************************************************/ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/PDQgraphicstest/PDQgraphicstest.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/PDQgraphicstest/PDQgraphicstest.ino new file mode 100644 index 0000000..07d0dd4 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/PDQgraphicstest/PDQgraphicstest.ino @@ -0,0 +1,829 @@ +/* + Adapted from the Adafruit and Xark's PDQ graphicstest sketch. + + See end of file for original header text and MIT license info. +*/ + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters +// Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// #define CANVAS +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 +// Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +int32_t w, h, n, n1, cx, cy, cx1, cy1, cn, cn1; +uint8_t tsa, tsb, tsc, ds; + +void setup() +{ + Serial.begin(115200); + while (!Serial) + { + // wait and do nothing + } + + Serial.println("Arduino_GFX library Test!"); + + gfx->begin(); + // gfx->begin(80000000); /* specify data bus speed */ + + w = gfx->width(); + h = gfx->height(); + n = min(w, h); + n1 = n - 1; + cx = w / 2; + cy = h / 2; + cx1 = cx - 1; + cy1 = cy - 1; + cn = min(cx1, cy1); + cn1 = cn - 1; + tsa = ((w <= 160) || (h <= 160)) ? 1 : (((w <= 240) || (h <= 240)) ? 2 : 3); // text size A + tsb = ((w <= 240) || (h <= 220)) ? 1 : 2; // text size B + tsc = ((w <= 220) || (h <= 220)) ? 1 : 2; // text size C + ds = (w <= 160) ? 9 : 12; // digit size + +#ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); +#endif +} + +static inline uint32_t micros_start() __attribute__((always_inline)); +static inline uint32_t micros_start() +{ + uint8_t oms = millis(); + while ((uint8_t)millis() == oms) + ; + return micros(); +} + +void loop(void) +{ + Serial.println(F("Benchmark\tmicro-secs")); + + int32_t usecFillScreen = testFillScreen(); + serialOut(F("Screen fill\t"), usecFillScreen, 100, true); + + int32_t usecText = testText(); + serialOut(F("Text\t"), usecText, 3000, true); + + int32_t usecPixels = testPixels(); + serialOut(F("Pixels\t"), usecPixels, 100, true); + + int32_t usecLines = testLines(); + serialOut(F("Lines\t"), usecLines, 100, true); + + int32_t usecFastLines = testFastLines(); + serialOut(F("Horiz/Vert Lines\t"), usecFastLines, 100, true); + + int32_t usecFilledRects = testFilledRects(); + serialOut(F("Rectangles (filled)\t"), usecFilledRects, 100, false); + + int32_t usecRects = testRects(); + serialOut(F("Rectangles (outline)\t"), usecRects, 100, true); + + int32_t usecFilledCircles = testFilledCircles(10); + serialOut(F("Circles (filled)\t"), usecFilledCircles, 100, false); + + int32_t usecCircles = testCircles(10); + serialOut(F("Circles (outline)\t"), usecCircles, 100, true); + + int32_t usecFilledArcs = testFillArcs(); + serialOut(F("Arcs (filled)\t"), usecFilledArcs, 100, false); + + int32_t usecArcs = testArcs(); + serialOut(F("Arcs (outline)\t"), usecArcs, 100, true); + + int32_t usecFilledTrangles = testFilledTriangles(); + serialOut(F("Triangles (filled)\t"), usecFilledTrangles, 100, false); + + int32_t usecTriangles = testTriangles(); + serialOut(F("Triangles (outline)\t"), usecTriangles, 100, true); + + int32_t usecFilledRoundRects = testFilledRoundRects(); + serialOut(F("Rounded rects (filled)\t"), usecFilledRoundRects, 100, false); + + int32_t usecRoundRects = testRoundRects(); + serialOut(F("Rounded rects (outline)\t"), usecRoundRects, 100, true); + +#ifdef CANVAS + uint32_t start = micros_start(); + gfx->flush(); + int32_t usecFlush = micros() - start; + serialOut(F("flush (Canvas only)\t"), usecFlush, 0, false); +#endif + + Serial.println(F("Done!")); + + uint16_t c = 4; + int8_t d = 1; + for (int32_t i = 0; i < h; i++) + { + gfx->drawFastHLine(0, i, w, c); + c += d; + if (c <= 4 || c >= 11) + { + d = -d; + } + } + + gfx->setCursor(0, 0); + + gfx->setTextSize(tsa); + gfx->setTextColor(MAGENTA); + gfx->println(F("Arduino GFX PDQ")); + + if (h > w) + { + gfx->setTextSize(tsb); + gfx->setTextColor(GREEN); + gfx->print(F("\nBenchmark ")); + gfx->setTextSize(tsc); + if (ds == 12) + { + gfx->print(F(" ")); + } + gfx->println(F("micro-secs")); + } + + gfx->setTextSize(1); + printnice(F("Screen fill "), usecFillScreen); + printnice(F("Text "), usecText); + printnice(F("Pixels "), usecPixels); + printnice(F("Lines "), usecLines); + printnice(F("H/V Lines "), usecFastLines); + printnice(F("Rectangles F"), usecFilledRects); + printnice(F("Rectangles "), usecRects); + printnice(F("Circles F "), usecFilledCircles); + printnice(F("Circles "), usecCircles); + printnice(F("Arcs F "), usecFilledArcs); + printnice(F("Arcs "), usecArcs); + printnice(F("Triangles F "), usecFilledTrangles); + printnice(F("Triangles "), usecTriangles); + printnice(F("RoundRects F"), usecFilledRoundRects); + printnice(F("RoundRects "), usecRoundRects); + + if ((h > w) || (h > 240)) + { + gfx->setTextSize(tsc); + gfx->setTextColor(GREEN); + gfx->print(F("\nBenchmark Complete!")); + } + +#ifdef CANVAS + gfx->flush(); +#endif + + delay(60 * 1000L); +} + +void serialOut(const __FlashStringHelper *item, int32_t v, uint32_t d, bool clear) +{ +#ifdef CANVAS + gfx->flush(); +#endif + Serial.print(item); + if (v < 0) + { + Serial.println(F("N/A")); + } + else + { + Serial.println(v); + } + delay(d); + if (clear) + { + gfx->fillScreen(BLACK); + } +} + +void printnice(const __FlashStringHelper *item, int32_t v) +{ + gfx->setTextSize(tsb); + gfx->setTextColor(CYAN); + gfx->print(item); + + gfx->setTextSize(tsc); + gfx->setTextColor(YELLOW); + if (v < 0) + { + gfx->println(F(" N / A")); + } + else + { + char str[32] = {0}; + sprintf(str, "%d", v); + for (char *p = (str + strlen(str)) - 3; p > str; p -= 3) + { + memmove(p + 1, p, strlen(p) + 1); + *p = ','; + } + while (strlen(str) < ds) + { + memmove(str + 1, str, strlen(str) + 1); + *str = ' '; + } + gfx->println(str); + } +} + +int32_t testFillScreen() +{ + uint32_t start = micros_start(); + // Shortened this tedious test! + gfx->fillScreen(WHITE); + gfx->fillScreen(RED); + gfx->fillScreen(GREEN); + gfx->fillScreen(BLUE); + gfx->fillScreen(BLACK); + + return micros() - start; +} + +int32_t testText() +{ + uint32_t start = micros_start(); + gfx->setCursor(0, 0); + + gfx->setTextSize(1); + gfx->setTextColor(WHITE, BLACK); + gfx->println(F("Hello World!")); + + gfx->setTextSize(2); + gfx->setTextColor(gfx->color565(0xff, 0x00, 0x00)); + gfx->print(F("RED ")); + gfx->setTextColor(gfx->color565(0x00, 0xff, 0x00)); + gfx->print(F("GREEN ")); + gfx->setTextColor(gfx->color565(0x00, 0x00, 0xff)); + gfx->println(F("BLUE")); + + gfx->setTextSize(tsa); + gfx->setTextColor(YELLOW); + gfx->println(1234.56); + + gfx->setTextColor(WHITE); + gfx->println((w > 128) ? 0xDEADBEEF : 0xDEADBEE, HEX); + + gfx->setTextColor(CYAN, WHITE); + gfx->println(F("Groop,")); + + gfx->setTextSize(tsc); + gfx->setTextColor(MAGENTA, WHITE); + gfx->println(F("I implore thee,")); + + gfx->setTextSize(1); + gfx->setTextColor(NAVY, WHITE); + gfx->println(F("my foonting turlingdromes.")); + + gfx->setTextColor(DARKGREEN, WHITE); + gfx->println(F("And hooptiously drangle me")); + + gfx->setTextColor(DARKCYAN, WHITE); + gfx->println(F("with crinkly bindlewurdles,")); + + gfx->setTextColor(MAROON, WHITE); + gfx->println(F("Or I will rend thee")); + + gfx->setTextColor(PURPLE, WHITE); + gfx->println(F("in the gobberwartsb")); + + gfx->setTextColor(OLIVE, WHITE); + gfx->println(F("with my blurglecruncheon,")); + + gfx->setTextColor(DARKGREY, WHITE); + gfx->println(F("see if I don't!")); + + gfx->setTextSize(2); + gfx->setTextColor(RED); + gfx->println(F("Size 2")); + + gfx->setTextSize(3); + gfx->setTextColor(ORANGE); + gfx->println(F("Size 3")); + + gfx->setTextSize(4); + gfx->setTextColor(YELLOW); + gfx->println(F("Size 4")); + + gfx->setTextSize(5); + gfx->setTextColor(GREENYELLOW); + gfx->println(F("Size 5")); + + gfx->setTextSize(6); + gfx->setTextColor(GREEN); + gfx->println(F("Size 6")); + + gfx->setTextSize(7); + gfx->setTextColor(BLUE); + gfx->println(F("Size 7")); + + gfx->setTextSize(8); + gfx->setTextColor(PURPLE); + gfx->println(F("Size 8")); + + gfx->setTextSize(9); + gfx->setTextColor(PINK); + gfx->println(F("Size 9")); + + return micros() - start; +} + +int32_t testPixels() +{ + uint32_t start = micros_start(); + + for (uint16_t y = 0; y < h; y++) + { + for (uint16_t x = 0; x < w; x++) + { + gfx->drawPixel(x, y, gfx->color565(x << 3, y << 3, x * y)); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + } + + return micros() - start; +} + +int32_t testLines() +{ + uint32_t start; + int32_t x1, y1, x2, y2; + + start = micros_start(); + + x1 = y1 = 0; + y2 = h - 1; + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x2 = w - 1; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x1 = w - 1; + y1 = 0; + y2 = h - 1; + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x2 = 0; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x1 = 0; + y1 = h - 1; + y2 = 0; + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x2 = w - 1; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x1 = w - 1; + y1 = h - 1; + y2 = 0; + for (x2 = 0; x2 < w; x2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + x2 = 0; + for (y2 = 0; y2 < h; y2 += 6) + { + gfx->drawLine(x1, y1, x2, y2, BLUE); + } +#ifdef ESP8266 + yield(); // avoid long run triggered ESP8266 WDT restart +#endif + + return micros() - start; +} + +int32_t testFastLines() +{ + uint32_t start; + int32_t x, y; + + start = micros_start(); + + for (y = 0; y < h; y += 5) + { + gfx->drawFastHLine(0, y, w, RED); + } + for (x = 0; x < w; x += 5) + { + gfx->drawFastVLine(x, 0, h, BLUE); + } + + return micros() - start; +} + +int32_t testFilledRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + + for (i = n; i > 0; i -= 6) + { + i2 = i / 2; + + gfx->fillRect(cx - i2, cy - i2, i, i, gfx->color565(i, i, 0)); + } + + return micros() - start; +} + +int32_t testRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + for (i = 2; i < n; i += 6) + { + i2 = i / 2; + gfx->drawRect(cx - i2, cy - i2, i, i, GREEN); + } + + return micros() - start; +} + +int32_t testFilledCircles(uint8_t radius) +{ + uint32_t start; + int32_t x, y, r2 = radius * 2; + + start = micros_start(); + + for (x = radius; x < w; x += r2) + { + for (y = radius; y < h; y += r2) + { + gfx->fillCircle(x, y, radius, MAGENTA); + } + } + + return micros() - start; +} + +int32_t testCircles(uint8_t radius) +{ + uint32_t start; + int32_t x, y, r2 = radius * 2; + int32_t w1 = w + radius; + int32_t h1 = h + radius; + + // Screen is not cleared for this one -- this is + // intentional and does not affect the reported time. + start = micros_start(); + + for (x = 0; x < w1; x += r2) + { + for (y = 0; y < h1; y += r2) + { + gfx->drawCircle(x, y, radius, WHITE); + } + } + + return micros() - start; +} + +int32_t testFillArcs() +{ + int16_t i, r = 360 / cn; + uint32_t start = micros_start(); + + for (i = 6; i < cn; i += 6) + { + gfx->fillArc(cx1, cy1, i, i - 3, 0, i * r, RED); + } + + return micros() - start; +} + +int32_t testArcs() +{ + int16_t i, r = 360 / cn; + uint32_t start = micros_start(); + + for (i = 6; i < cn; i += 6) + { + gfx->drawArc(cx1, cy1, i, i - 3, 0, i * r, WHITE); + } + + return micros() - start; +} + +int32_t testFilledTriangles() +{ + uint32_t start; + int32_t i; + + start = micros_start(); + + for (i = cn1; i > 10; i -= 5) + { + gfx->fillTriangle(cx1, cy1 - i, cx1 - i, cy1 + i, cx1 + i, cy1 + i, + gfx->color565(0, i, i)); + } + + return micros() - start; +} + +int32_t testTriangles() +{ + uint32_t start; + int32_t i; + + start = micros_start(); + + for (i = 0; i < cn; i += 5) + { + gfx->drawTriangle( + cx1, cy1 - i, // peak + cx1 - i, cy1 + i, // bottom left + cx1 + i, cy1 + i, // bottom right + gfx->color565(0, 0, i)); + } + + return micros() - start; +} + +int32_t testFilledRoundRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + + for (i = n1; i > 20; i -= 6) + { + i2 = i / 2; + gfx->fillRoundRect(cx - i2, cy - i2, i, i, i / 8, gfx->color565(0, i, 0)); + } + + return micros() - start; +} + +int32_t testRoundRects() +{ + uint32_t start; + int32_t i, i2; + + start = micros_start(); + + for (i = 20; i < n1; i += 6) + { + i2 = i / 2; + gfx->drawRoundRect(cx - i2, cy - i2, i, i, i / 8, gfx->color565(i, 0, 0)); + } + + return micros() - start; +} + +/*************************************************** + Original sketch text: + + This is an example sketch for the Adafruit 2.2" SPI display. + This library works with the Adafruit 2.2" TFT Breakout w/SD card + ----> http://www.adafruit.com/products/1480 + + Check out the links above for our tutorials and wiring diagrams + These displays use SPI to communicate, 4 or 5 pins are required to + interface (RST is optional) + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruit Industries. + MIT license, all text above must be included in any redistribution + ****************************************************/ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/WioWiFiAnalyzer/WioWiFiAnalyzer.ino b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/WioWiFiAnalyzer/WioWiFiAnalyzer.ino new file mode 100644 index 0000000..0714c8b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/examples/WioWiFiAnalyzer/WioWiFiAnalyzer.ino @@ -0,0 +1,302 @@ +/* + * Wio WiFi Analyzer + * Require Wio Terminal. + * + * Libraries: + * https://github.com/Seeed-Studio/Seeed_Arduino_FS/releases/tag/v2.0.2 + * https://github.com/Seeed-Studio/Seeed_Arduino_SFUD/releases/tag/v2.0.1 + * https://github.com/Seeed-Studio/Seeed_Arduino_mbedtls/archive/d1ca0175e24768120781bf4a43a1fb2c39fce85f.zip + * https://github.com/Seeed-Studio/Seeed_Arduino_rpcUnified/releases/tag/v2.1.1 + * https://github.com/Seeed-Studio/Seeed_Arduino_rpcWiFi/releases/tag/v1.0.2 + * + * Firmware: + * https://github.com/Seeed-Studio/seeed-ambd-firmware/releases/tag/v2.1.1 + */ + +#define SCAN_INTERVAL 1000 + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +#include "rpcWiFi.h" + +int16_t w, h, text_size, banner_height, graph24_baseline, graph50_baseline, graph_baseline, graph_height, channel24_width, channel50_width, channel_width, signal_width; + +// RSSI RANGE +#define RSSI_CEILING -40 +#define RSSI_FLOOR -100 + +// Channel legend mapping +uint16_t channel_legend[] = { + 1, 2, 3, 4, 5, 6, 7, // 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, // 8, 9, 10, 11, 12, 13, 14, + 32, 0, 0, 0, 40, 0, 0, // 32, 34, 36, 38, 40, 42, 44, + 0, 48, 0, 0, 0, 56, 0, // 46, 48, 50, 52, 54, 56, 58, + 0, 0, 64, 0, 0, 0, // 60, 62, 64, 68,N/A, 96, + 100, 0, 0, 0, 108, 0, 0, //100,102,104,106,108,110,112, + 0, 116, 0, 0, 0, 124, 0, //114,116,118,120,122,124,126, + 0, 0, 132, 0, 0, 0, 140, //128,N/A,132,134,136,138,140, + 0, 0, 0, 149, 0, 0, 0, //142,144,N/A,149,151,153,155, + 157, 0, 0, 0, 165, 0, 0, //157,159,161,163,165,167,169, + 0, 173}; //171,173 + +// Channel color mapping +uint16_t channel_color[] = { + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, WHITE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, MAGENTA, + RED, ORANGE}; + +uint8_t scan_count = 0; + +uint16_t channelIdx(int channel) +{ + if (channel <= 14) // 2.4 GHz, channel 1-14 + { + return channel - 1; + } + if (channel <= 64) // 5 GHz, channel 32 - 64 + { + return 14 + ((channel - 32) / 2); + } + if (channel == 68) + { + return 31; + } + if (channel == 96) + { + return 33; + } + if (channel <= 144) + { + return 34 + ((channel - 100) / 2); // channe; + } + return 58 + ((channel - 149) / 2); +} + +void setup() +{ + // Set WiFi to station mode and disconnect from an AP if it was previously connected + WiFi.mode(WIFI_STA); + WiFi.disconnect(); + delay(100); + +#if defined(LCD_PWR_PIN) + pinMode(LCD_PWR_PIN, OUTPUT); // sets the pin as output + digitalWrite(LCD_PWR_PIN, HIGH); // power on +#endif +#if defined(TFT_BL) + pinMode(TFT_BL, OUTPUT); // sets the pin as output + digitalWrite(TFT_BL, HIGH); // power on +#endif + + // init LCD + gfx->begin(); + w = gfx->width(); + h = gfx->height(); + text_size = (h < 200) ? 1 : 2; + banner_height = (text_size * 8) + 4; + graph_height = ((gfx->height() - banner_height) / 2) - 30; + graph24_baseline = banner_height + graph_height + 10; + graph50_baseline = graph24_baseline + graph_height + 30; + channel24_width = w / 17; + channel50_width = w / 62; + + // init banner + gfx->setTextSize(text_size); + gfx->fillScreen(BLACK); + gfx->setTextColor(BLUE); + gfx->setCursor(2, 2); + gfx->print("Wio"); + gfx->setTextColor(WHITE); + gfx->print(" WiFi Analyzer"); +} + +void loop() +{ + uint8_t ap_count_list[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + int32_t peak_list[] = {RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR, RSSI_FLOOR}; + int16_t peak_id_list[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; + int32_t channel; + uint16_t idx; + int32_t rssi; + String ssid; + uint16_t color; + int16_t height, offset, text_width; + + // WiFi.scanNetworks will return the number of networks found + int n = WiFi.scanNetworks(false /* async */, true /* show_hidden */, true /* passive */, 500 /* max_ms_per_chan */); + + // clear old graph + gfx->fillRect(0, banner_height, w, h - banner_height, BLACK); + gfx->setTextSize(1); + + if (n == 0) + { + gfx->setTextColor(WHITE); + gfx->setCursor(0, banner_height); + gfx->println("No networks found"); + } + else + { + for (int i = 0; i < n; i++) + { + channel = WiFi.channel(i); + idx = channelIdx(channel); + rssi = WiFi.RSSI(i); + + // channel peak stat + if (peak_list[idx] < rssi) + { + peak_list[idx] = rssi; + peak_id_list[idx] = i; + } + + ap_count_list[idx]++; + } + + // plot found WiFi info + for (int i = 0; i < n; i++) + { + channel = WiFi.channel(i); + idx = channelIdx(channel); + rssi = WiFi.RSSI(i); + color = channel_color[idx]; + height = constrain(map(rssi, RSSI_FLOOR, RSSI_CEILING, 1, graph_height), 1, graph_height); + if (idx < 14) + { + graph_baseline = graph24_baseline; + channel_width = channel24_width; + signal_width = channel24_width * 2; + offset = (idx + 2) * channel24_width; + } + else + { + graph_baseline = graph50_baseline; + channel_width = channel50_width; + signal_width = channel50_width * 2; + offset = (idx - 14 + 2) * channel50_width; + } + + // trim rssi with RSSI_FLOOR + if (rssi < RSSI_FLOOR) + { + rssi = RSSI_FLOOR; + } + + // plot chart + // gfx->drawLine(offset, graph_baseline - height, offset - signal_width, graph_baseline + 1, color); + // gfx->drawLine(offset, graph_baseline - height, offset + signal_width, graph_baseline + 1, color); + gfx->startWrite(); + gfx->drawEllipseHelper(offset, graph_baseline + 1, signal_width, height, 0b0011, color); + gfx->endWrite(); + + if (i == peak_id_list[idx]) + { + // Print SSID, signal strengh and if not encrypted + String ssid = WiFi.SSID(i); + if (ssid.length() == 0) + { + ssid = WiFi.BSSIDstr(i); + } + text_width = (ssid.length() + 6) * 6; + if (text_width > w) + { + offset = 0; + } + else + { + if ((offset + text_width) > w) + { + offset = w - text_width; + } + } + gfx->setTextColor(color); + gfx->setCursor(offset, graph_baseline - 10 - height); + gfx->print(ssid); + gfx->print('('); + gfx->print(rssi); + gfx->print(')'); + if (WiFi.encryptionType(i) == WIFI_AUTH_OPEN) + { + gfx->print('*'); + } + } + } + } + + // print WiFi found + gfx->setTextColor(WHITE); + gfx->setCursor(2, banner_height); + gfx->print(n); + gfx->print(" networks"); + + // draw 2.4 GHz graph base axle + gfx->drawFastHLine(0, graph24_baseline, 320, WHITE); + for (idx = 0; idx < 14; idx++) + { + channel = channel_legend[idx]; + offset = (idx + 2) * channel24_width; + if (channel > 0) + { + gfx->setTextColor(channel_color[idx]); + gfx->setCursor(offset - ((channel < 10) ? 3 : 6), graph24_baseline + 2); + gfx->print(channel); + } + if (ap_count_list[idx] > 0) + { + gfx->setTextColor(DARKGREY); + gfx->setCursor(offset - ((ap_count_list[idx] < 10) ? 3 : 6), graph24_baseline + 8 + 2); + gfx->print(ap_count_list[idx]); + } + } + + // draw 5 GHz graph base axle + gfx->drawFastHLine(0, graph50_baseline, 320, WHITE); + for (idx = 14; idx < 71; idx++) + { + channel = channel_legend[idx]; + offset = (idx - 14 + 2) * channel50_width; + if (channel > 0) + { + gfx->setTextColor(channel_color[idx]); + gfx->setCursor(offset - ((channel < 100) ? 6 : 9), graph50_baseline + 2); + gfx->print(channel); + } + if (ap_count_list[idx] > 0) + { + gfx->setTextColor(DARKGREY); + gfx->setCursor(offset - ((ap_count_list[idx] < 10) ? 3 : 6), graph50_baseline + 8 + 2); + gfx->print(ap_count_list[idx]); + } + } + + // Wait a bit before scanning again + delay(SCAN_INTERVAL); + +#if defined(SCAN_COUNT_SLEEP) + //POWER SAVING + if (++scan_count >= SCAN_COUNT_SLEEP) + { +#if defined(LCD_PWR_PIN) + pinMode(LCD_PWR_PIN, INPUT); // disable pin +#endif +#if defined(TFT_BL) + pinMode(TFT_BL, INPUT); // disable pin +#endif + } +#endif // defined(SCAN_COUNT_SLEEP) +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/library.properties b/Microcontroller Code/lib/Arduino_GFX-1.0.7/library.properties new file mode 100644 index 0000000..49abbbd --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/library.properties @@ -0,0 +1,7 @@ +name=GFX Library for Arduino +version=1.0.7 +author=Moon On Our Nation +maintainer=Moon On Our Nation +sentence=Arduino_GFX is a GFX library for various color displays with various data bus interfaces +paragraph=Arduino_GFX is a Arduino graphics library. Currently support GC9A01 round display, HX8347C, HX8347D, HX8352C, HX8357B, ILI9225, ILI9341, M5Stack, ILI9481, ILI9486, ILI9488, JBT6K71, R61529, SEPS525, SSD1283A, SSD1331, SSD1351, ST7735, ST7789, ST7796 with software and hardware SPI. ESP32 also support 9-bit SPI, 8-bit and 16-bit parallel interface. +url=https://github.com/moononournation/Arduino_GFX \ No newline at end of file diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.cpp new file mode 100644 index 0000000..a207fff --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.cpp @@ -0,0 +1,106 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_DataBus.h" + +Arduino_DataBus::Arduino_DataBus() {} + +void Arduino_DataBus::writeC8D8(uint8_t c, uint8_t d) +{ + writeCommand(c); + write(d); +} + +void Arduino_DataBus::writeC8D16(uint8_t c, uint16_t d) +{ + writeCommand(c); + write16(d); +} + +void Arduino_DataBus::writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2) +{ + writeCommand(c); + write16(d1); + write16(d2); +} + +void Arduino_DataBus::batchOperation(spi_operation_t batch[], uint8_t len) +{ + for (uint8_t i = 0; i < len; ++i) + { + switch (batch[i].type) + { + case BEGIN_WRITE: + beginWrite(); + break; + case WRITE_COMMAND_8: + writeCommand(batch[i].value); + break; + case WRITE_COMMAND_16: + writeCommand16(batch[i].value); + break; + case WRITE_COMMAND_32: + break; + case WRITE_DATA_8: + write(batch[i].value); + break; + case WRITE_DATA_16: + write16(batch[i].value); + break; + case WRITE_DATA_32: + write32(batch[i].value); + break; + case END_WRITE: + endWrite(); + break; + case DELAY: + delay(batch[i].value); + break; + case SEND_COMMAND_8: + sendCommand(batch[i].value); + break; + case SEND_COMMAND_16: + sendCommand16(batch[i].value); + break; + case SEND_COMMAND_32: + break; + case SEND_DATA_8: + sendData(batch[i].value); + break; + case SEND_DATA_16: + sendData16(batch[i].value); + break; + case SEND_DATA_32: + sendData32(batch[i].value); + break; + } + } +} + +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) +void Arduino_DataBus::writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len) +{ + while (len--) + { + write16(idx[*(data++)]); + } +} + +void Arduino_DataBus::writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len) +{ + uint8_t *d = data; + uint16_t p; + uint8_t hi, lo; + while (len--) + { + p = idx[*(d++)]; + hi = p >> 8; + lo = p; + write(hi); + write(lo); + write(hi); + write(lo); + } +} +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.h new file mode 100644 index 0000000..33cf161 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_DataBus.h @@ -0,0 +1,100 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _Arduino_DataBus_H_ +#define _Arduino_DataBus_H_ + +#if ARDUINO >= 100 +#include +#else +#include "WProgram.h" +#endif + +#define UNUSED(x) (void)(x) + +#if defined(ESP32) +#define MSB_32_SET(var, val) \ + { \ + uint8_t *v = (uint8_t *)&(val); \ + (var) = v[3] | (v[2] << 8) | (v[1] << 16) | (v[0] << 24); \ + } +#define MSB_32_16_16_SET(var, v1, v2) \ + { \ + (var) = (((uint32_t)v2 & 0xff00) << 8) | (((uint32_t)v2 & 0xff) << 24) | ((v1 & 0xff00) >> 8) | ((v1 & 0xff) << 8); \ + } +#define MSB_16_SET(var, val) \ + { \ + (var) = (((val)&0xFF00) >> 8) | (((val)&0xFF) << 8); \ + } +#define INLINE __attribute__ ((always_inline)) inline +#else +#define INLINE inline +#endif + +typedef enum +{ + BEGIN_WRITE, + WRITE_COMMAND_8, + WRITE_COMMAND_16, + WRITE_COMMAND_32, + WRITE_DATA_8, + WRITE_DATA_16, + WRITE_DATA_32, + END_WRITE, + DELAY, + SEND_COMMAND_8, + SEND_COMMAND_16, + SEND_COMMAND_32, + SEND_DATA_8, + SEND_DATA_16, + SEND_DATA_32, +} spi_operation_type_t; + +struct spi_operation_t +{ + spi_operation_type_t type; + uint32_t value; +}; + +class Arduino_DataBus +{ +public: + Arduino_DataBus(); + + virtual void begin(int32_t speed, int8_t dataMode = -1) = 0; + virtual void beginWrite() = 0; + virtual void writeCommand(uint8_t c) = 0; + virtual void writeCommand16(uint16_t c) = 0; + virtual void writeCommand32(uint32_t c) = 0; + virtual void write(uint8_t) = 0; + virtual void write16(uint16_t) = 0; + virtual void write32(uint32_t) = 0; + virtual void writeC8D8(uint8_t c, uint8_t d); + virtual void writeC8D16(uint8_t c, uint16_t d); + virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2); + virtual void writeRepeat(uint16_t p, uint32_t len) = 0; + virtual void writeBytes(uint8_t *data, uint32_t len) = 0; + virtual void writePixels(uint16_t *data, uint32_t len) = 0; + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat) = 0; + virtual void endWrite() = 0; + virtual void batchOperation(spi_operation_t batch[], uint8_t len); + +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + virtual void writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len); + virtual void writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len); +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + + virtual void sendCommand(uint8_t c) = 0; + virtual void sendCommand16(uint16_t c) = 0; + virtual void sendCommand32(uint32_t c) = 0; + virtual void sendData(uint8_t d) = 0; + virtual void sendData16(uint16_t d) = 0; + virtual void sendData32(uint32_t d) = 0; + +protected: + int32_t _speed; + int8_t _dataMode; +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.cpp new file mode 100644 index 0000000..67fa39f --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.cpp @@ -0,0 +1,16 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_G.h" + +/**************************************************************************/ +/*! + @brief Instatiate a GFX context for graphics! Can only be done by a superclass + @param w Display width, in pixels + @param h Display height, in pixels +*/ +/**************************************************************************/ +Arduino_G::Arduino_G(int16_t w, int16_t h) : WIDTH(w), HEIGHT(h) +{ +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.h new file mode 100644 index 0000000..c83f15b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_G.h @@ -0,0 +1,35 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_G_H_ +#define _ARDUINO_G_H_ + +#if ARDUINO >= 100 +#include +#else +#include "WProgram.h" +#endif + +/// A generic graphics superclass that can handle all sorts of drawing. At a minimum you can subclass and provide drawPixel(). At a maximum you can do a ton of overriding to optimize. Used for any/all Adafruit displays! +class Arduino_G +{ +public: + Arduino_G(int16_t w, int16_t h); // Constructor + + // This MUST be defined by the subclass: + virtual void begin(int32_t speed = 0) = 0; + + virtual void fillScreen(uint16_t color) = 0; + virtual void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) = 0; + virtual void drawIndexedBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h) = 0; + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h) = 0; + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h) = 0; + +protected: + int16_t + WIDTH, ///< This is the 'raw' display width - never changes + HEIGHT; ///< This is the 'raw' display height - never changes +}; + +#endif // _Arduino_G_H diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.cpp new file mode 100644 index 0000000..665b690 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.cpp @@ -0,0 +1,2216 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * + * Arc function come from: + * https://github.com/lovyan03/LovyanGFX.git + */ +#include "Arduino_DataBus.h" +#include "Arduino_GFX.h" +#include "font/glcdfont.h" +#include "float.h" +#ifdef __AVR__ +#include +#elif defined(ESP8266) || defined(ESP32) +#include +#endif + +/**************************************************************************/ +/*! + @brief Instatiate a GFX context for graphics! Can only be done by a superclass + @param w Display width, in pixels + @param h Display height, in pixels +*/ +/**************************************************************************/ +Arduino_GFX::Arduino_GFX(int16_t w, int16_t h) : Arduino_G(w, h) +{ + _width = WIDTH; + _height = HEIGHT; + _max_x = _width - 1; ///< x zero base bound + _max_y = _height - 1; ///< y zero base bound + _rotation = 0; + cursor_y = cursor_x = 0; + textsize_x = textsize_y = 1; + text_pixel_margin = 0; + textcolor = textbgcolor = 0xFFFF; + wrap = true; + _cp437 = false; + gfxFont = NULL; +} + +/**************************************************************************/ +/*! + @brief Write a line. Check straight or slash line and call corresponding function + @param x0 Start point x coordinate + @param y0 Start point y coordinate + @param x1 End point x coordinate + @param y1 End point y coordinate + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, + uint16_t color) +{ + if (x0 == x1) + { + if (y0 > y1) + { + _swap_int16_t(y0, y1); + } + writeFastVLine(x0, y0, y1 - y0 + 1, color); + } + else if (y0 == y1) + { + if (x0 > x1) + { + _swap_int16_t(x0, x1); + } + writeFastHLine(x0, y0, x1 - x0 + 1, color); + } + else + { + writeSlashLine(x0, y0, x1, y1, color); + } +} + +/**************************************************************************/ +/*! + @brief Write a line. Bresenham's algorithm - thx wikpedia + @param x0 Start point x coordinate + @param y0 Start point y coordinate + @param x1 End point x coordinate + @param y1 End point y coordinate + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::writeSlashLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, + uint16_t color) +{ + bool steep = _diff(y1, y0) > _diff(x1, x0); + if (steep) + { + _swap_int16_t(x0, y0); + _swap_int16_t(x1, y1); + } + + if (x0 > x1) + { + _swap_int16_t(x0, x1); + _swap_int16_t(y0, y1); + } + + int16_t dx = x1 - x0; + int16_t dy = _diff(y1, y0); + int16_t err = dx >> 1; + int16_t step = (y0 < y1) ? 1 : -1; + + for (; x0 <= x1; x0++) + { + if (steep) + { + writePixel(y0, x0, color); + } + else + { + writePixel(x0, y0, color); + } + err -= dy; + if (err < 0) + { + err += dx; + y0 += step; + } + } +} + +/**************************************************************************/ +/*! + @brief Start a display-writing routine, overwrite in subclasses. +*/ +/**************************************************************************/ +INLINE void Arduino_GFX::startWrite() +{ +} + +void Arduino_GFX::writePixel(int16_t x, int16_t y, uint16_t color) +{ + if (_ordered_in_range(x, 0, _max_x) && _ordered_in_range(y, 0, _max_y)) + { + writePixelPreclipped(x, y, color); + } +} + +/**************************************************************************/ +/*! + @brief Write a pixel, overwrite in subclasses if startWrite is defined! + @param x x coordinate + @param y y coordinate + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::drawPixel(int16_t x, int16_t y, uint16_t color) +{ + startWrite(); + writePixel(x, y, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Write a perfectly vertical line, overwrite in subclasses if startWrite is defined! + @param x Top-most x coordinate + @param y Top-most y coordinate + @param h Height in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::writeFastVLine(int16_t x, int16_t y, + int16_t h, uint16_t color) +{ + for (int16_t i = y; i < y + h; i++) + { + writePixel(x, i, color); + } +} + +/**************************************************************************/ +/*! + @brief Write a perfectly horizontal line, overwrite in subclasses if startWrite is defined! + @param x Left-most x coordinate + @param y Left-most y coordinate + @param w Width in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::writeFastHLine(int16_t x, int16_t y, + int16_t w, uint16_t color) +{ + for (int16_t i = x; i < x + w; i++) + { + writePixel(i, y, color); + } +} + +/**************************************************************************/ +/*! + @brief Draw a filled rectangle to the display. Not self-contained; + should follow startWrite(). Typically used by higher-level + graphics primitives; user code shouldn't need to call this and + is likely to use the self-contained fillRect() instead. + writeFillRect() performs its own edge clipping and rejection; + see writeFillRectPreclipped() for a more 'raw' implementation. + @param x Horizontal position of first corner. + @param y Vertical position of first corner. + @param w Rectangle width in pixels (positive = right of first + corner, negative = left of first corner). + @param h Rectangle height in pixels (positive = below first + corner, negative = above first corner). + @param color 16-bit fill color in '565' RGB format. + @note Written in this deep-nested way because C by definition will + optimize for the 'if' case, not the 'else' -- avoids branches + and rejects clipped rectangles at the least-work possibility. +*/ +/**************************************************************************/ +void Arduino_GFX::writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, + uint16_t color) +{ + if (w && h) + { // Nonzero width and height? + if (w < 0) + { // If negative width... + x += w + 1; // Move X to left edge + w = -w; // Use positive width + } + if (x <= _max_x) + { // Not off right + if (h < 0) + { // If negative height... + y += h + 1; // Move Y to top edge + h = -h; // Use positive height + } + if (y <= _max_y) + { // Not off bottom + int16_t x2 = x + w - 1; + if (x2 >= 0) + { // Not off left + int16_t y2 = y + h - 1; + if (y2 >= 0) + { // Not off top + // Rectangle partly or fully overlaps screen + if (x < 0) + { + x = 0; + w = x2 + 1; + } // Clip left + if (y < 0) + { + y = 0; + h = y2 + 1; + } // Clip top + if (x2 > _max_x) + { + w = _max_x - x + 1; + } // Clip right + if (y2 > _max_y) + { + h = _max_y - y + 1; + } // Clip bottom + writeFillRectPreclipped(x, y, w, h, color); + } + } + } + } + } +} + +/**************************************************************************/ +/*! + @brief Write a rectangle completely with one color, overwrite in subclasses if startWrite is defined! + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param w Width in pixels + @param h Height in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, int16_t h, + uint16_t color) +{ + // Overwrite in subclasses if desired! + for (int16_t i = x; i < x + w; i++) + { + writeFastVLine(i, y, h, color); + } +} + +/**************************************************************************/ +/*! + @brief End a display-writing routine, overwrite in subclasses if startWrite is defined! +*/ +/**************************************************************************/ +INLINE void Arduino_GFX::endWrite() +{ +} + +/**************************************************************************/ +/*! + @brief flush framebuffer to output (for Canvas or NeoPixel sub-class) +*/ +/**************************************************************************/ +void Arduino_GFX::flush() +{ +} + +/**************************************************************************/ +/*! + @brief Draw a perfectly vertical line (this is often optimized in a subclass!) + @param x Top-most x coordinate + @param y Top-most y coordinate + @param h Height in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::drawFastVLine(int16_t x, int16_t y, + int16_t h, uint16_t color) +{ + startWrite(); + writeFastVLine(x, y, h, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a perfectly horizontal line (this is often optimized in a subclass!) + @param x Left-most x coordinate + @param y Left-most y coordinate + @param w Width in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::drawFastHLine(int16_t x, int16_t y, + int16_t w, uint16_t color) +{ + startWrite(); + writeFastHLine(x, y, w, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Fill a rectangle completely with one color. Update in subclasses if desired! + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param w Width in pixels + @param h Height in pixels + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, + uint16_t color) +{ + startWrite(); + writeFillRect(x, y, w, h, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Fill the screen completely with one color. Update in subclasses if desired! + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillScreen(uint16_t color) +{ + fillRect(0, 0, _width, _height, color); +} + +/**************************************************************************/ +/*! + @brief Draw a line + @param x0 Start point x coordinate + @param y0 Start point y coordinate + @param x1 End point x coordinate + @param y1 End point y coordinate + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, + uint16_t color) +{ + // Update in subclasses if desired! + startWrite(); + writeLine(x0, y0, x1, y1, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a circle outline + @param x Center-point x coordinate + @param y Center-point y coordinate + @param r Radius of circle + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawCircle(int16_t x, int16_t y, + int16_t r, uint16_t color) +{ + startWrite(); + drawEllipseHelper(x, y, r, r, 0xf, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Quarter-ellipse drawer, used to do circles and roundrects + @param x Center-point x coordinate + @param y Center-point y coordinate + @param rx radius of x coordinate + @param ry radius of y coordinate + @param cornername Mask bit #1 or bit #2 to indicate which quarters of the circle we're doing + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawEllipseHelper(int32_t x, int32_t y, + int32_t rx, int32_t ry, + uint8_t cornername, uint16_t color) +{ + if (rx < 0 || ry < 0 || ((rx == 0) && (ry == 0))) + { + return; + } + if (ry == 0) + { + drawFastHLine(x - rx, y, (ry << 2) + 1, color); + return; + } + if (rx == 0) + { + drawFastVLine(x, y - ry, (rx << 2) + 1, color); + return; + } + + int32_t xt, yt, s, i; + int32_t rx2 = rx * rx; + int32_t ry2 = ry * ry; + + i = -1; + xt = 0; + yt = ry; + s = (ry2 << 1) + rx2 * (1 - (ry << 1)); + do + { + while (s < 0) + s += ry2 * ((++xt << 2) + 2); + if (cornername & 0x1) + { + writeFastHLine(x - xt, y - yt, xt - i, color); + } + if (cornername & 0x2) + { + writeFastHLine(x + i + 1, y - yt, xt - i, color); + } + if (cornername & 0x4) + { + writeFastHLine(x + i + 1, y + yt, xt - i, color); + } + if (cornername & 0x8) + { + writeFastHLine(x - xt, y + yt, xt - i, color); + } + i = xt; + s -= (--yt) * rx2 << 2; + } while (ry2 * xt <= rx2 * yt); + + i = -1; + yt = 0; + xt = rx; + s = (rx2 << 1) + ry2 * (1 - (rx << 1)); + do + { + while (s < 0) + s += rx2 * ((++yt << 2) + 2); + if (cornername & 0x1) + { + writeFastVLine(x - xt, y - yt, yt - i, color); + } + if (cornername & 0x2) + { + writeFastVLine(x + xt, y - yt, yt - i, color); + } + if (cornername & 0x4) + { + writeFastVLine(x + xt, y + i + 1, yt - i, color); + } + if (cornername & 0x8) + { + writeFastVLine(x - xt, y + i + 1, yt - i, color); + } + i = yt; + s -= (--xt) * ry2 << 2; + } while (rx2 * yt <= ry2 * xt); +} + +/**************************************************************************/ +/*! + @brief Draw a circle with filled color + @param x Center-point x coordinate + @param y Center-point y coordinate + @param r Radius of circle + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillCircle(int16_t x, int16_t y, + int16_t r, uint16_t color) +{ + startWrite(); + fillEllipseHelper(x, y, r, r, 3, 0, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Quarter-circle drawer with fill, used for circles and roundrects + @param x Center-point x coordinate + @param y Center-point y coordinate + @param rx Radius of x coordinate + @param ry Radius of y coordinate + @param corners Mask bits indicating which quarters we're doing + @param delta Offset from center-point, used for round-rects + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillEllipseHelper(int32_t x, int32_t y, + int32_t rx, int32_t ry, + uint8_t corners, int16_t delta, uint16_t color) +{ + if (rx < 0 || ry < 0 || ((rx == 0) && (ry == 0))) + { + return; + } + if (ry == 0) + { + drawFastHLine(x - rx, y, (ry << 2) + 1, color); + return; + } + if (rx == 0) + { + drawFastVLine(x, y - ry, (rx << 2) + 1, color); + return; + } + + int32_t xt, yt, i; + int32_t rx2 = (int32_t)rx * rx; + int32_t ry2 = (int32_t)ry * ry; + int32_t s; + + writeFastHLine(x - rx, y, (rx << 1) + 1, color); + i = 0; + yt = 0; + xt = rx; + s = (rx2 << 1) + ry2 * (1 - (rx << 1)); + do + { + while (s < 0) + { + s += rx2 * ((++yt << 2) + 2); + } + if (corners & 1) + { + writeFillRect(x - xt, y - yt, (xt << 1) + 1 + delta, yt - i, color); + } + if (corners & 2) + { + writeFillRect(x - xt, y + i + 1, (xt << 1) + 1 + delta, yt - i, color); + } + i = yt; + s -= (--xt) * ry2 << 2; + } while (rx2 * yt <= ry2 * xt); + + xt = 0; + yt = ry; + s = (ry2 << 1) + rx2 * (1 - (ry << 1)); + do + { + while (s < 0) + { + s += ry2 * ((++xt << 2) + 2); + } + if (corners & 1) + { + writeFastHLine(x - xt, y - yt, (xt << 1) + 1 + delta, color); + } + if (corners & 2) + { + writeFastHLine(x - xt, y + yt, (xt << 1) + 1 + delta, color); + } + s -= (--yt) * rx2 << 2; + } while (ry2 * xt <= rx2 * yt); +} + +/**************************************************************************/ +/*! + @brief Draw an ellipse outline + @param x Center-point x coordinate + @param y Center-point y coordinate + @param rx radius of x coordinate + @param ry radius of y coordinate + @param start degree of ellipse start + @param end degree of ellipse end + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawEllipse(int16_t x, int16_t y, int16_t rx, int16_t ry, uint16_t color) +{ + startWrite(); + drawEllipseHelper(x, y, rx, ry, 0xf, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw an ellipse with filled color + @param x Center-point x coordinate + @param y Center-point y coordinate + @param rx radius of x coordinate + @param ry radius of y coordinate + @param start degree of ellipse start + @param end degree of ellipse end + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillEllipse(int16_t x, int16_t y, int16_t rx, int16_t ry, uint16_t color) +{ + startWrite(); + fillEllipseHelper(x, y, rx, ry, 3, 0, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw an arc outline + @param x Center-point x coordinate + @param y Center-point y coordinate + @param r1 Outer radius of arc + @param r2 Inner radius of arc + @param start degree of arc start + @param end degree of arc end + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawArc(int16_t x, int16_t y, int16_t r1, int16_t r2, float start, float end, uint16_t color) +{ + if (r1 < r2) + { + _swap_int16_t(r1, r2); + } + if (r1 < 1) + { + r1 = 1; + } + if (r2 < 1) + { + r2 = 1; + } + bool equal = fabsf(start - end) < FLT_EPSILON; + start = fmodf(start, 360); + end = fmodf(end, 360); + if (start < 0) + start += 360.0; + if (end < 0) + end += 360.0; + + startWrite(); + fillArcHelper(x, y, r1, r2, start, start, color); + fillArcHelper(x, y, r1, r2, end, end, color); + if (!equal && (fabsf(start - end) <= 0.0001)) + { + start = .0; + end = 360.0; + } + fillArcHelper(x, y, r1, r1, start, end, color); + fillArcHelper(x, y, r2, r2, start, end, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw an arc with filled color + @param x Center-point x coordinate + @param y Center-point y coordinate + @param r1 Outer radius of arc + @param r2 Inner radius of arc + @param start degree of arc start + @param end degree of arc end + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillArc(int16_t x, int16_t y, int16_t r1, int16_t r2, float start, float end, uint16_t color) +{ + if (r1 < r2) + { + _swap_int16_t(r1, r2); + } + if (r1 < 1) + { + r1 = 1; + } + if (r2 < 1) + { + r2 = 1; + } + bool equal = fabsf(start - end) < FLT_EPSILON; + start = fmodf(start, 360); + end = fmodf(end, 360); + if (start < 0) + start += 360.0; + if (end < 0) + end += 360.0; + if (!equal && (fabsf(start - end) <= 0.0001)) + { + start = .0; + end = 360.0; + } + + startWrite(); + fillArcHelper(x, y, r1, r2, start, end, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Arc drawer with fill + @param cx Center-point x coordinate + @param cy Center-point y coordinate + @param oradius Outer radius of arc + @param iradius Inner radius of arc + @param start degree of arc start + @param end degree of arc end + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillArcHelper(int16_t cx, int16_t cy, int16_t oradius, int16_t iradius, float start, float end, uint16_t color) +{ + float s_cos = (cos(start * DEGTORAD)); + float e_cos = (cos(end * DEGTORAD)); + float sslope = s_cos / (sin(start * DEGTORAD)); + float eslope = -1000000; + if (end != 360.0) + { + eslope = e_cos / (sin(end * DEGTORAD)); + } + float swidth = 0.5 / s_cos; + float ewidth = -0.5 / e_cos; + --iradius; + int32_t ir2 = iradius * iradius + iradius; + int32_t or2 = oradius * oradius + oradius; + + bool start180 = !(start < 180); + bool end180 = end < 180; + bool reversed = start + 180 < end || (end < start && start < end + 180); + + int32_t xs = -oradius; + int32_t y = -oradius; + int32_t ye = oradius; + int32_t xe = oradius + 1; + if (!reversed) + { + if ((end >= 270 || end < 90) && (start >= 270 || start < 90)) + { + xs = 0; + } + else if (end < 270 && end >= 90 && start < 270 && start >= 90) + { + xe = 1; + } + if (end >= 180 && start >= 180) + { + ye = 0; + } + else if (end < 180 && start < 180) + { + y = 0; + } + } + do + { + int32_t y2 = y * y; + int32_t x = xs; + if (x < 0) + { + while (x * x + y2 >= or2) + { + ++x; + } + if (xe != 1) + { + xe = 1 - x; + } + } + float ysslope = (y + swidth) * sslope; + float yeslope = (y + ewidth) * eslope; + int32_t len = 0; + do + { + bool flg1 = start180 != (x <= ysslope); + bool flg2 = end180 != (x <= yeslope); + int32_t distance = x * x + y2; + if (distance >= ir2 && ((flg1 && flg2) || (reversed && (flg1 || flg2))) && x != xe && distance < or2) + { + ++len; + } + else + { + if (len) + { + writeFastHLine(cx + x - len, cy + y, len, color); + len = 0; + } + if (distance >= or2) + break; + if (x < 0 && distance < ir2) + { + x = -x; + } + } + } while (++x <= xe); + } while (++y <= ye); +} + +/**************************************************************************/ +/*! + @brief Draw a rectangle with no fill color + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param w Width in pixels + @param h Height in pixels + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, + uint16_t color) +{ + startWrite(); + writeFastHLine(x, y, w, color); + writeFastHLine(x, y + h - 1, w, color); + writeFastVLine(x, y, h, color); + writeFastVLine(x + w - 1, y, h, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a rounded rectangle with no fill color + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param w Width in pixels + @param h Height in pixels + @param r Radius of corner rounding + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawRoundRect(int16_t x, int16_t y, int16_t w, + int16_t h, int16_t r, uint16_t color) +{ + int16_t max_radius = ((w < h) ? w : h) / 2; // 1/2 minor axis + if (r > max_radius) + r = max_radius; + // smarter version + startWrite(); + writeFastHLine(x + r, y, w - 2 * r, color); // Top + writeFastHLine(x + r, y + h - 1, w - 2 * r, color); // Bottom + writeFastVLine(x, y + r, h - 2 * r, color); // Left + writeFastVLine(x + w - 1, y + r, h - 2 * r, color); // Right + // draw four corners + drawEllipseHelper(x + r, y + r, r, r, 1, color); + drawEllipseHelper(x + w - r - 1, y + r, r, r, 2, color); + drawEllipseHelper(x + w - r - 1, y + h - r - 1, r, r, 4, color); + drawEllipseHelper(x + r, y + h - r - 1, r, r, 8, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a rounded rectangle with fill color + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param w Width in pixels + @param h Height in pixels + @param r Radius of corner rounding + @param color 16-bit 5-6-5 Color to draw/fill with +*/ +/**************************************************************************/ +void Arduino_GFX::fillRoundRect(int16_t x, int16_t y, int16_t w, + int16_t h, int16_t r, uint16_t color) +{ + int16_t max_radius = ((w < h) ? w : h) / 2; // 1/2 minor axis + if (r > max_radius) + r = max_radius; + // smarter version + startWrite(); + writeFillRect(x, y + r, w, h - (r << 1), color); + // draw four corners + fillEllipseHelper(x + r, y + r, r, r, 1, w - 2 * r - 1, color); + fillEllipseHelper(x + r, y + h - r - 1, r, r, 2, w - 2 * r - 1, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a triangle with no fill color + @param x0 Vertex #0 x coordinate + @param y0 Vertex #0 y coordinate + @param x1 Vertex #1 x coordinate + @param y1 Vertex #1 y coordinate + @param x2 Vertex #2 x coordinate + @param y2 Vertex #2 y coordinate + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawTriangle(int16_t x0, int16_t y0, + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) +{ + startWrite(); + writeLine(x0, y0, x1, y1, color); + writeLine(x1, y1, x2, y2, color); + writeLine(x2, y2, x0, y0, color); + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a triangle with color-fill + @param x0 Vertex #0 x coordinate + @param y0 Vertex #0 y coordinate + @param x1 Vertex #1 x coordinate + @param y1 Vertex #1 y coordinate + @param x2 Vertex #2 x coordinate + @param y2 Vertex #2 y coordinate + @param color 16-bit 5-6-5 Color to fill/draw with +*/ +/**************************************************************************/ +void Arduino_GFX::fillTriangle(int16_t x0, int16_t y0, + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) +{ + int16_t a, b, y, last; + + // Sort coordinates by Y order (y2 >= y1 >= y0) + if (y0 > y1) + { + _swap_int16_t(y0, y1); + _swap_int16_t(x0, x1); + } + if (y1 > y2) + { + _swap_int16_t(y2, y1); + _swap_int16_t(x2, x1); + } + if (y0 > y1) + { + _swap_int16_t(y0, y1); + _swap_int16_t(x0, x1); + } + + startWrite(); + if (y0 == y2) + { // Handle awkward all-on-same-line case as its own thing + a = b = x0; + if (x1 < a) + a = x1; + else if (x1 > b) + b = x1; + if (x2 < a) + a = x2; + else if (x2 > b) + b = x2; + writeFastHLine(a, y0, b - a + 1, color); + endWrite(); + return; + } + + int16_t + dx01 = x1 - x0, + dy01 = y1 - y0, + dx02 = x2 - x0, + dy02 = y2 - y0, + dx12 = x2 - x1, + dy12 = y2 - y1; + int32_t + sa = 0, + sb = 0; + + // For upper part of triangle, find scanline crossings for segments + // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 + // is included here (and second loop will be skipped, avoiding a /0 + // error there), otherwise scanline y1 is skipped here and handled + // in the second loop...which also avoids a /0 error here if y0=y1 + // (flat-topped triangle). + if (y1 == y2) + { + last = y1; // Include y1 scanline + } + else + { + last = y1 - 1; // Skip it + } + + for (y = y0; y <= last; y++) + { + a = x0 + sa / dy01; + b = x0 + sb / dy02; + sa += dx01; + sb += dx02; + /* longhand: + a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); + b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); + */ + if (a > b) + { + _swap_int16_t(a, b); + } + writeFastHLine(a, y, b - a + 1, color); + } + + // For lower part of triangle, find scanline crossings for segments + // 0-2 and 1-2. This loop is skipped if y1=y2. + sa = (int32_t)dx12 * (y - y1); + sb = (int32_t)dx02 * (y - y0); + for (; y <= y2; y++) + { + a = x1 + sa / dy12; + b = x0 + sb / dy02; + sa += dx12; + sb += dx02; + /* longhand: + a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); + b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); + */ + if (a > b) + { + _swap_int16_t(a, b); + } + writeFastHLine(a, y, b - a + 1, color); + } + endWrite(); +} + +// BITMAP / XBITMAP / GRAYSCALE / RGB BITMAP FUNCTIONS --------------------- + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) position, using the specified foreground color (unset bits are transparent). + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) +{ + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); + } + if (byte & 0x80) + { + writePixel(x + i, y, color); + } + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_GFX::drawBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h, + uint16_t color, uint16_t bg) +{ + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); + } + writePixel(x + i, y, (byte & 0x80) ? color : bg); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, using the specified foreground color (unset bits are transparent). + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_GFX::drawBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) +{ + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = bitmap[j * byteWidth + i / 8]; + } + if (byte & 0x80) + { + writePixel(x + i, y, color); + } + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_GFX::drawBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) +{ + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = bitmap[j * byteWidth + i / 8]; + } + writePixel(x + i, y, (byte & 0x80) ? color : bg); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw PROGMEM-resident XBitMap Files (*.xbm), exported from GIMP. + Usage: Export from GIMP to *.xbm, rename *.xbm to *.c and open in editor. + C Array can be directly used with this function. + There is no RAM-resident version of this function; if generating bitmaps + in RAM, use the format defined by drawBitmap() and call that instead. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with +*/ +/**************************************************************************/ +void Arduino_GFX::drawXBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color) +{ + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte >>= 1; + } + else + { + byte = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); + } + // Nearly identical to drawBitmap(), only the bit order + // is reversed here (left-to-right = LSB to MSB): + if (byte & 0x01) + { + writePixel(x + i, y, color); + } + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + uint8_t v; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + v = (uint8_t)pgm_read_byte(&bitmap[j * w + i]); + writePixel(x + i, y, color565(v, v, v)); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + uint8_t v; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + v = bitmap[j * w + i]; + writePixel(x + i, y, color565(v, v, v)); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 8-bit image (grayscale) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (grayscale and mask) must be PROGMEM-resident. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param mask byte array with mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], const uint8_t mask[], + int16_t w, int16_t h) +{ + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + uint8_t v; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&mask[j * bw + i / 8]); + } + if (byte & 0x80) + { + v = (uint8_t)pgm_read_byte(&bitmap[j * w + i]); + writePixel(x + i, y, color565(v, v, v)); + } + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 8-bit image (grayscale) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (grayscale and mask) must be RAM-residentt, no mix-and-match + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param mask byte array with mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::drawGrayscaleBitmap(int16_t x, int16_t y, + uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h) +{ + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + uint8_t v; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = mask[j * bw + i / 8]; + } + if (byte & 0x80) + { + v = bitmap[j * w + i]; + writePixel(x + i, y, color565(v, v, v)); + } + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a Indexed 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array of Indexed color bitmap + @param color_index byte array of 16-bit color index + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::drawIndexedBitmap(int16_t x, int16_t y, + uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h) +{ + int32_t offset = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + writePixel(x + i, y, color_index[bitmap[offset++]]); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw16bitRGBBitmap(int16_t x, int16_t y, + const uint16_t bitmap[], int16_t w, int16_t h) +{ + int32_t offset = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + writePixel(x + i, y, pgm_read_word(&bitmap[offset++])); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw16bitRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + int32_t offset = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + writePixel(x + i, y, bitmap[offset++]); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit Big Endian image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw16bitBeRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + int32_t offset = 0; + uint16_t bEpixel; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + bEpixel = bitmap[offset++]; + writePixel(x + i, y, (bEpixel >> 8) | (bEpixel << 8)); + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (color and mask) must be PROGMEM-resident. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param mask byte array with monochrome mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw16bitRGBBitmap(int16_t x, int16_t y, + const uint16_t bitmap[], const uint8_t mask[], + int16_t w, int16_t h) +{ + int32_t offset = 0; + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&mask[j * bw + i / 8]); + } + if (byte & 0x80) + { + writePixel(x + i, y, pgm_read_word(&bitmap[offset])); + } + offset++; + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (color and mask) must be RAM-resident. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param mask byte array with monochrome mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw16bitRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, uint8_t *mask, int16_t w, int16_t h) +{ + int32_t offset = 0; + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = mask[j * bw + i / 8]; + } + if (byte & 0x80) + { + writePixel(x + i, y, bitmap[offset]); + } + offset++; + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw24bitRGBBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + int32_t offset = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + writePixel(x + i, y, color565(pgm_read_byte(&bitmap[offset]), pgm_read_byte(&bitmap[offset + 1]), pgm_read_byte(&bitmap[offset + 2]))); + offset += 3; + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw24bitRGBBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + int32_t offset = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + writePixel(x + i, y, color565(bitmap[offset], bitmap[offset + 1], bitmap[offset + 2])); + offset += 3; + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 24-bit image (RGB 5/6/5) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (color and mask) must be PROGMEM-resident. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param mask byte array with monochrome mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw24bitRGBBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], const uint8_t mask[], + int16_t w, int16_t h) +{ + int32_t offset = 0; + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&mask[j * bw + i / 8]); + } + if (byte & 0x80) + { + writePixel(x + i, y, color565(pgm_read_byte(&bitmap[offset]), pgm_read_byte(&bitmap[offset + 1]), pgm_read_byte(&bitmap[offset + 2]))); + } + offset += 3; + } + } + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 24-bit image (RGB 5/6/5) with a 1-bit mask + (set bits = opaque, unset bits = clear) at the specified (x,y) position. + BOTH buffers (color and mask) must be RAM-resident. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param mask byte array with monochrome mask bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_GFX::draw24bitRGBBitmap(int16_t x, int16_t y, + uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h) +{ + int32_t offset = 0; + int16_t bw = (w + 7) / 8; // Bitmask scanline pad = whole byte + uint8_t byte = 0; + startWrite(); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = mask[j * bw + i / 8]; + } + if (byte & 0x80) + { + writePixel(x + i, y, color565(bitmap[offset], bitmap[offset + 1], bitmap[offset + 2])); + } + offset += 3; + } + } + endWrite(); +} + +// TEXT- AND CHARACTER-HANDLING FUNCTIONS ---------------------------------- + +// Draw a character +/**************************************************************************/ +/*! + @brief Draw a single character + @param x Bottom left corner x coordinate + @param y Bottom left corner y coordinate + @param c The 8-bit font-indexed character (likely ascii) + @param color 16-bit 5-6-5 Color to draw chraracter with + @param bg 16-bit 5-6-5 Color to fill background with (if same as color, no background) +*/ +/**************************************************************************/ +void Arduino_GFX::drawChar(int16_t x, int16_t y, unsigned char c, + uint16_t color, uint16_t bg) +{ + uint16_t block_w; + uint16_t block_h; + + if (!gfxFont) // 'Classic' built-in font + { + block_w = 6 * textsize_x; + block_h = 8 * textsize_y; + if ( + (x > _max_x) || // Clip right + (y > _max_y) || // Clip bottom + ((x + block_w - 1) < 0) || // Clip left + ((y + block_h - 1) < 0) // Clip top + ) + { + return; + } + + if (!_cp437 && (c >= 176)) + { + c++; // Handle 'classic' charset behavior + } + + startWrite(); + for (int8_t i = 0; i < 5; i++) + { // Char bitmap = 5 columns + uint8_t line = pgm_read_byte(&font[c * 5 + i]); + for (int8_t j = 0; j < 8; j++, line >>= 1) + { + if (line & 1) + { + if (textsize_x == 1 && textsize_y == 1) + { + writePixel(x + i, y + j, color); + } + else + { + writeFillRect(x + i * textsize_x, y + j * textsize_y, textsize_x - text_pixel_margin, textsize_y - text_pixel_margin, color); + } + } + else if (bg != color) + { + if (textsize_x == 1 && textsize_y == 1) + { + writePixel(x + i, y + j, bg); + } + else + { + writeFillRect(x + i * textsize_x, y + j * textsize_y, textsize_x - text_pixel_margin, textsize_y - text_pixel_margin, bg); + } + } + } + } + if (bg != color) + { // If opaque, draw vertical line for last column + if (textsize_x == 1 && textsize_y == 1) + { + writeFastVLine(x + 5, y, 8, bg); + } + else + { + writeFillRect(x + 5 * textsize_x, y, textsize_x, 8 * textsize_y, bg); + } + } + endWrite(); + } + else // Custom font + { + // Character is assumed previously filtered by write() to eliminate + // newlines, returns, non-printable characters, etc. Calling + // drawChar() directly with 'bad' characters of font may cause mayhem! + + c -= (uint8_t)pgm_read_byte(&gfxFont->first); + GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c); + uint8_t *bitmap = pgm_read_bitmap_ptr(gfxFont); + + uint16_t bo = pgm_read_word(&glyph->bitmapOffset); + uint8_t w = pgm_read_byte(&glyph->width), + h = pgm_read_byte(&glyph->height), + xAdvance = pgm_read_byte(&glyph->xAdvance), + yAdvance = pgm_read_byte(&gfxFont->yAdvance), + baseline = yAdvance * 2 / 3; // TODO: baseline is an arbitrary currently, may be define in font file + int8_t xo = pgm_read_byte(&glyph->xOffset), + yo = pgm_read_byte(&glyph->yOffset); + uint8_t xx, yy, bits = 0, bit = 0; + int16_t xo16 = xo, yo16 = yo; + + if (xAdvance < w) + { + xAdvance = w; // Don't know why it exists + } + + block_w = xAdvance * textsize_x; + block_h = yAdvance * textsize_y; + if ( + (x > _max_x) || // Clip right + (y > _max_y) || // Clip bottom + ((x + block_w - 1) < 0) || // Clip left + ((y + block_h - 1) < 0) // Clip top + ) + { + return; + } + + // NOTE: Different from Adafruit_GFX design, Adruino_GFX also cater background. + // Since it may introduce many ugly output, it should limited using on mono font only. + startWrite(); + if (bg != color) // have background color + { + writeFillRect(x, y - (baseline * textsize_y), block_w, block_h, bg); + } + for (yy = 0; yy < h; yy++) + { + for (xx = 0; xx < w; xx++) + { + if (!(bit++ & 7)) + { + bits = pgm_read_byte(&bitmap[bo++]); + } + if (bits & 0x80) + { + if (textsize_x == 1 && textsize_y == 1) + { + writePixel(x + xo + xx, y + yo + yy, color); + } + else + { + writeFillRect(x + (xo16 + xx) * textsize_x, y + (yo16 + yy) * textsize_y, + textsize_x - text_pixel_margin, textsize_y - text_pixel_margin, color); + } + } + bits <<= 1; + } + } + endWrite(); + } // End classic vs custom font +} + +/**************************************************************************/ +/*! + @brief Print one byte/character of data, used to support print() + @param c The 8-bit ascii character to write +*/ +/**************************************************************************/ +size_t Arduino_GFX::write(uint8_t c) +{ + if (!gfxFont) + { // 'Classic' built-in font + + if (c == '\n') + { // Newline? + cursor_x = 0; // Reset x to zero, + cursor_y += textsize_y * 8; // advance y one line + } + else if (c != '\r') + { // Ignore carriage returns + if (wrap && ((cursor_x + (textsize_x * 6) - 1) > _max_x)) + { // Off right? + cursor_x = 0; // Reset x to zero, + cursor_y += textsize_y * 8; // advance y one line + } + drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor); + cursor_x += textsize_x * 6; // Advance x one char + } + } + else + { // Custom font + + if (c == '\n') + { + cursor_x = 0; + cursor_y += (int16_t)textsize_y * + (uint8_t)pgm_read_byte(&gfxFont->yAdvance); + } + else if (c != '\r') + { + uint8_t first = pgm_read_byte(&gfxFont->first); + if ((c >= first) && (c <= (uint8_t)pgm_read_byte(&gfxFont->last))) + { + GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c - first); + uint8_t w = pgm_read_byte(&glyph->xAdvance); + // int16_t xo = (int8_t)pgm_read_byte(&glyph->xOffset); // sic + if (wrap && ((cursor_x + (textsize_x * w) - 1) > _max_x)) + { + cursor_x = 0; + cursor_y += (int16_t)textsize_y * + (uint8_t)pgm_read_byte(&gfxFont->yAdvance); + } + drawChar(cursor_x, cursor_y, c, textcolor, textbgcolor); + cursor_x += textsize_x * w; + } + } + } + return 1; +} + +/**************************************************************************/ +/*! + @brief Set text 'magnification' size. Each increase in s makes 1 pixel that much bigger. + @param s Desired text size. 1 is default 6x8, 2 is 12x16, 3 is 18x24, etc +*/ +/**************************************************************************/ +void Arduino_GFX::setTextSize(uint8_t s) +{ + setTextSize(s, s, 0); +} + +/**************************************************************************/ +/*! + @brief Set text 'magnification' size. Each increase in s makes 1 pixel that much bigger. + @param s_x Desired text width magnification level in X-axis. 1 is default + @param s_y Desired text width magnification level in Y-axis. 1 is default +*/ +/**************************************************************************/ +void Arduino_GFX::setTextSize(uint8_t s_x, uint8_t s_y) +{ + setTextSize(s_x, s_y, 0); +} + +/**************************************************************************/ +/*! + @brief Set text 'magnification' size. Each increase in s makes 1 pixel that much bigger. + @param s_x Desired text width magnification level in X-axis. 1 is default + @param s_y Desired text width magnification level in Y-axis. 1 is default + @param pixel_margin Margin for each text pixel. 0 is default +*/ +/**************************************************************************/ +void Arduino_GFX::setTextSize(uint8_t s_x, uint8_t s_y, uint8_t pixel_margin) +{ + text_pixel_margin = ((pixel_margin < s_x) && (pixel_margin < s_y)) ? pixel_margin : 0; + textsize_x = (s_x > 0) ? s_x : 1; + textsize_y = (s_y > 0) ? s_y : 1; +} + +/**************************************************************************/ +/*! + @brief Set rotation setting for display + @param r 0 thru 3 corresponding to 4 cardinal rotations +*/ +/**************************************************************************/ +void Arduino_GFX::setRotation(uint8_t r) +{ + _rotation = (r & 3); + switch (_rotation) + { + case 0: + case 2: + _width = WIDTH; + _height = HEIGHT; + _max_x = _width - 1; ///< x zero base bound + _max_y = _height - 1; ///< y zero base bound + break; + case 1: + case 3: + _width = HEIGHT; + _height = WIDTH; + _max_x = _width - 1; ///< x zero base bound + _max_y = _height - 1; ///< y zero base bound + break; + } +} + +/**************************************************************************/ +/*! + @brief Set the font to display when print()ing, either custom or default + @param f The GFXfont object, if NULL use built in 6x8 font +*/ +/**************************************************************************/ +void Arduino_GFX::setFont(const GFXfont *f) +{ + if (f) + { // Font struct pointer passed in? + if (!gfxFont) + { // And no current font struct? + // Switching from classic to new font behavior. + // Move cursor pos down 6 pixels so it's on baseline. + cursor_y += 6; + } + } + else if (gfxFont) + { // NULL passed. Current font struct defined? + // Switching from new to classic font behavior. + // Move cursor pos up 6 pixels so it's at top-left of char. + cursor_y -= 6; + } + gfxFont = (GFXfont *)f; +} + +/**************************************************************************/ +/*! + @brief Helper to determine size of a character with current font/size. + Broke this out as it's used by both the PROGMEM- and RAM-resident getTextBounds() functions. + @param c The ascii character in question + @param x Pointer to x location of character + @param y Pointer to y location of character + @param minx Minimum clipping value for X + @param miny Minimum clipping value for Y + @param maxx Maximum clipping value for X + @param maxy Maximum clipping value for Y +*/ +/**************************************************************************/ +void Arduino_GFX::charBounds(char c, int16_t *x, int16_t *y, + int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy) +{ + if (gfxFont) + { + if (c == '\n') + { // Newline? + *x = 0; // Reset x to zero, advance y by one line + *y += textsize_y * (uint8_t)pgm_read_byte(&gfxFont->yAdvance); + } + else if (c != '\r') + { // Not a carriage return; is normal char + uint8_t first = pgm_read_byte(&gfxFont->first), + last = pgm_read_byte(&gfxFont->last); + if ((c >= first) && (c <= last)) + { // Char present in this font? + GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c - first); + uint8_t gw = pgm_read_byte(&glyph->width), + gh = pgm_read_byte(&glyph->height), + xa = pgm_read_byte(&glyph->xAdvance); + int8_t xo = pgm_read_byte(&glyph->xOffset), + yo = pgm_read_byte(&glyph->yOffset); + if (wrap && ((*x + (((int16_t)xo + gw) * textsize_x) - 1) > _max_x)) + { + *x = 0; // Reset x to zero, advance y by one line + *y += textsize_y * (uint8_t)pgm_read_byte(&gfxFont->yAdvance); + } + int16_t tsx = (int16_t)textsize_x, + tsy = (int16_t)textsize_y, + x1 = *x + xo * tsx, + y1 = *y + yo * tsy, + x2 = x1 + gw * tsx - 1, + y2 = y1 + gh * tsy - 1; + if (x1 < *minx) + { + *minx = x1; + } + if (y1 < *miny) + { + *miny = y1; + } + if (x2 > *maxx) + { + *maxx = x2; + } + if (y2 > *maxy) + { + *maxy = y2; + } + *x += xa * tsx; + } + } + } + else + { // Default font + + if (c == '\n') + { // Newline? + *x = 0; // Reset x to zero, + *y += textsize_y * 8; // advance y one line + // min/max x/y unchaged -- that waits for next 'normal' character + } + else if (c != '\r') + { // Normal char; ignore carriage returns + if (wrap && ((*x + (textsize_x * 6) - 1) > _max_x)) + { // Off right? + *x = 0; // Reset x to zero, + *y += textsize_y * 8; // advance y one line + } + int16_t x2 = *x + textsize_x * 6 - 1; // Lower-right pixel of char + int16_t y2 = *y + textsize_y * 8 - 1; + if (x2 > *maxx) + { + *maxx = x2; // Track max x, y + } + if (y2 > *maxy) + { + *maxy = y2; + } + if (*x < *minx) + { + *minx = *x; // Track min x, y + } + if (*y < *miny) + { + *miny = *y; + } + *x += textsize_x * 6; // Advance x one char + } + } +} + +/**************************************************************************/ +/*! + @brief Helper to determine size of a string with current font/size. Pass string and a cursor position, returns UL corner and W,H. + @param str The ascii string to measure + @param x The current cursor X + @param y The current cursor Y + @param x1 The boundary X coordinate, set by function + @param y1 The boundary Y coordinate, set by function + @param w The boundary width, set by function + @param h The boundary height, set by function +*/ +/**************************************************************************/ +void Arduino_GFX::getTextBounds(const char *str, int16_t x, int16_t y, + int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) +{ + uint8_t c; // Current character + + *x1 = x; + *y1 = y; + *w = *h = 0; + + int16_t minx = _width, miny = _height, maxx = -1, maxy = -1; + + while ((c = *str++)) + { + charBounds(c, &x, &y, &minx, &miny, &maxx, &maxy); + } + + if (maxx >= minx) + { + *x1 = minx; + *w = maxx - minx + 1; + } + if (maxy >= miny) + { + *y1 = miny; + *h = maxy - miny + 1; + } +} + +/**************************************************************************/ +/*! + @brief Helper to determine size of a string with current font/size. Pass string and a cursor position, returns UL corner and W,H. + @param str The ascii string to measure (as an arduino String() class) + @param x The current cursor X + @param y The current cursor Y + @param x1 The boundary X coordinate, set by function + @param y1 The boundary Y coordinate, set by function + @param w The boundary width, set by function + @param h The boundary height, set by function +*/ +/**************************************************************************/ +void Arduino_GFX::getTextBounds(const String &str, int16_t x, int16_t y, + int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) +{ + if (str.length() != 0) + { + getTextBounds(const_cast(str.c_str()), x, y, x1, y1, w, h); + } +} + +/**************************************************************************/ +/*! + @brief Helper to determine size of a PROGMEM string with current font/size. Pass string and a cursor position, returns UL corner and W,H. + @param str The flash-memory ascii string to measure + @param x The current cursor X + @param y The current cursor Y + @param x1 The boundary X coordinate, set by function + @param y1 The boundary Y coordinate, set by function + @param w The boundary width, set by function + @param h The boundary height, set by function +*/ +/**************************************************************************/ +void Arduino_GFX::getTextBounds(const __FlashStringHelper *str, + int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h) +{ + uint8_t *s = (uint8_t *)str, c; + + *x1 = x; + *y1 = y; + *w = *h = 0; + + int16_t minx = _width, miny = _height, maxx = -1, maxy = -1; + + while ((c = pgm_read_byte(s++))) + charBounds(c, &x, &y, &minx, &miny, &maxx, &maxy); + + if (maxx >= minx) + { + *x1 = minx; + *w = maxx - minx + 1; + } + if (maxy >= miny) + { + *y1 = miny; + *h = maxy - miny + 1; + } +} + +/**************************************************************************/ +/*! + @brief Invert the display (ideally using built-in hardware command) + @param i True if you want to invert, false to make 'normal' +*/ +/**************************************************************************/ +void Arduino_GFX::invertDisplay(bool i) +{ + // Do nothing, must be subclassed if supported by hardware + UNUSED(i); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.h new file mode 100644 index 0000000..dd4effa --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX.h @@ -0,0 +1,369 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_GFX_H_ +#define _ARDUINO_GFX_H_ + +#if ARDUINO >= 100 +#include +#include +#else +#include "WProgram.h" +#endif +#include "Arduino_G.h" +#include "Arduino_DataBus.h" +#include "gfxfont.h" + +#ifndef DEGTORAD +#define DEGTORAD 0.017453292519943295769236907684886F +#endif + +// Color definitions +#define BLACK 0x0000 ///< 0, 0, 0 +#define NAVY 0x000F ///< 0, 0, 123 +#define DARKGREEN 0x03E0 ///< 0, 125, 0 +#define DARKCYAN 0x03EF ///< 0, 125, 123 +#define MAROON 0x7800 ///< 123, 0, 0 +#define PURPLE 0x780F ///< 123, 0, 123 +#define OLIVE 0x7BE0 ///< 123, 125, 0 +#define LIGHTGREY 0xC618 ///< 198, 195, 198 +#define DARKGREY 0x7BEF ///< 123, 125, 123 +#define BLUE 0x001F ///< 0, 0, 255 +#define GREEN 0x07E0 ///< 0, 255, 0 +#define CYAN 0x07FF ///< 0, 255, 255 +#define RED 0xF800 ///< 255, 0, 0 +#define MAGENTA 0xF81F ///< 255, 0, 255 +#define YELLOW 0xFFE0 ///< 255, 255, 0 +#define WHITE 0xFFFF ///< 255, 255, 255 +#define ORANGE 0xFD20 ///< 255, 165, 0 +#define GREENYELLOW 0xAFE5 ///< 173, 255, 41 +#define PINK 0xFC18 ///< 255, 130, 198 + +// Many (but maybe not all) non-AVR board installs define macros +// for compatibility with existing PROGMEM-reading AVR code. +// Do our own checks and defines here for good measure... + +#ifndef pgm_read_byte +#define pgm_read_byte(addr) (*(const unsigned char *)(addr)) +#endif +#ifndef pgm_read_word +#define pgm_read_word(addr) (*(const unsigned short *)(addr)) +#endif +#ifndef pgm_read_dword +#define pgm_read_dword(addr) (*(const unsigned long *)(addr)) +#endif + +// Pointers are a peculiar case...typically 16-bit on AVR boards, +// 32 bits elsewhere. Try to accommodate both... + +#if !defined(__INT_MAX__) || (__INT_MAX__ > 0xFFFF) +#define pgm_read_pointer(addr) ((void *)pgm_read_dword(addr)) +#else +#define pgm_read_pointer(addr) ((void *)pgm_read_word(addr)) +#endif + +#ifndef _swap_uint8_t +#define _swap_uint8_t(a, b) \ + { \ + uint8_t t = a; \ + a = b; \ + b = t; \ + } +#endif + +#ifndef _swap_int16_t +#define _swap_int16_t(a, b) \ + { \ + int16_t t = a; \ + a = b; \ + b = t; \ + } +#endif + +#ifndef _diff +#define _diff(a, b) ((a > b) ? (a - b) : (b - a)) +#endif + +#ifndef _ordered_in_range +#define _ordered_in_range(v, a, b) ((a <= v) && (v <= b)) +#endif + +#ifndef _in_range +#define _in_range(v, a, b) ((a > b) ? _ordered_in_range(v, b, a) : _ordered_in_range(v, a, b)) +#endif + +INLINE GFXglyph *pgm_read_glyph_ptr(const GFXfont *gfxFont, uint8_t c) +{ +#ifdef __AVR__ + return &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]); +#else + // expression in __AVR__ section may generate "dereferencing type-punned pointer will break strict-aliasing rules" warning + // In fact, on other platforms (such as STM32) there is no need to do this pointer magic as program memory may be read in a usual way + // So expression may be simplified + return gfxFont->glyph + c; +#endif //__AVR__ +} + +INLINE uint8_t *pgm_read_bitmap_ptr(const GFXfont *gfxFont) +{ +#ifdef __AVR__ + return (uint8_t *)pgm_read_pointer(&gfxFont->bitmap); +#else + // expression in __AVR__ section generates "dereferencing type-punned pointer will break strict-aliasing rules" warning + // In fact, on other platforms (such as STM32) there is no need to do this pointer magic as program memory may be read in a usual way + // So expression may be simplified + return gfxFont->bitmap; +#endif //__AVR__ +} + +/// A generic graphics superclass that can handle all sorts of drawing. At a minimum you can subclass and provide drawPixel(). At a maximum you can do a ton of overriding to optimize. Used for any/all Adafruit displays! +class Arduino_GFX : public Print, public Arduino_G +{ +public: + Arduino_GFX(int16_t w, int16_t h); // Constructor + + // This MUST be defined by the subclass: + virtual void begin(int32_t speed = 0) = 0; + virtual void writePixelPreclipped(int16_t x, int16_t y, uint16_t color) = 0; + + // TRANSACTION API / CORE DRAW API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + virtual void startWrite(); + virtual void writePixel(int16_t x, int16_t y, uint16_t color); + virtual void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + virtual void writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void writeLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + virtual void endWrite(void); + virtual void flush(void); + + // CONTROL API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool i); + + // BASIC DRAW API + // These MAY be overridden by the subclass to provide device-specific + // optimized code. Otherwise 'generic' versions are used. + // It's good to implement those, even if using transaction API + void drawPixel(int16_t x, int16_t y, uint16_t color); + void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + void fillScreen(uint16_t color); + void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); + void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); + void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); + void drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); + void fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color); + void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color); + void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color); + void drawXBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color); + void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], const uint8_t mask[], int16_t w, int16_t h); + void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h); + void draw16bitRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], const uint8_t mask[], int16_t w, int16_t h); + void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, uint8_t *mask, int16_t w, int16_t h); + void draw24bitRGBBitmap(int16_t x, int16_t y, const uint8_t bitmap[], const uint8_t mask[], int16_t w, int16_t h); + void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint8_t *mask, int16_t w, int16_t h); + void getTextBounds(const char *string, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h); + void getTextBounds(const __FlashStringHelper *s, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h); + void getTextBounds(const String &str, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h); + void setTextSize(uint8_t s); + void setTextSize(uint8_t sx, uint8_t sy); + void setTextSize(uint8_t sx, uint8_t sy, uint8_t pixel_margin); + void setFont(const GFXfont *f = NULL); + + // adopt from LovyanGFX + void drawEllipse(int16_t x, int16_t y, int16_t rx, int16_t ry, uint16_t color); + void drawEllipseHelper(int32_t x, int32_t y, int32_t rx, int32_t ry, uint8_t cornername, uint16_t color); + void fillEllipse(int16_t x, int16_t y, int16_t rx, int16_t ry, uint16_t color); + void fillEllipseHelper(int32_t x, int32_t y, int32_t rx, int32_t ry, uint8_t cornername, int16_t delta, uint16_t color); + void drawArc(int16_t x, int16_t y, int16_t r1, int16_t r2, float start, float end, uint16_t color); + void fillArc(int16_t x, int16_t y, int16_t r1, int16_t r2, float start, float end, uint16_t color); + void fillArcHelper(int16_t cx, int16_t cy, int16_t oradius, int16_t iradius, float start, float end, uint16_t color); + +// TFT optimization code, too big for ATMEL family +#if defined(ESP32) + virtual void writeSlashLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + virtual void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + virtual void drawIndexedBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw16bitBeRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + virtual void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg); +#else // not defined(ESP32) + void writeSlashLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color, uint16_t bg); + void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + void drawIndexedBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h); + void draw16bitRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h); + void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + void draw16bitBeRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + void draw24bitRGBBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg); +#endif // defined(ESP32) + + /**********************************************************************/ + /*! + @brief Set text cursor location + @param x X coordinate in pixels + @param y Y coordinate in pixels + */ + /**********************************************************************/ + void setCursor(int16_t x, int16_t y) + { + cursor_x = x; + cursor_y = y; + } + + /**********************************************************************/ + /*! + @brief Set text font color with transparant background + @param c 16-bit 5-6-5 Color to draw text with + @note For 'transparent' background, background and foreground + are set to same color rather than using a separate flag. + */ + /**********************************************************************/ + void setTextColor(uint16_t c) { textcolor = textbgcolor = c; } + + /**********************************************************************/ + /*! + @brief Set text font color with custom background color + @param c 16-bit 5-6-5 Color to draw text with + @param bg 16-bit 5-6-5 Color to draw background/fill with + */ + /**********************************************************************/ + void setTextColor(uint16_t c, uint16_t bg) + { + textcolor = c; + textbgcolor = bg; + } + + /**********************************************************************/ + /*! + @brief Set whether text that is too long for the screen width should + automatically wrap around to the next line (else clip right). + @param w true for wrapping, false for clipping + */ + /**********************************************************************/ + void setTextWrap(bool w) { wrap = w; } + + /**********************************************************************/ + /*! + @brief Enable (or disable) Code Page 437-compatible charset. + There was an error in glcdfont.c for the longest time -- one + character (#176, the 'light shade' block) was missing -- this + threw off the index of every character that followed it. + But a TON of code has been written with the erroneous + character indices. By default, the library uses the original + 'wrong' behavior and old sketches will still work. Pass + 'true' to this function to use correct CP437 character values + in your code. + @param x true = enable (new behavior), false = disable (old behavior) + */ + /**********************************************************************/ + void cp437(bool x = true) { _cp437 = x; } + +#if ARDUINO >= 100 + virtual size_t write(uint8_t); +#else + virtual void write(uint8_t); +#endif + + /************************************************************************/ + /*! + @brief Get width of the display, accounting for current rotation + @returns Width in pixels + */ + /************************************************************************/ + int16_t width(void) const { return _width; }; + + /************************************************************************/ + /*! + @brief Get height of the display, accounting for current rotation + @returns Height in pixels + */ + /************************************************************************/ + int16_t height(void) const { return _height; } + + /************************************************************************/ + /*! + @brief Get rotation setting for display + @returns 0 thru 3 corresponding to 4 cardinal rotations + */ + /************************************************************************/ + uint8_t getRotation(void) const { return _rotation; } + + // get current cursor position (get rotation safe maximum values, + // using: width() for x, height() for y) + /************************************************************************/ + /*! + @brief Get text cursor X location + @returns X coordinate in pixels + */ + /************************************************************************/ + int16_t getCursorX(void) const { return cursor_x; } + + /************************************************************************/ + /*! + @brief Get text cursor Y location + @returns Y coordinate in pixels + */ + /************************************************************************/ + int16_t getCursorY(void) const { return cursor_y; }; + + /*! + @brief Given 8-bit red, green and blue values, return a 'packed' + 16-bit color value in '565' RGB format (5 bits red, 6 bits + green, 5 bits blue). This is just a mathematical operation, + no hardware is touched. + @param red 8-bit red brightnesss (0 = off, 255 = max). + @param green 8-bit green brightnesss (0 = off, 255 = max). + @param blue 8-bit blue brightnesss (0 = off, 255 = max). + @return 'Packed' 16-bit color value (565 format). + */ + uint16_t color565(uint8_t red, uint8_t green, uint8_t blue) + { + return ((red & 0xF8) << 8) | ((green & 0xFC) << 3) | (blue >> 3); + } + +protected: + void charBounds(char c, int16_t *x, int16_t *y, int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy); + int16_t + _width, ///< Display width as modified by current rotation + _height, ///< Display height as modified by current rotation + _max_x, ///< x zero base bound (_width - 1) + _max_y, ///< y zero base bound (_height - 1) + cursor_x, ///< x location to start print()ing text + cursor_y; ///< y location to start print()ing text + uint16_t + textcolor, ///< 16-bit background color for print() + textbgcolor; ///< 16-bit text color for print() + uint8_t + textsize_x, ///< Desired magnification in X-axis of text to print() + textsize_y, ///< Desired magnification in Y-axis of text to print() + text_pixel_margin, ///< Margin for each text pixel + _rotation; ///< Display rotation (0 thru 3) + bool + wrap, ///< If set, 'wrap' text at right edge of display + _cp437; ///< If set, use correct CP437 charset (default is off) + GFXfont + *gfxFont; ///< Pointer to special font +}; + +#endif // _Arduino_GFX_H diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX_Library.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX_Library.h new file mode 100644 index 0000000..a9e55ea --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_GFX_Library.h @@ -0,0 +1,36 @@ +#ifndef _ARDUINO_GFX_LIBRARIES_H_ +#define _ARDUINO_GFX_LIBRARIES_H_ + +#include "Arduino_DataBus.h" +#include "databus/Arduino_SWSPI.h" +#include "databus/Arduino_HWSPI.h" +#include "databus/Arduino_ESP32SPI.h" +#include "databus/Arduino_ESP32SPI_DMA.h" +#include "databus/Arduino_ESP32PAR8.h" +#include "databus/Arduino_ESP32PAR16.h" + +#include "Arduino_GFX.h" // Core graphics library +#include "canvas/Arduino_Canvas.h" // Canvas (framebuffer) library +#include "canvas/Arduino_Canvas_Indexed.h" // Indexed Color Canvas (framebuffer) library +#include "display/Arduino_GC9A01.h" // Hardware-specific library for GC9A01 +#include "display/Arduino_HX8347C.h" // Hardware-specific library for HX8347C +#include "display/Arduino_HX8347D.h" // Hardware-specific library for HX8347D +#include "display/Arduino_HX8352C.h" // Hardware-specific library for HX8352C +#include "display/Arduino_HX8357B.h" // Hardware-specific library for HX8357B +#include "display/Arduino_ILI9225.h" // Hardware-specific library for ILI9225 +#include "display/Arduino_ILI9341.h" // Hardware-specific library for ILI9341 +#include "display/Arduino_ILI9341_M5STACK.h" // Hardware-specific library for M5STACK +#include "display/Arduino_ILI9481_18bit.h" // Hardware-specific library for ILI9481 +#include "display/Arduino_ILI9486_18bit.h" // Hardware-specific library for ILI9486 +#include "display/Arduino_ILI9488_18bit.h" // Hardware-specific library for ILI9488 +#include "display/Arduino_JBT6K71.h" // Hardware-specific library for JBT6K71 +#include "display/Arduino_R61529.h" // Hardware-specific library for R61529 +#include "display/Arduino_SEPS525.h" // Hardware-specific library for SEPS525 +#include "display/Arduino_SSD1283A.h" // Hardware-specific library for SSD1283A +#include "display/Arduino_SSD1331.h" // Hardware-specific library for SSD1331 +#include "display/Arduino_SSD1351.h" // Hardware-specific library for SSD1351 +#include "display/Arduino_ST7735.h" // Hardware-specific library for ST7735 +#include "display/Arduino_ST7789.h" // Hardware-specific library for ST7789 +#include "display/Arduino_ST7796.h" // Hardware-specific library for ST7796 + +#endif // _ARDUINO_GFX_LIBRARIES_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.cpp new file mode 100644 index 0000000..64559b6 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.cpp @@ -0,0 +1,1122 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_DataBus.h" +#include "Arduino_GFX.h" +#include "Arduino_TFT.h" +#include "font/glcdfont.h" + +// TODO: temp move drawSlashLine() variables to static to avoid enable PSRAM performamce issue +static int16_t dx; +static int16_t dy; +static int16_t err; +static int16_t xs; +static int16_t step; +static int16_t len; + +Arduino_TFT::Arduino_TFT( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_GFX(w, h) +{ + _bus = bus; + _rst = rst; + _rotation = r; + _ips = ips; + WIDTH = w; + HEIGHT = h; + COL_OFFSET1 = col_offset1; + ROW_OFFSET1 = row_offset1; + COL_OFFSET2 = col_offset2; + ROW_OFFSET2 = row_offset2; +} + +void Arduino_TFT::begin(int32_t speed) +{ + if (_override_datamode >= 0) + { + _bus->begin(speed, _override_datamode); + } + else + { + _bus->begin(speed); + } + + if (_rst >= 0) + { + pinMode(_rst, OUTPUT); + digitalWrite(_rst, HIGH); + delay(120); + digitalWrite(_rst, LOW); + delay(120); + digitalWrite(_rst, HIGH); + delay(120); + } + + tftInit(); + setRotation(_rotation); // apply the setting rotation to the display + setAddrWindow(0, 0, _width, _height); +} + +void Arduino_TFT::startWrite() +{ + _bus->beginWrite(); +} + +void Arduino_TFT::writeColor(uint16_t color) +{ + _bus->write16(color); +} + +void Arduino_TFT::writePixelPreclipped(int16_t x, int16_t y, uint16_t color) +{ + writeAddrWindow(x, y, 1, 1); + writeColor(color); +} + +void Arduino_TFT::writeRepeat(uint16_t color, uint32_t len) +{ + _bus->writeRepeat(color, len); +} + +void Arduino_TFT::writePixels(uint16_t *data, uint32_t len) +{ + _bus->writePixels(data, len); +} + +void Arduino_TFT::writeBytes(uint8_t *data, uint32_t len) +{ + _bus->writeBytes(data, len); +} + +/*! + @brief Draw a vertical line on the display. Performs edge clipping and + rejection. Not self-contained; should follow startWrite(). + Typically used by higher-level graphics primitives; user code + shouldn't need to call this and is likely to use the self- + contained drawFastVLine() instead. + @param x Horizontal position of first point. + @param y Vertical position of first point. + @param h Line height in pixels (positive = below first point, + negative = above first point). + @param color 16-bit line color in '565' RGB format. +*/ +void Arduino_TFT::writeFastVLine(int16_t x, int16_t y, int16_t h, + uint16_t color) +{ + if (_ordered_in_range(x, 0, _max_x) && h) + { // X on screen, nonzero height + if (h < 0) + { // If negative height... + y += h + 1; // Move Y to top edge + h = -h; // Use positive height + } + if (y <= _max_y) + { // Not off bottom + int16_t y2 = y + h - 1; + if (y2 >= 0) + { // Not off top + // Line partly or fully overlaps screen + if (y < 0) + { + y = 0; + h = y2 + 1; + } // Clip top + if (y2 > _max_y) + { + h = _max_y - y + 1; + } // Clip bottom + writeFillRectPreclipped(x, y, 1, h, color); + } + } + } +} + +/*! + @brief Draw a horizontal line on the display. Performs edge clipping + and rejection. Not self-contained; should follow startWrite(). + Typically used by higher-level graphics primitives; user code + shouldn't need to call this and is likely to use the self- + contained drawFastHLine() instead. + @param x Horizontal position of first point. + @param y Vertical position of first point. + @param w Line width in pixels (positive = right of first point, + negative = point of first corner). + @param color 16-bit line color in '565' RGB format. +*/ +void Arduino_TFT::writeFastHLine(int16_t x, int16_t y, int16_t w, + uint16_t color) +{ + if (_ordered_in_range(y, 0, _max_y) && w) + { // Y on screen, nonzero width + if (w < 0) + { // If negative width... + x += w + 1; // Move X to left edge + w = -w; // Use positive width + } + if (x <= _max_x) + { // Not off right + int16_t x2 = x + w - 1; + if (x2 >= 0) + { // Not off left + // Line partly or fully overlaps screen + if (x < 0) + { + x = 0; + w = x2 + 1; + } // Clip left + if (x2 > _max_x) + { + w = _max_x - x + 1; + } // Clip right + writeFillRectPreclipped(x, y, w, 1, color); + } + } + } +} + +/*! + @brief A lower-level version of writeFillRect(). This version requires + all inputs are in-bounds, that width and height are positive, + and no part extends offscreen. NO EDGE CLIPPING OR REJECTION IS + PERFORMED. If higher-level graphics primitives are written to + handle their own clipping earlier in the drawing process, this + can avoid unnecessary function calls and repeated clipping + operations in the lower-level functions. + @param x Horizontal position of first corner. MUST BE WITHIN + SCREEN BOUNDS. + @param y Vertical position of first corner. MUST BE WITHIN SCREEN + BOUNDS. + @param w Rectangle width in pixels. MUST BE POSITIVE AND NOT + EXTEND OFF SCREEN. + @param h Rectangle height in pixels. MUST BE POSITIVE AND NOT + EXTEND OFF SCREEN. + @param color 16-bit fill color in '565' RGB format. + @note This is a new function, no graphics primitives besides rects + and horizontal/vertical lines are written to best use this yet. +*/ +void Arduino_TFT::writeFillRectPreclipped(int16_t x, int16_t y, + int16_t w, int16_t h, uint16_t color) +{ +#ifdef ESP8266 + yield(); +#endif + writeAddrWindow(x, y, w, h); + writeRepeat(color, (uint32_t)w * h); +} + +void Arduino_TFT::endWrite() +{ + _bus->endWrite(); +} + +/**************************************************************************/ +/*! + @brief Push a pixel, overwrite in subclasses if startWrite is defined! + @param color 16-bit 5-6-5 Color to fill with +*/ +/**************************************************************************/ +void Arduino_TFT::pushColor(uint16_t color) +{ + _bus->beginWrite(); + writeColor(color); + _bus->endWrite(); +} + +void Arduino_TFT::setAddrWindow(uint16_t x0, uint16_t y0, uint16_t w, + uint16_t h) +{ + startWrite(); + + writeAddrWindow(x0, y0, w, h); + + endWrite(); +} + +/**************************************************************************/ +/*! + @brief Set rotation setting for display + @param x 0 thru 3 corresponding to 4 cardinal rotations +*/ +/**************************************************************************/ +void Arduino_TFT::setRotation(uint8_t r) +{ + Arduino_GFX::setRotation(r); + switch (_rotation) + { + case 0: + _xStart = COL_OFFSET1; + _yStart = ROW_OFFSET1; + break; + + case 1: + _xStart = ROW_OFFSET1; + _yStart = COL_OFFSET2; + break; + + case 2: + _xStart = COL_OFFSET2; + _yStart = ROW_OFFSET2; + break; + + case 3: + _xStart = ROW_OFFSET2; + _yStart = COL_OFFSET1; + break; + } +} + +// TFT optimization code, too big for ATMEL family +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + +/**************************************************************************/ +/*! + @brief Write a line. Bresenham's algorithm - thx wikpedia + @param x0 Start point x coordinate + @param y0 Start point y coordinate + @param x1 End point x coordinate + @param y1 End point y coordinate + @param color 16-bit 5-6-5 Color to draw with +*/ +/**************************************************************************/ +void Arduino_TFT::writeSlashLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, + uint16_t color) +{ + bool steep = _diff(y1, y0) > _diff(x1, x0); + if (steep) + { + _swap_int16_t(x0, y0); + _swap_int16_t(x1, y1); + } + + if (x0 > x1) + { + _swap_int16_t(x0, x1); + _swap_int16_t(y0, y1); + } + + dx = x1 - x0; + dy = _diff(y1, y0); + err = dx >> 1; + xs = x0; + step = (y0 < y1) ? 1 : -1; + len = 0; + + while (x0 <= x1) + { + x0++; + len++; + err -= dy; + if ((err < 0) || ((x0 > x1) && len)) + { + if (steep) + { + writeFillRectPreclipped(y0, xs, 1, len, color); + } + else + { + writeFillRectPreclipped(xs, y0, len, 1, color); + } + err += dx; + y0 += step; + len = 0; + xs = x0; + } + } +} + +// TFT tuned BITMAP / XBITMAP / GRAYSCALE / RGB BITMAP FUNCTIONS --------------------- + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_TFT::drawBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h, + uint16_t color, uint16_t bg) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawBitmap(x, y, bitmap, w, h, color, bg); + } + else + { + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); + } + writeColor((byte & 0x80) ? color : bg); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_TFT::drawBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawBitmap(x, y, bitmap, w, h, color, bg); + } + else + { + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = bitmap[j * byteWidth + i / 8]; + } + writeColor((byte & 0x80) ? color : bg); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::drawGrayscaleBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawGrayscaleBitmap(x, y, bitmap, w, h); + } + else + { + uint32_t len = (uint32_t)w * h; + uint8_t v; + startWrite(); + writeAddrWindow(x, y, w, h); + for (uint32_t i = 0; i < len; i++) + { + v = (uint8_t)pgm_read_byte(&bitmap[i]); + writeColor(color565(v, v, v)); + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::drawGrayscaleBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawGrayscaleBitmap(x, y, bitmap, w, h); + } + else + { + uint32_t len = (uint32_t)w * h; + uint8_t v; + startWrite(); + writeAddrWindow(x, y, w, h); + while (len--) + { + v = *(bitmap++); + writeColor(color565(v, v, v)); + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a Indexed 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param bitmap byte array of Indexed color bitmap + @param color_index byte array of 16-bit color index + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::writeIndexedPixels(uint8_t *bitmap, uint16_t *color_index, uint32_t len) +{ + _bus->writeIndexedPixels(bitmap, color_index, len); +} + +/**************************************************************************/ +/*! + @brief Draw a Indexed 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param bitmap byte array of Indexed color bitmap + @param color_index byte array of 16-bit color index + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::writeIndexedPixelsDouble(uint8_t *bitmap, uint16_t *color_index, uint32_t len) +{ + _bus->writeIndexedPixelsDouble(bitmap, color_index, len); +} + +/**************************************************************************/ +/*! + @brief Draw a Indexed 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array of Indexed color bitmap + @param color_index byte array of 16-bit color index + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::drawIndexedBitmap(int16_t x, int16_t y, + uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawIndexedBitmap(x, y, bitmap, color_index, w, h); + } + else + { + uint32_t len = w * h; + startWrite(); + writeAddrWindow(x, y, w, h); + _bus->writeIndexedPixels(bitmap, color_index, len); + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::draw16bitRGBBitmap(int16_t x, int16_t y, + const uint16_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint32_t len = (uint32_t)w * h; + startWrite(); + writeAddrWindow(x, y, w, h); + for (uint32_t i = 0; i < len; i++) + { + writeColor(pgm_read_word(&bitmap[i])); + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::draw16bitRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + startWrite(); + writeAddrWindow(x, y, w, h); + _bus->writePixels(bitmap, (uint32_t)w * h); + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit Big Endian image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::draw16bitBeRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitBeRGBBitmap(x, y, bitmap, w, h); + } + else + { + startWrite(); + writeAddrWindow(x, y, w, h); + _bus->writeBytes((uint8_t *)bitmap, (uint32_t)w * h * 2); + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::draw24bitRGBBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw24bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint32_t len = (uint32_t)w * h; + uint32_t offset = 0; + startWrite(); + writeAddrWindow(x, y, w, h); + while (len--) + { + writeColor(color565(pgm_read_byte(&bitmap[offset]), pgm_read_byte(&bitmap[offset + 1]), pgm_read_byte(&bitmap[offset + 2]))); + offset += 3; + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT::draw24bitRGBBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw24bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint32_t len = (uint32_t)w * h; + uint32_t offset = 0; + startWrite(); + writeAddrWindow(x, y, w, h); + while (len--) + { + writeColor(color565(bitmap[offset], bitmap[offset + 1], bitmap[offset + 2])); + offset += 3; + } + endWrite(); + } +} + +// Draw a character +/**************************************************************************/ +/*! + @brief Draw a single character + @param x Bottom left corner x coordinate + @param y Bottom left corner y coordinate + @param c The 8-bit font-indexed character (likely ascii) + @param color 16-bit 5-6-5 Color to draw chraracter with + @param bg 16-bit 5-6-5 Color to fill background with (if same as color, no background) +*/ +/**************************************************************************/ +void Arduino_TFT::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg) +{ + uint16_t block_w; + uint16_t block_h; + + if (!gfxFont) // 'Classic' built-in font + { + block_w = 6 * textsize_x; + block_h = 8 * textsize_y; + if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + block_w - 1) > _max_x) || // Clip right + ((y + block_h - 1) > _max_y) // Clip bottom + ) + { + // partial draw char by parent class + Arduino_GFX::drawChar(x, y, c, color, bg); + } + else + { + if (!_cp437 && (c >= 176)) + { + c++; // Handle 'classic' charset behavior + } + + uint8_t col[5]; + for (int8_t i = 0; i < 5; i++) + { + col[i] = pgm_read_byte(&font[c * 5 + i]); + } + + startWrite(); + if (bg != color) // have background color + { + writeAddrWindow(x, y, block_w, block_h); + + uint16_t line_buf[block_w]; + if (textsize_x == 1) + { + line_buf[5] = bg; // last column always bg + } + else + { + for (int8_t k = 0; k < textsize_x; k++) + { + line_buf[5 * textsize_x + k] = bg; + } + } + uint8_t bit = 1; + bool draw_dot; + + while (bit) + { + for (int8_t i = 0; i < 5; i++) + { + draw_dot = col[i] & bit; + if (textsize_x == 1) + { + line_buf[i] = (draw_dot) ? color : bg; + } + else + { + if (draw_dot) + { + for (int8_t k = 0; k < textsize_x; k++) + { + line_buf[i * textsize_x + k] = (k < (textsize_x - text_pixel_margin)) ? color : bg; + } + } + else + { + for (int8_t k = 0; k < textsize_x; k++) + { + line_buf[i * textsize_x + k] = bg; + } + } + } + } + if (textsize_y == 1) + { + writePixels(line_buf, block_w); + } + else + { + for (int8_t l = 0; l < textsize_y; l++) + { + if (l < (textsize_y - text_pixel_margin)) + { + writePixels(line_buf, block_w); + } + else + { + writeRepeat(bg, block_w); + } + } + } + bit <<= 1; + } + } + else // (bg == color), no background color + { + for (int8_t i = 0; i < 5; i++) + { // Char bitmap = 5 columns + uint8_t line = col[i]; + for (int8_t j = 0; j < 8; j++, line >>= 1) + { + if (line & 1) + { + if (textsize_x == 1 && textsize_y == 1) + { + writePixelPreclipped(x + i, y + j, color); + } + else + { + writeFillRectPreclipped(x + i * textsize_x, y + j * textsize_y, textsize_x - text_pixel_margin, textsize_y - text_pixel_margin, color); + } + } + } + } + } + endWrite(); + } + } + else // Custom font + { + // Character is assumed previously filtered by write() to eliminate + // newlines, returns, non-printable characters, etc. Calling + // drawChar() directly with 'bad' characters of font may cause mayhem! + uint8_t first = pgm_read_byte(&gfxFont->first); + GFXglyph *glyph = pgm_read_glyph_ptr(gfxFont, c - first); + uint8_t *bitmap = pgm_read_bitmap_ptr(gfxFont); + + uint16_t bo = pgm_read_word(&glyph->bitmapOffset); + uint8_t w = pgm_read_byte(&glyph->width), + h = pgm_read_byte(&glyph->height), + xAdvance = pgm_read_byte(&glyph->xAdvance), + yAdvance = pgm_read_byte(&gfxFont->yAdvance), + baseline = yAdvance * 2 / 3; // TODO: baseline is an arbitrary currently, may be define in font file + int8_t xo = pgm_read_byte(&glyph->xOffset), + yo = pgm_read_byte(&glyph->yOffset); + uint8_t xx, yy, bits = 0, bit = 0; + int16_t xo16 = xo, yo16 = yo; + + if (xAdvance < w) + { + xAdvance = w; // Don't know why it exists + } + + block_w = xAdvance * textsize_x; + block_h = yAdvance * textsize_y; + int16_t x1 = (xo < 0) ? (x + xo) : x; + if ( + (x1 < 0) || // Clip left + ((y - baseline) < 0) || // Clip top + ((x1 + block_w - 1) > _max_x) || // Clip right + ((y - baseline + block_h - 1) > _max_y) // Clip bottom + ) + { + // partial draw char by parent class + Arduino_GFX::drawChar(x, y, c, color, bg); + } + else + { + // NOTE: Different from Adafruit_GFX design, Adruino_GFX also cater background. + // Since it may introduce many ugly output, it should limited using on mono font only. + if (xo < 0) // padding X offset to >= 0 + { + x += xo; + xo = 0; + } + + startWrite(); + if (bg != color) // have background color + { + writeAddrWindow(x, y - (baseline * textsize_y), block_w, block_h); + + uint16_t line_buf[block_w]; + int8_t i; + bool draw_dot; + for (yy = 0; yy < yAdvance; yy++) + { + if ((yy < (baseline + yo)) || (yy > (baseline + yo + h - 1))) + { + writeRepeat(bg, block_w * textsize_y); + } + else + { + i = 0; + for (xx = 0; xx < xAdvance; xx++) + { + if ((xx < xo) || (xx > (xo + w - 1))) + { + draw_dot = false; + } + else + { + if (!(bit++ & 7)) + { + bits = pgm_read_byte(&bitmap[bo++]); + } + draw_dot = bits & 0x80; + bits <<= 1; + } + + if (textsize_x == 1) + { + line_buf[i++] = draw_dot ? color : bg; + } + else + { + if (draw_dot) + { + for (int8_t k = 0; k < textsize_x; k++) + { + line_buf[i++] = (k < (textsize_x - text_pixel_margin)) ? color : bg; + } + } + else + { + for (int8_t k = 0; k < textsize_x; k++) + { + line_buf[i++] = bg; + } + } + } + } + if (textsize_y == 1) + { + writePixels(line_buf, block_w); + } + else + { + for (int8_t l = 0; l < textsize_y; l++) + { + if (l < (textsize_y - text_pixel_margin)) + { + writePixels(line_buf, block_w); + } + else + { + writeRepeat(bg, block_w); + } + } + } + } + } + } + else // (bg == color), no background color + { + for (yy = 0; yy < h; yy++) + { + for (xx = 0; xx < w; xx++) + { + if (!(bit++ & 7)) + { + bits = pgm_read_byte(&bitmap[bo++]); + } + if (bits & 0x80) + { + if (textsize_x == 1 && textsize_y == 1) + { + writePixelPreclipped(x + xo + xx, y + yo + yy, color); + } + else + { + writeFillRectPreclipped(x + (xo16 + xx) * textsize_x, y + (yo16 + yy) * textsize_y, + textsize_x - text_pixel_margin, textsize_y - text_pixel_margin, color); + } + } + bits <<= 1; + } + } + } + endWrite(); + } + } // End classic vs custom font +} + +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.h new file mode 100644 index 0000000..bf4d619 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT.h @@ -0,0 +1,73 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_TFT_H_ +#define _ARDUINO_TFT_H_ + +#include "Arduino_DataBus.h" +#include "Arduino_GFX.h" + +class Arduino_TFT : public Arduino_GFX +{ +public: + Arduino_TFT(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips, int16_t w, int16_t h, uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2); + + // This MUST be defined by the subclass: + // and also protected function: tftInit() + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) = 0; + virtual void invertDisplay(bool) = 0; + virtual void displayOn() = 0; + virtual void displayOff() = 0; + + virtual void begin(int32_t speed = 0); + virtual void startWrite(void); + virtual void writeColor(uint16_t color); + virtual void writePixelPreclipped(int16_t x, int16_t y, uint16_t color); + virtual void writeRepeat(uint16_t color, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t size); + virtual void writeBytes(uint8_t *data, uint32_t size); + virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); + virtual void endWrite(void); + + virtual void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void pushColor(uint16_t color); + + virtual void setRotation(uint8_t r); + +// TFT optimization code, too big for ATMEL family +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + virtual void writeIndexedPixels(uint8_t *bitmap, uint16_t *color_index, uint32_t len); + virtual void writeIndexedPixelsDouble(uint8_t *bitmap, uint16_t *color_index, uint32_t len); + virtual void writeSlashLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); + virtual void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + virtual void drawIndexedBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw16bitBeRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + virtual void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg); +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + +protected: + Arduino_DataBus *_bus; + int8_t _rst; + uint8_t COL_OFFSET1, ROW_OFFSET1; + uint8_t COL_OFFSET2, ROW_OFFSET2; + uint8_t _xStart, _yStart; + uint16_t _currentX = 0xFFFF, _currentY = 0xFFFF; + uint16_t _currentW = 0xFFFF, _currentH = 0xFFFF; + virtual void tftInit() = 0; + bool _ips; + int8_t _override_datamode = -1; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.cpp new file mode 100644 index 0000000..058d1f9 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.cpp @@ -0,0 +1,576 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_DataBus.h" +#include "Arduino_GFX.h" +#include "Arduino_TFT_18bit.h" + +Arduino_TFT_18bit::Arduino_TFT_18bit( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_TFT_18bit::writeColor(uint16_t color) +{ + _bus->write((color & 0xF800) >> 8); + _bus->write((color & 0x07E0) >> 3); + _bus->write((color & 0x001F) << 3); +} + +void Arduino_TFT_18bit::writeRepeat(uint16_t color, uint32_t len) +{ +#if defined(ESP8266) || defined(ESP32) + uint8_t c[3] = {(uint8_t)((color & 0xF800) >> 8), (uint8_t)((color & 0x07E0) >> 3), (uint8_t)((color & 0x001F) << 3)}; + _bus->writePattern(c, 3, len); +#else + uint8_t c1 = (uint8_t)((color & 0xF800) >> 8); + uint8_t c2 = (uint8_t)((color & 0x07E0) >> 3); + uint8_t c3 = (uint8_t)((color & 0x001F) << 3); + while (len--) + { + _bus->write(c1); + _bus->write(c2); + _bus->write(c3); + } +#endif +} + +void Arduino_TFT_18bit::writePixels(uint16_t *data, uint32_t len) +{ + uint16_t d; + while (len--) + { + d = *data++; + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } +} + +// TFT optimization code, too big for ATMEL family +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + +// TFT tuned BITMAP / XBITMAP / GRAYSCALE / RGB BITMAP FUNCTIONS --------------------- + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::drawBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h, + uint16_t color, uint16_t bg) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawBitmap(x, y, bitmap, w, h, color, bg); + } + else + { + uint16_t d; + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = pgm_read_byte(&bitmap[j * byteWidth + i / 8]); + } + d = (byte & 0x80) ? color : bg; + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 1-bit image at the specified (x,y) position, using the specified foreground (for set bits) and background (unset bits) colors. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with monochrome bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels + @param color 16-bit 5-6-5 Color to draw pixels with + @param bg 16-bit 5-6-5 Color to draw background with +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::drawBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawBitmap(x, y, bitmap, w, h, color, bg); + } + else + { + uint16_t d; + int16_t byteWidth = (w + 7) / 8; // Bitmap scanline pad = whole byte + uint8_t byte = 0; + + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + if (i & 7) + { + byte <<= 1; + } + else + { + byte = bitmap[j * byteWidth + i / 8]; + } + d = (byte & 0x80) ? color : bg; + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::drawGrayscaleBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawGrayscaleBitmap(x, y, bitmap, w, h); + } + else + { + uint8_t v; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + v = (uint8_t)pgm_read_byte(&bitmap[j * w + i]); + _bus->write(v); + _bus->write(v); + _bus->write(v); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 8-bit image (grayscale) at the specified (x,y) pos. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with grayscale bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::drawGrayscaleBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawGrayscaleBitmap(x, y, bitmap, w, h); + } + else + { + uint8_t v; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + v = bitmap[j * w + i]; + _bus->write(v); + _bus->write(v); + _bus->write(v); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a Indexed 16-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::drawIndexedBitmap(int16_t x, int16_t y, + uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::drawIndexedBitmap(x, y, bitmap, color_index, w, h); + } + else + { + uint16_t d; + uint32_t len = w * h; + startWrite(); + writeAddrWindow(x, y, w, h); + while (len--) + { + d = color_index[*(bitmap++)]; + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::draw16bitRGBBitmap(int16_t x, int16_t y, + const uint16_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint16_t d; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + d = pgm_read_word(&bitmap[j * w + i]); + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::draw16bitRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint16_t d; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + d = bitmap[j * w + i]; + _bus->write((d & 0xF800) >> 8); + _bus->write((d & 0x07E0) >> 3); + _bus->write((d & 0x001F) << 3); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 16-bit Big Endian image (RGB 5/6/5) at the specified (x,y) position. + For 16-bit display devices; no color reduction performed. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::draw16bitBeRGBBitmap(int16_t x, int16_t y, + uint16_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw16bitBeRGBBitmap(x, y, bitmap, w, h); + } + else + { + uint16_t d; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + d = bitmap[j * w + i]; + _bus->write((d & 0x00F8)); + _bus->write(((d & 0xE000) >> 11) | (d & 0x0007) << 5); + _bus->write((d & 0x1F00) >> 5); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a PROGMEM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::draw24bitRGBBitmap(int16_t x, int16_t y, + const uint8_t bitmap[], int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw24bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + int16_t offset = 0; + startWrite(); + writeAddrWindow(x, y, w, h); + for (int16_t j = 0; j < h; j++, y++) + { + for (int16_t i = 0; i < w; i++) + { + _bus->write(pgm_read_byte(&bitmap[offset++])); + _bus->write(pgm_read_byte(&bitmap[offset++])); + _bus->write(pgm_read_byte(&bitmap[offset++])); + } + } + endWrite(); + } +} + +/**************************************************************************/ +/*! + @brief Draw a RAM-resident 24-bit image (RGB 5/6/5) at the specified (x,y) position. + @param x Top left corner x coordinate + @param y Top left corner y coordinate + @param bitmap byte array with 16-bit color bitmap + @param w Width of bitmap in pixels + @param h Height of bitmap in pixels +*/ +/**************************************************************************/ +void Arduino_TFT_18bit::draw24bitRGBBitmap(int16_t x, int16_t y, + uint8_t *bitmap, int16_t w, int16_t h) +{ + if ( + ((x + w - 1) < 0) || // Outside left + ((y + h - 1) < 0) || // Outside top + (x > _max_x) || // Outside right + (y > _max_y) // Outside bottom + ) + { + return; + } + else if ( + (x < 0) || // Clip left + (y < 0) || // Clip top + ((x + w - 1) > _max_x) || // Clip right + ((y + h - 1) > _max_y) // Clip bottom + ) + { + Arduino_GFX::draw24bitRGBBitmap(x, y, bitmap, w, h); + } + else + { + startWrite(); + writeAddrWindow(x, y, w, h); + _bus->writeBytes(bitmap, w * h * 3); + endWrite(); + } +} + +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.h new file mode 100644 index 0000000..fe76274 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/Arduino_TFT_18bit.h @@ -0,0 +1,45 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_TFT_18BIT_H_ +#define _ARDUINO_TFT_18BIT_H_ + +#include "Arduino_DataBus.h" +#include "Arduino_GFX.h" +#include "Arduino_TFT.h" + +class Arduino_TFT_18bit : public Arduino_TFT +{ +public: + Arduino_TFT_18bit(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips, int16_t w, int16_t h, uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2); + + virtual void writeColor(uint16_t color); + virtual void writeRepeat(uint16_t color, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) = 0; + + virtual void invertDisplay(bool) = 0; + virtual void displayOn() = 0; + virtual void displayOff() = 0; + +// TFT optimization code, too big for ATMEL family +#if defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + virtual void drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void drawGrayscaleBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); + virtual void drawIndexedBitmap(int16_t x, int16_t y, uint8_t *bitmap, uint16_t *color_index, int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, const uint16_t bitmap[], int16_t w, int16_t h); + virtual void draw16bitRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw16bitBeRGBBitmap(int16_t x, int16_t y, uint16_t *bitmap, int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h); + virtual void draw24bitRGBBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h); +#endif // defined(ARDUINO_ARCH_SAMD) || defined(ESP8266) || defined(ESP32) + +protected: + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.cpp new file mode 100644 index 0000000..e3bd949 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.cpp @@ -0,0 +1,120 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "../Arduino_GFX.h" +#include "Arduino_Canvas.h" + +Arduino_Canvas::Arduino_Canvas(int16_t w, int16_t h, Arduino_G *output, int16_t output_x, int16_t output_y) + : Arduino_GFX(w, h), _output(output), _output_x(output_x), _output_y(output_y) +{ +} + +void Arduino_Canvas::begin(int32_t speed) +{ +#if defined(ESP32) + if (psramFound()) + { + _framebuffer = (uint16_t *)ps_malloc(_width * _height * 2); + } + else + { + // _framebuffer = (uint16_t *)malloc(_width * _height * 2); + // hack for allocate memory over 63,360 pixels + _framebuffer = (uint16_t *)malloc(_width * _height); + uint16_t *tmp = (uint16_t *)malloc(_width * _height); + log_v("_framebuffer delta: %d", tmp - _framebuffer); + } +#else + _framebuffer = (uint16_t *)malloc(_width * _height * 2); +#endif + if (!_framebuffer) + { + Serial.println(F("_framebuffer allocation failed.")); + } + _output->begin(speed); + _output->fillScreen(BLACK); +} + +void Arduino_Canvas::writePixelPreclipped(int16_t x, int16_t y, uint16_t color) +{ + _framebuffer[((int32_t)y * _width) + x] = color; +} + +void Arduino_Canvas::writeFastVLine(int16_t x, int16_t y, + int16_t h, uint16_t color) +{ + if (_ordered_in_range(x, 0, _max_x) && h) + { // X on screen, nonzero height + if (h < 0) + { // If negative height... + y += h + 1; // Move Y to top edge + h = -h; // Use positive height + } + if (y <= _max_y) + { // Not off bottom + int16_t y2 = y + h - 1; + if (y2 >= 0) + { // Not off top + // Line partly or fully overlaps screen + if (y < 0) + { + y = 0; + h = y2 + 1; + } // Clip top + if (y2 > _max_y) + { + h = _max_y - y + 1; + } // Clip bottom + + uint16_t *fb = _framebuffer + ((int32_t)y * _width) + x; + while (h--) + { + *fb = color; + fb += _width; + } + } + } + } +} + +void Arduino_Canvas::writeFastHLine(int16_t x, int16_t y, + int16_t w, uint16_t color) +{ + if (_ordered_in_range(y, 0, _max_y) && w) + { // Y on screen, nonzero width + if (w < 0) + { // If negative width... + x += w + 1; // Move X to left edge + w = -w; // Use positive width + } + if (x <= _max_x) + { // Not off right + int16_t x2 = x + w - 1; + if (x2 >= 0) + { // Not off left + // Line partly or fully overlaps screen + if (x < 0) + { + x = 0; + w = x2 + 1; + } // Clip left + if (x2 > _max_x) + { + w = _max_x - x + 1; + } // Clip right + + uint16_t *fb = _framebuffer + ((int32_t)y * _width) + x; + while (w--) + { + *(fb++) = color; + } + } + } + } +} + +void Arduino_Canvas::flush() +{ + _output->draw16bitRGBBitmap(_output_x, _output_y, _framebuffer, _width, _height); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.h new file mode 100644 index 0000000..222b947 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas.h @@ -0,0 +1,29 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _Arduino_CANVAS_H_ +#define _Arduino_CANVAS_H_ + +#include "../Arduino_GFX.h" + +class Arduino_Canvas : public Arduino_GFX +{ +public: + Arduino_Canvas(int16_t w, int16_t h, Arduino_G *output, int16_t output_x = 0, int16_t output_y = 0); + + virtual void begin(int32_t speed = 0); + virtual void writePixelPreclipped(int16_t x, int16_t y, uint16_t color); + virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void flush(void); + +protected: + uint16_t *_framebuffer; + Arduino_G *_output; + int16_t _output_x, _output_y; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.cpp new file mode 100644 index 0000000..d317ba6 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.cpp @@ -0,0 +1,181 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "../Arduino_GFX.h" +#include "Arduino_Canvas_Indexed.h" + +Arduino_Canvas_Indexed::Arduino_Canvas_Indexed(int16_t w, int16_t h, Arduino_G *output, int16_t output_x, int16_t output_y, uint8_t mask_level) + : Arduino_GFX(w, h), _output(output), _output_x(output_x), _output_y(output_y) +{ + if (mask_level >= MAXMASKLEVEL) + { + mask_level = MAXMASKLEVEL - 1; + } + _current_mask_level = mask_level; + _color_mask = mask_level_list[_current_mask_level]; +} + +void Arduino_Canvas_Indexed::begin(int32_t speed) +{ +#if defined(ESP32) + if (psramFound()) + { + _framebuffer = (uint8_t *)ps_malloc(_width * _height); + } + else + { + _framebuffer = (uint8_t *)malloc(_width * _height); + } +#else + _framebuffer = (uint8_t *)malloc(_width * _height); +#endif + if (!_framebuffer) + { + Serial.println(F("_framebuffer allocation failed.")); + } + + _output->begin(speed); + _output->fillScreen(BLACK); +} + +void Arduino_Canvas_Indexed::writePixelPreclipped(int16_t x, int16_t y, uint16_t color) +{ + _framebuffer[((int32_t)y * _width) + x] = get_color_index(color); +} + +void Arduino_Canvas_Indexed::writeFastVLine(int16_t x, int16_t y, + int16_t h, uint16_t color) +{ + if (_ordered_in_range(x, 0, _max_x) && h) + { // X on screen, nonzero height + if (h < 0) + { // If negative height... + y += h + 1; // Move Y to top edge + h = -h; // Use positive height + } + if (y <= _max_y) + { // Not off bottom + int16_t y2 = y + h - 1; + if (y2 >= 0) + { // Not off top + // Line partly or fully overlaps screen + if (y < 0) + { + y = 0; + h = y2 + 1; + } // Clip top + if (y2 > _max_y) + { + h = _max_y - y + 1; + } // Clip bottom + + uint8_t idx = get_color_index(color); + + uint8_t *fb = _framebuffer + ((int32_t)y * _width) + x; + while (h--) + { + *fb = idx; + fb += _width; + } + } + } + } +} + +void Arduino_Canvas_Indexed::writeFastHLine(int16_t x, int16_t y, + int16_t w, uint16_t color) +{ + if (_ordered_in_range(y, 0, _max_y) && w) + { // Y on screen, nonzero width + if (w < 0) + { // If negative width... + x += w + 1; // Move X to left edge + w = -w; // Use positive width + } + if (x <= _max_x) + { // Not off right + int16_t x2 = x + w - 1; + if (x2 >= 0) + { // Not off left + // Line partly or fully overlaps screen + if (x < 0) + { + x = 0; + w = x2 + 1; + } // Clip left + if (x2 > _max_x) + { + w = _max_x - x + 1; + } // Clip right + + uint8_t idx = get_color_index(color); + + uint8_t *fb = _framebuffer + ((int32_t)y * _width) + x; + while (w--) + { + *(fb++) = idx; + } + } + } + } +} + +void Arduino_Canvas_Indexed::flush() +{ + _output->drawIndexedBitmap(_output_x, _output_y, _framebuffer, _color_index, _width, _height); +} + +uint8_t Arduino_Canvas_Indexed::get_color_index(uint16_t color) +{ + color &= _color_mask; + for (uint8_t i = 0; i < _indexed_size; i++) + { + if (_color_index[i] == color) + { + return i; + } + } + if (_indexed_size == (COLOR_IDX_SIZE - 1)) // overflowed + { + raise_mask_level(); + } + _color_index[_indexed_size] = color; + // Serial.print("color_index["); + // Serial.print(_indexed_size); + // Serial.print("] = "); + // Serial.println(color); + return _indexed_size++; +} + +uint16_t Arduino_Canvas_Indexed::get_index_color(uint8_t idx) +{ + return _color_index[idx]; +} + +void Arduino_Canvas_Indexed::raise_mask_level() +{ + if ((_current_mask_level + 1) < MAXMASKLEVEL) + { + int32_t buffer_size = _width * _height; + uint8_t old_indexed_size = _indexed_size; + uint8_t new_color; + _indexed_size = 0; + _color_mask = mask_level_list[++_current_mask_level]; + Serial.print("Raised mask level: "); + Serial.println(_current_mask_level); + + // update _framebuffer color index, it is a time consuming job + for (uint8_t old_color = 0; old_color < old_indexed_size; old_color++) + { + new_color = get_color_index(_color_index[old_color]); + for (int32_t i = 0; i < buffer_size; i++) + { + if (_framebuffer[i] == old_color) + { + _framebuffer[i] = new_color; + } + } + } + } +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.h new file mode 100644 index 0000000..957069c --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/canvas/Arduino_Canvas_Indexed.h @@ -0,0 +1,45 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _Arduino_CANVAS_INDEXED_H_ +#define _Arduino_CANVAS_INDEXED_H_ + +#include "../Arduino_GFX.h" + +#define COLOR_IDX_SIZE 256 + +class Arduino_Canvas_Indexed : public Arduino_GFX +{ +public: + Arduino_Canvas_Indexed(int16_t w, int16_t h, Arduino_G *output, int16_t output_x = 0, int16_t output_y = 0, uint8_t mask_level = 0); + + virtual void begin(int32_t speed = 0); + virtual void writePixelPreclipped(int16_t x, int16_t y, uint16_t color); + virtual void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); + virtual void writeFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); + virtual void flush(void); + + uint8_t get_color_index(uint16_t color); + uint16_t get_index_color(uint8_t idx); + void raise_mask_level(); + +protected: + uint8_t *_framebuffer; + Arduino_G *_output; + int16_t _output_x, _output_y; + uint16_t _color_index[COLOR_IDX_SIZE]; + uint8_t _indexed_size = 0; + uint8_t _current_mask_level; + uint16_t _color_mask; +#define MAXMASKLEVEL 3 + uint16_t mask_level_list[MAXMASKLEVEL] = { + 0b1111111111111111, // 16-bit, 65536 colors + 0b1111011110011110, // 12-bit, 4096 colors + 0b1100011000011000 // 7-bit, 128 colors + }; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.cpp new file mode 100644 index 0000000..6a49270 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.cpp @@ -0,0 +1,457 @@ +/* + * start rewrite from: + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + */ +#ifdef ESP32 + +#include "Arduino_DataBus.h" +#include "Arduino_ESP32PAR16.h" + +Arduino_ESP32PAR16::Arduino_ESP32PAR16( + int8_t dc, int8_t cs, int8_t wr, int8_t rd, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, int8_t d6, int8_t d7, + int8_t d8, int8_t d9, int8_t d10, int8_t d11, int8_t d12, int8_t d13, int8_t d14, int8_t d15) + : _dc(dc), _cs(cs), _wr(wr), _rd(rd), + _d0(d0), _d1(d1), _d2(d2), _d3(d3), _d4(d4), _d5(d5), _d6(d6), _d7(d7), + _d8(d8), _d9(d9), _d10(d10), _d11(d11), _d12(d12), _d13(d13), _d14(d14), _d15(d15) +{ +} + +void Arduino_ESP32PAR16::begin(int32_t speed, int8_t dataMode) +{ + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + if (_dc >= 32) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_dc >= 0) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // disable chip select + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + csPinMask = 0; + csPortSet = dcPortSet; + csPortClr = dcPortClr; + } + + pinMode(_wr, OUTPUT); + digitalWrite(_wr, HIGH); // Set write strobe high (inactive) + if (_wr >= 32) + { + wrPinMask = digitalPinToBitMask(_wr); + wrPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + wrPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_wr >= 0) + { + wrPinMask = digitalPinToBitMask(_wr); + wrPortSet = (PORTreg_t)&GPIO.out_w1ts; + wrPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_rd >= 0) + { + pinMode(_rd, OUTPUT); + digitalWrite(_rd, HIGH); + } + if (_rd >= 32) + { + rdPinMask = digitalPinToBitMask(_rd); + rdPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + rdPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_rd >= 0) + { + rdPinMask = digitalPinToBitMask(_rd); + rdPortSet = (PORTreg_t)&GPIO.out_w1ts; + rdPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + rdPinMask = 0; + rdPortSet = dcPortSet; + rdPortClr = dcPortClr; + } + + // TODO: check pin range 0-31 + pinMode(_d0, OUTPUT); + digitalWrite(_d0, HIGH); + pinMode(_d1, OUTPUT); + digitalWrite(_d1, HIGH); + pinMode(_d2, OUTPUT); + digitalWrite(_d2, HIGH); + pinMode(_d3, OUTPUT); + digitalWrite(_d3, HIGH); + pinMode(_d4, OUTPUT); + digitalWrite(_d4, HIGH); + pinMode(_d5, OUTPUT); + digitalWrite(_d5, HIGH); + pinMode(_d6, OUTPUT); + digitalWrite(_d6, HIGH); + pinMode(_d7, OUTPUT); + digitalWrite(_d7, HIGH); + pinMode(_d8, OUTPUT); + digitalWrite(_d8, HIGH); + pinMode(_d9, OUTPUT); + digitalWrite(_d9, HIGH); + pinMode(_d10, OUTPUT); + digitalWrite(_d10, HIGH); + pinMode(_d11, OUTPUT); + digitalWrite(_d11, HIGH); + pinMode(_d12, OUTPUT); + digitalWrite(_d12, HIGH); + pinMode(_d13, OUTPUT); + digitalWrite(_d13, HIGH); + pinMode(_d14, OUTPUT); + digitalWrite(_d14, HIGH); + pinMode(_d15, OUTPUT); + digitalWrite(_d15, HIGH); + + // INIT 16-bit mask + dataClrMask = (1 << _wr) | (1 << _d0) | (1 << _d1) | (1 << _d2) | (1 << _d3) | (1 << _d4) | (1 << _d5) | (1 << _d6) | (1 << _d7) | (1 << _d8) | (1 << _d9) | (1 << _d10) | (1 << _d11) | (1 << _d12) | (1 << _d13) | (1 << _d14) | (1 << _d15); + for (int32_t c = 0; c < 256; c++) + { + xset_mask_lo[c] = (1 << _wr); + if (c & 0x01) + { + xset_mask_lo[c] |= (1 << _d0); + } + if (c & 0x02) + { + xset_mask_lo[c] |= (1 << _d1); + } + if (c & 0x04) + { + xset_mask_lo[c] |= (1 << _d2); + } + if (c & 0x08) + { + xset_mask_lo[c] |= (1 << _d3); + } + if (c & 0x10) + { + xset_mask_lo[c] |= (1 << _d4); + } + if (c & 0x20) + { + xset_mask_lo[c] |= (1 << _d5); + } + if (c & 0x40) + { + xset_mask_lo[c] |= (1 << _d6); + } + if (c & 0x80) + { + xset_mask_lo[c] |= (1 << _d7); + } + } + for (int32_t c = 0; c < 256; c++) + { + xset_mask_hi[c] = 0; + if (c & 0x01) + { + xset_mask_hi[c] |= (1 << _d8); + } + if (c & 0x02) + { + xset_mask_hi[c] |= (1 << _d9); + } + if (c & 0x04) + { + xset_mask_hi[c] |= (1 << _d10); + } + if (c & 0x08) + { + xset_mask_hi[c] |= (1 << _d11); + } + if (c & 0x10) + { + xset_mask_hi[c] |= (1 << _d12); + } + if (c & 0x20) + { + xset_mask_hi[c] |= (1 << _d13); + } + if (c & 0x40) + { + xset_mask_hi[c] |= (1 << _d14); + } + if (c & 0x80) + { + xset_mask_hi[c] |= (1 << _d15); + } + } + dataPortSet = (PORTreg_t)&GPIO.out_w1ts; + dataPortClr = (PORTreg_t)&GPIO.out_w1tc; +} + +void Arduino_ESP32PAR16::beginWrite() +{ + DC_HIGH(); + CS_LOW(); +} + +void Arduino_ESP32PAR16::writeCommand(uint8_t c) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR16::writeCommand16(uint16_t c) +{ + DC_LOW(); + + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR16::writeCommand32(uint32_t c) +{ + DC_LOW(); + + WRITE(c >> 24); + WRITE(c >> 16); + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR16::write(uint8_t d) +{ + WRITE(d); +} + +void Arduino_ESP32PAR16::write16(uint16_t d) +{ + WRITE16(d); +} + +void Arduino_ESP32PAR16::write32(uint32_t d) +{ + WRITE(d >> 24); + WRITE(d >> 16); + WRITE(d >> 8); + WRITE(d); +} + +void Arduino_ESP32PAR16::writeC8D8(uint8_t c, uint8_t d) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d); +} + +void Arduino_ESP32PAR16::writeC8D16(uint8_t c, uint16_t d) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d >> 8); + WRITE(d); +} + +void Arduino_ESP32PAR16::writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d1 >> 8); + WRITE(d1); + WRITE(d2 >> 8); + WRITE(d2); +} + +void Arduino_ESP32PAR16::endWrite() +{ + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendCommand(uint8_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendCommand16(uint16_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendCommand32(uint32_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c >> 24); + WRITE(c >> 16); + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendData(uint8_t d) +{ + CS_LOW(); + + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendData16(uint16_t d) +{ + CS_LOW(); + + WRITE(d >> 8); + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::sendData32(uint32_t d) +{ + CS_LOW(); + + WRITE(d >> 24); + WRITE(d >> 16); + WRITE(d >> 8); + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR16::writeRepeat(uint16_t p, uint32_t len) +{ + uint32_t d = xset_mask_hi[p >> 8] | xset_mask_lo[p & 0xff]; + while (len--) + { + *dataPortClr = dataClrMask; + *dataPortSet = d; + } +} + +void Arduino_ESP32PAR16::writeBytes(uint8_t *data, uint32_t len) +{ + while (len--) + { + WRITE(*data++); + } +} + +void Arduino_ESP32PAR16::writePixels(uint16_t *data, uint32_t len) +{ + while (len--) + { + uint16_t d = *data++; + WRITE16(d); + } +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_ESP32PAR16::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ + while (repeat--) + { + writeBytes(data, len); + } +} + +/******** low level bit twiddling **********/ + +INLINE void Arduino_ESP32PAR16::WRITE(uint8_t d) +{ + *dataPortClr = dataClrMask; + *dataPortSet = xset_mask_lo[d]; +} + +INLINE void Arduino_ESP32PAR16::WRITE16(uint16_t d) +{ + *dataPortClr = dataClrMask; + *dataPortSet = xset_mask_hi[d >> 8] | xset_mask_lo[d & 0xff]; +} + +INLINE void Arduino_ESP32PAR16::DC_HIGH(void) +{ + *dcPortSet = dcPinMask; +} + +INLINE void Arduino_ESP32PAR16::DC_LOW(void) +{ + *dcPortClr = dcPinMask; +} + +INLINE void Arduino_ESP32PAR16::CS_HIGH(void) +{ + *csPortSet = csPinMask; +} + +INLINE void Arduino_ESP32PAR16::CS_LOW(void) +{ + *csPortClr = csPinMask; +} + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.h new file mode 100644 index 0000000..219be26 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR16.h @@ -0,0 +1,83 @@ +/* + * start rewrite from: + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + */ +#ifdef ESP32 +#ifndef _ARDUINO_ESP32PAR16_H_ +#define _ARDUINO_ESP32PAR16_H_ + +typedef volatile uint32_t *PORTreg_t; ///< PORT register type + +#include "Arduino_DataBus.h" + +class Arduino_ESP32PAR16 : public Arduino_DataBus +{ +public: + Arduino_ESP32PAR16( + int8_t dc, int8_t cs, int8_t wr, int8_t rd, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, int8_t d6, int8_t d7, + int8_t d8, int8_t d9, int8_t d10, int8_t d11, int8_t d12, int8_t d13, int8_t d14, int8_t d15); // Constructor + + virtual void begin(int32_t speed = 0, int8_t dataMode = 0); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeC8D8(uint8_t c, uint8_t d); + virtual void writeC8D16(uint8_t c, uint16_t d); + virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +protected: +private: + INLINE void WRITE(uint8_t d); + INLINE void WRITE16(uint16_t d); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + + int8_t _dc, _cs, _wr, _rd; + int8_t _d0, _d1, _d2, _d3, _d4, _d5, _d6, _d7; + int8_t _d8, _d9, _d10, _d11, _d12, _d13, _d14, _d15; + + PORTreg_t dcPortSet; ///< PORT register SET + PORTreg_t dcPortClr; ///< PORT register CLEAR + uint32_t dcPinMask; ///< Bitmask + + PORTreg_t csPortSet; ///< PORT register SET + PORTreg_t csPortClr; ///< PORT register CLEAR + uint32_t csPinMask; ///< Bitmask + + PORTreg_t wrPortSet; ///< PORT register SET + PORTreg_t wrPortClr; ///< PORT register CLEAR + uint32_t wrPinMask; ///< Bitmask + + PORTreg_t rdPortSet; ///< PORT register SET + PORTreg_t rdPortClr; ///< PORT register CLEAR + uint32_t rdPinMask; ///< Bitmask + + PORTreg_t dataPortSet; ///< PORT register SET + PORTreg_t dataPortClr; ///< PORT register CLEAR + uint32_t dataClrMask; + // Lookup table for ESP32 parallel bus interface uses 2kbyte RAM, + uint32_t xset_mask_lo[256]; + uint32_t xset_mask_hi[256]; +}; + +#endif // _ARDUINO_ESP32PAR16_H_ +#endif // #ifdef ESP32 diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.cpp new file mode 100644 index 0000000..1b4c1b5 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.cpp @@ -0,0 +1,418 @@ +/* + * start rewrite from: + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + */ +#ifdef ESP32 + +#include "Arduino_DataBus.h" +#include "Arduino_ESP32PAR8.h" + +// #define SET_DATA_AND_WR_AT_THE_SAME_TIME + +Arduino_ESP32PAR8::Arduino_ESP32PAR8( + int8_t dc, int8_t cs, int8_t wr, int8_t rd, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, int8_t d6, int8_t d7) + : _dc(dc), _cs(cs), _wr(wr), _rd(rd), + _d0(d0), _d1(d1), _d2(d2), _d3(d3), _d4(d4), _d5(d5), _d6(d6), _d7(d7) +{ +} + +void Arduino_ESP32PAR8::begin(int32_t speed, int8_t dataMode) +{ + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + if (_dc >= 32) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_dc >= 0) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // disable chip select + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + csPinMask = 0; + csPortSet = dcPortSet; + csPortClr = dcPortClr; + } + + pinMode(_wr, OUTPUT); + digitalWrite(_wr, HIGH); // Set write strobe high (inactive) + if (_wr >= 32) + { + wrPinMask = digitalPinToBitMask(_wr); + wrPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + wrPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_wr >= 0) + { + wrPinMask = digitalPinToBitMask(_wr); + wrPortSet = (PORTreg_t)&GPIO.out_w1ts; + wrPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_rd >= 0) + { + pinMode(_rd, OUTPUT); + digitalWrite(_rd, HIGH); + } + if (_rd >= 32) + { + rdPinMask = digitalPinToBitMask(_rd); + rdPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + rdPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_rd >= 0) + { + rdPinMask = digitalPinToBitMask(_rd); + rdPortSet = (PORTreg_t)&GPIO.out_w1ts; + rdPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + rdPinMask = 0; + rdPortSet = dcPortSet; + rdPortClr = dcPortClr; + } + + // TODO: check pin range 0-31 + pinMode(_d0, OUTPUT); + digitalWrite(_d0, HIGH); + pinMode(_d1, OUTPUT); + digitalWrite(_d1, HIGH); + pinMode(_d2, OUTPUT); + digitalWrite(_d2, HIGH); + pinMode(_d3, OUTPUT); + digitalWrite(_d3, HIGH); + pinMode(_d4, OUTPUT); + digitalWrite(_d4, HIGH); + pinMode(_d5, OUTPUT); + digitalWrite(_d5, HIGH); + pinMode(_d6, OUTPUT); + digitalWrite(_d6, HIGH); + pinMode(_d7, OUTPUT); + digitalWrite(_d7, HIGH); + + // INIT 8-bit mask + dataClrMask = (1 << _wr) | (1 << _d0) | (1 << _d1) | (1 << _d2) | (1 << _d3) | (1 << _d4) | (1 << _d5) | (1 << _d6) | (1 << _d7); + for (int32_t c = 0; c < 256; c++) + { +#if defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + xset_mask[c] = (1 << _wr); +#else // !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + xset_mask[c] = 0; +#endif // !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + if (c & 0x01) + { + xset_mask[c] |= (1 << _d0); + } + if (c & 0x02) + { + xset_mask[c] |= (1 << _d1); + } + if (c & 0x04) + { + xset_mask[c] |= (1 << _d2); + } + if (c & 0x08) + { + xset_mask[c] |= (1 << _d3); + } + if (c & 0x10) + { + xset_mask[c] |= (1 << _d4); + } + if (c & 0x20) + { + xset_mask[c] |= (1 << _d5); + } + if (c & 0x40) + { + xset_mask[c] |= (1 << _d6); + } + if (c & 0x80) + { + xset_mask[c] |= (1 << _d7); + } + } + dataPortSet = (PORTreg_t)&GPIO.out_w1ts; + dataPortClr = (PORTreg_t)&GPIO.out_w1tc; +} + +void Arduino_ESP32PAR8::beginWrite() +{ + DC_HIGH(); + CS_LOW(); +} + +void Arduino_ESP32PAR8::writeCommand(uint8_t c) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR8::writeCommand16(uint16_t c) +{ + DC_LOW(); + + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR8::writeCommand32(uint32_t c) +{ + DC_LOW(); + + WRITE(c >> 24); + WRITE(c >> 16); + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); +} + +void Arduino_ESP32PAR8::write(uint8_t d) +{ + WRITE(d); +} + +void Arduino_ESP32PAR8::write16(uint16_t d) +{ + WRITE(d >> 8); + WRITE(d); +} + +void Arduino_ESP32PAR8::write32(uint32_t d) +{ + WRITE(d >> 24); + WRITE(d >> 16); + WRITE(d >> 8); + WRITE(d); +} + +void Arduino_ESP32PAR8::writeC8D8(uint8_t c, uint8_t d) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d); +} + +void Arduino_ESP32PAR8::writeC8D16(uint8_t c, uint16_t d) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d >> 8); + WRITE(d); +} + +void Arduino_ESP32PAR8::writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2) +{ + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + WRITE(d1 >> 8); + WRITE(d1); + WRITE(d2 >> 8); + WRITE(d2); +} + +void Arduino_ESP32PAR8::endWrite() +{ + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendCommand(uint8_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendCommand16(uint16_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendCommand32(uint32_t c) +{ + CS_LOW(); + + DC_LOW(); + + WRITE(c >> 24); + WRITE(c >> 16); + WRITE(c >> 8); + WRITE(c); + + DC_HIGH(); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendData(uint8_t d) +{ + CS_LOW(); + + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendData16(uint16_t d) +{ + CS_LOW(); + + WRITE(d >> 8); + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::sendData32(uint32_t d) +{ + CS_LOW(); + + WRITE(d >> 24); + WRITE(d >> 16); + WRITE(d >> 8); + WRITE(d); + + CS_HIGH(); +} + +void Arduino_ESP32PAR8::writeRepeat(uint16_t p, uint32_t len) +{ + uint32_t hi = xset_mask[p >> 8]; + uint32_t lo = xset_mask[p & 0xff]; + while (len--) + { + *dataPortClr = dataClrMask; + *dataPortSet = hi; +#if !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + *wrPortSet = wrPinMask; +#endif // !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + *dataPortClr = dataClrMask; + *dataPortSet = lo; +#if !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + *wrPortSet = wrPinMask; +#endif // !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + } +} + +void Arduino_ESP32PAR8::writeBytes(uint8_t *data, uint32_t len) +{ + while (len--) + { + WRITE(*data++); + } +} + +void Arduino_ESP32PAR8::writePixels(uint16_t *data, uint32_t len) +{ + while (len--) + { + uint16_t d = *data++; + WRITE(d >> 8); + WRITE(d); + } +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_ESP32PAR8::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ + while (repeat--) + { + writeBytes(data, len); + } +} + +/******** low level bit twiddling **********/ + +INLINE void Arduino_ESP32PAR8::WRITE(uint8_t d) +{ + uint32_t mask = xset_mask[d]; + *dataPortClr = dataClrMask; + *dataPortSet = mask; +#if !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) + *wrPortSet = wrPinMask; +#endif // !defined(SET_DATA_AND_WR_AT_THE_SAME_TIME) +} + +INLINE void Arduino_ESP32PAR8::DC_HIGH(void) +{ + *dcPortSet = dcPinMask; +} + +INLINE void Arduino_ESP32PAR8::DC_LOW(void) +{ + *dcPortClr = dcPinMask; +} + +INLINE void Arduino_ESP32PAR8::CS_HIGH(void) +{ + *csPortSet = csPinMask; +} + +INLINE void Arduino_ESP32PAR8::CS_LOW(void) +{ + *csPortClr = csPinMask; +} + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.h new file mode 100644 index 0000000..8d588ce --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32PAR8.h @@ -0,0 +1,80 @@ +/* + * start rewrite from: + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + */ +#ifdef ESP32 +#ifndef _ARDUINO_ESP32PAR8_H_ +#define _ARDUINO_ESP32PAR8_H_ + +typedef volatile uint32_t *PORTreg_t; ///< PORT register type + +#include "Arduino_DataBus.h" + +class Arduino_ESP32PAR8 : public Arduino_DataBus +{ +public: + Arduino_ESP32PAR8( + int8_t dc, int8_t cs, int8_t wr, int8_t rd, + int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t d4, int8_t d5, int8_t d6, int8_t d7); // Constructor + + virtual void begin(int32_t speed = 0, int8_t dataMode = 0); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeC8D8(uint8_t c, uint8_t d); + virtual void writeC8D16(uint8_t c, uint16_t d); + virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +protected: +private: + INLINE void WRITE(uint8_t d); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + + int8_t _dc, _cs, _wr, _rd; + int8_t _d0, _d1, _d2, _d3, _d4, _d5, _d6, _d7; + + PORTreg_t dcPortSet; ///< PORT register SET + PORTreg_t dcPortClr; ///< PORT register CLEAR + uint32_t dcPinMask; ///< Bitmask + + PORTreg_t csPortSet; ///< PORT register SET + PORTreg_t csPortClr; ///< PORT register CLEAR + uint32_t csPinMask; ///< Bitmask + + PORTreg_t wrPortSet; ///< PORT register SET + PORTreg_t wrPortClr; ///< PORT register CLEAR + uint32_t wrPinMask; ///< Bitmask + + PORTreg_t rdPortSet; ///< PORT register SET + PORTreg_t rdPortClr; ///< PORT register CLEAR + uint32_t rdPinMask; ///< Bitmask + + PORTreg_t dataPortSet; ///< PORT register SET + PORTreg_t dataPortClr; ///< PORT register CLEAR + uint32_t dataClrMask; + // Lookup table for ESP32 parallel bus interface uses 1kbyte RAM, + uint32_t xset_mask[256]; // Makes Sprite rendering test 33% faster, for slower macro equivalent + // see commented out #define set_mask(C) within TFT_eSPI_ESP32.h +}; + +#endif // _ARDUINO_ESP32PAR8_H_ +#endif // #ifdef ESP32 diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.cpp new file mode 100644 index 0000000..8ff18b6 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.cpp @@ -0,0 +1,843 @@ +/* + * start rewrite from: + * https://github.com/espressif/arduino-esp32.git + */ +#ifdef ESP32 +#include "Arduino_DataBus.h" +#include "Arduino_ESP32SPI.h" + +struct spi_struct_t +{ + spi_dev_t *dev; +#if !CONFIG_DISABLE_HAL_LOCKS + xSemaphoreHandle lock; +#endif + uint8_t num; +}; + +#if CONFIG_DISABLE_HAL_LOCKS +#define SPI_MUTEX_LOCK() +#define SPI_MUTEX_UNLOCK() + +static spi_t _spi_bus_array[4] = { + {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), 0}, + {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), 1}, + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), 2}, + {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), 3}}; +#else // !CONFIG_DISABLE_HAL_LOCKS +#define SPI_MUTEX_LOCK() \ + do \ + { \ + } while (xSemaphoreTake(_spi->lock, portMAX_DELAY) != pdPASS) +#define SPI_MUTEX_UNLOCK() xSemaphoreGive(_spi->lock) + +static spi_t _spi_bus_array[4] = { + {(volatile spi_dev_t *)(DR_REG_SPI0_BASE), NULL, 0}, + {(volatile spi_dev_t *)(DR_REG_SPI1_BASE), NULL, 1}, + {(volatile spi_dev_t *)(DR_REG_SPI2_BASE), NULL, 2}, + {(volatile spi_dev_t *)(DR_REG_SPI3_BASE), NULL, 3}}; +#endif // CONFIG_DISABLE_HAL_LOCKS + +Arduino_ESP32SPI::Arduino_ESP32SPI(int8_t dc /* = -1 */, int8_t cs /* = -1 */, int8_t sck /* = -1 */, int8_t mosi /* = -1 */, int8_t miso /* = -1 */, uint8_t spi_num /* = VSPI */, bool is_shared_interface /* = true */) + : _dc(dc), _spi_num(spi_num), _is_shared_interface(is_shared_interface) +{ + if (sck == -1 && miso == -1 && mosi == -1 && cs == -1) + { + _sck = (_spi_num == VSPI) ? SCK : 14; + _miso = (_spi_num == VSPI) ? MISO : 12; + _mosi = (_spi_num == VSPI) ? MOSI : 13; + _cs = (_spi_num == VSPI) ? SS : 15; + } + else + { + _sck = sck; + _miso = miso; + _mosi = mosi; + _cs = cs; + } +} + +static void _on_apb_change(void *arg, apb_change_ev_t ev_type, uint32_t old_apb, uint32_t new_apb) +{ + spi_t *_spi = (spi_t *)arg; + if (ev_type == APB_BEFORE_CHANGE) + { + SPI_MUTEX_LOCK(); + while (_spi->dev->cmd.usr) + ; + } + else + { + _spi->dev->clock.val = spiFrequencyToClockDiv(old_apb / ((_spi->dev->clock.clkdiv_pre + 1) * (_spi->dev->clock.clkcnt_n + 1))); + SPI_MUTEX_UNLOCK(); + } +} + +void Arduino_ESP32SPI::begin(int32_t speed, int8_t dataMode) +{ + _speed = speed ? speed : SPI_DEFAULT_FREQ; + _dataMode = dataMode; + + if (!_div) + { + _div = spiFrequencyToClockDiv(_speed); + } + + if (_dc >= 0) + { + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + } + if (_dc >= 32) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_dc >= 0) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // disable chip select + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + csPinMask = 0; + csPortSet = dcPortSet; + csPortClr = dcPortClr; + } + + // SPI.begin(_sck, _miso, _mosi); + // _spi = spiStartBus(_spi_num, _div, SPI_MODE0, SPI_MSBFIRST); + _spi = &_spi_bus_array[_spi_num]; + +#if !CONFIG_DISABLE_HAL_LOCKS + if (_spi->lock == NULL) + { + _spi->lock = xSemaphoreCreateMutex(); + } +#endif + + if (_spi_num == HSPI) + { + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST); + } + else if (_spi_num == VSPI) + { + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN_2); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_2); + } + else + { + DPORT_SET_PERI_REG_MASK(DPORT_PERIP_CLK_EN_REG, DPORT_SPI_CLK_EN_1); + DPORT_CLEAR_PERI_REG_MASK(DPORT_PERIP_RST_EN_REG, DPORT_SPI_RST_1); + } + + spiStopBus(_spi); + spiSetDataMode(_spi, _dataMode); + spiSetBitOrder(_spi, _bitOrder); + spiSetClockDiv(_spi, _div); + + SPI_MUTEX_LOCK(); + _spi->dev->user.usr_mosi = 1; + if (_miso < 0) + { + _spi->dev->user.usr_miso = 0; + _spi->dev->user.doutdin = 0; + } + else + { + _spi->dev->user.usr_miso = 1; + _spi->dev->user.doutdin = 1; + } + + for (uint8_t i = 0; i < 16; i++) + { + _spi->dev->data_buf[i] = 0x00000000; + } + SPI_MUTEX_UNLOCK(); + + addApbChangeCallback(_spi, _on_apb_change); + + spiAttachSCK(_spi, _sck); + + if (_miso >= 0) + { + spiAttachMISO(_spi, _miso); + } + + spiAttachMOSI(_spi, _mosi); + + if (!_is_shared_interface) + { + spiTransaction(_spi, _div, _dataMode, _bitOrder); + } +} + +void Arduino_ESP32SPI::beginWrite() +{ + data_buf_bit_idx = 0; + data_buf[0] = 0; + + if (_is_shared_interface) + { + spiTransaction(_spi, _div, _dataMode, _bitOrder); + } + + if (_dc >= 0) + { + DC_HIGH(); + } + CS_LOW(); +} + +void Arduino_ESP32SPI::writeCommand(uint8_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = c; + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI::writeCommand16(uint16_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c >> 8); + WRITE9BIT(c & 0xff); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 15; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + MSB_16_SET(_spi->dev->data_buf[0], c); + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI::writeCommand32(uint32_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c >> 24); + WRITE9BIT((c >> 16) & 0xff); + WRITE9BIT((c >> 8) & 0xff); + WRITE9BIT(c & 0xff); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 31; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + MSB_32_SET(_spi->dev->data_buf[0], c); + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI::write(uint8_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | d); + } + else + { + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI::write16(uint16_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | (d >> 8)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + WRITE8BIT(d >> 8); + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI::write32(uint32_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | (d >> 24)); + WRITE9BIT(0x100 | ((d >> 16) & 0xff)); + WRITE9BIT(0x100 | ((d >> 8) & 0xff)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + WRITE8BIT(d >> 24); + WRITE8BIT(d >> 16); + WRITE8BIT(d >> 8); + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI::writeC8D8(uint8_t c, uint8_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | d); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = c; + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = d; + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + } +} + +void Arduino_ESP32SPI::writeC8D16(uint8_t c, uint16_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | (d >> 8)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = c; + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 15; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = (d >> 8) | ((d & 0xff) << 8); + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + } +} + +void Arduino_ESP32SPI::writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | (d1 >> 8)); + WRITE9BIT(0x100 | (d1 & 0xff)); + WRITE9BIT(0x100 | (d2 >> 8)); + WRITE9BIT(0x100 | (d2 & 0xff)); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 7; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = c; + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + DC_HIGH(); + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 31; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + _spi->dev->data_buf[0] = (d1 >> 8) | ((d1 & 0xff) << 8) | ((d2 & 0xff00) << 8) | ((d2 & 0xff) << 24); + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + } +} + +void Arduino_ESP32SPI::endWrite() +{ + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + if (_is_shared_interface) + { + spiEndTransaction(_spi); + } + + CS_HIGH(); +} + +void Arduino_ESP32SPI::sendCommand(uint8_t c) +{ + beginWrite(); + + writeCommand(c); + + endWrite(); +} + +void Arduino_ESP32SPI::sendCommand16(uint16_t c) +{ + beginWrite(); + + writeCommand16(c); + + endWrite(); +} + +void Arduino_ESP32SPI::sendCommand32(uint32_t c) +{ + beginWrite(); + + writeCommand32(c); + + endWrite(); +} + +void Arduino_ESP32SPI::sendData(uint8_t d) +{ + beginWrite(); + + write(d); + + endWrite(); +} + +void Arduino_ESP32SPI::sendData16(uint16_t d) +{ + beginWrite(); + + write16(d); + + endWrite(); +} + +void Arduino_ESP32SPI::sendData32(uint32_t d) +{ + beginWrite(); + + write32(d); + + endWrite(); +} + +void Arduino_ESP32SPI::writeRepeat(uint16_t p, uint32_t len) +{ + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + if (_dc < 0) // 9-bit SPI + { + uint32_t hi = 0x100 | (p >> 8); + uint32_t lo = 0x100 | (p & 0xff); + uint16_t idx; + uint8_t shift; + uint32_t l; + uint16_t bufLen = (len <= 28) ? len : 28; + uint16_t xferLen; + for (uint32_t t = 0; t < bufLen; t++) + { + idx = data_buf_bit_idx >> 3; + shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= hi >> (shift + 1); + data_buf[idx] = hi << (7 - shift); + } + else + { + data_buf[idx++] = hi >> 1; + data_buf[idx] = hi << 7; + } + data_buf_bit_idx += 9; + + idx = data_buf_bit_idx >> 3; + shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= lo >> (shift + 1); + data_buf[idx] = lo << (7 - shift); + } + else + { + data_buf[idx++] = lo >> 1; + data_buf[idx] = lo << 7; + } + data_buf_bit_idx += 9; + } + + if (_miso < 0) + { + l = (data_buf_bit_idx + 31) / 32; + for (uint32_t i = 0; i < l; i++) + { + _spi->dev->data_buf[i] = data_buf32[i]; + } + } + + // Issue pixels in blocks from temp buffer + while (len) + { // While pixels remain + xferLen = (bufLen < len) ? bufLen : len; // How many this pass? + data_buf_bit_idx = xferLen * 18; + _spi->dev->mosi_dlen.usr_mosi_dbitlen = data_buf_bit_idx - 1; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + if (_miso >= 0) + { + l = (data_buf_bit_idx + 31) / 32; + for (uint32_t i = 0; i < l; i++) + { + _spi->dev->data_buf[i] = data_buf32[i]; + } + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + len -= xferLen; + } + } + else // 8-bit SPI + { + uint16_t bufLen = (len < 32) ? len : 32; + uint16_t xferLen, l; + uint32_t c32; + MSB_32_16_16_SET(c32, p, p); + + if (_miso < 0) + { + l = (bufLen + 1) / 2; + for (uint32_t i = 0; i < l; i++) + { + _spi->dev->data_buf[i] = c32; + } + } + + // Issue pixels in blocks from temp buffer + while (len) + { // While pixels remain + xferLen = (bufLen <= len) ? bufLen : len; // How many this pass? + _spi->dev->mosi_dlen.usr_mosi_dbitlen = (xferLen * 16) - 1; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + if (_miso >= 0) + { + l = (xferLen + 1) / 2; + for (uint32_t i = 0; i < l; i++) + { + _spi->dev->data_buf[i] = c32; + } + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + len -= xferLen; + } + } + + data_buf_bit_idx = 0; +} + +void Arduino_ESP32SPI::writeBytes(uint8_t *data, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + while (len--) + { + write(*data++); + } + } + else // 8-bit SPI + { + uint32_t *p = (uint32_t *)data; + if (len >= 64) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 511; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + while (len >= 64) + { + for (uint32_t i = 0; i < 16; i++) + { + _spi->dev->data_buf[i] = *p++; + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + len -= 64; + } + } + + if ((len > 0) && ((len % 4) == 0)) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = (len * 8) - 1; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + len >>= 2; // 4 bytes to a 32-bit data + for (uint32_t i = 0; i < len; i++) + { + _spi->dev->data_buf[i] = *p++; + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + } + else + { + while (len--) + { + write(*data++); + } + } + } +} + +void Arduino_ESP32SPI::writePixels(uint16_t *data, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + while (len--) + { + write16(*data++); + } + } + else // 8-bit SPI + { + if (len >= 32) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = 511; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + uint32_t v1, v2; + while (len >= 32) + { + for (uint8_t i = 0; i < 16; i++) + { + v1 = *data++; + v2 = *data++; + _spi->dev->data_buf[i] = ((v1 & 0xff00) >> 8) | ((v1 & 0xff) << 8) | ((v2 & 0xff00) << 8) | ((v2 & 0xff) << 24); + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + + len -= 32; + } + } + + if ((len > 0) && ((len % 2) == 0)) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + _spi->dev->mosi_dlen.usr_mosi_dbitlen = (len * 16) - 1; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + uint32_t v1, v2; + len >>= 1; // 2 pixels to a 32-bit data + for (uint32_t i = 0; i < len; i++) + { + v1 = *data++; + v2 = *data++; + _spi->dev->data_buf[i] = ((v1 & 0xff00) >> 8) | ((v1 & 0xff) << 8) | ((v2 & 0xff00) << 8) | ((v2 & 0xff) << 24); + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + } + else + { + while (len--) + { + write16(*data++); + } + } + } +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_ESP32SPI::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ + while (repeat--) + { + writeBytes(data, len); + } +} + +void Arduino_ESP32SPI::flush_data_buf() +{ + _spi->dev->mosi_dlen.usr_mosi_dbitlen = data_buf_bit_idx - 1; + _spi->dev->miso_dlen.usr_miso_dbitlen = 0; + uint32_t len = (data_buf_bit_idx + 31) / 32; + for (uint32_t i = 0; i < len; i++) + { + _spi->dev->data_buf[i] = data_buf32[i]; + } + _spi->dev->cmd.usr = 1; + while (_spi->dev->cmd.usr) + ; + data_buf_bit_idx = 0; +} + +INLINE void Arduino_ESP32SPI::WRITE8BIT(uint8_t d) +{ + uint16_t idx = data_buf_bit_idx >> 3; + data_buf[idx] = d; + data_buf_bit_idx += 8; + if (data_buf_bit_idx >= 512) + { + flush_data_buf(); + } +} + +INLINE void Arduino_ESP32SPI::WRITE9BIT(uint32_t d) +{ + uint16_t idx = data_buf_bit_idx >> 3; + uint8_t shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= d >> (shift + 1); + data_buf[idx] = d << (7 - shift); + } + else + { + data_buf[idx++] = d >> 1; + data_buf[idx] = d << 7; + } + data_buf_bit_idx += 9; + if (data_buf_bit_idx >= 504) // 56 bytes * 9 bits + { + flush_data_buf(); + } +} + +/******** low level bit twiddling **********/ + +INLINE void Arduino_ESP32SPI::DC_HIGH(void) +{ + *dcPortSet = dcPinMask; +} + +INLINE void Arduino_ESP32SPI::DC_LOW(void) +{ + *dcPortClr = dcPinMask; +} + +INLINE void Arduino_ESP32SPI::CS_HIGH(void) +{ + *csPortSet = csPinMask; +} + +INLINE void Arduino_ESP32SPI::CS_LOW(void) +{ + *csPortClr = csPinMask; +} + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.h new file mode 100644 index 0000000..44a0983 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI.h @@ -0,0 +1,91 @@ +/* + * start rewrite from: + * https://github.com/espressif/arduino-esp32.git + */ +#ifdef ESP32 +#ifndef _ARDUINO_ESP32SPI_H_ +#define _ARDUINO_ESP32SPI_H_ + +#include "soc/spi_struct.h" +#include "soc/dport_reg.h" + +typedef volatile uint32_t *PORTreg_t; ///< PORT register type + +#include "Arduino_DataBus.h" + +#define SPI_DEFAULT_FREQ 40000000 + +#define SPI_CLK_IDX(p) ((p == 0) ? SPICLK_OUT_IDX : ((p == 1) ? SPICLK_OUT_IDX : ((p == 2) ? HSPICLK_OUT_IDX : ((p == 3) ? VSPICLK_OUT_IDX : 0)))) +#define SPI_MISO_IDX(p) ((p == 0) ? SPIQ_OUT_IDX : ((p == 1) ? SPIQ_OUT_IDX : ((p == 2) ? HSPIQ_OUT_IDX : ((p == 3) ? VSPIQ_OUT_IDX : 0)))) +#define SPI_MOSI_IDX(p) ((p == 0) ? SPID_IN_IDX : ((p == 1) ? SPID_IN_IDX : ((p == 2) ? HSPID_IN_IDX : ((p == 3) ? VSPID_IN_IDX : 0)))) + +#define SPI_SPI_SS_IDX(n) ((n == 0) ? SPICS0_OUT_IDX : ((n == 1) ? SPICS1_OUT_IDX : ((n == 2) ? SPICS2_OUT_IDX : SPICS0_OUT_IDX))) +#define SPI_HSPI_SS_IDX(n) ((n == 0) ? HSPICS0_OUT_IDX : ((n == 1) ? HSPICS1_OUT_IDX : ((n == 2) ? HSPICS2_OUT_IDX : HSPICS0_OUT_IDX))) +#define SPI_VSPI_SS_IDX(n) ((n == 0) ? VSPICS0_OUT_IDX : ((n == 1) ? VSPICS1_OUT_IDX : ((n == 2) ? VSPICS2_OUT_IDX : VSPICS0_OUT_IDX))) +#define SPI_SS_IDX(p, n) ((p == 0) ? SPI_SPI_SS_IDX(n) : ((p == 1) ? SPI_SPI_SS_IDX(n) : ((p == 2) ? SPI_HSPI_SS_IDX(n) : ((p == 3) ? SPI_VSPI_SS_IDX(n) : 0)))) + +#define SPI_INUM(u) (2) +#define SPI_INTR_SOURCE(u) ((u == 0) ? ETS_SPI0_INTR_SOURCE : ((u == 1) ? ETS_SPI1_INTR_SOURCE : ((u == 2) ? ETS_SPI2_INTR_SOURCE : ((p == 3) ? ETS_SPI3_INTR_SOURCE : 0)))) + +class Arduino_ESP32SPI : public Arduino_DataBus +{ +public: + Arduino_ESP32SPI(int8_t dc = -1, int8_t cs = -1, int8_t sck = -1, int8_t mosi = -1, int8_t miso = -1, uint8_t spi_num = VSPI, bool is_shared_interface = true); // Constructor + + virtual void begin(int32_t speed = 0, int8_t dataMode = SPI_MODE0); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeC8D8(uint8_t c, uint8_t d); + virtual void writeC8D16(uint8_t c, uint16_t d); + virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +protected: + virtual void flush_data_buf(); + +private: + INLINE void WRITE8BIT(uint8_t c); + INLINE void WRITE9BIT(uint32_t c); + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + + int8_t _dc, _cs, _sck, _mosi, _miso; + uint8_t _spi_num; + bool _is_shared_interface; + int32_t _speed; + uint32_t _div = 0; + + PORTreg_t dcPortSet; ///< PORT register for data/command SET + PORTreg_t dcPortClr; ///< PORT register for data/command CLEAR + PORTreg_t csPortSet; ///< PORT register for chip select SET + PORTreg_t csPortClr; ///< PORT register for chip select CLEAR + uint32_t dcPinMask; ///< Bitmask for data/command + uint32_t csPinMask; ///< Bitmask for chip select + + spi_t *_spi; + uint8_t _bitOrder; + uint8_t data_buf[64] = {0}; + uint32_t *data_buf32 = (uint32_t *)&data_buf; + uint16_t data_buf_bit_idx = 0; +}; + +#endif // _ARDUINO_ESP32SPI_H_ +#endif // #ifdef ESP32 diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.cpp new file mode 100644 index 0000000..bbc3532 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.cpp @@ -0,0 +1,951 @@ +/* + * start rewrite from: + * https://github.com/espressif/arduino-esp32.git + */ +#ifdef ESP32 +#include "Arduino_DataBus.h" +#include "Arduino_ESP32SPI_DMA.h" + +Arduino_ESP32SPI_DMA::Arduino_ESP32SPI_DMA(int8_t dc /* = -1 */, int8_t cs /* = -1 */, int8_t sck /* = -1 */, int8_t mosi /* = -1 */, int8_t miso /* = -1 */, uint8_t spi_num /* = VSPI */, bool is_shared_interface /* = true */) + : _dc(dc), _spi_num(spi_num), _is_shared_interface(is_shared_interface) +{ + if (sck == -1 && miso == -1 && mosi == -1 && cs == -1) + { + _sck = (_spi_num == VSPI) ? SCK : 14; + _miso = (_spi_num == VSPI) ? MISO : 12; + _mosi = (_spi_num == VSPI) ? MOSI : 13; + _cs = (_spi_num == VSPI) ? SS : 15; + } + else + { + _sck = sck; + _miso = miso; + _mosi = mosi; + _cs = cs; + } +} + +void Arduino_ESP32SPI_DMA::begin(int32_t speed, int8_t dataMode) +{ + _speed = speed ? speed : SPI_DEFAULT_FREQ; + _dataMode = dataMode; + + if (!_div) + { + _div = spiFrequencyToClockDiv(_speed); + } + + if (_dc >= 0) + { + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + } + if (_dc >= 32) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_dc >= 0) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // disable chip select + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + csPinMask = 0; + csPortSet = dcPortSet; + csPortClr = dcPortClr; + } + + spi_bus_config_t buscfg = { + .mosi_io_num = _mosi, + .miso_io_num = _miso, + .sclk_io_num = _sck, + .quadwp_io_num = -1, + .quadhd_io_num = -1, + .max_transfer_sz = MAX_TRANSFER_SZ, + }; + spi_device_interface_config_t devcfg = { + .command_bits = 0, + .address_bits = 0, + .dummy_bits = 0, + .mode = (uint8_t)_dataMode, + .duty_cycle_pos = 128, + .cs_ena_pretrans = 0, + .cs_ena_posttrans = 0, + .clock_speed_hz = _speed, + .input_delay_ns = 0, + .spics_io_num = -1, // avoid use system CS control + .flags = (_miso < 0) ? (uint32_t)SPI_DEVICE_NO_DUMMY : 0, + .queue_size = 1, + }; + esp_err_t ret; + + ret = spi_bus_initialize((spi_host_device_t)(_spi_num - 1), &buscfg, DMA_CHANNEL); + if (ret != ESP_OK) + { + log_e("Arduino_ESP32SPI_DMA::begin() spi_bus_initialize error: %d", ret); + } + + ret = spi_bus_add_device((spi_host_device_t)(_spi_num - 1), &devcfg, &_handle); + if (ret != ESP_OK) + { + log_e("Arduino_ESP32SPI_DMA::begin() spi_bus_add_device error: %d", ret); + } + + data_buf = (char *)heap_caps_malloc((MAX_TRANSFER_SZ / 8), MALLOC_CAP_DMA); + if (!data_buf) + { + log_e("Allocation failed!"); + } + else + { + data_buf16 = (uint16_t *)data_buf; + data_buf32 = (uint32_t *)data_buf; + } + + if (!_is_shared_interface) + { + spi_device_acquire_bus(_handle, portMAX_DELAY); + } +} + +void Arduino_ESP32SPI_DMA::beginWrite() +{ + data_buf_bit_idx = 0; + data_buf[0] = 0; + + if (_is_shared_interface) + { + spi_device_acquire_bus(_handle, portMAX_DELAY); + } + + if (_dc >= 0) + { + DC_HIGH(); + } + CS_LOW(); +} + +void Arduino_ESP32SPI_DMA::writeCommand(uint8_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 8; + ct.tx_data[0] = c; + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI_DMA::writeCommand16(uint16_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c >> 8); + WRITE9BIT(c & 0xff); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 16; + MSB_16_SET(ct.tx_data[0], c); + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI_DMA::writeCommand32(uint32_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c >> 24); + WRITE9BIT((c >> 16) & 0xff); + WRITE9BIT((c >> 8) & 0xff); + WRITE9BIT(c & 0xff); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 32; + MSB_32_SET(ct.tx_data[0], c); + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + } +} + +void Arduino_ESP32SPI_DMA::write(uint8_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | d); + } + else + { + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI_DMA::write16(uint16_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | (d >> 8)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + WRITE8BIT(d >> 8); + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI_DMA::write32(uint32_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(0x100 | (d >> 24)); + WRITE9BIT(0x100 | ((d >> 16) & 0xff)); + WRITE9BIT(0x100 | ((d >> 8) & 0xff)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + WRITE8BIT(d >> 24); + WRITE8BIT(d >> 16); + WRITE8BIT(d >> 8); + WRITE8BIT(d); + } +} + +void Arduino_ESP32SPI_DMA::writeC8D8(uint8_t c, uint8_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | d); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 8; + ct.tx_data[0] = c; + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + + spi_transaction_t dt; + memset(&dt, 0, sizeof(dt)); + dt.length = 8; + dt.tx_data[0] = d; + dt.flags = SPI_TRANS_USE_TXDATA; + + ret = spi_device_polling_transmit(_handle, &dt); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + } +} + +void Arduino_ESP32SPI_DMA::writeC8D16(uint8_t c, uint16_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | (d >> 8)); + WRITE9BIT(0x100 | (d & 0xff)); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 8; + ct.tx_data[0] = c; + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("Arduino_ESP32SPI_DMA::write() spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + + spi_transaction_t dt; + memset(&dt, 0, sizeof(dt)); + dt.length = 16; + dt.tx_data[0] = (d >> 8); + dt.tx_data[1] = (d & 0xff); + dt.flags = SPI_TRANS_USE_TXDATA; + + ret = spi_device_polling_transmit(_handle, &dt); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + } +} + +void Arduino_ESP32SPI_DMA::writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BIT(c); + WRITE9BIT(0x100 | (d1 >> 8)); + WRITE9BIT(0x100 | (d1 & 0xff)); + WRITE9BIT(0x100 | (d2 >> 8)); + WRITE9BIT(0x100 | (d2 & 0xff)); + } + else + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + DC_LOW(); + + spi_transaction_t ct; + memset(&ct, 0, sizeof(ct)); + ct.length = 8; + ct.tx_data[0] = c; + ct.flags = SPI_TRANS_USE_TXDATA; + + esp_err_t ret = spi_device_polling_transmit(_handle, &ct); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + DC_HIGH(); + + spi_transaction_t dt; + memset(&dt, 0, sizeof(dt)); + dt.length = 32; + dt.tx_data[0] = (d1 >> 8); + dt.tx_data[1] = (d1 & 0xff); + dt.tx_data[2] = (d2 >> 8); + dt.tx_data[3] = (d2 & 0xff); + dt.flags = SPI_TRANS_USE_TXDATA; + + ret = spi_device_polling_transmit(_handle, &dt); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + } +} + +void Arduino_ESP32SPI_DMA::endWrite() +{ + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + if (_is_shared_interface) + { + spi_device_release_bus(_handle); + } + + CS_HIGH(); +} + +void Arduino_ESP32SPI_DMA::sendCommand(uint8_t c) +{ + beginWrite(); + + writeCommand(c); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::sendCommand16(uint16_t c) +{ + beginWrite(); + + writeCommand16(c); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::sendCommand32(uint32_t c) +{ + beginWrite(); + + writeCommand32(c); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::sendData(uint8_t d) +{ + beginWrite(); + + write(d); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::sendData16(uint16_t d) +{ + beginWrite(); + + write16(d); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::sendData32(uint32_t d) +{ + beginWrite(); + + write32(d); + + endWrite(); +} + +void Arduino_ESP32SPI_DMA::writeRepeat(uint16_t p, uint32_t len) +{ + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + if (_dc < 0) // 9-bit SPI + { + uint32_t hi = 0x100 | (p >> 8); + uint32_t lo = 0x100 | (p & 0xff); + uint32_t idx, shift; + uint32_t bufLen = (len <= 28) ? len : 28; + uint32_t xferLen; + for (uint32_t t = 0; t < bufLen; t++) + { + idx = data_buf_bit_idx >> 3; + shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= hi >> (shift + 1); + data_buf[idx] = hi << (7 - shift); + } + else + { + data_buf[idx++] = hi >> 1; + data_buf[idx] = hi << 7; + } + data_buf_bit_idx += 9; + + idx = data_buf_bit_idx >> 3; + shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= lo >> (shift + 1); + data_buf[idx] = lo << (7 - shift); + } + else + { + data_buf[idx++] = lo >> 1; + data_buf[idx] = lo << 7; + } + data_buf_bit_idx += 9; + } + + // Issue pixels in blocks from temp buffer + while (len) + { // While pixels remain + xferLen = (bufLen < len) ? bufLen : len; // How many this pass? + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = xferLen * 18; + t.tx_buffer = data_buf; + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= xferLen; + } + } + else // 8-bit SPI + { + uint32_t bufLen = (len < (MAX_TRANSFER_SZ / 16)) ? len : (MAX_TRANSFER_SZ / 16); + uint32_t xferLen; + uint32_t c32; + MSB_32_16_16_SET(c32, p, p); + + uint32_t l = (bufLen + 1) / 2; + for (uint32_t i = 0; i < l; i++) + { + data_buf32[i] = c32; + } + + // Issue pixels in blocks from temp buffer + while (len) // While pixels remain + { + xferLen = (bufLen <= len) ? bufLen : len; // How many this pass? + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = xferLen * 16; + t.tx_buffer = data_buf; + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= xferLen; + } + } +} + +void Arduino_ESP32SPI_DMA::writeBytes(uint8_t *data, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + while (len--) + { + write(*data++); + } + } + else // 8-bit SPI + { + if (esp_ptr_dma_capable(data)) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = len << 3; + t.tx_buffer = data; + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + } + else + { + uint32_t *p = (uint32_t *)data; + uint32_t bufLen = (len < (MAX_TRANSFER_SZ / 8)) ? len : (MAX_TRANSFER_SZ / 8); + + if (len >= bufLen) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = bufLen << 3; + t.tx_buffer = data_buf; + uint32_t l = bufLen >> 2; + while (len >= bufLen) + { + for (uint32_t i = 0; i < l; i++) + { + data_buf32[i] = *p++; + } + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= bufLen; + } + } + + if ((len > 0) && ((len % 4) == 0)) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = len << 3; + t.tx_buffer = data_buf; + uint32_t l = len >> 2; + for (uint32_t i = 0; i < l; i++) + { + data_buf32[i] = *p++; + } + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + } + else + { + while (len--) + { + write(*data++); + } + } + } + } +} + +void Arduino_ESP32SPI_DMA::writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + while (len--) + { + write16(idx[*(data++)]); + } + } + else // 8-bit SPI + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + uint32_t bufLen = (len < (MAX_TRANSFER_SZ / 16)) ? len : (MAX_TRANSFER_SZ / 16); + uint32_t xferLen, p; + + while (len) // While pixels remain + { + xferLen = (bufLen <= len) ? bufLen : len; // How many this pass? + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = xferLen << 4; + t.tx_buffer = data_buf; + for (uint32_t i = 0; i < xferLen; i++) + { + p = idx[*(data++)]; + MSB_16_SET(data_buf16[i], p); + } + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= xferLen; + } + } +} + +void Arduino_ESP32SPI_DMA::writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + uint32_t l = len; + uint8_t *d = data; + uint16_t p; + uint8_t hi, lo; + while (l--) + { + p = idx[*(d++)]; + hi = p >> 8; + lo = p; + write(hi); + write(lo); + write(hi); + write(lo); + } + } + else // 8-bit SPI + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + uint32_t bufLen = (len < (MAX_TRANSFER_SZ / 16 / 2)) ? len : (MAX_TRANSFER_SZ / 16 / 2); + uint32_t xferLen; + uint16_t p; + + while (len) // While pixels remain + { + xferLen = (bufLen <= len) ? bufLen : len; // How many this pass? + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = xferLen << 5; + t.tx_buffer = data_buf; + for (uint32_t i = 0; i < xferLen; i++) + { + p = idx[*(data++)]; + MSB_16_SET(p, p); + data_buf16[(i * 2)] = p; + data_buf16[(i * 2) + 1] = p; + } + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= xferLen; + } + } +} + +void Arduino_ESP32SPI_DMA::writePixels(uint16_t *data, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { + while (len--) + { + write16(*data++); + } + } + else // 8-bit SPI + { + uint32_t bufLen = (len < (MAX_TRANSFER_SZ / 16)) ? len : (MAX_TRANSFER_SZ / 16); + uint16_t p; + + if (len >= bufLen) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = bufLen << 4; + t.tx_buffer = data_buf; + while (len >= bufLen) + { + for (uint32_t i = 0; i < bufLen; i++) + { + p = *data++; + MSB_16_SET(data_buf16[i], p); + } + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + + len -= bufLen; + } + } + + if ((len > 0) && ((len % 2) == 0)) + { + if (data_buf_bit_idx > 0) + { + flush_data_buf(); + } + + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = len << 4; + t.tx_buffer = data_buf; + for (uint32_t i = 0; i < len; i++) + { + p = *data++; + MSB_16_SET(data_buf16[i], p); + } + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_queue_trans error: %d", ret); + } + } + else + { + while (len--) + { + write16(*data++); + } + } + } +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_ESP32SPI_DMA::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ + while (repeat--) + { + writeBytes(data, len); + } +} + +void Arduino_ESP32SPI_DMA::flush_data_buf() +{ + spi_transaction_t t; + memset(&t, 0, sizeof(t)); + t.length = data_buf_bit_idx; + t.tx_buffer = data_buf; + + esp_err_t ret = spi_device_polling_transmit(_handle, &t); + if (ret != ESP_OK) + { + log_e("spi_device_polling_transmit error: %d", ret); + } + + data_buf_bit_idx = 0; +} + +INLINE void Arduino_ESP32SPI_DMA::WRITE8BIT(uint8_t d) +{ + uint16_t idx = data_buf_bit_idx >> 3; + data_buf[idx] = d; + data_buf_bit_idx += 8; + if (data_buf_bit_idx >= MAX_TRANSFER_SZ) + { + flush_data_buf(); + } +} + +INLINE void Arduino_ESP32SPI_DMA::WRITE9BIT(uint32_t d) +{ + uint16_t idx = data_buf_bit_idx >> 3; + uint8_t shift = (data_buf_bit_idx % 8); + if (shift) + { + data_buf[idx++] |= d >> (shift + 1); + data_buf[idx] = d << (7 - shift); + } + else + { + data_buf[idx++] = d >> 1; + data_buf[idx] = d << 7; + } + data_buf_bit_idx += 9; + if (data_buf_bit_idx >= 504) // 56 bytes * 9 bits + { + flush_data_buf(); + } +} + +/******** low level bit twiddling **********/ + +INLINE void Arduino_ESP32SPI_DMA::DC_HIGH(void) +{ + *dcPortSet = dcPinMask; +} + +INLINE void Arduino_ESP32SPI_DMA::DC_LOW(void) +{ + *dcPortClr = dcPinMask; +} + +INLINE void Arduino_ESP32SPI_DMA::CS_HIGH(void) +{ + *csPortSet = csPinMask; +} + +INLINE void Arduino_ESP32SPI_DMA::CS_LOW(void) +{ + *csPortClr = csPinMask; +} + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.h new file mode 100644 index 0000000..88fe884 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_ESP32SPI_DMA.h @@ -0,0 +1,96 @@ +/* + * start rewrite from: + * https://github.com/espressif/arduino-esp32.git + */ +#ifdef ESP32 +#ifndef _ARDUINO_ESP32SPI_DMA_H_ +#define _ARDUINO_ESP32SPI_DMA_H_ + +#include + +typedef volatile uint32_t *PORTreg_t; ///< PORT register type + +#include "Arduino_DataBus.h" + +#define SPI_DEFAULT_FREQ 40000000 +#define MAX_TRANSFER_SZ (480 * 2 * 9) // size should able divisible by 32 +#define DMA_CHANNEL 2 + +#define SPI_CLK_IDX(p) ((p == 0) ? SPICLK_OUT_IDX : ((p == 1) ? SPICLK_OUT_IDX : ((p == 2) ? HSPICLK_OUT_IDX : ((p == 3) ? VSPICLK_OUT_IDX : 0)))) +#define SPI_MISO_IDX(p) ((p == 0) ? SPIQ_OUT_IDX : ((p == 1) ? SPIQ_OUT_IDX : ((p == 2) ? HSPIQ_OUT_IDX : ((p == 3) ? VSPIQ_OUT_IDX : 0)))) +#define SPI_MOSI_IDX(p) ((p == 0) ? SPID_IN_IDX : ((p == 1) ? SPID_IN_IDX : ((p == 2) ? HSPID_IN_IDX : ((p == 3) ? VSPID_IN_IDX : 0)))) + +#define SPI_SPI_SS_IDX(n) ((n == 0) ? SPICS0_OUT_IDX : ((n == 1) ? SPICS1_OUT_IDX : ((n == 2) ? SPICS2_OUT_IDX : SPICS0_OUT_IDX))) +#define SPI_HSPI_SS_IDX(n) ((n == 0) ? HSPICS0_OUT_IDX : ((n == 1) ? HSPICS1_OUT_IDX : ((n == 2) ? HSPICS2_OUT_IDX : HSPICS0_OUT_IDX))) +#define SPI_VSPI_SS_IDX(n) ((n == 0) ? VSPICS0_OUT_IDX : ((n == 1) ? VSPICS1_OUT_IDX : ((n == 2) ? VSPICS2_OUT_IDX : VSPICS0_OUT_IDX))) +#define SPI_SS_IDX(p, n) ((p == 0) ? SPI_SPI_SS_IDX(n) : ((p == 1) ? SPI_SPI_SS_IDX(n) : ((p == 2) ? SPI_HSPI_SS_IDX(n) : ((p == 3) ? SPI_VSPI_SS_IDX(n) : 0)))) + +#define SPI_INUM(u) (2) +#define SPI_INTR_SOURCE(u) ((u == 0) ? ETS_SPI0_INTR_SOURCE : ((u == 1) ? ETS_SPI1_INTR_SOURCE : ((u == 2) ? ETS_SPI2_INTR_SOURCE : ((p == 3) ? ETS_SPI3_INTR_SOURCE : 0)))) + +class Arduino_ESP32SPI_DMA : public Arduino_DataBus +{ +public: + Arduino_ESP32SPI_DMA(int8_t dc = -1, int8_t cs = -1, int8_t sck = -1, int8_t mosi = -1, int8_t miso = -1, uint8_t spi_num = VSPI, bool is_shared_interface = true); // Constructor + + virtual void begin(int32_t speed = 0, int8_t dataMode = SPI_MODE0); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeC8D8(uint8_t c, uint8_t d); + virtual void writeC8D16(uint8_t c, uint16_t d); + virtual void writeC8D16D16(uint8_t c, uint16_t d1, uint16_t d2); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void writeIndexedPixels(uint8_t *data, uint16_t *idx, uint32_t len); + virtual void writeIndexedPixelsDouble(uint8_t *data, uint16_t *idx, uint32_t len); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +protected: + virtual void flush_data_buf(); + +private: + INLINE void WRITE8BIT(uint8_t c); + INLINE void WRITE9BIT(uint32_t c); + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + + int8_t _dc, _cs, _sck, _mosi, _miso; + uint8_t _spi_num; + bool _is_shared_interface; + int32_t _speed; + uint32_t _div = 0; + + PORTreg_t dcPortSet; ///< PORT register for data/command SET + PORTreg_t dcPortClr; ///< PORT register for data/command CLEAR + PORTreg_t csPortSet; ///< PORT register for chip select SET + PORTreg_t csPortClr; ///< PORT register for chip select CLEAR + uint32_t dcPinMask; ///< Bitmask for data/command + uint32_t csPinMask; ///< Bitmask for chip select + + spi_device_handle_t _handle; + uint8_t _bitOrder; + char *data_buf; + uint16_t *data_buf16; + uint32_t *data_buf32; + uint16_t data_buf_bit_idx = 0; +}; + +#endif // _ARDUINO_ESP32SPI_DMA_H_ +#endif // #ifdef ESP32 diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.cpp new file mode 100644 index 0000000..3039fac --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.cpp @@ -0,0 +1,526 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include +#include "Arduino_DataBus.h" +#include "Arduino_HWSPI.h" + +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define HWSPI LCD_SPI +#else +#define HWSPI SPI +#endif + +#if defined(SPI_HAS_TRANSACTION) +#define SPI_BEGIN_TRANSACTION() HWSPI.beginTransaction(mySPISettings) +#define SPI_END_TRANSACTION() HWSPI.endTransaction() +#else +#define SPI_BEGIN_TRANSACTION() \ + { \ + } +#define SPI_END_TRANSACTION() \ + { \ + } +#endif + +#if defined(SPI_HAS_TRANSACTION) +static SPISettings mySPISettings; +#elif defined(__AVR__) || defined(CORE_TEENSY) +static uint8_t SPCRbackup; +static uint8_t mySPCR; +#endif + +#if defined(ESP32) +Arduino_HWSPI::Arduino_HWSPI(int8_t dc, int8_t cs /* = -1 */, int8_t sck /* = -1 */, int8_t mosi /* = -1 */, int8_t miso /* = -1 */, bool is_shared_interface /* = true */) + : _dc(dc), _cs(cs), _sck(sck), _mosi(mosi), _miso(miso), _is_shared_interface(is_shared_interface) +{ +#else +Arduino_HWSPI::Arduino_HWSPI(int8_t dc, int8_t cs /* = -1 */, bool is_shared_interface /* = true */) + : _dc(dc), _cs(cs), _is_shared_interface(is_shared_interface) +{ +#endif +} + +void Arduino_HWSPI::begin(int32_t speed, int8_t dataMode) +{ + _speed = speed ? speed : SPI_DEFAULT_FREQ; + _dataMode = dataMode; + + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // Deselect + } + +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(ESP32) + dcPinMask = digitalPinToBitMask(_dc); + if (_dc >= 32) + { + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else + { + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPortSet = (PORTreg_t)dcPortSet; + csPortClr = (PORTreg_t)dcPortClr; + csPinMask = 0; + } +#elif defined(CORE_TEENSY) +#if !defined(KINETISK) + dcPinMask = digitalPinToBitMask(_dc); +#endif + dcPortSet = portSetRegister(_dc); + dcPortClr = portClearRegister(_dc); + if (_cs >= 0) + { +#if !defined(KINETISK) + csPinMask = digitalPinToBitMask(_cs); +#endif + csPortSet = portSetRegister(_cs); + csPortClr = portClearRegister(_cs); + } + else + { +#if !defined(KINETISK) + csPinMask = 0; +#endif + csPortSet = dcPortSet; + csPortClr = dcPortClr; + } +#else // !CORE_TEENSY + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = &(PORT->Group[g_APinDescription[_dc].ulPort].OUTSET.reg); + dcPortClr = &(PORT->Group[g_APinDescription[_dc].ulPort].OUTCLR.reg); + if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = &(PORT->Group[g_APinDescription[_cs].ulPort].OUTSET.reg); + csPortClr = &(PORT->Group[g_APinDescription[_cs].ulPort].OUTCLR.reg); + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPortSet = dcPortSet; + csPortClr = dcPortClr; + csPinMask = 0; + } +#endif // end !CORE_TEENSY +#else // !HAS_PORT_SET_CLR + dcPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_dc)); + dcPinMaskSet = digitalPinToBitMask(_dc); + if (_cs >= 0) + { + csPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_cs)); + csPinMaskSet = digitalPinToBitMask(_cs); + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPort = dcPort; + csPinMaskSet = 0; + } + csPinMaskClr = ~csPinMaskSet; + dcPinMaskClr = ~dcPinMaskSet; +#endif // !end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO + +#if defined(ESP32) + HWSPI.begin(_sck, _miso, _mosi); + if (_dataMode < 0) + { + _dataMode = SPI_MODE0; + } + mySPISettings = SPISettings(_speed, MSBFIRST, _dataMode); +#elif defined(ESP8266) + HWSPI.begin(); + if (_dataMode < 0) + { + _dataMode = SPI_MODE0; + } + mySPISettings = SPISettings(_speed, MSBFIRST, _dataMode); +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) + HWSPI.begin(); + if (_dataMode < 0) + { + _dataMode = SPI_MODE0; + } + mySPISettings = SPISettings(_speed, MSBFIRST, _dataMode); +#elif defined(SPI_HAS_TRANSACTION) + HWSPI.begin(); + if (_dataMode < 0) + { + _dataMode = SPI_MODE2; + } + mySPISettings = SPISettings(_speed, MSBFIRST, _dataMode); +#elif defined(__AVR__) || defined(CORE_TEENSY) + SPCRbackup = SPCR; + HWSPI.begin(); + HWSPI.setClockDivider(SPI_CLOCK_DIV2); + if (_dataMode < 0) + { + _dataMode = SPI_MODE2; + } + HWSPI.setDataMode(_dataMode); + mySPCR = SPCR; // save our preferred state + SPCR = SPCRbackup; // then restore +#elif defined(__SAM3X8E__) + HWSPI.begin(); + HWSPI.setClockDivider(21); //4MHz + if (_dataMode < 0) + { + _dataMode = SPI_MODE2; + } + HWSPI.setDataMode(_dataMode); +#elif defined(__arm__) + if (_dataMode < 0) + { + _dataMode = SPI_MODE2; + } +#endif +} + +void Arduino_HWSPI::beginWrite() +{ + if (_is_shared_interface) + { + SPI_BEGIN_TRANSACTION(); + } + + DC_HIGH(); + CS_LOW(); +} + +void Arduino_HWSPI::writeCommand(uint8_t c) +{ + DC_LOW(); + write(c); + DC_HIGH(); +} + +void Arduino_HWSPI::writeCommand16(uint16_t c) +{ + DC_LOW(); + write16(c); + DC_HIGH(); +} + +void Arduino_HWSPI::writeCommand32(uint32_t c) +{ + DC_LOW(); + write32(c); + DC_HIGH(); +} + +void Arduino_HWSPI::write(uint8_t c) +{ +#if defined(SPI_HAS_TRANSACTION) + HWSPI.transfer(c); +#elif defined(__AVR__) || defined(CORE_TEENSY) + SPCRbackup = SPCR; + SPCR = mySPCR; + HWSPI.transfer(c); + SPCR = SPCRbackup; +#elif defined(__arm__) + HWSPI.setClockDivider(21); //4MHz + HWSPI.setDataMode(_dataMode); + HWSPI.transfer(c); +#endif +} + +void Arduino_HWSPI::write16(uint16_t d) +{ +#if defined(ESP8266) || defined(ESP32) + HWSPI.write16(d); +#else + write(d >> 8); + write(d); +#endif +} + +void Arduino_HWSPI::write32(uint32_t d) +{ +#if defined(ESP8266) || defined(ESP32) + HWSPI.write32(d); +#else + write(d >> 24); + write(d >> 16); + write(d >> 8); + write(d); +#endif +} + +void Arduino_HWSPI::endWrite() +{ + CS_HIGH(); + + if (_is_shared_interface) + { + SPI_END_TRANSACTION(); + } +} + +void Arduino_HWSPI::sendCommand(uint8_t c) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + writeCommand(c); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::sendCommand16(uint16_t c) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + writeCommand16(c); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::sendCommand32(uint32_t c) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + writeCommand32(c); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::sendData(uint8_t d) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + write(d); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::sendData16(uint16_t d) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + write16(d); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::sendData32(uint32_t d) +{ + SPI_BEGIN_TRANSACTION(); + CS_LOW(); + + write32(d); + + CS_HIGH(); + SPI_END_TRANSACTION(); +} + +void Arduino_HWSPI::writeRepeat(uint16_t p, uint32_t len) +{ +#if defined(ESP32) +#define SPI_MAX_PIXELS_AT_ONCE 32 +#define TMPBUF_LONGWORDS ((SPI_MAX_PIXELS_AT_ONCE + 1) / 2) +#define TMPBUF_PIXELS (TMPBUF_LONGWORDS * 2) + static uint32_t temp[TMPBUF_LONGWORDS]; + uint32_t c32 = p * 0x00010001; + uint32_t bufLen = (len < TMPBUF_PIXELS) ? len : TMPBUF_PIXELS, + xferLen, fillLen; + // Fill temp buffer 32 bits at a time + fillLen = (bufLen + 1) / 2; // Round up to next 32-bit boundary + for (uint32_t t = 0; t < fillLen; t++) + { + temp[t] = c32; + } + // Issue pixels in blocks from temp buffer + while (len) + { // While pixels remain + xferLen = (bufLen < len) ? bufLen : len; // How many this pass? + HWSPI.writePixels((uint16_t *)temp, xferLen * 2); + len -= xferLen; + } +#elif defined(ESP8266) + static uint8_t temp[2]; + temp[0] = p >> 8; + temp[1] = p & 0xFF; + HWSPI.writePattern((uint8_t *)temp, 2, len); +#else + uint8_t hi = p >> 8, lo = p; + + while (len--) + { + write(hi); + write(lo); + } +#endif +} + +void Arduino_HWSPI::writeBytes(uint8_t *data, uint32_t len) +{ +#if defined(ESP8266) || defined(ESP32) + HWSPI.writeBytes(data, len); +#else // !(defined(ESP8266) || defined(ESP32)) + HWSPI.transfer(data, len); +#endif // !(defined(ESP8266) || defined(ESP32)) +} + +void Arduino_HWSPI::writePixels(uint16_t *data, uint32_t len) +{ +#if defined(ESP32) + // don't know why require double len + HWSPI.writePixels(data, len * 2); +#else // !defined(ESP32) + len *= 2; + uint8_t *d = (uint8_t *)data; + uint8_t t; + for (uint32_t i = 0; i < len; i += 2) + { + t = d[i]; + d[i] = d[i + 1]; + d[i + 1] = t; + } +#if defined(ESP8266) + HWSPI.writeBytes(d, len); +#else // !defined(ESP8266) + HWSPI.transfer(d, len); +#endif // !defined(ESP8266) +#endif // !defined(ESP32) +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_HWSPI::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ +#if defined(ESP8266) || defined(ESP32) + HWSPI.writePattern(data, len, repeat); +#else // !(defined(ESP8266) || defined(ESP32)) + while (repeat--) + { + for (uint8_t i = 0; i < len; i++) + { + write(data[i]); + } + } +#endif // !(defined(ESP8266) || defined(ESP32)) +} + +/******** low level bit twiddling **********/ + +INLINE void Arduino_HWSPI::CS_HIGH(void) +{ + if (_cs >= 0) + { +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *csPortSet = 1; +#else // !KINETISK + *csPortSet = csPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *csPort |= csPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_cs, HIGH); +#endif // end !USE_FAST_PINIO + } +} + +INLINE void Arduino_HWSPI::CS_LOW(void) +{ + if (_cs >= 0) + { +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *csPortClr = 1; +#else // !KINETISK + *csPortClr = csPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *csPort &= csPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_cs, LOW); +#endif // end !USE_FAST_PINIO + } +} + +INLINE void Arduino_HWSPI::DC_HIGH(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *dcPortSet = 1; +#else // !KINETISK + *dcPortSet = dcPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *dcPort |= dcPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_dc, HIGH); +#endif // end !USE_FAST_PINIO +} + +INLINE void Arduino_HWSPI::DC_LOW(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *dcPortClr = 1; +#else // !KINETISK + *dcPortClr = dcPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *dcPort &= dcPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_dc, LOW); +#endif // end !USE_FAST_PINIO +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.h new file mode 100644 index 0000000..0a5c01e --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_HWSPI.h @@ -0,0 +1,182 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_HWSPI_H_ +#define _ARDUINO_HWSPI_H_ + +// HARDWARE CONFIG --------------------------------------------------------- + +#if defined(__AVR__) +typedef uint8_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#elif defined(ESP32) +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#elif defined(ESP8266) +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#elif defined(ARDUINO_STM32_FEATHER) +typedef uint32_t ARDUINOGFX_PORT_t; +#elif defined(__arm__) +#if defined(ARDUINO_ARCH_SAMD) +// Adafruit M0, M4 +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#elif defined(CORE_TEENSY) +#if defined(__IMXRT1052__) || defined(__IMXRT1062__) +// PJRC Teensy 4.x +typedef uint32_t ARDUINOGFX_PORT_t; +#else +// PJRC Teensy 3.x +typedef uint8_t ARDUINOGFX_PORT_t; +#endif +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#else +// Arduino Due? +typedef uint32_t ARDUINOGFX_PORT_t; +// USE_FAST_PINIO not available here (yet)...Due has a totally different +// GPIO register set and will require some changes elsewhere (e.g. in +// constructors especially). +#endif +#else // !ARM +// Unknow architecture, USE_FAST_PINIO is not available here (yet) +// but don't worry about it too much...the digitalWrite() implementation +// on these platforms is reasonably efficient and already RAM-resident, +// only gotcha then is no parallel connection support for now. +typedef uint32_t ARDUINOGFX_PORT_t; +#endif // end !ARM +typedef volatile ARDUINOGFX_PORT_t *PORTreg_t; + +#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || defined(ADAFRUIT_HALLOWING_M4_EXPRESS) +#define USE_SPI_DMA ///< Auto DMA if using PyPortal +#else +//#define USE_SPI_DMA ///< If set, use DMA if available +#endif +// Another "oops" name -- this now also handles parallel DMA. +// If DMA is enabled, Arduino sketch MUST #include +// Estimated RAM usage: +// 4 bytes/pixel on display major axis + 8 bytes/pixel on minor axis, +// e.g. 320x240 pixels = 320 * 4 + 240 * 8 = 3,200 bytes. + +#if !defined(ARDUINO_ARCH_SAMD) +#undef USE_SPI_DMA ///< DMA currently for SAMD chips only +#endif + +#if defined(USE_SPI_DMA) +#include +#endif + +#include "Arduino_DataBus.h" + +#if defined(ARDUINO_ARCH_ARC32) || defined(ARDUINO_MAXIM) +#define SPI_DEFAULT_FREQ 16000000 +// Teensy 3.0, 3.1/3.2, 3.5, 3.6 +#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) +#define SPI_DEFAULT_FREQ 40000000 +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +#define SPI_DEFAULT_FREQ 40000000 +#elif defined(__AVR__) || defined(TEENSYDUINO) +#define SPI_DEFAULT_FREQ 8000000 +#elif defined(ESP8266) || defined(ESP32) +#define SPI_DEFAULT_FREQ 40000000 +#elif defined(RASPI) +#define SPI_DEFAULT_FREQ 80000000 +#elif defined(ARDUINO_ARCH_STM32F1) +#define SPI_DEFAULT_FREQ 36000000 +#else +#define SPI_DEFAULT_FREQ 24000000 ///< Default SPI data clock frequency +#endif + +class Arduino_HWSPI : public Arduino_DataBus +{ +public: +#if defined(ESP32) + Arduino_HWSPI(int8_t dc, int8_t cs = -1, int8_t sck = -1, int8_t mosi = -1, int8_t miso = -1, bool is_shared_interface = true); // Constructor +#else + Arduino_HWSPI(int8_t dc, int8_t cs = -1, bool is_shared_interface = true); // Constructor +#endif + + virtual void begin(int32_t speed = 0, int8_t dataMode = -1); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +private: + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + + int8_t _dc, _cs; +#if defined(ESP32) + int8_t _sck, _mosi, _miso; +#endif + bool _is_shared_interface; + + // CLASS INSTANCE VARIABLES -------------------------------------------- + + // Here be dragons! There's a big union of three structures here -- + // one each for hardware SPI, software (bitbang) SPI, and parallel + // interfaces. This is to save some memory, since a display's connection + // will be only one of these. The order of some things is a little weird + // in an attempt to get values to align and pack better in RAM. + +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) + PORTreg_t csPortSet; ///< PORT register for chip select SET + PORTreg_t csPortClr; ///< PORT register for chip select CLEAR + PORTreg_t dcPortSet; ///< PORT register for data/command SET + PORTreg_t dcPortClr; ///< PORT register for data/command CLEAR +#else // !HAS_PORT_SET_CLR + PORTreg_t csPort; ///< PORT register for chip select + PORTreg_t dcPort; ///< PORT register for data/command +#endif // end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO + +#if defined(USE_SPI_DMA) // Used by hardware SPI and tft8 + Adafruit_ZeroDMA dma; ///< DMA instance + DmacDescriptor *dptr = NULL; ///< 1st descriptor + DmacDescriptor *descriptor = NULL; ///< Allocated descriptor list + uint16_t *pixelBuf[2]; ///< Working buffers + uint16_t maxFillLen; ///< Max pixels per DMA xfer + uint16_t lastFillColor = 0; ///< Last color used w/fill + uint32_t lastFillLen = 0; ///< # of pixels w/last fill + uint8_t onePixelBuf; ///< For hi==lo fill +#endif +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if !defined(KINETISK) + ARDUINOGFX_PORT_t csPinMask; ///< Bitmask for chip select + ARDUINOGFX_PORT_t dcPinMask; ///< Bitmask for data/command +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + ARDUINOGFX_PORT_t csPinMaskSet; ///< Bitmask for chip select SET (OR) + ARDUINOGFX_PORT_t csPinMaskClr; ///< Bitmask for chip select CLEAR (AND) + ARDUINOGFX_PORT_t dcPinMaskSet; ///< Bitmask for data/command SET (OR) + ARDUINOGFX_PORT_t dcPinMaskClr; ///< Bitmask for data/command CLEAR (AND) +#endif // end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO +}; + +#endif // _ARDUINO_HWSPI_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.cpp new file mode 100644 index 0000000..4f80b0f --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.cpp @@ -0,0 +1,812 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_DataBus.h" +#include "Arduino_SWSPI.h" + +Arduino_SWSPI::Arduino_SWSPI(int8_t dc, int8_t cs, int8_t sck, int8_t mosi, int8_t miso /* = -1 */) + : _dc(dc), _cs(cs), _sck(sck), _mosi(mosi), _miso(miso) +{ +} + +void Arduino_SWSPI::begin(int32_t speed, int8_t dataMode) +{ + UNUSED(speed); + UNUSED(dataMode); + + if (_dc >= 0) + { + pinMode(_dc, OUTPUT); + digitalWrite(_dc, HIGH); // Data mode + } + if (_cs >= 0) + { + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); // Deselect + } + pinMode(_mosi, OUTPUT); + digitalWrite(_mosi, LOW); + pinMode(_sck, OUTPUT); + digitalWrite(_sck, LOW); + if (_miso >= 0) + { + pinMode(_miso, INPUT); + } + +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(ESP32) + sckPinMask = digitalPinToBitMask(_sck); + mosiPinMask = digitalPinToBitMask(_mosi); + if (_sck >= 32) + { + sckPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + sckPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else + { + sckPortSet = (PORTreg_t)&GPIO.out_w1ts; + sckPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + if (_mosi >= 32) + { + mosiPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + mosiPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else + { + mosiPortSet = (PORTreg_t)&GPIO.out_w1ts; + mosiPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + dcPinMask = digitalPinToBitMask(_dc); + if (_dc >= 32) + { + dcPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + dcPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else + { + dcPortSet = (PORTreg_t)&GPIO.out_w1ts; + dcPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + if (_cs >= 32) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out1_w1ts.val; + csPortClr = (PORTreg_t)&GPIO.out1_w1tc.val; + } + else if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = (PORTreg_t)&GPIO.out_w1ts; + csPortClr = (PORTreg_t)&GPIO.out_w1tc; + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPortSet = (PORTreg_t)dcPortSet; + csPortClr = (PORTreg_t)dcPortClr; + csPinMask = 0; + } + if (_miso >= 0) + { + misoPort = portInputRegister(_miso); +#if !defined(KINETISK) + misoPinMask = digitalPinToBitMask(_miso); +#endif + } + else + { + misoPort = portInputRegister(_miso); + } + if (_miso >= 0) + { + misoPinMask = digitalPinToBitMask(_miso); + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_miso)); + } + else + { + misoPinMask = 0; + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_sck)); + } +#elif defined(CORE_TEENSY) +#if !defined(KINETISK) + sckPinMask = digitalPinToBitMask(_sck); + mosiPinMask = digitalPinToBitMask(_mosi); +#endif + sckPortSet = portSetRegister(_sck); + sckPortClr = portClearRegister(_sck); + mosiPortSet = portSetRegister(_mosi); + mosiPortClr = portClearRegister(_mosi); + if (_dc >= 0) + { +#if !defined(KINETISK) + dcPinMask = digitalPinToBitMask(_dc); +#endif + dcPortSet = portSetRegister(_dc); + dcPortClr = portClearRegister(_dc); + } + else + { +#if !defined(KINETISK) + dcPinMask = 0; +#endif + dcPortSet = sckPortSet; + dcPortClr = sckPortClr; + } + if (_cs >= 0) + { +#if !defined(KINETISK) + csPinMask = digitalPinToBitMask(_cs); +#endif + csPortSet = portSetRegister(_cs); + csPortClr = portClearRegister(_cs); + } + else + { +#if !defined(KINETISK) + csPinMask = 0; +#endif + csPortSet = sckPortSet; + csPortClr = sckPortClr; + } +#else // !CORE_TEENSY + sckPinMask = digitalPinToBitMask(_sck); + mosiPinMask = digitalPinToBitMask(_mosi); + sckPortSet = &(PORT->Group[g_APinDescription[_sck].ulPort].OUTSET.reg); + sckPortClr = &(PORT->Group[g_APinDescription[_sck].ulPort].OUTCLR.reg); + mosiPortSet = &(PORT->Group[g_APinDescription[_mosi].ulPort].OUTSET.reg); + mosiPortClr = &(PORT->Group[g_APinDescription[_mosi].ulPort].OUTCLR.reg); + if (_dc >= 0) + { + dcPinMask = digitalPinToBitMask(_dc); + dcPortSet = &(PORT->Group[g_APinDescription[_dc].ulPort].OUTSET.reg); + dcPortClr = &(PORT->Group[g_APinDescription[_dc].ulPort].OUTCLR.reg); + } + else + { + // No D/C line defined; 9-bit SPI. + // Assign a valid GPIO register (though not used for DC), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _dc and possibly branching. + dcPortSet = sckPortSet; + dcPortClr = sckPortClr; + dcPinMask = 0; + } + if (_cs >= 0) + { + csPinMask = digitalPinToBitMask(_cs); + csPortSet = &(PORT->Group[g_APinDescription[_cs].ulPort].OUTSET.reg); + csPortClr = &(PORT->Group[g_APinDescription[_cs].ulPort].OUTCLR.reg); + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPortSet = sckPortSet; + csPortClr = sckPortClr; + csPinMask = 0; + } + if (_miso >= 0) + { + misoPinMask = digitalPinToBitMask(_miso); + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_miso)); + } + else + { + misoPinMask = 0; + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_sck)); + } +#endif // end !CORE_TEENSY +#else // !HAS_PORT_SET_CLR + sckPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_sck)); + sckPinMaskSet = digitalPinToBitMask(_sck); + mosiPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_mosi)); + mosiPinMaskSet = digitalPinToBitMask(_mosi); + if (_dc >= 0) + { + dcPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_dc)); + dcPinMaskSet = digitalPinToBitMask(_dc); + } + else + { + // No D/C line defined; 9-bit SPI. + // Assign a valid GPIO register (though not used for DC), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _dc and possibly branching. + dcPort = sckPort; + dcPinMaskSet = 0; + } + if (_cs >= 0) + { + csPort = (PORTreg_t)portOutputRegister(digitalPinToPort(_cs)); + csPinMaskSet = digitalPinToBitMask(_cs); + } + else + { + // No chip-select line defined; might be permanently tied to GND. + // Assign a valid GPIO register (though not used for CS), and an + // empty pin bitmask...the nonsense bit-twiddling might be faster + // than checking _cs and possibly branching. + csPort = sckPort; + csPinMaskSet = 0; + } + if (_miso >= 0) + { + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_miso)); + misoPinMask = digitalPinToBitMask(_miso); + } + else + { + misoPort = (PORTreg_t)portInputRegister(digitalPinToPort(_sck)); + misoPinMask = 0; + } + csPinMaskClr = ~csPinMaskSet; + dcPinMaskClr = ~dcPinMaskSet; + sckPinMaskClr = ~sckPinMaskSet; + mosiPinMaskClr = ~mosiPinMaskSet; +#endif // !end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO +} + +void Arduino_SWSPI::beginWrite() +{ + if (_dc >= 0) + { + DC_HIGH(); + } + CS_LOW(); +} + +void Arduino_SWSPI::writeCommand(uint8_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITCOMMAND(c); + } + else + { + DC_LOW(); + WRITE(c); + DC_HIGH(); + } +} + +void Arduino_SWSPI::writeCommand16(uint16_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITCOMMAND(c >> 8); + WRITE9BITCOMMAND(c); + } + else + { + DC_LOW(); + WRITE16(c); + DC_HIGH(); + } +} + +void Arduino_SWSPI::writeCommand32(uint32_t c) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITCOMMAND(c >> 24); + WRITE9BITCOMMAND(c >> 16); + WRITE9BITCOMMAND(c >> 8); + WRITE9BITCOMMAND(c); + } + else + { + DC_LOW(); + WRITE32(c); + DC_HIGH(); + } +} + +void Arduino_SWSPI::write(uint8_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITDATA(d); + } + else + { + WRITE(d); + } +} + +void Arduino_SWSPI::write16(uint16_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITDATA(d >> 8); + WRITE9BITDATA(d); + } + else + { + WRITE16(d); + } +} + +void Arduino_SWSPI::write32(uint32_t d) +{ + if (_dc < 0) // 9-bit SPI + { + WRITE9BITDATA(d >> 24); + WRITE9BITDATA(d >> 16); + WRITE9BITDATA(d >> 8); + WRITE9BITDATA(d); + } + else + { + WRITE32(d); + } +} + +void Arduino_SWSPI::endWrite() +{ + CS_HIGH(); +} + +void Arduino_SWSPI::sendCommand(uint8_t c) +{ + CS_LOW(); + + writeCommand(c); + + CS_HIGH(); +} + +void Arduino_SWSPI::sendCommand16(uint16_t c) +{ + CS_LOW(); + + writeCommand16(c); + + CS_HIGH(); +} + +void Arduino_SWSPI::sendCommand32(uint32_t c) +{ + CS_LOW(); + + writeCommand32(c); + + CS_HIGH(); +} + +void Arduino_SWSPI::sendData(uint8_t d) +{ + CS_LOW(); + + WRITE(d); + + CS_HIGH(); +} + +void Arduino_SWSPI::sendData16(uint16_t d) +{ + CS_LOW(); + + WRITE16(d); + + CS_HIGH(); +} + +void Arduino_SWSPI::sendData32(uint32_t d) +{ + CS_LOW(); + + WRITE32(d); + + CS_HIGH(); +} + +void Arduino_SWSPI::writeRepeat(uint16_t p, uint32_t len) +{ + if (_dc < 0) // 9-bit SPI + { +// ESP8266 avoid trigger watchdog +#if defined(ESP8266) + while (len > (ESP8266SAFEBATCHBITSIZE / 9)) + { + WRITE9BITREPEAT(p, ESP8266SAFEBATCHBITSIZE / 9); + len -= ESP8266SAFEBATCHBITSIZE / 9; + yield(); + } + WRITE9BITREPEAT(p, len); +#else + WRITE9BITREPEAT(p, len); +#endif + } + else + { +#if defined(ESP8266) + while (len > (ESP8266SAFEBATCHBITSIZE / 8)) + { + WRITEREPEAT(p, ESP8266SAFEBATCHBITSIZE / 8); + len -= ESP8266SAFEBATCHBITSIZE / 8; + yield(); + } + WRITEREPEAT(p, len); +#else + WRITEREPEAT(p, len); +#endif + } +} + +void Arduino_SWSPI::writeBytes(uint8_t *data, uint32_t len) +{ + while (len--) + { + WRITE(*data++); + } +} + +void Arduino_SWSPI::writePixels(uint16_t *data, uint32_t len) +{ + while (len--) + { + WRITE16(*data++); + } +} + +/** + * @param data uint8_t * + * @param len uint8_t + * @param repeat uint32_t + */ +void Arduino_SWSPI::writePattern(uint8_t *data, uint8_t len, uint32_t repeat) +{ + while (repeat--) + { + for (uint8_t i = 0; i < len; i++) + { + WRITE(data[i]); + } + } +} + +INLINE void Arduino_SWSPI::WRITE9BITCOMMAND(uint8_t c) +{ + // D/C bit, command + SPI_MOSI_LOW(); + SPI_SCK_HIGH(); + SPI_SCK_LOW(); + + uint8_t bit = 0x80; + while (bit) + { + if (c & bit) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + SPI_SCK_HIGH(); + bit >>= 1; + SPI_SCK_LOW(); + } +} + +INLINE void Arduino_SWSPI::WRITE9BITDATA(uint8_t d) +{ + // D/C bit, data + SPI_MOSI_HIGH(); + SPI_SCK_HIGH(); + SPI_SCK_LOW(); + + uint8_t bit = 0x80; + while (bit) + { + if (d & bit) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + SPI_SCK_HIGH(); + bit >>= 1; + SPI_SCK_LOW(); + } +} + +INLINE void Arduino_SWSPI::WRITE(uint8_t d) +{ + uint8_t bit = 0x80; + while (bit) + { + if (d & bit) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + SPI_SCK_HIGH(); + bit >>= 1; + SPI_SCK_LOW(); + } +} + +INLINE void Arduino_SWSPI::WRITE16(uint16_t d) +{ + uint16_t bit = 0x8000; + while (bit) + { + if (d & bit) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + SPI_SCK_HIGH(); + bit >>= 1; + SPI_SCK_LOW(); + } +} + +INLINE void Arduino_SWSPI::WRITE32(uint32_t d) +{ + uint32_t bit = 0x80000000; + while (bit) + { + if (d & bit) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + SPI_SCK_HIGH(); + bit >>= 1; + SPI_SCK_LOW(); + } +} + +INLINE void Arduino_SWSPI::WRITE9BITREPEAT(uint16_t p, uint32_t len) +{ + if (p == 0xffff) // no need to set MOSI level while filling white + { + SPI_MOSI_HIGH(); + len *= 18; // 9-bit * 2 + while (len--) + { + SPI_SCK_HIGH(); + SPI_SCK_LOW(); + } + } + else + { + uint8_t hi = p >> 8; + uint8_t lo = p; + while (len--) + { + WRITE9BITDATA(hi); + WRITE9BITDATA(lo); + } + } +} + +INLINE void Arduino_SWSPI::WRITEREPEAT(uint16_t p, uint32_t len) +{ + if ((p == 0x0000) || (p == 0xffff)) // no need to set MOSI level while filling black or white + { + if (p) + { + SPI_MOSI_HIGH(); + } + else + { + SPI_MOSI_LOW(); + } + len *= 16; + while (len--) + { + SPI_SCK_HIGH(); + SPI_SCK_LOW(); + } + } + else + { + while (len--) + { + WRITE16(p); + } + } +} +/******** low level bit twiddling **********/ + +INLINE void Arduino_SWSPI::CS_HIGH(void) +{ + if (_cs >= 0) + { +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *csPortSet = 1; +#else // !KINETISK + *csPortSet = csPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *csPort |= csPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_cs, HIGH); +#endif // end !USE_FAST_PINIO + } +} + +INLINE void Arduino_SWSPI::CS_LOW(void) +{ + if (_cs >= 0) + { +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *csPortClr = 1; +#else // !KINETISK + *csPortClr = csPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *csPort &= csPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_cs, LOW); +#endif // end !USE_FAST_PINIO + } +} + +INLINE void Arduino_SWSPI::DC_HIGH(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *dcPortSet = 1; +#else // !KINETISK + *dcPortSet = dcPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *dcPort |= dcPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_dc, HIGH); +#endif // end !USE_FAST_PINIO +} + +INLINE void Arduino_SWSPI::DC_LOW(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *dcPortClr = 1; +#else // !KINETISK + *dcPortClr = dcPinMask; +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + *dcPort &= dcPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_dc, LOW); +#endif // end !USE_FAST_PINIO +} + +/*! + @brief Set the software (bitbang) SPI MOSI line HIGH. +*/ +INLINE void Arduino_SWSPI::SPI_MOSI_HIGH(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *mosiPortSet = 1; +#else // !KINETISK + *mosiPortSet = mosiPinMask; +#endif +#else // !HAS_PORT_SET_CLR + *mosiPort |= mosiPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_mosi, HIGH); +#endif // end !USE_FAST_PINIO +} + +/*! + @brief Set the software (bitbang) SPI MOSI line LOW. +*/ +INLINE void Arduino_SWSPI::SPI_MOSI_LOW(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *mosiPortClr = 1; +#else // !KINETISK + *mosiPortClr = mosiPinMask; +#endif +#else // !HAS_PORT_SET_CLR + *mosiPort &= mosiPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_mosi, LOW); +#endif // end !USE_FAST_PINIO +} + +/*! + @brief Set the software (bitbang) SPI SCK line HIGH. +*/ +INLINE void Arduino_SWSPI::SPI_SCK_HIGH(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *sckPortSet = 1; +#else // !KINETISK + *sckPortSet = sckPinMask; +#if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x + for (volatile uint8_t i = 0; i < 1; i++) + ; +#endif +#endif +#else // !HAS_PORT_SET_CLR + *sckPort |= sckPinMaskSet; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_sck, HIGH); +#endif // end !USE_FAST_PINIO +} + +/*! + @brief Set the software (bitbang) SPI SCK line LOW. +*/ +INLINE void Arduino_SWSPI::SPI_SCK_LOW(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if defined(KINETISK) + *sckPortClr = 1; +#else // !KINETISK + *sckPortClr = sckPinMask; +#if defined(__IMXRT1052__) || defined(__IMXRT1062__) // Teensy 4.x + for (volatile uint8_t i = 0; i < 1; i++) + ; +#endif +#endif +#else // !HAS_PORT_SET_CLR + *sckPort &= sckPinMaskClr; +#endif // end !HAS_PORT_SET_CLR +#else // !USE_FAST_PINIO + digitalWrite(_sck, LOW); +#endif // end !USE_FAST_PINIO +} + +/*! + @brief Read the state of the software (bitbang) SPI MISO line. + @return true if HIGH, false if LOW. +*/ +INLINE bool Arduino_SWSPI::SPI_MISO_READ(void) +{ +#if defined(USE_FAST_PINIO) +#if defined(KINETISK) + return *misoPort; +#else // !KINETISK + return *misoPort & misoPinMask; +#endif // end !KINETISK +#else // !USE_FAST_PINIO + return digitalRead(_miso); +#endif // end !USE_FAST_PINIO +} \ No newline at end of file diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.h new file mode 100644 index 0000000..394fd07 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/databus/Arduino_SWSPI.h @@ -0,0 +1,192 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_SWSPI_H_ +#define _ARDUINO_SWSPI_H_ + +// HARDWARE CONFIG --------------------------------------------------------- + +#if defined(__AVR__) +typedef uint8_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#elif defined(ESP32) +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#elif defined(ESP8266) +#define ESP8266SAFEBATCHBITSIZE (2048 * 8 * 9) +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#elif defined(ARDUINO_STM32_FEATHER) +typedef uint32_t ARDUINOGFX_PORT_t; +#elif defined(__arm__) +#if defined(ARDUINO_ARCH_SAMD) +// Adafruit M0, M4 +typedef uint32_t ARDUINOGFX_PORT_t; +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#elif defined(CORE_TEENSY) +#if defined(__IMXRT1052__) || defined(__IMXRT1062__) +// PJRC Teensy 4.x +typedef uint32_t ARDUINOGFX_PORT_t; +#else +// PJRC Teensy 3.x +typedef uint8_t ARDUINOGFX_PORT_t; +#endif +#define USE_FAST_PINIO ///< Use direct PORT register access +#define HAS_PORT_SET_CLR ///< PORTs have set & clear registers +#else +// Arduino Due? +typedef uint32_t ARDUINOGFX_PORT_t; +// USE_FAST_PINIO not available here (yet)...Due has a totally different +// GPIO register set and will require some changes elsewhere (e.g. in +// constructors especially). +#endif +#else // !ARM +// Unknow architecture, USE_FAST_PINIO is not available here (yet) +// but don't worry about it too much...the digitalWrite() implementation +// on these platforms is reasonably efficient and already RAM-resident, +// only gotcha then is no parallel connection support for now. +typedef uint32_t ARDUINOGFX_PORT_t; +#endif // end !ARM +typedef volatile ARDUINOGFX_PORT_t *PORTreg_t; + +#if defined(ADAFRUIT_PYPORTAL) || defined(ADAFRUIT_PYBADGE_M4_EXPRESS) || defined(ADAFRUIT_PYGAMER_M4_EXPRESS) || defined(ADAFRUIT_HALLOWING_M4_EXPRESS) +#define USE_SPI_DMA ///< Auto DMA if using PyPortal +#else +//#define USE_SPI_DMA ///< If set, use DMA if available +#endif +// Another "oops" name -- this now also handles parallel DMA. +// If DMA is enabled, Arduino sketch MUST #include +// Estimated RAM usage: +// 4 bytes/pixel on display major axis + 8 bytes/pixel on minor axis, +// e.g. 320x240 pixels = 320 * 4 + 240 * 8 = 3,200 bytes. + +#if !defined(ARDUINO_ARCH_SAMD) +#undef USE_SPI_DMA ///< DMA currently for SAMD chips only +#endif + +#if defined(USE_SPI_DMA) +#include +#endif + +#include "Arduino_DataBus.h" + +class Arduino_SWSPI : public Arduino_DataBus +{ +public: + Arduino_SWSPI(int8_t dc, int8_t cs, int8_t _sck, int8_t _mosi, int8_t _miso = -1); // Constructor + + virtual void begin(int32_t speed = 0, int8_t dataMode = -1); + virtual void beginWrite(); + virtual void writeCommand(uint8_t); + virtual void writeCommand16(uint16_t); + virtual void writeCommand32(uint32_t); + virtual void write(uint8_t); + virtual void write16(uint16_t); + virtual void write32(uint32_t); + virtual void writeRepeat(uint16_t p, uint32_t len); + virtual void writeBytes(uint8_t *data, uint32_t len); + virtual void writePixels(uint16_t *data, uint32_t len); + virtual void writePattern(uint8_t *data, uint8_t len, uint32_t repeat); + virtual void endWrite(); + + virtual void sendCommand(uint8_t); + virtual void sendCommand16(uint16_t); + virtual void sendCommand32(uint32_t); + virtual void sendData(uint8_t); + virtual void sendData16(uint16_t); + virtual void sendData32(uint32_t); + +private: + INLINE void WRITE9BITCOMMAND(uint8_t c); + INLINE void WRITE9BITDATA(uint8_t d); + INLINE void WRITE(uint8_t d); + INLINE void WRITE16(uint16_t d); + INLINE void WRITE32(uint32_t d); + INLINE void WRITE9BITREPEAT(uint16_t p, uint32_t len); + INLINE void WRITEREPEAT(uint16_t p, uint32_t len); + INLINE void CS_HIGH(void); + INLINE void CS_LOW(void); + INLINE void DC_HIGH(void); + INLINE void DC_LOW(void); + INLINE void SPI_MOSI_HIGH(void); + INLINE void SPI_MOSI_LOW(void); + INLINE void SPI_SCK_HIGH(void); + INLINE void SPI_SCK_LOW(void); + INLINE bool SPI_MISO_READ(void); + + int8_t _dc, _cs; + int8_t _sck, _mosi, _miso; + + // CLASS INSTANCE VARIABLES -------------------------------------------- + + // Here be dragons! There's a big union of three structures here -- + // one each for hardware SPI, software (bitbang) SPI, and parallel + // interfaces. This is to save some memory, since a display's connection + // will be only one of these. The order of some things is a little weird + // in an attempt to get values to align and pack better in RAM. + +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) + PORTreg_t csPortSet; ///< PORT register for chip select SET + PORTreg_t csPortClr; ///< PORT register for chip select CLEAR + PORTreg_t dcPortSet; ///< PORT register for data/command SET + PORTreg_t dcPortClr; ///< PORT register for data/command CLEAR +#else // !HAS_PORT_SET_CLR + PORTreg_t csPort; ///< PORT register for chip select + PORTreg_t dcPort; ///< PORT register for data/command +#endif // end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO + +#if defined(USE_FAST_PINIO) + PORTreg_t misoPort; ///< PORT (PIN) register for MISO +#if defined(HAS_PORT_SET_CLR) + PORTreg_t mosiPortSet; ///< PORT register for MOSI SET + PORTreg_t mosiPortClr; ///< PORT register for MOSI CLEAR + PORTreg_t sckPortSet; ///< PORT register for SCK SET + PORTreg_t sckPortClr; ///< PORT register for SCK CLEAR +#if !defined(KINETISK) + ARDUINOGFX_PORT_t mosiPinMask; ///< Bitmask for MOSI + ARDUINOGFX_PORT_t sckPinMask; ///< Bitmask for SCK +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + PORTreg_t mosiPort; ///< PORT register for MOSI + PORTreg_t sckPort; ///< PORT register for SCK + ARDUINOGFX_PORT_t mosiPinMaskSet; ///< Bitmask for MOSI SET (OR) + ARDUINOGFX_PORT_t mosiPinMaskClr; ///< Bitmask for MOSI CLEAR (AND) + ARDUINOGFX_PORT_t sckPinMaskSet; ///< Bitmask for SCK SET (OR bitmask) + ARDUINOGFX_PORT_t sckPinMaskClr; ///< Bitmask for SCK CLEAR (AND) +#endif // end HAS_PORT_SET_CLR +#if !defined(KINETISK) + ARDUINOGFX_PORT_t misoPinMask; ///< Bitmask for MISO +#endif // end !KINETISK +#endif // end USE_FAST_PINIO + +#if defined(USE_SPI_DMA) // Used by hardware SPI and tft8 + Adafruit_ZeroDMA dma; ///< DMA instance + DmacDescriptor *dptr = NULL; ///< 1st descriptor + DmacDescriptor *descriptor = NULL; ///< Allocated descriptor list + uint16_t *pixelBuf[2]; ///< Working buffers + uint16_t maxFillLen; ///< Max pixels per DMA xfer + uint16_t lastFillColor = 0; ///< Last color used w/fill + uint32_t lastFillLen = 0; ///< # of pixels w/last fill + uint8_t onePixelBuf; ///< For hi==lo fill +#endif +#if defined(USE_FAST_PINIO) +#if defined(HAS_PORT_SET_CLR) +#if !defined(KINETISK) + ARDUINOGFX_PORT_t csPinMask; ///< Bitmask for chip select + ARDUINOGFX_PORT_t dcPinMask; ///< Bitmask for data/command +#endif // end !KINETISK +#else // !HAS_PORT_SET_CLR + ARDUINOGFX_PORT_t csPinMaskSet; ///< Bitmask for chip select SET (OR) + ARDUINOGFX_PORT_t csPinMaskClr; ///< Bitmask for chip select CLEAR (AND) + ARDUINOGFX_PORT_t dcPinMaskSet; ///< Bitmask for data/command SET (OR) + ARDUINOGFX_PORT_t dcPinMaskClr; ///< Bitmask for data/command CLEAR (AND) +#endif // end HAS_PORT_SET_CLR +#endif // end USE_FAST_PINIO +}; + +#endif // _ARDUINO_SWSPI_H_ diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.cpp new file mode 100644 index 0000000..0f6d4a6 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.cpp @@ -0,0 +1,318 @@ +#include "Arduino_GC9A01.h" +#include "SPI.h" + +Arduino_GC9A01::Arduino_GC9A01( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_GC9A01::begin(int32_t speed) +{ + _override_datamode = SPI_MODE0; // always use SPI_MODE0 + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_GC9A01::tftInit() +{ + _bus->sendCommand(0xEF); + _bus->sendCommand(0xEB); + _bus->sendData(0x14); + + _bus->sendCommand(0xFE); + _bus->sendCommand(0xEF); + + _bus->sendCommand(0xEB); + _bus->sendData(0x14); + + _bus->sendCommand(0x84); + _bus->sendData(0x40); + + _bus->sendCommand(0x85); + _bus->sendData(0xFF); + + _bus->sendCommand(0x86); + _bus->sendData(0xFF); + + _bus->sendCommand(0x87); + _bus->sendData(0xFF); + + _bus->sendCommand(0x88); + _bus->sendData(0x0A); + + _bus->sendCommand(0x89); + _bus->sendData(0x21); + + _bus->sendCommand(0x8A); + _bus->sendData(0x00); + + _bus->sendCommand(0x8B); + _bus->sendData(0x80); + + _bus->sendCommand(0x8C); + _bus->sendData(0x01); + + _bus->sendCommand(0x8D); + _bus->sendData(0x01); + + _bus->sendCommand(0x8E); + _bus->sendData(0xFF); + + _bus->sendCommand(0x8F); + _bus->sendData(0xFF); + + _bus->sendCommand(0xB6); + _bus->sendData(0x00); + _bus->sendData(0x20); + + _bus->sendCommand(0x3A); + _bus->sendData(0x05); + + _bus->sendCommand(0x90); + _bus->sendData(0x08); + _bus->sendData(0x08); + _bus->sendData(0x08); + _bus->sendData(0x08); + + _bus->sendCommand(0xBD); + _bus->sendData(0x06); + + _bus->sendCommand(0xBC); + _bus->sendData(0x00); + + _bus->sendCommand(0xFF); + _bus->sendData(0x60); + _bus->sendData(0x01); + _bus->sendData(0x04); + + _bus->sendCommand(0xC3); + _bus->sendData(0x13); + _bus->sendCommand(0xC4); + _bus->sendData(0x13); + + _bus->sendCommand(0xC9); + _bus->sendData(0x22); + + _bus->sendCommand(0xBE); + _bus->sendData(0x11); + + _bus->sendCommand(0xE1); + _bus->sendData(0x10); + _bus->sendData(0x0E); + + _bus->sendCommand(0xDF); + _bus->sendData(0x21); + _bus->sendData(0x0c); + _bus->sendData(0x02); + + _bus->sendCommand(0xF0); + _bus->sendData(0x45); + _bus->sendData(0x09); + _bus->sendData(0x08); + _bus->sendData(0x08); + _bus->sendData(0x26); + _bus->sendData(0x2A); + + _bus->sendCommand(0xF1); + _bus->sendData(0x43); + _bus->sendData(0x70); + _bus->sendData(0x72); + _bus->sendData(0x36); + _bus->sendData(0x37); + _bus->sendData(0x6F); + + _bus->sendCommand(0xF2); + _bus->sendData(0x45); + _bus->sendData(0x09); + _bus->sendData(0x08); + _bus->sendData(0x08); + _bus->sendData(0x26); + _bus->sendData(0x2A); + + _bus->sendCommand(0xF3); + _bus->sendData(0x43); + _bus->sendData(0x70); + _bus->sendData(0x72); + _bus->sendData(0x36); + _bus->sendData(0x37); + _bus->sendData(0x6F); + + _bus->sendCommand(0xED); + _bus->sendData(0x1B); + _bus->sendData(0x0B); + + _bus->sendCommand(0xAE); + _bus->sendData(0x77); + + _bus->sendCommand(0xCD); + _bus->sendData(0x63); + + _bus->sendCommand(0x70); + _bus->sendData(0x07); + _bus->sendData(0x07); + _bus->sendData(0x04); + _bus->sendData(0x0E); + _bus->sendData(0x0F); + _bus->sendData(0x09); + _bus->sendData(0x07); + _bus->sendData(0x08); + _bus->sendData(0x03); + + _bus->sendCommand(0xE8); + _bus->sendData(0x34); + + _bus->sendCommand(0x62); + _bus->sendData(0x18); + _bus->sendData(0x0D); + _bus->sendData(0x71); + _bus->sendData(0xED); + _bus->sendData(0x70); + _bus->sendData(0x70); + _bus->sendData(0x18); + _bus->sendData(0x0F); + _bus->sendData(0x71); + _bus->sendData(0xEF); + _bus->sendData(0x70); + _bus->sendData(0x70); + + _bus->sendCommand(0x63); + _bus->sendData(0x18); + _bus->sendData(0x11); + _bus->sendData(0x71); + _bus->sendData(0xF1); + _bus->sendData(0x70); + _bus->sendData(0x70); + _bus->sendData(0x18); + _bus->sendData(0x13); + _bus->sendData(0x71); + _bus->sendData(0xF3); + _bus->sendData(0x70); + _bus->sendData(0x70); + + _bus->sendCommand(0x64); + _bus->sendData(0x28); + _bus->sendData(0x29); + _bus->sendData(0xF1); + _bus->sendData(0x01); + _bus->sendData(0xF1); + _bus->sendData(0x00); + _bus->sendData(0x07); + + _bus->sendCommand(0x66); + _bus->sendData(0x3C); + _bus->sendData(0x00); + _bus->sendData(0xCD); + _bus->sendData(0x67); + _bus->sendData(0x45); + _bus->sendData(0x45); + _bus->sendData(0x10); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + + _bus->sendCommand(0x67); + _bus->sendData(0x00); + _bus->sendData(0x3C); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x01); + _bus->sendData(0x54); + _bus->sendData(0x10); + _bus->sendData(0x32); + _bus->sendData(0x98); + + _bus->sendCommand(0x74); + _bus->sendData(0x10); + _bus->sendData(0x85); + _bus->sendData(0x80); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x4E); + _bus->sendData(0x00); + + _bus->sendCommand(0x98); + _bus->sendData(0x3e); + _bus->sendData(0x07); + + _bus->sendCommand(0x35); + + if (_ips) + { + _bus->sendCommand(GC9A01_INVON); + } + _bus->sendCommand(GC9A01_SLPOUT); + delay(GC9A01_SLPOUT_DELAY); + _bus->sendCommand(GC9A01_DISPON); + delay(20); +} + +void Arduino_GC9A01::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW) || (y != _currentY) || (h != _currentH)) + { + _bus->writeC8D16D16(GC9A01_CASET, x + _xStart, x + w - 1 + _xStart); + _bus->writeC8D16D16(GC9A01_RASET, y + _yStart, y + h - 1 + _yStart); + _bus->writeCommand(GC9A01_RAMWR); // write to RAM + + _currentX = x; + _currentY = y; + _currentW = w; + _currentH = h; + } +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_GC9A01::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = 0x08; + break; + + case 1: + r = 0xC8; + break; + + case 2: + r = 0x68; + break; + + case 3: + r = 0xA8; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(GC9A01_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_GC9A01::invertDisplay(bool i) +{ + _bus->sendCommand(_ips ? (i ? GC9A01_INVOFF : GC9A01_INVON) : (i ? GC9A01_INVON : GC9A01_INVOFF)); +} + +void Arduino_GC9A01::displayOn(void) +{ + _bus->sendCommand(GC9A01_SLPOUT); + delay(GC9A01_SLPOUT_DELAY); +} + +void Arduino_GC9A01::displayOff(void) +{ + _bus->sendCommand(GC9A01_SLPIN); + delay(GC9A01_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.h new file mode 100644 index 0000000..80aec52 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_GC9A01.h @@ -0,0 +1,72 @@ +#ifndef _ARDUINO_GC9A01_H_ +#define _ARDUINO_GC9A01_H_ + +#include +#include +#include "./Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define GC9A01_TFTWIDTH 240 +#define GC9A01_TFTHEIGHT 240 + +#define GC9A01_RST_DELAY 100 ///< delay ms wait for reset finish +#define GC9A01_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define GC9A01_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define GC9A01_NOP 0x00 +#define GC9A01_SWRESET 0x01 +#define GC9A01_RDDID 0x04 +#define GC9A01_RDDST 0x09 + +#define GC9A01_SLPIN 0x10 +#define GC9A01_SLPOUT 0x11 +#define GC9A01_PTLON 0x12 +#define GC9A01_NORON 0x13 + +#define GC9A01_INVOFF 0x20 +#define GC9A01_INVON 0x21 +#define GC9A01_DISPOFF 0x28 +#define GC9A01_DISPON 0x29 + +#define GC9A01_CASET 0x2A +#define GC9A01_RASET 0x2B +#define GC9A01_RAMWR 0x2C +#define GC9A01_RAMRD 0x2E + +#define GC9A01_PTLAR 0x30 +#define GC9A01_COLMOD 0x3A +#define GC9A01_MADCTL 0x36 + +#define GC9A01_MADCTL_MY 0x80 +#define GC9A01_MADCTL_MX 0x40 +#define GC9A01_MADCTL_MV 0x20 +#define GC9A01_MADCTL_ML 0x10 +#define GC9A01_MADCTL_RGB 0x00 + +#define GC9A01_RDID1 0xDA +#define GC9A01_RDID2 0xDB +#define GC9A01_RDID3 0xDC +#define GC9A01_RDID4 0xDD + +class Arduino_GC9A01 : public Arduino_TFT +{ +public: + Arduino_GC9A01( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = GC9A01_TFTWIDTH, int16_t h = GC9A01_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.cpp new file mode 100644 index 0000000..332e8b5 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.cpp @@ -0,0 +1,407 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_HX8347C.h" + +Arduino_HX8347C::Arduino_HX8347C( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ + _invert = ips; +} + +void Arduino_HX8347C::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_HX8347C::tftInit() +{ + //LCD Init For 3.0inch LCD Panel with HX8347C. + //Power Voltage Setting + _bus->sendCommand(0x1A); + _bus->sendData(0x02); //BT + _bus->sendCommand(0x1B); + _bus->sendData(0x8B); //VRH + //****VCOM offset**/// + _bus->sendCommand(0x23); + _bus->sendData(0x00); //SEL_VCM + _bus->sendCommand(0x24); + _bus->sendData(0x5D); //VCM + _bus->sendCommand(0x25); + _bus->sendData(0x15); //VDV + _bus->sendCommand(0x2D); + _bus->sendData(0x01); //NOW[2:0]=001 + //****OPON**// + _bus->sendCommand(0xE8); + _bus->sendData(0x60); + //Power on Setting + _bus->sendCommand(0x18); + _bus->sendData(0x04); //Frame rate 72Hz + _bus->sendCommand(0x19); + _bus->sendData(0x01); //OSC_EN='1', start Osc + _bus->sendCommand(0x01); + _bus->sendData(0x00); //DP_STB='0', out deep sleep + _bus->sendCommand(0x1F); + _bus->sendData(0x88); //STB=0 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0x80); //DK=0 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0x90); //PON=1 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0xD0); //VCOMG=1 + delay(5); + + //262k/65k color selection + _bus->sendCommand(0x17); + _bus->sendData(0x05); //default 0x06 262k color // 0x05 65k color + //SET PANEL + _bus->sendCommand(0x29); + _bus->sendData(0x31); //400 lines + _bus->sendCommand(0x71); + _bus->sendData(0x1A); //RTN + //Gamma 2.2 Setting + _bus->sendCommand(0x40); + _bus->sendData(0x00); + _bus->sendCommand(0x41); + _bus->sendData(0x77); + _bus->sendCommand(0x42); + _bus->sendData(0x77); + _bus->sendCommand(0x43); + _bus->sendData(0x00); + _bus->sendCommand(0x44); + _bus->sendData(0x04); + _bus->sendCommand(0x45); + _bus->sendData(0x00); + _bus->sendCommand(0x46); + _bus->sendData(0x00); + _bus->sendCommand(0x47); + _bus->sendData(0x00); + _bus->sendCommand(0x48); + _bus->sendData(0x77); + _bus->sendCommand(0x49); + _bus->sendData(0x00); + _bus->sendCommand(0x4A); + _bus->sendData(0x00); + _bus->sendCommand(0x4B); + _bus->sendData(0x08); + _bus->sendCommand(0x4C); + _bus->sendData(0x00); + _bus->sendCommand(0x4D); + _bus->sendData(0x00); + _bus->sendCommand(0x4E); + _bus->sendData(0x00); + //Set DGC + _bus->sendCommand(0xFF); + _bus->sendData(0x01); //Page1 + _bus->sendCommand(0x00); + _bus->sendData(0x01); //DGC_EN + _bus->sendCommand(0x01); + _bus->sendData(0x00); + _bus->sendCommand(0x02); + _bus->sendData(0x06); + _bus->sendCommand(0x03); + _bus->sendData(0x0C); + _bus->sendCommand(0x04); + _bus->sendData(0x12); + _bus->sendCommand(0x05); + _bus->sendData(0x16); + _bus->sendCommand(0x06); + _bus->sendData(0x1C); + _bus->sendCommand(0x07); + _bus->sendData(0x23); + _bus->sendCommand(0x08); + _bus->sendData(0x2E); + _bus->sendCommand(0x09); + _bus->sendData(0x36); + _bus->sendCommand(0x0A); + _bus->sendData(0x3F); + _bus->sendCommand(0x0B); + _bus->sendData(0x47); + _bus->sendCommand(0x0C); + _bus->sendData(0x50); + _bus->sendCommand(0x0D); + _bus->sendData(0x57); + _bus->sendCommand(0x0E); + _bus->sendData(0x5F); + _bus->sendCommand(0x0F); + _bus->sendData(0x67); + _bus->sendCommand(0x10); + _bus->sendData(0x6F); + _bus->sendCommand(0x11); + _bus->sendData(0x76); + _bus->sendCommand(0x12); + _bus->sendData(0x7F); + _bus->sendCommand(0x13); + _bus->sendData(0x87); + _bus->sendCommand(0x14); + _bus->sendData(0x90); + _bus->sendCommand(0x15); + _bus->sendData(0x99); + _bus->sendCommand(0x16); + _bus->sendData(0xA3); + _bus->sendCommand(0x17); + _bus->sendData(0xAD); + _bus->sendCommand(0x18); + _bus->sendData(0xB4); + _bus->sendCommand(0x19); + _bus->sendData(0xBB); + _bus->sendCommand(0x1A); + _bus->sendData(0xC4); + _bus->sendCommand(0x1B); + _bus->sendData(0xCE); + _bus->sendCommand(0x1C); + _bus->sendData(0xD9); + _bus->sendCommand(0x1D); + _bus->sendData(0xE3); + _bus->sendCommand(0x1E); + _bus->sendData(0xEC); + _bus->sendCommand(0x1F); + _bus->sendData(0xF3); + _bus->sendCommand(0x20); + _bus->sendData(0xF7); + _bus->sendCommand(0x21); + _bus->sendData(0xFC); + _bus->sendCommand(0x22); + _bus->sendData(0x00); + _bus->sendCommand(0x23); + _bus->sendData(0x06); + _bus->sendCommand(0x24); + _bus->sendData(0x0C); + _bus->sendCommand(0x25); + _bus->sendData(0x12); + _bus->sendCommand(0x26); + _bus->sendData(0x16); + _bus->sendCommand(0x27); + _bus->sendData(0x1C); + _bus->sendCommand(0x28); + _bus->sendData(0x23); + _bus->sendCommand(0x29); + _bus->sendData(0x2E); + _bus->sendCommand(0x2A); + _bus->sendData(0x36); + _bus->sendCommand(0x2B); + _bus->sendData(0x3F); + _bus->sendCommand(0x2C); + _bus->sendData(0x47); + _bus->sendCommand(0x2D); + _bus->sendData(0x50); + _bus->sendCommand(0x2E); + _bus->sendData(0x57); + _bus->sendCommand(0x2F); + _bus->sendData(0x5F); + _bus->sendCommand(0x30); + _bus->sendData(0x67); + _bus->sendCommand(0x31); + _bus->sendData(0x6F); + _bus->sendCommand(0x32); + _bus->sendData(0x76); + _bus->sendCommand(0x33); + _bus->sendData(0x7F); + _bus->sendCommand(0x34); + _bus->sendData(0x87); + _bus->sendCommand(0x35); + _bus->sendData(0x90); + _bus->sendCommand(0x36); + _bus->sendData(0x99); + _bus->sendCommand(0x37); + _bus->sendData(0xA3); + _bus->sendCommand(0x38); + _bus->sendData(0xAD); + _bus->sendCommand(0x39); + _bus->sendData(0xB4); + _bus->sendCommand(0x3A); + _bus->sendData(0xBB); + _bus->sendCommand(0x3B); + _bus->sendData(0xC4); + _bus->sendCommand(0x3C); + _bus->sendData(0xCE); + _bus->sendCommand(0x3D); + _bus->sendData(0xD9); + _bus->sendCommand(0x3E); + _bus->sendData(0xE3); + _bus->sendCommand(0x3F); + _bus->sendData(0xEC); + _bus->sendCommand(0x40); + _bus->sendData(0xF3); + _bus->sendCommand(0x41); + _bus->sendData(0xF7); + _bus->sendCommand(0x42); + _bus->sendData(0xFC); + _bus->sendCommand(0x43); + _bus->sendData(0x00); + _bus->sendCommand(0x44); + _bus->sendData(0x06); + _bus->sendCommand(0x45); + _bus->sendData(0x0C); + _bus->sendCommand(0x46); + _bus->sendData(0x12); + _bus->sendCommand(0x47); + _bus->sendData(0x16); + _bus->sendCommand(0x48); + _bus->sendData(0x1C); + _bus->sendCommand(0x49); + _bus->sendData(0x23); + _bus->sendCommand(0x4A); + _bus->sendData(0x2E); + _bus->sendCommand(0x4B); + _bus->sendData(0x36); + _bus->sendCommand(0x4C); + _bus->sendData(0x3F); + _bus->sendCommand(0x4D); + _bus->sendData(0x47); + _bus->sendCommand(0x4E); + _bus->sendData(0x50); + _bus->sendCommand(0x4F); + _bus->sendData(0x57); + _bus->sendCommand(0x50); + _bus->sendData(0x5F); + _bus->sendCommand(0x51); + _bus->sendData(0x67); + _bus->sendCommand(0x52); + _bus->sendData(0x6F); + _bus->sendCommand(0x53); + _bus->sendData(0x76); + _bus->sendCommand(0x54); + _bus->sendData(0x7F); + _bus->sendCommand(0x55); + _bus->sendData(0x87); + _bus->sendCommand(0x56); + _bus->sendData(0x90); + _bus->sendCommand(0x57); + _bus->sendData(0x99); + _bus->sendCommand(0x58); + _bus->sendData(0xA3); + _bus->sendCommand(0x59); + _bus->sendData(0xAD); + _bus->sendCommand(0x5A); + _bus->sendData(0xB4); + _bus->sendCommand(0x5B); + _bus->sendData(0xBB); + _bus->sendCommand(0x5C); + _bus->sendData(0xC4); + _bus->sendCommand(0x5D); + _bus->sendData(0xCE); + _bus->sendCommand(0x5E); + _bus->sendData(0xD9); + _bus->sendCommand(0x5F); + _bus->sendData(0xE3); + _bus->sendCommand(0x60); + _bus->sendData(0xEC); + _bus->sendCommand(0x61); + _bus->sendData(0xF3); + _bus->sendCommand(0x62); + _bus->sendData(0xF7); + _bus->sendCommand(0x63); + _bus->sendData(0xFC); + _bus->sendCommand(0xFF); + _bus->sendData(0x00); //Page0 + //Display ON Setting + _bus->sendCommand(0x28); + _bus->sendData(0x38); //GON=1, DTE=1, D=10 + delay(40); + _bus->sendCommand(0x28); + _bus->sendData(0x3C); //GON=1, DTE=1, D=11 + _bus->sendCommand(0x22); //Start GRAM write +} + +void Arduino_HX8347C::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + _bus->writeCommand(0x02); + _bus->write(x_start >> 8); + _bus->writeCommand(0x03); + _bus->write(x_start & 0xFF); + _bus->writeCommand(0x04); + _bus->write(x_end >> 8); + _bus->writeCommand(0x05); + _bus->write(x_end & 0xFF); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + _bus->writeCommand(0x06); + _bus->write(y_start >> 8); + _bus->writeCommand(0x07); + _bus->write(y_start & 0xFF); + _bus->writeCommand(0x08); + _bus->write(y_end >> 8); + _bus->writeCommand(0x09); + _bus->write(y_end & 0xFF); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(0x22); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_HX8347C::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x17 : 0x07); + _bus->sendCommand(0x16); + _bus->sendData(0x40); + break; + case 1: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x13 : 0x03); + _bus->sendCommand(0x16); + _bus->sendData(0x60); + break; + case 2: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x13 : 0x03); + _bus->sendCommand(0x16); + _bus->sendData(0x00); + break; + case 3: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x17 : 0x07); + _bus->sendCommand(0x16); + _bus->sendData(0x20); + break; + } +} + +void Arduino_HX8347C::invertDisplay(bool i) +{ + _invert = _ips ^ i; + setRotation(_rotation); // set invert by calling setRotation() +} + +void Arduino_HX8347C::displayOn(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x3C); //GON=1, DTE=1, D=11 +} + +void Arduino_HX8347C::displayOff(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x34); //GON=1, DTE=1, D=01 + delay(40); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.h new file mode 100644 index 0000000..aed6e9d --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347C.h @@ -0,0 +1,38 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_HX8347C_H_ +#define _ARDUINO_HX8347C_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define HX8347C_TFTWIDTH 240 ///< HX8347C max TFT width +#define HX8347C_TFTHEIGHT 320 ///< HX8347C max TFT height + +class Arduino_HX8347C : public Arduino_TFT +{ +public: + Arduino_HX8347C( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = HX8347C_TFTWIDTH, int16_t h = HX8347C_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + bool _invert = false; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.cpp new file mode 100644 index 0000000..0b6d711 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.cpp @@ -0,0 +1,228 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_HX8347D.h" +#include "SPI.h" + +Arduino_HX8347D::Arduino_HX8347D( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_HX8347D::begin(int32_t speed) +{ +#if defined(__AVR__) + _override_datamode = SPI_MODE0; +#endif + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_HX8347D::tftInit() +{ + spi_operation_t hx8347d_init_operations[] = { + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, 0xEA}, + {WRITE_DATA_8, 0x00}, + {WRITE_COMMAND_8, 0xEB}, + {WRITE_DATA_8, 0x20}, + {WRITE_COMMAND_8, 0xEC}, + {WRITE_DATA_8, 0x0C}, + {WRITE_COMMAND_8, 0xED}, + {WRITE_DATA_8, 0xC4}, + {WRITE_COMMAND_8, 0xE8}, + {WRITE_DATA_8, 0x38}, + {WRITE_COMMAND_8, 0xE9}, + {WRITE_DATA_8, 0x10}, + {WRITE_COMMAND_8, 0xF1}, + {WRITE_DATA_8, 0x01}, + {WRITE_COMMAND_8, 0xF2}, + {WRITE_DATA_8, 0x10}, + {WRITE_COMMAND_8, 0x40}, + {WRITE_DATA_8, 0x01}, + {WRITE_COMMAND_8, 0x41}, + {WRITE_DATA_8, 0x00}, + {WRITE_COMMAND_8, 0x42}, + {WRITE_DATA_8, 0x00}, + {WRITE_COMMAND_8, 0x43}, + {WRITE_DATA_8, 0x10}, + {WRITE_COMMAND_8, 0x44}, + {WRITE_DATA_8, 0x0E}, + {WRITE_COMMAND_8, 0x45}, + {WRITE_DATA_8, 0x24}, + {WRITE_COMMAND_8, 0x46}, + {WRITE_DATA_8, 0x04}, + {WRITE_COMMAND_8, 0x47}, + {WRITE_DATA_8, 0x50}, + {WRITE_COMMAND_8, 0x48}, + {WRITE_DATA_8, 0x02}, + {WRITE_COMMAND_8, 0x49}, + {WRITE_DATA_8, 0x13}, + {WRITE_COMMAND_8, 0x4A}, + {WRITE_DATA_8, 0x19}, + {WRITE_COMMAND_8, 0x4B}, + {WRITE_DATA_8, 0x19}, + {WRITE_COMMAND_8, 0x4C}, + {WRITE_DATA_8, 0x16}, + {WRITE_COMMAND_8, 0x50}, + {WRITE_DATA_8, 0x1B}, + {WRITE_COMMAND_8, 0x51}, + {WRITE_DATA_8, 0x31}, + {WRITE_COMMAND_8, 0x52}, + {WRITE_DATA_8, 0x2F}, + {WRITE_COMMAND_8, 0x53}, + {WRITE_DATA_8, 0x3F}, + {WRITE_COMMAND_8, 0x54}, + {WRITE_DATA_8, 0x3F}, + {WRITE_COMMAND_8, 0x55}, + {WRITE_DATA_8, 0x3E}, + {WRITE_COMMAND_8, 0x56}, + {WRITE_DATA_8, 0x2F}, + {WRITE_COMMAND_8, 0x57}, + {WRITE_DATA_8, 0x7B}, + {WRITE_COMMAND_8, 0x58}, + {WRITE_DATA_8, 0x09}, + {WRITE_COMMAND_8, 0x59}, + {WRITE_DATA_8, 0x06}, + {WRITE_COMMAND_8, 0x5A}, + {WRITE_DATA_8, 0x06}, + {WRITE_COMMAND_8, 0x5B}, + {WRITE_DATA_8, 0x0C}, + {WRITE_COMMAND_8, 0x5C}, + {WRITE_DATA_8, 0x1D}, + {WRITE_COMMAND_8, 0x5D}, + {WRITE_DATA_8, 0xCC}, + {WRITE_COMMAND_8, 0x1B}, + {WRITE_DATA_8, 0x1B}, + {WRITE_COMMAND_8, 0x1A}, + {WRITE_DATA_8, 0x01}, + {WRITE_COMMAND_8, 0x24}, + {WRITE_DATA_8, 0x2F}, + {WRITE_COMMAND_8, 0x25}, + {WRITE_DATA_8, 0x57}, + {WRITE_COMMAND_8, 0x23}, + {WRITE_DATA_8, 0x88}, + {WRITE_COMMAND_8, 0x18}, + {WRITE_DATA_8, 0x34}, + {WRITE_COMMAND_8, 0x19}, + {WRITE_DATA_8, 0x01}, + {WRITE_COMMAND_8, 0x1F}, + {WRITE_DATA_8, 0x88}, + {WRITE_COMMAND_8, 0x1F}, + {WRITE_DATA_8, 0x80}, + {WRITE_COMMAND_8, 0x1F}, + {WRITE_DATA_8, 0x90}, + {WRITE_COMMAND_8, 0x1F}, + {WRITE_DATA_8, 0xD0}, + {WRITE_COMMAND_8, 0x17}, + {WRITE_DATA_8, 0x05}, + {WRITE_COMMAND_8, 0x28}, + {WRITE_DATA_8, 0x38}, + {WRITE_COMMAND_8, 0x28}, + {WRITE_DATA_8, 0x3F}, + {WRITE_COMMAND_8, 0x16}, + {WRITE_DATA_8, 0x18}, + {END_WRITE, 0}, + }; + + _bus->batchOperation(hx8347d_init_operations, sizeof(hx8347d_init_operations) / sizeof(hx8347d_init_operations[0])); + + if (_ips) + { + _bus->beginWrite(); + _bus->writeC8D8(0x01, 0x02); + _bus->endWrite(); + } +} + +void Arduino_HX8347D::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + _bus->writeC8D8(0x02, x_start >> 8); + _bus->writeC8D8(0x03, x_start & 0xFF); + _bus->writeC8D8(0x04, x_end >> 8); + _bus->writeC8D8(0x05, x_end & 0xFF); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + _bus->writeC8D8(0x06, y_start >> 8); + _bus->writeC8D8(0x07, y_start & 0xFF); + _bus->writeC8D8(0x08, y_end >> 8); + _bus->writeC8D8(0x09, y_end & 0xFF); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(0x22); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_HX8347D::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + _bus->beginWrite(); + switch (_rotation) + { + case 0: + _bus->writeC8D8(0x36, 0x07); + _bus->writeC8D8(0x16, 0x40); + break; + case 1: + _bus->writeC8D8(0x36, 0x07); + _bus->writeC8D8(0x16, 0x20); + break; + case 2: + _bus->writeC8D8(0x36, 0x03); + _bus->writeC8D8(0x16, 0x00); + break; + case 3: + _bus->writeC8D8(0x36, 0x03); + _bus->writeC8D8(0x16, 0x60); + break; + } + _bus->endWrite(); +} + +void Arduino_HX8347D::invertDisplay(bool i) +{ + _bus->beginWrite(); + if (_ips && i) + { + _bus->writeC8D8(0x01, 0x00); + } + else + { + _bus->writeC8D8(0x01, 0x02); + } + _bus->endWrite(); +} + +void Arduino_HX8347D::displayOn(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x3C); //GON=1, DTE=1, D=11 +} + +void Arduino_HX8347D::displayOff(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x34); //GON=1, DTE=1, D=01 + delay(40); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.h new file mode 100644 index 0000000..fc99e14 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8347D.h @@ -0,0 +1,38 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_HX8347D_H_ +#define _ARDUINO_HX8347D_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define HX8347D_TFTWIDTH 240 ///< HX8347D max TFT width +#define HX8347D_TFTHEIGHT 320 ///< HX8347D max TFT height + +class Arduino_HX8347D : public Arduino_TFT +{ +public: + Arduino_HX8347D( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = HX8347D_TFTWIDTH, int16_t h = HX8347D_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + bool _invert = false; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.cpp new file mode 100644 index 0000000..a59a589 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.cpp @@ -0,0 +1,407 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_HX8352C.h" + +Arduino_HX8352C::Arduino_HX8352C( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ + _invert = ips; +} + +void Arduino_HX8352C::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_HX8352C::tftInit() +{ + //LCD Init For 3.0inch LCD Panel with HX8352C. + //Power Voltage Setting + _bus->sendCommand(0x1A); + _bus->sendData(0x02); //BT + _bus->sendCommand(0x1B); + _bus->sendData(0x8B); //VRH + //****VCOM offset**/// + _bus->sendCommand(0x23); + _bus->sendData(0x00); //SEL_VCM + _bus->sendCommand(0x24); + _bus->sendData(0x5D); //VCM + _bus->sendCommand(0x25); + _bus->sendData(0x15); //VDV + _bus->sendCommand(0x2D); + _bus->sendData(0x01); //NOW[2:0]=001 + //****OPON**// + _bus->sendCommand(0xE8); + _bus->sendData(0x60); + //Power on Setting + _bus->sendCommand(0x18); + _bus->sendData(0x04); //Frame rate 72Hz + _bus->sendCommand(0x19); + _bus->sendData(0x01); //OSC_EN='1', start Osc + _bus->sendCommand(0x01); + _bus->sendData(0x00); //DP_STB='0', out deep sleep + _bus->sendCommand(0x1F); + _bus->sendData(0x88); //STB=0 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0x80); //DK=0 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0x90); //PON=1 + delay(5); + _bus->sendCommand(0x1F); + _bus->sendData(0xD0); //VCOMG=1 + delay(5); + + //262k/65k color selection + _bus->sendCommand(0x17); + _bus->sendData(0x05); //default 0x06 262k color // 0x05 65k color + //SET PANEL + _bus->sendCommand(0x29); + _bus->sendData(0x31); //400 lines + _bus->sendCommand(0x71); + _bus->sendData(0x1A); //RTN + //Gamma 2.2 Setting + _bus->sendCommand(0x40); + _bus->sendData(0x00); + _bus->sendCommand(0x41); + _bus->sendData(0x77); + _bus->sendCommand(0x42); + _bus->sendData(0x77); + _bus->sendCommand(0x43); + _bus->sendData(0x00); + _bus->sendCommand(0x44); + _bus->sendData(0x04); + _bus->sendCommand(0x45); + _bus->sendData(0x00); + _bus->sendCommand(0x46); + _bus->sendData(0x00); + _bus->sendCommand(0x47); + _bus->sendData(0x00); + _bus->sendCommand(0x48); + _bus->sendData(0x77); + _bus->sendCommand(0x49); + _bus->sendData(0x00); + _bus->sendCommand(0x4A); + _bus->sendData(0x00); + _bus->sendCommand(0x4B); + _bus->sendData(0x08); + _bus->sendCommand(0x4C); + _bus->sendData(0x00); + _bus->sendCommand(0x4D); + _bus->sendData(0x00); + _bus->sendCommand(0x4E); + _bus->sendData(0x00); + //Set DGC + _bus->sendCommand(0xFF); + _bus->sendData(0x01); //Page1 + _bus->sendCommand(0x00); + _bus->sendData(0x01); //DGC_EN + _bus->sendCommand(0x01); + _bus->sendData(0x00); + _bus->sendCommand(0x02); + _bus->sendData(0x06); + _bus->sendCommand(0x03); + _bus->sendData(0x0C); + _bus->sendCommand(0x04); + _bus->sendData(0x12); + _bus->sendCommand(0x05); + _bus->sendData(0x16); + _bus->sendCommand(0x06); + _bus->sendData(0x1C); + _bus->sendCommand(0x07); + _bus->sendData(0x23); + _bus->sendCommand(0x08); + _bus->sendData(0x2E); + _bus->sendCommand(0x09); + _bus->sendData(0x36); + _bus->sendCommand(0x0A); + _bus->sendData(0x3F); + _bus->sendCommand(0x0B); + _bus->sendData(0x47); + _bus->sendCommand(0x0C); + _bus->sendData(0x50); + _bus->sendCommand(0x0D); + _bus->sendData(0x57); + _bus->sendCommand(0x0E); + _bus->sendData(0x5F); + _bus->sendCommand(0x0F); + _bus->sendData(0x67); + _bus->sendCommand(0x10); + _bus->sendData(0x6F); + _bus->sendCommand(0x11); + _bus->sendData(0x76); + _bus->sendCommand(0x12); + _bus->sendData(0x7F); + _bus->sendCommand(0x13); + _bus->sendData(0x87); + _bus->sendCommand(0x14); + _bus->sendData(0x90); + _bus->sendCommand(0x15); + _bus->sendData(0x99); + _bus->sendCommand(0x16); + _bus->sendData(0xA3); + _bus->sendCommand(0x17); + _bus->sendData(0xAD); + _bus->sendCommand(0x18); + _bus->sendData(0xB4); + _bus->sendCommand(0x19); + _bus->sendData(0xBB); + _bus->sendCommand(0x1A); + _bus->sendData(0xC4); + _bus->sendCommand(0x1B); + _bus->sendData(0xCE); + _bus->sendCommand(0x1C); + _bus->sendData(0xD9); + _bus->sendCommand(0x1D); + _bus->sendData(0xE3); + _bus->sendCommand(0x1E); + _bus->sendData(0xEC); + _bus->sendCommand(0x1F); + _bus->sendData(0xF3); + _bus->sendCommand(0x20); + _bus->sendData(0xF7); + _bus->sendCommand(0x21); + _bus->sendData(0xFC); + _bus->sendCommand(0x22); + _bus->sendData(0x00); + _bus->sendCommand(0x23); + _bus->sendData(0x06); + _bus->sendCommand(0x24); + _bus->sendData(0x0C); + _bus->sendCommand(0x25); + _bus->sendData(0x12); + _bus->sendCommand(0x26); + _bus->sendData(0x16); + _bus->sendCommand(0x27); + _bus->sendData(0x1C); + _bus->sendCommand(0x28); + _bus->sendData(0x23); + _bus->sendCommand(0x29); + _bus->sendData(0x2E); + _bus->sendCommand(0x2A); + _bus->sendData(0x36); + _bus->sendCommand(0x2B); + _bus->sendData(0x3F); + _bus->sendCommand(0x2C); + _bus->sendData(0x47); + _bus->sendCommand(0x2D); + _bus->sendData(0x50); + _bus->sendCommand(0x2E); + _bus->sendData(0x57); + _bus->sendCommand(0x2F); + _bus->sendData(0x5F); + _bus->sendCommand(0x30); + _bus->sendData(0x67); + _bus->sendCommand(0x31); + _bus->sendData(0x6F); + _bus->sendCommand(0x32); + _bus->sendData(0x76); + _bus->sendCommand(0x33); + _bus->sendData(0x7F); + _bus->sendCommand(0x34); + _bus->sendData(0x87); + _bus->sendCommand(0x35); + _bus->sendData(0x90); + _bus->sendCommand(0x36); + _bus->sendData(0x99); + _bus->sendCommand(0x37); + _bus->sendData(0xA3); + _bus->sendCommand(0x38); + _bus->sendData(0xAD); + _bus->sendCommand(0x39); + _bus->sendData(0xB4); + _bus->sendCommand(0x3A); + _bus->sendData(0xBB); + _bus->sendCommand(0x3B); + _bus->sendData(0xC4); + _bus->sendCommand(0x3C); + _bus->sendData(0xCE); + _bus->sendCommand(0x3D); + _bus->sendData(0xD9); + _bus->sendCommand(0x3E); + _bus->sendData(0xE3); + _bus->sendCommand(0x3F); + _bus->sendData(0xEC); + _bus->sendCommand(0x40); + _bus->sendData(0xF3); + _bus->sendCommand(0x41); + _bus->sendData(0xF7); + _bus->sendCommand(0x42); + _bus->sendData(0xFC); + _bus->sendCommand(0x43); + _bus->sendData(0x00); + _bus->sendCommand(0x44); + _bus->sendData(0x06); + _bus->sendCommand(0x45); + _bus->sendData(0x0C); + _bus->sendCommand(0x46); + _bus->sendData(0x12); + _bus->sendCommand(0x47); + _bus->sendData(0x16); + _bus->sendCommand(0x48); + _bus->sendData(0x1C); + _bus->sendCommand(0x49); + _bus->sendData(0x23); + _bus->sendCommand(0x4A); + _bus->sendData(0x2E); + _bus->sendCommand(0x4B); + _bus->sendData(0x36); + _bus->sendCommand(0x4C); + _bus->sendData(0x3F); + _bus->sendCommand(0x4D); + _bus->sendData(0x47); + _bus->sendCommand(0x4E); + _bus->sendData(0x50); + _bus->sendCommand(0x4F); + _bus->sendData(0x57); + _bus->sendCommand(0x50); + _bus->sendData(0x5F); + _bus->sendCommand(0x51); + _bus->sendData(0x67); + _bus->sendCommand(0x52); + _bus->sendData(0x6F); + _bus->sendCommand(0x53); + _bus->sendData(0x76); + _bus->sendCommand(0x54); + _bus->sendData(0x7F); + _bus->sendCommand(0x55); + _bus->sendData(0x87); + _bus->sendCommand(0x56); + _bus->sendData(0x90); + _bus->sendCommand(0x57); + _bus->sendData(0x99); + _bus->sendCommand(0x58); + _bus->sendData(0xA3); + _bus->sendCommand(0x59); + _bus->sendData(0xAD); + _bus->sendCommand(0x5A); + _bus->sendData(0xB4); + _bus->sendCommand(0x5B); + _bus->sendData(0xBB); + _bus->sendCommand(0x5C); + _bus->sendData(0xC4); + _bus->sendCommand(0x5D); + _bus->sendData(0xCE); + _bus->sendCommand(0x5E); + _bus->sendData(0xD9); + _bus->sendCommand(0x5F); + _bus->sendData(0xE3); + _bus->sendCommand(0x60); + _bus->sendData(0xEC); + _bus->sendCommand(0x61); + _bus->sendData(0xF3); + _bus->sendCommand(0x62); + _bus->sendData(0xF7); + _bus->sendCommand(0x63); + _bus->sendData(0xFC); + _bus->sendCommand(0xFF); + _bus->sendData(0x00); //Page0 + //Display ON Setting + _bus->sendCommand(0x28); + _bus->sendData(0x38); //GON=1, DTE=1, D=10 + delay(40); + _bus->sendCommand(0x28); + _bus->sendData(0x3C); //GON=1, DTE=1, D=11 + _bus->sendCommand(0x22); //Start GRAM write +} + +void Arduino_HX8352C::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + _bus->writeCommand(0x02); + _bus->write(x_start >> 8); + _bus->writeCommand(0x03); + _bus->write(x_start & 0xFF); + _bus->writeCommand(0x04); + _bus->write(x_end >> 8); + _bus->writeCommand(0x05); + _bus->write(x_end & 0xFF); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + _bus->writeCommand(0x06); + _bus->write(y_start >> 8); + _bus->writeCommand(0x07); + _bus->write(y_start & 0xFF); + _bus->writeCommand(0x08); + _bus->write(y_end >> 8); + _bus->writeCommand(0x09); + _bus->write(y_end & 0xFF); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(0x22); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_HX8352C::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x17 : 0x07); + _bus->sendCommand(0x16); + _bus->sendData(0x40); + break; + case 1: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x13 : 0x03); + _bus->sendCommand(0x16); + _bus->sendData(0x60); + break; + case 2: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x13 : 0x03); + _bus->sendCommand(0x16); + _bus->sendData(0x00); + break; + case 3: + _bus->sendCommand(0x36); + _bus->sendData(_invert ? 0x17 : 0x07); + _bus->sendCommand(0x16); + _bus->sendData(0x20); + break; + } +} + +void Arduino_HX8352C::invertDisplay(bool i) +{ + _invert = _ips ^ i; + setRotation(_rotation); // set invert by calling setRotation() +} + +void Arduino_HX8352C::displayOn(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x3C); //GON=1, DTE=1, D=11 +} + +void Arduino_HX8352C::displayOff(void) +{ + _bus->sendCommand(0x28); + _bus->sendData(0x34); //GON=1, DTE=1, D=01 + delay(40); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.h new file mode 100644 index 0000000..67e26e9 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8352C.h @@ -0,0 +1,38 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_HX8352C_H_ +#define _ARDUINO_HX8352C_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define HX8352C_TFTWIDTH 240 ///< HX8352C max TFT width +#define HX8352C_TFTHEIGHT 400 ///< HX8352C max TFT height + +class Arduino_HX8352C : public Arduino_TFT +{ +public: + Arduino_HX8352C( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = HX8352C_TFTWIDTH, int16_t h = HX8352C_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + bool _invert = false; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.cpp new file mode 100644 index 0000000..24b9939 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.cpp @@ -0,0 +1,201 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_HX8357B.h" + +Arduino_HX8357B::Arduino_HX8357B(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips /* = false */) + : Arduino_TFT(bus, rst, r, ips, HX8357B_TFTWIDTH, HX8357B_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_HX8357B::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_HX8357B::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(HX8357B_SWRESET); // 1: Software reset + delay(HX8357B_RST_DELAY); + } + + //************* Start Initial Sequence **********// + delay(10); + _bus->sendCommand(0x11); //Sleep Out + delay(120); + + _bus->sendCommand(0xEE); //Set EQ + _bus->sendData(0x02); + _bus->sendData(0x01); + _bus->sendData(0x02); + _bus->sendData(0x01); + + _bus->sendCommand(0xED); //Set DIR TIM + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x9A); + _bus->sendData(0x9A); + _bus->sendData(0x9B); + _bus->sendData(0x9B); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0xAE); + _bus->sendData(0xAE); + _bus->sendData(0x01); + _bus->sendData(0xA2); + _bus->sendData(0x00); + + _bus->sendCommand(0xB4); //Set RM, DM + _bus->sendData(0x00); // + + _bus->sendCommand(0xC0); //Set Panel Driving + _bus->sendData(0x10); //REV SM GS + _bus->sendData(0x3B); // NL[5:0] + _bus->sendData(0x00); //SCN[6:0] + _bus->sendData(0x02); //NDL 0 PTS[2:0] + _bus->sendData(0x11); //PTG ISC[3:0] + + _bus->sendCommand(0xC1); // + _bus->sendData(0x10); //ne inversion + + _bus->sendCommand(0xC8); //Set Gamma + _bus->sendData(0x00); //KP1,KP0 + _bus->sendData(0x32); //KP3,KP2 + _bus->sendData(0x36); //KP5,KP4 + _bus->sendData(0x45); //RP1,RP0 + _bus->sendData(0x06); //VRP0 01 + _bus->sendData(0x16); //VRP1 + _bus->sendData(0x37); //KN1,KN0 + _bus->sendData(0x75); //KN3,KN2 + _bus->sendData(0x77); //KN5,KN4 + _bus->sendData(0x54); //RN1,RN0 + _bus->sendData(0x0c); //VRN0 + _bus->sendData(0x00); //VRN1 01 + + _bus->sendCommand(0xD0); //Set Power + _bus->sendData(0x44); //DDVDH :5.28 + _bus->sendData(0x42); // BT VGH:15.84 VGL:-7.92 + _bus->sendData(0x06); //VREG1 4.625V + + _bus->sendCommand(0xD1); //Set VCOM + _bus->sendData(0x43); //VCOMH + _bus->sendData(0x16); + + _bus->sendCommand(0xD2); + _bus->sendData(0x04); + _bus->sendData(0x22); //12 + + _bus->sendCommand(0xD3); + _bus->sendData(0x04); + _bus->sendData(0x12); + + _bus->sendCommand(0xD4); + _bus->sendData(0x07); + _bus->sendData(0x12); + + _bus->sendCommand(0xE9); //Set Panel + _bus->sendData(0x00); + + _bus->sendCommand(0xC5); //Set Frame rate + _bus->sendData(0x08); //61.51Hz + + _bus->sendCommand(0x36); + _bus->sendData(0x0a); + + _bus->sendCommand(0X3A); + _bus->sendData(0X55); + + delay(120); + + _bus->sendCommand(0x21); + + _bus->sendCommand(0x29); //Display On + delay(50); +} + +void Arduino_HX8357B::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(HX8357B_CASET); // Column addr set + _bus->write(x_start >> 8); + _bus->write(x_start & 0xFF); // XSTART + _bus->write(x_end >> 8); + _bus->write(x_end & 0xFF); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(HX8357B_PASET); // Row addr set + _bus->write(y_start >> 8); + _bus->write(y_start & 0xFF); // YSTART + _bus->write(y_end >> 8); + _bus->write(y_end & 0xFF); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(HX8357B_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_HX8357B::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (HX8357B_MADCTL_MX | HX8357B_MADCTL_BGR); + break; + case 1: + r = (HX8357B_MADCTL_MV | HX8357B_MADCTL_BGR); + break; + case 2: + r = (HX8357B_MADCTL_MY | HX8357B_MADCTL_BGR); + break; + case 3: + r = (HX8357B_MADCTL_MX | HX8357B_MADCTL_MY | HX8357B_MADCTL_MV | HX8357B_MADCTL_BGR); + break; + } + + _bus->beginWrite(); + _bus->writeCommand(HX8357B_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_HX8357B::invertDisplay(bool i) +{ + _bus->sendCommand(i ? HX8357B_INVON : HX8357B_INVOFF); +} + +void Arduino_HX8357B::displayOn(void) +{ + _bus->sendCommand(HX8357B_SLPOUT); + delay(HX8357B_SLPOUT_DELAY); +} + +void Arduino_HX8357B::displayOff(void) +{ + _bus->sendCommand(HX8357B_SLPIN); + delay(HX8357B_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.h new file mode 100644 index 0000000..60ca9cc --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_HX8357B.h @@ -0,0 +1,102 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_HX8357B_H_ +#define _ARDUINO_HX8357B_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define HX8357B_TFTWIDTH 320 ///< HX8357B max TFT width +#define HX8357B_TFTHEIGHT 480 ///< HX8357B max TFT height + +#define HX8357B_RST_DELAY 120 ///< delay ms wait for reset finish +#define HX8357B_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define HX8357B_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define HX8357B_NOP 0x00 ///< No-op register +#define HX8357B_SWRESET 0x01 ///< Software reset register +#define HX8357B_RDDID 0x04 ///< Read display identification information +#define HX8357B_RDDST 0x09 ///< Read Display Status + +#define HX8357B_SLPIN 0x10 ///< Enter Sleep Mode +#define HX8357B_SLPOUT 0x11 ///< Sleep Out +#define HX8357B_PTLON 0x12 ///< Partial Mode ON +#define HX8357B_NORON 0x13 ///< Normal Display Mode ON + +#define HX8357B_RDMODE 0x0A ///< Read Display Power Mode +#define HX8357B_RDMADCTL 0x0B ///< Read Display MADCTL +#define HX8357B_RDPIXFMT 0x0C ///< Read Display Pixel Format +#define HX8357B_RDIMGFMT 0x0D ///< Read Display Image Format +#define HX8357B_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result + +#define HX8357B_INVOFF 0x20 ///< Display Inversion OFF +#define HX8357B_INVON 0x21 ///< Display Inversion ON +#define HX8357B_GAMMASET 0x26 ///< Gamma Set +#define HX8357B_DISPOFF 0x28 ///< Display OFF +#define HX8357B_DISPON 0x29 ///< Display ON + +#define HX8357B_CASET 0x2A ///< Column Address Set +#define HX8357B_PASET 0x2B ///< Page Address Set +#define HX8357B_RAMWR 0x2C ///< Memory Write +#define HX8357B_RAMRD 0x2E ///< Memory Read + +#define HX8357B_PTLAR 0x30 ///< Partial Area +#define HX8357B_VSCRDEF 0x33 ///< Vertical Scrolling Definition +#define HX8357B_MADCTL 0x36 ///< Memory Access Control +#define HX8357B_VSCRSADD 0x37 ///< Vertical Scrolling Start Address +#define HX8357B_PIXFMT 0x3A ///< COLMOD: Pixel Format Set + +#define HX8357B_FRMCTR1 0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors) +#define HX8357B_FRMCTR2 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors) +#define HX8357B_FRMCTR3 0xB3 ///< Frame Rate control (In Partial Mode/Full Colors) +#define HX8357B_INVCTR 0xB4 ///< Display Inversion Control +#define HX8357B_DFUNCTR 0xB6 ///< Display Function Control + +#define HX8357B_PWCTR1 0xC0 ///< Power Control 1 +#define HX8357B_PWCTR2 0xC1 ///< Power Control 2 +#define HX8357B_PWCTR3 0xC2 ///< Power Control 3 +#define HX8357B_PWCTR4 0xC3 ///< Power Control 4 +#define HX8357B_PWCTR5 0xC4 ///< Power Control 5 +#define HX8357B_VMCTR1 0xC5 ///< VCOM Control 1 +#define HX8357B_VMCTR2 0xC7 ///< VCOM Control 2 + +#define HX8357B_RDID1 0xDA ///< Read ID 1 +#define HX8357B_RDID2 0xDB ///< Read ID 2 +#define HX8357B_RDID3 0xDC ///< Read ID 3 +#define HX8357B_RDID4 0xDD ///< Read ID 4 + +#define HX8357B_GMCTRP1 0xE0 ///< Positive Gamma Correction +#define HX8357B_GMCTRN1 0xE1 ///< Negative Gamma Correction +#define HX8357B_PWCTR6 0xFC + +#define HX8357B_MADCTL_MY 0x80 ///< Bottom to top +#define HX8357B_MADCTL_MX 0x40 ///< Right to left +#define HX8357B_MADCTL_MV 0x20 ///< Reverse Mode +#define HX8357B_MADCTL_ML 0x10 ///< LCD refresh Bottom to top +#define HX8357B_MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order +#define HX8357B_MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order +#define HX8357B_MADCTL_MH 0x04 ///< LCD refresh right to left + +class Arduino_HX8357B : public Arduino_TFT +{ +public: + Arduino_HX8357B(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, bool ips = false); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.cpp new file mode 100644 index 0000000..b16d646 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.cpp @@ -0,0 +1,161 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ILI9225.h" + +Arduino_ILI9225::Arduino_ILI9225(Arduino_DataBus *bus, int8_t rst, uint8_t r) + : Arduino_TFT(bus, rst, r, false, ILI9225_TFTWIDTH, ILI9225_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_ILI9225::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9225::tftInit() +{ + // Power-on sequence + _bus->sendCommand(ILI9225_POWER_CTRL2); + _bus->sendData16(0x0018); // Set APON,PON,AON,VCI1EN,VC + _bus->sendCommand(ILI9225_POWER_CTRL3); + _bus->sendData16(0x6121); // Set BT,DC1,DC2,DC3 + _bus->sendCommand(ILI9225_POWER_CTRL4); + _bus->sendData16(0x006F); // Set GVDD /*007F 0088 */ + _bus->sendCommand(ILI9225_POWER_CTRL5); + _bus->sendData16(0x495F); // Set VCOMH/VCOML voltage + _bus->sendCommand(ILI9225_POWER_CTRL1); + _bus->sendData16(0x0800); // Set SAP,DSTB,STB + + delay(10); + + _bus->sendCommand(ILI9225_POWER_CTRL2); + _bus->sendData16(0x103B); // Set APON,PON,AON,VCI1EN,VC + + _bus->sendCommand(ILI9225_DISP_CTRL1); + _bus->sendData16(0x0012); + + delay(50); + + _bus->sendCommand(ILI9225_DISP_CTRL1); + _bus->sendData16(0x1017); +} + +void Arduino_ILI9225::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint8_t cmd1, cmd2, cmd3; + + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + if (_rotation & 0x01) // Landscape + { + cmd1 = ILI9225_VERTICAL_WINDOW_ADDR2; + cmd2 = ILI9225_VERTICAL_WINDOW_ADDR1; + cmd3 = ILI9225_RAM_ADDR_SET2; + } + else + { + cmd1 = ILI9225_HORIZONTAL_WINDOW_ADDR2; + cmd2 = ILI9225_HORIZONTAL_WINDOW_ADDR1; + cmd3 = ILI9225_RAM_ADDR_SET1; + } + _bus->writeCommand(cmd1); + _bus->write16(x_start); + _bus->writeCommand(cmd2); + _bus->write16(x_end); + _bus->writeCommand(cmd3); + _bus->write16(x_start); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + if (_rotation & 0x01) // Landscape + { + cmd1 = ILI9225_HORIZONTAL_WINDOW_ADDR2; + cmd2 = ILI9225_HORIZONTAL_WINDOW_ADDR1; + cmd3 = ILI9225_RAM_ADDR_SET1; + } + else + { + cmd1 = ILI9225_VERTICAL_WINDOW_ADDR2; + cmd2 = ILI9225_VERTICAL_WINDOW_ADDR1; + cmd3 = ILI9225_RAM_ADDR_SET2; + } + _bus->writeCommand(cmd1); + _bus->write16(y_start); + _bus->writeCommand(cmd2); + _bus->write16(y_end); + _bus->writeCommand(cmd3); + _bus->write16(y_start); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ILI9225_GRAM_DATA_REG); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9225::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + _bus->sendCommand(ILI9225_DRIVER_OUTPUT_CTRL); + _bus->sendData16(0x021C); + _bus->sendCommand(ILI9225_ENTRY_MODE); + _bus->sendData16(0x1030); + break; + case 1: + _bus->sendCommand(ILI9225_DRIVER_OUTPUT_CTRL); + _bus->sendData16(0x031C); + _bus->sendCommand(ILI9225_ENTRY_MODE); + _bus->sendData16(0x1038); + break; + case 2: + _bus->sendCommand(ILI9225_DRIVER_OUTPUT_CTRL); + _bus->sendData16(0x011C); + _bus->sendCommand(ILI9225_ENTRY_MODE); + _bus->sendData16(0x1030); + break; + case 3: + _bus->sendCommand(ILI9225_DRIVER_OUTPUT_CTRL); + _bus->sendData16(0x001C); + _bus->sendCommand(ILI9225_ENTRY_MODE); + _bus->sendData16(0x1038); + break; + } +} + +void Arduino_ILI9225::invertDisplay(bool i) +{ + // Not Implemented + UNUSED(i); +} + +void Arduino_ILI9225::displayOn(void) +{ + _bus->sendCommand(ILI9225_POWER_CTRL1); + _bus->sendData16(0x0800); // Set SAP,DSTB,STB +} + +void Arduino_ILI9225::displayOff(void) +{ + _bus->sendCommand(ILI9225_POWER_CTRL1); + _bus->sendData16(0x0801); // Set SAP,DSTB,STB +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.h new file mode 100644 index 0000000..485d44f --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9225.h @@ -0,0 +1,76 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ILI9225_H_ +#define _ARDUINO_ILI9225_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define ILI9225_TFTWIDTH 176 ///< ILI9225 max TFT width +#define ILI9225_TFTHEIGHT 220 ///< ILI9225 max TFT height + +#define ILI9225_RST_DELAY 120 ///< delay ms wait for reset finish +#define ILI9225_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ILI9225_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ILI9225_DRIVER_OUTPUT_CTRL 0x01 // Driver Output Control +#define ILI9225_LCD_AC_DRIVING_CTRL 0x02 // LCD AC Driving Control +#define ILI9225_ENTRY_MODE 0x03 // Entry Mode +#define ILI9225_DISP_CTRL1 0x07 // Display Control 1 +#define ILI9225_BLANK_PERIOD_CTRL1 0x08 // Blank Period Control +#define ILI9225_FRAME_CYCLE_CTRL 0x0B // Frame Cycle Control +#define ILI9225_INTERFACE_CTRL 0x0C // Interface Control +#define ILI9225_OSC_CTRL 0x0F // Osc Control +#define ILI9225_POWER_CTRL1 0x10 // Power Control 1 +#define ILI9225_POWER_CTRL2 0x11 // Power Control 2 +#define ILI9225_POWER_CTRL3 0x12 // Power Control 3 +#define ILI9225_POWER_CTRL4 0x13 // Power Control 4 +#define ILI9225_POWER_CTRL5 0x14 // Power Control 5 +#define ILI9225_VCI_RECYCLING 0x15 // VCI Recycling +#define ILI9225_RAM_ADDR_SET1 0x20 // Horizontal GRAM Address Set +#define ILI9225_RAM_ADDR_SET2 0x21 // Vertical GRAM Address Set +#define ILI9225_GRAM_DATA_REG 0x22 // GRAM Data Register +#define ILI9225_GATE_SCAN_CTRL 0x30 // Gate Scan Control Register +#define ILI9225_VERTICAL_SCROLL_CTRL1 0x31 // Vertical Scroll Control 1 Register +#define ILI9225_VERTICAL_SCROLL_CTRL2 0x32 // Vertical Scroll Control 2 Register +#define ILI9225_VERTICAL_SCROLL_CTRL3 0x33 // Vertical Scroll Control 3 Register +#define ILI9225_PARTIAL_DRIVING_POS1 0x34 // Partial Driving Position 1 Register +#define ILI9225_PARTIAL_DRIVING_POS2 0x35 // Partial Driving Position 2 Register +#define ILI9225_HORIZONTAL_WINDOW_ADDR1 0x36 // Horizontal Address Start Position +#define ILI9225_HORIZONTAL_WINDOW_ADDR2 0x37 // Horizontal Address End Position +#define ILI9225_VERTICAL_WINDOW_ADDR1 0x38 // Vertical Address Start Position +#define ILI9225_VERTICAL_WINDOW_ADDR2 0x39 // Vertical Address End Position +#define ILI9225_GAMMA_CTRL1 0x50 // Gamma Control 1 +#define ILI9225_GAMMA_CTRL2 0x51 // Gamma Control 2 +#define ILI9225_GAMMA_CTRL3 0x52 // Gamma Control 3 +#define ILI9225_GAMMA_CTRL4 0x53 // Gamma Control 4 +#define ILI9225_GAMMA_CTRL5 0x54 // Gamma Control 5 +#define ILI9225_GAMMA_CTRL6 0x55 // Gamma Control 6 +#define ILI9225_GAMMA_CTRL7 0x56 // Gamma Control 7 +#define ILI9225_GAMMA_CTRL8 0x57 // Gamma Control 8 +#define ILI9225_GAMMA_CTRL9 0x58 // Gamma Control 9 +#define ILI9225_GAMMA_CTRL10 0x59 // Gamma Control 10 + +class Arduino_ILI9225 : public Arduino_TFT +{ +public: + Arduino_ILI9225(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.cpp new file mode 100644 index 0000000..9ee3957 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.cpp @@ -0,0 +1,125 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit_ILI9341.git + */ +#include "Arduino_ILI9341.h" + +Arduino_ILI9341::Arduino_ILI9341(Arduino_DataBus *bus, int8_t rst, uint8_t r) + : Arduino_TFT(bus, rst, r, false, ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_ILI9341::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9341::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(ILI9341_SWRESET); // 1: Software reset + delay(ILI9341_RST_DELAY); + } + + spi_operation_t ili9341_init_operations[] = { + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ILI9341_PWCTR1}, // Power control VRH[5:0] + {WRITE_DATA_8, 0x23}, + {WRITE_COMMAND_8, ILI9341_PWCTR2}, // Power control SAP[2:0];BT[3:0] + {WRITE_DATA_8, 0x10}, + {WRITE_COMMAND_8, ILI9341_VMCTR1}, // VCM control + {WRITE_DATA_8, 0x3e}, + {WRITE_DATA_8, 0x28}, + {WRITE_COMMAND_8, ILI9341_VMCTR2}, // VCM control2 + {WRITE_DATA_8, 0x86}, + {WRITE_COMMAND_8, ILI9341_VSCRSADD}, // Vertical scroll zero + {WRITE_DATA_8, 0x00}, + {WRITE_COMMAND_8, ILI9341_PIXFMT}, + {WRITE_DATA_8, 0x55}, + {WRITE_COMMAND_8, ILI9341_FRMCTR1}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x18}, + {WRITE_COMMAND_8, ILI9341_DFUNCTR}, // Display Function Control + {WRITE_DATA_8, 0x08}, + {WRITE_DATA_8, 0x82}, + {WRITE_DATA_8, 0x27}, + {WRITE_COMMAND_8, ILI9341_SLPOUT}, // Exit Sleep + {END_WRITE, 0}, + {DELAY, ILI9341_SLPOUT_DELAY}, + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ILI9341_DISPON}, // Display on + {END_WRITE, 0}, + }; + + _bus->batchOperation(ili9341_init_operations, sizeof(ili9341_init_operations) / sizeof(ili9341_init_operations[0])); +} + +void Arduino_ILI9341::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + _bus->writeC8D16D16(ILI9341_CASET, x + _xStart, x + w - 1 + _xStart); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + _bus->writeC8D16D16(ILI9341_PASET, y + _yStart, y + h - 1 + _yStart); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ILI9341_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9341::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (ILI9341_MADCTL_MX | ILI9341_MADCTL_BGR); + break; + case 1: + r = (ILI9341_MADCTL_MV | ILI9341_MADCTL_BGR); + break; + case 2: + r = (ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR); + break; + case 3: + r = (ILI9341_MADCTL_MX | ILI9341_MADCTL_MY | ILI9341_MADCTL_MV | ILI9341_MADCTL_BGR); + break; + } + _bus->beginWrite(); + _bus->writeC8D8(ILI9341_MADCTL, r); + _bus->endWrite(); +} + +void Arduino_ILI9341::invertDisplay(bool i) +{ + _bus->sendCommand(i ? ILI9341_INVON : ILI9341_INVOFF); +} + +void Arduino_ILI9341::displayOn(void) +{ + _bus->sendCommand(ILI9341_SLPOUT); + delay(ILI9341_SLPOUT_DELAY); +} + +void Arduino_ILI9341::displayOff(void) +{ + _bus->sendCommand(ILI9341_SLPIN); + delay(ILI9341_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.h new file mode 100644 index 0000000..2419d6b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341.h @@ -0,0 +1,103 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit_ILI9341.git + */ +#ifndef _ARDUINO_ILI9341_H_ +#define _ARDUINO_ILI9341_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define ILI9341_TFTWIDTH 240 ///< ILI9341 max TFT width +#define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height + +#define ILI9341_RST_DELAY 120 ///< delay ms wait for reset finish +#define ILI9341_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ILI9341_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ILI9341_NOP 0x00 ///< No-op register +#define ILI9341_SWRESET 0x01 ///< Software reset register +#define ILI9341_RDDID 0x04 ///< Read display identification information +#define ILI9341_RDDST 0x09 ///< Read Display Status + +#define ILI9341_SLPIN 0x10 ///< Enter Sleep Mode +#define ILI9341_SLPOUT 0x11 ///< Sleep Out +#define ILI9341_PTLON 0x12 ///< Partial Mode ON +#define ILI9341_NORON 0x13 ///< Normal Display Mode ON + +#define ILI9341_RDMODE 0x0A ///< Read Display Power Mode +#define ILI9341_RDMADCTL 0x0B ///< Read Display MADCTL +#define ILI9341_RDPIXFMT 0x0C ///< Read Display Pixel Format +#define ILI9341_RDIMGFMT 0x0D ///< Read Display Image Format +#define ILI9341_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result + +#define ILI9341_INVOFF 0x20 ///< Display Inversion OFF +#define ILI9341_INVON 0x21 ///< Display Inversion ON +#define ILI9341_GAMMASET 0x26 ///< Gamma Set +#define ILI9341_DISPOFF 0x28 ///< Display OFF +#define ILI9341_DISPON 0x29 ///< Display ON + +#define ILI9341_CASET 0x2A ///< Column Address Set +#define ILI9341_PASET 0x2B ///< Page Address Set +#define ILI9341_RAMWR 0x2C ///< Memory Write +#define ILI9341_RAMRD 0x2E ///< Memory Read + +#define ILI9341_PTLAR 0x30 ///< Partial Area +#define ILI9341_VSCRDEF 0x33 ///< Vertical Scrolling Definition +#define ILI9341_MADCTL 0x36 ///< Memory Access Control +#define ILI9341_VSCRSADD 0x37 ///< Vertical Scrolling Start Address +#define ILI9341_PIXFMT 0x3A ///< COLMOD: Pixel Format Set + +#define ILI9341_FRMCTR1 0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors) +#define ILI9341_FRMCTR2 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors) +#define ILI9341_FRMCTR3 0xB3 ///< Frame Rate control (In Partial Mode/Full Colors) +#define ILI9341_INVCTR 0xB4 ///< Display Inversion Control +#define ILI9341_DFUNCTR 0xB6 ///< Display Function Control + +#define ILI9341_PWCTR1 0xC0 ///< Power Control 1 +#define ILI9341_PWCTR2 0xC1 ///< Power Control 2 +#define ILI9341_PWCTR3 0xC2 ///< Power Control 3 +#define ILI9341_PWCTR4 0xC3 ///< Power Control 4 +#define ILI9341_PWCTR5 0xC4 ///< Power Control 5 +#define ILI9341_VMCTR1 0xC5 ///< VCOM Control 1 +#define ILI9341_VMCTR2 0xC7 ///< VCOM Control 2 + +#define ILI9341_RDID1 0xDA ///< Read ID 1 +#define ILI9341_RDID2 0xDB ///< Read ID 2 +#define ILI9341_RDID3 0xDC ///< Read ID 3 +#define ILI9341_RDID4 0xDD ///< Read ID 4 + +#define ILI9341_GMCTRP1 0xE0 ///< Positive Gamma Correction +#define ILI9341_GMCTRN1 0xE1 ///< Negative Gamma Correction +#define ILI9341_PWCTR6 0xFC + +#define ILI9341_MADCTL_MY 0x80 ///< Bottom to top +#define ILI9341_MADCTL_MX 0x40 ///< Right to left +#define ILI9341_MADCTL_MV 0x20 ///< Reverse Mode +#define ILI9341_MADCTL_ML 0x10 ///< LCD refresh Bottom to top +#define ILI9341_MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order +#define ILI9341_MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order +#define ILI9341_MADCTL_MH 0x04 ///< LCD refresh right to left + +class Arduino_ILI9341 : public Arduino_TFT +{ +public: + Arduino_ILI9341(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.cpp new file mode 100644 index 0000000..a205b42 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.cpp @@ -0,0 +1,155 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit_ILI9341.git + */ +#include "Arduino_ILI9341_M5STACK.h" + +Arduino_ILI9341_M5STACK::Arduino_ILI9341_M5STACK(Arduino_DataBus *bus, int8_t rst, uint8_t r) + : Arduino_ILI9341(bus, rst, r) +{ +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9341_M5STACK::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(ILI9341_SWRESET); // 1: Software reset + delay(ILI9341_RST_DELAY); + } + + _bus->sendCommand(0xEF); + _bus->sendData(0x03); + _bus->sendData(0x80); + _bus->sendData(0x02); + + _bus->sendCommand(0xCF); + _bus->sendData(0x00); + _bus->sendData(0XC1); + _bus->sendData(0X30); + + _bus->sendCommand(0xED); + _bus->sendData(0x64); + _bus->sendData(0x03); + _bus->sendData(0X12); + _bus->sendData(0X81); + + _bus->sendCommand(0xE8); + _bus->sendData(0x85); + _bus->sendData(0x00); + _bus->sendData(0x78); + + _bus->sendCommand(0xCB); + _bus->sendData(0x39); + _bus->sendData(0x2C); + _bus->sendData(0x00); + _bus->sendData(0x34); + _bus->sendData(0x02); + + _bus->sendCommand(0xF7); + _bus->sendData(0x20); + + _bus->sendCommand(0xEA); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendCommand(ILI9341_PWCTR1); //Power control + _bus->sendData(0x23); //VRH[5:0] + _bus->sendCommand(ILI9341_PWCTR2); //Power control + _bus->sendData(0x10); //SAP[2:0];BT[3:0] + _bus->sendCommand(ILI9341_VMCTR1); //VCM control + _bus->sendData(0x3e); + _bus->sendData(0x28); + _bus->sendCommand(ILI9341_VMCTR2); //VCM control2 + _bus->sendData(0x86); //-- + + _bus->sendCommand(ILI9341_MADCTL); // Memory Access Control + _bus->sendData(0xA8); // Rotation 0 (portrait mode) + //_bus->sendData(0x48); // Rotation 0 (portrait mode) + + _bus->sendCommand(ILI9341_PIXFMT); + _bus->sendData(0x55); + _bus->sendCommand(ILI9341_FRMCTR1); + _bus->sendData(0x00); + _bus->sendData(0x13); // 0x18 79Hz, 0x1B default 70Hz, 0x13 100Hz + _bus->sendCommand(ILI9341_DFUNCTR); // Display Function Control + _bus->sendData(0x08); + _bus->sendData(0x82); + _bus->sendData(0x27); + _bus->sendCommand(0xF2); // 3Gamma Function Disable + _bus->sendData(0x00); + + _bus->sendCommand(ILI9341_GAMMASET); //Gamma curve selected + _bus->sendData(0x01); + + _bus->sendCommand(ILI9341_GMCTRP1); //Set Gamma + _bus->sendData(0x0F); + _bus->sendData(0x31); + _bus->sendData(0x2B); + _bus->sendData(0x0C); + _bus->sendData(0x0E); + _bus->sendData(0x08); + _bus->sendData(0x4E); + _bus->sendData(0xF1); + _bus->sendData(0x37); + _bus->sendData(0x07); + _bus->sendData(0x10); + _bus->sendData(0x03); + _bus->sendData(0x0E); + _bus->sendData(0x09); + _bus->sendData(0x00); + + _bus->sendCommand(ILI9341_GMCTRN1); //Set Gamma + _bus->sendData(0x00); + _bus->sendData(0x0E); + _bus->sendData(0x14); + _bus->sendData(0x03); + _bus->sendData(0x11); + _bus->sendData(0x07); + _bus->sendData(0x31); + _bus->sendData(0xC1); + _bus->sendData(0x48); + _bus->sendData(0x08); + _bus->sendData(0x0F); + _bus->sendData(0x0C); + _bus->sendData(0x31); + _bus->sendData(0x36); + _bus->sendData(0x0F); + + _bus->sendCommand(ILI9341_SLPOUT); // Exit Sleep + delay(ILI9341_SLPOUT_DELAY); + _bus->sendCommand(ILI9341_DISPON); // Display on + delay(150); +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9341_M5STACK::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (ILI9341_MADCTL_MV | ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR); + break; + case 1: + r = (ILI9341_MADCTL_BGR); + break; + case 2: + r = (ILI9341_MADCTL_MV | ILI9341_MADCTL_MX | ILI9341_MADCTL_BGR); + break; + case 3: + r = (ILI9341_MADCTL_MX | ILI9341_MADCTL_MY | ILI9341_MADCTL_BGR); + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ILI9341_MADCTL); + _bus->write(r); + _bus->endWrite(); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.h new file mode 100644 index 0000000..e1546f0 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9341_M5STACK.h @@ -0,0 +1,28 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit_ILI9341.git + */ +#ifndef _ARDUINO_ILI9341_M5STACK_H_ +#define _ARDUINO_ILI9341_M5STACK_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" +#include "Arduino_ILI9341.h" + +class Arduino_ILI9341_M5STACK : public Arduino_ILI9341 +{ +public: + Arduino_ILI9341_M5STACK(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0); + + virtual void setRotation(uint8_t r); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.cpp new file mode 100644 index 0000000..63cbb0b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.cpp @@ -0,0 +1,195 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ILI9481_18bit.h" + +Arduino_ILI9481_18bit::Arduino_ILI9481_18bit(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips) + : Arduino_TFT_18bit(bus, rst, r, ips, ILI9481_TFTWIDTH, ILI9481_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_ILI9481_18bit::begin(int32_t speed) +{ +#if defined(ESP8266) || defined(ESP32) + if (speed == 0) + { + speed = 12000000; + } +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) + if (speed == 0) + { + speed = 12000000; + } +#endif + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9481_18bit::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(ILI9481_SWRESET); // 1: Software reset + delay(ILI9481_RST_DELAY); + } + + _bus->sendCommand(ILI9481_SLPOUT); + delay(280); + + _bus->sendCommand(0xd0); //Power_Setting + _bus->sendData(0x07); //07 VC[2:0] Sets the ratio factor of Vci to generate the reference voltages Vci1 + _bus->sendData(0x44); //41 BT[2:0] Sets the Step up factor and output voltage level from the reference voltages Vci1 + _bus->sendData(0x1E); //1f 17 1C VRH[3:0]: Sets the factor to generate VREG1OUT from VCILVL + delay(220); + + _bus->sendCommand(0xd1); //VCOM Control + _bus->sendData(0x00); //00 + _bus->sendData(0x0C); //1A VCM [6:0] is used to set factor to generate VCOMH voltage from the reference voltage VREG1OUT 15 09 + _bus->sendData(0x1A); //1F VDV[4:0] is used to set the VCOM alternating amplitude in the range of VREG1OUT x 0.70 to VREG1OUT 1F 18 + + _bus->sendCommand(0xC5); //Frame Rate + _bus->sendData(0x03); // 03 02 + + _bus->sendCommand(0xd2); //Power_Setting for Normal Mode + _bus->sendData(0x01); //01 + _bus->sendData(0x11); //11 + + _bus->sendCommand(0xE4); // + _bus->sendData(0xa0); + _bus->sendCommand(0xf3); + _bus->sendData(0x00); + _bus->sendData(0x2a); + + //1 OK + _bus->sendCommand(0xc8); + _bus->sendData(0x00); + _bus->sendData(0x26); + _bus->sendData(0x21); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x1f); + _bus->sendData(0x65); + _bus->sendData(0x23); + _bus->sendData(0x77); + _bus->sendData(0x00); + _bus->sendData(0x0f); + _bus->sendData(0x00); + //GAMMA SETTING + + _bus->sendCommand(0xC0); //Panel Driving Setting + _bus->sendData(0x00); //1//00 REV SM GS + _bus->sendData(0x3B); //2//NL[5:0]: Sets the number of lines to drive the LCD at an interval of 8 lines. + _bus->sendData(0x00); //3//SCN[6:0] + _bus->sendData(0x02); //4//PTV: Sets the Vcom output in non-display area drive period + _bus->sendData(0x11); //5//NDL: Sets the source output level in non-display area. PTG: Sets the scan mode in non-display area. + + _bus->sendCommand(0xc6); //Interface Control + _bus->sendData(0x83); + //GAMMA SETTING + + _bus->sendCommand(0xf0); //? + _bus->sendData(0x01); + + _bus->sendCommand(0xE4); //? + _bus->sendData(0xa0); + + _bus->sendCommand(ILI9481_PIXFMT); + _bus->sendData(0x66); + + _bus->sendCommand(0xb4); //Display Mode and Frame Memory Write Mode Setting + _bus->sendData(0x02); + _bus->sendData(0x00); // + _bus->sendData(0x00); + _bus->sendData(0x01); + + delay(280); + + if (_ips) + { + _bus->sendCommand(ILI9481_INVON); + } + _bus->sendCommand(0x29); +} + +void Arduino_ILI9481_18bit::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(ILI9481_CASET); // Column addr set + _bus->write(x_start >> 8); + _bus->write(x_start & 0xFF); // XSTART + _bus->write(x_end >> 8); + _bus->write(x_end & 0xFF); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(ILI9481_PASET); // Row addr set + _bus->write(y_start >> 8); + _bus->write(y_start & 0xFF); // YSTART + _bus->write(y_end >> 8); + _bus->write(y_end & 0xFF); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ILI9481_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9481_18bit::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (ILI9481_MADCTL_BGR | ILI9481_MADCTL_VF); + break; + case 1: + r = (ILI9481_MADCTL_MV | ILI9481_MADCTL_BGR | ILI9481_MADCTL_HF | ILI9481_MADCTL_VF); + break; + case 2: + r = (ILI9481_MADCTL_BGR | ILI9481_MADCTL_HF); + break; + case 3: + r = (ILI9481_MADCTL_MV | ILI9481_MADCTL_BGR); + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ILI9481_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_ILI9481_18bit::invertDisplay(bool i) +{ + _bus->sendCommand(_ips ? (i ? ILI9481_INVOFF : ILI9481_INVON) : (i ? ILI9481_INVON : ILI9481_INVOFF)); +} + +void Arduino_ILI9481_18bit::displayOn(void) +{ + _bus->sendCommand(ILI9481_SLPOUT); + delay(ILI9481_SLPOUT_DELAY); +} + +void Arduino_ILI9481_18bit::displayOff(void) +{ + _bus->sendCommand(ILI9481_SLPIN); + delay(ILI9481_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.h new file mode 100644 index 0000000..d6058d5 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9481_18bit.h @@ -0,0 +1,67 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ILI9481_18BIT_H_ +#define _ARDUINO_ILI9481_18BIT_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT_18bit.h" + +#define ILI9481_TFTWIDTH 320 ///< ILI9481 max TFT width +#define ILI9481_TFTHEIGHT 480 ///< ILI9481 max TFT height + +#define ILI9481_RST_DELAY 120 ///< delay ms wait for reset finish +#define ILI9481_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ILI9481_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ILI9481_NOP 0x00 ///< No-op register +#define ILI9481_SWRESET 0x01 ///< Software reset register + +#define ILI9481_SLPIN 0x10 ///< Enter Sleep Mode +#define ILI9481_SLPOUT 0x11 ///< Sleep Out +#define ILI9481_NORON 0x13 ///< Normal Display Mode ON + +#define ILI9481_INVOFF 0x20 ///< Display Inversion OFF +#define ILI9481_INVON 0x21 ///< Display Inversion ON +#define ILI9481_DISPOFF 0x28 ///< Display OFF +#define ILI9481_DISPON 0x29 ///< Display ON + +#define ILI9481_CASET 0x2A ///< Column Address Set +#define ILI9481_PASET 0x2B ///< Page Address Set +#define ILI9481_RAMWR 0x2C ///< Memory Write +#define ILI9481_RAMRD 0x2E ///< Memory Read + +#define ILI9481_MADCTL 0x36 ///< Memory Access Control +#define ILI9481_PIXFMT 0x3A ///< COLMOD: Pixel Format Set + +#define ILI9481_MADCTL_MY 0x80 ///< Bottom to top +#define ILI9481_MADCTL_MX 0x40 ///< Right to left +#define ILI9481_MADCTL_MV 0x20 ///< Reverse Mode +#define ILI9481_MADCTL_ML 0x10 ///< LCD refresh Bottom to top +#define ILI9481_MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order +#define ILI9481_MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order +#define ILI9481_MADCTL_HF 0x02 +#define ILI9481_MADCTL_VF 0x01 + +class Arduino_ILI9481_18bit : public Arduino_TFT_18bit +{ +public: + Arduino_ILI9481_18bit(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, bool ips = false); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.cpp new file mode 100644 index 0000000..609c772 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.cpp @@ -0,0 +1,160 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ILI9486_18bit.h" + +Arduino_ILI9486_18bit::Arduino_ILI9486_18bit(Arduino_DataBus *bus, int8_t rst, uint8_t r) + : Arduino_TFT_18bit(bus, rst, r, false, ILI9486_TFTWIDTH, ILI9486_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_ILI9486_18bit::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9486_18bit::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(ILI9486_SWRST); // 1: Software reset + delay(ILI9486_RST_DELAY); + } + + _bus->sendCommand(ILI9486_SLPOUT); //Exit Sleep + delay(ILI9486_SLPIN_DELAY); + + _bus->sendCommand(0x3A); + _bus->sendData(0x66); + + _bus->sendCommand(0xC2); + _bus->sendData(0x44); + + _bus->sendCommand(0xC5); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + _bus->sendData(0x00); + + _bus->sendCommand(0xE0); + _bus->sendData(0x0F); + _bus->sendData(0x1F); + _bus->sendData(0x1C); + _bus->sendData(0x0C); + _bus->sendData(0x0F); + _bus->sendData(0x08); + _bus->sendData(0x48); + _bus->sendData(0x98); + _bus->sendData(0x37); + _bus->sendData(0x0A); + _bus->sendData(0x13); + _bus->sendData(0x04); + _bus->sendData(0x11); + _bus->sendData(0x0D); + _bus->sendData(0x00); + + _bus->sendCommand(0xE1); + _bus->sendData(0x0F); + _bus->sendData(0x32); + _bus->sendData(0x2E); + _bus->sendData(0x0B); + _bus->sendData(0x0D); + _bus->sendData(0x05); + _bus->sendData(0x47); + _bus->sendData(0x75); + _bus->sendData(0x37); + _bus->sendData(0x06); + _bus->sendData(0x10); + _bus->sendData(0x03); + _bus->sendData(0x24); + _bus->sendData(0x20); + _bus->sendData(0x00); + + _bus->sendCommand(ILI9486_INVOFF); + + _bus->sendCommand(ILI9486_DISPON); //Display on + delay(25); +} + +void Arduino_ILI9486_18bit::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(ILI9486_CASET); // Column addr set + _bus->write(x_start >> 8); + _bus->write(x_start & 0xFF); // XSTART + _bus->write(x_end >> 8); + _bus->write(x_end & 0xFF); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(ILI9486_PASET); // Row addr set + _bus->write(y_start >> 8); + _bus->write(y_start & 0xFF); // YSTART + _bus->write(y_end >> 8); + _bus->write(y_end & 0xFF); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ILI9486_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9486_18bit::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (ILI9486_MAD_BGR | ILI9486_MAD_MX); + break; + case 1: + r = (ILI9486_MAD_BGR | ILI9486_MAD_MV); + break; + case 2: + r = (ILI9486_MAD_BGR | ILI9486_MAD_MY); + break; + case 3: + r = (ILI9486_MAD_BGR | ILI9486_MAD_MV | ILI9486_MAD_MX | ILI9486_MAD_MY); + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ILI9486_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_ILI9486_18bit::invertDisplay(bool i) +{ + _bus->sendCommand(i ? ILI9486_INVON : ILI9486_INVOFF); +} + +void Arduino_ILI9486_18bit::displayOn(void) +{ + _bus->sendCommand(ILI9486_SLPOUT); + delay(ILI9486_SLPOUT_DELAY); +} + +void Arduino_ILI9486_18bit::displayOff(void) +{ + _bus->sendCommand(ILI9486_SLPIN); + delay(ILI9486_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.h new file mode 100644 index 0000000..40864c9 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9486_18bit.h @@ -0,0 +1,70 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ILI9486_18BIT_H_ +#define _ARDUINO_ILI9486_18BIT_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" +#include "../Arduino_TFT_18bit.h" + +#define ILI9486_TFTWIDTH 320 ///< ILI9486 max TFT width +#define ILI9486_TFTHEIGHT 480 ///< ILI9486 max TFT height + +#define ILI9486_RST_DELAY 120 ///< delay ms wait for reset finish +#define ILI9486_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ILI9486_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +// Generic commands used by ILI9486_eSPI.cpp +#define ILI9486_NOP 0x00 +#define ILI9486_SWRST 0x01 + +#define ILI9486_SLPIN 0x10 +#define ILI9486_SLPOUT 0x11 + +#define ILI9486_INVOFF 0x20 +#define ILI9486_INVON 0x21 + +#define ILI9486_DISPOFF 0x28 +#define ILI9486_DISPON 0x29 + +#define ILI9486_CASET 0x2A +#define ILI9486_PASET 0x2B +#define ILI9486_RAMWR 0x2C + +#define ILI9486_RAMRD 0x2E + +#define ILI9486_MADCTL 0x36 + +#define ILI9486_MAD_MY 0x80 +#define ILI9486_MAD_MX 0x40 +#define ILI9486_MAD_MV 0x20 +#define ILI9486_MAD_ML 0x10 +#define ILI9486_MAD_RGB 0x00 +#define ILI9486_MAD_BGR 0x08 +#define ILI9486_MAD_MH 0x04 +#define ILI9486_MAD_SS 0x02 +#define ILI9486_MAD_GS 0x01 + +class Arduino_ILI9486_18bit : public Arduino_TFT_18bit +{ +public: + Arduino_ILI9486_18bit(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.cpp new file mode 100644 index 0000000..fee4ce1 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.cpp @@ -0,0 +1,193 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ILI9488_18bit.h" + +Arduino_ILI9488_18bit::Arduino_ILI9488_18bit(Arduino_DataBus *bus, int8_t rst, uint8_t r) + : Arduino_TFT_18bit(bus, rst, r, false, ILI9488_TFTWIDTH, ILI9488_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_ILI9488_18bit::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ILI9488_18bit::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(ILI9488_SWRST); // 1: Software reset + delay(ILI9488_RST_DELAY); + } + + spi_operation_t ili9488_init_operations[] = { + {BEGIN_WRITE, 0}, + + {WRITE_COMMAND_8, 0xE0}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x09}, + {WRITE_DATA_8, 0x08}, + {WRITE_DATA_8, 0x16}, + {WRITE_DATA_8, 0x0A}, + {WRITE_DATA_8, 0x3F}, + {WRITE_DATA_8, 0x78}, + {WRITE_DATA_8, 0x4C}, + {WRITE_DATA_8, 0x09}, + {WRITE_DATA_8, 0x0A}, + {WRITE_DATA_8, 0x08}, + {WRITE_DATA_8, 0x16}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x0F}, + + {WRITE_COMMAND_8, 0XE1}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x16}, + {WRITE_DATA_8, 0x19}, + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x0F}, + {WRITE_DATA_8, 0x05}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x45}, + {WRITE_DATA_8, 0x46}, + {WRITE_DATA_8, 0x04}, + {WRITE_DATA_8, 0x0E}, + {WRITE_DATA_8, 0x0D}, + {WRITE_DATA_8, 0x35}, + {WRITE_DATA_8, 0x37}, + {WRITE_DATA_8, 0x0F}, + + {WRITE_COMMAND_8, 0XC0}, //Power Control 1 + {WRITE_DATA_8, 0x17}, //Vreg1out + {WRITE_DATA_8, 0x15}, //Verg2out + + {WRITE_COMMAND_8, 0xC1}, //Power Control 2 + {WRITE_DATA_8, 0x41}, //VGH,VGL + + {WRITE_COMMAND_8, 0xC5}, //Power Control 3 + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x12}, //Vcom + {WRITE_DATA_8, 0x80}, + + {WRITE_COMMAND_8, 0x36}, //Memory Access + {WRITE_DATA_8, 0x48}, + + {WRITE_COMMAND_8, 0x3A}, // Interface Pixel Format + {WRITE_DATA_8, 0x66}, //18 bit + + {WRITE_COMMAND_8, 0XB0}, // Interface Mode Control + {WRITE_DATA_8, 0x80}, //SDO NOT USE + + {WRITE_COMMAND_8, 0xB1}, //Frame rate + {WRITE_DATA_8, 0xA0}, //60Hz + + {WRITE_COMMAND_8, 0xB4}, //Display Inversion Control + {WRITE_DATA_8, 0x02}, //2-dot + + {WRITE_COMMAND_8, 0XB6}, //Display Function Control RGB/MCU Interface Control + + {WRITE_DATA_8, 0x02}, //MCU + {WRITE_DATA_8, 0x02}, //Source,Gate scan dieection + + {WRITE_COMMAND_8, 0XE9}, // Set Image Functio + {WRITE_DATA_8, 0x00}, // Disable 24 bit data + + {WRITE_COMMAND_8, 0xF7}, // Adjust Control + {WRITE_DATA_8, 0xA9}, + {WRITE_DATA_8, 0x51}, + {WRITE_DATA_8, 0x2C}, + {WRITE_DATA_8, 0x82}, // D7 stream, loose + + {WRITE_COMMAND_8, ILI9488_SLPOUT}, //Exit Sleep + {END_WRITE, 0}, + {DELAY, ILI9488_SLPOUT_DELAY}, + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ILI9488_DISPON}, //Display on + {END_WRITE, 0}, + }; + + _bus->batchOperation(ili9488_init_operations, sizeof(ili9488_init_operations) / sizeof(ili9488_init_operations[0])); +} + +void Arduino_ILI9488_18bit::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(ILI9488_CASET); // Column addr set + _bus->write(x_start >> 8); + _bus->write(x_start & 0xFF); // XSTART + _bus->write(x_end >> 8); + _bus->write(x_end & 0xFF); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(ILI9488_PASET); // Row addr set + _bus->write(y_start >> 8); + _bus->write(y_start & 0xFF); // YSTART + _bus->write(y_end >> 8); + _bus->write(y_end & 0xFF); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ILI9488_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ILI9488_18bit::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = (ILI9488_MAD_BGR | ILI9488_MAD_MY); + break; + case 1: + r = (ILI9488_MAD_BGR | ILI9488_MAD_MV | ILI9488_MAD_MX | ILI9488_MAD_MY); + break; + case 2: + r = (ILI9488_MAD_BGR | ILI9488_MAD_MX); + break; + case 3: + r = (ILI9488_MAD_BGR | ILI9488_MAD_MV); + break; + } + + _bus->beginWrite(); + _bus->writeC8D8(ILI9488_MADCTL, r); + _bus->endWrite(); +} + +void Arduino_ILI9488_18bit::invertDisplay(bool i) +{ + _bus->sendCommand(i ? ILI9488_INVON : ILI9488_INVOFF); +} + +void Arduino_ILI9488_18bit::displayOn(void) +{ + _bus->sendCommand(ILI9488_SLPOUT); + delay(ILI9488_SLPOUT_DELAY); +} + +void Arduino_ILI9488_18bit::displayOff(void) +{ + _bus->sendCommand(ILI9488_SLPIN); + delay(ILI9488_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.h new file mode 100644 index 0000000..dbd542d --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ILI9488_18bit.h @@ -0,0 +1,70 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ILI9488_18BIT_H_ +#define _ARDUINO_ILI9488_18BIT_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" +#include "../Arduino_TFT_18bit.h" + +#define ILI9488_TFTWIDTH 320 ///< ILI9488 max TFT width +#define ILI9488_TFTHEIGHT 480 ///< ILI9488 max TFT height + +#define ILI9488_RST_DELAY 120 ///< delay ms wait for reset finish +#define ILI9488_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ILI9488_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +// Generic commands used by ILI9488_eSPI.cpp +#define ILI9488_NOP 0x00 +#define ILI9488_SWRST 0x01 + +#define ILI9488_SLPIN 0x10 +#define ILI9488_SLPOUT 0x11 + +#define ILI9488_INVOFF 0x20 +#define ILI9488_INVON 0x21 + +#define ILI9488_DISPOFF 0x28 +#define ILI9488_DISPON 0x29 + +#define ILI9488_CASET 0x2A +#define ILI9488_PASET 0x2B +#define ILI9488_RAMWR 0x2C + +#define ILI9488_RAMRD 0x2E + +#define ILI9488_MADCTL 0x36 + +#define ILI9488_MAD_MY 0x80 +#define ILI9488_MAD_MX 0x40 +#define ILI9488_MAD_MV 0x20 +#define ILI9488_MAD_ML 0x10 +#define ILI9488_MAD_RGB 0x00 +#define ILI9488_MAD_BGR 0x08 +#define ILI9488_MAD_MH 0x04 +#define ILI9488_MAD_SS 0x02 +#define ILI9488_MAD_GS 0x01 + +class Arduino_ILI9488_18bit : public Arduino_TFT_18bit +{ +public: + Arduino_ILI9488_18bit(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.cpp new file mode 100644 index 0000000..c546f69 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.cpp @@ -0,0 +1,261 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/gitcnd/LCDWIKI_SPI.git + */ +#include "Arduino_JBT6K71.h" +#include "SPI.h" + +Arduino_JBT6K71::Arduino_JBT6K71( + Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_JBT6K71::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_JBT6K71::tftInit() +{ + uint16_t display_mode = _ips ? 0x4004 : 0x4000; //64K Colors + spi_operation_t jbt6k71_init_operations[] = { + {SEND_COMMAND_16, 0x0000}, //exiting from deep standby mode + {DELAY, 10}, //spec 1ms + {SEND_COMMAND_16, 0x0000}, + {DELAY, 10}, //spec 1ms + {SEND_COMMAND_16, 0x0000}, + {DELAY, 10}, //spec 1ms + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x001d}, //mode setting + {WRITE_DATA_16, 0x0005}, //exit standby + {END_WRITE, 0}, + {DELAY, 100}, //spec 1ms + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0000}, //oscillation setting + {WRITE_DATA_16, 0x0001}, //set to on + {END_WRITE, 0}, + {DELAY, 100}, //spec 1ms + + //Display control + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0002}, //LCD driver AC control + {WRITE_DATA_16, 0x0200}, //line inversion + {WRITE_COMMAND_16, 0x0007}, //Display mode + {WRITE_DATA_16, display_mode}, + {WRITE_COMMAND_16, 0x000d}, //FR period adjustment setting + {WRITE_DATA_16, 0x0011}, //Ffr=60Hz optimized + {END_WRITE, 0}, + {DELAY, 100}, //spec 1ms + + //LTPS control settings + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0012}, //LTPS control setting 1 + {WRITE_DATA_16, 0x0303}, + {WRITE_COMMAND_16, 0x0013}, //LTPS control setting 2 + {WRITE_DATA_16, 0x0102}, + {WRITE_COMMAND_16, 0x001c}, //Amplifier capability setting + {WRITE_DATA_16, 0x0000}, //Maximum + + //Power settings + {WRITE_COMMAND_16, 0x0102}, //Power supply control (1) + {WRITE_DATA_16, 0x00f6}, //VCOMD Output voltage: 1.4V(Initial), VCS output voltage: 4.5V, VGM output voltage: 4.3V + {END_WRITE, 0}, + {DELAY, 500}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0103}, //Power Supply Control (2) + {WRITE_DATA_16, 0x0007}, //Boosting clock mode: Dual mode, XVDD output voltage: 5.4V + {END_WRITE, 0}, + {DELAY, 100}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0105}, //Power supply control (4) + {WRITE_DATA_16, 0x0111}, //Mask period (DCEW1/DCEW2): 1.0 clock, DCCLK frequency for external regulate circuit: 1H, DCCLK frequency for XVDD regulate circuit: 1/2H, DCCLK frequency for AVDD regulate circuit: 1H + {END_WRITE, 0}, + {DELAY, 100}, + + //Gray scale settings (gamma c + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0300}, + {WRITE_DATA_16, 0x0200}, //chan + {WRITE_COMMAND_16, 0x0301}, + {WRITE_DATA_16, 0x0002}, // + {WRITE_COMMAND_16, 0x0302}, + {WRITE_DATA_16, 0x0000}, + {WRITE_COMMAND_16, 0x0303}, + {WRITE_DATA_16, 0x0300}, // + {WRITE_COMMAND_16, 0x0304}, + {WRITE_DATA_16, 0x0700}, + {WRITE_COMMAND_16, 0x0305}, + {WRITE_DATA_16, 0x0070}, // + + {WRITE_COMMAND_16, 0x0402}, //First screen start + {WRITE_DATA_16, 0x0000}, //0 + {WRITE_COMMAND_16, 0x0403}, //First screen end + {WRITE_DATA_16, 0x013f}, //319 + + // {WRITE_COMMAND_16, 0x0404); //Second screen start + // {WRITE_DATA_16, 10); //0 + // {WRITE_COMMAND_16, 0x0405); //Second screen end + // {WRITE_DATA_16, 2); //319 + + {WRITE_COMMAND_16, 0x0100}, //Display Control + {WRITE_DATA_16, 0xC010}, + {END_WRITE, 0}, + {DELAY, 500}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_16, 0x0101}, //Auto sequence Control + {WRITE_DATA_16, 0x0001}, //AUTO + {WRITE_COMMAND_16, 0x0100}, //Display Control + {WRITE_DATA_16, 0xF7FE}, + {END_WRITE, 0}, + {DELAY, 800}, + }; + + _bus->batchOperation(jbt6k71_init_operations, sizeof(jbt6k71_init_operations) / sizeof(jbt6k71_init_operations[0])); +} + +void Arduino_JBT6K71::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint16_t cmd1, cmd2, cmd3; + + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start, x_end, x_pos; + + if (_rotation & 0x01) // Landscape + { + cmd1 = 0x0408; + cmd2 = 0x0409; + cmd3 = 0x0201; + } + else + { + cmd1 = 0x0406; + cmd2 = 0x0407; + cmd3 = 0x0200; + } + if (_rotation == 1) + { + x_start = JBT6K71_TFTHEIGHT - x - w - _xStart; + x_end = JBT6K71_TFTHEIGHT - x - 1 - _xStart; + x_pos = x_end; + } + else + { + x_start = x + _xStart; + x_end = x + w - 1 + _xStart; + x_pos = x_start; + } + _bus->writeCommand16(cmd1); + _bus->write16(x_start); + _bus->writeCommand16(cmd2); + _bus->write16(x_end); + _bus->writeCommand16(cmd3); + _bus->write16(x_pos); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start, y_end, y_pos; + + if (_rotation & 0x01) // Portrait + { + cmd1 = 0x0406; + cmd2 = 0x0407; + cmd3 = 0x0200; + } + else + { + cmd1 = 0x0408; + cmd2 = 0x0409; + cmd3 = 0x0201; + } + if (_rotation == 0) + { + y_start = JBT6K71_TFTHEIGHT - y - h - _yStart; + y_end = JBT6K71_TFTHEIGHT - y - 1 - _yStart; + y_pos = y_end; + } + else + { + y_start = y + _yStart; + y_end = y + h - 1 + _yStart; + y_pos = y_start; + } + _bus->writeCommand16(cmd1); + _bus->write16(y_start); + _bus->writeCommand16(cmd2); + _bus->write16(y_end); + _bus->writeCommand16(cmd3); + _bus->write16(y_pos); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand16(0x0202); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_JBT6K71::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + uint16_t output_control, entry_mode; + switch (_rotation) + { + case 0: + output_control = 0x0027; //SS=0 + entry_mode = 0x0010; //ID=01 + break; + case 1: + output_control = 0x0127; //SS=1 + entry_mode = 0x0018; + break; + case 2: + output_control = 0x0127; //SS=1 + entry_mode = 0x0030; + break; + default: // 3 + output_control = 0x0027; //SS=0 + entry_mode = 0x0038; + break; + } + _bus->beginWrite(); + _bus->writeCommand16(0x0001); //Driver output control + _bus->write16(output_control); + _bus->writeCommand16(0x0003); //Entry mode + _bus->write16(entry_mode); + _bus->endWrite(); +} + +void Arduino_JBT6K71::invertDisplay(bool i) +{ + // Not Implemented + UNUSED(i); +} + +void Arduino_JBT6K71::displayOn(void) +{ + // Not Implemented +} + +void Arduino_JBT6K71::displayOff(void) +{ + // Not Implemented +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.h new file mode 100644 index 0000000..268cc5b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_JBT6K71.h @@ -0,0 +1,38 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/gitcnd/LCDWIKI_SPI.git + */ +#ifndef _ARDUINO_JBT6K71_H_ +#define _ARDUINO_JBT6K71_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define JBT6K71_TFTWIDTH 240 ///< JBT6K71 max TFT width +#define JBT6K71_TFTHEIGHT 320 ///< JBT6K71 max TFT height + +class Arduino_JBT6K71 : public Arduino_TFT +{ +public: + Arduino_JBT6K71( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = JBT6K71_TFTWIDTH, int16_t h = JBT6K71_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.cpp new file mode 100644 index 0000000..fc86d21 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.cpp @@ -0,0 +1,322 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + */ +#include "Arduino_R61529.h" + +Arduino_R61529::Arduino_R61529(Arduino_DataBus *bus, int8_t rst, uint8_t r, bool ips) + : Arduino_TFT(bus, rst, r, ips, R61529_TFTWIDTH, R61529_TFTHEIGHT, 0, 0, 0, 0) +{ +} + +void Arduino_R61529::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_R61529::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(R61529_SWRESET); // 1: Software reset + delay(R61529_RST_DELAY); + } + + spi_operation_t r61529_init_operations[] = { + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, R61529_SLPOUT}, + {END_WRITE, 0}, + {DELAY, R61529_SLPOUT_DELAY}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, R61529_MCAP}, + {WRITE_DATA_8, 0x04}, + + {WRITE_COMMAND_8, R61529_BLCTL1}, //lcd pwm + {WRITE_DATA_8, 0x02}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + + {WRITE_COMMAND_8, R61529_BLCTL2}, //lcd pwm + {WRITE_DATA_8, 0x01}, // PWMON = 1; + {WRITE_DATA_8, 0x00}, // BDCV = 255; + {WRITE_DATA_8, 0xff}, // pwm freq = 13.7 kHz + {WRITE_DATA_8, 0x18}, // PWMWM = 1; LEDPWME = 1; + + //additional commands: + {WRITE_COMMAND_8, R61529_FMAIS}, //Frame Memory Access and Interface Setting + {WRITE_DATA_8, 0x02}, // reset start position of a window area address... + {WRITE_DATA_8, 0x00}, //TE pin is used. TE signal is output every frame. + {WRITE_DATA_8, 0x00}, // empty according to the datasheet - does nothing; + {WRITE_DATA_8, 0x00}, // convert 16/18 bits to 24bits data by writing zeroes to LSBs. Sets image data write/read format(?) + {WRITE_DATA_8, 0x00}, // ???? (not needed?) + {END_WRITE, 0}, + {DELAY, 2}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, R61529_DISPMODE}, //Display Mode + {WRITE_DATA_8, 0x00}, //Uses internal oscillator + + {WRITE_COMMAND_8, R61529_PDS}, // Panel Driving Setting; + {WRITE_DATA_8, 0x03}, // Output polarity is inverted. Left/right interchanging scan. Forward scan. BGR mode (depends on other settings). S960 → S1 (depends) + {WRITE_DATA_8, 0xDF}, // Number of lines for driver to drive - 480. + {WRITE_DATA_8, 0x40}, // Scan start position - Gate1. (depend on other param); + {WRITE_DATA_8, 0x10}, // Dot inversion. Dot inversion in not-lit display area. If 0x13 - both will be set to 'column inversion'. + {WRITE_DATA_8, 0x00}, // settings for non-lit display area... + {WRITE_DATA_8, 0x01}, // 3 frame scan interval in non-display area... + {WRITE_DATA_8, 0x00}, // Source output level in retrace period... + {WRITE_DATA_8, 0x55}, //54 . Internal clock divider = 5 (low and high periods). + + {WRITE_COMMAND_8, R61529_DTSFNM}, //Display Timing Setting for Normal Mode + {WRITE_DATA_8, 0x07}, // Clock devider = 12. 14MHz/12. Used by display circuit and step-up circuit. + {WRITE_DATA_8, 0x27}, // These bits set the number of clocks in 1 line period. 0x27 - 39 clocks. + {WRITE_DATA_8, 0x08}, // Number of back porch lines. 0x08 - 8 lines. + {WRITE_DATA_8, 0x08}, // Number of front porch lines. 0x08 - 8lines. + {WRITE_DATA_8, 0x00}, // Spacial configuriation mode 1 (?). 1 line inversion mode (?). + + {WRITE_COMMAND_8, R61529_SGDTS}, // Source/Gate Driving Timing Setting + {WRITE_DATA_8, 0x57}, // falling position (stop) of gate driver - 4 clocks... gate start position - 8 clocks... + {WRITE_DATA_8, 0x00}, // nothing to set up according to the datasheet + {WRITE_DATA_8, 0x05}, // Source precharge period (GND) - 5 clocks. + {WRITE_DATA_8, 0x03}, // source precharge period (VCI) - 3 clocks. + + {WRITE_COMMAND_8, R61529_DPIPCTL}, //DPI polarity control + {WRITE_DATA_8, 0x04}, // VSYNC -Active Low. HSYNC - Active Low. DE pin enable data write in when DE=1. Reads data on the rising edge of the PCLK signal. + + //----Gamma setting start----- + {WRITE_COMMAND_8, R61529_GAMMASETA}, + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + + {WRITE_COMMAND_8, R61529_GAMMASETB}, + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + + {WRITE_COMMAND_8, R61529_GAMMASETC}, + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + + {WRITE_DATA_8, 0x03}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x1A}, + {WRITE_DATA_8, 0x24}, + {WRITE_DATA_8, 0x32}, + {WRITE_DATA_8, 0x4B}, + {WRITE_DATA_8, 0x3B}, + {WRITE_DATA_8, 0x29}, + {WRITE_DATA_8, 0x1F}, + {WRITE_DATA_8, 0x18}, + {WRITE_DATA_8, 0x12}, + {WRITE_DATA_8, 0x04}, + //---Gamma setting end-------- + //old ones: + {WRITE_COMMAND_8, R61529_PWSET}, + {WRITE_DATA_8, 0x99}, //DC4~1//A5. Set up clock cycle of the internal step up controller. + {WRITE_DATA_8, 0x06}, //BT // Set Voltage step up factor. + {WRITE_DATA_8, 0x08}, // default according to the datasheet - does nothing. + {WRITE_DATA_8, 0x20}, // VCN step up cycles. + {WRITE_DATA_8, 0x29}, //VC1, VC2// VCI3 voltage = 2.70V; VCI2 voltage = 3.8V. + {WRITE_DATA_8, 0x04}, // default + {WRITE_DATA_8, 0x01}, // default + {WRITE_DATA_8, 0x00}, // default + {WRITE_DATA_8, 0x08}, // default + {WRITE_DATA_8, 0x01}, // default + {WRITE_DATA_8, 0x00}, // default + {WRITE_DATA_8, 0x06}, // default + {WRITE_DATA_8, 0x01}, // default + {WRITE_DATA_8, 0x00}, // default + {WRITE_DATA_8, 0x00}, // default + {WRITE_DATA_8, 0x20}, // default + + {WRITE_COMMAND_8, R61529_VCOMSET}, //VCOM setting + {WRITE_DATA_8, 0x00}, //disable write to VDC[7:0] + {WRITE_DATA_8, 0x20}, //45 38 VPLVL// voltage of γ correction registers for positive polarity + {WRITE_DATA_8, 0x20}, //45 38 VNLVL// voltage of γ correction registers for negative polarity + {WRITE_DATA_8, 0x15}, //32 2A VCOMDC// VNLVL x 0.063 + + {WRITE_COMMAND_8, R61529_NVMAC}, //NVM Access Control + {WRITE_DATA_8, 0x00}, //NVM access is disabled + {WRITE_DATA_8, 0x00}, //Erase operation (disabled). + {WRITE_DATA_8, 0x00}, //TE pin works as tearing effect pin. + // should be one more writeData(0x00}, according to the datasheet. + + {WRITE_COMMAND_8, R61529_SETDDBWRCTL}, //set_DDB_write_control + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + {WRITE_DATA_8, 0x00}, + + {WRITE_COMMAND_8, R61529_NVMLC}, //NVM Load Control + {WRITE_DATA_8, 0x00}, // does not execute data load from the NVM to each command + + // {WRITE_COMMAND_8, R61529_MADCTL}, + // {WRITE_DATA_8, 0x00}, + + {WRITE_COMMAND_8, 0x3A}, // set_pixel_format + {WRITE_DATA_8, 0x55}, // 16-Bit/pixel = 55h, 24-bit/pixel = 77h + + // {WRITE_COMMAND_8, R61529_CASET}, + // {WRITE_DATA_8, 0x00}, + // {WRITE_DATA_8, 0x00}, + // {WRITE_DATA_8, 0x01}, + // {WRITE_DATA_8, 0x3F}, + + // {WRITE_COMMAND_8, R61529_PASET}, + // {WRITE_DATA_8, 0x00}, + // {WRITE_DATA_8, 0x00}, + // {WRITE_DATA_8, 0x01}, + // {WRITE_DATA_8, 0xDF}, + + {WRITE_COMMAND_8, R61529_DISPON}, + {END_WRITE, 0}, + {DELAY, 20}, + }; + + _bus->batchOperation(r61529_init_operations, sizeof(r61529_init_operations) / sizeof(r61529_init_operations[0])); +} + +void Arduino_R61529::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + _bus->writeC8D16D16(R61529_CASET, x + _xStart, x + w - 1 + _xStart); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + _bus->writeC8D16D16(R61529_PASET, y + _yStart, y + h - 1 + _yStart); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(R61529_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_R61529::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = R61529_MADCTL_RGB; + break; + case 1: + r = R61529_MADCTL_MV | R61529_MADCTL_MX | R61529_MADCTL_RGB; + break; + case 2: + r = R61529_MADCTL_RGB | R61529_MADCTL_GS | R61529_MADCTL_MX; + break; + case 3: + r = R61529_MADCTL_MV | R61529_MADCTL_RGB | R61529_MADCTL_GS; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(R61529_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_R61529::invertDisplay(bool i) +{ + _bus->sendCommand(i ? R61529_INVON : R61529_INVOFF); +} + +void Arduino_R61529::displayOn(void) +{ + _bus->sendCommand(R61529_SLPOUT); + delay(R61529_SLPOUT_DELAY); +} + +void Arduino_R61529::displayOff(void) +{ + _bus->sendCommand(R61529_SLPIN); + delay(R61529_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.h new file mode 100644 index 0000000..dcf4858 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_R61529.h @@ -0,0 +1,141 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/daumemo/IPS_LCD_R61529_FT6236_Arduino_eSPI_Test + * Data Sheet: + * http://read.pudn.com/downloads648/ebook/2620902/R61529.pdf + */ +#ifndef _ARDUINO_R61529_H_ +#define _ARDUINO_R61529_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define R61529_TFTWIDTH 320 // R61529 max width +#define R61529_TFTHEIGHT 480 // R61529 max height + +#define R61529_RST_DELAY 20 // delay ms wait for reset finish +#define R61529_SLPIN_DELAY 20 // delay ms wait for sleep in finish +#define R61529_SLPOUT_DELAY 200 // delay ms wait for sleep out finish + +// User Command +#define R61529_NOP 0x00 // nop +#define R61529_SWRESET 0x01 // soft_reset +#define R61529_RDDID 0x04 // read_DDB_start +#define R61529_RDMODE 0x0A // get_power_mode +#define R61529_RDMADCTL 0x0B // get_address_mode +#define R61529_RDPIXFMT 0x0C // get_pixel_format +#define R61529_RDIMGFMT 0x0D // get_display_mode +#define R61529_RDSIGMODE 0x0E // get_signal_mode +#define R61529_RDSELFDIAG 0x0F // get_diagnostic_result + +#define R61529_SLPIN 0x10 // enter_sleep_mode +#define R61529_SLPOUT 0x11 // exit_sleep_mode +#define R61529_PTLON 0x12 // enter_partial_mode +#define R61529_NORON 0x13 // enter_normal_mode + +#define R61529_INVOFF 0x20 // exit_invert_mode +#define R61529_INVON 0x21 // enter_invert_mode +#define R61529_DISPOFF 0x28 // set_display_off +#define R61529_DISPON 0x29 // set_display_on +#define R61529_CASET 0x2A // set_column_address +#define R61529_PASET 0x2B // set_page_address +#define R61529_RAMWR 0x2C // write_memory_start +#define R61529_RAMRD 0x2E // read_memory_start + +#define R61529_PTLAR 0x30 // set_partial_area +#define R61529_TEAROFF 0x34 // set_tear_off +#define R61529_TEARON 0x35 // set_tear_on +#define R61529_MADCTL 0x36 // set_address_mode +#define R61529_IDLEOFF 0x38 // exit_idle_mode +#define R61529_IDLEON 0x39 // enter_idle_mode + +#define R61529_PIXFMT 0x3A // set_pixel_format +#define R61529_WRMC 0x3C // write_memory_continue +#define R61529_RDMC 0x3E // read_memory_continue + +#define R61529_SETTSL 0x44 // set_tear_scanline +#define R61529_GETSL 0x45 // get_scanline + +#define R61529_RDDDBS 0xA1 // read_DDB_start + +#define R61529_MCAP 0xB0 // Manufacturer Command Access Protect +#define R61529_LPMC 0xB1 // Low Power Mode Control +#define R61529_FMAIS 0xB3 // Frame Memory Access and Interface Setting +#define R61529_DISPMODE 0xB4 // Display Mode +#define R61529_RCEEC 0xB5 // Read Checksum and ECC Error Count +#define R61529_DSICTL 0xB6 // DSI Control +#define R61529_MDDICTL 0xB7 // MDDI Control +#define R61529_BLCTL1 0xB8 // Backlight Control (1) +#define R61529_BLCTL2 0xB9 // Backlight Control (2) +#define R61529_BLCTL3 0xBA // Backlight Control (3) +#define R61529_DCRD 0xBF // Device Code Read + +#define R61529_PDS 0xC0 // Panel Driving Setting +#define R61529_DTSFNM 0xC1 // Display Timing Setting for Normal Mode +#define R61529_TESTMODE1 0xC3 // Test Mode 1 +#define R61529_SGDTS 0xC4 // Source/Gate Driving Timing Setting +#define R61529_DPIPCTL 0xC6 // DPI Polarity Control +#define R61529_TESTMODE2 0xC7 // Test Mode 2 +#define R61529_GAMMASETA 0xC8 // Gamma Setting A Set +#define R61529_GAMMASETB 0xC9 // Gamma Setting B Set +#define R61529_GAMMASETC 0xCA // Gamma Setting C Set +#define R61529_TESTMODE3 0xCC // Test Mode 3 + +#define R61529_PWSET 0xD0 // Power Setting (Charge Pump Setting) +#define R61529_VCOMSET 0xD1 // VCOM Setting +#define R61529_TESTMODE4 0xD6 // Test Mode 4 +#define R61529_TESTMODE5 0xD7 // Test Mode 5 +#define R61529_TESTMODE6 0xD8 // Test Mode 6 +#define R61529_TESTMODE7 0xD9 // Test Mode 7 +#define R61529_TESTMODE8 0xDA // Test Mode 8 + +#define R61529_NVMAC 0xE0 // NVM Access Control +#define R61529_SETDDBWRCTL 0xE1 // set_DDB_write_control +#define R61529_NVMLC 0xE2 // NVM Load Control +#define R61529_TESTMODE9 0xE4 // Test Mode 9 +#define R61529_TESTMODE10 0xE5 // Test Mode 10 +#define R61529_TESTMODE11 0xE6 // Test Mode 11 +#define R61529_TESTMODE12 0xE7 // Test Mode 12 + +#define R61529_TESTMODE13 0xF3 // Test Mode 13 +#define R61529_RDMODEIN 0xF5 // Read Mode In for DBI Only +#define R61529_RDMODEOUT 0xF6 // Read Mode Out for DBI Only +#define R61529_TESTMODE14 0xF8 // Test Mode 14 +#define R61529_TESTMODE15 0xFA // Test Mode 15 +#define R61529_TESTMODE16 0xFC // Test Mode 16 +#define R61529_TESTMODE17 0xFD // Test Mode 17 +#define R61529_TESTMODE18 0xFE // Test Mode 18 + +// parameters +#define R61529_MADCTL_MY 0x80 // Bottom to top +#define R61529_MADCTL_MX 0x40 // Right to left +#define R61529_MADCTL_MV 0x20 // Reverse Mode +#define R61529_MADCTL_ML 0x10 // LCD refresh Bottom to top +#define R61529_MADCTL_RGB 0x00 // Red-Green-Blue pixel order +#define R61529_MADCTL_BGR 0x08 // Blue-Green-Red pixel order +#define R61529_MADCTL_MH 0x04 // LCD refresh right to left +#define R61529_MADCTL_SS 0x02 +#define R61529_MADCTL_GS 0x01 + +class Arduino_R61529 : public Arduino_TFT +{ +public: + Arduino_R61529(Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, bool ips = false); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.cpp new file mode 100644 index 0000000..6957aef --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.cpp @@ -0,0 +1,207 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_SEPS525.h" +#include "SPI.h" + +Arduino_SEPS525::Arduino_SEPS525( + Arduino_DataBus *bus, int8_t rst, uint8_t r, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, false, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_SEPS525::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_SEPS525::tftInit() +{ + if (_rst < 0) + { + _bus->sendCommand(SEPS525_SOFT_RST); + _bus->sendData(0x01); + delay(SEPS525_RST_DELAY); + } + + _bus->sendCommand(SEPS525_REDUCE_CURRENT); + _bus->sendData(0x01); + delay(1); + + // normal mode + _bus->sendCommand(SEPS525_REDUCE_CURRENT); + _bus->sendData(0x00); + delay(1); + + // display off + _bus->sendCommand(SEPS525_DISP_ON_OFF); + _bus->sendData(0x00); + + // turn on internal oscillator using external resistor + _bus->sendCommand(SEPS525_OSC_CTL); + _bus->sendData(0x01); + + // 90 hz frame rate, divider 0 + _bus->sendCommand(SEPS525_CLOCK_DIV); + _bus->sendData(0x30); + + // duty cycle 127 + _bus->sendCommand(0x28); + _bus->sendData(0x7f); + + // start on line 0 + _bus->sendCommand(0x29); + _bus->sendData(0x00); + + // rgb_if + _bus->sendCommand(SEPS525_RGB_IF); + _bus->sendData(0x31); + + // driving current r g b (uA) + _bus->sendCommand(SEPS525_DRIVING_CURRENT_R); + _bus->sendData(0x45); + _bus->sendCommand(SEPS525_DRIVING_CURRENT_G); + _bus->sendData(0x34); + _bus->sendCommand(SEPS525_DRIVING_CURRENT_B); + _bus->sendData(0x33); + + // precharge time r g b + _bus->sendCommand(SEPS525_PRECHARGE_TIME_R); + _bus->sendData(0x04); + _bus->sendCommand(SEPS525_PRECHARGE_TIME_G); + _bus->sendData(0x05); + _bus->sendCommand(SEPS525_PRECHARGE_TIME_B); + _bus->sendData(0x05); + + // precharge current r g b (uA) + _bus->sendCommand(SEPS525_PRECHARGE_CURRENT_R); + _bus->sendData(0x9d); + _bus->sendCommand(SEPS525_PRECHARGE_CURRENT_G); + _bus->sendData(0x8c); + _bus->sendCommand(SEPS525_PRECHARGE_CURRENT_B); + _bus->sendData(0x57); + + _bus->sendCommand(SEPS525_IREF); + _bus->sendData(0x00); + + // display on + _bus->sendCommand(SEPS525_DISP_ON_OFF); + _bus->sendData(0x01); +} + +void Arduino_SEPS525::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint8_t cmd1, cmd2, cmd3; + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + if (_rotation & 0x01) // Portrait + { + cmd1 = SEPS525_MY1_ADDR; + cmd2 = SEPS525_M_AP_Y; + cmd3 = SEPS525_MY2_ADDR; + } + else + { + cmd1 = SEPS525_MX1_ADDR; + cmd2 = SEPS525_M_AP_X; + cmd3 = SEPS525_MX2_ADDR; + } + _bus->writeCommand(cmd1); + _bus->write16(x_start); + _bus->writeCommand(cmd2); + _bus->write16(x_start); + _bus->writeCommand(cmd3); + _bus->write16(x_end); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + if (_rotation & 0x01) // Portrait + { + cmd1 = SEPS525_MX1_ADDR; + cmd2 = SEPS525_M_AP_X; + cmd3 = SEPS525_MX2_ADDR; + } + else + { + cmd1 = SEPS525_MY1_ADDR; + cmd2 = SEPS525_M_AP_Y; + cmd3 = SEPS525_MY2_ADDR; + } + _bus->writeCommand(cmd1); + _bus->write16(y_start); + _bus->writeCommand(cmd2); + _bus->write16(y_start); + _bus->writeCommand(cmd3); + _bus->write16(y_end); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(SEPS525_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_SEPS525::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + _bus->sendCommand(SEPS525_DISPLAY_MODE_SET); + _bus->sendData(0x00); + _bus->sendCommand(SEPS525_MEMORY_WRITE_MODE); + _bus->sendData(0x66); + break; + case 1: + _bus->sendCommand(SEPS525_DISPLAY_MODE_SET); + _bus->sendData(0x10); + _bus->sendCommand(SEPS525_MEMORY_WRITE_MODE); + _bus->sendData(0x67); + break; + case 2: + _bus->sendCommand(SEPS525_DISPLAY_MODE_SET); + _bus->sendData(0x30); + _bus->sendCommand(SEPS525_MEMORY_WRITE_MODE); + _bus->sendData(0x66); + break; + case 3: + _bus->sendCommand(SEPS525_DISPLAY_MODE_SET); + _bus->sendData(0x20); + _bus->sendCommand(SEPS525_MEMORY_WRITE_MODE); + _bus->sendData(0x67); + break; + } +} + +void Arduino_SEPS525::invertDisplay(bool i) +{ + // Not Implemented + UNUSED(i); +} + +void Arduino_SEPS525::displayOn(void) +{ + _bus->sendCommand(SEPS525_DISP_ON_OFF); + _bus->sendData(0x01); +} + +void Arduino_SEPS525::displayOff(void) +{ + _bus->sendCommand(SEPS525_DISP_ON_OFF); + _bus->sendData(0x00); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.h new file mode 100644 index 0000000..6da783e --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SEPS525.h @@ -0,0 +1,68 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_SEPS525_H_ +#define _ARDUINO_SEPS525_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define SEPS525_TFTWIDTH 160 ///< SEPS525 max TFT width +#define SEPS525_TFTHEIGHT 128 ///< SEPS525 max TFT height + +#define SEPS525_RST_DELAY 1 + +#define SEPS525_INDEX 0x00 +#define SEPS525_STATUS_RD 0x01 +#define SEPS525_OSC_CTL 0x02 +#define SEPS525_IREF 0x80 +#define SEPS525_CLOCK_DIV 0x03 +#define SEPS525_REDUCE_CURRENT 0x04 +#define SEPS525_SOFT_RST 0x05 +#define SEPS525_DISP_ON_OFF 0x06 +#define SEPS525_PRECHARGE_TIME_R 0x08 +#define SEPS525_PRECHARGE_TIME_G 0x09 +#define SEPS525_PRECHARGE_TIME_B 0x0A +#define SEPS525_PRECHARGE_CURRENT_R 0x0B +#define SEPS525_PRECHARGE_CURRENT_G 0x0C +#define SEPS525_PRECHARGE_CURRENT_B 0x0D +#define SEPS525_DRIVING_CURRENT_R 0x10 +#define SEPS525_DRIVING_CURRENT_G 0x11 +#define SEPS525_DRIVING_CURRENT_B 0x12 +#define SEPS525_DISPLAY_MODE_SET 0x13 +#define SEPS525_RGB_IF 0x14 +#define SEPS525_RGB_POL 0x15 +#define SEPS525_MEMORY_WRITE_MODE 0x16 +#define SEPS525_MX1_ADDR 0x17 +#define SEPS525_MX2_ADDR 0x18 +#define SEPS525_MY1_ADDR 0x19 +#define SEPS525_MY2_ADDR 0x1a +#define SEPS525_M_AP_X 0x20 +#define SEPS525_M_AP_Y 0x21 +#define SEPS525_RAMWR 0x22 + +class Arduino_SEPS525 : public Arduino_TFT +{ +public: + Arduino_SEPS525( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + int16_t w = SEPS525_TFTWIDTH, int16_t h = SEPS525_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.cpp new file mode 100644 index 0000000..d4f4671 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.cpp @@ -0,0 +1,194 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/gitcnd/LCDWIKI_SPI.git + */ +#include "Arduino_SSD1283A.h" +#include "SPI.h" + +Arduino_SSD1283A::Arduino_SSD1283A( + Arduino_DataBus *bus, int8_t rst, uint8_t r, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, false, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_SSD1283A::begin(int32_t speed) +{ +#if defined(ESP8266) || defined(ESP32) + if (speed == 0) + { + speed = 27000000; + } +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) + if (speed == 0) + { + speed = 27000000; + } +#endif + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_SSD1283A::tftInit() +{ + // Initialization Sequence + _bus->beginWrite(); + _bus->writeCommand16(SSD1283A_POWER_CONTROL_1); + _bus->write16(0x2F8E); + _bus->writeCommand16(SSD1283A_POWER_CONTROL_2); + _bus->write16(0x000C); + _bus->writeCommand16(SSD1283A_DISPLAY_CONTROL); + _bus->write16(0x0021); + _bus->writeCommand16(SSD1283A_VCOM_OTP_1); + _bus->write16(0x0006); + _bus->writeCommand16(SSD1283A_VCOM_OTP_1); + _bus->write16(0x0005); + _bus->writeCommand16(SSD1283A_FURTHER_BIAS_CURRENT_SETTING); + _bus->write16(0x057F); + _bus->writeCommand16(SSD1283A_VCOM_OTP_2); + _bus->write16(0x89A1); + _bus->writeCommand16(SSD1283A_OSCILLATOR); + _bus->write16(0x0001); + _bus->endWrite(); + delay(100); + _bus->beginWrite(); + _bus->writeCommand16(SSD1283A_VCOM_OTP_2); + _bus->write16(0x80B0); + _bus->endWrite(); + delay(30); + _bus->beginWrite(); + _bus->writeCommand16(SSD1283A_VCOM_OTP_2); + _bus->write16(0xFFFE); + _bus->writeCommand16(SSD1283A_DISPLAY_CONTROL); + _bus->write16(0x0223); + _bus->endWrite(); + delay(30); + _bus->beginWrite(); + _bus->writeCommand16(SSD1283A_DISPLAY_CONTROL); + _bus->write16(0x0233); + _bus->writeCommand16(SSD1283A_DRIVER_OUTPUT_CONTROL); + _bus->write16(0x2183); + _bus->writeCommand16(SSD1283A_ENTRY_MODE); + _bus->write16(0x6830); + _bus->writeCommand16(0x2F); + _bus->write16(0xFFFF); + _bus->writeCommand16(SSD1283A_OSCILLATOR_FREQUENCY); + _bus->write16(0x8000); + _bus->writeCommand16(SSD1283A_FURTHER_BIAS_CURRENT_SETTING); + _bus->write16(0x0570); + _bus->writeCommand16(SSD1283A_LCD_DRIVING_WAVEFORM_CONTROL); + _bus->write16(0x0300); + _bus->writeCommand16(SSD1283A_FRAME_CYCLE_CONTROL); + _bus->write16(0x580C); + _bus->writeCommand16(SSD1283A_POWER_CONTROL_3); + _bus->write16(0x0609); + _bus->writeCommand16(SSD1283A_POWER_CONTROL_4); + _bus->write16(0x3100); + _bus->endWrite(); +} + +void Arduino_SSD1283A::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint8_t v1 = 0, v2 = 0, v3 = 0, h1 = 0, h2 = 0, h3 = 0; + + // TODO: it works, but should have better way + switch (_rotation) + { + case 0: + v1 = y + h - 1 + _yStart; + v2 = y + _yStart; + v3 = v2; + h1 = x + w - 1 + _xStart; + h2 = x + _xStart; + h3 = h2; + break; + case 1: + v1 = x + w - 1 + _xStart; + v2 = x + _xStart; + v3 = v2; + h1 = SSD1283A_TFTWIDTH - y - 1 + _yStart; + h2 = SSD1283A_TFTWIDTH - y - h + _yStart; + h3 = h1; + break; + case 2: + v1 = SSD1283A_TFTWIDTH - y - 1 + _yStart; + v2 = SSD1283A_TFTWIDTH - y - h + _yStart; + v3 = v1; + h1 = SSD1283A_TFTHEIGHT - x - 1 + _xStart; + h2 = SSD1283A_TFTHEIGHT - x - w + _xStart; + h3 = h1; + break; + case 3: + v1 = SSD1283A_TFTHEIGHT - x - 1 + _xStart; + v2 = SSD1283A_TFTHEIGHT - x - w + _xStart; + v3 = v1; + h1 = y + h - 1 + _yStart; + h2 = y + _yStart; + h3 = h2; + break; + } + _bus->writeCommand(SSD1283A_HORIZONTAL_RAM_ADDRESS_POSITION); + _bus->write(h1); + _bus->write(h2); + + _bus->writeCommand(SSD1283A_VERTICAL_RAM_ADDRESS_POSITION); + _bus->write(v1); + _bus->write(v2); + + _bus->writeCommand(SSD1283A_RAM_ADDRESS_SET); + _bus->write(v3); + _bus->write(h3); + + _bus->writeCommand(SSD1283A_WRITE_DATA_TO_GRAM); +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_SSD1283A::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + _bus->beginWrite(); + switch (_rotation) + { + case 0: + _bus->writeCommand16(SSD1283A_ENTRY_MODE); + _bus->write16(0x6830); + break; + case 1: + _bus->writeCommand16(SSD1283A_ENTRY_MODE); + _bus->write16(0x6828); + break; + case 2: + _bus->writeCommand(SSD1283A_ENTRY_MODE); + _bus->write16(0x6800); + break; + case 3: + _bus->writeCommand(SSD1283A_ENTRY_MODE); + _bus->write16(0x6818); + break; + } + _bus->endWrite(); +} + +void Arduino_SSD1283A::invertDisplay(bool i) +{ + // Not Implemented + UNUSED(i); +} + +void Arduino_SSD1283A::displayOn(void) +{ + // Not Implemented +} + +void Arduino_SSD1283A::displayOff(void) +{ + // Not Implemented +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.h new file mode 100644 index 0000000..e63ca78 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1283A.h @@ -0,0 +1,81 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/gitcnd/LCDWIKI_SPI.git + */ +#ifndef _ARDUINO_SSD1283A_H_ +#define _ARDUINO_SSD1283A_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define SSD1283A_TFTWIDTH 130 ///< SSD1283A max TFT width +#define SSD1283A_TFTHEIGHT 130 ///< SSD1283A max TFT height + +// http://www.lcdwiki.com/res/MSP1601/SSD1283A%20Datasheet.pdf +#define SSD1283A_OSCILLATOR 0x00 +#define SSD1283A_DRIVER_OUTPUT_CONTROL 0x01 +#define SSD1283A_LCD_DRIVING_WAVEFORM_CONTROL 0x02 +#define SSD1283A_ENTRY_MODE 0x03 +#define SSD1283A_COMPARE_REGISTER_1 0x04 +#define SSD1283A_COMPARE_REGISTER_2 0x05 +#define SSD1283A_DISPLAY_CONTROL 0x07 +#define SSD1283A_FRAME_CYCLE_CONTROL 0x0B +#define SSD1283A_POWER_CONTROL_1 0x10 +#define SSD1283A_POWER_CONTROL_2 0x11 +#define SSD1283A_POWER_CONTROL_3 0x12 +#define SSD1283A_POWER_CONTROL_4 0x13 +#define SSD1283A_HORIZONTAL_PORCH 0x16 +#define SSD1283A_VERTICAL_PORCH 0x17 +#define SSD1283A_POWER_CONTROL_5 0x1E +#define SSD1283A_POWER_CONTROL_6 0x1F +#define SSD1283A_RAM_ADDRESS_SET 0x21 +#define SSD1283A_WRITE_DATA_TO_GRAM 0x22 +#define SSD1283A_READ_DATA_TO_GRAM 0x22 +#define SSD1283A_RAM_WRITE_DATA_MASK_1 0x23 +#define SSD1283A_RAM_WRITE_DATA_MASK_2 0x24 +#define SSD1283A_VCOM_OTP_1 0x28 +#define SSD1283A_VCOM_OTP_2 0x29 +#define SSD1283A_GAMMA_CONTROL_01 0x30 +#define SSD1283A_GAMMA_CONTROL_02 0x31 +#define SSD1283A_GAMMA_CONTROL_03 0x32 +#define SSD1283A_GAMMA_CONTROL_04 0x33 +#define SSD1283A_GAMMA_CONTROL_05 0x34 +#define SSD1283A_GAMMA_CONTROL_06 0x35 +#define SSD1283A_GAMMA_CONTROL_07 0x36 +#define SSD1283A_GAMMA_CONTROL_08 0x37 +#define SSD1283A_GAMMA_CONTROL_09 0x38 +#define SSD1283A_GAMMA_CONTROL_10 0x39 +#define SSD1283A_GATE_SCAN_POSITION 0x40 +#define SSD1283A_VERTICAL_SCROLL_CONTROL 0x41 +#define SSD1283A_1ST_SCREEN_DRIVING_POSITION 0x42 +#define SSD1283A_2ND_SCREEN_DRIVING_POSITION 0x43 +#define SSD1283A_HORIZONTAL_RAM_ADDRESS_POSITION 0x44 +#define SSD1283A_VERTICAL_RAM_ADDRESS_POSITION 0x45 +#define SSD1283A_FURTHER_BIAS_CURRENT_SETTING 0x27 +#define SSD1283A_OSCILLATOR_FREQUENCY 0x2C + +class Arduino_SSD1283A : public Arduino_TFT +{ +public: + Arduino_SSD1283A( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + int16_t w = SSD1283A_TFTWIDTH, int16_t h = SSD1283A_TFTHEIGHT, + uint8_t col_offset1 = 2, uint8_t row_offset1 = 2, uint8_t col_offset2 = 2, uint8_t row_offset2 = 2); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.cpp new file mode 100644 index 0000000..6906997 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.cpp @@ -0,0 +1,134 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_SSD1331.h" +#include "SPI.h" + +Arduino_SSD1331::Arduino_SSD1331( + Arduino_DataBus *bus, int8_t rst, uint8_t r, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, false, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_SSD1331::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_SSD1331::tftInit() +{ + // Initialization Sequence + _bus->sendCommand(SSD1331_DISPLAYOFF); // 0xAE + _bus->sendCommand(SSD1331_STARTLINE); // 0xA1 + _bus->sendCommand(0x0); + _bus->sendCommand(SSD1331_DISPLAYOFFSET); // 0xA2 + _bus->sendCommand(0x0); + _bus->sendCommand(SSD1331_NORMALDISPLAY); // 0xA4 + _bus->sendCommand(SSD1331_SETMULTIPLEX); // 0xA8 + _bus->sendCommand(0x3F); // 0x3F 1/64 duty + _bus->sendCommand(SSD1331_SETMASTER); // 0xAD + _bus->sendCommand(0x8E); + _bus->sendCommand(SSD1331_POWERMODE); // 0xB0 + _bus->sendCommand(0x0B); + _bus->sendCommand(SSD1331_PRECHARGE); // 0xB1 + _bus->sendCommand(0x31); + _bus->sendCommand(SSD1331_CLOCKDIV); // 0xB3 + _bus->sendCommand(0xF0); // 7:4 = Oscillator Frequency, 3:0 = CLK Div Ratio (A[3:0]+1 = 1..16) + _bus->sendCommand(SSD1331_PRECHARGEA); // 0x8A + _bus->sendCommand(0x64); + _bus->sendCommand(SSD1331_PRECHARGEB); // 0x8B + _bus->sendCommand(0x78); + _bus->sendCommand(SSD1331_PRECHARGEA); // 0x8C + _bus->sendCommand(0x64); + _bus->sendCommand(SSD1331_PRECHARGELEVEL); // 0xBB + _bus->sendCommand(0x3A); + _bus->sendCommand(SSD1331_VCOMH); // 0xBE + _bus->sendCommand(0x3E); + _bus->sendCommand(SSD1331_MASTERCURRENT); // 0x87 + _bus->sendCommand(0x06); + _bus->sendCommand(SSD1331_CONTRASTA); // 0x81 + _bus->sendCommand(0x91); + _bus->sendCommand(SSD1331_CONTRASTB); // 0x82 + _bus->sendCommand(0x50); + _bus->sendCommand(SSD1331_CONTRASTC); // 0x83 + _bus->sendCommand(0x7D); + _bus->sendCommand(SSD1331_DISPLAYON); //--turn on oled panel +} + +void Arduino_SSD1331::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint8_t cmd = (_rotation & 0x01) ? SSD1331_SETROW : SSD1331_SETCOLUMN; + uint8_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(cmd); // Column addr set + _bus->writeCommand(x_start); // XSTART + _bus->writeCommand(x_end); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint8_t cmd = (_rotation & 0x01) ? SSD1331_SETCOLUMN : SSD1331_SETROW; + uint8_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(cmd); // Row addr set + _bus->writeCommand(y_start); // YSTART + _bus->writeCommand(y_end); // YEND + + _currentY = y; + _currentH = h; + } +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_SSD1331::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = 0b01110010; + break; + case 1: + r = 0b01110001; + break; + case 2: + r = 0b01100000; + break; + case 3: + r = 0b01100011; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(SSD1331_SETREMAP); + _bus->writeCommand(r); + _bus->endWrite(); +} + +void Arduino_SSD1331::invertDisplay(bool i) +{ + _bus->sendCommand(i ? SSD1331_INVERTDISPLAY : SSD1331_NORMALDISPLAY); +} + +void Arduino_SSD1331::displayOn(void) +{ + _bus->sendCommand(SSD1331_DISPLAYALLON); +} + +void Arduino_SSD1331::displayOff(void) +{ + _bus->sendCommand(SSD1331_DISPLAYALLOFF); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.h new file mode 100644 index 0000000..f3a098e --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1331.h @@ -0,0 +1,67 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_SSD1331_H_ +#define _ARDUINO_SSD1331_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define SSD1331_TFTWIDTH 96 ///< SSD1331 max TFT width +#define SSD1331_TFTHEIGHT 64 ///< SSD1331 max TFT height + + +#define SSD1331_DRAWLINE 0x21 +#define SSD1331_DRAWRECT 0x22 +#define SSD1331_FILL 0x26 +#define SSD1331_SETCOLUMN 0x15 +#define SSD1331_SETROW 0x75 +#define SSD1331_CONTRASTA 0x81 +#define SSD1331_CONTRASTB 0x82 +#define SSD1331_CONTRASTC 0x83 +#define SSD1331_MASTERCURRENT 0x87 +#define SSD1331_SETREMAP 0xA0 +#define SSD1331_STARTLINE 0xA1 +#define SSD1331_DISPLAYOFFSET 0xA2 +#define SSD1331_NORMALDISPLAY 0xA4 +#define SSD1331_DISPLAYALLON 0xA5 +#define SSD1331_DISPLAYALLOFF 0xA6 +#define SSD1331_INVERTDISPLAY 0xA7 +#define SSD1331_SETMULTIPLEX 0xA8 +#define SSD1331_SETMASTER 0xAD +#define SSD1331_DISPLAYOFF 0xAE +#define SSD1331_DISPLAYON 0xAF +#define SSD1331_POWERMODE 0xB0 +#define SSD1331_PRECHARGE 0xB1 +#define SSD1331_CLOCKDIV 0xB3 +#define SSD1331_PRECHARGEA 0x8A +#define SSD1331_PRECHARGEB 0x8B +#define SSD1331_PRECHARGEC 0x8C +#define SSD1331_PRECHARGELEVEL 0xBB +#define SSD1331_VCOMH 0xBE + +class Arduino_SSD1331 : public Arduino_TFT +{ +public: + Arduino_SSD1331( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + int16_t w = SSD1331_TFTWIDTH, int16_t h = SSD1331_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.cpp new file mode 100644 index 0000000..1419e8b --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.cpp @@ -0,0 +1,127 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit-SSD1351-library.git + */ +#include "Arduino_SSD1351.h" +#include "SPI.h" + +Arduino_SSD1351::Arduino_SSD1351( + Arduino_DataBus *bus, int8_t rst, uint8_t r, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, false, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_SSD1351::begin(int32_t speed) +{ +#if defined(ESP8266) || defined(ESP32) + if (speed == 0) + { + speed = 16000000; + } +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) + if (speed == 0) + { + speed = 16000000; + } +#endif + _override_datamode = SPI_MODE0; // always SPI_MODE0 + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_SSD1351::tftInit() +{ + _bus->sendCommand(SSD1351_COMMANDLOCK); // set command lock + _bus->sendData(0x12); + _bus->sendCommand(SSD1351_COMMANDLOCK); // set command lock + _bus->sendData(0xB1); + _bus->sendCommand(SSD1351_DISPLAYOFF); // Display off + _bus->sendCommand(SSD1351_DISPLAYOFFSET); // 0xA2 + _bus->sendData(0x0); + _bus->sendCommand(SSD1351_NORMALDISPLAY); // 0xA6 + _bus->sendCommand(SSD1351_DISPLAYON); // Main screen turn on +} + +void Arduino_SSD1351::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + uint8_t cmd; + if ((x != _currentX) || (w != _currentW)) + { + cmd = (_rotation & 0x01) ? SSD1351_SETROW : SSD1351_SETCOLUMN; + uint8_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(cmd); // Column addr set + _bus->write(x_start); // XSTART + _bus->write(x_end); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + cmd = (_rotation & 0x01) ? SSD1351_SETCOLUMN : SSD1351_SETROW; + uint8_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(cmd); // Row addr set + _bus->write(y_start); // YSTART + _bus->write(y_end); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(SSD1351_WRITERAM); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_SSD1351::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + uint8_t startline = (_rotation < 2) ? HEIGHT : 0; + switch (_rotation) + { + case 0: + r = 0b01110100; + break; + case 1: + r = 0b01110111; + break; + case 2: + r = 0b01100110; + break; + case 3: + r = 0b01100101; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(SSD1351_SETREMAP); + _bus->write(r); + _bus->writeCommand(SSD1351_STARTLINE); + _bus->write(startline); + _bus->endWrite(); +} + +void Arduino_SSD1351::invertDisplay(bool i) +{ + _bus->sendCommand(i ? SSD1351_INVERTDISPLAY : SSD1351_NORMALDISPLAY); +} + +void Arduino_SSD1351::displayOn(void) +{ + _bus->sendCommand(SSD1351_DISPLAYALLON); +} + +void Arduino_SSD1351::displayOff(void) +{ + _bus->sendCommand(SSD1351_DISPLAYALLOFF); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.h new file mode 100644 index 0000000..aa60ec2 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_SSD1351.h @@ -0,0 +1,70 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/adafruit/Adafruit-SSD1351-library.git + */ +#ifndef _ARDUINO_SSD1351_H_ +#define _ARDUINO_SSD1351_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define SSD1351_TFTWIDTH 128 ///< SSD1351 max TFT width +#define SSD1351_TFTHEIGHT 128 ///< SSD1351 max TFT height + +#define SSD1351_SETCOLUMN 0x15 +#define SSD1351_SETROW 0x75 +#define SSD1351_WRITERAM 0x5C +#define SSD1351_READRAM 0x5D +#define SSD1351_SETREMAP 0xA0 +#define SSD1351_STARTLINE 0xA1 +#define SSD1351_DISPLAYOFFSET 0xA2 +#define SSD1351_DISPLAYALLOFF 0xA4 +#define SSD1351_DISPLAYALLON 0xA5 +#define SSD1351_NORMALDISPLAY 0xA6 +#define SSD1351_INVERTDISPLAY 0xA7 +#define SSD1351_FUNCTIONSELECT 0xAB +#define SSD1351_DISPLAYOFF 0xAE +#define SSD1351_DISPLAYON 0xAF +#define SSD1351_PRECHARGE 0xB1 +#define SSD1351_DISPLAYENHANCE 0xB2 +#define SSD1351_CLOCKDIV 0xB3 +#define SSD1351_SETVSL 0xB4 +#define SSD1351_SETGPIO 0xB5 +#define SSD1351_PRECHARGE2 0xB6 +#define SSD1351_SETGRAY 0xB8 +#define SSD1351_USELUT 0xB9 +#define SSD1351_PRECHARGELEVEL 0xBB +#define SSD1351_VCOMH 0xBE +#define SSD1351_CONTRASTABC 0xC1 +#define SSD1351_CONTRASTMASTER 0xC7 +#define SSD1351_MUXRATIO 0xCA +#define SSD1351_COMMANDLOCK 0xFD +#define SSD1351_HORIZSCROLL 0x96 +#define SSD1351_STOPSCROLL 0x9E +#define SSD1351_STARTSCROLL 0x9F + +class Arduino_SSD1351 : public Arduino_TFT +{ +public: + Arduino_SSD1351( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + int16_t w = SSD1351_TFTWIDTH, int16_t h = SSD1351_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.cpp new file mode 100644 index 0000000..a316164 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.cpp @@ -0,0 +1,138 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ST7735.h" + +Arduino_ST7735::Arduino_ST7735( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2, + bool bgr) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ + _bgr = bgr; +} + +void Arduino_ST7735::begin(int32_t speed) +{ +#if defined(ESP8266) || defined(ESP32) + if (speed == 0) + { + speed = 27000000; // ST7735 Maximum supported speed + } +// Teensy 4.x +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) + if (speed == 0) + { + speed = 27000000; // ST7735 Maximum supported speed + } +#endif + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ST7735::tftInit() +{ + // if (_rst < 0) + // { + _bus->sendCommand(ST7735_SWRESET); // 1: Software reset + delay(ST7735_RST_DELAY); + // } + + _bus->sendCommand(ST7735_SLPOUT); // 2: Out of sleep mode, no args, w/delay + delay(ST7735_SLPOUT_DELAY); + _bus->sendCommand(ST7735_COLMOD); // 3: Set color mode, 1 arg + delay: + _bus->sendData(0x05); // 16-bit color + if (_ips) + { + _bus->sendCommand(ST7735_INVON); + } + _bus->sendCommand(ST7735_NORON); // 4: Normal display on, no args, w/delay + delay(10); + _bus->sendCommand(ST7735_DISPON); // 5: Main screen turn on, no args, w/delay +} + +void Arduino_ST7735::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + uint16_t x_start = x + _xStart, x_end = x + w - 1 + _xStart; + + _bus->writeCommand(ST7735_CASET); // Column addr set + _bus->write(x_start >> 8); + _bus->write(x_start & 0xFF); // XSTART + _bus->write(x_end >> 8); + _bus->write(x_end & 0xFF); // XEND + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + uint16_t y_start = y + _yStart, y_end = y + h - 1 + _yStart; + + _bus->writeCommand(ST7735_RASET); // Row addr set + _bus->write(y_start >> 8); + _bus->write(y_start & 0xFF); // YSTART + _bus->write(y_end >> 8); + _bus->write(y_end & 0xFF); // YEND + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ST7735_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ST7735::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = ST7735_MADCTL_MX | ST7735_MADCTL_MY | (_bgr ? ST7735_MADCTL_BGR : ST7735_MADCTL_RGB); + break; + + case 1: + r = ST7735_MADCTL_MY | ST7735_MADCTL_MV | (_bgr ? ST7735_MADCTL_BGR : ST7735_MADCTL_RGB); + break; + + case 2: + r = (_bgr ? ST7735_MADCTL_BGR : ST7735_MADCTL_RGB); + break; + + case 3: + r = ST7735_MADCTL_MX | ST7735_MADCTL_MV | (_bgr ? ST7735_MADCTL_BGR : ST7735_MADCTL_RGB); + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ST7735_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_ST7735::invertDisplay(bool i) +{ + _bus->sendCommand(_ips ? (i ? ST7735_INVOFF : ST7735_INVON) : (i ? ST7735_INVON : ST7735_INVOFF)); +} + +void Arduino_ST7735::displayOn(void) +{ + _bus->sendCommand(ST7735_SLPOUT); + delay(ST7735_SLPOUT_DELAY); +} + +void Arduino_ST7735::displayOff(void) +{ + _bus->sendCommand(ST7735_SLPIN); + delay(ST7735_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.h new file mode 100644 index 0000000..731e746 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7735.h @@ -0,0 +1,98 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ST7735_H_ +#define _ARDUINO_ST7735_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define ST7735_TFTWIDTH 128 +#define ST7735_TFTHEIGHT 160 + +#define ST7735_RST_DELAY 50 ///< delay ms wait for reset finish +#define ST7735_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ST7735_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ST7735_NOP 0x00 +#define ST7735_SWRESET 0x01 +#define ST7735_RDDID 0x04 +#define ST7735_RDDST 0x09 + +#define ST7735_SLPIN 0x10 +#define ST7735_SLPOUT 0x11 +#define ST7735_PTLON 0x12 +#define ST7735_NORON 0x13 + +#define ST7735_INVOFF 0x20 +#define ST7735_INVON 0x21 +#define ST7735_DISPOFF 0x28 +#define ST7735_DISPON 0x29 + +#define ST7735_CASET 0x2A +#define ST7735_RASET 0x2B +#define ST7735_RAMWR 0x2C +#define ST7735_RAMRD 0x2E + +#define ST7735_PTLAR 0x30 +#define ST7735_COLMOD 0x3A +#define ST7735_MADCTL 0x36 + +#define ST7735_FRMCTR1 0xB1 +#define ST7735_FRMCTR2 0xB2 +#define ST7735_FRMCTR3 0xB3 +#define ST7735_INVCTR 0xB4 +#define ST7735_DISSET5 0xB6 + +#define ST7735_PWCTR1 0xC0 +#define ST7735_PWCTR2 0xC1 +#define ST7735_PWCTR3 0xC2 +#define ST7735_PWCTR4 0xC3 +#define ST7735_PWCTR5 0xC4 +#define ST7735_VMCTR1 0xC5 + +#define ST7735_RDID1 0xDA +#define ST7735_RDID2 0xDB +#define ST7735_RDID3 0xDC +#define ST7735_RDID4 0xDD + +#define ST7735_PWCTR6 0xFC + +#define ST7735_GMCTRP1 0xE0 +#define ST7735_GMCTRN1 0xE1 + +#define ST7735_MADCTL_MY 0x80 +#define ST7735_MADCTL_MX 0x40 +#define ST7735_MADCTL_MV 0x20 +#define ST7735_MADCTL_ML 0x10 +#define ST7735_MADCTL_RGB 0x00 +#define ST7735_MADCTL_MH 0x04 +#define ST7735_MADCTL_BGR 0x08 + +class Arduino_ST7735 : public Arduino_TFT +{ +public: + Arduino_ST7735( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = ST7735_TFTWIDTH, int16_t h = ST7735_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0, + bool bgr = true); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + bool _bgr; + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.cpp new file mode 100644 index 0000000..cff3001 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.cpp @@ -0,0 +1,194 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/ananevilya/Arduino-ST7789-Library.git + */ +#include "Arduino_ST7789.h" + +Arduino_ST7789::Arduino_ST7789( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_ST7789::begin(int32_t speed) +{ +#if defined(ESP32) + _override_datamode = 3; // SPI_MODE3 +#endif + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ST7789::tftInit() +{ + spi_operation_t st7789_init_operations[] = { + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ST7789_SWRESET}, // 1: Software reset + {DELAY, ST7789_RST_DELAY}, + {END_WRITE, 0}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ST7789_SLPOUT}, // 2: Out of sleep mode, no args, w/delay + {END_WRITE, 0}, + {DELAY, ST7789_SLPOUT_DELAY}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ST7789_COLMOD}, // 3: Set color mode, 16-bit color + {WRITE_DATA_8, 0x55}, + + {WRITE_COMMAND_8, 0x36}, + {WRITE_DATA_8, 0x00}, + + {WRITE_COMMAND_8, 0xB2}, + {WRITE_DATA_32, 0x0C0C0033}, + {WRITE_DATA_8, 0x33}, + + {WRITE_COMMAND_8, 0xB7}, + {WRITE_DATA_8, 0x35}, + {WRITE_COMMAND_8, 0xBB}, + {WRITE_DATA_8, 0x19}, + {WRITE_COMMAND_8, 0xC0}, + {WRITE_DATA_8, 0x2C}, + {WRITE_COMMAND_8, 0xC2}, + {WRITE_DATA_8, 0x01}, + {WRITE_COMMAND_8, 0xC3}, + {WRITE_DATA_8, 0x12}, + {WRITE_COMMAND_8, 0xC4}, + {WRITE_DATA_8, 0x20}, + {WRITE_COMMAND_8, 0xC6}, + {WRITE_DATA_8, 0x0F}, + + {WRITE_COMMAND_8, 0xD0}, + {WRITE_DATA_16, 0xA4A1}, + + {WRITE_COMMAND_8, 0xE0}, + {WRITE_DATA_32, 0xF0091312}, + // 0b11110000: V63P3, V63P2, V63P1, V63P0, V0P3, V0P2, V0P1, V0P0 + // 0b00001001: 0, 0, V1P5, V1P4, V1P3, V1P2, V1P1, V1P0 + // 0b00010011: 0, 0, V2P5, V2P4, V2P3, V2P2, V2P1, V2P0 + // 0b00010010: 0, 0, 0, V4P4, V4P3, V4P2, V4P1, V4P0 + {WRITE_DATA_32, 0x122B3C44}, + // 0b00010010: 0, 0, 0, V6P4, V6P3, V6P2, V6P1, V6P0 + // 0b00101011: 0, 0, J0P1, J0P0, V13P3, V13P2, V13P1, V13P0 + // 0b00111100: 0, V20P6, V20P5, V20P4, V20P3, V20P2, V20P1, V20P0 + // 0b01000100: 0, V36P2, V36P1, V36P0, 0, V27P2, V27P1, V27P0 + {WRITE_DATA_32, 0x4B1B1817}, + // 0b01001011: 0, V43P6, V43P5, V43P4, V43P3, V43P2, V43P1, V43P0 + // 0b00011011: 0, 0, J1P1, J1P0, V50P3, V50P2, V50P1, V50P0 + // 0b00011000: 0, 0, 0, V57P4, V57P3, V57P2, V57P1, V57P0 + // 0b00010111: 0, 0, 0, V59P4, V59P3, V59P2, V59P1, V59P0 + {WRITE_DATA_16, 0x1D21}, + // 0b00011101: 0, 0, V61P5, V61P4, V61P3, V61P2, V61P1, V61P0 + // 0b00100001: 0, 0, V62P5, V62P4, V62P3, V62P2, V62P1, V62P0 + + {WRITE_COMMAND_8, 0XE1}, + {WRITE_DATA_32, 0xF009130C}, + // 0b11110000: V63P3, V63P2, V63P1, V63P0, V0P3, V0P2, V0P1, V0P0 + // 0b00001001: 0, 0, V1P5, V1P4, V1P3, V1P2, V1P1, V1P0 + // 0b00010011: 0, 0, V2P5, V2P4, V2P3, V2P2, V2P1, V2P0 + // 0b00001100: 0, 0, 0, V4N4, V4N3, V4N2, V4N1, V4N0 + {WRITE_DATA_32, 0x0D273B44}, + // 0b00001101: 0, 0, 0, V6N4, V6N3, V6N2, V6N1, V6N0 + // 0b00100111: 0, 0, J0N1, J0N0, V13N3, V13N2, V13N1, V13N0 + // 0b00111011: 0, V20N6, V20N5, V20N4, V20N3, V20N2, V20N1, V20N0 + // 0b01000100: 0, V36N2, V36N1, V36N0, 0, V27N2, V27N1, V27N0 + {WRITE_DATA_32, 0x4D0B1717}, + // 0b01001101: 0, V43N6, V43N5, V43N4, V43N3, V43N2, V43N1, V43N0 + // 0b00001011: 0, 0, J1N1, J1N0, V50N3, V50N2, V50N1, V50N0 + // 0b00010111: 0, 0, 0, V57N4, V57N3, V57N2, V57N1, V57N0 + // 0b00010111: 0, 0, 0, V59N4, V59N3, V59N2, V59N1, V59N0 + {WRITE_DATA_16, 0x1D21}, + // 0b00011101: 0, 0, V61N5, V61N4, V61N3, V61N2, V61N1, V61N0 + // 0b00100001: 0, 0, V62N5, V62N4, V62N3, V62N2, V62N1, V62N0 + + {WRITE_COMMAND_8, ST7789_NORON}, // 4: Normal display on, no args, w/delay + {END_WRITE, 0}, + {DELAY, 10}, + + {BEGIN_WRITE, 0}, + {WRITE_COMMAND_8, ST7789_DISPON}, // 5: Main screen turn on, no args, w/delay + {END_WRITE, 0}, + }; + + _bus->batchOperation(st7789_init_operations, sizeof(st7789_init_operations) / sizeof(st7789_init_operations[0])); + + if (_ips) + { + _bus->sendCommand(ST7789_INVON); + } +} + +void Arduino_ST7789::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + _bus->writeC8D16D16(ST7789_CASET, x + _xStart, x + w - 1 + _xStart); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + _bus->writeC8D16D16(ST7789_RASET, y + _yStart, y + h - 1 + _yStart); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ST7789_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ST7789::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + r = ST7789_MADCTL_MX | ST7789_MADCTL_MY | ST7789_MADCTL_RGB; + break; + + case 1: + r = ST7789_MADCTL_MY | ST7789_MADCTL_MV | ST7789_MADCTL_RGB; + break; + + case 2: + r = ST7789_MADCTL_RGB; + break; + + case 3: + r = ST7789_MADCTL_MX | ST7789_MADCTL_MV | ST7789_MADCTL_RGB; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ST7789_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_ST7789::invertDisplay(bool i) +{ + _bus->sendCommand(_ips ? (i ? ST7789_INVOFF : ST7789_INVON) : (i ? ST7789_INVON : ST7789_INVOFF)); +} + +void Arduino_ST7789::displayOn(void) +{ + _bus->sendCommand(ST7789_SLPOUT); + delay(ST7789_SLPOUT_DELAY); +} + +void Arduino_ST7789::displayOff(void) +{ + _bus->sendCommand(ST7789_SLPIN); + delay(ST7789_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.h new file mode 100644 index 0000000..2ced575 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7789.h @@ -0,0 +1,77 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + * https://github.com/ananevilya/Arduino-ST7789-Library.git + */ +#ifndef _ARDUINO_ST7789_H_ +#define _ARDUINO_ST7789_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define ST7789_TFTWIDTH 240 +#define ST7789_TFTHEIGHT 320 + +#define ST7789_RST_DELAY 120 ///< delay ms wait for reset finish +#define ST7789_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ST7789_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ST7789_NOP 0x00 +#define ST7789_SWRESET 0x01 +#define ST7789_RDDID 0x04 +#define ST7789_RDDST 0x09 + +#define ST7789_SLPIN 0x10 +#define ST7789_SLPOUT 0x11 +#define ST7789_PTLON 0x12 +#define ST7789_NORON 0x13 + +#define ST7789_INVOFF 0x20 +#define ST7789_INVON 0x21 +#define ST7789_DISPOFF 0x28 +#define ST7789_DISPON 0x29 + +#define ST7789_CASET 0x2A +#define ST7789_RASET 0x2B +#define ST7789_RAMWR 0x2C +#define ST7789_RAMRD 0x2E + +#define ST7789_PTLAR 0x30 +#define ST7789_COLMOD 0x3A +#define ST7789_MADCTL 0x36 + +#define ST7789_MADCTL_MY 0x80 +#define ST7789_MADCTL_MX 0x40 +#define ST7789_MADCTL_MV 0x20 +#define ST7789_MADCTL_ML 0x10 +#define ST7789_MADCTL_RGB 0x00 + +#define ST7789_RDID1 0xDA +#define ST7789_RDID2 0xDB +#define ST7789_RDID3 0xDC +#define ST7789_RDID4 0xDD + +class Arduino_ST7789 : public Arduino_TFT +{ +public: + Arduino_ST7789( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = ST7789_TFTWIDTH, int16_t h = ST7789_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.cpp b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.cpp new file mode 100644 index 0000000..a5b6516 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.cpp @@ -0,0 +1,139 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#include "Arduino_ST7796.h" + +Arduino_ST7796::Arduino_ST7796( + Arduino_DataBus *bus, int8_t rst, uint8_t r, + bool ips, int16_t w, int16_t h, + uint8_t col_offset1, uint8_t row_offset1, uint8_t col_offset2, uint8_t row_offset2) + : Arduino_TFT(bus, rst, r, ips, w, h, col_offset1, row_offset1, col_offset2, row_offset2) +{ +} + +void Arduino_ST7796::begin(int32_t speed) +{ + Arduino_TFT::begin(speed); +} + +// Companion code to the above tables. Reads and issues +// a series of LCD commands stored in PROGMEM byte array. +void Arduino_ST7796::tftInit() +{ + _bus->beginWrite(); + _bus->writeC8D8(0xF0, 0xC3); + _bus->writeC8D8(0xF0, 0x96); + _bus->writeC8D8(0x3A, 0x05); + _bus->writeC8D8(0xB0, 0x80); + _bus->writeC8D16(0xB6, 0x0002); + _bus->writeC8D16D16(0xB5, 0x0203, 0x0004); + _bus->writeC8D16(0xB1, 0x8010); + _bus->writeC8D8(0xB4, 0x00); + _bus->writeC8D8(0xB7, 0xC6); + _bus->writeC8D8(0xC5, 0x24); + _bus->writeC8D8(0xE4, 0x31); + _bus->writeCommand(0xE8); + _bus->write32(0x408A0000); + _bus->write32(0x2919A533); + _bus->writeCommand(0xC2); + _bus->writeCommand(0xA7); + + _bus->writeCommand(0xE0); + _bus->write32(0xF0091312); + _bus->write32(0x122B3C44); + _bus->write32(0x4B1B1817); + _bus->write16(0x1D21); + + _bus->writeCommand(0XE1); + _bus->write32(0xF009130C); + _bus->write32(0x0D273B44); + _bus->write32(0x4D0B1717); + _bus->write16(0x1D21); + + _bus->writeC8D8(0xF0, 0xC3); + _bus->writeC8D16(0xF0, 0x69); + _bus->writeCommand(0X13); + _bus->writeCommand(0X11); + if (_ips) + { + _bus->writeCommand(ST7796_INVON); + } + _bus->writeCommand(0X29); + _bus->endWrite(); +} + +void Arduino_ST7796::writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) +{ + if ((x != _currentX) || (w != _currentW)) + { + _bus->writeC8D16D16(ST7796_CASET, x + _xStart, x + w - 1 + _xStart); + + _currentX = x; + _currentW = w; + } + if ((y != _currentY) || (h != _currentH)) + { + _bus->writeC8D16D16(ST7796_RASET, y + _yStart, y + h - 1 + _yStart); + + _currentY = y; + _currentH = h; + } + + _bus->writeCommand(ST7796_RAMWR); // write to RAM +} + +/**************************************************************************/ +/*! + @brief Set origin of (0,0) and orientation of TFT display + @param m The index for rotation, from 0-3 inclusive +*/ +/**************************************************************************/ +void Arduino_ST7796::setRotation(uint8_t r) +{ + Arduino_TFT::setRotation(r); + switch (_rotation) + { + case 0: + // r = ST7796_MADCTL_MX | ST7796_MADCTL_MY | ST7796_MADCTL_BGR | ST7796_MADCTL_MH; + r = ST7796_MADCTL_MY | ST7796_MADCTL_BGR; + break; + + case 1: + // r = ST7796_MADCTL_MY | ST7796_MADCTL_MV | ST7796_MADCTL_BGR | ST7796_MADCTL_MH; + r = ST7796_MADCTL_MX | ST7796_MADCTL_MY | ST7796_MADCTL_MV | ST7796_MADCTL_BGR; + break; + + case 2: + r = ST7796_MADCTL_MX | ST7796_MADCTL_ML | ST7796_MADCTL_BGR | ST7796_MADCTL_MH; + r = ST7796_MADCTL_MX | ST7796_MADCTL_BGR; + break; + + case 3: + // r = ST7796_MADCTL_MX | ST7796_MADCTL_MV | ST7796_MADCTL_BGR | ST7796_MADCTL_MH; + r = ST7796_MADCTL_MV | ST7796_MADCTL_BGR; + break; + } + + _bus->beginWrite(); + _bus->writeCommand(ST7796_MADCTL); + _bus->write(r); + _bus->endWrite(); +} + +void Arduino_ST7796::invertDisplay(bool i) +{ + _bus->sendCommand(_ips ? (i ? ST7796_INVOFF : ST7796_INVON) : (i ? ST7796_INVON : ST7796_INVOFF)); +} + +void Arduino_ST7796::displayOn(void) +{ + _bus->sendCommand(ST7796_SLPOUT); + delay(ST7796_SLPOUT_DELAY); +} + +void Arduino_ST7796::displayOff(void) +{ + _bus->sendCommand(ST7796_SLPIN); + delay(ST7796_SLPIN_DELAY); +} diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.h new file mode 100644 index 0000000..e0d824e --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/display/Arduino_ST7796.h @@ -0,0 +1,78 @@ +/* + * start rewrite from: + * https://github.com/adafruit/Adafruit-GFX-Library.git + */ +#ifndef _ARDUINO_ST7796_H_ +#define _ARDUINO_ST7796_H_ + +#include +#include +#include "../Arduino_GFX.h" +#include "../Arduino_TFT.h" + +#define ST7796_TFTWIDTH 320 +#define ST7796_TFTHEIGHT 480 + +#define ST7796_RST_DELAY 120 ///< delay ms wait for reset finish +#define ST7796_SLPIN_DELAY 120 ///< delay ms wait for sleep in finish +#define ST7796_SLPOUT_DELAY 120 ///< delay ms wait for sleep out finish + +#define ST7796_NOP 0x00 +#define ST7796_SWRESET 0x01 +#define ST7796_RDDID 0x04 +#define ST7796_RDDST 0x09 + +#define ST7796_SLPIN 0x10 +#define ST7796_SLPOUT 0x11 +#define ST7796_PTLON 0x12 +#define ST7796_NORON 0x13 + +#define ST7796_INVOFF 0x20 +#define ST7796_INVON 0x21 +#define ST7796_DISPOFF 0x28 +#define ST7796_DISPON 0x29 + +#define ST7796_CASET 0x2A +#define ST7796_RASET 0x2B +#define ST7796_RAMWR 0x2C +#define ST7796_RAMRD 0x2E + +#define ST7796_PTLAR 0x30 +#define ST7796_COLMOD 0x3A +#define ST7796_MADCTL 0x36 + +#define ST7796_MADCTL_MY 0x80 +#define ST7796_MADCTL_MX 0x40 +#define ST7796_MADCTL_MV 0x20 +#define ST7796_MADCTL_ML 0x10 +#define ST7796_MADCTL_RGB 0x00 +#define ST7796_MADCTL_BGR 0x08 +#define ST7796_MADCTL_MH 0x04 + +#define ST7796_RDID1 0xDA +#define ST7796_RDID2 0xDB +#define ST7796_RDID3 0xDC +#define ST7796_RDID4 0xDD + +class Arduino_ST7796 : public Arduino_TFT +{ +public: + Arduino_ST7796( + Arduino_DataBus *bus, int8_t rst = -1, uint8_t r = 0, + bool ips = false, int16_t w = ST7796_TFTWIDTH, int16_t h = ST7796_TFTHEIGHT, + uint8_t col_offset1 = 0, uint8_t row_offset1 = 0, uint8_t col_offset2 = 0, uint8_t row_offset2 = 0); + + virtual void begin(int32_t speed = 0); + virtual void writeAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); + virtual void setRotation(uint8_t r); + virtual void invertDisplay(bool); + virtual void displayOn(); + virtual void displayOff(); + +protected: + virtual void tftInit(); + +private: +}; + +#endif diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/font/glcdfont.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/font/glcdfont.h new file mode 100644 index 0000000..8834e22 --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/font/glcdfont.h @@ -0,0 +1,280 @@ +// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. +// See gfxfont.h for newer custom bitmap font info. + +#ifndef FONT5X7_H +#define FONT5X7_H + +#ifdef __AVR__ +#include +#include +#elif defined(ESP8266) +#include +#elif defined(__IMXRT1052__) || defined(__IMXRT1062__) +// PROGMEM is defefind for T4 to place data in specific memory section +#undef PROGMEM +#define PROGMEM +#else +#define PROGMEM +#endif + +// Standard ASCII 5x7 font + +static const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, + 0x00, 0x18, 0x3C, 0x18, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, + 0x00, 0x18, 0x24, 0x18, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, + 0x30, 0x48, 0x3A, 0x06, 0x0E, + 0x26, 0x29, 0x79, 0x29, 0x26, + 0x40, 0x7F, 0x05, 0x05, 0x07, + 0x40, 0x7F, 0x05, 0x25, 0x3F, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, + 0x14, 0x22, 0x7F, 0x22, 0x14, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, + 0x06, 0x09, 0x7F, 0x01, 0x7F, + 0x00, 0x66, 0x89, 0x95, 0x6A, + 0x60, 0x60, 0x60, 0x60, 0x60, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, + 0x08, 0x04, 0x7E, 0x04, 0x08, + 0x10, 0x20, 0x7E, 0x20, 0x10, + 0x08, 0x08, 0x2A, 0x1C, 0x08, + 0x08, 0x1C, 0x2A, 0x08, 0x08, + 0x1E, 0x10, 0x10, 0x10, 0x10, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, + 0x30, 0x38, 0x3E, 0x38, 0x30, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, + 0x23, 0x13, 0x08, 0x64, 0x62, + 0x36, 0x49, 0x56, 0x20, 0x50, + 0x00, 0x08, 0x07, 0x03, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, + 0x08, 0x08, 0x3E, 0x08, 0x08, + 0x00, 0x80, 0x70, 0x30, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, + 0x00, 0x00, 0x60, 0x60, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, + 0x3E, 0x51, 0x49, 0x45, 0x3E, + 0x00, 0x42, 0x7F, 0x40, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, + 0x21, 0x41, 0x49, 0x4D, 0x33, + 0x18, 0x14, 0x12, 0x7F, 0x10, + 0x27, 0x45, 0x45, 0x45, 0x39, + 0x3C, 0x4A, 0x49, 0x49, 0x31, + 0x41, 0x21, 0x11, 0x09, 0x07, + 0x36, 0x49, 0x49, 0x49, 0x36, + 0x46, 0x49, 0x49, 0x29, 0x1E, + 0x00, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x00, 0x41, 0x22, 0x14, 0x08, + 0x02, 0x01, 0x59, 0x09, 0x06, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, + 0x7C, 0x12, 0x11, 0x12, 0x7C, + 0x7F, 0x49, 0x49, 0x49, 0x36, + 0x3E, 0x41, 0x41, 0x41, 0x22, + 0x7F, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x49, 0x49, 0x49, 0x41, + 0x7F, 0x09, 0x09, 0x09, 0x01, + 0x3E, 0x41, 0x41, 0x51, 0x73, + 0x7F, 0x08, 0x08, 0x08, 0x7F, + 0x00, 0x41, 0x7F, 0x41, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, + 0x7F, 0x08, 0x14, 0x22, 0x41, + 0x7F, 0x40, 0x40, 0x40, 0x40, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, + 0x7F, 0x04, 0x08, 0x10, 0x7F, + 0x3E, 0x41, 0x41, 0x41, 0x3E, + 0x7F, 0x09, 0x09, 0x09, 0x06, + 0x3E, 0x41, 0x51, 0x21, 0x5E, + 0x7F, 0x09, 0x19, 0x29, 0x46, + 0x26, 0x49, 0x49, 0x49, 0x32, + 0x03, 0x01, 0x7F, 0x01, 0x03, + 0x3F, 0x40, 0x40, 0x40, 0x3F, + 0x1F, 0x20, 0x40, 0x20, 0x1F, + 0x3F, 0x40, 0x38, 0x40, 0x3F, + 0x63, 0x14, 0x08, 0x14, 0x63, + 0x03, 0x04, 0x78, 0x04, 0x03, + 0x61, 0x59, 0x49, 0x4D, 0x43, + 0x00, 0x7F, 0x41, 0x41, 0x41, + 0x02, 0x04, 0x08, 0x10, 0x20, + 0x00, 0x41, 0x41, 0x41, 0x7F, + 0x04, 0x02, 0x01, 0x02, 0x04, + 0x40, 0x40, 0x40, 0x40, 0x40, + 0x00, 0x03, 0x07, 0x08, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, + 0x7F, 0x28, 0x44, 0x44, 0x38, + 0x38, 0x44, 0x44, 0x44, 0x28, + 0x38, 0x44, 0x44, 0x28, 0x7F, + 0x38, 0x54, 0x54, 0x54, 0x18, + 0x00, 0x08, 0x7E, 0x09, 0x02, + 0x18, 0xA4, 0xA4, 0x9C, 0x78, + 0x7F, 0x08, 0x04, 0x04, 0x78, + 0x00, 0x44, 0x7D, 0x40, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, + 0x7C, 0x08, 0x04, 0x04, 0x78, + 0x38, 0x44, 0x44, 0x44, 0x38, + 0xFC, 0x18, 0x24, 0x24, 0x18, + 0x18, 0x24, 0x24, 0x18, 0xFC, + 0x7C, 0x08, 0x04, 0x04, 0x08, + 0x48, 0x54, 0x54, 0x54, 0x24, + 0x04, 0x04, 0x3F, 0x44, 0x24, + 0x3C, 0x40, 0x40, 0x20, 0x7C, + 0x1C, 0x20, 0x40, 0x20, 0x1C, + 0x3C, 0x40, 0x30, 0x40, 0x3C, + 0x44, 0x28, 0x10, 0x28, 0x44, + 0x4C, 0x90, 0x90, 0x90, 0x7C, + 0x44, 0x64, 0x54, 0x4C, 0x44, + 0x00, 0x08, 0x36, 0x41, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, + 0x3C, 0x26, 0x23, 0x26, 0x3C, + 0x1E, 0xA1, 0xA1, 0x61, 0x12, + 0x3A, 0x40, 0x40, 0x20, 0x7A, + 0x38, 0x54, 0x54, 0x55, 0x59, + 0x21, 0x55, 0x55, 0x79, 0x41, + 0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut + 0x21, 0x55, 0x54, 0x78, 0x40, + 0x20, 0x54, 0x55, 0x79, 0x40, + 0x0C, 0x1E, 0x52, 0x72, 0x12, + 0x39, 0x55, 0x55, 0x55, 0x59, + 0x39, 0x54, 0x54, 0x54, 0x59, + 0x39, 0x55, 0x54, 0x54, 0x58, + 0x00, 0x00, 0x45, 0x7C, 0x41, + 0x00, 0x02, 0x45, 0x7D, 0x42, + 0x00, 0x01, 0x45, 0x7C, 0x40, + 0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut + 0xF0, 0x28, 0x25, 0x28, 0xF0, + 0x7C, 0x54, 0x55, 0x45, 0x00, + 0x20, 0x54, 0x54, 0x7C, 0x54, + 0x7C, 0x0A, 0x09, 0x7F, 0x49, + 0x32, 0x49, 0x49, 0x49, 0x32, + 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut + 0x32, 0x4A, 0x48, 0x48, 0x30, + 0x3A, 0x41, 0x41, 0x21, 0x7A, + 0x3A, 0x42, 0x40, 0x20, 0x78, + 0x00, 0x9D, 0xA0, 0xA0, 0x7D, + 0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut + 0x3D, 0x40, 0x40, 0x40, 0x3D, + 0x3C, 0x24, 0xFF, 0x24, 0x24, + 0x48, 0x7E, 0x49, 0x43, 0x66, + 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, + 0xFF, 0x09, 0x29, 0xF6, 0x20, + 0xC0, 0x88, 0x7E, 0x09, 0x03, + 0x20, 0x54, 0x54, 0x79, 0x41, + 0x00, 0x00, 0x44, 0x7D, 0x41, + 0x30, 0x48, 0x48, 0x4A, 0x32, + 0x38, 0x40, 0x40, 0x22, 0x7A, + 0x00, 0x7A, 0x0A, 0x0A, 0x72, + 0x7D, 0x0D, 0x19, 0x31, 0x7D, + 0x26, 0x29, 0x29, 0x2F, 0x28, + 0x26, 0x29, 0x29, 0x29, 0x26, + 0x30, 0x48, 0x4D, 0x40, 0x20, + 0x38, 0x08, 0x08, 0x08, 0x08, + 0x08, 0x08, 0x08, 0x08, 0x38, + 0x2F, 0x10, 0xC8, 0xAC, 0xBA, + 0x2F, 0x10, 0x28, 0x34, 0xFA, + 0x00, 0x00, 0x7B, 0x00, 0x00, + 0x08, 0x14, 0x2A, 0x14, 0x22, + 0x22, 0x14, 0x2A, 0x14, 0x08, + 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old code + 0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block + 0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block + 0x00, 0x00, 0x00, 0xFF, 0x00, + 0x10, 0x10, 0x10, 0xFF, 0x00, + 0x14, 0x14, 0x14, 0xFF, 0x00, + 0x10, 0x10, 0xFF, 0x00, 0xFF, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x14, 0x14, 0x14, 0xFC, 0x00, + 0x14, 0x14, 0xF7, 0x00, 0xFF, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x14, 0x14, 0xF4, 0x04, 0xFC, + 0x14, 0x14, 0x17, 0x10, 0x1F, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0x1F, 0x00, + 0x10, 0x10, 0x10, 0xF0, 0x00, + 0x00, 0x00, 0x00, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0x1F, 0x10, + 0x10, 0x10, 0x10, 0xF0, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0xFF, 0x10, + 0x00, 0x00, 0x00, 0xFF, 0x14, + 0x00, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x00, 0x1F, 0x10, 0x17, + 0x00, 0x00, 0xFC, 0x04, 0xF4, + 0x14, 0x14, 0x17, 0x10, 0x17, + 0x14, 0x14, 0xF4, 0x04, 0xF4, + 0x00, 0x00, 0xFF, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x14, 0x14, + 0x14, 0x14, 0xF7, 0x00, 0xF7, + 0x14, 0x14, 0x14, 0x17, 0x14, + 0x10, 0x10, 0x1F, 0x10, 0x1F, + 0x14, 0x14, 0x14, 0xF4, 0x14, + 0x10, 0x10, 0xF0, 0x10, 0xF0, + 0x00, 0x00, 0x1F, 0x10, 0x1F, + 0x00, 0x00, 0x00, 0x1F, 0x14, + 0x00, 0x00, 0x00, 0xFC, 0x14, + 0x00, 0x00, 0xF0, 0x10, 0xF0, + 0x10, 0x10, 0xFF, 0x10, 0xFF, + 0x14, 0x14, 0x14, 0xFF, 0x14, + 0x10, 0x10, 0x10, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x10, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, + 0x38, 0x44, 0x44, 0x38, 0x44, + 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta + 0x7E, 0x02, 0x02, 0x06, 0x06, + 0x02, 0x7E, 0x02, 0x7E, 0x02, + 0x63, 0x55, 0x49, 0x41, 0x63, + 0x38, 0x44, 0x44, 0x3C, 0x04, + 0x40, 0x7E, 0x20, 0x1E, 0x20, + 0x06, 0x02, 0x7E, 0x02, 0x02, + 0x99, 0xA5, 0xE7, 0xA5, 0x99, + 0x1C, 0x2A, 0x49, 0x2A, 0x1C, + 0x4C, 0x72, 0x01, 0x72, 0x4C, + 0x30, 0x4A, 0x4D, 0x4D, 0x30, + 0x30, 0x48, 0x78, 0x48, 0x30, + 0xBC, 0x62, 0x5A, 0x46, 0x3D, + 0x3E, 0x49, 0x49, 0x49, 0x00, + 0x7E, 0x01, 0x01, 0x01, 0x7E, + 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, + 0x44, 0x44, 0x5F, 0x44, 0x44, + 0x40, 0x51, 0x4A, 0x44, 0x40, + 0x40, 0x44, 0x4A, 0x51, 0x40, + 0x00, 0x00, 0xFF, 0x01, 0x03, + 0xE0, 0x80, 0xFF, 0x00, 0x00, + 0x08, 0x08, 0x6B, 0x6B, 0x08, + 0x36, 0x12, 0x36, 0x24, 0x36, + 0x06, 0x0F, 0x09, 0x0F, 0x06, + 0x00, 0x00, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x10, 0x10, 0x00, + 0x30, 0x40, 0xFF, 0x01, 0x01, + 0x00, 0x1F, 0x01, 0x01, 0x1E, + 0x00, 0x19, 0x1D, 0x17, 0x12, + 0x00, 0x3C, 0x3C, 0x3C, 0x3C, + 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP +}; +#endif // FONT5X7_H diff --git a/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/gfxfont.h b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/gfxfont.h new file mode 100644 index 0000000..42cfcfc --- /dev/null +++ b/Microcontroller Code/lib/Arduino_GFX-1.0.7/src/gfxfont.h @@ -0,0 +1,31 @@ +// Font structures for newer Adafruit_GFX (1.1 and later). +// Example fonts are included in 'Fonts' directory. +// To use a font in your Arduino sketch, #include the corresponding .h +// file and pass address of GFXfont struct to setFont(). Pass NULL to +// revert to 'classic' fixed-space bitmap font. + +#ifndef _GFXFONT_H_ +#define _GFXFONT_H_ + +/// Font data stored PER GLYPH +typedef struct +{ + uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap + uint8_t width; ///< Bitmap dimensions in pixels + uint8_t height; ///< Bitmap dimensions in pixels + uint8_t xAdvance; ///< Distance to advance cursor (x axis) + int8_t xOffset; ///< X dist from cursor pos to UL corner + int8_t yOffset; ///< Y dist from cursor pos to UL corner +} GFXglyph; + +/// Data stored for FONT AS A WHOLE +typedef struct +{ + uint8_t *bitmap; ///< Glyph bitmaps, concatenated + GFXglyph *glyph; ///< Glyph array + uint8_t first; ///< ASCII extents (first char) + uint8_t last; ///< ASCII extents (last char) + uint8_t yAdvance; ///< Newline distance (y axis) +} GFXfont; + +#endif // _GFXFONT_H_ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/LICENSE b/Microcontroller Code/lib/JPEGDEC-1.2.1/LICENSE new file mode 100644 index 0000000..326e04a --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/LICENSE @@ -0,0 +1,204 @@ +Copyright 2020 BitBank Software, Inc. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 BitBank Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/Makefile b/Microcontroller Code/lib/JPEGDEC-1.2.1/Makefile new file mode 100644 index 0000000..7629f12 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/Makefile @@ -0,0 +1,17 @@ +CFLAGS=-D__LINUX__ -c -Wall -O2 +LIBS = +CXX = g++ + +all: demo + +demo: main.o JPEGDEC.o + $(CXX) main.o JPEGDEC.o $(LIBS) -o demo + +main.o: main.cpp + $(CXX) $(CFLAGS) main.cpp + +JPEGDEC.o: JPEGDEC.cpp + $(CXX) $(CFLAGS) JPEGDEC.cpp + +clean: + rm -rf *.o demo diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/README.md b/Microcontroller Code/lib/JPEGDEC-1.2.1/README.md new file mode 100644 index 0000000..2730737 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/README.md @@ -0,0 +1,63 @@ +JPEGDEC
+----------------------------------- +Copyright (c) 2020 BitBank Software, Inc.
+Written by Larry Bank
+larry@bitbanksoftware.com
+
+**I optimize other people's code for a living. This library is a good example of the kind of work I do for my commercial clients; it contains many unique and clever optimizations that allows it to perform better than anything else available. I'm happy to contribute optimized libraries to the open source community in addition to working on commercial projects. Whatever platform you're using, I can make significant improvements to your native code. Please contact me so that I can show you how.**
+
+![JPEGDEC](/demo.jpg?raw=true "JPEGDEC") +
+I started working with image and video files around 1989 and soon turned my interest into a Document Imaging product based on my own imaging library. Over the years I added support for more and more formats until I had supported all of the standard ones, including DICOM. I sold my Document Imaging business in 1997. I started over with a new library design in 2000 and added even more formats. Over the years, I found uses for my imaging code in projects such as retro gaming. I recently went looking to see if there was a good JPEG viewer for Arduino and only found ones which sacrificed speed to work on MCUs with almost no RAM. I thought it would be possible to create an optimized JPEG decoder that could run on any MCU with at least 20K of RAM, so I started modifying my old JPEG code for this purpose. There are a lot of clever optimizations contained in the code that I kept as trade secrets for many years. I decided that it's time to share the code with the community. This code doesn't look like other JPEG libraries because I wrote it from a "blank sheet". It took many hundreds of hours of work to get it working correctly and find all of the optimizations. If you appreciate my work, please consider sponsoring me. + +
+ +Features:
+---------
+- Supports any MCU with at least 20K of RAM (Cortex-M0+ is the simplest I've tested) +- Optimized for speed; the main limitation will be how fast you can copy the pixels to the display. You can use DMA assisted SPI to help. +- JPEG image data can come from memory (FLASH/RAM), SDCard or any media you provide. +- Simple class and callback design allows you to easily add JPEG support to any application. +- The C code doing the heavy lifting is completely portable and has no external dependencies. +- Includes fast downscaling options (1/2, 1/4, 1/8). +- Includes option to detect and decode the embedded Exif thumbnail +- Supports Baseline Huffman images (grayscale or YCbCr)
+- Includes optional Floyd-Steinberg dithering to 1, 2 or 4-bpp grayscale output; useful for e-paper displays
+ +
+

+ +

+
+ +**A note about performance**
+The chart above gives you an idea of how the code performs on various MCUs with the different scaling options. The test image used is both large in dimension and large in terms of the compressed data size. The two factors that have the most influence on performance are the compressed data size and the output scaling options. This is because the time to decode JPEG data scales mostly linearly with the amount of data to decode. To get the fastest decode speed, choose the lowest acceptable quality for your image; this will produce the smallest compressed data size. When you must use an image that is too large, the scaling options allow you to display it at a lower resolution than the original.
+ +
+

+ +

+
+ +**Floyd-Steinberg dithering**
+I added the option to dither the output to 1, 2 or 4-bit per pixel grayscale using the FS error diffusion algorithm. It creates a pleasant output without visible blocking nor repeating patterns. This seemed useful for generating output suitable for high resolution e-paper displays. The image above was decoded from a 800x600 color JPEG and rendered as 2-bits per pixels (4 gray levels) on a 400x300 4.2" e-paper display. See the Wiki for info on how to use this option. + +Acquiring JPEG files to play: +---------------------------- +You'll notice that the images provided in the test_images folder have been turned into C code. Each byte is now in the form 0xAB so that it can be compiled into your program and stored in FLASH memory alongside your other code. You can use a command line tool called xxd to convert a binary file into this type of text. Make sure to add a const/PROGMEM modifier in front of the JPEG data array to ensure that it gets written to FLASH and not RAM by your build environment. + +The Callback functions: +----------------------- +One of the ways to allow this code to run on any embedded platform was to define a set of callback functions. These isolate the JPEG decoding logic from the display and file I/O. This allows the core code to run on any system, but you need to help it a little. At a minimum, your code must provide a function to draw (or store) each block of image pixels emitted by the library. If you're displaying a JPEG file from memory (RAM or FLASH), this is the only function you need to provide. In the examples folder there are multiple sketches to show how this is done on various display libraries. For reading from SD cards, 4 other functions must be provided: open, close, read, seek. There is an example for implementing these in the examples folder as well. +Note: +If you're using the ESP32 or ESP8266 (or another MCU which uses the Harvard Architecture) and decoding JPEG images stored in RAM or FLASH, you'll need to use the correct open function (openRAM or openFLASH). For MCUs based on the ARM Cortex-M, they are interchangeable. + +The API: +-------- +Please consult the Wiki for detailed info about each method exposed by the JPEGDEC class. + + +If you find this code useful, please consider becoming a sponsor or sending a donation. + +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SR4F44J2UR8S4) + diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/demo.jpg b/Microcontroller Code/lib/JPEGDEC-1.2.1/demo.jpg new file mode 100644 index 0000000..30506b0 Binary files /dev/null and b/Microcontroller Code/lib/JPEGDEC-1.2.1/demo.jpg differ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/ILI9431_t3_slideshow/ILI9431_t3_slideshow.ino b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/ILI9431_t3_slideshow/ILI9431_t3_slideshow.ino new file mode 100644 index 0000000..be548dd --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/ILI9431_t3_slideshow/ILI9431_t3_slideshow.ino @@ -0,0 +1,100 @@ +// A simple image slideshow which reads all the .JPG files from the root +// directory of a SD card and shows each for 1 second on an ILI9341 display. + +#include +#include +#include +#include + +#define TFT_DC 9 +#define TFT_CS 10 + +ILI9341_t3 tft = ILI9341_t3(TFT_CS, TFT_DC); +JPEGDEC jpeg; + +// Setup - initialize ILI9341 display, wait for serial monitor, open SD card +void setup() { + pinMode(34, INPUT_PULLDOWN); + pinMode(33, OUTPUT); + digitalWrite(33, HIGH); // pushbuttons short pins 33 & 34 together + Serial.begin(115200); + tft.begin(); + tft.setRotation(3); + tft.fillScreen(ILI9341_BLACK); + tft.setTextColor(ILI9341_YELLOW); + tft.setTextSize(2); + tft.println("Waiting for Arduino Serial Monitor..."); + + while (!Serial && millis() < 3000); // wait up to 3 seconds for Arduino Serial Monitor + Serial.println("ILI9341 Slideshow"); + tft.fillScreen(ILI9341_BLACK); + tft.setCursor(0, 0); + + while (!SD.begin(BUILTIN_SDCARD)) { + Serial.println("Unable to access SD Card"); + tft.println("Unable to access SD Card"); + delay(1000); + } +} + +// Functions to access a file on the SD card +File myfile; + +void * myOpen(const char *filename, int32_t *size) { + myfile = SD.open(filename); + *size = myfile.size(); + return &myfile; +} +void myClose(void *handle) { + if (myfile) myfile.close(); +} +int32_t myRead(JPEGFILE *handle, uint8_t *buffer, int32_t length) { + if (!myfile) return 0; + return myfile.read(buffer, length); +} +int32_t mySeek(JPEGFILE *handle, int32_t position) { + if (!myfile) return 0; + return myfile.seek(position); +} + +// Function to draw pixels to the display +void JPEGDraw(JPEGDRAW *pDraw) { + //Serial.printf("jpeg draw: x,y=%d,%d, cx,cy = %d,%d\n", + //pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); + tft.writeRect(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight, pDraw->pPixels); +} + +// Main loop, scan for all .JPG files on the card and display them +void loop() { + int filecount = 0; + tft.setCursor(0, 0); + File dir = SD.open("/"); + while (true) { + File entry = dir.openNextFile(); + if (!entry) break; + if (entry.isDirectory() == false) { + const char *name = entry.name(); + const int len = strlen(name); + if (len > 3 && strcmp(name + len - 3, "JPG") == 0) { + Serial.print("File: "); + Serial.println(name); + tft.print("File: "); + tft.println(name); + jpeg.open((const char *)name, myOpen, myClose, myRead, mySeek, JPEGDraw); + jpeg.decode(0, 0, 0); + jpeg.close(); + filecount = filecount + 1; + if (digitalRead(34) == LOW) { + // skip delay between images when pushbutton is pressed + delay(1000); + } + } + } + entry.close(); + } + if (filecount == 0) { + Serial.println("No .JPG files found"); + tft.println("No .JPG files found"); + delay(2000); + } +} diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/adafruit_gfx_demo.ino b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/adafruit_gfx_demo.ino new file mode 100644 index 0000000..253b2f0 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/adafruit_gfx_demo.ino @@ -0,0 +1,71 @@ +// JPEGDEC example for Adafruit GFX displays + +#include +// Sample image (truncated) containing a 320x240 Exif thumbnail +#include "thumb_test.h" + +#include "SPI.h" +#include "Adafruit_GFX.h" +#include "Adafruit_ILI9341.h" + +#define DISPLAY_WIDTH 320 +#define DISPLAY_HEIGHT 240 + +// PyPortal-specific pins +#define SD_CS 32 // SD card select +#define TFT_D0 34 // Data bit 0 pin (MUST be on PORT byte boundary) +#define TFT_WR 26 // Write-strobe pin (CCL-inverted timer output) +#define TFT_DC 10 // Data/command pin +#define TFT_CS 11 // Chip-select pin +#define TFT_RST 24 // Reset pin +#define TFT_RD 9 // Read-strobe pin +#define TFT_BACKLIGHT 25 // Backlight enable (active high) + +Adafruit_ILI9341 tft(tft8bitbus, TFT_D0, TFT_WR, TFT_DC, TFT_CS, TFT_RST, TFT_RD); +JPEGDEC jpeg; + +void JPEGDraw(JPEGDRAW *pDraw) +{ +// Serial.printf("jpeg draw: x,y=%d,%d, cx,cy = %d,%d\n", pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); +// Serial.printf("Pixel 0 = 0x%04x\n", pDraw->pPixels[0]); + tft.dmaWait(); // Wait for prior writePixels() to finish + tft.setAddrWindow(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); + tft.writePixels(pDraw->pPixels, pDraw->iWidth * pDraw->iHeight, true, false); // Use DMA, big-endian +} /* JPEGDraw() */ + +void setup() { + Serial.begin(115200); + //while (!Serial); + Serial.println("Starting..."); + pinMode(TFT_BACKLIGHT, OUTPUT); + digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on + + // put your setup code here, to run once: + tft.begin(); + tft.setRotation(3); // PyPortal native orientation +} /* setup() */ + +void loop() { +int i; +long lTime; +int iOption[4] = {0, JPEG_SCALE_HALF, JPEG_SCALE_QUARTER, JPEG_SCALE_EIGHTH}; +int iCenterX[4] = {0,80,120,140}; +int iCenterY[4] = {0,60,90,105}; + + for (i=0; i<4; i++) + { + tft.fillScreen(ILI9341_BLACK); + tft.startWrite(); // Not sharing TFT bus on PyPortal, just CS once and leave it + if (jpeg.openFLASH((uint8_t *)thumb_test, sizeof(thumb_test), JPEGDraw)) + { + lTime = micros(); + if (jpeg.decode(iCenterX[i],iCenterY[i],JPEG_EXIF_THUMBNAIL | iOption[i])) + { + lTime = micros() - lTime; + Serial.printf("%d x %d image, decode time = %d us\n", jpeg.getWidth() >> i, jpeg.getHeight() >> i, (int)lTime); + } + jpeg.close(); + } + delay(2000); // pause between images + } // for i +} /* loop() */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/thumb_test.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/thumb_test.h new file mode 100644 index 0000000..0b43b00 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/adafruit_gfx_demo/thumb_test.h @@ -0,0 +1,1286 @@ +// +// thumb_test +// +const uint8_t thumb_test[] PROGMEM = { 0xff,0xd8,0xff,0xe1,0x1e,0x28,0x45,0x78,0x69,0x66,0x00,0x00,0x4d,0x4d,0x00,0x2a, + 0x00,0x00,0x00,0x08,0x00,0x0d,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x0f,0xc0, + 0x00,0x00,0x01,0x01,0x00,0x03,0x00,0x00,0x00,0x01,0x0b,0xd0,0x00,0x00,0x01,0x0f, + 0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xaa,0x01,0x10,0x00,0x02,0x00,0x00, + 0x00,0x0a,0x00,0x00,0x00,0xb2,0x01,0x12,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x06, + 0x00,0x00,0x01,0x1a,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xbc,0x01,0x1b, + 0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xc4,0x01,0x28,0x00,0x03,0x00,0x00, + 0x00,0x01,0x00,0x02,0x00,0x00,0x01,0x31,0x00,0x02,0x00,0x00,0x00,0x0f,0x00,0x00, + 0x00,0xcc,0x01,0x32,0x00,0x02,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xdc,0x02,0x13, + 0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x87,0x69,0x00,0x04,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0xf0,0x88,0x25,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00, + 0x03,0x20,0x00,0x00,0x03,0x26,0x73,0x61,0x6d,0x73,0x75,0x6e,0x67,0x00,0x53,0x4d, + 0x2d,0x47,0x39,0x36,0x35,0x55,0x31,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x47,0x39,0x36,0x35,0x55,0x31,0x55,0x45, + 0x53,0x37,0x44,0x54,0x45,0x31,0x00,0x00,0x32,0x30,0x32,0x30,0x3a,0x30,0x38,0x3a, + 0x30,0x39,0x20,0x31,0x34,0x3a,0x34,0x32,0x3a,0x31,0x33,0x00,0x00,0x1f,0x82,0x9a, + 0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x6a,0x82,0x9d,0x00,0x05,0x00,0x00, + 0x00,0x01,0x00,0x00,0x02,0x72,0x88,0x22,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x02, + 0x00,0x00,0x88,0x27,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0xfa,0x00,0x00,0x90,0x00, + 0x00,0x07,0x00,0x00,0x00,0x04,0x30,0x32,0x32,0x30,0x90,0x03,0x00,0x02,0x00,0x00, + 0x00,0x14,0x00,0x00,0x02,0x7a,0x90,0x04,0x00,0x02,0x00,0x00,0x00,0x14,0x00,0x00, + 0x02,0x8e,0x91,0x01,0x00,0x07,0x00,0x00,0x00,0x04,0x01,0x02,0x03,0x00,0x92,0x01, + 0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0xa2,0x92,0x02,0x00,0x05,0x00,0x00, + 0x00,0x01,0x00,0x00,0x02,0xaa,0x92,0x03,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00, + 0x02,0xb2,0x92,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0xba,0x92,0x05, + 0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0xc2,0x92,0x07,0x00,0x03,0x00,0x00, + 0x00,0x01,0x00,0x02,0x00,0x00,0x92,0x09,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x92,0x0a,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0xca,0x92,0x90, + 0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x02,0xd2,0x92,0x91,0x00,0x02,0x00,0x00, + 0x00,0x07,0x00,0x00,0x02,0xda,0x92,0x92,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00, + 0x02,0xe2,0xa0,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x30,0x31,0x30,0x30,0xa0,0x01, + 0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0xa0,0x02,0x00,0x04,0x00,0x00, + 0x00,0x01,0x00,0x00,0x0f,0xc0,0xa0,0x03,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00, + 0x0b,0xd0,0xa0,0x05,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x02,0xa2,0x17, + 0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0xa3,0x01,0x00,0x01,0x00,0x00, + 0x00,0x01,0x01,0x00,0x00,0x00,0xa4,0x02,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0xa4,0x03,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0xa4,0x05, + 0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x1a,0x00,0x00,0xa4,0x06,0x00,0x03,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0x00,0xa4,0x20,0x00,0x02,0x00,0x00,0x00,0x18,0x00,0x00, + 0x02,0xea,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3c,0x00,0x00, + 0x00,0xf0,0x00,0x00,0x00,0x64,0x32,0x30,0x32,0x30,0x3a,0x30,0x38,0x3a,0x30,0x39, + 0x20,0x31,0x34,0x3a,0x34,0x32,0x3a,0x31,0x33,0x00,0x32,0x30,0x32,0x30,0x3a,0x30, + 0x38,0x3a,0x30,0x39,0x20,0x31,0x34,0x3a,0x34,0x32,0x3a,0x31,0x33,0x00,0x00,0x00, + 0x17,0x12,0x00,0x00,0x03,0xe8,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x64,0x00,0x00, + 0x00,0xa6,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00, + 0x00,0x74,0x00,0x00,0x00,0x64,0x00,0x00,0x10,0xcc,0x00,0x00,0x03,0xe8,0x38,0x37, + 0x35,0x37,0x31,0x39,0x00,0x00,0x38,0x37,0x35,0x37,0x31,0x39,0x00,0x00,0x38,0x37, + 0x35,0x37,0x31,0x39,0x00,0x00,0x49,0x31,0x32,0x51,0x53,0x4b,0x46,0x30,0x36,0x56, + 0x4d,0x20,0x49,0x31,0x32,0x51,0x53,0x4b,0x4c,0x30,0x31,0x56,0x41,0x00,0x00,0x02, + 0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x04,0x52,0x39,0x38,0x00,0x00,0x02,0x00,0x07, + 0x00,0x00,0x00,0x04,0x30,0x31,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x40, + 0x01,0x01,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xf0,0x01,0x03,0x00,0x03, + 0x00,0x00,0x00,0x01,0x00,0x06,0x00,0x00,0x01,0x12,0x00,0x03,0x00,0x00,0x00,0x01, + 0x00,0x06,0x00,0x00,0x01,0x1a,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x98, + 0x01,0x1b,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0xa0,0x01,0x28,0x00,0x03, + 0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x02,0x01,0x00,0x04,0x00,0x00,0x00,0x01, + 0x00,0x00,0x03,0xa8,0x02,0x02,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x1a,0x78, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48, + 0x00,0x00,0x00,0x01,0xff,0xd8,0xff,0xdb,0x00,0x84,0x00,0x17,0x10,0x11,0x14,0x11, + 0x0e,0x17,0x14,0x13,0x14,0x1a,0x18,0x17,0x1b,0x22,0x39,0x25,0x22,0x1f,0x1f,0x22, + 0x46,0x32,0x35,0x29,0x39,0x53,0x49,0x57,0x56,0x51,0x49,0x50,0x4f,0x5b,0x67,0x83, + 0x6f,0x5b,0x61,0x7c,0x63,0x4f,0x50,0x72,0x9c,0x74,0x7c,0x88,0x8c,0x93,0x95,0x93, + 0x59,0x6e,0xa1,0xad,0xa0,0x8f,0xab,0x83,0x90,0x93,0x8d,0x01,0x18,0x1a,0x1a,0x22, + 0x1e,0x22,0x43,0x25,0x25,0x43,0x8d,0x5e,0x50,0x5e,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, + 0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0xff,0xc0,0x00,0x11, + 0x08,0x00,0xf0,0x01,0x40,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xff, + 0xc4,0x01,0xa2,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b, + 0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05,0x05,0x04,0x04,0x00,0x00,0x01, + 0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61, + 0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1, + 0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, + 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, + 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88, + 0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6, + 0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4, + 0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, + 0xf8,0xf9,0xfa,0x01,0x00,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b, + 0x11,0x00,0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02, + 0x77,0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61, + 0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52, + 0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a, + 0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47, + 0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67, + 0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86, + 0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4, + 0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2, + 0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9, + 0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, + 0xf8,0xf9,0xfa,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f, + 0x00,0xe4,0xe8,0xa0,0x0c,0xf4,0xa9,0xa3,0x87,0x72,0x96,0x3d,0xa8,0x02,0x20,0x09, + 0x35,0x32,0x42,0x4f,0xde,0x38,0xa7,0x46,0xb8,0xed,0x53,0xaa,0xd2,0x00,0x8e,0x35, + 0x5e,0x82,0xa6,0x51,0x48,0xab,0x52,0xaa,0xd0,0x00,0xa2,0xa3,0x9d,0x70,0x41,0x20, + 0x91,0x8e,0x82,0xac,0x2a,0xd2,0xc9,0x19,0x29,0xf2,0xfd,0xe1,0xc8,0xa1,0x3b,0x31, + 0x34,0x67,0x32,0x81,0x27,0x00,0x81,0x8e,0x86,0x96,0x9f,0x26,0xe2,0xe4,0xc9,0x9d, + 0xc7,0xae,0x69,0x95,0xd7,0x15,0x64,0x73,0xb7,0x76,0x32,0x53,0x85,0x3e,0xf5,0x00, + 0x5f,0x5a,0x7c,0xc4,0xee,0xc5,0x47,0x5c,0xf3,0x77,0x67,0x44,0x55,0x90,0xed,0xc0, + 0x74,0xa4,0x27,0x34,0x94,0x54,0x0c,0x28,0xa2,0x8a,0x00,0x2a,0x68,0x46,0xd1,0xb8, + 0xd4,0x20,0x64,0xe2,0xae,0x42,0x22,0xda,0x44,0x85,0x87,0xa6,0x06,0x6a,0x92,0x6f, + 0x61,0x37,0x61,0x73,0x91,0xc7,0x35,0x13,0xf5,0xdc,0xc3,0x1f,0xad,0x5a,0xf2,0xa3, + 0xc0,0x11,0xce,0xbc,0x76,0x3c,0x7f,0x3e,0x29,0xaf,0x6d,0x29,0x19,0x1c,0x81,0xdc, + 0x00,0x47,0xe9,0x51,0x66,0xb7,0x1d,0xd3,0x21,0x8c,0x82,0x38,0x39,0xc7,0xbe,0x6a, + 0xb4,0xed,0xba,0x53,0xe8,0x38,0xab,0x25,0x7c,0x88,0xd8,0x9e,0xbd,0x6a,0x90,0xe4, + 0xd3,0x40,0x4b,0x08,0xe6,0xad,0x2d,0x41,0x18,0xc0,0xa9,0x94,0xd0,0xc0,0x94,0x1a, + 0x5c,0xd3,0x01,0xa3,0x34,0x80,0x76,0x68,0xcd,0x37,0x34,0x99,0xa0,0x07,0xe6,0x93, + 0x34,0xdc,0xd2,0x66,0x80,0x1d,0x9a,0x4c,0xd2,0x66,0x93,0x34,0x00,0xec,0xd2,0x66, + 0x9b,0x9a,0x33,0x40,0xc5,0xcd,0x19,0xa6,0xe6,0x93,0x34,0x00,0xec,0xd2,0x66,0x9b, + 0x9a,0x33,0x40,0x0e,0xcd,0x19,0xa6,0xe6,0x93,0x34,0x00,0xc5,0x50,0x3a,0x54,0xe3, + 0xe5,0xb7,0x3e,0xe6,0xa3,0x41,0x52,0xb8,0xc4,0x6a,0x29,0x88,0x48,0xd7,0x8a,0x99, + 0x45,0x35,0x05,0x4a,0xa2,0x81,0x8e,0x51,0x52,0xa8,0xa6,0xad,0x48,0xb4,0x80,0x7a, + 0x8a,0x76,0x29,0x05,0x2d,0x02,0x22,0x92,0x14,0x72,0x0b,0x0e,0x47,0x43,0x50,0x3c, + 0xa1,0x3e,0x59,0x6d,0x91,0xc0,0xee,0x38,0x3f,0xa5,0x5b,0x34,0xc2,0xa1,0xba,0x8c, + 0xd3,0x4d,0xa1,0x35,0x72,0x91,0x6b,0x57,0xed,0x2c,0x7f,0x5e,0x45,0x30,0xdb,0x46, + 0xfc,0xa4,0x88,0x7e,0xbc,0x55,0xa7,0x81,0x0f,0x6c,0x54,0x1e,0x57,0x96,0x18,0x2e, + 0x30,0xdd,0x73,0x4e,0xe1,0xa9,0x03,0x59,0xb8,0xe4,0x29,0x23,0xd5,0x79,0xa8,0x8c, + 0x24,0x77,0xfc,0xea,0x42,0x25,0x43,0x90,0xd9,0xa3,0xed,0x33,0x0e,0x1f,0xe6,0xfa, + 0xd0,0x17,0x64,0x25,0x18,0x76,0xa6,0xd4,0xfe,0x7a,0x1f,0xbd,0x1e,0x3e,0x94,0x6e, + 0x8d,0xba,0x31,0x1f,0x5a,0x02,0xe4,0x51,0x8f,0x9b,0x35,0x2e,0x68,0xda,0x07,0x42, + 0x0d,0x37,0x70,0x3d,0x0d,0x6b,0x0d,0x11,0x9c,0xb5,0x1d,0x9a,0x37,0x32,0xe0,0xf2, + 0x3d,0xe8,0x52,0x37,0x0c,0xf4,0xa5,0x76,0xf9,0x58,0x33,0x03,0x9e,0x94,0xe5,0x2b, + 0x3b,0x02,0x88,0xdb,0x89,0x9d,0xe3,0x08,0xce,0xcc,0x09,0xee,0x73,0x55,0xd4,0x64, + 0xd2,0xb9,0xc9,0xfa,0x52,0xa0,0xac,0xa4,0xf5,0x2d,0x6c,0x4c,0xb5,0x20,0xa8,0xd6, + 0x9d,0x50,0x50,0xfc,0xd1,0x9a,0x6d,0x2d,0x00,0x2e,0x68,0xcd,0x25,0x14,0x00,0x66, + 0x8c,0xd1,0x82,0x7a,0x0a,0x70,0x8d,0xcf,0x45,0x34,0x00,0xcc,0xd1,0x52,0x8b,0x79, + 0x0f,0x6a,0x78,0xb2,0x90,0xf6,0xfd,0x28,0x02,0xb5,0x15,0x75,0x74,0xf6,0x3d,0x73, + 0x52,0x2e,0x9e,0x3b,0x91,0x40,0x19,0xb4,0x60,0x9e,0x80,0xd6,0xb2,0xd9,0x46,0x3a, + 0xfe,0x94,0xf1,0x6f,0x1a,0xf6,0xfc,0x69,0x85,0xcc,0x81,0x1b,0x9f,0xe1,0x34,0xe1, + 0x03,0x9e,0xd5,0xad,0xe5,0xa0,0xfe,0x11,0x4a,0x00,0xec,0x00,0xa0,0x2e,0x65,0x0b, + 0x49,0x0f,0x6a,0x91,0x2c,0x58,0xf5,0xfe,0x75,0xa2,0x69,0xa7,0x27,0xa9,0x3f,0x4a, + 0x02,0xe6,0x30,0x38,0x35,0x2c,0x87,0xe6,0x0b,0xe8,0x2a,0x1c,0xa9,0x20,0xd2,0x97, + 0x05,0xc9,0xcf,0x5a,0x00,0xb0,0xb5,0x2a,0xd5,0x55,0x71,0xeb,0x52,0x2c,0x9e,0xf4, + 0x01,0x65,0x6a,0x45,0x35,0x59,0x64,0xa9,0x16,0x5a,0x40,0x59,0x06,0x97,0x35,0x5c, + 0x4a,0x29,0x7c,0xd1,0xeb,0x40,0x12,0x93,0x40,0xa8,0x7c,0xd0,0x6a,0x45,0x39,0x5a, + 0x00,0x47,0x3c,0x54,0x0d,0x52,0x48,0xd5,0x0b,0x1a,0x00,0x6b,0x54,0x4c,0x33,0x4f, + 0x26,0x9a,0x68,0x02,0x26,0x8c,0x1e,0xd4,0xcd,0x85,0x4e,0x54,0xd4,0xd4,0x6c,0x27, + 0xa0,0x26,0x98,0x15,0x4a,0xb0,0x39,0x14,0xd2,0x08,0xab,0xc2,0xda,0x46,0xe8,0x86, + 0xa4,0x5d,0x36,0x66,0xfe,0x1c,0x0a,0x00,0xcd,0x0c,0xc3,0xbd,0x1b,0xc9,0xad,0x65, + 0xd1,0xd8,0xfd,0xe6,0xa9,0x57,0x47,0x84,0x7d,0xe3,0x9f,0xc6,0x9d,0xc4,0x61,0xf7, + 0xa9,0x91,0x4e,0x38,0x15,0xba,0x9a,0x75,0xb2,0x7f,0x08,0xfa,0xe2,0xa6,0x5b,0x78, + 0x97,0x8d,0x9d,0x29,0x01,0x84,0xb1,0x39,0xe8,0xa6,0xa5,0x5b,0x59,0x5b,0xf8,0x6b, + 0x68,0x22,0x8e,0x40,0x1f,0x5c,0x53,0xbe,0x9d,0x7d,0xe8,0x03,0x21,0x6c,0x25,0x35, + 0x2a,0xe9,0xad,0xfc,0x47,0x15,0xa4,0x08,0x6e,0x0f,0x06,0x9b,0x9c,0x70,0x68,0x02, + 0xa2,0xe9,0xc8,0x3a,0x9a,0x91,0x6c,0xa2,0x1f,0x5a,0xb0,0x0f,0xaf,0xe6,0x28,0x34, + 0x01,0x18,0x82,0x31,0xfc,0x34,0xed,0x88,0x3f,0x84,0x52,0xe6,0x9a,0xc7,0x8e,0x28, + 0x10,0xa4,0xe3,0x8e,0x28,0x07,0xeb,0xf4,0xa8,0x3c,0xd0,0x4e,0x2a,0x45,0xe4,0x71, + 0x40,0xc7,0x73,0xcf,0xa7,0xa5,0x07,0xa6,0x7a,0x8f,0x5a,0x06,0x09,0xc6,0xfc,0x1f, + 0x7a,0x4c,0x95,0x3d,0x28,0x00,0x3e,0xa4,0x63,0xde,0x93,0xa0,0xe3,0xf5,0xa3,0x9e, + 0xdc,0x7b,0x50,0x06,0x3a,0x1e,0x68,0x00,0xce,0x3a,0x7c,0xa7,0xd0,0xd2,0x12,0x0f, + 0x4a,0x31,0xea,0x29,0x0f,0xb7,0x5a,0x00,0x4c,0x60,0xf3,0x4b,0xd4,0x62,0x8f,0xaf, + 0x22,0x93,0xe9,0x92,0x28,0x03,0x9f,0x2d,0x4d,0xcd,0x3c,0xc6,0x47,0x26,0x90,0x29, + 0x3d,0xa9,0x8c,0x4c,0xd3,0x83,0x53,0x4f,0x06,0x81,0x40,0x8b,0x2b,0x9c,0x53,0xb2, + 0x6a,0x21,0x27,0xb5,0x28,0x93,0x27,0x81,0x48,0x09,0x77,0x1f,0x5a,0x4d,0xc6,0xaf, + 0x43,0xa6,0x3b,0xa0,0x67,0x60,0xb9,0xe7,0x15,0x3a,0x69,0x90,0x8f,0xbc,0xc4,0xd0, + 0x06,0x6c,0x44,0x96,0xab,0xa0,0xe1,0x6a,0xe2,0x5a,0x40,0x9d,0x13,0xf3,0xa9,0x02, + 0x22,0xf0,0x11,0x47,0xe1,0x40,0x19,0x66,0x37,0x73,0xf2,0xa9,0xa5,0x5b,0x19,0x9f, + 0xb6,0x2b,0x57,0x24,0x0c,0x8f,0xca,0x94,0x1d,0xe3,0x23,0xa8,0xed,0x45,0x87,0x73, + 0x35,0x74,0xc6,0xfe,0x26,0x02,0xa4,0x5d,0x3a,0x25,0xfb,0xc4,0x9a,0xba,0x47,0xff, + 0x00,0xaa,0x90,0x9c,0x0e,0x7f,0x03,0x40,0x88,0x16,0xd6,0x05,0xe8,0x99,0xa9,0x04, + 0x48,0xbd,0x10,0x52,0x6f,0xf9,0xb0,0x3f,0x2a,0x90,0x7f,0x9f,0x6a,0x00,0x40,0x00, + 0xe4,0x74,0xf6,0xe2,0x8e,0x73,0xd6,0x97,0x1d,0xe8,0xc6,0x69,0x80,0xd2,0x71,0x48, + 0x0e,0x6a,0xb5,0xc5,0xca,0x47,0x2e,0xc0,0xe3,0x77,0x71,0x9a,0x9e,0x16,0x0c,0x01, + 0xe7,0x9e,0x86,0x90,0x0f,0xc7,0x6a,0x5f,0xf2,0x29,0x70,0x7d,0x31,0xf5,0xa3,0x1e, + 0xf4,0xc0,0x6e,0x3f,0x0a,0x0f,0xbd,0x2f,0x43,0xc8,0xfc,0x69,0x0e,0x00,0xc9,0x3f, + 0x8d,0x00,0x43,0x70,0xe1,0x13,0x73,0x1c,0x7b,0xd4,0x31,0x4f,0xe6,0x1f,0x5a,0xcd, + 0xd5,0x99,0xde,0xeb,0x68,0x3b,0x95,0x47,0x18,0xa9,0x74,0x72,0xde,0x63,0x2e,0x38, + 0x1c,0xd2,0x03,0x5d,0x41,0xc7,0x50,0x05,0x38,0x0f,0x6f,0xc2,0x98,0x5b,0x61,0xce, + 0xc0,0x45,0x28,0x64,0x3d,0x10,0x50,0x02,0x90,0x3b,0x11,0x54,0x35,0x1b,0xcf,0xb3, + 0xc5,0x84,0x1f,0x31,0x38,0x19,0xed,0x57,0xb7,0xec,0x3b,0x5a,0x35,0xc7,0xa8,0xaa, + 0x57,0xd6,0x8b,0x70,0x41,0x24,0xa1,0x1c,0x02,0x46,0x41,0xfa,0xd3,0x03,0x36,0xd2, + 0xe1,0xe4,0xb8,0x0a,0xe7,0x3b,0xab,0x6d,0x71,0xc0,0x3f,0x9d,0x67,0x5a,0xe9,0xc6, + 0x29,0x83,0xb9,0x0d,0x83,0xc0,0x4e,0x95,0xa5,0x8e,0x06,0x40,0x3c,0x74,0xa0,0x00, + 0xaf,0xa8,0xa0,0x64,0x0c,0x67,0x23,0xde,0x80,0x48,0x1e,0xab,0xef,0x4a,0x46,0x79, + 0x1c,0x8f,0xe5,0x48,0x04,0xa4,0x34,0xa7,0x81,0xde,0x93,0xaf,0x7a,0x00,0x4e,0xbd, + 0xe8,0xa5,0xc5,0x21,0xa0,0x02,0x93,0xa7,0x3c,0xfd,0x45,0x2f,0xf9,0xff,0x00,0x3e, + 0xb4,0x87,0x9a,0x00,0xc3,0x77,0x14,0xdd,0xf8,0x07,0x15,0x16,0xe3,0x49,0x92,0x69, + 0x8c,0x52,0x79,0xa2,0x95,0x63,0x77,0xce,0xd5,0x24,0x0e,0xb4,0xe1,0x18,0xc7,0x27, + 0x14,0x00,0x8b,0x92,0x70,0x2a,0x78,0x53,0x32,0xa2,0xf5,0x24,0x81,0x4d,0x1c,0x0c, + 0x0f,0xce,0xac,0x59,0x2e,0x6f,0x21,0x1f,0xed,0x8a,0x40,0x74,0x2c,0xbc,0x9a,0x4c, + 0x7e,0x74,0xa4,0xf3,0x49,0x9a,0x04,0x28,0xc6,0x3d,0xbf,0x95,0x27,0x5f,0xf0,0xa4, + 0xef,0xef,0xfc,0xe9,0x0f,0x34,0x00,0xbc,0x8e,0x47,0x4f,0x4a,0x69,0x1c,0xe4,0x64, + 0x1f,0x5a,0x5c,0xff,0x00,0x9f,0x5a,0x3a,0x8c,0x8a,0x00,0x50,0x77,0x7a,0x06,0xf4, + 0xaa,0x9a,0x85,0xe0,0xb3,0x8b,0x3b,0x77,0x33,0x1c,0x00,0x6a,0xc9,0xe4,0x8a,0xa7, + 0xa9,0x5a,0x9b,0x98,0xc6,0xde,0x59,0x4e,0x70,0x69,0x81,0x52,0xc2,0xed,0xae,0x2e, + 0x36,0x9e,0x0f,0x5a,0xd9,0x5f,0xbb,0xc6,0x3f,0x3a,0xcd,0xd3,0x2c,0x0d,0xbb,0xb4, + 0x92,0xe3,0x71,0x18,0x00,0x76,0x15,0xa1,0x81,0xd8,0xd0,0x03,0x87,0x1e,0x98,0xa8, + 0xee,0x49,0x11,0x31,0x8c,0xf3,0x8e,0xd4,0xe0,0x40,0xe3,0x6f,0x3e,0xf4,0xbb,0xc9, + 0x04,0x64,0x8f,0x61,0xc5,0x00,0x72,0x9b,0x1f,0x7f,0xab,0x13,0xeb,0xc9,0x35,0xd2, + 0xc2,0x36,0x40,0x81,0xfa,0x80,0x01,0x23,0xd6,0x9f,0xe4,0x44,0xcf,0xbb,0x0b,0xbf, + 0xd7,0x60,0xcf,0xe7,0x4e,0x23,0x03,0x03,0x8c,0x50,0x03,0x4a,0x81,0xd4,0xb6,0x3d, + 0x45,0x18,0x00,0xe0,0xee,0xfc,0x4d,0x03,0x23,0xfc,0x29,0x78,0xc7,0x1c,0xaf,0xa7, + 0xa5,0x20,0x10,0x8c,0x75,0x1f,0x91,0xa4,0xe0,0x73,0xc7,0xd7,0x14,0xec,0x52,0x63, + 0xd3,0xf2,0xf5,0xa6,0x05,0x79,0x6d,0x23,0x9c,0x8f,0x35,0x50,0x91,0xd3,0xb7,0x1f, + 0x51,0x52,0x45,0x02,0xc0,0x81,0x10,0x2a,0x01,0xc8,0x51,0xc8,0x34,0xfe,0xdc,0x74, + 0xf4,0x3d,0xa8,0xe8,0x3a,0x64,0x50,0x01,0x9c,0xf6,0xc1,0xa6,0x91,0xea,0x3f,0x11, + 0x4f,0xed,0x91,0xcd,0x20,0xa0,0x04,0x04,0xff,0x00,0xbc,0x3f,0x5a,0x00,0xc0,0xca, + 0xf2,0x3b,0xad,0x29,0x5f,0x4f,0xd2,0x93,0x9e,0xe0,0x9f,0x71,0xd6,0x90,0x0b,0x9d, + 0xc3,0x20,0xe7,0xf9,0x8a,0x6e,0x73,0xf5,0xfe,0x74,0xa5,0x4e,0x72,0x3a,0xfa,0xd1, + 0xd7,0x20,0xf0,0xde,0x9e,0xb4,0x00,0x9c,0x73,0xeb,0xde,0x9b,0x8c,0x72,0xbc,0x53, + 0x8f,0xbf,0x6a,0x4f,0xf3,0xfe,0x7d,0x28,0x00,0x52,0x09,0xc7,0x46,0xf4,0xa0,0x8c, + 0x7e,0x14,0x84,0x03,0xfe,0x71,0x8f,0xf0,0xa0,0x31,0x1c,0x37,0x20,0x77,0xee,0x28, + 0x00,0xa4,0x34,0xe2,0x3b,0x8e,0x9f,0xe7,0xf2,0xa6,0xff,0x00,0x4f,0xf3,0xf8,0x50, + 0x00,0x69,0x3f,0xad,0x2d,0x21,0x00,0xf0,0x7f,0x2a,0x00,0xc2,0x74,0xd8,0xd8,0xc7, + 0xe9,0x4d,0x15,0x79,0xa2,0x57,0x1b,0x76,0xfd,0x08,0xaa,0xf3,0x40,0xd0,0xb0,0x0c, + 0x31,0x9a,0x0b,0x68,0x8c,0x12,0x07,0x14,0xaa,0x41,0xeb,0x40,0x14,0xa0,0x0a,0x09, + 0x0c,0xf3,0xc5,0x5b,0xd3,0x06,0xeb,0xf8,0xbd,0x89,0x3f,0xa5,0x55,0x15,0x77,0x48, + 0x5c,0xde,0x83,0xe8,0xa4,0xd0,0x06,0xcb,0x52,0x70,0x7f,0x1a,0x53,0x49,0xef,0xd8, + 0xd0,0x20,0x34,0x75,0xfa,0xd1,0x49,0xd6,0x80,0x0c,0x51,0xdf,0xfc,0xf3,0x40,0x39, + 0xe0,0xf5,0xa3,0x93,0xf2,0x9e,0xbd,0x8f,0xad,0x00,0x06,0x80,0x48,0xe9,0x47,0xb1, + 0xeb,0x46,0xd6,0x3d,0x06,0x7e,0x94,0x00,0xbd,0xbd,0xe9,0xa7,0xae,0x45,0x4a,0xb1, + 0x39,0xf4,0x1f,0x8d,0x3c,0x5b,0xb1,0xff,0x00,0xf5,0x1a,0x60,0x57,0xeb,0xdb,0xea, + 0x29,0x4a,0xd5,0x91,0x6a,0xde,0x8d,0xf9,0x52,0xfd,0x9d,0x47,0x52,0x3f,0x16,0x14, + 0x01,0x50,0xaf,0xff,0x00,0x58,0xd2,0x83,0xeb,0xd6,0xad,0x08,0xa3,0x1f,0xc4,0xbf, + 0x9e,0x69,0xac,0xd6,0xa9,0xf7,0xa5,0x41,0xfa,0x7f,0x3a,0x00,0xaf,0x8a,0x36,0x1c, + 0xe4,0x53,0xda,0xfa,0xc5,0x3a,0xcc,0x0f,0xd3,0x15,0x13,0xeb,0x36,0x29,0xd0,0xb3, + 0x7e,0x26,0x80,0x1f,0xe5,0xb7,0xf7,0x4f,0xd2,0x97,0xc9,0x3e,0xd5,0x51,0xfc,0x41, + 0x6c,0x3e,0xe4,0x39,0xfa,0x8a,0x85,0xfc,0x48,0xdf,0xf2,0xce,0x10,0xb4,0x01,0xa4, + 0x20,0x27,0xff,0x00,0xac,0x29,0xe2,0xd9,0x8f,0x66,0xfc,0xab,0x09,0xfc,0x43,0x74, + 0xdd,0x36,0xaf,0xd0,0x54,0x0f,0xac,0x5e,0xbf,0x59,0x4f,0xe5,0x40,0x1d,0x2f,0xd9, + 0x71,0xd4,0x63,0xea,0x68,0x30,0xa2,0xf2,0xce,0x83,0xea,0x6b,0x93,0x6b,0xdb,0xa7, + 0xeb,0x2b,0xff,0x00,0xdf,0x46,0xa2,0x69,0x24,0x27,0x25,0xbf,0x5a,0x2c,0x07,0x5c, + 0x65,0xb4,0x4f,0xbd,0x73,0x18,0xf6,0x15,0x13,0x6a,0x1a,0x7a,0x75,0x99,0x8f,0xd1, + 0x6b,0x94,0x3b,0x8f,0x7a,0x4e,0x7d,0x69,0xd8,0x0e,0x9d,0xb5,0x9b,0x15,0x38,0x0b, + 0x2b,0x7d,0x0f,0xff,0x00,0x5e,0xa5,0x9b,0x6c,0xaa,0x92,0x21,0x38,0x61,0x95,0xfa, + 0x1a,0xe4,0xeb,0xa6,0xb4,0x60,0xfa,0x6c,0x04,0xe3,0x84,0x03,0x9f,0x6e,0x29,0x00, + 0xe0,0xdd,0x03,0x75,0xec,0x68,0x23,0x14,0x1e,0x9e,0xab,0x49,0x9c,0x7b,0x8f,0xf3, + 0xd6,0x90,0x09,0xfe,0x7f,0xcf,0xf8,0x52,0x1f,0xf3,0xfe,0x7f,0xa5,0x38,0x8f,0x4f, + 0xf3,0xfe,0x34,0x9d,0x7f,0x1a,0x00,0x68,0xca,0xf2,0xbf,0x95,0x28,0x21,0xba,0x70, + 0x47,0x6a,0x29,0xa4,0x67,0xfa,0x63,0xfc,0xfe,0x94,0x00,0xa7,0x8f,0xf3,0x8f,0xff, + 0x00,0x55,0x21,0x19,0x1f,0xe7,0xfc,0x8a,0x04,0x9d,0x03,0xfd,0x03,0x0a,0x71,0x18, + 0xc7,0xe8,0x45,0x00,0x50,0x69,0x41,0x18,0x55,0x0b,0x50,0xcc,0x73,0xb7,0x3c,0xd4, + 0xa1,0x41,0x15,0x0c,0xc9,0xf3,0x50,0x8d,0xa5,0xb0,0xcc,0x52,0x62,0x8c,0x95,0xa7, + 0x2b,0x03,0x4c,0xc8,0x69,0xab,0xfa,0x30,0xff,0x00,0x49,0x73,0xe8,0x87,0xf9,0x8a, + 0xa4,0xc2,0xb4,0x34,0x65,0xc3,0x4c,0x7f,0xd9,0x02,0x80,0x34,0x8d,0x20,0xeb,0xc7, + 0x5f,0xe7,0x4a,0x69,0x0f,0x23,0xe9,0x48,0x41,0xd3,0xe9,0xdc,0x7a,0x50,0x48,0xfc, + 0xfb,0xd0,0x0e,0x7a,0x7d,0xee,0xfe,0xf4,0x9d,0xb8,0xe9,0xfc,0xa8,0x00,0xc0,0xe9, + 0xfe,0x45,0x1d,0x78,0x34,0x99,0xc7,0x04,0xfd,0x0f,0xa5,0x2f,0xd7,0x83,0x40,0x0b, + 0x9e,0xcd,0xf8,0x1f,0x5a,0x64,0xae,0xd1,0xae,0xe1,0xd4,0x7b,0x53,0xb1,0xeb,0xd2, + 0xa2,0xb9,0xff,0x00,0x55,0xfd,0x68,0x02,0x84,0x9a,0xed,0xdc,0x6d,0x80,0xc3,0xf2, + 0xa8,0x9b,0x5e,0xbc,0x6f,0xe2,0xac,0xf9,0x8e,0xe6,0x53,0xed,0x49,0x4c,0x0b,0xaf, + 0xac,0x5e,0x3f,0xf1,0x81,0xf4,0x51,0x51,0x36,0xa1,0x76,0xdf,0xf2,0xd9,0xc7,0xd1, + 0xb1,0x55,0xe8,0xa6,0x03,0x9a,0x69,0x9f,0xef,0x48,0xc7,0xea,0x69,0xb9,0x63,0xd5, + 0x8d,0x2d,0x2e,0x29,0xd8,0x06,0x6d,0xf7,0xa3,0x6d,0x3f,0x14,0x62,0x9d,0x80,0x66, + 0xd1,0x4b,0x8a,0x76,0xda,0x36,0x9f,0x4a,0x2c,0x03,0x71,0x45,0x4a,0xb6,0xf3,0x3f, + 0xdc,0x89,0xdb,0xe8,0xa4,0xd3,0x24,0x8d,0xa3,0x72,0x8e,0xa5,0x58,0x75,0x04,0x60, + 0x8a,0x00,0x65,0x14,0xb4,0x94,0x08,0x29,0x29,0x69,0x28,0x01,0xa6,0xba,0x3d,0x2d, + 0xb3,0xa6,0x47,0xea,0x09,0x1f,0xad,0x73,0xad,0x5b,0xfa,0x2b,0x6e,0xd3,0xd8,0x7a, + 0x39,0xfe,0x42,0xa5,0x8c,0xb3,0xdf,0x8c,0x83,0xdc,0x51,0x9f,0x4e,0x94,0x11,0x9f, + 0xf1,0x14,0x67,0xd4,0xf3,0xeb,0x52,0x02,0x63,0x00,0xfa,0x7a,0x50,0x46,0x79,0x1f, + 0xe7,0xfc,0xfa,0xd2,0xe0,0xf5,0xa4,0xe9,0xfe,0x71,0xff,0x00,0xea,0xa0,0x06,0x9f, + 0xf3,0xfe,0x7b,0xd2,0x1f,0xf3,0xfe,0x7b,0xd3,0xb8,0x3c,0x74,0xfd,0x3f,0xfd,0x54, + 0x84,0x11,0xfe,0x7f,0xce,0x28,0x01,0xa4,0x7a,0xf7,0xfc,0x7f,0xfd,0x74,0x83,0x29, + 0xd3,0x95,0x3d,0xa9,0x79,0x5f,0x71,0xe8,0x7b,0x51,0xdb,0x8e,0x47,0x70,0x68,0x02, + 0x90,0x5e,0x7a,0xd4,0x6e,0x39,0xeb,0x52,0x6e,0xc0,0xf7,0xa8,0xf9,0x26,0x9a,0x35, + 0x90,0xdd,0xa0,0xd3,0x1e,0x32,0x3a,0x54,0xb8,0xa5,0xc5,0x33,0x32,0xb8,0x6c,0x75, + 0xad,0x6d,0x23,0xee,0x4c,0x7e,0x83,0xf9,0xd6,0x73,0x46,0x0d,0x69,0xe9,0x08,0x56, + 0xda,0x4f,0x77,0xfe,0x94,0x98,0x8b,0x86,0x90,0xe4,0x1e,0x94,0xa7,0xff,0x00,0xd6, + 0x29,0x3b,0x71,0xfa,0xd2,0x01,0x3a,0xf2,0xbd,0x68,0x1c,0xf3,0xdf,0xb8,0xa3,0x83, + 0xce,0x71,0x48,0x7a,0xe4,0x70,0x47,0x51,0x40,0x0b,0xc1,0x19,0xed,0x40,0xf4,0x34, + 0x03,0x9f,0x99,0x7a,0xf7,0x14,0xa3,0x91,0x91,0xf9,0x50,0x02,0x63,0x15,0x0d,0xd7, + 0xfa,0xa3,0x56,0x2a,0xbd,0xdf,0xfa,0xa3,0x40,0x1c,0xdc,0x83,0x05,0x7e,0x9f,0xd6, + 0x96,0x89,0xbe,0xfa,0x7f,0xba,0x28,0xaa,0x00,0xa2,0x8a,0x5a,0x60,0x15,0xd1,0xe8, + 0x7a,0x15,0xb6,0xa1,0x65,0xe7,0xcc,0xf2,0x86,0xdc,0x57,0x0a,0x40,0x1f,0xca,0xb9, + 0xd1,0x5d,0xaf,0x85,0x3f,0xe4,0x12,0x7f,0xeb,0xa9,0xfe,0x42,0x98,0x02,0xf8,0x7f, + 0x4a,0x4c,0xe5,0x59,0xf1,0xd7,0xe7,0xff,0x00,0x0a,0x7f,0xf6,0x6e,0x95,0x0e,0x3f, + 0xd1,0x13,0xfe,0x04,0xc7,0xfa,0x9a,0x86,0xf5,0xe0,0x5b,0xf9,0x0c,0xe8,0xc5,0x7f, + 0xba,0x3b,0xfe,0xb4,0xd7,0xbc,0xb3,0xdc,0x36,0xda,0x97,0x03,0xa1,0x69,0x38,0xed, + 0xfe,0x15,0x56,0x15,0xd1,0x75,0x60,0xb1,0x8c,0x02,0xb6,0x76,0xe0,0x1e,0x87,0x68, + 0xa1,0xef,0x60,0x83,0x0a,0xa9,0x1a,0x93,0xd3,0x67,0xff,0x00,0x5a,0xa9,0xfd,0xb2, + 0xdf,0xaa,0xda,0x40,0x31,0xcf,0x20,0x9f,0xe4,0xb5,0x1c,0xd7,0xb1,0x60,0x79,0x16, + 0xab,0xe6,0x64,0xb1,0x65,0x53,0xc1,0xc1,0xc7,0xa5,0x3e,0x51,0x29,0xa3,0x62,0xca, + 0x65,0xbb,0x81,0x67,0x08,0x54,0x37,0x4c,0xf7,0xae,0x33,0xc4,0x89,0xb7,0x5b,0xb8, + 0xf7,0xc1,0xfd,0x05,0x76,0x1a,0x3a,0xba,0xe9,0xd1,0xab,0xf5,0x1e,0xd5,0xca,0xf8, + 0xa9,0x71,0xac,0x31,0xf5,0x45,0x3f,0xa5,0x67,0xd4,0xbb,0xdd,0x18,0x94,0x94,0xa6, + 0x8a,0x64,0x89,0x45,0x14,0x50,0x03,0x5b,0xa5,0x6d,0xe8,0x27,0x36,0xf3,0x2f,0xa1, + 0x07,0xf4,0xff,0x00,0xeb,0x56,0x2b,0x74,0xad,0x6f,0x0f,0xb7,0xcd,0x3a,0xfa,0x80, + 0x7f,0x9f,0xf8,0xd4,0xb1,0x9a,0x4d,0x9c,0xf7,0xcd,0x27,0xeb,0x4a,0x71,0xd0,0x51, + 0xc5,0x48,0x00,0x19,0xe4,0x7e,0x54,0xdf,0xf3,0xfe,0x7f,0xc2,0x82,0x49,0xe9,0x41, + 0xe7,0xaf,0x5e,0xf4,0x00,0x87,0x9f,0xe9,0x8f,0xf3,0xfa,0x52,0x06,0x20,0xff,0x00, + 0x9f,0xf3,0xf8,0x52,0x9e,0x7a,0xff,0x00,0x9f,0xf1,0xa4,0x3e,0xff,0x00,0xe3,0xff, + 0x00,0xeb,0xa0,0x03,0x83,0xca,0xfe,0x5f,0xe1,0x4c,0x23,0x1c,0x83,0x83,0xfe,0x7f, + 0x2a,0x71,0xe3,0x9f,0xf3,0xff,0x00,0xd7,0xa3,0x83,0xfe,0x7f,0xce,0x68,0x02,0x93, + 0x2e,0xe2,0x70,0x2a,0x3a,0x99,0xf0,0xa3,0x03,0xbd,0x31,0x57,0x34,0xd1,0xac,0xf7, + 0x1a,0x05,0x18,0xe6,0xa4,0x0b,0x49,0x8a,0x66,0x63,0x42,0xd6,0xa5,0x80,0xc5,0xa7, + 0x5c,0x12,0xc6,0xb3,0xb1,0x5a,0x76,0xa3,0x16,0x69,0xc7,0x52,0x7f,0x9d,0x26,0x22, + 0x4c,0xf7,0xfc,0x08,0xa3,0x19,0xfa,0xd1,0x8f,0xc7,0xd3,0xdc,0x52,0x73,0xd4,0x75, + 0x1f,0xad,0x20,0x02,0x4e,0x79,0x1c,0x8e,0xbe,0xe2,0x90,0x73,0xdf,0x91,0xd2,0x94, + 0xf3,0xfd,0x0d,0x21,0x19,0xf6,0x34,0x00,0x9c,0x83,0x91,0xc1,0x1d,0x45,0x3b,0xaf, + 0x23,0xaf,0x71,0x48,0x3e,0x6f,0xad,0x1d,0x39,0x14,0x00,0xee,0xa2,0xab,0xdd,0xff, + 0x00,0xaa,0x35,0x3d,0x57,0xbd,0x3f,0xba,0x3f,0x4a,0x00,0xe7,0x65,0xfb,0xeb,0xfe, + 0xea,0xff,0x00,0x2a,0x5a,0x49,0x7f,0xd6,0x8f,0xa0,0xfe,0x54,0xb4,0xc6,0x14,0x51, + 0x45,0x31,0x0a,0x2b,0xb4,0xf0,0x9f,0xfc,0x82,0x9f,0xfe,0xba,0x9f,0xe4,0x2b,0x8c, + 0x15,0xd9,0x78,0x4b,0xfe,0x41,0x72,0x7f,0xd7,0x53,0xfc,0x85,0x37,0xb0,0x0f,0xd4, + 0x24,0x56,0xb8,0x97,0x04,0x12,0xa3,0xf5,0xaa,0x3b,0x9d,0x42,0xb9,0x72,0x09,0xce, + 0x07,0xe3,0x8f,0xe9,0x56,0xae,0xd1,0xe3,0xb9,0x96,0x4c,0x15,0x3b,0x89,0xf4,0xc8, + 0xaa,0xe5,0x5a,0x79,0xf0,0xb9,0x66,0x6e,0xe7,0x8c,0xd5,0xbd,0x11,0xc1,0x55,0xea, + 0xfb,0x8b,0x3c,0xdb,0x94,0x2a,0xb1,0xe9,0xcf,0x02,0xb3,0x5a,0x66,0x59,0xb8,0x6c, + 0xe3,0xd6,0xb4,0x9a,0xd2,0x40,0x8c,0xd9,0x52,0x17,0xae,0x18,0x1a,0xac,0x65,0xb6, + 0x8c,0x8c,0x88,0xcb,0xf5,0x39,0x5c,0xd2,0x4f,0x52,0x29,0xb6,0xa5,0xef,0x23,0xa0, + 0xd2,0x5c,0xbe,0x9f,0x1b,0x1e,0xf9,0xae,0x6b,0xc5,0xeb,0x8d,0x4d,0x0f,0xac,0x43, + 0xf9,0x9a,0xe9,0x74,0x96,0x0d,0x62,0xa5,0x71,0x8c,0x9c,0x62,0xb9,0xff,0x00,0x18, + 0xaf,0xfa,0x5c,0x0d,0xeb,0x19,0x1f,0xad,0x4f,0x53,0xbe,0x9f,0xc0,0x8e,0x6c,0xd2, + 0x52,0x9a,0x4a,0x65,0x09,0x45,0x2d,0x25,0x00,0x21,0xe9,0x5a,0x3a,0x01,0xff,0x00, + 0x4b,0x71,0xea,0x87,0xf9,0x8a,0xce,0x3d,0x2a,0xee,0x88,0xd8,0xd4,0x14,0x7a,0xa9, + 0x1f,0xa5,0x26,0x33,0x71,0xf3,0x9f,0xe4,0x4d,0x37,0x9f,0x41,0xfe,0x34,0xf7,0xc0, + 0x63,0xd2,0x99,0x8c,0xf4,0xfc,0xaa,0x00,0x5c,0x86,0xf6,0x3e,0x94,0xdf,0xf3,0xe9, + 0xff,0x00,0xea,0xa0,0x8c,0xe3,0xfa,0x7f,0x9f,0xd2,0x8f,0xf3,0xfe,0x7f,0xc2,0x80, + 0x03,0xfe,0x7b,0x7f,0xfa,0xa9,0xbf,0xe7,0xd3,0xff,0x00,0xd5,0x4b,0xfe,0x7f,0xcf, + 0xad,0x14,0x00,0xd3,0xfe,0x7f,0xcf,0x6a,0x43,0x4e,0xff,0x00,0x23,0xfc,0xff,0x00, + 0x4a,0x4f,0xa7,0xe1,0x8f,0xf3,0xfa,0x50,0x05,0x32,0x39,0xa5,0x15,0x69,0x2d,0xd5, + 0xc1,0x27,0x23,0x9e,0x31,0x41,0xb4,0xf4,0x6f,0xcc,0x53,0x34,0x96,0xe5,0x62,0x0d, + 0x26,0x39,0xab,0x0d,0x6c,0xe3,0xa6,0x0f,0xe3,0x51,0x18,0x9c,0x75,0x53,0x41,0x0c, + 0x65,0x6a,0x5b,0xf1,0x6b,0x10,0xf6,0xfe,0xb5,0x96,0x6b,0x56,0x2e,0x2d,0xa2,0xff, + 0x00,0x74,0x50,0xc4,0x03,0xe5,0x38,0x61,0xf2,0x9e,0x94,0xac,0x0a,0x9f,0xf3,0xcd, + 0x19,0x19,0xd9,0x27,0x43,0xd0,0xd0,0xa4,0xa9,0xf2,0xdc,0xff,0x00,0xba,0x69,0x00, + 0x9f,0xc8,0xf5,0xa4,0xfe,0x7f,0xce,0x94,0x82,0xa4,0x9c,0x7d,0x45,0x04,0x64,0x64, + 0x1a,0x00,0x43,0xc8,0xc8,0xa5,0x07,0x3f,0x5a,0x40,0x7b,0xf7,0xee,0x29,0x71,0xdc, + 0x50,0x02,0xd5,0x4b,0xf3,0xfb,0x86,0xfa,0x7a,0xd5,0xac,0x7f,0x9f,0x5a,0xa9,0xa8, + 0xf1,0x6e,0xff,0x00,0x4a,0x00,0xc0,0x9b,0xfd,0x77,0xe0,0x3f,0x95,0x2d,0x24,0xdf, + 0xeb,0xcd,0x2d,0x31,0x85,0x14,0x51,0x4c,0x43,0x85,0x76,0x3e,0x12,0xff,0x00,0x90, + 0x6c,0xbf,0xf5,0xd4,0xff,0x00,0x21,0x5c,0x70,0xae,0xc3,0xc2,0x3f,0xf1,0xe1,0x37, + 0xfd,0x74,0xfe,0x82,0x9f,0x40,0x24,0xd5,0x03,0x35,0xd1,0x22,0x40,0x9c,0x85,0xea, + 0x33,0xfa,0xd3,0x0d,0xa2,0x88,0xb9,0x90,0x99,0x43,0x05,0xcf,0xb1,0xef,0x8a,0xd2, + 0xbc,0x86,0x2b,0x86,0x55,0x62,0x81,0x93,0x9c,0xb5,0x66,0xc8,0x5d,0xa6,0x0e,0xdb, + 0x43,0x28,0x1c,0x8e,0x71,0x55,0xba,0xb1,0xcd,0x55,0x42,0x1e,0xf3,0x43,0x1e,0xd0, + 0x41,0x6b,0x21,0x3c,0x31,0x7e,0x3e,0x94,0xdb,0x38,0x99,0xa2,0x53,0xb4,0x91,0x93, + 0x9e,0x3d,0xea,0x5b,0x89,0xde,0x48,0xf6,0x99,0x03,0x03,0xd7,0xe5,0x22,0xab,0x7c, + 0xc7,0x6a,0xee,0xe3,0xea,0x70,0x2a,0x69,0xc5,0xc0,0xc6,0x75,0xe3,0xcf,0x74,0x6d, + 0x69,0x99,0x10,0xc8,0xb8,0xc6,0x24,0x35,0x87,0xe3,0x24,0xf9,0xad,0x5f,0xd9,0x87, + 0xf2,0xad,0xad,0x2d,0x3c,0x8b,0x62,0x19,0x89,0xdc,0xe4,0xfd,0xdc,0x62,0xb2,0x7c, + 0x61,0xb5,0xad,0x6d,0xd8,0x10,0x70,0xc4,0x7e,0x94,0x75,0x3b,0x60,0x9f,0x2e,0xa7, + 0x24,0x69,0x29,0x4d,0x25,0x31,0x85,0x25,0x14,0x50,0x01,0x56,0x34,0x96,0xdb,0xa9, + 0x45,0xf5,0x23,0xf4,0xaa,0xf5,0x25,0x8b,0x6d,0xbf,0x84,0xff,0x00,0xd3,0x41,0xfc, + 0xe9,0x31,0x9d,0x34,0x84,0x67,0x9c,0xe2,0xa3,0x20,0x83,0xea,0x3d,0x6a,0x59,0x07, + 0x35,0x1f,0xb7,0x4a,0x80,0x17,0xaf,0x5e,0xfd,0xfb,0x1a,0x69,0xef,0x9f,0xc7,0x3f, + 0xe7,0xf5,0xa3,0x07,0xa0,0xfc,0x47,0xad,0x1e,0x9c,0xe7,0xd3,0xfc,0xff,0x00,0x4a, + 0x00,0x69,0xef,0x9f,0xd7,0xfc,0xfe,0xb4,0x87,0xdf,0xf5,0xff,0x00,0x3f,0xad,0x3b, + 0xe9,0xfa,0x7f,0x4f,0xf0,0xa4,0xf4,0xfe,0x9f,0xe7,0xf4,0xa0,0x04,0xf5,0xcf,0xe3, + 0x9f,0xeb,0xfe,0x34,0x87,0xbf,0xeb,0x9f,0xeb,0xfe,0x34,0xbf,0xe4,0x63,0xfa,0x7f, + 0x85,0x27,0xa7,0xe9,0x8f,0xe9,0xfe,0x14,0x01,0x24,0x6c,0x3a,0x73,0x9a,0x92,0xa0, + 0x40,0x7d,0x31,0x53,0x03,0x48,0xd2,0x5b,0x8b,0x49,0x4b,0x9a,0x43,0x41,0x22,0x10, + 0x0f,0x51,0x9f,0xa8,0xab,0x04,0x7c,0xaa,0xa3,0x81,0xb4,0x7e,0x15,0x5f,0x3c,0xd5, + 0x97,0xeb,0x8c,0xe3,0x8a,0x62,0x64,0x58,0x07,0xf7,0x72,0x77,0xfb,0xa6,0x8c,0x12, + 0x36,0xbf,0x55,0xe8,0x69,0x58,0x03,0xf2,0xb7,0xd4,0x1f,0x4a,0x39,0x3c,0x37,0xde, + 0x1f,0xa8,0xa0,0x40,0x1b,0x3c,0x77,0xe9,0xf5,0xa6,0xfd,0xd3,0xea,0x0d,0x04,0x66, + 0x94,0x12,0xc3,0xa6,0x7d,0x68,0x01,0x3d,0x30,0x7e,0x86,0x94,0x50,0x72,0x28,0xa0, + 0x05,0xf6,0xaa,0x3a,0x9f,0xfc,0x7b,0xbf,0xfb,0xa6,0xae,0xd5,0x0d,0x50,0xff,0x00, + 0xa3,0x3f,0xfb,0xbe,0xb9,0xa0,0x0c,0x49,0xbf,0xe3,0xe5,0xbe,0xb4,0xb4,0x93,0xff, + 0x00,0xc7,0xd3,0xfd,0x69,0x69,0x8c,0x28,0xa2,0x8a,0x60,0x38,0x57,0x5f,0xe1,0x0f, + 0xf8,0xf2,0x9b,0xfe,0xba,0x7f,0x4a,0xe3,0xc5,0x75,0xde,0x10,0x3f,0xe8,0x93,0xff, + 0x00,0xbe,0x3f,0x95,0x02,0x37,0x7c,0x84,0xf3,0x19,0xc8,0xc9,0x6c,0x75,0xf6,0xa8, + 0xd6,0xca,0x35,0x89,0x50,0x76,0x18,0xcf,0xad,0x58,0xa2,0x8b,0xb1,0x4a,0x2a,0x4a, + 0xcd,0x10,0x2d,0xaa,0x0c,0xe7,0x04,0x9e,0xf8,0xa8,0x64,0xd3,0x91,0xd4,0xfc,0xc7, + 0x3d,0xb8,0x15,0x76,0x8a,0x2e,0xc8,0x74,0x60,0xd5,0x9a,0x32,0x61,0xd2,0xe7,0x03, + 0x12,0x4f,0xf2,0xe7,0x21,0x47,0x18,0xac,0xff,0x00,0x14,0x5a,0x08,0x74,0xe8,0x9c, + 0x12,0x48,0x93,0x1d,0x7d,0x8d,0x74,0xd5,0x8d,0xe2,0xa5,0xdd,0xa3,0x13,0xfd,0xd7, + 0x53,0x4e,0xed,0x9a,0xad,0x15,0x91,0xc3,0x9a,0x4a,0x53,0x4d,0xa6,0x48,0x51,0x45, + 0x25,0x00,0x2d,0x10,0xb6,0xdb,0x84,0x3e,0x8c,0x0d,0x25,0x34,0xf0,0xd4,0x98,0xd1, + 0xd7,0x4a,0x39,0xed,0xf8,0xd4,0x7d,0xb1,0x9a,0x91,0x8e,0xe4,0x04,0x1e,0xa3,0xd2, + 0xa3,0xef,0xef,0xe9,0x50,0x02,0x63,0x1d,0x69,0x0f,0x7f,0xd7,0x3f,0xe7,0xf5,0xa7, + 0x73,0xdb,0xa8,0xed,0x48,0x7d,0xa8,0x01,0x0d,0x21,0xf7,0xfd,0x68,0xff,0x00,0x3e, + 0xbf,0xfe,0xb1,0x48,0x7a,0xff,0x00,0x9f,0xf3,0x8a,0x00,0x3d,0x7f,0xaf,0xf9,0xfd, + 0x69,0x0f,0x7f,0xd7,0x3f,0xd7,0xfc,0x69,0x69,0x3f,0xcf,0x1f,0xd2,0x80,0x24,0x06, + 0x9c,0x3d,0xea,0x31,0x52,0x03,0xc5,0x22,0x85,0xa4,0x26,0x8a,0x42,0x71,0x40,0x06, + 0x6a,0xcc,0x98,0xdd,0xc9,0xe2,0xa9,0x83,0xf3,0x0a,0xbb,0x27,0xde,0x3d,0xe9,0x88, + 0x60,0xe7,0xe5,0x07,0x9e,0xa0,0xd2,0x11,0xcf,0x3d,0x68,0x24,0x95,0xc8,0xe0,0x8a, + 0x5f,0xbe,0xb9,0x07,0x9a,0x04,0x27,0x51,0x9c,0x7d,0x69,0xbc,0x8e,0x47,0x5a,0x50, + 0x70,0x72,0x0f,0x1d,0xc5,0x07,0x8f,0xa5,0x00,0x2f,0x50,0x0f,0xaf,0xe9,0x45,0x34, + 0x1d,0xbd,0x79,0x53,0xde,0x9c,0x7e,0xf6,0x3f,0xc9,0xa0,0x04,0xac,0xfd,0x54,0xe2, + 0xdd,0xfe,0x95,0xa1,0xfe,0x45,0x66,0xea,0xc7,0xfd,0x1d,0xb1,0x40,0x18,0xd2,0x9c, + 0xdc,0xbf,0xfb,0xc6,0x9d,0x4c,0x7f,0xf5,0xc7,0xeb,0x4f,0xa6,0x30,0xa2,0x92,0x8a, + 0x00,0x70,0xad,0x4d,0x27,0x5a,0x93,0x4c,0x8e,0x44,0x48,0x95,0xf7,0x90,0x7e,0x63, + 0xd2,0xb2,0xa8,0xa6,0x07,0x48,0x7c,0x5b,0x71,0xda,0xde,0x2f,0xd7,0xfc,0x69,0xa7, + 0xc5,0x97,0x5d,0xa1,0x87,0xf2,0x3f,0xe3,0x5c,0xf6,0x68,0xcd,0x16,0x41,0x73,0xa0, + 0x3e,0x2c,0xbc,0xff,0x00,0x9e,0x50,0x7e,0x47,0xfc,0x69,0xa7,0xc5,0x77,0xbf,0xdc, + 0x87,0xfe,0xf9,0x3f,0xe3,0x58,0x39,0xa4,0xa7,0x64,0x17,0x37,0x4f,0x8a,0xaf,0xff, + 0x00,0xbb,0x0f,0xfd,0xf3,0xff,0x00,0xd7,0xaa,0xd7,0xda,0xf5,0xdd,0xf5,0xb3,0x41, + 0x2f,0x97,0xb1,0x88,0x27,0x0b,0x8a,0xcb,0xa4,0xa2,0xc2,0xb8,0x1a,0x4a,0x29,0x29, + 0x88,0x29,0x29,0x69,0x28,0x00,0xa6,0xb7,0x5a,0x75,0x35,0xba,0xd2,0x63,0x47,0x57, + 0x11,0xdf,0x6b,0x11,0xe7,0x94,0x1d,0x3e,0x94,0xdc,0xe7,0xe5,0x6e,0xbd,0x88,0xa6, + 0x59,0x9d,0xda,0x7c,0x1d,0xfe,0x40,0x3a,0xd4,0x9c,0x36,0x47,0xf3,0xa9,0x00,0xcf, + 0x66,0xea,0x3a,0x11,0x48,0x4e,0x68,0x07,0xb1,0xe4,0x7a,0xff,0x00,0x8d,0x0d,0xc7, + 0xd2,0x90,0x09,0xfe,0x7d,0x3f,0xfd,0x46,0x93,0xfc,0xfa,0x7f,0xfa,0x8d,0x2d,0x21, + 0xa0,0x04,0xff,0x00,0x3f,0xe7,0xd0,0xd0,0x7f,0xcf,0xf9,0xec,0x68,0xc7,0xf9,0xff, + 0x00,0x3d,0xa8,0xff,0x00,0x3f,0xe7,0xda,0x80,0x05,0x34,0xfc,0x8a,0x80,0xb8,0x55, + 0xe4,0x8e,0x29,0x8d,0x70,0x00,0x3e,0xd4,0x8a,0x2c,0x96,0xc5,0x31,0xe4,0xaa,0x92, + 0x5c,0x1f,0x9b,0xdb,0x15,0x0b,0xcc,0x72,0xdc,0xf4,0xe9,0x40,0x17,0x92,0x41,0xe6, + 0x2f,0xd4,0x56,0xa3,0x8e,0x6b,0x9f,0xb7,0x62,0xf7,0x48,0xa0,0xf5,0x75,0xfe,0x75, + 0xd1,0x95,0x34,0x21,0x32,0xbe,0x30,0xd9,0x14,0x83,0x28,0x4e,0x3a,0x54,0xe5,0x29, + 0xa5,0x46,0x3d,0xe9,0x81,0x11,0x19,0x39,0x1d,0x7b,0xfb,0xd0,0x31,0xfe,0x34,0xf2, + 0xa3,0x1e,0xf4,0xd2,0xb9,0xeb,0xd7,0xd6,0x81,0x0d,0xc6,0x09,0x1e,0xbd,0xbd,0x68, + 0xed,0x8f,0xca,0x9d,0x8c,0x70,0x7f,0x0a,0x4d,0xbe,0xc6,0x80,0x13,0x39,0x1e,0xfd, + 0xeb,0x33,0x56,0xcf,0x94,0x47,0x3d,0x45,0x6a,0x6d,0x3e,0xf9,0xf5,0xc5,0x46,0xf1, + 0x24,0xa3,0x0c,0x8b,0xee,0x0d,0x00,0x72,0xae,0x7f,0x7a,0xc7,0xdf,0x34,0xbb,0xfd, + 0xab,0xa4,0x36,0x36,0xe7,0xfe,0x59,0x27,0xe7,0x4d,0xfb,0x05,0xb7,0xfc,0xf1,0x5f, + 0xfb,0xe8,0x53,0x19,0xce,0xef,0xf6,0xa3,0x7f,0xb5,0x74,0x5f,0xd9,0xf6,0xdf,0xf3, + 0xc1,0x7f,0x31,0x47,0xf6,0x75,0xbf,0xfc,0xfb,0x8f,0xc0,0x8f,0xf0,0xa0,0x0e,0x77, + 0x7f,0xb5,0x1b,0xfd,0xab,0xa1,0x3a,0x7d,0xae,0x71,0xe4,0x7f,0x2a,0x3f,0xb3,0x6d, + 0xbf,0xe7,0x88,0x14,0x5c,0x0e,0x7f,0x7f,0xb5,0x1b,0xfd,0xab,0xa0,0xfe,0xcc,0xb6, + 0xff,0x00,0x9e,0x60,0x52,0x7f,0x65,0xdb,0x7f,0x70,0x51,0x70,0x30,0x37,0xfb,0x52, + 0x6f,0xf6,0xad,0xff,0x00,0xec,0xbb,0x6f,0xee,0x8a,0x3f,0xb2,0xed,0xff,0x00,0xba, + 0x28,0xb8,0x8c,0x0d,0xfe,0xd4,0x9b,0xfd,0xab,0x7f,0xfb,0x2a,0xdf,0xfb,0xa2,0x8f, + 0xec,0xab,0x7f,0xee,0x8a,0x2e,0x07,0x3f,0xbf,0xda,0x8d,0xfe,0xd5,0xd0,0x7f,0x65, + 0x5b,0xff,0x00,0x74,0x51,0xfd,0x97,0x6f,0xfd,0xd1,0xf9,0x51,0x70,0x39,0xfd,0xfe, + 0xd4,0x9b,0xbd,0xab,0xa1,0xfe,0xcb,0x80,0x7f,0x00,0xfc,0xa8,0xfe,0xcc,0x83,0xfb, + 0x8b,0xf9,0x51,0x70,0x39,0xed,0xde,0xd4,0x84,0xe6,0xba,0x3f,0xec,0xd8,0x07,0xf0, + 0xaf,0xe5,0x47,0xf6,0x7c,0x03,0xf8,0x16,0x8b,0x8c,0x4d,0x31,0xf7,0x69,0xf1,0x8e, + 0x38,0x1d,0xfe,0xb5,0x60,0x8c,0xfb,0x11,0x48,0x90,0x88,0xc6,0x13,0x81,0xe8,0x29, + 0xd8,0xa4,0x21,0x07,0x3f,0x5f,0x4a,0x3a,0x76,0xa0,0x8a,0x42,0x7d,0x68,0x00,0xe8, + 0x32,0xbc,0x8f,0x4a,0x33,0xdc,0x74,0xed,0xed,0x49,0x82,0x0e,0x47,0xff,0x00,0xae, + 0x97,0xef,0x72,0x3a,0xf7,0x14,0x00,0x80,0x9f,0xf0,0xf6,0xa0,0xf3,0xdb,0xe9,0x8a, + 0x5e,0x0f,0xd6,0x97,0x3e,0xbc,0x83,0xde,0x81,0x99,0xf3,0x1f,0x98,0xfb,0xa5,0x56, + 0x32,0x64,0x7d,0x56,0xb4,0x85,0xac,0x52,0x04,0x77,0x62,0x32,0x0f,0x7c,0x53,0x64, + 0xfb,0x2c,0x16,0x6e,0x23,0x40,0xec,0x00,0x61,0x8e,0x70,0x47,0xaf,0xb6,0x09,0xa9, + 0x19,0x9c,0x59,0x98,0x13,0x83,0x83,0xc1,0xe3,0xbd,0x29,0x86,0x63,0xb8,0xf9,0x6c, + 0x36,0xf0,0xd9,0xed,0x53,0xc9,0x77,0x34,0xaf,0x36,0x2d,0x94,0x09,0xa2,0x0c,0x57, + 0x70,0xfb,0xc3,0xf8,0x87,0xe3,0xdb,0xdc,0xd2,0x0b,0x8b,0xb9,0x24,0x53,0xfb,0xac, + 0xcd,0x06,0xc3,0x9c,0xe1,0xf0,0x3f,0x9f,0x4f,0xca,0x9d,0x82,0xe3,0x63,0xb4,0xb8, + 0x0e,0x4e,0x30,0xd1,0xa8,0x90,0xfa,0xe3,0x8e,0x7f,0x5a,0xe9,0xe0,0xb8,0x82,0x51, + 0x0e,0xe6,0x0b,0x24,0xcb,0xb9,0x57,0xd7,0xd7,0x1f,0x91,0xae,0x66,0x26,0xba,0x26, + 0xd6,0x4f,0xb4,0x6d,0xc2,0x98,0x83,0x05,0xc9,0x1d,0x78,0x3e,0xbd,0x4d,0x35,0x61, + 0x99,0x63,0x87,0x74,0xb2,0x8f,0x26,0x42,0x76,0x83,0x82,0xbe,0xac,0xbe,0xdc,0x53, + 0xb0,0xae,0x75,0x5f,0x6a,0xb3,0xf2,0xc4,0x9e,0x7a,0x6c,0x66,0xd8,0x1b,0x3c,0x67, + 0xd2,0x86,0x9e,0xcc,0x33,0xab,0x5c,0x46,0xa6,0x33,0x87,0x05,0xc0,0xda,0x7d,0xeb, + 0x91,0x78,0x22,0x09,0x22,0x99,0x37,0x30,0x7d,0xcb,0x97,0xe1,0xc7,0xf8,0xd2,0x98, + 0xad,0x08,0x90,0xa9,0x5d,0x8e,0x00,0x53,0xce,0x55,0xbd,0x29,0x88,0xeb,0x03,0xda, + 0x3f,0xdd,0xb9,0x8c,0xfd,0x24,0x06,0x9e,0x20,0x8d,0xbe,0xeb,0x83,0xf4,0x35,0xcb, + 0xaa,0xc0,0xac,0xd2,0x1f,0x28,0x79,0x6b,0xb5,0xd0,0x0f,0xbd,0x9e,0xeb,0x56,0xad, + 0xec,0x83,0xbd,0xbc,0x49,0x30,0x2d,0xb3,0xcc,0x89,0xc0,0xfb,0xdc,0x7d,0xd3,0xef, + 0xda,0x80,0x37,0x8d,0xa0,0xfe,0xf1,0xa6,0x9b,0x3f,0xf6,0xab,0x1d,0x6d,0x56,0x38, + 0xc5,0xdc,0x4c,0xdf,0x3b,0x10,0xcb,0xfd,0xc3,0xff,0x00,0xd7,0xab,0x50,0x48,0xfb, + 0x41,0xde,0xdf,0x9d,0x21,0x97,0x0d,0x99,0xec,0xd4,0x86,0xd1,0xf3,0x90,0xdc,0xfd, + 0x6a,0x31,0x34,0x9f,0xdf,0x6f,0xce,0x94,0x5c,0x49,0xfd,0xf3,0x40,0x0e,0x36,0x92, + 0x7f,0x78,0xfe,0x74,0x7d,0x95,0xfd,0x4f,0xe7,0x49,0xf6,0x89,0x7f,0xbf,0xfa,0x0a, + 0x5f,0xb4,0xcb,0xfd,0xef,0xd0,0x50,0x02,0x7d,0x9a,0x4f,0x53,0xf9,0xd3,0x4d,0xab, + 0xfb,0x9a,0x7f,0xda,0xa4,0x1d,0x48,0xfc,0xa9,0x1a,0xf1,0xd5,0x4b,0x1d,0xb8,0x1e, + 0xd4,0xc0,0x6f,0xd9,0xdc,0x0e,0xf4,0x9e,0x43,0x7a,0x56,0x5b,0x6b,0xf7,0xca,0xc7, + 0x10,0xc0,0xc3,0xe8,0x7f,0xc6,0x81,0xe2,0x1b,0xbe,0xf6,0xb1,0x7e,0x04,0xd1,0x61, + 0x1a,0x7e,0x43,0x0f,0xe1,0xe2,0x93,0xc9,0x6f,0x43,0x54,0x07,0x88,0x67,0x18,0xcd, + 0xa2,0x7e,0x0f,0x4f,0xff,0x00,0x84,0x80,0x96,0x21,0x6d,0x43,0x60,0x67,0xef,0xff, + 0x00,0xf5,0xa9,0xa8,0xb6,0x17,0x2e,0x79,0x2d,0xfd,0xde,0x28,0xf2,0x4f,0xa1,0xaa, + 0x3f,0xf0,0x92,0x60,0xf3,0x69,0xff,0x00,0x8f,0xff,0x00,0xf5,0xaa,0x55,0xf1,0x02, + 0x3f,0xfc,0xbb,0xff,0x00,0xe3,0xff,0x00,0xfd,0x6a,0x1c,0x5a,0xdc,0x2e,0x58,0xf2, + 0x58,0x7f,0x0f,0x14,0x79,0x27,0x3d,0x2a,0x21,0xad,0xa1,0xff,0x00,0x97,0x73,0xff, + 0x00,0x7d,0xff,0x00,0xf5,0xa9,0xe3,0x58,0x8c,0xff,0x00,0xcb,0x13,0xff,0x00,0x7d, + 0x52,0x01,0xde,0x49,0xf4,0xa4,0x30,0x9e,0xc3,0x9a,0x51,0xaa,0x46,0x7f,0xe5,0x91, + 0xfc,0xe9,0xc3,0x52,0x8c,0xff,0x00,0xcb,0x33,0xf9,0xd2,0x01,0x9e,0x51,0xf4,0xa0, + 0xc4,0x7d,0x2a,0x4f,0xed,0x08,0xbf,0xe7,0x9b,0x52,0xfd,0xbe,0x2f,0xee,0x35,0x00, + 0x43,0xe5,0x9f,0x4a,0x4f,0x2c,0xe3,0xa5,0x4f,0xf6,0xf8,0x7f,0xb8,0xff,0x00,0xa5, + 0x1f,0x6d,0x83,0xfb,0xaf,0xf9,0x50,0x05,0x7d,0x84,0x76,0xc8,0xa3,0xcb,0x3e,0x86, + 0xa7,0xfb,0x64,0x1e,0x8d,0xf9,0x51,0xf6,0xb8,0x7f,0xda,0xfc,0xa8,0x19,0x07,0x96, + 0x7d,0x29,0x3c,0xb3,0xdc,0x55,0x8f,0xb5,0xc1,0xfe,0xd7,0xe5,0x47,0xda,0xe0,0xf7, + 0xfc,0xa8,0x02,0xb1,0x8c,0xe6,0x8f,0x2c,0x9c,0x1c,0x60,0xd5,0x9f,0xb5,0x41,0xea, + 0x7f,0x2a,0x3e,0xd3,0x07,0xf7,0xbf,0x4a,0x00,0xad,0xb0,0x91,0xc8,0xc1,0xa4,0xf2, + 0xbd,0xb1,0x56,0xbe,0xd3,0x07,0xf7,0xbf,0x4a,0x4f,0xb4,0xc1,0xfd,0xef,0xd2,0x80, + 0x30,0x25,0x6e,0x41,0xcf,0xdd,0x38,0xfc,0xea,0x21,0x30,0x8b,0x95,0x3c,0xa9,0xc7, + 0x3d,0xc5,0x2d,0xc7,0xdc,0x90,0xff,0x00,0xb4,0x05,0x53,0x90,0x90,0x5c,0x7a,0x62, + 0x90,0xcb,0x2f,0x7a,0x54,0x91,0x1a,0x2a,0x05,0x5c,0x2f,0x19,0xdb,0xd3,0xa1,0xff, + 0x00,0x3d,0x6a,0x36,0xbb,0x90,0xe4,0x03,0xb4,0x05,0x1c,0x28,0x03,0x1d,0x39,0x1e, + 0x86,0xab,0xb7,0x56,0xfc,0xa9,0x09,0x1f,0x35,0x31,0x13,0x35,0xc4,0xac,0x7e,0x69, + 0x18,0xfc,0x98,0x3c,0xf5,0x14,0xc0,0xc4,0x95,0xcf,0x65,0xa6,0x12,0x32,0x7e,0x98, + 0xa3,0x77,0xf2,0xc5,0x00,0x39,0x5b,0x98,0xfe,0xb4,0xd0,0xfd,0x3d,0x8e,0x69,0x01, + 0xc1,0x1e,0xd4,0x2f,0xde,0x1f,0x5a,0x60,0x38,0x39,0x39,0x1e,0xf9,0xad,0x4b,0x49, + 0x1f,0x64,0x60,0x1c,0x6c,0x6d,0xca,0x47,0x50,0x7f,0xc8,0xac,0xe4,0x52,0x52,0x4c, + 0x2e,0x48,0x23,0x1c,0x56,0x85,0xba,0xed,0x8c,0x7a,0xd2,0x03,0x5a,0x19,0x06,0xc9, + 0x90,0x8c,0xac,0xb8,0x3f,0x46,0xf5,0xfe,0x75,0x22,0x70,0x31,0x55,0x61,0x6c,0x8a, + 0xb2,0xb9,0x22,0x90,0x0f,0xa5,0xcd,0x32,0x97,0x24,0x53,0x01,0xd9,0xa3,0x34,0xdc, + 0xd1,0x40,0x0e,0xeb,0x50,0x5e,0xf3,0x67,0x2f,0xfb,0xa6,0xa5,0xcd,0x43,0x77,0xcd, + 0xa4,0xbf,0xee,0x1f,0xe5,0x42,0xdc,0x47,0x3b,0x45,0x25,0x15,0xd4,0x66,0x0d,0xf7, + 0x4d,0x58,0xd2,0xf0,0xd7,0x04,0x1e,0xe8,0x6a,0xb3,0x7d,0xd3,0x56,0x34,0x93,0xfe, + 0x96,0x3f,0xdd,0x35,0x12,0x65,0x22,0xe5,0xc5,0x98,0x6c,0xb2,0xf5,0xac,0xf9,0x23, + 0x78,0x8f,0xf5,0xad,0xd2,0x2a,0x19,0x61,0x57,0x18,0x22,0x85,0x3b,0xe9,0x21,0x38, + 0xdb,0x63,0x2e,0x39,0xbb,0x37,0xe7,0x56,0x15,0xea,0x2b,0x8b,0x52,0x87,0x22,0xa0, + 0x57,0x68,0xce,0x0e,0x7e,0x86,0x94,0xa1,0xd8,0x6a,0x46,0x82,0xc9,0x52,0xab,0xd5, + 0x24,0x90,0x38,0xc8,0x35,0x28,0x62,0x2b,0x1b,0x16,0x5b,0x0d,0x4b,0xba,0xab,0x07, + 0xa7,0x86,0xa0,0x09,0xf3,0x46,0xea,0x88,0x35,0x2e,0xea,0x40,0x49,0x9a,0x33,0x4c, + 0xdd,0x46,0x68,0x02,0x4c,0xd2,0x66,0x9b,0x9a,0x33,0x40,0x0e,0xcd,0x19,0xa6,0xe6, + 0x8c,0xd0,0x03,0xb3,0x45,0x37,0x34,0xb9,0xa0,0x0f,0xff,0xd9,0xff,0xe4,0x13,0x4b, + 0x51,0x54,0x49,0x20,0x44,0x65,0x62,0x75,0x67,0x20,0x4d,0x65,0x74,0x61,0x64,0x61, + 0x74,0x61,0x00,0x49,0x13,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x52,0x43,0xae,0xae,0xae,0xae,0x86,0x02,0x00,0x00,0xe8,0x05,0x00, + 0x00,0x7b,0x06,0x00,0x00,0xad,0x06,0x00,0x00,0xaa,0x01,0x00,0x00,0x01,0x00,0x00, + 0x00,0x06,0x11,0xa5,0x88,0x03,0x00,0x00,0x00,0x44,0x09,0x00,0x00,0x4c,0x09,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x25,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x34,0x00,0x00,0x00,0xab,0x06,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x50,0x00,0x00, + 0x00,0x50,0x09,0x00,0x00,0x0b,0x00,0x00,0x00,0x44,0x09,0x00,0x00,0x73,0x02,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00, + 0x00,0x40,0x01,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xe8,0x05,0x00,0x00,0xee,0xee,0xee, + 0xee,0x15,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x01,0x00, + 0x00,0x22,0x41,0x00,0x00,0x94,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x22,0x41,0x00, + 0x00,0x00,0x01,0x00,0x00,0xf7,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0xe6,0x0b,0x00, + 0x00,0x2f,0x08,0x00,0x00,0xe6,0x0b,0x00,0x00,0x10,0x00,0x00,0x00,0x31,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x68,0x00,0x00, + 0x00,0x26,0x09,0x00,0x00,0x87,0x08,0x00,0x00,0x0b,0x09,0x00,0x00,0xc6,0x08,0x00, + 0x00,0x25,0x09,0x00,0x00,0x09,0x09,0x00,0x00,0x1b,0x09,0x00,0x00,0x1d,0x09,0x00, + 0x00,0x21,0x09,0x00,0x00,0x3e,0x09,0x00,0x00,0x43,0x09,0x00,0x00,0x12,0x09,0x00, + 0x00,0x29,0x09,0x00,0x00,0x12,0x09,0x00,0x00,0x04,0x09,0x00,0x00,0xc7,0x08,0x00, + 0x00,0x56,0x08,0x00,0x00,0x69,0x07,0x00,0x00,0xc8,0x05,0x00,0x00,0x52,0x05,0x00, + 0x00,0x2b,0x09,0x00,0x00,0x27,0x09,0x00,0x00,0x67,0x08,0x00,0x00,0xc8,0x05,0x00, + 0x00,0x5f,0x08,0x00,0x00,0x32,0x0a,0x00,0x00,0x67,0x0a,0x00,0x00,0xa1,0x07,0x00, + 0x00,0x6d,0x05,0x00,0x00,0x04,0x08,0x00,0x00,0x2f,0x09,0x00,0x00,0x31,0x09,0x00, + 0x00,0x66,0x08,0x00,0x00,0xe8,0x05,0x00,0x00,0xf9,0x09,0x00,0x00,0xab,0x0a,0x00, + 0x00,0xe9,0x0a,0x00,0x00,0xf2,0x08,0x00,0x00,0x7e,0x05,0x00,0x00,0xdc,0x07,0x00, + 0x00,0x31,0x09,0x00,0x00,0x5a,0x08,0x00,0x00,0xf4,0x05,0x00,0x00,0xee,0x09,0x00, + 0x00,0x73,0x0a,0x00,0x00,0xc5,0x0a,0x00,0x00,0x50,0x09,0x00,0x00,0x86,0x05,0x00, + 0x00,0x31,0x09,0x00,0x00,0x4e,0x08,0x00,0x00,0xf4,0x05,0x00,0x00,0xe2,0x09,0x00, + 0x00,0x2b,0x0b,0x00,0x00,0xdc,0x0a,0x00,0x00,0x5c,0x09,0x00,0x00,0x86,0x05,0x00, + 0x00,0x38,0x09,0x00,0x00,0x3e,0x08,0x00,0x00,0xee,0x05,0x00,0x00,0xcf,0x09,0x00, + 0x00,0xe6,0x0b,0x00,0x00,0xd4,0x0b,0x00,0x00,0xdd,0x09,0x00,0x00,0x76,0x05,0x00, + 0x00,0xe8,0x05,0x00,0x00,0x06,0x06,0x00,0x00,0x3b,0x06,0x00,0x00,0x1c,0x06,0x00, + 0x00,0x33,0x08,0x00,0x00,0x1e,0x08,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0xfe,0xff,0xff,0xff,0xbc,0x08,0x00, + 0x00,0x44,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x29,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x96,0x09,0x00, + 0x00,0xf9,0x0b,0x00,0x00,0xba,0x05,0x00,0x00,0xfc,0xff,0xff,0xff,0x00,0x00,0x00, + 0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0d,0x00, + 0x00,0x00,0x1d,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x8b,0xfe,0xff, + 0xff,0xdc,0xfe,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xad,0x06,0x00,0x00,0xad,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xa7,0x06,0x00, + 0x00,0x7c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0xff,0xff, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf5,0x0a,0x00,0x00,0x86,0x09,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0xde,0x00,0x00,0x00,0xbb,0x00,0x00, + 0x00,0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xa5,0x00,0x00, + 0x00,0xc1,0xff,0xff,0xff,0x3c,0x00,0x00,0x00,0xef,0xff,0xff,0xff,0xed,0xff,0xff, + 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, + 0x00,0x00,0x04,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x10,0x00, + 0x00,0x00,0x13,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x26,0x00, + 0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0b,0x00,0x00,0xdf,0xff,0xff, + 0xff,0x64,0x08,0x00,0x00,0xa4,0x0a,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x0a,0x1e,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa7,0x00,0x00, + 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x6c,0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x92,0x02,0x00,0x00,0x8a,0x04,0x00,0x00,0xe4,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x00,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x5d,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, + 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0e,0x00, + 0x00,0x00,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x4a,0x4b,0x4a,0x4b,0x21,0x07,0x0a, + 0x9c,0x24,0xfa,0x00,0x00,0xac,0xfa,0x00,0x00,0x2e,0x77,0x00,0x00,0x2c,0x7e,0x00, + 0x00,0xd6,0xea,0x01,0x00,0x50,0xb1,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0xaa,0x01, + 0x00,0x00,0xaa,0x01,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x76,0x00,0x75,0x18,0x7e,0x5b,0x02,0x00,0x00,0x00,0x01,0x00,0x87, + 0xb3,0x01,0x00,0x17,0x92,0x01,0x00,0xbb,0x6b,0xff,0xff,0x2d,0x02,0x00,0x00,0x69, + 0xdd,0xff,0xff,0x26,0x46,0x01,0x00,0x71,0xdc,0xff,0xff,0x70,0x0f,0x00,0x00,0x19, + 0x4f,0xff,0xff,0x76,0xa1,0x01,0x00,0xff,0xff,0x40,0x30,0x00,0x00,0x18,0x00,0x00, + 0x12,0x12,0x00,0x08,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x10,0x12, + 0x12,0x12,0x12,0x13,0x13,0x00,0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x13,0x00,0x13,0x12,0x13,0x13,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x01, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x07,0x08,0x12,0x12,0x12,0x12,0x01, + 0x06,0x12,0x12,0x12,0x12,0x08,0x15,0x00,0x00,0x14,0x15,0x06,0x12,0x12,0x12,0x01, + 0x06,0x12,0x12,0x12,0x12,0x08,0x08,0x15,0x00,0x15,0x15,0x06,0x12,0x12,0x12,0x01, + 0x06,0x12,0x12,0x12,0x12,0x07,0x07,0x00,0x00,0x15,0x15,0x07,0x12,0x12,0x12,0x06, + 0x12,0x12,0x12,0x12,0x12,0x07,0x07,0x00,0x00,0x14,0x15,0x08,0x12,0x12,0x12,0x06, + 0x06,0x12,0x12,0x12,0x12,0x06,0x07,0x16,0x08,0x00,0x08,0x08,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x06,0x07,0x01,0x01,0x07,0x08,0x08,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, + 0x12,0x12,0x12,0x12,0x12,0x12,0x08,0x15,0x15,0x12,0x12,0x12,0x12,0x12,0x12,0x00, + 0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0xf9,0x0d,0x00,0x10,0x00, + 0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0xc3, + 0x0a,0x00,0x10,0xca,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x02, + 0x08,0x07,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x1b, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x25,0x4c,0x00,0x00,0x00,0x0e, + 0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x20,0xe6,0x1d,0x88,0x20,0xe6,0x1d,0x88, + 0x20,0xe6,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3d, + 0x1e,0x08,0x1b,0xfc,0x21,0xa8,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x24,0x38,0x1f,0x42, + 0x23,0x2f,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c, + 0x27,0x09,0x1e,0xf0,0x27,0xec,0x1b,0x2b,0x28,0x67,0x1c,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x67,0x2a,0x04,0x18,0x00,0x27,0x5d,0x19,0x7b,0x25,0x3d,0x16,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8c,0x2e,0x2d,0x15,0xd3,0x2b,0x56,0x16,0xa2, + 0x29,0x12,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xab, + 0x1c,0x9c,0x1a,0x7b,0x25,0x77,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5d,0x1d,0x93,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x26,0x42,0x20,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c, + 0x27,0x57,0x1e,0x75,0x27,0xc0,0x1d,0x83,0x28,0x72,0x1c,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x80,0x27,0x12,0x1d,0x88,0x20,0xe6,0x1d,0x88,0x20,0xe6,0x1d,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf2,0x1f,0x1d,0x15,0xd2, + 0x24,0x83,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x20,0xe6,0x1d,0x88, + 0x20,0xe6,0x1d,0x88,0x20,0xe6,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88, + 0x20,0xe6,0x1d,0x88,0x20,0xe6,0x1d,0x88,0x20,0xe6,0x1d,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x04,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x55,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x0f,0x00,0x1c,0x01,0xe8,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x13, + 0x01,0x07,0x00,0x00,0x00,0x00,0x00,0x2f,0x00,0x71,0x00,0x13,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0xc8,0x00,0x9b, + 0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x5a,0x00,0xe8,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x0c,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x16,0x00,0x0b,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xf7,0x1f,0xfe,0xb7,0x15,0xfe,0xb7,0x15, + 0xe2,0x17,0x10,0xe2,0x17,0x10,0x00,0x88,0x20,0x00,0x10,0xe6,0x1d,0x06,0x00,0x00, + 0x00,0x5a,0x50,0x64,0x55,0x64,0x2d,0x64,0x10,0x64,0x10,0x64,0x10,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x67,0x00,0x00,0x00,0x01,0x00,0x0c,0x00,0x13, + 0x00,0x09,0x00,0x06,0x00,0x67,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x26,0xba,0x1b,0x65, + 0x26,0xba,0x1b,0x65,0x26,0xba,0x1b,0x65,0x26,0xba,0x1b,0x84,0x25,0x27,0x1b,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x59,0x00,0x00,0x00,0xda,0x02,0x83, + 0x03,0x00,0x00,0x75,0x19,0x00,0x00,0x60,0x3d,0x00,0x00,0x00,0xaa,0x01,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x00,0x10,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x4e,0x00,0xa4,0x00,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x46,0x41,0x46,0x41,0x03,0x00,0x9d,0x00,0x6a,0x01,0x4b, + 0x04,0x01,0x00,0x57,0x01,0x28,0x00,0x01,0x00,0xd6,0xc9,0x33,0x01,0x00,0x00,0x00, + 0x00,0x46,0x41,0x46,0x41,0x28,0x00,0x66,0x01,0x32,0x00,0xad,0xff,0xda,0xff,0x76, + 0x00,0x00,0x00,0xe7,0x93,0x59,0x01,0x9c,0x04,0x32,0x00,0xad,0xff,0xda,0xff,0xa8, + 0xce,0x02,0x01,0x28,0x07,0x20,0x09,0x59,0x01,0x14,0x00,0xc2,0xff,0xd7,0xff,0x76, + 0x00,0x00,0x00,0xe7,0x93,0x58,0x01,0x58,0x01,0xc2,0xff,0x00,0x00,0xec,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xa3,0x57,0x01,0x58,0x01,0xd0,0xff,0xe3,0xff,0xf1,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xa3,0x57,0x01,0x57,0x01,0xf7,0xff,0x03,0x00,0xff,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xe3,0x56,0x01,0x9c,0x04,0xf7,0xff,0x03,0x00,0xff,0xff,0xa8, + 0xce,0x02,0x01,0x28,0x07,0x20,0x09,0xe8,0x03,0xf7,0xff,0x03,0x00,0xff,0xff,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x57,0x01,0xd4,0xff,0x10,0x00,0xf7,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x2c,0x00,0x14,0x00,0xfc,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x00,0x00,0x29,0x00,0x00,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xe1,0xff,0x15,0x00,0x02,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xd8,0xff,0xf0,0xff,0xf3,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x23,0x00,0x23,0x00,0x0e,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xd2,0xff,0x1f,0x00,0x0c,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xc5,0xff,0xd6,0xff,0xf4,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x25,0x00,0x1c,0x00,0x00,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x18,0x00,0xf5,0xff,0xff,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xc2,0xff,0xe8,0xff,0x03,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x0c,0x00,0x28,0x00,0xfe,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x03,0x00,0xe1,0xff,0xff,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xf8,0xff,0xe9,0xff,0xf9,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xd0,0xff,0x1d,0x00,0x05,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xf6,0xff,0xe1,0xff,0xf8,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x1d,0x00,0xed,0xff,0xeb,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xde,0xff,0xf3,0xff,0x06,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0x0d,0x00,0x02,0x00,0xf0,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0xfe,0xff,0xea,0xff,0x01,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xe6,0xff,0xf8,0xff,0x04,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xfa,0xff,0xf2,0xff,0xf7,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x11,0x00,0x08,0x00,0x08,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0xc2,0xff,0xeb,0xff,0x02,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x27,0x00,0x05,0x00,0x00,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x19,0x00,0x0c,0x00,0xfc,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0xd3,0xff,0xe9,0xff,0xfe,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x06,0x00,0x07,0x00,0xf2,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0xd5,0xff,0x1a,0x00,0x03,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x09,0x00,0x18,0x00,0x03,0x00,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0x57,0x01,0xef,0xff,0x23,0x00,0xff,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x56,0x01,0x57,0x01,0x01,0x00,0xf7,0xff,0xf3,0xff,0x76, + 0x00,0x00,0x00,0xe7,0xc3,0x57,0x01,0xaa,0x01,0x00,0x00,0xb8,0x00,0x05,0xd0,0x0a, + 0x00,0x01,0x00,0x00,0x00,0x60,0x07,0x00,0x04,0x70,0x08,0x40,0x05,0x18,0x00,0x01, + 0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x46,0x41,0x46,0x41,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xe5,0x00,0xa2,0x00,0x73,0x73, + 0x6f,0x69,0x73,0x4f,0x38,0x36,0x4b,0x4c,0x30,0x31,0x20,0x4f,0x38,0x36,0x4b,0x4c, + 0x30,0x31,0x20,0x4f,0x38,0x36,0x4b,0x4c,0x30,0x31,0x20,0x30,0x20,0x32,0x73,0x73, + 0x6d,0x74,0x66,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x53,0x53,0x43,0x41,0x4c, + 0x20,0x50,0x49,0x31,0x32,0x51,0x53,0x4b,0x46,0x30,0x36,0x56,0x4d,0x30,0x30,0x33, + 0x46,0x46,0x46,0x46,0x46,0x52,0x31,0x34,0x4d,0x38,0x44,0x30,0x31,0x44,0x30,0x31, + 0x53,0x31,0x34,0x53,0x41,0x33,0x2f,0x49,0x31,0x32,0x51,0x53,0x4b,0x4c,0x30,0x31, + 0x56,0x4d,0x30,0x30,0x33,0x46,0x46,0x46,0x46,0x46,0x52,0x31,0x34,0xff,0xdb,0x00, + 0x84,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02, + 0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x04,0x03,0x03,0x02,0x03,0x05,0x04,0x05,0x05, + 0x05,0x04,0x04,0x04,0x05,0x06,0x07,0x06,0x05,0x05,0x07,0x06,0x04,0x04,0x06,0x09, + 0x06,0x07,0x08,0x08,0x08,0x08,0x08,0x05,0x06,0x09,0x0a,0x09,0x08,0x0a,0x07,0x08, + 0x08,0x08,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x04,0x02,0x02,0x04,0x08,0x05,0x04, + 0x05,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, + 0x08,0x08,0x08,0xff,0xc0,0x00,0x11,0x08,0x0b,0xd0,0x0f,0xc0,0x03,0x01,0x22,0x00, + 0x02,0x11,0x01,0x03,0x11,0x01,0xff,0xc4,0x01,0xa2,0x00,0x00,0x01,0x05,0x01,0x01, + 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04, + 0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03, + 0x05,0x05,0x04,0x04,0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, + 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, + 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, + 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, + 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, + 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, + 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, + 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0x01,0x00,0x03,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04, + 0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x11,0x00,0x02,0x01,0x02,0x04,0x04,0x03,0x04, + 0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, + 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, + 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, + 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, + 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, + 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, + 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, + 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xda,0x00,0x0c,0x03,0x01, + 0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xfe,0x15,0xec,0x27,0x9b,0x03,0x68,0x86, + 0x7b,0x88,0xd4,0xc8,0x79,0x3c,0xaf,0xa0,0xf5,0xa5,0xd4,0xee,0xa7,0x96,0x66,0x79, + 0x84,0x31,0x16,0x0a,0x56,0x35,0xe7,0x23,0x03,0x05,0x4f,0x73,0x4c,0x64,0x68,0x55, + 0xa4,0x8d,0x19,0xe4,0x60,0xc5,0x59,0x57,0xf7,0x80,0x0e,0xad,0x8f,0x4a,0xa5,0x78, + 0xd3,0xac,0x7e,0x73,0xfc,0xb7,0x48,0xd9,0xd9,0x13,0x75,0x4c,0x0e,0x40,0xec,0x6b, + 0x5a,0x56,0x8b,0x76,0xd8,0xa7,0xb6,0xe5,0x5b,0xcb,0x91,0x72,0x8b,0x10,0x49,0x9a, + 0xe2,0x32,0x59,0x97,0x1c,0x36,0x7a,0x67,0xdc,0x7f,0x5a,0xc6,0x69,0x84,0x51,0x29, + 0x96,0x24,0x17,0x2e,0x08,0x90,0x96,0xe8,0x33,0xd4,0x0f,0x6a,0x7d,0xdd,0xfb,0x99, + 0x66,0x91,0x96,0x74,0x47,0x60,0xe1,0x07,0xf0,0xf1,0xfe,0x26,0xb3,0x1f,0xf7,0xa5, + 0x5a,0x42,0x17,0x92,0xcc,0x1b,0xa6,0x08,0xcf,0x5a,0xd9,0x69,0xea,0x38,0xbe,0xdb, + 0x8b,0x31,0x4d,0xea,0xe2,0x32,0x8c,0x7e,0x63,0xf3,0x7b,0x53,0x99,0xd9,0xc2,0x48, + 0xb2,0x14,0xc8,0xc7,0xb1,0x3e,0x87,0xf5,0xa8,0xc7,0xef,0x44,0x86,0x42,0x25,0x7c, + 0x64,0x16,0x24,0x02,0x3d,0xa9,0xc1,0x62,0x88,0xb1,0x07,0xcc,0x21,0x70,0x14,0x8e, + 0x09,0xc7,0x5f,0xd6,0xb3,0xb5,0xda,0x46,0xb1,0x6e,0xde,0x45,0x9b,0x74,0x2d,0x29, + 0x8e,0x4d,0xe7,0x9c,0x20,0x03,0xe5,0x07,0xbf,0xcd,0x57,0x62,0xb8,0x8d,0x54,0x5a, + 0x95,0x77,0x53,0x21,0x90,0x10,0x00,0x39,0x1e,0xe7,0xa8,0xe0,0xd6,0x51,0x21,0xc3, + 0x29,0x2a,0x50,0x90,0x48,0x50,0x7b,0x0e,0xbe,0xd5,0x0a,0xca,0x70,0x14,0x64,0xe4, + 0x6d,0x04,0x73,0xf4,0xa6,0xe7,0x74,0x6a,0xa5,0x65,0x66,0x69,0xb6,0xa5,0x2b,0x26, + 0xf5,0x48,0xe0,0x07,0xe5,0x11,0x8f,0x98,0x15,0x07,0xee,0xf3,0xda,0xb3,0x6e,0x6e, + 0x24,0xb8,0x9c,0xca,0xe4,0x8c,0x03,0x81,0x8e,0xf4,0xc1,0xf7,0x31,0x8c,0x91,0x91, + 0x80,0x69,0xa4,0x8d,0xa3,0xe7,0x79,0x30,0x70,0x73,0xc6,0x6b,0x36,0xee,0x65,0x29, + 0x5d,0x0e,0x21,0x4e,0xc5,0x00,0xbb,0x91,0x92,0x48,0xc6,0x29,0x1b,0x18,0xdc,0x0f, + 0x07,0x92,0xa4,0xd3,0xbe,0xeb,0x85,0x0a,0x4e,0x46,0x5c,0x16,0xe0,0xd3,0x24,0x3b, + 0x8e,0x55,0x36,0x8e,0x80,0x9e,0x70,0x3d,0x2a,0x6e,0xaf,0x70,0x77,0xb6,0xa3,0xfe, + 0x53,0x86,0xd8,0x23,0x5c,0xe5,0x80,0x27,0xe5,0xc7,0xf8,0xd3,0x3e,0x67,0xc0,0xcf, + 0x3d,0x17,0x8e,0xb4,0xe5,0xf2,0xc3,0xfd,0xe2,0x40,0x18,0xe4,0x75,0xa6,0xee,0x57, + 0x2a,0x4e,0xd5,0xc9,0xc6,0x73,0xd2,0x9a,0xf2,0x13,0xdb,0x50,0x07,0x24,0x00,0x01, + 0x5f,0xe2,0xcf,0x7f,0x6a,0x92,0x45,0x28,0xa8,0x81,0x48,0x56,0xf9,0x81,0x6e,0xf8, + 0xeb,0x4c,0x2c,0x79,0x51,0xb1,0x80,0x38,0x0d,0x8c,0x64,0x53,0xb7,0xf9,0x8c,0xa6, + 0x4c,0xb9,0x55,0xc2,0xfb,0x7e,0x14,0xac,0x17,0x5b,0x75,0x00,0x33,0xe5,0x39,0x01, + 0x01,0x38,0xce,0x38,0x1f,0x5f,0xca,0x85,0x8c,0xb9,0xf2,0xf2,0x23,0xc8,0xc3,0x36, + 0x3a,0x73,0xff,0x00,0xea,0xa9,0x0e,0x76,0xaa,0xb1,0xf3,0x3e,0x52,0x00,0x66,0xfb, + 0xbf,0x41,0x50,0xee,0x0d,0xb4,0xc8,0xbb,0xbd,0xb3,0xd7,0x9e,0xd4,0xed,0xd1,0x15, + 0x64,0x9e,0xa4,0x8d,0x9c,0xe0,0x47,0xc2,0xae,0xc3,0x93,0xd7,0xde,0x83,0xe5,0x85, + 0xe3,0x73,0xa9,0x20,0xe0,0xf1,0xcd,0x26,0x64,0xd9,0x86,0xc6,0x47,0x20,0xe7,0xef, + 0x0f,0x42,0x29,0x8c,0x40,0x6c,0x01,0x9c,0x9c,0x92,0x3b,0x52,0xb8,0x9b,0xb2,0xbb, + 0x1c,0x0b,0x49,0x8d,0xc4,0x28,0x04,0xf2,0x4f,0x27,0xd8,0x52,0x86,0x5d,0xa8,0x54, + 0x67,0xae,0x09,0x1d,0x29,0x8a,0x03,0x07,0xcb,0x28,0x5e,0xa4,0x9e,0xd4,0xae,0xe5, + 0xd0,0x0c,0x15,0x8d,0x4e,0x40,0x03,0xa5,0x17,0xbe,0xe1,0x7d,0x2e,0x3f,0xe6,0x90, + 0x9c,0x97,0xda,0x48,0xdc,0x47,0x6f,0x4a,0x8b,0xa9,0xce,0xdd,0xa0,0x73,0xc9,0x3f, + 0x35,0x48,0xac,0x8d,0xbf,0x71,0x65,0x24,0x64,0x11,0xd6,0x9b,0x82,0xc0,0x05,0x0c, + 0x79,0xce,0x0f,0x6f,0x6a,0x1e,0x81,0x7d,0x04,0xf9,0x9c,0xaf,0x4c,0x93,0xc0,0x14, + 0xec,0xb4,0x85,0x54,0x16,0x2d,0x93,0x80,0x47,0x5a,0x06,0x41,0x2e,0xa4,0x8c,0x8c, + 0xe4,0x0e,0x83,0xd0,0xd1,0x9d,0xe0,0xc8,0xcc,0x01,0x3d,0x40,0xa5,0xd7,0x52,0x55, + 0xed,0xa8,0xbf,0xbc,0x8c,0xe6,0x37,0x2a,0x40,0xc1,0x1d,0x87,0x14,0xd4,0x0a,0x10, + 0xe5,0x72,0xac,0x38,0x70,0x3a,0x73,0x4f,0x45,0x52,0x15,0xc6,0x36,0x9e,0xcc,0x79, + 0xe2,0x98,0x5d,0xc0,0x2e,0x1f,0x60,0x03,0x21,0x40,0xe8,0x3d,0x05,0x3e,0x81,0xe6, + 0xc7,0xb2,0x92,0x54,0x1d,0xa3,0xe5,0xe4,0x7a,0x8f,0x7f,0xd2,0x90,0x30,0x63,0x1a, + 0x94,0x43,0x8e,0x4e,0x49,0xf9,0xbe,0xb4,0x63,0x77,0xcc,0x18,0x73,0xc6,0x09,0xf9, + 0x89,0xfa,0x53,0x57,0x69,0x47,0x3c,0x96,0x18,0x03,0x1e,0x94,0x5f,0xb0,0xef,0xad, + 0xd1,0x20,0xdb,0x87,0x00,0x17,0x19,0x00,0x00,0x39,0xfc,0x0d,0x1b,0x54,0x71,0x11, + 0x63,0xb5,0xb9,0x0d,0xc1,0x14,0xd5,0x3c,0xe7,0x83,0x96,0xe7,0xb6,0x29,0x15,0x24, + 0x32,0x32,0xae,0x43,0xfd,0xe5,0xc9,0x03,0x23,0x3e,0xb4,0x3d,0x5d,0xc2,0xfb,0x0e, + 0x72,0x09,0x03,0x2c,0xbb,0x41,0x1c,0xf6,0xa5,0x68,0x1f,0xe4,0x72,0x8b,0x86,0x19, + 0x52,0x0f,0xde,0xa5,0x62,0xa1,0xbf,0x78,0xae,0x24,0x27,0x70,0x6c,0xf2,0x0f,0xb8, + 0xee,0x2a,0x47,0x92,0x69,0x7c,0xb5,0x57,0x2a,0x8a,0x70,0xa8,0xa3,0xee,0xd3,0x69, + 0x12,0xd5,0xc7,0x47,0x85,0x0f,0x1c,0xc9,0xfb,0x89,0x14,0x3a,0xae,0x30,0x48,0xcf, + 0x7e,0xf5,0x66,0x0b,0xd9,0xa3,0x9a,0xdb,0x71,0x59,0x46,0x4a,0xa6,0x1b,0x1b,0x47, + 0x40,0x6a,0xa9,0x2c,0x42,0xac,0xef,0xe6,0x72,0x63,0x50,0xc7,0x86,0x1e,0xa4,0xf6, + 0xa8,0xa4,0xc1,0x90,0x00,0xaa,0x13,0x1b,0x71,0x8e,0xc0,0x74,0x5f,0x7a,0x4a,0xef, + 0x51,0xe8,0x8e,0xdc,0xbc,0x33,0xda,0xc8,0xca,0xb1,0x73,0x21,0x80,0xc4,0xf9,0xc0, + 0x39,0xce,0x57,0xf5,0xe9,0x5c,0xc4,0x8d,0x0c,0x72,0x3b,0xc5,0x2a,0xa4,0xc9,0x23, + 0x2b,0x46,0xe7,0xef,0x9f,0x51,0xec,0x79,0xc5,0x6e,0xd9,0x18,0xf1,0xb3,0xfd,0x25, + 0xa6,0x03,0x2b,0x95,0xce,0xd1,0x8f,0xbc,0x7d,0x3f,0xfa,0xf5,0x8f,0x7c,0xb6,0xd0, + 0x48,0xcc,0xd6,0xed,0x35,0xe0,0x38,0x62,0x41,0x0a,0x33,0xdf,0xeb,0xc8,0xa7,0x77, + 0xaa,0x7b,0x99,0xa7,0x77,0x66,0x55,0x77,0x61,0x12,0x4a,0x98,0x18,0x93,0x25,0x07, + 0x04,0x0f,0x6a,0x0a,0x87,0x4c,0x83,0x20,0x85,0x8e,0x1d,0x40,0xe4,0x73,0x50,0x2c, + 0x4f,0x2c,0x71,0xc2,0x5d,0x41,0x27,0xe6,0x52,0x4e,0x57,0x9e,0xa0,0x7a,0x55,0x9b, + 0x86,0x8d,0xa4,0x8d,0x62,0x66,0x8a,0x75,0x52,0x03,0x38,0xe0,0x8f,0x4f,0xf3,0xeb, + 0x49,0xf9,0x6e,0x17,0x4f,0x61,0x53,0x74,0x67,0x0e,0x9f,0x28,0x3f,0x2a,0xae,0x32, + 0x3e,0xa6,0x9a,0xd7,0x06,0x59,0x63,0x0d,0x18,0x87,0xf8,0x94,0xe7,0x9c,0xe7,0xbf, + 0xa5,0x31,0x58,0x3b,0x85,0x74,0x29,0x91,0x87,0x20,0x7d,0xdf,0x43,0xc7,0x5e,0x94, + 0x2b,0xec,0xdc,0xe8,0xa6,0x50,0xc7,0x00,0xb7,0x7f,0x72,0x2a,0x5e,0xe1,0xab,0x5a, + 0x16,0x04,0x4a,0x65,0x70,0xc2,0x4c,0x96,0x24,0x9e,0xb9,0xf7,0x22,0x88,0xb7,0xda, + 0xaa,0x38,0x71,0x1e,0x09,0x0a,0xc7,0xa9,0x51,0xc9,0x1e,0xd4,0x92,0x43,0x24,0x0d, + 0x14,0x8c,0xa2,0x30,0x64,0x05,0xd4,0x3e,0x30,0x31,0xc7,0xf9,0x35,0x34,0x33,0x99, + 0xa7,0xf2,0xfc,0xd6,0x9e,0x4d,0xc2,0x4d,0xa4,0x0e,0x83,0xb5,0x2f,0x24,0x2b,0xb7, + 0xb0,0xcf,0x2a,0xdc,0xf9,0x53,0x30,0x95,0x56,0x40,0xc4,0x44,0x8d,0x92,0xa3,0xd4, + 0x8a,0x96,0x39,0x7c,0xdb,0x99,0x23,0x01,0xfe,0x45,0x2e,0x18,0x0f,0x6a,0x58,0xde, + 0x39,0x66,0x5b,0x7b,0x68,0x9c,0xdc,0x33,0xf9,0x8c,0xc4,0x60,0xa7,0xb7,0x34,0x93, + 0x5b,0x5f,0x2a,0x32,0x49,0xba,0xd5,0x43,0x15,0xda,0xbf,0x79,0x81,0x39,0x04,0x0e, + 0xd4,0xf4,0xb8,0xf4,0xd9,0x16,0xa0,0x92,0xdc,0x84,0xcc,0x52,0xcb,0x74,0xc3,0x00, + 0x6d,0x23,0x8f,0x6f,0xa5,0x0b,0x05,0xcc,0xb7,0x50,0x42,0x92,0xe5,0x5f,0x0a,0xcc, + 0xe7,0x86,0x6f,0xad,0x58,0xb5,0xd3,0x75,0x2d,0x46,0xee,0x0d,0xb1,0x38,0x8c,0xa9, + 0x53,0x29,0x60,0x0a,0x26,0x3d,0x7b,0x9e,0x7a,0x57,0x57,0x6f,0x65,0x67,0xa5,0x5a, + 0x40,0xb2,0x34,0xb7,0xae,0xe5,0xe4,0x50,0xc7,0x04,0x10,0x78,0x19,0xef,0x9f,0x4e, + 0xd4,0x45,0x5d,0xe8,0x24,0xef,0xa2,0x30,0xf4,0x9f,0x0f,0xea,0x17,0x3a,0x88,0x16, + 0xf1,0xaa,0x07,0x61,0xe6,0xb4,0xad,0xb7,0x68,0xe8,0x70,0x07,0x7e,0x6b,0xa4,0xd3, + 0xfc,0x31,0x6f,0x61,0x24,0xf6,0x77,0xb1,0xc7,0x75,0x2c,0x92,0x09,0x0b,0x4a,0xc5, + 0x55,0x54,0x02,0x57,0x68,0xef,0xdb,0x35,0x1b,0x6a,0xb6,0xdb,0xae,0x3e,0xcf,0x23, + 0xad,0xe0,0x8c,0x31,0x07,0x80,0xdc,0xf7,0xf7,0xeb,0x58,0x57,0x9a,0xd5,0xcd,0xcc, + 0x83,0xed,0x2a,0xeb,0x1b,0xa1,0x50,0xc5,0xf8,0x04,0x63,0xe6,0x1e,0x86,0xa2,0x2d, + 0xbd,0xc7,0x66,0xec,0x96,0xe7,0x5c,0x35,0x6b,0x6f,0xb4,0xfd,0xa5,0xd1,0xe3,0x98, + 0x2e,0x52,0x40,0xa7,0x8c,0x00,0x36,0xe4,0xf5,0x1f,0xca,0xb9,0x0d,0x43,0x5e,0x9a, + 0x70,0xb6,0xd6,0x10,0x18,0xe2,0x70,0xcc,0x54,0x00,0x4a,0x8c,0xfa,0xf7,0xe7,0xf9, + 0xd6,0x50,0x13,0x39,0x91,0x56,0x58,0xa5,0xf2,0xd0,0xb0,0x77,0x3c,0x36,0x7f,0xaf, + 0x4a,0xd1,0x86,0x35,0xcd,0xbb,0x3c,0x66,0xdd,0x59,0x48,0x56,0x88,0xe3,0x67,0xf8, + 0x0e,0x2a,0xb6,0xb1,0x32,0x76,0x10,0x79,0x79,0xb7,0x22,0x22,0xa3,0x76,0x19,0xc7, + 0x6e,0x32,0x78,0xad,0x9d,0x36,0xd9,0xe7,0x0d,0xe7,0xcd,0x30,0x00,0x92,0x11,0x9c, + 0x8d,0xab,0xd0,0x7f,0x3e,0x95,0x4e,0x29,0xa0,0x82,0x48,0xe4,0x4f,0xde,0xc6,0x8d, + 0xb3,0x32,0x0e,0x65,0x38,0xe7,0x1e,0xd5,0x5e,0x4b,0x99,0x2f,0x6e,0x26,0xde,0x8f, + 0x1c,0x6c,0xc0,0xb9,0x88,0x10,0xff,0x00,0x40,0x3f,0xcf,0x41,0x54,0xda,0x4a,0xec, + 0x97,0x25,0x77,0x62,0xed,0xcd,0xec,0x5a,0x6b,0xcf,0x6b,0x68,0x3c,0xe4,0x99,0xc2, + 0xbc,0x6b,0x1e,0xed,0xa3,0x8c,0x12,0x3b,0x1a,0x8e,0x4d,0x46,0x4b,0x7b,0x88,0x61, + 0x9a,0x39,0xa6,0x8c,0x21,0x76,0x8c,0x9d,0x9b,0xc1,0x1e,0xbe,0x94,0xfd,0x3e,0xc2, + 0x69,0xad,0x1e,0xee,0x14,0xbc,0x59,0x4b,0x31,0x40,0xb1,0x90,0xcd,0x83,0x8c,0x32, + 0xd7,0xa8,0x78,0x27,0xe1,0x86,0xa3,0xae,0xde,0x5b,0xdd,0xcb,0x71,0x3c,0xd1,0xaa, + 0xed,0x05,0xa3,0x18,0x0b,0xdb,0x23,0xd7,0xde,0x93,0x9c,0x52,0xe6,0x93,0x45,0xc6, + 0x17,0x69,0x27,0xad,0xcf,0x1e,0xb7,0x5d,0x42,0xe9,0x64,0xfb,0x3d,0x92,0x4b,0xb8, + 0x8c,0xa8,0x3c,0xc4,0x01,0xfe,0x13,0xf4,0xeb,0x5e,0xa1,0xe0,0xbf,0x00,0x6a,0x1a, + 0xc4,0x52,0x35,0xee,0x85,0x85,0x59,0x03,0x19,0x6e,0x98,0xa6,0xf5,0x23,0x82,0x07, + 0x7e,0xb5,0xf4,0x3f,0x86,0x3e,0x12,0x68,0x9a,0x2c,0xcb,0xaa,0x5f,0x5a,0x23,0xea, + 0x88,0x58,0xb3,0xa8,0xdc,0xb8,0x07,0x90,0x46,0x70,0x7b,0x76,0xaf,0x58,0x58,0x61, + 0x78,0x9a,0x31,0x68,0x2c,0xec,0x43,0x2b,0x18,0xd8,0x1c,0x13,0xd4,0x00,0x3a,0x81, + 0xde,0xb8,0x6a,0xd4,0xbb,0xb4,0x7a,0x19,0xce,0x0d,0x2b,0x23,0xcd,0xbc,0x31,0xf0, + 0x8b,0x45,0xb3,0x4b,0xc9,0xf5,0x2d,0x3a,0x3b,0xbb,0x56,0x11,0xb4,0x05,0x80,0x5f, + 0xb2,0xb8,0xeb,0x8c,0x1f,0xbb,0xef,0xeb,0x5e,0xb9,0x67,0x63,0x00,0x48,0x12,0x11, + 0xb6,0x55,0x24,0x29,0x74,0x03,0x6f,0x61,0x83,0xe9,0xc5,0x5c,0xb3,0x37,0xa8,0xb3, + 0xc3,0x1c,0xa4,0x70,0x1b,0x3e,0x83,0x3d,0x3d,0xc5,0x5e,0x88,0x91,0x28,0x2d,0x1a, + 0xed,0x03,0xc9,0xda,0x46,0x33,0xee,0x00,0xe9,0x59,0x36,0xde,0xa9,0xff,0x00,0x5e, + 0x85,0xc6,0xc9,0xde,0x3f,0xd7,0xa0,0xb8,0x97,0xce,0x26,0xe0,0xa4,0x51,0x48,0xc1, + 0x09,0xc6,0x76,0x01,0xe9,0x8a,0x59,0x50,0xf9,0xe9,0xfb,0xa6,0x8e,0x35,0x1b,0x43, + 0x81,0x96,0x38,0xf7,0xa8,0x56,0x40,0xd0,0x47,0x0a,0x2c,0x92,0x66,0x4c,0xb3,0x10, + 0x46,0xd1,0x9e,0xc4,0xfd,0x0d,0x5e,0x51,0xe5,0xaf,0xdb,0x18,0x42,0x57,0x19,0x0a, + 0x09,0xc8,0x1f,0x4e,0xf4,0x6a,0x95,0xec,0x16,0xd6,0xef,0x64,0x32,0x19,0x87,0x98, + 0xf3,0x2b,0x8d,0xca,0xa1,0x76,0x3c,0x78,0x52,0x47,0x62,0x7f,0xad,0x6a,0x71,0x38, + 0x12,0x05,0x03,0xcc,0x00,0x30,0x00,0x9d,0xbe,0xa7,0x27,0xd3,0x34,0xb6,0x76,0x71, + 0x4b,0x03,0x79,0xd2,0xee,0x04,0x16,0x25,0x81,0x24,0x7b,0x81,0xd4,0xd3,0xe6,0x8a, + 0x3b,0x93,0x6e,0x6d,0x75,0x03,0x02,0xa1,0x2c,0xea,0x23,0x38,0x6c,0x7a,0x7d,0x78, + 0xa4,0xfb,0xbd,0xc3,0x56,0x90,0xfb,0x78,0xc8,0xf3,0x65,0x69,0xee,0x65,0x70,0x32, + 0x08,0x40,0xd8,0x03,0xbf,0xd3,0x8a,0xb2,0x18,0xc8,0x8a,0x77,0x95,0x66,0x19,0x06, + 0x38,0xf0,0x7e,0xa0,0x0e,0x29,0x63,0x89,0x23,0x64,0x6b,0x42,0xe9,0x70,0xc3,0xac, + 0x83,0x3b,0x7d,0x82,0xfa,0x53,0xfc,0xc9,0x62,0x46,0x04,0xa1,0x81,0x50,0x33,0x61, + 0x7e,0x60,0xb9,0xea,0xa3,0xf5,0xac,0x6c,0xad,0x6d,0x02,0x4e,0xda,0xbd,0x8d,0x4b, + 0x74,0x72,0xdf,0xba,0x26,0x49,0x62,0x19,0x0f,0x9c,0x97,0xe0,0x75,0x23,0xf9,0x54, + 0xe9,0x3f,0x96,0x24,0x68,0xf7,0xa4,0x6e,0x30,0xa7,0x1c,0x1f,0x50,0x4d,0x67,0xaa, + 0x83,0x19,0x9a,0x09,0xe4,0x5d,0x8d,0x84,0x84,0x28,0x05,0x81,0xee,0x7e,0xb5,0x6d, + 0x70,0x89,0x0c,0xf7,0x4e,0xbe,0x56,0xe0,0xcf,0x18,0x1c,0x37,0xf8,0x74,0xeb,0x54, + 0xae,0xde,0xf7,0x1b,0xd1,0xb4,0xd7,0xcc,0x58,0xee,0x66,0x95,0xfc,0x87,0x7c,0x32, + 0x28,0x0c,0xe4,0x7d,0xff,0x00,0x6c,0x7e,0x55,0x65,0x0a,0xf9,0x8e,0x1d,0xbe,0xd8, + 0x80,0x6d,0x46,0xc6,0x4a,0xf1,0xc8,0xf6,0x1c,0xd5,0x29,0x0c,0x32,0xcb,0xbe,0x68, + 0xbc,0x98,0x54,0x92,0xdb,0x57,0x27,0x9e,0x80,0x55,0xad,0x90,0xee,0x40,0xff,0x00, + 0x69,0x40,0x06,0xd0,0x43,0x61,0x4f,0xd5,0x47,0xf8,0xd4,0xe8,0xd6,0xaf,0xfe,0x09, + 0x31,0x7a,0x3b,0x34,0xd1,0x20,0x8d,0xbe,0xca,0x18,0x34,0xd1,0x5d,0x96,0x3b,0x42, + 0x63,0x2e,0x07,0xad,0x53,0x69,0xac,0x45,0xd1,0x8a,0xe6,0x63,0x3c,0xee,0xdb,0x52, + 0x43,0x90,0x48,0x03,0x38,0x23,0xb6,0x29,0xaa,0x91,0x34,0xf1,0xc9,0x09,0xbc,0x68, + 0xa2,0x20,0x2e,0xe4,0x2a,0x54,0x93,0xce,0x3d,0x47,0x5a,0xb4,0xc9,0x15,0xcb,0x19, + 0x77,0x5b,0x24,0x6e,0xce,0x50,0x0f,0xbc,0x47,0xb8,0xed,0xd3,0x8c,0xd3,0xbb,0x7b, + 0x83,0xb3,0x56,0x44,0xfb,0xdf,0x1b,0xcb,0x90,0x48,0x0b,0x19,0x07,0xe6,0x20,0xf1, + 0x82,0x07,0xe3,0x53,0x44,0x2d,0xe2,0x97,0x6b,0x96,0x98,0x9e,0x58,0x4a,0x84,0x80, + 0x71,0xd8,0xfe,0x55,0x25,0x9b,0x18,0x49,0x40,0xca,0x51,0x41,0x20,0x30,0x3f,0x37, + 0xf8,0xd3,0xd5,0x58,0x98,0x21,0x32,0xfe,0xf5,0xb2,0x57,0x2a,0x46,0xe2,0x79,0xe4, + 0xd6,0x5a,0xad,0xcd,0x6d,0xd5,0x12,0x45,0x05,0xc2,0x4a,0x9e,0x7b,0xca,0x24,0xc8, + 0x90,0x01,0xce,0xe5,0xf7,0xfd,0x2a,0x47,0xb6,0x92,0x69,0x59,0x2c,0xed,0xf1,0x8e, + 0x46,0x0e,0x00,0xf7,0x19,0xef,0xd6,0x9e,0x66,0x85,0xd2,0x4b,0x9b,0x97,0x73,0x6d, + 0x1a,0x9d,0x9b,0x46,0x19,0x8f,0xf5,0xad,0x08,0x6c,0xcd,0xc2,0x45,0x24,0xcd,0x21, + 0x02,0x30,0xf9,0x56,0x2a,0x5c,0x9f,0x51,0xed,0xcd,0x3b,0x59,0xdc,0x69,0xdd,0xe9, + 0xa9,0x96,0xe1,0x43,0x4f,0x0c,0x52,0x38,0x90,0x20,0x70,0xc1,0x0a,0x8e,0x9d,0x30, + 0x6a,0x58,0x04,0x4c,0xb1,0xf9,0x13,0x94,0x62,0xe1,0xca,0x67,0x24,0x9f,0x5c,0x1e, + 0xf5,0xb0,0xd1,0xac,0x0f,0x1c,0x2c,0xad,0x32,0x95,0xdd,0xb1,0x81,0xe3,0xd4,0x66, + 0xaa,0xc3,0x11,0x9a,0xec,0x4a,0x55,0x8c,0x4a,0x33,0x93,0xf2,0xed,0xe3,0xa6,0x3b, + 0xd0,0xae,0xb7,0x12,0x77,0x76,0x4f,0x52,0xd9,0x64,0x9c,0xdc,0xdc,0x46,0x85,0x7e, + 0x65,0x2d,0x1b,0xf5,0x93,0xdf,0x1e,0xb5,0x35,0xb4,0x8f,0xb6,0x56,0x04,0xc7,0xe6, + 0x86,0x50,0x1c,0x10,0x10,0x67,0xa7,0xd6,0xa0,0x33,0xc9,0x20,0x32,0x46,0x6e,0x1d, + 0x90,0x9c,0xb0,0x4c,0x02,0x3a,0x62,0xa2,0x86,0x49,0x64,0x64,0x96,0x26,0x26,0x31, + 0xc2,0xaa,0x0c,0x14,0x3e,0xa4,0x1e,0xf5,0x3d,0x3b,0x06,0xb7,0xba,0xd4,0x0a,0xcc, + 0xb1,0x3b,0xbc,0x52,0xb9,0x51,0xb5,0x19,0x46,0x77,0x73,0xd0,0x9f,0x4e,0x2b,0x5a, + 0xda,0xdb,0xcd,0x02,0x43,0x19,0x2a,0xa7,0x20,0x16,0xc6,0x78,0xe8,0x05,0x40,0x91, + 0x32,0xc7,0x11,0x57,0x31,0x6d,0x62,0xc5,0xbc,0xdc,0x93,0x9f,0x5f,0xd6,0xb6,0x7c, + 0xa0,0x86,0x38,0x87,0xde,0x03,0x71,0x75,0x5e,0x06,0x7a,0x80,0x6a,0x1b,0x57,0xb2, + 0x60,0xf4,0x6f,0xb6,0x83,0x1d,0x84,0x65,0x43,0xc8,0x0a,0xa9,0xf9,0x16,0x43,0x92, + 0x3d,0x87,0xa5,0x49,0x13,0x12,0x03,0xc3,0x1c,0x6b,0x1b,0x95,0xc1,0x27,0x1c,0x63, + 0x9c,0x8f,0xce,0xa7,0x68,0x8c,0x71,0x34,0x4a,0x16,0x42,0x41,0x21,0x08,0xf9,0x9f, + 0x8e,0xb9,0xf6,0xa6,0x44,0xa6,0xdc,0xc6,0xaf,0xe6,0x3c,0xb8,0x20,0x06,0x00,0x67, + 0xdc,0xd4,0xad,0x37,0x1a,0xbd,0xda,0x5b,0x0e,0x40,0x51,0x23,0x58,0x83,0x95,0x2e, + 0x59,0x25,0xd9,0xc0,0x18,0xe4,0x1a,0x6a,0x5a,0x5b,0xee,0x73,0x25,0xcb,0x21,0x07, + 0x7a,0xa4,0x40,0x8f,0x34,0xe7,0xa1,0x3e,0xde,0xd4,0xbe,0x60,0x62,0x12,0x5d,0xe6, + 0x47,0x24,0x04,0x50,0x76,0xa8,0x15,0x64,0x24,0x4c,0xd1,0x31,0xdf,0x34,0xaa,0x0b, + 0x21,0x04,0x8c,0x7d,0x07,0xa7,0x34,0xaf,0x6d,0xc4,0x9a,0x76,0x4b,0x61,0x66,0xb7, + 0x61,0x27,0xda,0x21,0x51,0x24,0x2c,0x32,0x11,0x46,0x08,0x6f,0x7f,0x7a,0x8e,0x18, + 0xaf,0x1d,0xe2,0x87,0x6a,0x99,0x08,0x3b,0x41,0xc6,0x19,0x7d,0x2b,0x46,0xdd,0x7e, + 0x6f,0x24,0xc8,0x50,0x48,0x01,0x5c,0x1e,0x5b,0xfd,0x9c,0x76,0xab,0xcf,0x04,0x8f, + 0x19,0x8f,0x6c,0xa2,0x3d,0xc4,0xb0,0x55,0xc0,0x03,0xbf,0x34,0xd7,0x92,0x06,0xf4, + 0xb5,0x8c,0x3b,0x98,0x5f,0xc9,0x05,0x98,0x46,0x77,0x63,0x69,0x41,0xf2,0xf1,0xd8, + 0xfa,0x55,0x24,0xb0,0x9a,0xe7,0xcb,0xc4,0xad,0x96,0x62,0x08,0x20,0x2b,0x37,0xb8, + 0x3d,0xeb,0xa9,0x96,0x03,0xe4,0x34,0x6f,0x14,0x6b,0x1b,0x2e,0xd8,0xcb,0x92,0x0f, + 0x5e,0x32,0x69,0x2d,0xed,0x84,0x09,0x9d,0xd2,0x48,0xe5,0x71,0x2b,0x81,0xfe,0xa9, + 0xc7,0x65,0xf6,0xe9,0x43,0xbb,0x57,0x46,0x4e,0xc9,0x9c,0xab,0xe9,0x91,0xa5,0xc8, + 0x99,0xa0,0x95,0x95,0x57,0x12,0x12,0x39,0x71,0xed,0xed,0x55,0xe7,0xb1,0x49,0x6d, + 0xef,0x3c,0x88,0xfc,0xc6,0xf9,0x70,0xa1,0x70,0x47,0xbe,0x3b,0x62,0xbb,0x06,0x80, + 0x4c,0xa1,0x56,0x59,0x95,0x88,0x3b,0x5c,0x2e,0x48,0x3e,0xf4,0xe1,0x6f,0x1c,0x4e, + 0xad,0x34,0xd2,0xc0,0xcc,0xbc,0xca,0x0f,0x41,0xec,0x3d,0xea,0xe3,0x7b,0x5d,0x82, + 0x4d,0x6a,0x70,0x56,0x3a,0x0c,0xc7,0xed,0x6c,0xd1,0xcb,0x3e,0x79,0x8d,0x33,0xd7, + 0xb6,0x0f,0xa7,0x4a,0xe4,0x75,0xbd,0x13,0x4f,0xb5,0x84,0x5c,0xbb,0xb3,0xba,0x80, + 0xa2,0x24,0x5f,0xbc,0x7b,0x86,0x35,0xed,0xf1,0x89,0x04,0x2b,0x6d,0xe4,0xc8,0x1a, + 0x42,0x50,0x3c,0x68,0x77,0x20,0xec,0x4f,0xe7,0x5e,0x63,0xe3,0x0b,0x35,0xb7,0xd3, + 0x2f,0xd9,0x10,0x5b,0xf9,0x2b,0xb8,0x31,0x7c,0xb3,0x1c,0xf7,0x1e,0xf9,0xaf,0xb6, + 0xe1,0x28,0x73,0xe2,0xa1,0x1b,0xea,0xdd,0x8f,0x9a,0xe2,0x1a,0xce,0x96,0x1a,0x53, + 0x4b,0x64,0xd9,0xf2,0xaf,0x89,0x2e,0x61,0xb9,0x9a,0x25,0x8a,0x05,0x81,0x2d,0xe4, + 0x25,0x63,0x50,0x06,0x38,0xe7,0x35,0xcc,0xb2,0x31,0x55,0xb9,0x1e,0x60,0x57,0x25, + 0x55,0x00,0xe0,0x0f,0x5c,0x56,0x97,0xdb,0x56,0x27,0x95,0xaf,0x1e,0x21,0x79,0x2b, + 0xef,0x78,0x99,0x0f,0xee,0xfd,0x85,0x56,0xb6,0xd8,0x43,0x34,0x2d,0x22,0x96,0xea, + 0x4b,0x67,0x3e,0xc3,0xd0,0x73,0x5f,0xdc,0xd9,0x75,0x38,0xd3,0xa3,0x1a,0x71,0x7a, + 0x24,0x7f,0x20,0xe3,0xaa,0xca,0x75,0x5d,0x49,0xbd,0x58,0xb1,0x46,0x52,0x16,0x95, + 0x0c,0x41,0xcf,0x47,0x55,0xc6,0x0f,0x61,0x9a,0x8f,0xfd,0x60,0x39,0x8f,0x0e,0x83, + 0x00,0xb3,0x60,0x63,0xb9,0x35,0x79,0x23,0x90,0x85,0x8c,0x2c,0x6a,0xca,0x4b,0xa9, + 0x23,0x21,0xbd,0x8d,0x56,0xc4,0x85,0x55,0xa6,0x89,0x1c,0x4c,0x19,0x98,0x29,0xca, + 0x81,0xe9,0x5e,0x82,0xd3,0x46,0x79,0xb7,0xd6,0xec,0xad,0x2c,0x71,0x43,0xb9,0x6e, + 0x5b,0xef,0x36,0xe2,0x4a,0xe7,0x77,0xbe,0x7d,0x29,0xb1,0xbf,0x97,0x2c,0xd1,0x42, + 0x60,0x94,0x0c,0x15,0xc8,0xe4,0x91,0xd8,0x03,0xf8,0x54,0xf2,0xc4,0xd2,0xed,0x46, + 0x78,0xd0,0x07,0x00,0x10,0x00,0x03,0x9e,0xf5,0x4a,0x79,0x5a,0x07,0xfb,0x43,0xca, + 0x7c,0xdd,0xc5,0x87,0x00,0xf7,0xe8,0x2a,0x2a,0xcd,0x25,0xa9,0xb5,0x3b,0xc9,0xd8, + 0xa9,0x73,0x71,0xb0,0xba,0xc7,0x19,0xf2,0xc2,0x92,0xe4,0x8e,0x5b,0x3d,0x4e,0x3b, + 0x0a,0xe4,0x6e,0x89,0x80,0x30,0x81,0xcc,0xae,0x18,0x2a,0xbc,0x87,0x84,0x5c,0xf2, + 0x6b,0x6e,0xfe,0x48,0xcc,0xb7,0x0b,0x14,0xc6,0x62,0xca,0x37,0x6e,0xc8,0x31,0x82, + 0x7d,0x3d,0x6b,0x9e,0x9c,0xc6,0x8c,0xd0,0x22,0xc9,0x33,0x91,0x9f,0x90,0xf2,0x4e, + 0x3b,0x9a,0xf2,0xab,0xe2,0x22,0xde,0x87,0xbf,0x81,0xa3,0x6e,0x86,0x14,0x92,0x49, + 0x34,0xf2,0x62,0xe1,0x99,0x09,0x2c,0x02,0x81,0x83,0xcf,0x51,0x51,0x35,0xd4,0x50, + 0xc4,0x89,0x71,0x26,0xc8,0x99,0x4b,0x02,0x14,0x6d,0x53,0xfd,0xd3,0xdf,0x9a,0x1d, + 0xfe,0x79,0x22,0x8d,0x23,0x24,0x10,0x36,0xa8,0xc9,0x8f,0xf1,0xf4,0xe6,0xb0,0xae, + 0x15,0x71,0x38,0xfb,0x9d,0x94,0x96,0xc8,0x18,0xf6,0xf4,0xed,0x5e,0x3d,0x5a,0xd6, + 0x7a,0x6c,0x7d,0x4d,0x0a,0x2a,0x4a,0xdd,0x0d,0xcf,0xed,0x0b,0x67,0x89,0x52,0x38, + 0xf6,0x4c,0x79,0x67,0x2b,0xc1,0x20,0xf6,0xa7,0x25,0xc2,0x4b,0x16,0x51,0x97,0xcb, + 0x2c,0x18,0x02,0x39,0x2b,0x9e,0x40,0xae,0x59,0x8e,0xc8,0xfc,0xe8,0xf2,0xcd,0x90, + 0x58,0x32,0x1d,0xcb,0xce,0x3f,0x2a,0xb5,0xe6,0x4b,0x1c,0x91,0xf9,0x1b,0x38,0x00, + 0x31,0x75,0x1f,0x2f,0x1d,0xbd,0xab,0x9d,0x57,0x77,0xd8,0xe9,0x96,0x0d,0x25,0xa1, + 0xd0,0x3d,0xc2,0x22,0xa3,0x79,0x42,0x71,0x9e,0x40,0x53,0x8c,0xf5,0xe7,0xf0,0xa9, + 0xad,0x9a,0xde,0x46,0x3e,0x74,0x72,0xec,0x60,0x64,0x20,0x92,0x18,0x8e,0xa3,0x8a, + 0xc3,0x17,0x8f,0xb4,0xf9,0xb2,0x61,0x49,0xc0,0x2a,0xb8,0x0a,0x7e,0x9f,0xd6,0xb5, + 0x61,0xb9,0x53,0x1b,0x48,0x64,0x96,0xe1,0x11,0xb0,0xca,0x0f,0xce,0x47,0xfb,0x27, + 0xf1,0x15,0xdb,0x4e,0x69,0xbb,0xdc,0xe4,0xa9,0x45,0xa4,0x5f,0x4f,0x2c,0xc6,0xe5, + 0x81,0xde,0xee,0x1d,0x57,0x39,0x2b,0xef,0x5b,0x88,0xa8,0x16,0x36,0x69,0x43,0x86, + 0x60,0xc5,0x81,0x3f,0x37,0x6e,0x07,0x63,0x59,0x6b,0x25,0xbf,0x99,0x6b,0xb1,0x64, + 0x89,0x9d,0x19,0xd8,0xe3,0x88,0xf9,0xe8,0x4d,0x6c,0xc4,0x1d,0x84,0x46,0x23,0x10, + 0x66,0x04,0x72,0xa4,0xee,0x39,0xee,0x7d,0x79,0xaf,0x4e,0x8e,0xbb,0x9e,0x4e,0x2a, + 0x4d,0x2b,0x33,0x4e,0x06,0xc4,0x9b,0x80,0x2c,0x19,0x48,0xdc,0x0f,0x2a,0x0f,0x62, + 0x2a,0xc4,0x7e,0x5a,0x02,0x92,0xc7,0x1c,0x51,0x2e,0x46,0x58,0x72,0x78,0xf4,0xa6, + 0xc1,0x6e,0xcf,0x98,0xa4,0x91,0x43,0x2a,0x86,0x63,0x8c,0x63,0xdf,0x3f,0x81,0xab, + 0x70,0x46,0x50,0xa7,0x96,0x18,0x2b,0x36,0x00,0x60,0x09,0x7f,0xf3,0x9a,0xf5,0x69, + 0xed,0xcc,0x8f,0x0e,0xac,0x92,0xd8,0x8f,0x7f,0x9b,0xb2,0x64,0x6c,0x42,0xe3,0xe4, + 0x52,0x0f,0xc8,0x07,0xa8,0xfc,0xaa,0x78,0xa0,0x67,0x69,0x11,0x01,0x91,0x80,0xc8, + 0x52,0xa7,0xe5,0x1d,0x73,0x9a,0x91,0x6d,0xe0,0x42,0xad,0x82,0x58,0x12,0xd9,0x07, + 0x18,0xe7,0xa0,0x14,0xf9,0x0f,0x98,0x10,0x99,0xa5,0xb7,0x42,0xc0,0x15,0x66,0xc8, + 0x61,0x9e,0x87,0x1d,0xeb,0xa5,0x6a,0xb4,0x38,0xe5,0x34,0xf4,0x43,0x7c,0xa8,0x58, + 0x2e,0xd7,0x99,0xc3,0xf3,0x80,0xd8,0xcb,0x75,0xc9,0xa1,0x11,0x5c,0x07,0x2f,0xb4, + 0x29,0xdb,0x21,0x23,0x18,0xe3,0xd2,0x9c,0x30,0x8a,0xec,0x77,0x37,0xca,0x43,0x48, + 0xbd,0xbe,0xa0,0x54,0xab,0xe5,0x2c,0x4a,0x1c,0xa8,0x4d,0xd8,0x2b,0xbb,0x39,0xcf, + 0xf5,0xaa,0xb5,0xcc,0x5c,0x99,0x54,0x05,0x2b,0xbc,0x33,0xc8,0xa0,0x65,0x50,0x8e, + 0x87,0xd4,0x9a,0x0c,0x32,0xce,0x63,0x48,0xc3,0xc5,0x32,0x92,0x4a,0xa3,0x00,0x1b, + 0x8e,0xbe,0xe7,0xad,0x4a,0x58,0x49,0x0b,0x34,0x78,0xda,0xac,0x15,0x8b,0x1e,0x83, + 0xfc,0xe6,0x9e,0xe3,0xe7,0x67,0x3b,0x63,0x40,0xdb,0x95,0x76,0xe7,0x8f,0xc3,0xf1, + 0xaa,0x5a,0x3b,0xfa,0x87,0x33,0x5a,0x91,0xac,0x03,0xcc,0x01,0x63,0x81,0xa4,0x75, + 0x19,0x3e,0x84,0x7b,0x74,0xcf,0x4a,0x8e,0x34,0x76,0x94,0x01,0x12,0xec,0x04,0xe0, + 0x8c,0x02,0xc3,0xb8,0x14,0xbb,0xa3,0x2e,0x5e,0x34,0x96,0x58,0x40,0xc9,0x20,0x60, + 0xa8,0xf5,0xc5,0x3d,0x18,0x7c,0x87,0x63,0xa3,0x02,0x19,0x0a,0x9e,0xb9,0x1e,0xff, + 0x00,0x5a,0x2d,0x6d,0x3a,0x8d,0xb7,0xd4,0x8a,0xe0,0x19,0x9a,0x1c,0x08,0xe2,0x65, + 0x24,0x92,0x17,0xee,0xaf,0xa6,0x3b,0x9e,0xb4,0x60,0x22,0xbb,0x4c,0xa8,0xc0,0x80, + 0x76,0x97,0x3c,0x0e,0xdc,0xfa,0xd5,0x97,0xb9,0x56,0x05,0x4b,0x15,0x0a,0xd9,0x6d, + 0xcb,0x8c,0x1f,0x4c,0xfb,0xd0,0x52,0x20,0xa1,0x23,0x5f,0x33,0x7f,0x24,0x8e,0x8a, + 0x7a,0xf1,0x50,0xed,0x60,0xe6,0x76,0x49,0x95,0x11,0x4f,0x9f,0xbc,0x46,0xe0,0x9c, + 0xb3,0x33,0x72,0x00,0x23,0xa6,0x2a,0x48,0x95,0x84,0x2b,0x95,0x2c,0x81,0x98,0x30, + 0xc7,0x1c,0x74,0x6c,0x55,0x81,0x39,0x28,0xc2,0x28,0xd9,0xca,0x7c,0xae,0x49,0x23, + 0x03,0xfb,0xc7,0xf3,0xa6,0x48,0x91,0xed,0x63,0x0c,0xa5,0xa0,0x27,0x6a,0x93,0xfc, + 0x27,0xbf,0xe7,0x4f,0x96,0xca,0xe0,0xe4,0xdb,0xd4,0xaf,0x3a,0xb9,0x91,0x8c,0x6e, + 0x25,0x84,0xf2,0x59,0x46,0x02,0x8f,0x42,0x29,0xca,0xaf,0x1a,0x2c,0x0c,0x18,0xf3, + 0xf3,0x33,0x8c,0xe5,0x7d,0xaa,0x79,0x3f,0xe5,0xbd,0xc3,0xa1,0x57,0x2a,0x0e,0xc8, + 0xc8,0xda,0x38,0xc0,0xcf,0xbd,0x43,0x8f,0x2d,0x08,0x4f,0x94,0x90,0x36,0x86,0x27, + 0x29,0x9e,0xd9,0xac,0x5a,0x6b,0x46,0x3e,0x66,0xd5,0x81,0xd8,0x9d,0xb1,0xab,0x80, + 0xaa,0x70,0x48,0x51,0x93,0xef,0x50,0x94,0x32,0xb5,0xc3,0x86,0x45,0x8c,0x31,0x08, + 0xb9,0x3d,0x31,0x4a,0xdb,0x64,0x91,0x4f,0x98,0xe8,0x89,0xc1,0xe7,0x2c,0xc7,0x1d, + 0xcf,0xa7,0xf8,0xd4,0xd2,0x33,0x81,0x2b,0x31,0x8c,0x60,0x85,0x52,0x46,0xde,0x4f, + 0xa6,0x2a,0x24,0xb4,0xb0,0xd6,0x9b,0x10,0xbe,0xd4,0x89,0x26,0x21,0x5e,0x3c,0x6d, + 0x27,0xae,0x46,0x31,0xd2,0x9e,0x21,0x8e,0x48,0xd1,0x58,0xfe,0xf0,0x49,0x94,0x60, + 0x00,0x18,0xc7,0x43,0xf9,0xd4,0x65,0xe4,0x85,0xdc,0x3a,0x3b,0x28,0x20,0x31,0x55, + 0xeb,0xcd,0x58,0x78,0xe4,0xd8,0x89,0x16,0xd3,0x03,0x12,0x49,0x51,0xca,0x9c,0xfa, + 0xd4,0xc9,0x36,0x92,0x29,0xbb,0x34,0x54,0x71,0x1f,0x99,0x20,0x50,0x59,0xd0,0x82, + 0x1b,0x04,0xee,0xf5,0x18,0xfc,0x2a,0x10,0x8c,0xd8,0x71,0x1b,0x27,0x19,0x55,0x00, + 0x63,0x6f,0xf9,0x35,0x61,0xd8,0xab,0xf9,0x3b,0x40,0x51,0xc8,0x7d,0xc7,0x0d,0xfe, + 0xce,0x7f,0x2a,0x4f,0xb3,0xa4,0x99,0x0d,0x33,0xab,0xa0,0xda,0x06,0xe1,0x84,0xff, + 0x00,0x1a,0xe5,0x95,0xbe,0x24,0x6a,0x9e,0x80,0xa9,0x84,0x90,0x4a,0x16,0x04,0x58, + 0x7c,0xc0,0xe4,0x83,0xb3,0x27,0xb5,0x42,0xc1,0xc8,0xc3,0x32,0xe7,0xd8,0x0f,0x9b, + 0x8f,0x4f,0xeb,0x53,0x15,0x9a,0x2f,0x2d,0x8c,0x42,0x58,0x9b,0x81,0x23,0x01,0xf3, + 0x63,0xb6,0x3d,0x2a,0x32,0xeb,0x87,0x7d,0x87,0x7b,0x0c,0x12,0x4e,0x00,0xe7,0xa0, + 0xa9,0xa8,0x92,0xdc,0xa8,0xbb,0xbd,0x08,0x27,0x8c,0x7e,0xed,0x80,0xf3,0x10,0xaf, + 0x00,0x8f,0x9b,0x77,0xa5,0x66,0xc5,0x2c,0x57,0x38,0x00,0xc6,0xcc,0x8f,0x90,0x54, + 0x8c,0x9f,0x62,0x2b,0x42,0xee,0x45,0xf2,0xb6,0x3c,0x92,0x44,0x8a,0x01,0x2a,0xa4, + 0x9d,0xa7,0x3f,0xc2,0x7f,0x0a,0xa5,0xa6,0x23,0xb5,0xc8,0x22,0x05,0x46,0x70,0x5c, + 0x30,0x00,0x17,0x6f,0x56,0x3d,0xb1,0x5f,0x95,0xf8,0x93,0x8f,0x86,0x1f,0x01,0x39, + 0xc9,0xea,0x8f,0xd2,0xbc,0x34,0xcb,0xe5,0x8a,0xcc,0xa1,0x4f,0xa7,0x52,0xc2,0x16, + 0x17,0xc5,0xe0,0x3b,0xae,0x18,0xec,0x74,0x2b,0x8d,0xe7,0xb0,0xc7,0x4c,0x57,0x98, + 0x7c,0x50,0x96,0x08,0x73,0x69,0x3a,0xf9,0xa4,0x7f,0xad,0x68,0xdb,0x25,0x1b,0x1f, + 0x70,0x11,0xdb,0x91,0x5e,0xb2,0xb7,0x71,0xda,0xcb,0x3c,0xf7,0x8c,0x2d,0x22,0x45, + 0x20,0x3b,0x60,0x2b,0x49,0x8e,0x09,0x3f,0x95,0x7c,0xa7,0xe3,0x1d,0x5a,0xea,0xeb, + 0x5b,0xd4,0xb4,0xf9,0x5a,0x4d,0xe6,0x40,0x23,0x9d,0x48,0x29,0x23,0x60,0x1c,0x81, + 0xd3,0xd6,0xbf,0x88,0x70,0x3f,0xbd,0xae,0xe6,0xdf,0x99,0xfd,0xc9,0x99,0x35,0x47, + 0x0c,0xa9,0xbd,0xb6,0x38,0x0f,0x3a,0x25,0x92,0x65,0x89,0x84,0xea,0xcf,0xb9,0x5d, + 0xc1,0x04,0x2f,0xf7,0x4f,0xd2,0x89,0x1e,0x36,0x45,0xde,0xce,0x54,0x13,0x93,0x8e, + 0x57,0xdb,0x3e,0x9c,0xd4,0xb3,0xc3,0x1e,0x43,0x2c,0x2d,0x14,0xe3,0x3b,0xc1,0x38, + 0xc8,0x3d,0x0f,0xf3,0xa8,0x4c,0x22,0x38,0x1c,0x12,0x77,0x13,0xb4,0x64,0x7d,0xff, + 0x00,0x6c,0xfb,0x57,0xd2,0xd9,0x2b,0x24,0x7c,0x17,0xc2,0xec,0x3c,0xcd,0x24,0x61, + 0x24,0xb7,0xb7,0x4f,0x38,0x9c,0x00,0xdd,0x09,0xed,0x9a,0xa0,0x3c,0xd0,0x5b,0xcd, + 0x55,0x0e,0x41,0x06,0x35,0xfb,0xbf,0x85,0x58,0x69,0x23,0x58,0x41,0x7b,0x96,0xde, + 0xaa,0x40,0x56,0xec,0xa7,0xd0,0xfa,0xe6,0xa1,0x82,0x21,0x6d,0x08,0x66,0x7b,0xab, + 0xc0,0x48,0x90,0x4e,0xe7,0xe6,0x45,0xc6,0x36,0xf3,0xef,0x8a,0x13,0x56,0x2a,0x4d, + 0xdc,0x8a,0x72,0xc1,0xbc,0xc0,0x16,0x67,0x11,0x80,0x14,0x0c,0x79,0x7e,0xe4,0xd5, + 0x95,0x99,0x15,0x00,0x86,0x35,0x91,0xdc,0xe2,0x32,0x0f,0x04,0xf7,0xa6,0xec,0x01, + 0xd5,0x54,0xb1,0x04,0x16,0xce,0x0f,0x4f,0xf6,0xaa,0x05,0x22,0x68,0xce,0xd8,0xde, + 0x68,0xce,0x43,0x32,0x1c,0x6d,0x1e,0xdf,0xe3,0x55,0xa6,0xc4,0x4a,0xe9,0xde,0xe6, + 0x94,0x91,0xf0,0x24,0x90,0xbb,0x31,0x5d,0xcd,0xb4,0x63,0x77,0xae,0x69,0x77,0xa1, + 0xfb,0x0c,0x91,0xbf,0x93,0x21,0x7d,0x9b,0x31,0x93,0x27,0xb0,0xa8,0x7f,0xd1,0xe2, + 0x8a,0x01,0xbd,0xd6,0xe4,0x00,0x42,0x64,0x9c,0x8f,0x73,0x52,0xdb,0x30,0x56,0xdf, + 0x11,0x67,0x85,0x8e,0x63,0x95,0x9b,0x07,0x77,0x5e,0x3d,0x29,0xe9,0xbb,0x33,0x6d, + 0x26,0xd2,0x64,0x87,0xc9,0x32,0xc9,0x07,0xce,0x42,0xbe,0x11,0x40,0xc6,0x70,0x7f, + 0x8b,0xd3,0xbd,0x3a,0x1f,0x35,0x65,0x3e,0x6e,0x50,0x6f,0x3b,0x4a,0x81,0xc7,0xa0, + 0x02,0x9b,0x29,0xb9,0x31,0xc9,0x00,0x78,0x83,0x74,0x46,0x50,0x01,0x1f,0x5c,0xd4, + 0x51,0x4b,0x22,0x85,0xb3,0x04,0x24,0x9b,0x77,0x49,0x23,0x0f,0xbb,0xeb,0xc9,0xa4, + 0xae,0xd6,0xa3,0x4e,0xd2,0x44,0x97,0x11,0x5c,0x16,0x7b,0x8f,0x2b,0xe4,0x38,0x65, + 0x2c,0xf9,0x04,0x7a,0x11,0xeb,0xcd,0x3d,0x67,0xb7,0x51,0xe6,0x0c,0x25,0xa1,0x3b, + 0xd9,0x19,0x39,0xdc,0x3f,0xfd,0x54,0xe4,0x8e,0xcc,0x25,0xb7,0x94,0x26,0xf2,0xcb, + 0x13,0xb9,0xd8,0x92,0x4f,0xb0,0x35,0x04,0xb2,0x49,0x88,0x0c,0x33,0x08,0x95,0x9c, + 0xa1,0xca,0x83,0x90,0x7b,0x1f,0xd6,0xb2,0xde,0xe9,0x93,0x76,0x95,0xdd,0xae,0x68, + 0xb5,0xea,0xcc,0x24,0x36,0xf0,0xc7,0x24,0x45,0x43,0xc8,0xa4,0x6d,0xe3,0xb1,0xaa, + 0xd2,0x9d,0xf7,0x2c,0xd8,0x2c,0x5d,0x41,0x85,0x40,0x23,0xaf,0x50,0x05,0x2c,0x51, + 0x96,0x6d,0xf1,0x2a,0x2f,0x99,0xf2,0x8c,0x31,0x6d,0xd8,0xed,0xed,0x4d,0x8e,0x06, + 0x2d,0x6f,0x1a,0xbc,0x92,0x30,0x39,0x0e,0x3f,0x80,0x0e,0xe6,0xa5,0xd9,0xbb,0x83, + 0xba,0x63,0xe1,0x46,0x69,0xe5,0x9a,0x78,0xda,0x06,0x0c,0x32,0x8a,0x32,0x08,0xe9, + 0x91,0xed,0x56,0xad,0x63,0x94,0xf9,0xb3,0xc6,0x72,0x44,0xa0,0x81,0x90,0x0b,0x0a, + 0x7a,0xa4,0x39,0x96,0x45,0x99,0xb6,0xc8,0x32,0x58,0x2f,0xe8,0x7d,0x0d,0x48,0xf0, + 0xa6,0x03,0x16,0x22,0x00,0x01,0x27,0x6f,0x47,0xec,0x09,0xfc,0xeb,0x16,0xd0,0xd7, + 0x46,0x87,0xfd,0x94,0x47,0x6f,0x77,0x71,0x1c,0x91,0xc5,0xe6,0xb6,0xf5,0x8d,0xdc, + 0xb1,0x42,0x0e,0x2a,0x78,0x62,0x90,0x96,0x86,0xed,0x0a,0x66,0x3f,0x33,0x70,0x18, + 0xe9,0xd0,0xd4,0x42,0xce,0xea,0x5b,0x81,0x31,0x36,0xf3,0xdb,0xc6,0x40,0x08,0x10, + 0x92,0xe7,0xdc,0xf3,0xc5,0x74,0x32,0x24,0x89,0x14,0x6d,0x24,0x61,0xe7,0x41,0xe5, + 0xa3,0x60,0x00,0xd9,0xf5,0x03,0xb8,0xcd,0x28,0xdd,0x26,0x9e,0xac,0xcd,0xeb,0xae, + 0xc6,0x65,0xba,0x5b,0x42,0x19,0x9a,0x44,0x46,0x72,0x24,0x91,0x51,0x72,0x1d,0x80, + 0xe9,0xc7,0x4c,0x8a,0xd9,0x8a,0xd9,0xa4,0x32,0x4e,0xb1,0x85,0x24,0xee,0x11,0x81, + 0x80,0xca,0x7a,0xfc,0xdd,0xa9,0x91,0x59,0x5c,0xc9,0x3d,0xb0,0xb4,0x16,0xf1,0x95, + 0x04,0xc9,0x1c,0x83,0xa9,0xf5,0x1f,0xe1,0x5b,0x16,0xb1,0x5c,0x25,0xb8,0xb6,0x95, + 0x5c,0xc6,0x37,0x10,0x50,0x83,0x93,0x9e,0xa6,0xa9,0x35,0xab,0x47,0x3c,0x93,0x7d, + 0x35,0x26,0x8e,0xdd,0x21,0x87,0xcb,0x57,0xdd,0xe6,0x2e,0x47,0x6d,0xbe,0xd9,0xfc, + 0xaa,0xe4,0x20,0x45,0x6d,0x6b,0x04,0xa5,0xa7,0xdb,0xd4,0xe0,0x1c,0x8c,0xf0,0x29, + 0x0a,0x04,0x31,0xc3,0x02,0x03,0x0a,0xae,0xec,0x93,0xf7,0x8e,0x2a,0x78,0x36,0x2b, + 0x2a,0xc4,0xb9,0x68,0xc7,0xcc,0x48,0xe7,0xf2,0xad,0xe3,0xbe,0xda,0x09,0x6a,0x4e, + 0xd6,0xf2,0xc7,0xf6,0x97,0xf3,0x67,0x95,0x37,0xe6,0x31,0x8c,0x28,0xc8,0xe9,0x8a, + 0xa3,0x26,0xc6,0x50,0xcf,0x1c,0xa1,0x49,0xce,0xd2,0x00,0x0b,0xee,0x6a,0xca,0xc9, + 0x21,0x25,0x8b,0x48,0xc1,0x38,0x40,0x73,0xb4,0x9a,0x89,0xd9,0x8a,0xe2,0x48,0x56, + 0x71,0x8e,0x65,0x63,0x85,0x1e,0xbc,0x56,0x91,0xb5,0xcc,0x56,0xd6,0x65,0x6f,0xdc, + 0x90,0x92,0xa2,0x9d,0xbb,0xb1,0xf2,0x9f,0xbc,0x3d,0x45,0x4a,0x84,0xc6,0xca,0xfb, + 0x0a,0xa9,0x6c,0x90,0xe3,0x9f,0x4e,0x0f,0xe5,0x40,0xb3,0x44,0x75,0x96,0x39,0xd9, + 0x6d,0x99,0x37,0x15,0x23,0x2a,0xa4,0x0e,0xd5,0x2b,0xda,0x99,0x00,0x43,0x77,0xbc, + 0xb0,0xcb,0x48,0xc0,0xe7,0x23,0xa0,0x51,0xd3,0x15,0xa2,0x5d,0xcd,0x55,0xd2,0xd4, + 0xaa,0x65,0x96,0x4b,0xbd,0x87,0x60,0x66,0xf9,0x40,0x04,0x0c,0x83,0xdf,0x35,0x78, + 0x40,0xbc,0x34,0xcd,0x1c,0x4e,0xa7,0x6a,0x92,0x79,0x23,0xfd,0x91,0xf8,0x0a,0xb1, + 0x65,0x60,0x8d,0x12,0x4e,0xb1,0xfc,0xce,0xa0,0xab,0x33,0x0c,0x9e,0x7a,0x81,0xf8, + 0x1a,0x97,0xec,0xd1,0x97,0x71,0x00,0x69,0x25,0x2b,0x97,0x66,0x03,0x93,0xeb,0x9e, + 0xdd,0x2a,0xd4,0x93,0x76,0x44,0x36,0xd9,0x5b,0x2e,0xe9,0x03,0xba,0x94,0x50,0x48, + 0xc2,0x8e,0x01,0x3e,0xa7,0xd6,0x9d,0x1a,0xa2,0xc5,0x2b,0x06,0x59,0x58,0x0c,0x15, + 0x61,0xc9,0x3f,0xec,0x9e,0xd4,0xcb,0x99,0x26,0xb5,0x8c,0xab,0x8f,0xdc,0xed,0x0f, + 0x21,0x2f,0xf2,0x9f,0xfe,0xbd,0x62,0x0d,0x59,0x27,0x45,0x9d,0x10,0xa9,0x04,0x90, + 0x58,0xf2,0x4f,0x6a,0x7d,0x35,0x13,0x76,0x76,0x7b,0x97,0x67,0x76,0xdc,0x54,0xc8, + 0x64,0x98,0x00,0x00,0x03,0x38,0xf5,0xe3,0xbd,0x50,0xbb,0xba,0xf2,0x24,0xde,0x44, + 0x91,0xae,0x15,0x91,0x82,0x74,0x3d,0xc0,0xa8,0x2e,0x59,0xed,0xdd,0xa5,0x0c,0x8c, + 0x76,0x83,0x80,0x4e,0x14,0xd6,0x65,0xce,0xa8,0x24,0x84,0xc9,0x24,0xed,0x3b,0x29, + 0x04,0xa2,0x13,0x83,0x83,0xcf,0xe1,0x59,0x37,0x61,0x68,0x9e,0xba,0x15,0xaf,0x35, + 0x49,0xe7,0xf3,0xad,0xde,0x36,0x85,0x96,0x5d,0xcc,0xcc,0x06,0x5c,0x1c,0x72,0x3d, + 0xbe,0xb5,0x89,0x71,0xe7,0xa3,0x98,0x5a,0x7d,0xca,0x49,0x25,0x88,0x00,0x01,0xe8, + 0x00,0xa7,0xdc,0xcb,0x25,0xc3,0x17,0x57,0x31,0xa1,0x6d,0xfb,0x1b,0xab,0x8e,0xc0, + 0x54,0x11,0xb1,0x11,0x83,0xfe,0xa7,0x73,0x6d,0x55,0x24,0x1d,0xbd,0xf1,0x49,0x34, + 0xb5,0x63,0xd5,0xbd,0x0a,0xf7,0x11,0xc2,0x8a,0xd2,0x4d,0xfb,0xb9,0xe4,0x1b,0x30, + 0x0e,0x03,0x7a,0x60,0x76,0x3c,0xd4,0x12,0xc0,0x8b,0x34,0x68,0xfe,0x6e,0x59,0x44, + 0x8c,0xb1,0x9c,0x83,0x8e,0xa3,0x77,0x6a,0xb3,0x33,0x29,0x02,0x25,0x73,0xb8,0x36, + 0xe7,0x2c,0xbf,0x78,0x7a,0xe4,0xfd,0x2a,0xb0,0x8c,0x80,0x17,0xf7,0x92,0x31,0x7c, + 0x17,0x5c,0x7c,0xc0,0xf4,0x18,0xed,0x4e,0xcb,0x4b,0x6e,0x68,0xec,0xba,0x12,0x44, + 0xc9,0x00,0x9e,0x45,0x66,0x50,0xf2,0x86,0xda,0xa4,0x10,0xa0,0xf6,0x04,0xfa,0xd2, + 0xbc,0x49,0x83,0x22,0x4d,0x80,0x5f,0x6c,0x79,0x6c,0x10,0x3b,0x91,0xed,0xd6,0x96, + 0x3f,0x2a,0x25,0x4f,0x2d,0x8a,0x80,0xdb,0x55,0x58,0x70,0x4e,0x3a,0x91,0xe9,0xcd, + 0x32,0x68,0xf6,0x42,0x1b,0xf7,0x7d,0x76,0xb1,0xc1,0x25,0x89,0xa5,0xb3,0xb0,0x35, + 0xa6,0xa5,0x84,0x0d,0x75,0x23,0x24,0x92,0xb4,0xa4,0x28,0x25,0x98,0x6d,0x04,0x8e, + 0xc7,0xd6,0xa3,0xf3,0x21,0x91,0xd1,0x04,0xc2,0x1b,0x86,0x23,0x2c,0x46,0x01,0xfa, + 0x0f,0x4e,0xb4,0x05,0xf3,0xad,0xed,0x5a,0x45,0x24,0x97,0xf9,0x40,0x6c,0x63,0x1d, + 0xf1,0x53,0x00,0x26,0x12,0x6d,0x30,0xc8,0x8a,0x31,0xf3,0x2f,0xdc,0xfa,0x1e,0xf9, + 0xc0,0xa1,0x19,0xbd,0x75,0xe8,0x4f,0x04,0x32,0x36,0xd6,0xb8,0x48,0x8d,0xb8,0x62, + 0x7c,0xc6,0x07,0x73,0x0c,0xf4,0xcd,0x58,0xdb,0xf6,0x89,0x54,0x5a,0xc7,0x21,0xf3, + 0x01,0x91,0x83,0x11,0x94,0x3d,0x87,0xd6,0xaa,0x2d,0xd2,0x98,0xbe,0xfe,0x55,0x53, + 0x74,0x7b,0xf3,0x8c,0x77,0x03,0xde,0xb4,0xa1,0xd4,0xa3,0x96,0xd5,0x25,0x68,0xe2, + 0x32,0xf9,0x7e,0x66,0xd5,0xf9,0x5f,0x3d,0x32,0x69,0x5f,0xaa,0x07,0xb5,0xd3,0x32, + 0x27,0x8d,0x96,0x1d,0x8a,0xac,0x8c,0x55,0x89,0x62,0x37,0x64,0x7f,0x43,0x59,0xd6, + 0xec,0x9b,0x06,0x0c,0x9f,0x3b,0x01,0xe6,0xe7,0x86,0xcf,0x18,0xc7,0xb5,0x5f,0x92, + 0xe6,0x43,0x12,0x3d,0xbb,0xb4,0x77,0x04,0x12,0xa0,0x10,0x46,0xd2,0x3a,0xe3,0xe9, + 0x9a,0xaf,0x10,0x84,0x79,0x51,0x43,0x2e,0xe6,0x61,0xe6,0x04,0xce,0x00,0x03,0xad, + 0x36,0xf5,0x6e,0xc4,0xea,0xf4,0x8f,0x62,0xb5,0xca,0xc8,0xf6,0xe2,0xe1,0x23,0x99, + 0xd9,0x72,0xb3,0x39,0x38,0xf2,0xc0,0x3d,0x73,0xef,0x53,0x79,0x93,0x1f,0x20,0x6e, + 0x06,0x39,0x41,0x20,0x85,0xce,0x17,0xdc,0xf5,0xcf,0x02,0x97,0xe5,0x25,0x21,0x45, + 0x61,0x10,0x70,0xcc,0x15,0xb2,0xa7,0xda,0xa6,0x89,0x03,0x3b,0x48,0x91,0xca,0x96, + 0xc8,0x4a,0xa6,0xf6,0xe5,0xce,0x3a,0x00,0x3a,0x51,0x7b,0x59,0x31,0xb6,0x9b,0xd3, + 0xcb,0xfe,0x09,0x55,0xa6,0xb5,0x99,0xe3,0x8b,0x63,0x6c,0xdd,0x96,0x2a,0x39,0x60, + 0x07,0x7c,0x74,0xef,0x42,0x08,0x19,0x03,0xa3,0xcf,0xb0,0x92,0xc0,0xc8,0x3a,0x7d, + 0x6a,0x41,0x33,0x47,0x34,0x51,0xc7,0x69,0x6c,0x9b,0xc1,0x62,0xca,0xdd,0x0e,0x3b, + 0xfb,0xd4,0x6a,0x7f,0x73,0xe6,0x4d,0x91,0x2b,0x36,0x0e,0x07,0xde,0xc7,0x6c,0x76, + 0xa3,0x44,0x0e,0xca,0xf7,0xb0,0xa5,0xa2,0x59,0x63,0x97,0xcd,0x56,0x97,0x70,0xca, + 0xa9,0xe5,0x97,0xdf,0xf2,0xa6,0xee,0x8a,0x58,0xc3,0x09,0x95,0x22,0x47,0xdc,0x14, + 0x75,0x45,0x27,0xaf,0xbd,0x24,0x5f,0xe9,0x12,0xf9,0x8f,0x6d,0x10,0x86,0x3c,0xb6, + 0xd5,0x60,0x0b,0x9f,0x5c,0xfe,0x26,0x88,0x08,0x75,0x69,0xd1,0x4f,0x96,0xe4,0x01, + 0x12,0xae,0x72,0x33,0xcf,0x26,0x85,0x65,0xa2,0x0d,0x5a,0x4a,0xfa,0x0f,0x0e,0x67, + 0xca,0x98,0x88,0x55,0x18,0x32,0x84,0xf9,0x40,0xf4,0x35,0x3a,0x3d,0xc2,0x4b,0x0c, + 0x51,0x24,0x72,0x92,0xa4,0xe7,0x83,0xb4,0x7a,0x81,0x50,0x2a,0x48,0xb1,0xcf,0x09, + 0x69,0x56,0xdd,0xa4,0xca,0x8c,0xf2,0xfc,0x74,0x2c,0x3a,0x63,0xf2,0xa6,0x6d,0x90, + 0x48,0xd2,0x24,0x8e,0xee,0x06,0xc6,0xca,0xf5,0x1f,0xe3,0x43,0xba,0xd1,0x82,0xbb, + 0xd5,0xad,0x42,0xe5,0x25,0x26,0x2b,0x79,0xa4,0x67,0x0c,0x0b,0x87,0x2a,0x42,0x8c, + 0x7f,0x08,0x35,0x2d,0xb7,0x9a,0x11,0x67,0x55,0x65,0x50,0xe5,0x52,0x22,0xbb,0xb2, + 0xb5,0x18,0x68,0x67,0x5f,0x29,0x9d,0xd8,0xc4,0xc4,0x22,0xb1,0xc0,0x43,0xf4,0xa7, + 0x20,0x94,0x22,0xb9,0x93,0x64,0x4e,0x76,0x07,0xdb,0x90,0x00,0xe3,0xad,0x0f,0x55, + 0xa0,0x2b,0x37,0x74,0xf4,0x1a,0xac,0xc7,0x6b,0x66,0xdd,0x4a,0x92,0xc5,0x72,0x73, + 0xf4,0xc5,0x43,0x2c,0x8a,0xec,0xd2,0x59,0xa8,0x90,0x13,0x87,0x3b,0x49,0x23,0xe9, + 0x57,0x66,0x60,0x21,0x40,0x22,0x57,0xc0,0xc0,0x75,0x19,0x2d,0xcf,0x4f,0xfe,0xbd, + 0x54,0x8d,0x02,0x4a,0x90,0x81,0x24,0x40,0xb6,0xd0,0x43,0x60,0x0c,0xff,0x00,0x78, + 0x51,0xe6,0x0d,0xbb,0xea,0x2a,0x79,0x5b,0xf0,0xd2,0x63,0xe5,0x23,0x68,0x1f,0x77, + 0xdb,0x8f,0xad,0x35,0x83,0x11,0x94,0x94,0x21,0x1f,0x38,0x0e,0xd8,0x0a,0x71,0x8e, + 0x2a,0x49,0xad,0xe3,0x90,0xbc,0x0b,0xb8,0xa2,0xf0,0xa5,0x49,0x39,0x6f,0x7f,0x5a, + 0x8e,0x50,0xd2,0x24,0x47,0x70,0xf3,0x46,0x3e,0x52,0xbf,0x73,0x07,0xa0,0xa5,0x16, + 0xba,0xb0,0x6b,0xb8,0xf8,0x98,0x22,0xc1,0xe5,0x4a,0x53,0x19,0x66,0x7c,0xf4,0x3d, + 0xf2,0x69,0x81,0xcc,0xb1,0xef,0x52,0x24,0x99,0xdc,0xa2,0xaf,0x96,0x09,0x41,0xea, + 0x4f,0xe7,0x4f,0x13,0x2a,0x48,0x87,0xf7,0x8c,0xa7,0x90,0xaa,0xb9,0xc3,0x51,0x13, + 0x3b,0x4d,0x0a,0x3e,0xc3,0x2b,0x6e,0x24,0x2f,0x46,0xfa,0x0e,0xd4,0xfa,0x05,0xde, + 0x8d,0xbb,0xa0,0x49,0x62,0x8d,0xcc,0x6a,0x90,0xbc,0xc9,0xd3,0x04,0xfe,0xf3,0xd7, + 0x1e,0x94,0x4b,0x22,0xf9,0x6b,0x13,0xac,0x29,0x83,0xe6,0x7c,0xc3,0x87,0x27,0x1d, + 0x08,0xeb,0xd4,0xd5,0xd8,0x96,0xdd,0x81,0xda,0xe8,0xcc,0x48,0x09,0x18,0xfb,0xdd, + 0x7b,0xd5,0x18,0xe0,0x7b,0x48,0xe3,0x0a,0x0b,0x2a,0xb9,0xc0,0x00,0x12,0xbc,0xf4, + 0xcd,0x1a,0x27,0xa8,0x3b,0xa5,0x77,0xb0,0xfc,0x19,0x21,0xf3,0x87,0x33,0x3b,0x95, + 0x64,0x03,0x05,0x31,0xfe,0x35,0x18,0x68,0xe2,0x94,0xcd,0x02,0xc1,0x24,0x85,0x72, + 0xc4,0xb1,0xc6,0x07,0x40,0x3d,0xf9,0xa7,0xae,0x6d,0xf6,0x3e,0xff,0x00,0xb1,0x93, + 0x23,0x79,0x8b,0x27,0x40,0x71,0xc6,0x33,0x51,0xac,0x62,0x40,0xee,0x8a,0x81,0x1a, + 0x5c,0x82,0xca,0x40,0x63,0x8e,0x83,0xf2,0xa2,0xf6,0xdc,0x7a,0xb7,0x74,0x04,0x87, + 0x59,0xca,0xf9,0x6b,0x38,0x01,0xca,0xbb,0x1e,0x7d,0x87,0xbd,0x33,0x31,0xca,0xed, + 0xbe,0x31,0x80,0xca,0x3e,0x62,0x78,0x24,0xe3,0x9f,0x5a,0x4d,0x81,0x5c,0x16,0x10, + 0xa0,0x20,0x86,0x2a,0x09,0x1b,0xb3,0xd6,0x9d,0xc3,0xb4,0x78,0x54,0x13,0x28,0x20, + 0x85,0xcf,0x3f,0x53,0x4d,0xe9,0xb0,0xae,0xd2,0xbb,0x7a,0x93,0x4b,0x1e,0x47,0x98, + 0x8c,0xab,0x29,0x7d,0xa4,0xf6,0x2b,0xeb,0x9f,0x4f,0xc2,0x95,0x76,0x79,0xf1,0xaa, + 0x31,0x85,0x50,0xe0,0xab,0xa0,0xc1,0xf7,0x07,0xf3,0xa8,0x50,0x18,0x03,0x34,0xea, + 0x64,0x79,0x86,0x54,0x80,0x48,0x5e,0x7a,0x8a,0x7a,0xb2,0x42,0xb1,0x79,0xe4,0xf0, + 0x09,0x60,0x72,0xd9,0xe3,0xb1,0xa2,0xcf,0xa0,0x24,0xaf,0x76,0x58,0xdc,0xab,0x23, + 0xe0,0x91,0x19,0x24,0xb2,0xed,0xc6,0x38,0xe2,0xaa,0x47,0x13,0xc5,0x14,0x09,0x22, + 0x89,0x26,0x29,0xf3,0x80,0x33,0x95,0xce,0x79,0xa1,0x5c,0xcd,0x13,0xee,0x8c,0x24, + 0x81,0x49,0x76,0x66,0xe0,0x7d,0x29,0x76,0xc8,0xe2,0x19,0x63,0x18,0x91,0x87,0xc8, + 0x08,0xe4,0xfa,0x81,0x49,0x3b,0x0f,0x56,0xee,0xf6,0x0f,0x2f,0xcf,0xd9,0xe5,0xbc}; diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.cpp b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.cpp new file mode 100644 index 0000000..0ecb17b --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.cpp @@ -0,0 +1,369 @@ +// slimmed down version of the Open Book IL0398 driver. +// https://github.com/joeycastillo/The-Open-Book/blob/master/src/Grayscale_IL0398.cpp + +#include "Grayscale_IL0398.h" + +#define BUSY_WAIT 500 + +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +#ifndef _swap_int16_t +#define _swap_int16_t(a, b) { int16_t t = a; a = b; b = t; } +#endif +/**************************************************************************/ +/*! + @brief constructor if using external SRAM chip and software SPI + @param width the width of the display in pixels + @param height the height of the display in pixels + @param SID the SID pin to use + @param SCLK the SCLK pin to use + @param DC the data/command pin to use + @param RST the reset pin to use + @param CS the chip select pin to use + @param SRCS the SRAM chip select pin to use + @param MISO the MISO pin to use + @param BUSY the busy pin to use +*/ +/**************************************************************************/ +Grayscale_IL0398::Grayscale_IL0398(int width, int height, + int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, + int8_t CS, int8_t SRCS, int8_t MISO, int8_t BUSY) : + Adafruit_EPD(width, height, SID, SCLK, DC, RST, CS, SRCS, MISO, BUSY) { + + buffer1_size = ((uint32_t)width * (uint32_t)height) / 8; + buffer2_size = buffer1_size; + + if (SRCS >= 0) { + use_sram = true; + buffer1_addr = 0; + buffer2_addr = buffer1_size; + buffer1 = buffer2 = NULL; + } else { + buffer1 = (uint8_t *)malloc(buffer1_size); + buffer2 = (uint8_t *)malloc(buffer2_size); + } +} + +// constructor for hardware SPI - we indicate DataCommand, ChipSelect, Reset +/**************************************************************************/ +/*! + @brief constructor if using on-chip RAM and hardware SPI + @param width the width of the display in pixels + @param height the height of the display in pixels + @param DC the data/command pin to use + @param RST the reset pin to use + @param CS the chip select pin to use + @param SRCS the SRAM chip select pin to use + @param BUSY the busy pin to use +*/ +/**************************************************************************/ +Grayscale_IL0398::Grayscale_IL0398(int width, int height, + int8_t DC, int8_t RST, + int8_t CS, int8_t SRCS, int8_t BUSY, SPIClass *spi) : + Adafruit_EPD(width, height, DC, RST, CS, SRCS, BUSY, spi) { + + buffer1_size = ((uint32_t)width * (uint32_t)height) / 8; + buffer2_size = buffer1_size; + + if (SRCS >= 0) { + use_sram = true; + buffer1_addr = 0; + buffer2_addr = 0; + buffer1 = buffer2 = NULL; + } else { + buffer1 = (uint8_t *)malloc(buffer1_size); + buffer2 = (uint8_t *)malloc(buffer1_size); + } +} + +/**************************************************************************/ +/*! + @brief wait for busy signal to end +*/ +/**************************************************************************/ +void Grayscale_IL0398::busy_wait(void) +{ + if (_busy_pin > -1) { + do { + EPD_command(IL0398_GETSTATUS); + delay(10); + } while (!digitalRead(_busy_pin)); //wait for busy high + delay(200); + } else { + delay(BUSY_WAIT); + } + +} + +/**************************************************************************/ +/*! + @brief begin communication with and set up the display. + @param reset if true the reset pin will be toggled. +*/ +/**************************************************************************/ +void Grayscale_IL0398::begin(bool reset) +{ + Adafruit_EPD::begin(reset); + setBlackBuffer(0, true); + powerDown(); +} + +/**************************************************************************/ +/*! + @brief signal the display to update +*/ +/**************************************************************************/ +void Grayscale_IL0398::update() +{ + EPD_command(IL0398_DISPLAY_REFRESH); + delay(100); + + busy_wait(); + if (_busy_pin <= -1) { + delay(5000); + } +} + +const unsigned char Grayscale_IL0398::LUT_VCOM_GRAYSCALE[] PROGMEM = +{ + 0x00, 0x0A, 0x00, 0x00, 0x00, 0x01, + 0x60, 0x14, 0x14, 0x00, 0x00, 0x01, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x13, 0x0A, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, + 0x00 +}; + +const unsigned char Grayscale_IL0398::LUT_WW_GRAYSCALE[] PROGMEM = +{ + 0x40, 0x0A, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x14, 0x14, 0x00, 0x00, 0x01, + 0x10, 0x14, 0x0A, 0x00, 0x00, 0x01, + 0xA0, 0x13, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char Grayscale_IL0398::LUT_WB_GRAYSCALE[] PROGMEM = +{ + 0x40, 0x0A, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x14, 0x14, 0x00, 0x00, 0x01, + 0x00, 0x14, 0x0A, 0x00, 0x00, 0x01, + 0x99, 0x0B, 0x04, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char Grayscale_IL0398::LUT_BW_GRAYSCALE[] PROGMEM = +{ + 0x40, 0x0A, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x14, 0x14, 0x00, 0x00, 0x01, + 0x00, 0x14, 0x0A, 0x00, 0x00, 0x01, + 0x99, 0x0C, 0x01, 0x03, 0x04, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const unsigned char Grayscale_IL0398::LUT_BB_GRAYSCALE[] PROGMEM = +{ + 0x80, 0x0A, 0x00, 0x00, 0x00, 0x01, + 0x90, 0x14, 0x14, 0x00, 0x00, 0x01, + 0x20, 0x14, 0x0A, 0x00, 0x00, 0x01, + 0x50, 0x13, 0x01, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +/**************************************************************************/ +/*! + @brief start up the display. Same as init, but here for compatibility with + Adafruit_EPD; you can call Grayscale_IL0398::init with more options. +*/ +/**************************************************************************/ +void Grayscale_IL0398::powerUp() { + uint8_t buf[5]; + + hardwareReset(); + + buf[0] = 0x03; // Panel will generate VDH and VDL (1<<0) and VGH and VGL (1<<1) + buf[1] = 0x00; // VCOMH=VDH+VCOMDC and VCOML=VDL+VCOMDC; VGH and VGL are 16v and -16v respectively + buf[2] = 0x2b; // VDH= 11V + buf[3] = 0x2b; // VDL=-11V + buf[4] = 0x13; // VDHR=6.2V + EPD_command(IL0398_POWER_SETTING, buf, 5); + + buf[0] = 0x17; // phase A: soft start 10ms, driving strength 3, off time 6.58us + buf[1] = 0x17; // phase B: soft start 10ms, driving strength 3, off time 6.58us + buf[2] = 0x17; // phase C: driving strength 3, off time 6.58us + EPD_command(IL0398_BOOSTER_SOFT_START, buf, 3); + + buf[0] = 0x3F; // (1<<4) sets display to monochrome and (1<<5) enables custom LUTs + EPD_command(IL0398_PANEL_SETTING, buf, 1); + + buf[0] = 0x3C; // 50 Hz + EPD_command(IL0398_PLL, buf, 1); + + buf[0] = (HEIGHT >> 8) & 0xFF; + buf[1] = HEIGHT & 0xFF; + buf[2] = (WIDTH >> 8) & 0xFF; + buf[3] = WIDTH & 0xFF; + EPD_command(IL0398_RESOLUTION, buf, 4); + + buf[0] = 0x12; // VCOM_DC = -1.5v + EPD_command(IL0398_VCM_DC_SETTING, buf, 1); + + buf[0] = 0xD7; // 0x57 for black border. 0x97 for white border. 0xD7 for floating border. + EPD_command(IL0398_VCOM, buf, 1); + + EPD_command(IL0398_LUT1, LUT_VCOM_GRAYSCALE, sizeof(LUT_VCOM_GRAYSCALE)); + EPD_command(IL0398_LUTWW, LUT_WW_GRAYSCALE, sizeof(LUT_WW_GRAYSCALE)); + EPD_command(IL0398_LUTBW, LUT_BW_GRAYSCALE, sizeof(LUT_BW_GRAYSCALE)); + EPD_command(IL0398_LUTWB, LUT_WB_GRAYSCALE, sizeof(LUT_WB_GRAYSCALE)); + EPD_command(IL0398_LUTBB, LUT_BB_GRAYSCALE, sizeof(LUT_BB_GRAYSCALE)); + + EPD_command(IL0398_POWER_ON); + busy_wait(); + + delay(20); +} + +/**************************************************************************/ +/*! + @brief wind down the display +*/ +/**************************************************************************/ +void Grayscale_IL0398::powerDown() +{ + uint8_t buf[4]; + + // power off + buf[0] = 0xF7; // border floating + EPD_command(IL0398_VCOM, buf, 1); + EPD_command(IL0398_POWER_OFF); + busy_wait(); + buf[0] = 0xA5; // deep sleep + EPD_command(IL0398_DEEP_SLEEP, buf, 1); + delay(100); +} + +/**************************************************************************/ +/*! + @brief draw a single pixel on the screen + @param x the x axis position + @param y the y axis position + @param color the color of the pixel +*/ +/**************************************************************************/ +void Grayscale_IL0398::drawPixel(int16_t x, int16_t y, uint16_t color) { + if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) + return; + + uint8_t *pByte1; + uint8_t *pByte2; + + // check rotation, move pixel around if necessary + switch (getRotation()) { + case 1: + EPD_swap(x, y); + x = WIDTH - x - 1; + break; + case 2: + x = WIDTH - x - 1; + y = HEIGHT - y - 1; + break; + case 3: + EPD_swap(x, y); + y = HEIGHT - y - 1; + break; + } + + uint16_t addr = ( (uint32_t)(WIDTH - 1 - x) * (uint32_t)HEIGHT + y)/8; + + if (use_sram) { + uint8_t byte1 = sram.read8(blackbuffer_addr + addr); + uint8_t byte2 = sram.read8(colorbuffer_addr + addr); + pByte1 = &byte1; + pByte2 = &byte2; + } else { + pByte1 = black_buffer + addr; + pByte2 = color_buffer + addr; + } + + switch (color) { + case EPD_BLACK: + *pByte1 &= ~(1 << (7 - (y%8))); + *pByte2 &= ~(1 << (7 - (y%8))); + break; + case EPD_DARK: + *pByte1 |= (1 << (7 - (y%8))); + *pByte2 &= ~(1 << (7 - (y%8))); + break; + case EPD_LIGHT: + *pByte1 &= ~(1 << (7 - (y%8))); + *pByte2 |= (1 << (7 - (y%8))); + break; + case EPD_WHITE: + *pByte1 |= (1 << (7 - (y%8))); + *pByte2 |= (1 << (7 - (y%8))); + break; + } + + if (use_sram) { + sram.write8(addr, *pByte1); + sram.write8(addr + buffer1_size, *pByte2); + } +} + +/**************************************************************************/ +/*! + @brief Send the specific command to start writing to EPD display RAM + @param index The index for which buffer to write (0 or 1 or tri-color displays) + Ignored for monochrome displays. + @returns The byte that is read from SPI at the same time as sending the command +*/ +/**************************************************************************/ +uint8_t Grayscale_IL0398::writeRAMCommand(uint8_t index) { + if (index == 0) { + return EPD_command(IL0398_DTM2, false); + } + if (index == 1) { + return EPD_command(IL0398_DTM1, false); + } + return 0; +} + +/**************************************************************************/ +/*! + @brief Some displays require setting the RAM address pointer + @param x X address counter value + @param y Y address counter value +*/ +/**************************************************************************/ +void Grayscale_IL0398::setRAMAddress(uint16_t x, uint16_t y) { + // on this chip we do nothing +} + +/*! + * @file Adafruit_IL0398.cpp + * + * Forked from Adafruit_IL0398.cpp; copyright notce below. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing + * products from Adafruit! + * + * Written by Dean Miller for Adafruit Industries. + * Open Book additions by Joey Castillo. + * + * BSD license, all text here must be included in any redistribution. + * + */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.h new file mode 100644 index 0000000..7ab9477 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/Grayscale_IL0398.h @@ -0,0 +1,49 @@ +// slimmed down version of the Open Book IL0398 driver. +// https://github.com/joeycastillo/The-Open-Book/blob/master/src/Grayscale_IL0398.h + +/**************************************************************************/ +/*! + @brief Class for interfacing with IL0398 EPD drivers +*/ +/**************************************************************************/ + +#include "Adafruit_EPD.h" + +class Grayscale_IL0398 : public Adafruit_EPD { + public: + Grayscale_IL0398(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t SRCS, int8_t MISO, int8_t BUSY = -1); + Grayscale_IL0398(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t SRCS, int8_t BUSY = -1, SPIClass *spi = &SPI); + + void begin(bool reset=true); + void powerUp(); + void update(); + void powerDown(); + void drawPixel(int16_t x, int16_t y, uint16_t color); +protected: + uint8_t writeRAMCommand(uint8_t index); + void setRAMAddress(uint16_t x, uint16_t y); + void busy_wait(); + +private: + static const unsigned char LUT_VCOM_GRAYSCALE[]; + static const unsigned char LUT_WW_GRAYSCALE[]; + static const unsigned char LUT_WB_GRAYSCALE[]; + static const unsigned char LUT_BW_GRAYSCALE[]; + static const unsigned char LUT_BB_GRAYSCALE[]; +}; + +/*! + * @file Grayscale_IL0398.h + * + * Forked from Adafruit_IL0398.h; copyright notce below. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing + * products from Adafruit! + * + * Written by Dean Miller for Adafruit Industries. + * Open Book additions by Joey Castillo. + * + * BSD license, all text here must be included in any redistribution. + * + */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/epd_demo.ino b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/epd_demo.ino new file mode 100644 index 0000000..0c0d0d4 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/epd_demo.ino @@ -0,0 +1,111 @@ +// JPEGDEC example for 4.2" monochrome E-Paper displays +// Does not work with tri-color 4.2" displays! + +#include +#include "SPI.h" +#include "Adafruit_GFX.h" + +#include "Grayscale_IL0398.h" +#include "lange.h" // Demo photographs, grayscale, sized 300x400 + +#define DISPLAY_WIDTH 300 +#define DISPLAY_HEIGHT 400 + +// set these values to match the pins and the SPI bus for your display +#define EPD_CS 44 +#define EPD_DC 45 +#define EPD_RST 46 +#define EPD_BSY 47 +#define EPD_DISPLAY_BUS &SPI1 + +// adds a basic Floyd-Steinberg dither to each block of pixels rendered. +bool dither = true; + +JPEGDEC jpeg; +Grayscale_IL0398 display(DISPLAY_WIDTH, DISPLAY_HEIGHT, EPD_DC, EPD_RST, EPD_CS, -1, EPD_BSY, EPD_DISPLAY_BUS); + +void JPEGDraw(JPEGDRAW *pDraw) +{ + int x = pDraw->x; + int y = pDraw->y; + int w = pDraw->iWidth; + int h = pDraw->iHeight; + + for(int i = 0; i < w * h; i++) + { + pDraw->pPixels[i] = (pDraw->pPixels[i] & 0x7e0) >> 5; // extract just the six green channel bits. + } + + if (dither) + { + for(int16_t j = 0; j < h; j++) + { + for(int16_t i = 0; i < w; i++) + { + int8_t oldPixel = constrain(pDraw->pPixels[i + j * w], 0, 0x3F); + int8_t newPixel = oldPixel & 0x38; // or 0x30 to dither to 2-bit directly. much improved tonal range, but more horizontal banding between blocks. + pDraw->pPixels[i + j * w] = newPixel; + int quantError = oldPixel - newPixel; + if(i + 1 < w) pDraw->pPixels[i + 1 + j * w] += quantError * 7 / 16; + if((i - 1 >= 0) && (j + 1 < h)) pDraw->pPixels[i - 1 + (j + 1) * w] += quantError * 3 / 16; + if(j + 1 < h) pDraw->pPixels[i + (j + 1) * w] += quantError * 5 / 16; + if((i + 1 < w) && (j + 1 < h)) pDraw->pPixels[i + 1 + (j + 1) * w] += quantError * 1 / 16; + } // for i + } // for j + } // if dither + + for(int16_t i = 0; i < w; i++) + { + for(int16_t j = 0; j < h; j++) + { + switch (constrain(pDraw->pPixels[i + j * w] >> 4, 0, 3)) + { + case 0: + display.writePixel(x+i, y+j, EPD_BLACK); + break; + case 1: + display.writePixel(x+i, y+j, EPD_DARK); + break; + case 2: + display.writePixel(x+i, y+j, EPD_LIGHT); + break; + case 3: + display.writePixel(x+i, y+j, EPD_WHITE); + break; + } // switch + } // for j + } // for i +} /* JPEGDraw() */ + +void setup() { + Serial.begin(115200); + //while (!Serial) delay(1000); + Serial.println("Starting..."); + display.begin(); + display.fillRect(0, 0, 300, 400, EPD_BLACK); + display.display(); +} /* setup() */ + +const uint8_t * images[] = {demo_001_jpg, demo_002_jpg, demo_003_jpg, demo_004_jpg, demo_005_jpg, demo_006_jpg, demo_007_jpg, demo_008_jpg}; +size_t imageLengths[] = {demo_001_jpg_len, demo_002_jpg_len, demo_003_jpg_len, demo_004_jpg_len, demo_005_jpg_len, demo_006_jpg_len, demo_007_jpg_len, demo_008_jpg_len}; + +void loop() { + int i; + long lTime; + + for (i=0; i<8; i++) + { + if (jpeg.openFLASH((uint8_t *)images[i], imageLengths[i], JPEGDraw)) + { + lTime = micros(); + if (jpeg.decode((300 - jpeg.getWidth()) / 2, (400 - jpeg.getHeight()) / 2, 0)) + { + lTime = micros() - lTime; + Serial.printf("%d x %d image, decode time = %d us\n", jpeg.getWidth(), jpeg.getHeight(), (int)lTime); + } + jpeg.close(); + } + display.display(); + delay(4000); // pause between images + } // for i +} /* loop() */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/lange.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/lange.h new file mode 100644 index 0000000..ac65725 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/epd_demo/lange.h @@ -0,0 +1,13860 @@ +// +// Public domain photographs by Dorothea Lange for the U.S. Farm Security Administration +// see: https://www.loc.gov/rr/print/res/071_fsab.html +// + +const uint8_t demo_001_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x11, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xe2, 0x0e, 0x3b, 0x27, 0xbc, 0x28, 0x9a, 0x5b, 0xd9, + 0x58, 0x21, 0x37, 0x09, 0x29, 0x09, 0xa5, 0x82, 0x12, 0x14, 0xb0, 0xf6, + 0x45, 0x21, 0x34, 0xa4, 0xa6, 0x23, 0x1e, 0xb4, 0xbd, 0x0a, 0xe3, 0x8f, + 0xc4, 0xa2, 0x42, 0x77, 0xc0, 0x6e, 0x9c, 0xa4, 0xa6, 0xb7, 0xa4, 0x3c, + 0x11, 0x45, 0x35, 0x44, 0x96, 0xfe, 0x25, 0x37, 0x64, 0x46, 0xfd, 0x14, + 0x94, 0x8f, 0xd1, 0xaf, 0xc1, 0x37, 0xa2, 0xc2, 0x74, 0x0a, 0x64, 0x41, + 0xd1, 0x4a, 0xb0, 0x41, 0x49, 0x48, 0x4d, 0x4d, 0x1d, 0x91, 0x6b, 0xa2, + 0xb3, 0xcb, 0x41, 0x52, 0x0d, 0x92, 0x8c, 0xc6, 0xed, 0x09, 0x29, 0x88, + 0xc7, 0xa8, 0x7e, 0x60, 0x4e, 0x71, 0xd8, 0x5c, 0x08, 0x6b, 0x40, 0xee, + 0x20, 0x22, 0x86, 0xa9, 0x37, 0x43, 0x09, 0x29, 0x7a, 0xea, 0x60, 0x3f, + 0x41, 0xa3, 0xe4, 0x15, 0xa6, 0x69, 0xc0, 0x13, 0xe4, 0x02, 0x0b, 0x79, + 0x44, 0x0e, 0x21, 0xc0, 0x0e, 0x12, 0x52, 0x7d, 0xef, 0xe7, 0x76, 0xbe, + 0x49, 0xc3, 0x9f, 0x3a, 0x92, 0x90, 0x70, 0x02, 0x08, 0x06, 0x7b, 0xa7, + 0x80, 0x92, 0x98, 0xbd, 0xce, 0x2d, 0x32, 0x4e, 0xbc, 0x25, 0x5b, 0xdc, + 0x01, 0x83, 0x09, 0x38, 0x49, 0x4d, 0xb4, 0x80, 0x92, 0x93, 0x35, 0xce, + 0x03, 0x52, 0x54, 0x1e, 0x5c, 0x48, 0x20, 0xf0, 0xa6, 0x04, 0x05, 0x06, + 0x6a, 0x4c, 0xa4, 0xa6, 0x5b, 0x9c, 0xf7, 0xb4, 0x93, 0xc2, 0x35, 0x4e, + 0x81, 0xa7, 0x74, 0x36, 0x30, 0x46, 0x83, 0x8e, 0xea, 0x70, 0x00, 0x10, + 0x34, 0x49, 0x4c, 0xc9, 0xf2, 0xd1, 0x49, 0xb2, 0xa0, 0x7b, 0x04, 0xed, + 0x24, 0x6a, 0x52, 0x52, 0x58, 0x26, 0x20, 0xfc, 0xd4, 0xc0, 0x27, 0x59, + 0xf7, 0x77, 0x28, 0x6d, 0x76, 0x9a, 0xfc, 0x42, 0x70, 0xe8, 0x1a, 0x24, + 0xa4, 0xa1, 0xee, 0xd7, 0x5e, 0x34, 0xd5, 0x29, 0x27, 0x93, 0x03, 0x92, + 0xa0, 0xd7, 0x76, 0x3c, 0xa9, 0x57, 0xa9, 0x24, 0xf1, 0xe6, 0x92, 0x99, + 0x13, 0x10, 0x41, 0xf8, 0x78, 0x21, 0x6e, 0x24, 0xe8, 0xe5, 0x2b, 0x1c, + 0x48, 0xf6, 0xe8, 0x84, 0x04, 0x7b, 0x8e, 0x83, 0xc5, 0x25, 0x31, 0xbd, + 0xef, 0xd8, 0x1a, 0xd3, 0xa9, 0x30, 0x00, 0xf1, 0x46, 0x64, 0xd7, 0x58, + 0x04, 0xc9, 0xee, 0x7c, 0xd0, 0x80, 0x1f, 0xce, 0x1e, 0x4f, 0xd1, 0x1e, + 0x5f, 0xed, 0x55, 0xae, 0xbe, 0xc3, 0x67, 0xa6, 0xdd, 0x0f, 0xf0, 0xf1, + 0x49, 0x4b, 0xe4, 0x59, 0x68, 0x05, 0xcd, 0x7f, 0xf2, 0x5a, 0x07, 0xe2, + 0x50, 0x99, 0x71, 0x2c, 0x12, 0x01, 0x21, 0x3b, 0x86, 0xe2, 0x1a, 0xdd, + 0x5a, 0x02, 0x8d, 0x75, 0x96, 0x9d, 0xa7, 0x81, 0xe2, 0x92, 0x92, 0x34, + 0xbc, 0x9d, 0x27, 0xe0, 0x51, 0xa1, 0xdb, 0x76, 0xf7, 0xe5, 0x33, 0x1b, + 0xdf, 0x51, 0xe6, 0xa5, 0xb5, 0xdb, 0xb8, 0xf9, 0xf7, 0x8e, 0x38, 0x49, + 0x4f, 0x30, 0x42, 0x62, 0x3b, 0xa7, 0x07, 0x44, 0xe5, 0x25, 0x31, 0x4d, + 0x0a, 0x40, 0xa6, 0x73, 0x88, 0x49, 0x4c, 0x21, 0xc4, 0xf2, 0x88, 0xd1, + 0xe2, 0x99, 0xba, 0xea, 0xa6, 0x21, 0x25, 0x31, 0x70, 0x0a, 0x33, 0xa2, + 0x77, 0x28, 0xea, 0x52, 0x52, 0xb9, 0x45, 0x61, 0x86, 0x90, 0x42, 0x8b, + 0x1b, 0xe2, 0xa4, 0x7c, 0x12, 0x52, 0xec, 0x12, 0x7c, 0x91, 0xda, 0x02, + 0x85, 0x62, 0x11, 0x12, 0x53, 0x36, 0x89, 0x4e, 0x5a, 0x39, 0x49, 0xbc, + 0x29, 0x1f, 0x14, 0x94, 0xa1, 0xa9, 0x46, 0x0d, 0x06, 0x0a, 0x13, 0x11, + 0xf7, 0x00, 0x35, 0xe1, 0x25, 0x32, 0x89, 0x4e, 0x1c, 0x38, 0x55, 0x9f, + 0x99, 0x5b, 0x09, 0x04, 0xc0, 0x0a, 0x0d, 0xea, 0x38, 0xa7, 0x87, 0x41, + 0xf0, 0x84, 0x94, 0xde, 0x1a, 0xea, 0x93, 0xb4, 0x2a, 0xbd, 0x59, 0xb5, + 0x1d, 0x67, 0x45, 0x62, 0xbb, 0x18, 0xf6, 0xee, 0x04, 0x10, 0x92, 0x96, + 0xdc, 0xe0, 0x7c, 0x94, 0x8f, 0x3e, 0x01, 0x48, 0x6a, 0xd4, 0xd1, 0x3a, + 0x14, 0x94, 0x91, 0x9a, 0xf7, 0xd0, 0xa9, 0x09, 0x92, 0x07, 0x0a, 0x2c, + 0x1d, 0x94, 0xc0, 0xe6, 0x52, 0x52, 0xce, 0xd3, 0xe2, 0x9c, 0x3b, 0x45, + 0x09, 0x97, 0x42, 0x90, 0xf0, 0x49, 0x4c, 0xc1, 0x81, 0xfc, 0x54, 0xa6, + 0x75, 0x07, 0x94, 0x29, 0x93, 0x1d, 0x94, 0xdb, 0xa8, 0xf2, 0x49, 0x4c, + 0xdb, 0xa0, 0xd7, 0xba, 0x93, 0x20, 0x34, 0xeb, 0xaf, 0x65, 0x19, 0xe2, + 0x4f, 0x09, 0xc1, 0x27, 0x84, 0x94, 0xa9, 0xd6, 0x0f, 0xcc, 0xa1, 0xbc, + 0xfa, 0x8e, 0x8f, 0xcd, 0x6f, 0x23, 0xc7, 0xc8, 0xa9, 0x3c, 0x19, 0xda, + 0xdd, 0x49, 0xe7, 0xc9, 0x26, 0xb4, 0x34, 0x68, 0x34, 0x01, 0x25, 0x31, + 0xb1, 0xcd, 0x0d, 0x92, 0x27, 0xe1, 0xe2, 0xa8, 0xc0, 0x05, 0xfd, 0xec, + 0x71, 0xf7, 0x1e, 0x74, 0xec, 0x11, 0xac, 0xb5, 0xe4, 0xee, 0x6f, 0xd1, + 0x06, 0x19, 0x1f, 0x94, 0xa6, 0x8f, 0xcf, 0x1d, 0xf9, 0x09, 0x29, 0x8b, + 0x5f, 0xb4, 0x44, 0x7c, 0x54, 0xac, 0x31, 0x63, 0x4f, 0x10, 0x96, 0xd2, + 0x75, 0x83, 0x03, 0xba, 0x6b, 0x07, 0x04, 0xf3, 0xd9, 0x25, 0x26, 0x67, + 0x3d, 0xc8, 0xf1, 0x44, 0xdd, 0xac, 0xf6, 0xe3, 0x95, 0x5a, 0xbb, 0x02, + 0x2e, 0xfd, 0x66, 0x7d, 0xbe, 0x13, 0xaa, 0x4a, 0x79, 0x90, 0x52, 0x2f, + 0x84, 0xc0, 0x94, 0xa0, 0x92, 0x92, 0x98, 0x17, 0x90, 0xe9, 0x53, 0x9d, + 0xc3, 0x54, 0xfb, 0x14, 0xa2, 0x12, 0x52, 0x30, 0xe7, 0x07, 0x44, 0x68, + 0x89, 0x3a, 0x24, 0xa2, 0x49, 0x29, 0x29, 0x89, 0x3a, 0xa9, 0x34, 0x28, + 0xf0, 0xa6, 0xd4, 0x94, 0xca, 0x61, 0x3b, 0x7d, 0xce, 0x42, 0x73, 0x8c, + 0xc0, 0x46, 0xab, 0x84, 0x94, 0x94, 0x29, 0xa8, 0x04, 0x40, 0x92, 0x99, + 0x05, 0x2f, 0x8a, 0x88, 0x51, 0xb1, 0xdb, 0x47, 0x9f, 0x9a, 0x4a, 0x48, + 0x6c, 0x6b, 0x04, 0xbb, 0x85, 0x4f, 0x23, 0xa9, 0x76, 0xae, 0x7c, 0x8c, + 0x7f, 0x7a, 0xad, 0x91, 0x93, 0xbc, 0x96, 0x83, 0x23, 0xc7, 0xc5, 0x01, + 0xac, 0x2f, 0x3a, 0xa4, 0xa5, 0xde, 0xfb, 0x1f, 0x27, 0x58, 0x26, 0x62, + 0x52, 0x6b, 0x1e, 0x79, 0x1f, 0x82, 0x33, 0x31, 0xc7, 0x8f, 0xdc, 0x89, + 0xe9, 0x11, 0xc1, 0xfc, 0x52, 0x52, 0x36, 0x3c, 0x37, 0x93, 0x07, 0xe0, + 0x8a, 0xdb, 0xe3, 0xb8, 0x9f, 0x11, 0xfd, 0xea, 0x0f, 0x2e, 0x68, 0xf7, + 0x80, 0xe0, 0xab, 0x3d, 0xc0, 0x9f, 0x6f, 0x1e, 0x05, 0x25, 0x3a, 0x94, + 0x75, 0x37, 0xd2, 0x76, 0xbc, 0x98, 0xf3, 0xd5, 0x68, 0xd3, 0x9d, 0x8f, + 0x74, 0x6b, 0x04, 0xf6, 0x5c, 0xce, 0xf2, 0x74, 0x94, 0x99, 0x6b, 0xd8, + 0xef, 0x69, 0xf9, 0x24, 0xa7, 0xb3, 0xa5, 0xa3, 0x9f, 0xb9, 0x22, 0xd9, + 0x2b, 0x27, 0xa6, 0x75, 0x2f, 0x68, 0xae, 0xc3, 0x2c, 0x3a, 0x02, 0x79, + 0x69, 0xf3, 0xf2, 0x5b, 0x00, 0x02, 0x3f, 0x8a, 0x4a, 0x60, 0x3c, 0xb5, + 0x4e, 0x46, 0x93, 0xc2, 0x78, 0x8d, 0x02, 0x91, 0x1a, 0x24, 0xa4, 0x5a, + 0xf6, 0xed, 0xca, 0x23, 0x44, 0x80, 0xa0, 0x66, 0x4f, 0x87, 0x8a, 0x4d, + 0xb0, 0x01, 0xae, 0x83, 0x80, 0x52, 0x52, 0x47, 0x93, 0x12, 0x35, 0xf1, + 0x4c, 0xcb, 0x5c, 0xdd, 0x00, 0x92, 0x74, 0x01, 0x49, 0xa0, 0x38, 0xc9, + 0xe0, 0xeb, 0x28, 0x2e, 0xb1, 0xac, 0x3b, 0xb9, 0x26, 0x76, 0x37, 0x8d, + 0x3c, 0x4f, 0x92, 0x4a, 0x6c, 0x86, 0xfe, 0x8c, 0x99, 0xd7, 0xbb, 0xbc, + 0xd5, 0x5b, 0xf2, 0x1c, 0x66, 0xb6, 0x8f, 0xd1, 0x81, 0xef, 0x77, 0xef, + 0x1f, 0xdd, 0x08, 0x16, 0xf5, 0x07, 0x38, 0x8a, 0x9a, 0xe1, 0x1d, 0xf6, + 0xe8, 0x3e, 0xf2, 0xa1, 0xea, 0x8b, 0x1f, 0xb4, 0x01, 0x1d, 0x80, 0x29, + 0x29, 0x9b, 0x24, 0x9d, 0xc7, 0xb7, 0x00, 0x70, 0x14, 0xe4, 0x01, 0xaf, + 0x7e, 0x7c, 0x15, 0x63, 0x65, 0x75, 0x9e, 0x61, 0x48, 0x5a, 0x08, 0xdc, + 0x0e, 0xe0, 0x92, 0x93, 0x33, 0x71, 0x71, 0x0d, 0x26, 0x3b, 0xa9, 0xd8, + 0xd0, 0x44, 0x78, 0x77, 0x0a, 0x0c, 0x7b, 0x34, 0x20, 0x4c, 0xf0, 0x53, + 0x93, 0xa7, 0xc5, 0x25, 0x31, 0x6e, 0xd1, 0x20, 0xfd, 0xea, 0x7b, 0x46, + 0xd8, 0xdc, 0x78, 0xe7, 0x44, 0x29, 0xda, 0x63, 0x8d, 0x74, 0x47, 0xdc, + 0x3f, 0x77, 0x44, 0x94, 0xf3, 0x63, 0x44, 0x82, 0x52, 0x90, 0x32, 0x52, + 0x53, 0x30, 0x98, 0x94, 0xf2, 0xa2, 0x75, 0x29, 0x29, 0x62, 0x4a, 0x70, + 0x25, 0x38, 0x84, 0xf2, 0x02, 0x4a, 0x50, 0x09, 0x9c, 0xdd, 0x12, 0x06, + 0x4a, 0x99, 0x02, 0x12, 0x52, 0x20, 0xdd, 0x75, 0x46, 0x67, 0x82, 0x1b, + 0x04, 0x94, 0x76, 0xb7, 0x49, 0x49, 0x4a, 0x1c, 0xa2, 0x4c, 0x28, 0x70, + 0x94, 0xca, 0x4a, 0x4d, 0xb8, 0x06, 0xca, 0xa1, 0x95, 0x7e, 0xe3, 0xb0, + 0x1d, 0x3b, 0x94, 0xb2, 0xf2, 0xc8, 0xfd, 0x13, 0x39, 0xfc, 0xe2, 0xa9, + 0x80, 0x4f, 0x29, 0x29, 0x23, 0x6b, 0x6f, 0x72, 0x3e, 0x12, 0x8a, 0xc6, + 0xb3, 0xb4, 0x14, 0xd5, 0xd7, 0x3f, 0x9b, 0xf7, 0xa3, 0x0a, 0x01, 0xd7, + 0xe8, 0xa4, 0xa5, 0x36, 0x02, 0x91, 0x35, 0x76, 0xf6, 0x3b, 0xcd, 0x39, + 0xc7, 0xae, 0x3d, 0xcf, 0x8f, 0x34, 0x32, 0x5b, 0x58, 0x83, 0x60, 0x73, + 0x7c, 0xd2, 0x52, 0x9e, 0xd6, 0x3d, 0xb0, 0x40, 0xdd, 0xd9, 0xcd, 0x28, + 0x2e, 0xc5, 0x35, 0xd0, 0x2e, 0x71, 0x07, 0x79, 0x2d, 0x6b, 0x41, 0xd7, + 0x4e, 0x4a, 0x77, 0x8a, 0x9d, 0xee, 0x63, 0xb5, 0xf0, 0x9d, 0x52, 0x36, + 0x88, 0x0d, 0x0d, 0xf7, 0x03, 0x32, 0x92, 0x91, 0x54, 0xd1, 0xba, 0x1c, + 0x24, 0x1f, 0xbc, 0x29, 0x5b, 0x44, 0x19, 0x1c, 0x1e, 0xea, 0xcb, 0x3d, + 0x0b, 0x5b, 0xb9, 0xbe, 0xd3, 0xdc, 0x77, 0x69, 0x4c, 0xf6, 0xfb, 0x76, + 0xbf, 0x91, 0xcf, 0xf7, 0xa4, 0xa4, 0x38, 0x6e, 0x15, 0xe4, 0x37, 0xd4, + 0x30, 0xd9, 0x05, 0xdf, 0x00, 0xba, 0x4c, 0x5b, 0xc7, 0xa6, 0xd6, 0x9d, + 0x74, 0xf9, 0x85, 0xcd, 0x91, 0xbb, 0x4e, 0x1c, 0x3e, 0x89, 0xfe, 0x0a, + 0xf6, 0x06, 0x49, 0xfa, 0x2e, 0xd1, 0xed, 0xef, 0xe2, 0x12, 0x53, 0xbe, + 0xdf, 0x73, 0x81, 0xf1, 0x46, 0x3c, 0x42, 0x1d, 0x2f, 0x6b, 0x9a, 0x1c, + 0x0c, 0x93, 0xc0, 0x52, 0xb2, 0xd6, 0xd6, 0x0e, 0xe2, 0x00, 0xf3, 0xe1, + 0x25, 0x22, 0xb4, 0x86, 0x8f, 0x24, 0x01, 0x65, 0x6f, 0x20, 0x13, 0xdf, + 0x5f, 0xf5, 0x08, 0x59, 0x17, 0xbe, 0xcd, 0x03, 0xda, 0xc6, 0x7d, 0xe7, + 0xee, 0x59, 0xf7, 0x5c, 0xc0, 0x60, 0x97, 0xbf, 0xfb, 0x44, 0x7e, 0x0d, + 0xd1, 0x25, 0x3b, 0x8e, 0xca, 0xa6, 0x03, 0x03, 0x80, 0x03, 0x99, 0x30, + 0x56, 0x26, 0x7e, 0x61, 0xb6, 0xd7, 0xb8, 0x18, 0x68, 0x21, 0x8d, 0x03, + 0xc0, 0x6a, 0x55, 0x6b, 0x5a, 0xf3, 0xee, 0xac, 0x38, 0x1e, 0x60, 0x9d, + 0x10, 0x4b, 0x4b, 0x8c, 0x11, 0x07, 0xe2, 0x92, 0x96, 0x7d, 0xaf, 0x3e, + 0xd1, 0xa9, 0xef, 0x3c, 0x05, 0x2a, 0xdc, 0x58, 0xcd, 0xe6, 0xc0, 0x1f, + 0x3a, 0x56, 0x47, 0x3f, 0x31, 0xc2, 0x8f, 0xa0, 0xf1, 0xee, 0x07, 0xee, + 0x43, 0x7b, 0x1c, 0x4f, 0xe0, 0x92, 0x92, 0x8b, 0xdc, 0xf7, 0x4b, 0xa5, + 0xce, 0x3a, 0x09, 0x56, 0xbd, 0x6f, 0xb3, 0x90, 0xfd, 0xd3, 0x3a, 0x39, + 0x87, 0x4f, 0xb9, 0x54, 0xa6, 0xbd, 0x74, 0xe4, 0x77, 0x2a, 0x6e, 0xa4, + 0xce, 0xed, 0xdb, 0x8f, 0x72, 0x92, 0x9b, 0x55, 0xf5, 0x27, 0x87, 0x97, + 0x7a, 0x6e, 0xdb, 0xdc, 0x8d, 0x74, 0xf8, 0x2d, 0x36, 0x3d, 0xb6, 0xb1, + 0xb6, 0x33, 0x50, 0xe1, 0x2d, 0x58, 0xad, 0xbf, 0xd3, 0x1b, 0x3b, 0x78, + 0xc4, 0xab, 0x58, 0x17, 0xec, 0xaf, 0x64, 0xee, 0x64, 0xe8, 0x7c, 0x35, + 0x94, 0x94, 0xe8, 0xd8, 0x74, 0x03, 0x83, 0xe2, 0x9e, 0x4f, 0xa7, 0x1d, + 0xe3, 0x9f, 0x34, 0x20, 0xf0, 0xe3, 0xa6, 0xa0, 0x77, 0x45, 0xd3, 0xfd, + 0x9d, 0x92, 0x53, 0xce, 0xee, 0x0a, 0x4d, 0x72, 0x66, 0xb7, 0xc5, 0x38, + 0x00, 0x24, 0xa6, 0x49, 0x26, 0x49, 0x25, 0x24, 0xd2, 0x14, 0x5c, 0x54, + 0x77, 0x24, 0x35, 0x49, 0x4c, 0x82, 0x47, 0xc1, 0x20, 0x21, 0x20, 0x24, + 0xa4, 0xa6, 0x75, 0x88, 0x46, 0xec, 0xa0, 0xd0, 0x9c, 0x94, 0x94, 0xa2, + 0x83, 0x6d, 0xdb, 0x1a, 0x63, 0xb2, 0x31, 0xfa, 0x24, 0x9f, 0x05, 0x9d, + 0x90, 0xf9, 0x76, 0xd1, 0xdb, 0x9f, 0x8a, 0x4a, 0x44, 0x49, 0x26, 0x7b, + 0x95, 0x26, 0x69, 0xe6, 0x54, 0x14, 0xcf, 0xb5, 0xb0, 0x3e, 0x91, 0xe5, + 0x25, 0x33, 0x37, 0xb9, 0x9a, 0x34, 0xc9, 0xee, 0x53, 0x8b, 0x5e, 0xe1, + 0x2e, 0xb2, 0x7c, 0x8c, 0xa6, 0xab, 0x1a, 0xeb, 0x0f, 0xb5, 0x84, 0xab, + 0xb5, 0xf4, 0x3c, 0xdb, 0x46, 0xed, 0xbb, 0x47, 0x9a, 0x4a, 0x68, 0x3a, + 0xe7, 0x9d, 0x25, 0x30, 0x6d, 0x8f, 0xd0, 0x02, 0x57, 0x51, 0xd3, 0xfe, + 0xab, 0x4b, 0x77, 0x5d, 0xa9, 0x2b, 0x77, 0x0f, 0xea, 0xd6, 0x2d, 0x60, + 0x12, 0x04, 0xa4, 0xa7, 0xcf, 0x3e, 0xcd, 0x74, 0xc6, 0xd3, 0xaa, 0xbb, + 0x8d, 0x80, 0xed, 0xa4, 0xbe, 0x44, 0xf7, 0x5d, 0xf5, 0x9d, 0x1f, 0x14, + 0x0f, 0xa2, 0xd9, 0xf8, 0x2a, 0x57, 0xf4, 0xf6, 0x31, 0xa7, 0x6b, 0x41, + 0xf1, 0x49, 0x4f, 0x2a, 0xcc, 0x60, 0x58, 0x46, 0xd8, 0x70, 0x55, 0x5f, + 0xbb, 0x56, 0xce, 0xa3, 0x49, 0x2b, 0x57, 0x3a, 0x97, 0x31, 0xee, 0x73, + 0x04, 0x11, 0xa3, 0x87, 0x62, 0xb1, 0x6e, 0x25, 0xce, 0x30, 0x61, 0xde, + 0x09, 0x29, 0x1b, 0x9d, 0x05, 0x48, 0x58, 0x43, 0x83, 0x81, 0xd4, 0x77, + 0x42, 0x71, 0x9f, 0x88, 0x49, 0x8e, 0xd6, 0x12, 0x53, 0xd2, 0x74, 0xec, + 0xc6, 0xba, 0xa9, 0x3a, 0x10, 0x09, 0x00, 0x78, 0xf8, 0x04, 0x9e, 0xc3, + 0x79, 0xf5, 0xad, 0x99, 0x33, 0xb5, 0x93, 0xa3, 0x47, 0x82, 0xca, 0xe9, + 0xd6, 0xec, 0x7b, 0x99, 0x3a, 0xe8, 0xe6, 0xfc, 0x41, 0x0a, 0xf6, 0x46, + 0x4c, 0xb4, 0xb1, 0x87, 0x48, 0xed, 0xc0, 0xf8, 0x24, 0xa4, 0x19, 0x6e, + 0x65, 0x6d, 0xdc, 0xc0, 0x0b, 0x9d, 0xa3, 0x4f, 0x6d, 0x39, 0x2a, 0x96, + 0xdb, 0x09, 0x92, 0x4b, 0x81, 0x13, 0x3c, 0x05, 0x72, 0xfa, 0xc5, 0xb6, + 0x86, 0xf0, 0xca, 0xda, 0x04, 0x7c, 0x34, 0xfc, 0x4a, 0xa8, 0xeb, 0x9c, + 0x49, 0xab, 0x86, 0x70, 0x23, 0xb1, 0x49, 0x4b, 0x3a, 0x40, 0x00, 0x99, + 0x9e, 0x35, 0x49, 0xd5, 0x91, 0x05, 0xce, 0x90, 0xac, 0x59, 0x4b, 0x36, + 0x51, 0xbb, 0x59, 0x6f, 0xde, 0x64, 0xcf, 0xe4, 0x40, 0xb0, 0x99, 0x21, + 0xa3, 0x83, 0x01, 0x25, 0x23, 0x22, 0x35, 0x60, 0xf9, 0xa6, 0x13, 0xcc, + 0xc2, 0x3d, 0x35, 0xb9, 0xa6, 0x5f, 0xa8, 0x26, 0x0f, 0x92, 0x6c, 0x9a, + 0x1d, 0x45, 0xc0, 0x37, 0x83, 0xee, 0x1f, 0xd5, 0x3c, 0x24, 0xa4, 0x20, + 0xb9, 0xa4, 0x77, 0x05, 0x58, 0x6d, 0x95, 0x90, 0x03, 0x99, 0xaf, 0xcd, + 0x44, 0xfa, 0x65, 0xb0, 0x06, 0xd2, 0x35, 0xd3, 0x50, 0x8b, 0x5b, 0x6b, + 0x78, 0x04, 0x98, 0x77, 0x88, 0x10, 0x92, 0x91, 0x90, 0xd0, 0x65, 0xb1, + 0xf0, 0x52, 0xad, 0xc6, 0xb7, 0x87, 0x33, 0x9f, 0x0e, 0xc7, 0xe4, 0x9e, + 0xc0, 0xe6, 0x98, 0xb0, 0x4c, 0xf0, 0xf1, 0xcf, 0xcf, 0xc5, 0x04, 0xc8, + 0xe4, 0xcb, 0x7c, 0x39, 0x84, 0x94, 0xea, 0x55, 0x68, 0xd0, 0x81, 0x04, + 0xea, 0x47, 0x9a, 0xb7, 0xea, 0x0d, 0xb3, 0xaf, 0x1f, 0x35, 0x8b, 0x46, + 0x41, 0x6c, 0x07, 0x1f, 0x64, 0xf3, 0xe0, 0xaf, 0x6e, 0x33, 0xce, 0x90, + 0x92, 0x9c, 0xe9, 0x51, 0x2a, 0x3a, 0xa9, 0x4a, 0x4a, 0x50, 0x4e, 0x54, + 0x78, 0x4a, 0x52, 0x52, 0xf1, 0x2a, 0x40, 0x26, 0x02, 0x42, 0x43, 0x94, + 0x94, 0x91, 0xbc, 0x27, 0x6c, 0x4a, 0x84, 0xa7, 0x94, 0x94, 0x98, 0x42, + 0x72, 0x84, 0x1c, 0x88, 0x0a, 0x4a, 0x61, 0x7b, 0xf6, 0x52, 0x4f, 0x7e, + 0x02, 0xcc, 0x3a, 0xea, 0xaf, 0x75, 0x07, 0x43, 0x58, 0xd1, 0xde, 0x49, + 0x54, 0x52, 0x53, 0x2a, 0xc0, 0x2e, 0x13, 0xc0, 0xd4, 0xad, 0x3e, 0x9d, + 0x81, 0xeb, 0xbf, 0xd4, 0x78, 0xf6, 0x8e, 0x56, 0x75, 0x20, 0x97, 0x47, + 0x8e, 0x8b, 0xa7, 0xc0, 0xad, 0xad, 0x63, 0x6b, 0x06, 0x0b, 0x9b, 0xaa, + 0x4a, 0x75, 0xfa, 0x67, 0x4d, 0xa7, 0x68, 0x76, 0xcd, 0x7e, 0x0b, 0x5d, + 0x98, 0xf5, 0x86, 0x11, 0xb3, 0xe8, 0x89, 0xe1, 0x3e, 0x15, 0x4c, 0x15, + 0x33, 0x52, 0x74, 0xd5, 0x1a, 0xe6, 0x96, 0xbc, 0x3a, 0x4c, 0x70, 0x60, + 0x76, 0x49, 0x4c, 0x18, 0x1a, 0x1a, 0x20, 0x00, 0x65, 0x17, 0x71, 0x0d, + 0xe4, 0x05, 0x5d, 0xa1, 0x87, 0x7b, 0x65, 0xce, 0x83, 0xa2, 0x2e, 0xe8, + 0x68, 0x10, 0x78, 0xef, 0xaa, 0x4a, 0x47, 0x65, 0x8e, 0x7e, 0x9c, 0xc2, + 0xa5, 0x90, 0xe2, 0x5d, 0x03, 0x8e, 0xea, 0xd9, 0x10, 0xc9, 0x2d, 0x32, + 0xe3, 0xf8, 0x2a, 0xd7, 0x31, 0xbb, 0xb4, 0x91, 0xe2, 0x92, 0x9c, 0xac, + 0xdc, 0x70, 0xf6, 0x17, 0x77, 0x5c, 0x9e, 0x7d, 0x06, 0xbb, 0x09, 0xec, + 0x57, 0x6b, 0x93, 0xa3, 0x76, 0x8e, 0xfc, 0x2c, 0x0e, 0xb1, 0x5b, 0x7d, + 0x29, 0x8e, 0xda, 0x14, 0x94, 0xf3, 0x9a, 0xa5, 0xc6, 0xa9, 0x89, 0x32, + 0x9a, 0x4a, 0x4a, 0x4b, 0x5b, 0xe1, 0xc0, 0x8e, 0x55, 0xc1, 0x6e, 0xe7, + 0xb6, 0x75, 0x11, 0x04, 0x7c, 0x74, 0x59, 0xe0, 0xc1, 0x95, 0x61, 0x8e, + 0xdd, 0xe4, 0x46, 0xa3, 0xf8, 0xa4, 0xa7, 0x53, 0x27, 0x6d, 0x34, 0xbe, + 0xce, 0xef, 0x73, 0x87, 0xf9, 0xa7, 0x6f, 0xf1, 0x2a, 0x83, 0x6b, 0xdc, + 0x03, 0xa2, 0x74, 0x25, 0x5d, 0xea, 0x2d, 0x2e, 0xc3, 0xa1, 0xe3, 0x50, + 0xf7, 0x3d, 0xe4, 0x78, 0x09, 0xd0, 0xa0, 0xd1, 0x1b, 0x58, 0xdf, 0xdf, + 0xfc, 0x83, 0x54, 0x94, 0xd9, 0xa9, 0x8d, 0x7e, 0x3b, 0x1a, 0x7e, 0x95, + 0x4e, 0x83, 0xe3, 0xb5, 0xff, 0x00, 0xed, 0x55, 0x43, 0x43, 0x72, 0x1e, + 0x5d, 0xc0, 0x25, 0x58, 0xa9, 0xc5, 0x97, 0xbd, 0xa7, 0x87, 0x68, 0x7e, + 0x3c, 0x8f, 0xc8, 0xa1, 0x92, 0xd6, 0x8b, 0x1a, 0x47, 0x0e, 0x99, 0x8f, + 0x10, 0x52, 0x52, 0xce, 0x2e, 0x7b, 0x0f, 0xb4, 0x01, 0xf9, 0xb0, 0x9f, + 0x25, 0x9b, 0xfd, 0x27, 0x91, 0xfe, 0x0c, 0x36, 0x7c, 0xc2, 0x21, 0x6f, + 0x0d, 0xee, 0x11, 0x83, 0x3d, 0x4a, 0xcb, 0x5b, 0xad, 0x95, 0x7b, 0x8b, + 0x7b, 0x91, 0xdd, 0x25, 0x39, 0x70, 0x18, 0x48, 0x23, 0x9d, 0x14, 0x9b, + 0xba, 0xb3, 0xb9, 0x9a, 0xb7, 0x92, 0x39, 0xd1, 0x58, 0x75, 0x6d, 0x36, + 0x80, 0x38, 0xe0, 0x0f, 0x22, 0x86, 0x7d, 0xaf, 0x96, 0x1e, 0x4b, 0x80, + 0xf8, 0x24, 0xa5, 0xe5, 0xaf, 0x05, 0xb3, 0x3d, 0xf6, 0x9f, 0xca, 0xd2, + 0x82, 0x1b, 0xb4, 0x96, 0x82, 0x76, 0x9d, 0x61, 0x11, 0x8e, 0x6b, 0x9e, + 0x34, 0x88, 0xe4, 0x79, 0x15, 0x17, 0x87, 0xb2, 0xd2, 0x07, 0x0d, 0x20, + 0x83, 0xe4, 0x52, 0x52, 0x27, 0x31, 0x81, 0xce, 0xda, 0x7d, 0xb2, 0x7e, + 0x63, 0xc5, 0x5b, 0xf7, 0x7d, 0x9f, 0xe5, 0x13, 0xe4, 0xaa, 0xd8, 0xc3, + 0xea, 0x96, 0xb7, 0x9e, 0x40, 0xfc, 0xa1, 0x68, 0xed, 0xfd, 0x5b, 0xe4, + 0x92, 0x9c, 0xb4, 0x8a, 0x72, 0x0a, 0x81, 0x29, 0x29, 0x79, 0x4a, 0x54, + 0x0b, 0x94, 0x77, 0xea, 0x92, 0x9b, 0x01, 0x3e, 0x88, 0x2c, 0xb0, 0x22, + 0x13, 0xa2, 0x4a, 0x5c, 0xb9, 0x38, 0x2a, 0x2d, 0x6b, 0x9c, 0x74, 0x08, + 0xa2, 0xa7, 0x24, 0xa5, 0xc2, 0x9b, 0x52, 0xf4, 0xc8, 0x00, 0xc6, 0x9e, + 0x29, 0x0e, 0x12, 0x53, 0x53, 0x38, 0x93, 0x63, 0x7c, 0x21, 0x55, 0x57, + 0xf2, 0xe9, 0x2f, 0x66, 0xe6, 0x8d, 0x5b, 0xf9, 0x15, 0x04, 0x94, 0xd8, + 0xc2, 0x1b, 0xaf, 0x63, 0x7c, 0x5c, 0xba, 0x9c, 0x1a, 0x5c, 0x72, 0x77, + 0x34, 0x4b, 0x58, 0x17, 0x29, 0x8d, 0x60, 0xaa, 0xd6, 0xbc, 0xf0, 0xdf, + 0xee, 0x5b, 0x38, 0xb9, 0x7d, 0x4b, 0xd1, 0x2f, 0xa5, 0x9a, 0x3b, 0x80, + 0x12, 0x53, 0xd7, 0xe2, 0x66, 0x59, 0x5b, 0xbd, 0x3b, 0x03, 0x84, 0x7d, + 0x13, 0xe2, 0x15, 0xe1, 0x94, 0xc7, 0x86, 0x90, 0xfd, 0x4a, 0xf3, 0xec, + 0x8e, 0xa9, 0xd6, 0xb4, 0xad, 0xe5, 0xcc, 0x03, 0xc4, 0x42, 0xb9, 0xd2, + 0x3a, 0x96, 0x4f, 0xac, 0xda, 0x32, 0x4e, 0x8f, 0xe1, 0xc7, 0xc5, 0x25, + 0x3d, 0x77, 0xda, 0x6b, 0x26, 0xd0, 0x5e, 0x65, 0xa7, 0x54, 0xc5, 0xf7, + 0xda, 0x3f, 0x47, 0x05, 0x87, 0xbc, 0xf6, 0x54, 0xba, 0x86, 0x3b, 0xfd, + 0x11, 0x91, 0x8f, 0xce, 0xd8, 0x70, 0xf8, 0x77, 0x5c, 0x6e, 0x46, 0x77, + 0x52, 0xad, 0xee, 0x6b, 0x6e, 0x73, 0x5b, 0xdc, 0x03, 0xa2, 0x4a, 0x7d, + 0x01, 0xd9, 0x35, 0x56, 0x66, 0xe7, 0xb5, 0x91, 0xa4, 0x25, 0xf6, 0x9c, + 0x7b, 0xc1, 0xf4, 0xdc, 0x6d, 0x03, 0xb0, 0x2b, 0xce, 0x1b, 0x9d, 0x93, + 0x6b, 0x83, 0x2d, 0x79, 0x83, 0xc9, 0xd5, 0xdf, 0x82, 0xd3, 0xc7, 0xcc, + 0x66, 0x30, 0x06, 0x9c, 0xa2, 0x1c, 0x74, 0x24, 0x82, 0x1b, 0xff, 0x00, + 0x49, 0x25, 0x3d, 0x26, 0x5b, 0xd8, 0x24, 0x86, 0xf1, 0xd8, 0xf2, 0x16, + 0x3f, 0x52, 0xa4, 0xd9, 0x41, 0x8e, 0x7b, 0x29, 0xd4, 0xdc, 0xd7, 0x3c, + 0x3f, 0xd5, 0x16, 0x31, 0xe3, 0xe8, 0x9f, 0x3f, 0x02, 0xae, 0x3e, 0x80, + 0xea, 0x37, 0x18, 0x1a, 0x40, 0x6f, 0x72, 0x52, 0x53, 0xc3, 0x5a, 0xc2, + 0xcb, 0x0b, 0x5d, 0xc8, 0x50, 0x5a, 0xdd, 0x63, 0x10, 0x30, 0x8b, 0x00, + 0xd7, 0x87, 0x2c, 0xa0, 0xd2, 0x4c, 0x24, 0xa5, 0xf6, 0x3f, 0x66, 0xf8, + 0x3b, 0x26, 0x27, 0xb4, 0xa7, 0xac, 0x90, 0x74, 0xed, 0xaa, 0xba, 0xda, + 0x6e, 0xa6, 0xb6, 0xd6, 0x44, 0xd7, 0x7e, 0x9b, 0x4f, 0x89, 0xd2, 0x55, + 0x06, 0xc8, 0x29, 0x29, 0xd7, 0xb7, 0x22, 0x31, 0x70, 0xdc, 0x20, 0xb4, + 0x07, 0xb5, 0xc0, 0xf7, 0x1b, 0xbd, 0xc3, 0xee, 0x51, 0xc3, 0x61, 0x7e, + 0x59, 0x03, 0x56, 0xb5, 0xa4, 0xb4, 0x9f, 0x03, 0xc2, 0xab, 0x5b, 0x83, + 0xf1, 0x9d, 0x43, 0x8c, 0x6d, 0x3b, 0xd8, 0x7c, 0x37, 0x68, 0xef, 0xc8, + 0xb5, 0x3a, 0x65, 0x6d, 0xc7, 0xa5, 0xd9, 0x36, 0x9d, 0xb2, 0x06, 0xd9, + 0xee, 0x07, 0x1f, 0x8a, 0x4a, 0x5e, 0xf6, 0x06, 0xde, 0xf8, 0x1a, 0x86, + 0xb4, 0x8f, 0x8b, 0x5d, 0x07, 0xf2, 0xa8, 0x5a, 0xdd, 0xb9, 0x0e, 0x27, + 0xe8, 0x3c, 0x82, 0x3c, 0x9d, 0x10, 0xa5, 0x40, 0x76, 0x43, 0x8d, 0xa4, + 0xfd, 0x36, 0xd8, 0xd1, 0x3d, 0xf8, 0x77, 0xf0, 0x53, 0xc8, 0x7f, 0xa0, + 0xe7, 0x3e, 0xc6, 0x97, 0x32, 0x01, 0x69, 0x1c, 0x82, 0xef, 0x04, 0x94, + 0xc2, 0xdb, 0xbd, 0x36, 0x6c, 0x60, 0x1e, 0xab, 0x8c, 0x38, 0x8f, 0x14, + 0x06, 0x7a, 0xd5, 0x5d, 0xf6, 0x96, 0x9f, 0xa2, 0x77, 0x03, 0xe6, 0x7b, + 0x22, 0x39, 0xf8, 0xd5, 0x86, 0x33, 0xf4, 0x84, 0xc0, 0x82, 0x40, 0xf8, + 0xf6, 0x2a, 0x45, 0xcd, 0x23, 0xd3, 0x00, 0xed, 0x68, 0xdc, 0xe1, 0xf1, + 0x49, 0x4c, 0xed, 0xf4, 0xef, 0x69, 0xca, 0xa8, 0x41, 0xdb, 0xfa, 0x46, + 0x0f, 0xcd, 0xfe, 0x57, 0xc1, 0x56, 0x6b, 0x78, 0x77, 0x60, 0xd2, 0xef, + 0xf3, 0xb8, 0x53, 0x22, 0xca, 0xed, 0xac, 0x56, 0x4b, 0x6c, 0x8d, 0xce, + 0x23, 0xc3, 0x98, 0x8f, 0x82, 0x9e, 0x53, 0x9b, 0xe9, 0x96, 0x40, 0xaa, + 0xe3, 0xab, 0x99, 0x30, 0x35, 0xf0, 0x49, 0x4e, 0x7c, 0x0d, 0xe3, 0x5d, + 0x4f, 0x08, 0xd7, 0x38, 0x6d, 0xae, 0xc7, 0x79, 0xb1, 0xca, 0xbb, 0xc3, + 0x9a, 0xd0, 0x4f, 0xb5, 0xc3, 0xc7, 0xcb, 0x54, 0x5b, 0x5c, 0x1d, 0x43, + 0xa3, 0x5d, 0x1a, 0xf1, 0xf1, 0x1a, 0x24, 0xa6, 0x4f, 0x69, 0xf5, 0xea, + 0x77, 0xe7, 0x40, 0x25, 0x68, 0x6c, 0xf6, 0xc4, 0x69, 0xe0, 0xb3, 0xe9, + 0xb3, 0xd4, 0xc9, 0x64, 0xea, 0x4b, 0x41, 0x72, 0xd6, 0xd9, 0xec, 0xdf, + 0xd9, 0x25, 0x39, 0x02, 0xa3, 0x1a, 0xa1, 0xd9, 0x54, 0x02, 0x55, 0xc7, + 0x80, 0x10, 0x2f, 0x3e, 0xd4, 0x94, 0xe6, 0xbb, 0x42, 0x52, 0x53, 0x2d, + 0x92, 0x54, 0x76, 0x90, 0x92, 0x96, 0x6f, 0xd2, 0x57, 0x6b, 0xa9, 0xcf, + 0x88, 0x1f, 0xec, 0x55, 0x2a, 0x63, 0x9c, 0xf0, 0x07, 0xcc, 0xf9, 0x2d, + 0x2a, 0xe0, 0x80, 0xc6, 0x12, 0x1b, 0xe5, 0xa4, 0xfc, 0xca, 0x4a, 0x66, + 0x2b, 0xad, 0x83, 0x49, 0x73, 0xbf, 0x92, 0x3f, 0xbd, 0x36, 0xfb, 0x19, + 0xf9, 0xbb, 0x7f, 0xad, 0xfe, 0xc4, 0x4d, 0xf7, 0x54, 0x08, 0xa5, 0x85, + 0xa4, 0xfe, 0x74, 0x6e, 0x3f, 0xe7, 0x39, 0x57, 0xba, 0xac, 0xa7, 0x8d, + 0xd6, 0x38, 0x86, 0xf8, 0xb8, 0xc0, 0x49, 0x49, 0x45, 0x93, 0xdb, 0x6c, + 0xf7, 0x1f, 0xc5, 0x39, 0x3a, 0x13, 0x0d, 0x31, 0xc8, 0xfe, 0x3a, 0x2a, + 0x2d, 0x7d, 0x6d, 0xd3, 0x79, 0x71, 0xf2, 0xe1, 0x1a, 0x49, 0x00, 0xb4, + 0x90, 0x7c, 0xc7, 0x64, 0x94, 0x94, 0x5d, 0x8c, 0x46, 0xd7, 0x83, 0x59, + 0xf1, 0x1a, 0x85, 0x9f, 0x90, 0xca, 0xf7, 0x93, 0x51, 0x90, 0x89, 0x79, + 0xfd, 0xe1, 0x0a, 0xb1, 0x22, 0x74, 0x49, 0x49, 0x70, 0xeb, 0x16, 0x5a, + 0x1a, 0x78, 0xe5, 0x69, 0x63, 0xb3, 0xa9, 0xda, 0xfd, 0x98, 0xce, 0x34, + 0xd6, 0xde, 0x1e, 0x44, 0x4f, 0xc1, 0x55, 0xe9, 0x1e, 0xdc, 0xd6, 0xbb, + 0xc0, 0x2f, 0x40, 0xc3, 0xc4, 0xaa, 0xca, 0x81, 0x80, 0x49, 0x03, 0x54, + 0x94, 0xf3, 0x58, 0x3d, 0x0b, 0x7b, 0xcd, 0x9d, 0x51, 0xe6, 0xe0, 0x41, + 0x26, 0x1c, 0x4b, 0xb7, 0x1e, 0x21, 0x35, 0x7d, 0x18, 0xb2, 0xe6, 0x16, + 0x93, 0xb5, 0xae, 0x11, 0xf7, 0xf0, 0xba, 0xab, 0xf0, 0x8f, 0xe6, 0x82, + 0x7c, 0xa6, 0x07, 0xe0, 0xb3, 0x9f, 0x8e, 0x2a, 0xcd, 0xa1, 0x93, 0x2e, + 0x2e, 0x04, 0xb4, 0x70, 0x02, 0x4a, 0x77, 0x32, 0xe8, 0x61, 0xc3, 0x0c, + 0x22, 0x0c, 0x09, 0x8d, 0x17, 0x23, 0x91, 0xd2, 0x6a, 0x36, 0xbd, 0xef, + 0x21, 0xa6, 0x7d, 0x80, 0x89, 0x5d, 0x76, 0x75, 0x81, 0xad, 0x63, 0x0c, + 0x00, 0xe1, 0xaa, 0xa5, 0x55, 0x74, 0x5b, 0x61, 0xae, 0xd1, 0xb8, 0x1f, + 0xf5, 0x94, 0x94, 0xf3, 0xb4, 0xf4, 0x7c, 0x57, 0x35, 0xac, 0xb5, 0xa5, + 0xcd, 0x69, 0x3a, 0x8d, 0x09, 0xdd, 0xe2, 0x56, 0xcd, 0x1d, 0x17, 0x0d, + 0xf4, 0x0a, 0xbd, 0x06, 0x96, 0x73, 0xee, 0x3b, 0xbb, 0x47, 0x0b, 0x52, + 0xbc, 0x36, 0xd4, 0x63, 0x96, 0x8f, 0x25, 0x64, 0x06, 0x30, 0x70, 0x12, + 0x53, 0x84, 0xdf, 0xab, 0x54, 0x63, 0x0f, 0xd0, 0xde, 0xf6, 0xb2, 0x64, + 0x30, 0xea, 0x07, 0xc3, 0xc1, 0x0e, 0xea, 0x5d, 0x4b, 0x0b, 0x5a, 0x5b, + 0xa7, 0x78, 0xd5, 0x69, 0xe5, 0x5e, 0x35, 0xd7, 0xe2, 0xb2, 0xb2, 0xef, + 0x1b, 0x4a, 0x4a, 0x70, 0xfa, 0x86, 0xcb, 0x2b, 0x73, 0x0f, 0xf7, 0xac, + 0x71, 0x8c, 0x58, 0x77, 0x01, 0xb9, 0xab, 0x4f, 0x21, 0xe3, 0xdc, 0x63, + 0x99, 0x50, 0xc6, 0xda, 0x6b, 0x2d, 0x3a, 0xbc, 0x8e, 0x3c, 0x3c, 0xca, + 0x4a, 0x63, 0x3b, 0xa8, 0x6f, 0xa9, 0xcd, 0x72, 0xe6, 0x3b, 0xc8, 0x09, + 0x8f, 0x92, 0xc4, 0x1c, 0xca, 0xdd, 0xcb, 0x6b, 0x59, 0x8c, 0xf0, 0x47, + 0x97, 0xf6, 0x8f, 0xfb, 0x16, 0x23, 0xdb, 0xb4, 0xc7, 0xcc, 0x1f, 0x24, + 0x94, 0x9e, 0xa1, 0x25, 0xaf, 0xec, 0x34, 0x70, 0xf1, 0x90, 0xb4, 0x2b, + 0x6b, 0xef, 0x7b, 0x5d, 0x73, 0xa2, 0xbf, 0xa3, 0x5d, 0x63, 0x52, 0x63, + 0xf7, 0x47, 0x97, 0x8a, 0xa3, 0x8c, 0xdd, 0xc3, 0x69, 0x30, 0x08, 0xd7, + 0xe1, 0xdd, 0x5f, 0x66, 0x60, 0xac, 0x3b, 0x69, 0xdb, 0x6b, 0xa3, 0x73, + 0xc7, 0x2c, 0x69, 0x1a, 0x35, 0xbf, 0x04, 0x94, 0xdf, 0x18, 0xef, 0xc7, + 0x2c, 0x70, 0x00, 0x35, 0x84, 0x38, 0xb4, 0x98, 0x30, 0x74, 0x20, 0xfc, + 0x94, 0xb2, 0xea, 0x6e, 0x46, 0x19, 0x65, 0x47, 0x73, 0x83, 0x61, 0x87, + 0xf7, 0xf6, 0xf1, 0xf3, 0x84, 0x2a, 0x6d, 0xa4, 0x30, 0x7d, 0xa1, 0x9e, + 0xa5, 0x16, 0x00, 0x1e, 0xee, 0x48, 0x3e, 0x32, 0x95, 0xf4, 0xdb, 0x88, + 0xd1, 0x66, 0x33, 0xbd, 0x6c, 0x43, 0xab, 0x83, 0x7f, 0x37, 0xcf, 0xc8, + 0x84, 0x94, 0xd1, 0xb9, 0xa0, 0xe4, 0xb0, 0x91, 0x1b, 0x98, 0xc3, 0x1d, + 0xb8, 0x82, 0x9d, 0x84, 0x9b, 0x5d, 0xb8, 0xc0, 0x73, 0xb8, 0x3f, 0x72, + 0xb3, 0x68, 0xc7, 0xcf, 0x63, 0x1c, 0xc7, 0x0a, 0xf2, 0xaa, 0xfc, 0xd3, + 0x03, 0x78, 0x3a, 0xe9, 0xd9, 0x50, 0xbd, 0x96, 0x51, 0x73, 0xb4, 0x20, + 0x13, 0xb8, 0x4f, 0x8f, 0x82, 0x4a, 0x6e, 0xd1, 0x93, 0x5d, 0x5e, 0xb6, + 0x6b, 0xc4, 0xed, 0x3b, 0x6b, 0x07, 0xb9, 0x9d, 0x16, 0x56, 0x4d, 0xef, + 0xc9, 0x7e, 0xe7, 0x77, 0x32, 0xa5, 0x91, 0x6e, 0xf6, 0x36, 0xb6, 0xe9, + 0x53, 0x49, 0x20, 0xf8, 0x97, 0x72, 0x4a, 0xaa, 0xf3, 0xc4, 0x70, 0x04, + 0x24, 0xa4, 0xce, 0x7f, 0xb0, 0x09, 0xd0, 0x04, 0x5d, 0xde, 0xc6, 0x30, + 0x0f, 0xa6, 0xd8, 0x0a, 0xab, 0x4b, 0x4c, 0x6e, 0xfa, 0x23, 0xb2, 0x2d, + 0x99, 0x0d, 0xdf, 0x23, 0x52, 0xd1, 0x0d, 0xf0, 0x07, 0xc5, 0x25, 0x37, + 0x30, 0x31, 0xcf, 0xa8, 0x6c, 0x26, 0x44, 0xc0, 0xf9, 0x2d, 0x89, 0x3b, + 0x36, 0x79, 0x2c, 0xfe, 0x9a, 0x5a, 0x68, 0x69, 0x02, 0x00, 0x57, 0x25, + 0xfb, 0x77, 0x76, 0x49, 0x4e, 0x5b, 0xaf, 0x67, 0x8a, 0x0d, 0xb6, 0xb4, + 0x83, 0x0a, 0xa8, 0xae, 0xc2, 0x9c, 0xd6, 0xe1, 0xca, 0x4a, 0x60, 0x5d, + 0xaa, 0x2b, 0x44, 0xf2, 0x80, 0xed, 0x0a, 0x9d, 0x4e, 0x33, 0x09, 0x29, + 0x37, 0xf3, 0x4d, 0xde, 0xd1, 0x26, 0x75, 0x45, 0xab, 0x28, 0x3b, 0xda, + 0xc1, 0xb3, 0xc8, 0x09, 0xfc, 0xa8, 0x6d, 0x00, 0xb1, 0xcd, 0x3c, 0x92, + 0x23, 0xee, 0x50, 0xa8, 0xb4, 0x3b, 0x61, 0x25, 0x8e, 0x98, 0x90, 0x25, + 0x25, 0x3a, 0xf5, 0xd8, 0x6a, 0x68, 0xd4, 0x6e, 0x3a, 0xed, 0x3e, 0xe3, + 0xf3, 0xf0, 0x40, 0x7b, 0x0e, 0x43, 0xe5, 0xc4, 0xd8, 0xef, 0xde, 0x76, + 0x8c, 0x6a, 0x9b, 0x2a, 0xad, 0x95, 0xcc, 0x8d, 0x7b, 0x77, 0x3f, 0xd6, + 0x2a, 0x16, 0xb5, 0xf0, 0xed, 0xe6, 0x18, 0x34, 0x0d, 0x9e, 0x4a, 0x4a, + 0x66, 0xce, 0x9e, 0x1c, 0x09, 0x0e, 0x6f, 0xde, 0x10, 0xad, 0x63, 0x6a, + 0x05, 0xa5, 0xdf, 0x25, 0x06, 0xd1, 0x90, 0x4e, 0xf3, 0xed, 0x8f, 0xa2, + 0x38, 0x8f, 0x82, 0x05, 0xce, 0x7e, 0xe2, 0x1c, 0x77, 0x1e, 0xe0, 0x04, + 0x94, 0x8a, 0xcd, 0x74, 0x9d, 0x02, 0x09, 0x81, 0xf1, 0x4e, 0xe7, 0x4f, + 0x68, 0x51, 0x02, 0x52, 0x53, 0x7b, 0xa3, 0xb8, 0x0c, 0x92, 0x0f, 0x25, + 0xa6, 0x17, 0x71, 0xd2, 0xf3, 0x25, 0x81, 0xbd, 0xf8, 0x85, 0xe7, 0x95, + 0x58, 0x69, 0xb5, 0xaf, 0x1f, 0x9b, 0xcf, 0xc1, 0x74, 0xb8, 0x59, 0x85, + 0x85, 0xa6, 0x52, 0x53, 0xd9, 0xd9, 0x90, 0x05, 0x73, 0x3f, 0x15, 0x89, + 0x84, 0xe3, 0x91, 0xd4, 0xbd, 0x43, 0xc3, 0x49, 0x83, 0xf0, 0x43, 0xca, + 0xce, 0x71, 0xa0, 0x57, 0x5e, 0xaf, 0xb3, 0xda, 0xdf, 0x9a, 0x1f, 0x4e, + 0xce, 0xab, 0xa6, 0xe4, 0x3a, 0xac, 0xb1, 0xee, 0x11, 0xb4, 0xf6, 0x3e, + 0x69, 0x29, 0xde, 0xea, 0x44, 0x17, 0x01, 0xe1, 0x10, 0x55, 0x27, 0x58, + 0xfc, 0x7b, 0x18, 0xe7, 0x0f, 0xd1, 0xbb, 0x93, 0xdc, 0x20, 0x75, 0x1f, + 0xac, 0x18, 0xee, 0x73, 0x5c, 0xcd, 0x47, 0x24, 0x0d, 0x65, 0x07, 0x13, + 0x2a, 0xce, 0xa9, 0x68, 0xad, 0x95, 0xb9, 0x95, 0x0f, 0xa4, 0xe7, 0x0e, + 0xc9, 0x29, 0xe8, 0x2a, 0xcc, 0x6b, 0xc6, 0xa4, 0x00, 0x35, 0x05, 0x42, + 0xfc, 0xa6, 0x81, 0xb4, 0x1d, 0x4a, 0xc8, 0xbf, 0x1b, 0x2b, 0x01, 0xd2, + 0xdf, 0x7d, 0x47, 0x8f, 0x10, 0xa1, 0xf6, 0xbd, 0xed, 0xdc, 0x0e, 0xbd, + 0xc2, 0x4a, 0x67, 0x99, 0x7e, 0xdd, 0x01, 0x59, 0x17, 0xdc, 0x4b, 0x4c, + 0x92, 0x7c, 0xcf, 0x28, 0xf7, 0xda, 0x5c, 0xed, 0x55, 0x1b, 0x01, 0x2e, + 0x02, 0x52, 0x52, 0x27, 0xb2, 0x6b, 0x24, 0xfd, 0xdf, 0x15, 0x6a, 0x9c, + 0x71, 0x5d, 0x21, 0xb6, 0xd8, 0x1a, 0xd8, 0x92, 0x78, 0xd3, 0x9d, 0x4a, + 0xa7, 0xd4, 0x5e, 0x6a, 0xc6, 0x76, 0xdd, 0x0e, 0x9a, 0xfc, 0xd6, 0x4d, + 0xf9, 0xd9, 0x39, 0x0d, 0x0d, 0xb1, 0xe4, 0xb4, 0x76, 0x1a, 0x04, 0x94, + 0xdc, 0xcc, 0xea, 0x0c, 0xbe, 0xe2, 0xc6, 0xff, 0x00, 0x34, 0xdd, 0x01, + 0xf1, 0x3e, 0x2a, 0x9e, 0x43, 0x44, 0xc8, 0xec, 0x82, 0xde, 0x51, 0x09, + 0x91, 0xaf, 0x82, 0x4a, 0x67, 0x4b, 0xc8, 0xde, 0xd1, 0xcb, 0x9b, 0x03, + 0xe4, 0xa3, 0x8e, 0x4e, 0xee, 0x7e, 0x97, 0xb6, 0x7c, 0x0f, 0x64, 0x3f, + 0x73, 0x60, 0xf8, 0xf0, 0x42, 0x93, 0x1c, 0x77, 0xc9, 0x1a, 0x1e, 0x52, + 0x53, 0xa5, 0x43, 0xdf, 0x5d, 0x37, 0x34, 0x9d, 0x1b, 0x0e, 0x0d, 0x3e, + 0x7c, 0xa2, 0x61, 0xf5, 0x2a, 0xd9, 0xa3, 0x89, 0x6f, 0x60, 0xe1, 0xf9, + 0x0a, 0xa6, 0x6d, 0x75, 0xb4, 0x96, 0x8d, 0x5e, 0x74, 0x27, 0xc9, 0x06, + 0x9a, 0x88, 0x7e, 0xd7, 0x0d, 0x12, 0x53, 0x67, 0x37, 0x22, 0xab, 0x9d, + 0x35, 0x97, 0x97, 0x4f, 0xc4, 0x04, 0x21, 0x6e, 0x53, 0x99, 0xe9, 0xb8, + 0x17, 0xb3, 0xf3, 0x67, 0x91, 0xf0, 0x56, 0xab, 0xa1, 0xa0, 0x71, 0xaa, + 0x23, 0x6a, 0x6c, 0xea, 0x0a, 0x4a, 0x68, 0x0c, 0x7b, 0x9f, 0x32, 0x23, + 0xc4, 0x76, 0x4c, 0xfc, 0x4b, 0x5a, 0xd9, 0xdb, 0xa2, 0xd2, 0xd8, 0xea, + 0xcc, 0xd6, 0x43, 0x87, 0x81, 0x53, 0xfb, 0x76, 0x43, 0x00, 0x05, 0x8c, + 0x3f, 0x10, 0x09, 0x49, 0x4e, 0x3d, 0x74, 0x1d, 0xd0, 0xe1, 0xa4, 0x21, + 0xb9, 0x80, 0x38, 0x01, 0xc1, 0x5b, 0x99, 0x17, 0x59, 0x68, 0x6b, 0xdd, + 0x58, 0x6b, 0x47, 0xe6, 0xb4, 0x01, 0xa7, 0x75, 0x95, 0x90, 0xc6, 0xee, + 0xf5, 0x1a, 0x23, 0x88, 0x1e, 0x49, 0x29, 0xd6, 0xe9, 0xd5, 0xb7, 0xec, + 0xc0, 0x46, 0xad, 0xe4, 0xad, 0x8d, 0x8d, 0xfb, 0x14, 0xc6, 0xaa, 0x86, + 0x0b, 0x43, 0x31, 0xdb, 0xbb, 0x97, 0x2d, 0x6d, 0x9f, 0xab, 0x47, 0xcd, + 0x25, 0x3c, 0xb3, 0xaa, 0x8e, 0x02, 0x5f, 0x65, 0x2e, 0x12, 0xad, 0x8a, + 0xc1, 0x28, 0xbb, 0x40, 0x10, 0x92, 0x9e, 0x7f, 0x2a, 0xbf, 0x4e, 0xc8, + 0x41, 0x6c, 0xce, 0x8a, 0xe7, 0x52, 0x11, 0x6a, 0xab, 0x5f, 0x24, 0xa4, + 0xa6, 0x7b, 0xcc, 0xfc, 0x13, 0xdf, 0x51, 0xae, 0xd0, 0xee, 0x03, 0xa0, + 0x8f, 0x9a, 0xd0, 0xe9, 0xd8, 0x2d, 0xb0, 0x7d, 0xa7, 0x20, 0x11, 0x43, + 0x24, 0x9f, 0x33, 0xd8, 0x21, 0x1a, 0xec, 0xce, 0xbc, 0xbb, 0x6c, 0x37, + 0xf3, 0x63, 0x88, 0x49, 0x4d, 0x9c, 0x67, 0x32, 0xd6, 0x86, 0xb8, 0x6e, + 0x70, 0xd5, 0xa4, 0x23, 0xbd, 0x95, 0x87, 0x17, 0xbb, 0xe9, 0x4c, 0xc7, + 0x3c, 0xf9, 0x2a, 0x43, 0x22, 0xcc, 0x07, 0xfa, 0x76, 0x4b, 0xda, 0x78, + 0xdb, 0xed, 0xd3, 0xce, 0x15, 0xcd, 0xed, 0xc8, 0x60, 0x75, 0x6e, 0xdf, + 0x3f, 0x99, 0xa3, 0x4b, 0x7e, 0x49, 0x29, 0x1d, 0xb7, 0x48, 0x22, 0x76, + 0xfe, 0x2e, 0x54, 0x2d, 0xde, 0xe9, 0xf6, 0x98, 0xf3, 0xd1, 0x59, 0xb6, + 0xa8, 0x27, 0xdb, 0x07, 0xbc, 0x7f, 0xa8, 0x55, 0xac, 0x6c, 0x0d, 0x4c, + 0x24, 0xa6, 0xb3, 0x98, 0x41, 0xd7, 0x44, 0xd1, 0x24, 0x00, 0x35, 0x29, + 0xc9, 0x13, 0x0d, 0xd4, 0xf8, 0xa2, 0x34, 0x1a, 0x9b, 0xeb, 0x1f, 0xa5, + 0xc3, 0x07, 0x9f, 0x8f, 0xc9, 0x25, 0x20, 0xb3, 0x47, 0x11, 0xcc, 0x68, + 0xb4, 0xb0, 0xef, 0x3e, 0x93, 0x09, 0xed, 0xed, 0x3f, 0x2e, 0x16, 0x61, + 0xe5, 0x6c, 0xfd, 0x5f, 0xe9, 0xd7, 0x75, 0x17, 0xd9, 0x8e, 0xd1, 0xb5, + 0x9a, 0x13, 0x61, 0xe0, 0x1e, 0x3e, 0xf4, 0x94, 0xec, 0xe1, 0x96, 0x3a, + 0xca, 0xed, 0x3a, 0xc0, 0xf6, 0xfc, 0x54, 0xf3, 0x71, 0xab, 0xc8, 0x82, + 0xf2, 0x04, 0xcf, 0x25, 0x57, 0xbb, 0x13, 0x27, 0xa6, 0x17, 0xd7, 0x2e, + 0xba, 0xba, 0xc1, 0x3e, 0xa8, 0x69, 0x00, 0x4f, 0x8a, 0x58, 0x58, 0xd6, + 0x65, 0x86, 0xba, 0xeb, 0x83, 0x0b, 0xb5, 0x73, 0x36, 0xee, 0xd0, 0xf1, + 0xca, 0x4a, 0x65, 0x8b, 0xd1, 0xda, 0xdb, 0x7d, 0xd7, 0x02, 0xde, 0x40, + 0x90, 0xba, 0x1c, 0x1c, 0x5a, 0xf1, 0xda, 0x36, 0xb8, 0x19, 0xf0, 0x20, + 0xac, 0xd6, 0x7d, 0x5f, 0xac, 0x9d, 0xc7, 0x2a, 0x59, 0xd8, 0x06, 0x89, + 0xfc, 0x52, 0xb3, 0xa4, 0x62, 0x34, 0x98, 0xba, 0xd3, 0x1d, 0x81, 0x00, + 0xff, 0x00, 0xd1, 0x49, 0x4e, 0xe5, 0xce, 0x0e, 0x96, 0x12, 0x20, 0xf2, + 0xb1, 0x32, 0xf1, 0x46, 0xe7, 0xbe, 0x90, 0x1b, 0x63, 0x7e, 0x93, 0x7f, + 0x35, 0xe3, 0xc5, 0x31, 0xe9, 0x74, 0xb4, 0xee, 0x65, 0xd7, 0x30, 0x92, + 0x36, 0xcb, 0xc9, 0xfc, 0xaa, 0xc3, 0x3d, 0x3a, 0x2b, 0x2d, 0x7d, 0x9e, + 0xa3, 0xc7, 0x24, 0xf8, 0x24, 0xa7, 0x1e, 0xd8, 0xdf, 0x1c, 0x77, 0x82, + 0x87, 0xb5, 0xa3, 0x5e, 0x4a, 0x3d, 0x83, 0xd4, 0xb5, 0xc7, 0xb1, 0x40, + 0xc8, 0x7b, 0x2a, 0x61, 0x3d, 0xc2, 0x4a, 0x72, 0xba, 0xc5, 0xa3, 0x6e, + 0xc1, 0xdc, 0x81, 0x1f, 0x0d, 0x56, 0x4a, 0xb9, 0x9e, 0x1c, 0xe2, 0x1e, + 0xef, 0x1f, 0xca, 0xaa, 0x06, 0x93, 0xc7, 0xe5, 0x49, 0x4b, 0x8d, 0x39, + 0xe5, 0x49, 0xe2, 0x1a, 0x35, 0xd5, 0x3b, 0x6a, 0x2d, 0xf7, 0xbf, 0x81, + 0xac, 0x29, 0x51, 0x60, 0x0f, 0xdc, 0xee, 0x4f, 0x07, 0xc1, 0x25, 0x31, + 0xae, 0xb7, 0xda, 0xe8, 0x68, 0xf7, 0x77, 0x57, 0xe9, 0xc6, 0x0d, 0x86, + 0xd9, 0xf4, 0x95, 0xc6, 0x9c, 0x5c, 0x86, 0xd6, 0xdc, 0x56, 0x93, 0x71, + 0x1e, 0xf6, 0x34, 0x78, 0x77, 0x28, 0x79, 0x78, 0xee, 0xae, 0xb7, 0x3c, + 0xbf, 0xf4, 0xcd, 0x3f, 0x44, 0x70, 0x21, 0x25, 0x24, 0xaf, 0x16, 0xb6, + 0xeb, 0x1a, 0xa8, 0x5f, 0x8a, 0x0f, 0xb9, 0xba, 0x14, 0xf8, 0xd9, 0x1e, + 0xa3, 0x43, 0xbc, 0x91, 0x5c, 0xe2, 0x42, 0x4a, 0x45, 0x4e, 0x90, 0x1d, + 0xf3, 0x56, 0x3d, 0x8e, 0x22, 0x74, 0x85, 0x4f, 0x7e, 0xd7, 0xcf, 0x0a, + 0xf5, 0x01, 0x8e, 0x00, 0xba, 0x09, 0x29, 0x29, 0x76, 0x51, 0xbc, 0xfb, + 0x7e, 0xf5, 0x61, 0xbd, 0x3d, 0x80, 0x4b, 0x9c, 0x24, 0xf0, 0x8b, 0x51, + 0x68, 0x3b, 0x60, 0x00, 0x55, 0x81, 0x48, 0x77, 0x07, 0x4f, 0x1e, 0xc9, + 0x29, 0xcf, 0xb7, 0x04, 0x90, 0x4c, 0x92, 0xb2, 0xf2, 0x30, 0x1c, 0xd7, + 0x88, 0x33, 0xa8, 0x90, 0x56, 0xe6, 0x66, 0x4d, 0x38, 0x95, 0x97, 0x58, + 0x64, 0x03, 0xf7, 0xfd, 0xeb, 0x3e, 0xab, 0x6c, 0xca, 0x77, 0xaa, 0x61, + 0xb5, 0xfe, 0x63, 0x40, 0x89, 0xf3, 0x29, 0x29, 0x3b, 0x04, 0x35, 0xac, + 0xe2, 0x22, 0x16, 0xa6, 0xf6, 0xfa, 0x1f, 0x28, 0x85, 0x42, 0xba, 0x9d, + 0xbc, 0x3d, 0xdc, 0x2b, 0x5e, 0xa5, 0x31, 0xf4, 0x84, 0xf8, 0x24, 0xa6, + 0x8b, 0x71, 0xdc, 0x58, 0x6c, 0x03, 0xda, 0x3b, 0x94, 0x37, 0x40, 0x5b, + 0x0c, 0x68, 0x0d, 0x75, 0x4e, 0x6f, 0xe8, 0x9c, 0x0f, 0x1e, 0x05, 0x4b, + 0x67, 0x4a, 0xe9, 0x3d, 0x3f, 0xd4, 0xba, 0x97, 0xe5, 0x5a, 0xe3, 0x0e, + 0x79, 0x6e, 0xed, 0xb3, 0xc4, 0x00, 0x92, 0x9e, 0x27, 0xa9, 0x8f, 0xd2, + 0xca, 0xb3, 0xd0, 0x7a, 0x2e, 0x47, 0x52, 0xb6, 0x43, 0x48, 0xa1, 0xa7, + 0xde, 0xf3, 0xf9, 0x02, 0xd4, 0xc4, 0xe8, 0x67, 0xaf, 0x65, 0x7d, 0xa3, + 0x63, 0xb1, 0xb0, 0x83, 0xa4, 0xe9, 0x05, 0xc3, 0xf9, 0x2b, 0xb5, 0xc7, + 0xc4, 0xa3, 0x17, 0x1d, 0xb8, 0xf8, 0xec, 0x0c, 0x63, 0x34, 0x10, 0x92, + 0x9e, 0x73, 0xa9, 0xf4, 0x91, 0xb2, 0x9c, 0x2a, 0x0e, 0xd6, 0x01, 0x2e, + 0x68, 0xfe, 0x28, 0x3f, 0xb2, 0x6a, 0xc2, 0xa4, 0x03, 0xf4, 0xbb, 0x95, + 0xd2, 0x5b, 0x48, 0x92, 0xf8, 0xf7, 0x78, 0xfc, 0x16, 0x46, 0x75, 0x9b, + 0x89, 0x61, 0x6c, 0x8f, 0x14, 0x94, 0xf3, 0x7d, 0x4f, 0x19, 0xa4, 0x12, + 0x20, 0x9e, 0x43, 0x82, 0xce, 0xa0, 0xea, 0x1a, 0x24, 0x11, 0xf9, 0xdc, + 0x2d, 0x1c, 0xba, 0x9f, 0x5b, 0x9c, 0x1b, 0x30, 0x78, 0x05, 0x66, 0xdc, + 0xd7, 0x02, 0x2e, 0x1e, 0xdf, 0x16, 0x8e, 0x3e, 0x29, 0x29, 0xb4, 0xea, + 0xed, 0x3f, 0x46, 0xcf, 0xbc, 0xff, 0x00, 0xbd, 0x0a, 0xcc, 0x77, 0x1d, + 0x6c, 0x25, 0xe7, 0xc1, 0xa2, 0x07, 0xde, 0x53, 0x57, 0x91, 0x63, 0x86, + 0x8e, 0x81, 0xe4, 0x88, 0x6c, 0x60, 0x12, 0xf3, 0x3e, 0x6e, 0x3f, 0x93, + 0xc5, 0x25, 0x35, 0xcd, 0x0e, 0x3e, 0x15, 0x56, 0x39, 0x8e, 0x7f, 0xda, + 0x55, 0x7b, 0xed, 0x6b, 0xbd, 0xac, 0x10, 0xd1, 0xa0, 0x1e, 0x00, 0x23, + 0x5d, 0x63, 0xed, 0x9d, 0x83, 0x6d, 0x63, 0xf3, 0x8e, 0x8a, 0x5d, 0x2b, + 0xa6, 0xd9, 0xd4, 0xfa, 0x85, 0x58, 0x55, 0xcf, 0xbc, 0xcb, 0xdf, 0xfb, + 0xac, 0x1f, 0x48, 0xa4, 0xa7, 0x47, 0xea, 0xb7, 0xd5, 0xab, 0x3a, 0xce, + 0x47, 0xa9, 0x68, 0x2d, 0xc4, 0xac, 0xc3, 0x88, 0xd0, 0xbc, 0xf8, 0x0f, + 0x87, 0x75, 0xe8, 0x2f, 0x75, 0x18, 0x0c, 0xaf, 0xa7, 0x74, 0xea, 0xd8, + 0xc7, 0xc4, 0x0d, 0xa3, 0x46, 0x37, 0xf7, 0x8a, 0x3d, 0x54, 0x51, 0xd2, + 0x7a, 0x73, 0x28, 0xc5, 0x68, 0x66, 0x81, 0x95, 0xb7, 0xbc, 0x7f, 0x79, + 0x43, 0x18, 0xf5, 0x62, 0xed, 0x73, 0xcf, 0xa9, 0x97, 0x7e, 0xa2, 0x7b, + 0x04, 0x94, 0xe7, 0xf5, 0x56, 0xd1, 0xd3, 0x7a, 0x6d, 0xce, 0x73, 0x8d, + 0xb6, 0x39, 0xa4, 0x92, 0xed, 0x4b, 0x9c, 0x7b, 0xc2, 0xe4, 0x31, 0x45, + 0xd7, 0xd1, 0x5d, 0xac, 0x05, 0xaf, 0x20, 0x41, 0xf1, 0x5d, 0xaf, 0x50, + 0xfb, 0x3e, 0x25, 0x56, 0x65, 0x65, 0x3b, 0x73, 0xb6, 0xf7, 0xe2, 0x17, + 0x17, 0x87, 0xd5, 0xab, 0xbb, 0x2a, 0xc0, 0xd0, 0x19, 0x58, 0x71, 0xf4, + 0xc0, 0xf0, 0x49, 0x4e, 0x8d, 0x3d, 0x2f, 0xa8, 0x3a, 0x0b, 0x9c, 0x63, + 0x9f, 0xa4, 0x55, 0xdd, 0xb7, 0x63, 0x00, 0xd7, 0x07, 0x3c, 0x9d, 0x1a, + 0x5a, 0x27, 0xef, 0x45, 0xc4, 0xcb, 0x0e, 0xac, 0x03, 0x10, 0x78, 0x33, + 0xf8, 0x2b, 0xa3, 0x2f, 0x18, 0x0d, 0xb2, 0x09, 0x49, 0x4e, 0x5b, 0xd9, + 0x90, 0xd7, 0x6f, 0x26, 0x09, 0xe1, 0xbe, 0x6a, 0x9d, 0xae, 0xb9, 0xe4, + 0x87, 0x11, 0xbb, 0xbc, 0x68, 0x16, 0x8e, 0x76, 0x65, 0x46, 0x60, 0x85, + 0x83, 0x6e, 0x61, 0x73, 0x9d, 0xe9, 0x82, 0xe2, 0x7e, 0xe4, 0x94, 0x9e, + 0xcb, 0x1b, 0x45, 0x44, 0xbc, 0xcb, 0xca, 0xa0, 0x43, 0xef, 0x78, 0x73, + 0xb4, 0x68, 0xec, 0x8a, 0xda, 0x2c, 0xb0, 0xef, 0xb7, 0x53, 0xf8, 0x23, + 0x36, 0xb8, 0x02, 0x44, 0x04, 0x94, 0xe5, 0x75, 0x0a, 0x7f, 0x40, 0x5c, + 0x47, 0xd1, 0x59, 0x6d, 0x63, 0x9d, 0xc2, 0xdf, 0xcd, 0x61, 0x7d, 0x6e, + 0x1d, 0xe0, 0xac, 0xbc, 0x2a, 0xb7, 0x5b, 0x63, 0x60, 0x7b, 0x61, 0xda, + 0xc7, 0xef, 0x0f, 0x14, 0x94, 0xd6, 0x6b, 0xc8, 0x05, 0x8e, 0xe3, 0xf2, + 0x29, 0x30, 0x36, 0x06, 0xe6, 0x9f, 0x92, 0xbd, 0x7f, 0x4f, 0x73, 0xc0, + 0x2d, 0x10, 0x48, 0xfc, 0x92, 0x3f, 0x82, 0xa4, 0x45, 0xcc, 0x77, 0xa7, + 0x60, 0xdb, 0x1e, 0x29, 0x29, 0xd0, 0xc3, 0xcd, 0x6e, 0x34, 0x7a, 0x43, + 0x69, 0x3c, 0x34, 0x72, 0x55, 0xdb, 0x31, 0x72, 0x2e, 0x22, 0xdc, 0xa6, + 0xfa, 0x15, 0x58, 0x24, 0x0f, 0xce, 0x31, 0xe5, 0xd9, 0x64, 0xe3, 0x5c, + 0x2a, 0x76, 0x8c, 0x05, 0xc7, 0x88, 0xfa, 0x52, 0xb7, 0x2a, 0xc4, 0xba, + 0xe6, 0x57, 0x7e, 0x75, 0xcd, 0x6d, 0x07, 0x8a, 0x9a, 0xe9, 0x74, 0x0e, + 0xc4, 0xf6, 0x49, 0x4e, 0x5f, 0x4f, 0xa6, 0xc7, 0xdc, 0xea, 0xab, 0x12, + 0xd6, 0x9d, 0x1e, 0x78, 0x85, 0xb2, 0xde, 0x96, 0xe7, 0x37, 0xdc, 0xe2, + 0x27, 0xb8, 0x08, 0xdd, 0x3a, 0xba, 0x4b, 0xec, 0x75, 0x4d, 0x0d, 0xa8, + 0xbe, 0x18, 0x00, 0xd2, 0x16, 0xb6, 0xd8, 0xe0, 0x42, 0x4a, 0x79, 0x0e, + 0xa7, 0x87, 0x93, 0x88, 0xed, 0xe0, 0x8b, 0x2a, 0xee, 0x47, 0x21, 0x2c, + 0x3b, 0x37, 0x34, 0x16, 0x95, 0xa3, 0xd7, 0x32, 0x2a, 0xad, 0xa5, 0xbc, + 0xb8, 0xf7, 0x58, 0x38, 0x97, 0x8a, 0xad, 0x20, 0xe8, 0xc7, 0xea, 0x3c, + 0x02, 0x4a, 0x77, 0xe9, 0x78, 0x24, 0x49, 0x93, 0xe6, 0xad, 0xfd, 0xa3, + 0x6b, 0x4e, 0xe3, 0xed, 0x1c, 0xc7, 0x80, 0x58, 0xce, 0xb9, 0xb1, 0x2d, + 0x77, 0xcd, 0x49, 0xb7, 0xd8, 0xf6, 0x8a, 0xc6, 0xa4, 0x91, 0xa7, 0x8f, + 0xc5, 0x25, 0x2f, 0x92, 0x7e, 0xd3, 0x7f, 0xab, 0x68, 0x26, 0xb1, 0xf4, + 0x19, 0xdb, 0xc7, 0x55, 0x26, 0xe8, 0xe0, 0xe1, 0xa4, 0x9e, 0x3b, 0x68, + 0xa4, 0xd6, 0x31, 0xac, 0x8d, 0x01, 0x32, 0x4b, 0x7c, 0x86, 0x92, 0x50, + 0xfd, 0x4f, 0x57, 0x27, 0xd3, 0x68, 0xd1, 0xa2, 0x5c, 0x52, 0x53, 0x3c, + 0xfe, 0xa1, 0x76, 0x3b, 0x19, 0x65, 0x6d, 0xdc, 0x06, 0x84, 0x2c, 0xdf, + 0xda, 0x57, 0xee, 0xf5, 0xf6, 0xf7, 0x9d, 0xbd, 0x96, 0xbb, 0xea, 0xae, + 0xca, 0x4b, 0x5d, 0x0e, 0x11, 0xc2, 0xcf, 0xfb, 0x3b, 0x63, 0xd2, 0xdb, + 0xdf, 0x8f, 0x24, 0x94, 0xf4, 0x55, 0x5f, 0xb8, 0x0d, 0xda, 0x3d, 0xb1, + 0xce, 0x9a, 0xff, 0x00, 0x2a, 0x78, 0x56, 0xdb, 0x7c, 0xeb, 0xc0, 0x8d, + 0x42, 0x36, 0x4e, 0x2d, 0x39, 0x22, 0x40, 0xf4, 0xad, 0x9d, 0x1c, 0x3f, + 0x3b, 0xe2, 0xb3, 0x6c, 0xf5, 0xb1, 0x1c, 0x3d, 0x66, 0x90, 0xd0, 0x63, + 0x77, 0x35, 0x99, 0x3d, 0xff, 0x00, 0x75, 0x25, 0x3a, 0xf4, 0xdc, 0xea, + 0x9a, 0x20, 0x01, 0x5f, 0x87, 0x80, 0x57, 0x2a, 0xc9, 0xad, 0xfc, 0x1e, + 0x7b, 0x1e, 0x56, 0x4d, 0x59, 0x6d, 0xb5, 0xa1, 0x91, 0xb4, 0xbb, 0xe8, + 0xfc, 0x3c, 0x8a, 0x2d, 0x98, 0xc5, 0x9b, 0x4e, 0xed, 0x7b, 0x00, 0x7b, + 0xf8, 0xca, 0x4a, 0x74, 0xec, 0x78, 0x7b, 0x7c, 0xd6, 0x46, 0x4b, 0x1b, + 0xbb, 0xc0, 0xa9, 0x3b, 0x36, 0xca, 0x88, 0x65, 0x9c, 0x9e, 0xfe, 0x2a, + 0xbd, 0xf6, 0x87, 0x02, 0x66, 0x3c, 0xd2, 0x53, 0x4f, 0x26, 0x86, 0xb8, + 0x92, 0x75, 0x01, 0x67, 0xe5, 0xe1, 0x54, 0x6b, 0x2e, 0x68, 0x82, 0x16, + 0x83, 0xfd, 0xfa, 0xcf, 0xb0, 0xaa, 0x99, 0x66, 0x19, 0x33, 0xcf, 0x29, + 0x29, 0xe7, 0x1c, 0x1e, 0xcb, 0x0b, 0x4e, 0x9e, 0x1e, 0x0a, 0x6d, 0x0c, + 0x07, 0x73, 0xfd, 0xc4, 0x70, 0x0f, 0x0a, 0xed, 0x18, 0x94, 0xd8, 0x2f, + 0xca, 0xca, 0x7e, 0xda, 0x6a, 0x1a, 0x78, 0x97, 0x1e, 0x10, 0x31, 0x71, + 0x6f, 0xea, 0x16, 0x1a, 0xb0, 0xaa, 0x91, 0xf9, 0xcf, 0x76, 0x8c, 0x68, + 0xfe, 0x51, 0x49, 0x4d, 0x5b, 0x5e, 0xeb, 0x3c, 0x87, 0x6f, 0xfc, 0xc4, + 0x2e, 0xd7, 0xea, 0x0d, 0x7d, 0x3a, 0x8a, 0xdf, 0x7b, 0xdc, 0x0e, 0x45, + 0x9a, 0x12, 0x79, 0x80, 0x78, 0x0a, 0x86, 0x37, 0x42, 0xc3, 0xc5, 0xf7, + 0x5e, 0x7d, 0x7b, 0x46, 0x9b, 0x9e, 0x21, 0x93, 0xe0, 0x1a, 0x89, 0x9f, + 0x4b, 0xf1, 0xc3, 0x72, 0xb1, 0x86, 0xc3, 0x58, 0x93, 0x1a, 0x02, 0xdf, + 0x08, 0x1e, 0x09, 0x29, 0xed, 0x6a, 0x3f, 0x6f, 0xc9, 0xf5, 0xa7, 0xf4, + 0x35, 0x98, 0x60, 0xed, 0x03, 0x92, 0xa9, 0x59, 0x93, 0x5d, 0xdd, 0x70, + 0xb3, 0x76, 0xef, 0x44, 0x00, 0x40, 0xe1, 0xb3, 0x2b, 0x07, 0xa1, 0xf5, + 0xeb, 0x2b, 0xb3, 0xd0, 0xb1, 0xde, 0xc3, 0xa8, 0xf9, 0xa2, 0x7d, 0xb7, + 0x1f, 0x0b, 0xa8, 0x5c, 0xf6, 0x9d, 0xcd, 0xc8, 0x20, 0xc9, 0xec, 0x42, + 0x4a, 0x45, 0xfe, 0x30, 0x5a, 0xe1, 0x8f, 0x59, 0x6c, 0xed, 0xde, 0x01, + 0x83, 0xa4, 0x47, 0x75, 0xc3, 0x52, 0xf7, 0xb1, 0xe1, 0xcc, 0xfa, 0x4b, + 0xd0, 0xfa, 0xe6, 0x35, 0xdd, 0x6f, 0xa6, 0x16, 0x52, 0xe8, 0x73, 0x4e, + 0xf6, 0x0e, 0xce, 0x2d, 0x1f, 0x45, 0x79, 0xfd, 0x2d, 0x2c, 0xb8, 0xb1, + 0xe3, 0x6b, 0x9a, 0x60, 0x83, 0xc8, 0x33, 0x09, 0x29, 0xbe, 0xce, 0xa5, + 0x95, 0x53, 0x0b, 0x88, 0xd0, 0x72, 0x02, 0x93, 0x7a, 0xd5, 0xd6, 0x18, + 0x03, 0x6f, 0xcd, 0x5a, 0x6f, 0x4f, 0x16, 0xd4, 0x74, 0xd1, 0xc2, 0x16, + 0x48, 0xc6, 0x7d, 0x19, 0x26, 0x8b, 0x34, 0x77, 0x69, 0xee, 0x3c, 0x52, + 0x53, 0xa6, 0xd7, 0x5b, 0x70, 0x97, 0xb8, 0x9f, 0x25, 0x76, 0x86, 0x31, + 0xac, 0x40, 0xc3, 0xc6, 0x79, 0x10, 0x5a, 0xb4, 0xa9, 0xc6, 0xd9, 0xf4, + 0xb4, 0x94, 0x94, 0xc1, 0xa2, 0x46, 0xa3, 0xe4, 0x91, 0x66, 0x86, 0x4a, + 0x33, 0xc0, 0x6f, 0x08, 0x65, 0xcd, 0xda, 0x65, 0x25, 0x34, 0x72, 0x18, + 0x0b, 0x49, 0x3c, 0x42, 0xa7, 0xd3, 0x28, 0x26, 0xcb, 0xdf, 0xd8, 0x9f, + 0x4e, 0x24, 0x09, 0xef, 0xdd, 0x59, 0xcc, 0xbc, 0x34, 0x18, 0xed, 0xc1, + 0x45, 0xe8, 0x95, 0xce, 0x13, 0xde, 0xe3, 0xf4, 0xee, 0xdd, 0x1a, 0x77, + 0x69, 0x13, 0xb4, 0xf3, 0xc2, 0x4a, 0x6c, 0xd3, 0x41, 0xb1, 0xc2, 0xb1, + 0x00, 0x00, 0x07, 0x70, 0x26, 0x27, 0xe8, 0xfc, 0xd0, 0xfa, 0x87, 0x46, + 0x65, 0xcd, 0x2f, 0x80, 0xe2, 0x06, 0x84, 0x48, 0xf9, 0x85, 0x7e, 0x86, + 0xb4, 0x59, 0xb5, 0xd2, 0x0c, 0xed, 0x91, 0x32, 0x00, 0xd1, 0x17, 0x20, + 0x91, 0x5e, 0x86, 0x46, 0x90, 0x79, 0x9f, 0xb9, 0x25, 0x3c, 0x5e, 0x46, + 0x0e, 0x5e, 0x23, 0xbd, 0xb2, 0x5a, 0x35, 0x95, 0x6f, 0xa4, 0xe3, 0xdd, + 0x9c, 0xfd, 0xd6, 0xb8, 0x8c, 0x76, 0xf2, 0xd0, 0x4f, 0xb8, 0xf8, 0x7c, + 0x16, 0xd5, 0xd5, 0x82, 0xc7, 0xba, 0xc1, 0x03, 0x50, 0x27, 0x59, 0x74, + 0x01, 0xb5, 0x2c, 0x2c, 0x6f, 0x4d, 0x8d, 0xa6, 0xa1, 0x04, 0xf3, 0x09, + 0x29, 0xd3, 0xc6, 0xa9, 0x8d, 0x68, 0x0d, 0x00, 0x47, 0x10, 0x8e, 0xf1, + 0xed, 0x3f, 0x95, 0x2c, 0x7a, 0x0d, 0x6d, 0x82, 0x49, 0x29, 0x5c, 0x40, + 0x61, 0xf1, 0x49, 0x4f, 0x19, 0xf5, 0x8c, 0x9f, 0x5d, 0xa2, 0x79, 0x95, + 0x9f, 0x8c, 0xf0, 0xf9, 0x61, 0x89, 0xe0, 0x03, 0xc1, 0x0a, 0xdf, 0xd6, + 0x07, 0xef, 0xcb, 0x11, 0xd8, 0x12, 0x56, 0x63, 0x18, 0xe7, 0xb8, 0x35, + 0x80, 0xb9, 0xc7, 0x80, 0x35, 0x29, 0x29, 0xd5, 0xc1, 0xac, 0x54, 0xc8, + 0x00, 0xbe, 0xe3, 0xe1, 0xa8, 0x60, 0x56, 0xeb, 0xa2, 0xc2, 0x01, 0x2d, + 0x20, 0x1e, 0xdc, 0x12, 0x51, 0x31, 0x19, 0x7d, 0x74, 0x06, 0xbc, 0x8a, + 0x68, 0x1e, 0xde, 0x60, 0x93, 0xdc, 0x23, 0x3f, 0x2a, 0xa6, 0x56, 0xea, + 0xcc, 0x43, 0x86, 0xad, 0x1c, 0xeb, 0xa7, 0x3e, 0x61, 0x25, 0x22, 0x6b, + 0x09, 0x78, 0x6b, 0x35, 0x27, 0x5d, 0x07, 0xcf, 0x94, 0xcd, 0xaf, 0x6c, + 0x8a, 0xc4, 0xb9, 0xfc, 0xbb, 0x99, 0x09, 0xaa, 0xdf, 0x53, 0xda, 0x1a, + 0x76, 0x63, 0xb8, 0x81, 0xe2, 0x75, 0xfe, 0x08, 0xf8, 0xe5, 0xb5, 0x90, + 0x47, 0xb8, 0x36, 0x40, 0x33, 0x3c, 0x1d, 0x52, 0x52, 0x6a, 0xba, 0x79, + 0x14, 0x12, 0xe7, 0x1d, 0xe5, 0x03, 0xec, 0x06, 0x22, 0x4f, 0xa9, 0xe3, + 0xe4, 0xb5, 0xe8, 0xb1, 0xaf, 0x6e, 0xe4, 0xb7, 0xb3, 0x7c, 0xc6, 0xbc, + 0x24, 0xa7, 0x51, 0xec, 0x88, 0x2f, 0xe4, 0xf0, 0x54, 0x5d, 0xe9, 0xb9, + 0x85, 0xb6, 0x44, 0x47, 0x75, 0x66, 0x39, 0xf0, 0xf1, 0x3c, 0x20, 0x39, + 0xbe, 0xed, 0xdd, 0x8f, 0x6f, 0x12, 0x92, 0x9c, 0xe7, 0xf4, 0xd0, 0xc3, + 0xea, 0x63, 0xbb, 0x67, 0x7f, 0x48, 0xea, 0xcf, 0x97, 0x71, 0xf2, 0x50, + 0x6e, 0x53, 0xe8, 0x7e, 0xcc, 0x80, 0x6a, 0x79, 0x3e, 0xd1, 0x66, 0xad, + 0x3f, 0xd5, 0x7f, 0x1f, 0x7a, 0xd1, 0x77, 0xb0, 0x6e, 0x02, 0x09, 0xe5, + 0x41, 0xe0, 0x5a, 0x3d, 0x3b, 0x00, 0x73, 0x5d, 0xf4, 0x9a, 0xe1, 0xb8, + 0x24, 0xa6, 0xa5, 0xae, 0x75, 0x83, 0x6b, 0x84, 0x03, 0xdd, 0x66, 0x65, + 0x59, 0x66, 0x34, 0x4e, 0xac, 0xef, 0xdf, 0x45, 0x7b, 0x27, 0x13, 0x23, + 0x19, 0xff, 0x00, 0xa9, 0x9d, 0xf5, 0x7f, 0xdc, 0x67, 0x99, 0x1f, 0xf5, + 0xb7, 0x1e, 0x3e, 0x0a, 0xbf, 0xe8, 0xb2, 0x69, 0x7e, 0xc6, 0x90, 0xe1, + 0xa5, 0x8c, 0x76, 0x8e, 0x69, 0xf0, 0x20, 0xa4, 0xa6, 0xb8, 0xc9, 0x63, + 0x9b, 0xa1, 0xd1, 0x52, 0xc8, 0xb7, 0xd4, 0x3b, 0x46, 0x9e, 0x2a, 0x9e, + 0x47, 0xab, 0x85, 0x63, 0x98, 0x4e, 0xea, 0x89, 0xf6, 0x9f, 0x0f, 0x22, + 0xb4, 0xba, 0x2e, 0x1f, 0xda, 0x83, 0xb3, 0x2d, 0xd3, 0x1a, 0xa3, 0xaf, + 0xf2, 0x9c, 0x3b, 0x24, 0xa6, 0xce, 0x27, 0x4d, 0x19, 0x58, 0xe5, 0xaf, + 0x6e, 0xca, 0x1d, 0x12, 0x7b, 0xb8, 0x0f, 0x05, 0xa4, 0xca, 0xe9, 0xc4, + 0xa9, 0xb5, 0xd0, 0xc1, 0x5d, 0x6d, 0x10, 0x00, 0xe3, 0xef, 0x44, 0xda, + 0x44, 0x6d, 0xe4, 0xc7, 0x3c, 0x04, 0x26, 0xb5, 0xd6, 0xb5, 0xcf, 0x77, + 0xb5, 0xac, 0x3a, 0x37, 0xc2, 0x12, 0x52, 0x23, 0x51, 0xbd, 0xe1, 0xc5, + 0xda, 0xd7, 0xaf, 0x9e, 0x9e, 0x29, 0xf2, 0x76, 0xfa, 0x64, 0xb8, 0x92, + 0x08, 0x33, 0xe0, 0x47, 0xc1, 0x4c, 0x0a, 0x8e, 0xba, 0x87, 0x11, 0x3c, + 0xf0, 0x0f, 0x82, 0x05, 0xf7, 0x17, 0x53, 0x63, 0x60, 0x16, 0x92, 0x20, + 0xf0, 0x4f, 0x92, 0x4a, 0x71, 0x2d, 0xa9, 0xd5, 0x3f, 0x73, 0x34, 0x2d, + 0xd5, 0xbe, 0x63, 0xc1, 0x5b, 0x6d, 0x3f, 0x6c, 0xab, 0xd4, 0x61, 0x3e, + 0xa3, 0x35, 0x6f, 0x81, 0x4b, 0x25, 0xa5, 0x94, 0x35, 0xc7, 0x86, 0xb8, + 0x6e, 0xf2, 0x04, 0x42, 0x58, 0x76, 0x8c, 0x6b, 0x04, 0x1f, 0x65, 0x9a, + 0xb4, 0xf9, 0xf8, 0x24, 0xa7, 0x6b, 0xa1, 0x67, 0x3c, 0xb3, 0xd3, 0x77, + 0xe6, 0xe8, 0x47, 0x81, 0x51, 0xeb, 0x1f, 0x56, 0x70, 0xb2, 0xac, 0xfb, + 0x6d, 0x12, 0xcc, 0x87, 0x3b, 0x73, 0xc3, 0x78, 0x77, 0xc5, 0x50, 0x65, + 0xbe, 0x86, 0x68, 0xb6, 0xb7, 0x6c, 0x16, 0xeb, 0xe5, 0x2b, 0xa1, 0xa3, + 0x29, 0xc6, 0xbd, 0xee, 0x82, 0x63, 0x50, 0x92, 0x9c, 0x8c, 0x5e, 0x9e, + 0xfd, 0x9b, 0x37, 0x1f, 0x30, 0xaa, 0x75, 0x8f, 0xab, 0xf6, 0xda, 0xc1, + 0x6d, 0x53, 0xeb, 0x33, 0x56, 0x9f, 0x1f, 0x22, 0xba, 0x36, 0xfd, 0x9e, + 0xc0, 0x5d, 0x4b, 0xbd, 0xf3, 0xee, 0x08, 0xe1, 0xec, 0x7b, 0x36, 0x9f, + 0x6b, 0xbc, 0x0f, 0x7f, 0x82, 0x4a, 0x7c, 0xff, 0x00, 0x17, 0x2a, 0xea, + 0xce, 0xc7, 0x02, 0x1c, 0xdd, 0x08, 0xf3, 0x0b, 0x4e, 0xab, 0xdc, 0xfd, + 0x4c, 0xab, 0x3f, 0x58, 0x7a, 0x5f, 0xa5, 0xfa, 0xed, 0x22, 0x08, 0xfe, + 0x74, 0x78, 0x8f, 0x15, 0x93, 0x56, 0x43, 0xf6, 0x8d, 0x44, 0x24, 0xa6, + 0xf5, 0x96, 0x13, 0x3a, 0xaa, 0xf7, 0x64, 0x86, 0xb4, 0x99, 0xd1, 0x47, + 0xd4, 0x6b, 0xa4, 0x93, 0x31, 0xe2, 0xa9, 0x5c, 0x1f, 0x91, 0x6e, 0xc6, + 0xe8, 0xd1, 0xca, 0x4a, 0x63, 0x6b, 0x9d, 0x63, 0x1c, 0xf3, 0xc4, 0x68, + 0x17, 0x45, 0xd3, 0xb1, 0xdc, 0xde, 0x99, 0x43, 0x4f, 0xe7, 0xd4, 0xd7, + 0x16, 0xee, 0x6f, 0x3b, 0xc8, 0xfa, 0x3f, 0xda, 0x58, 0x16, 0xd6, 0xe0, + 0xd1, 0x53, 0x47, 0x80, 0x5d, 0x8d, 0x54, 0x16, 0xe3, 0x36, 0x96, 0xba, + 0x36, 0x92, 0xd0, 0x3d, 0xad, 0x1b, 0x6d, 0x60, 0x7b, 0x7d, 0xa5, 0x25, + 0x34, 0xeb, 0x74, 0x16, 0xb8, 0xc4, 0x49, 0xdc, 0xdd, 0x47, 0x79, 0xd0, + 0x1f, 0x27, 0x29, 0xde, 0xf0, 0x63, 0xb0, 0x71, 0xf9, 0x69, 0xfe, 0xf5, + 0x1c, 0xa1, 0xb0, 0x40, 0x24, 0x00, 0x64, 0x34, 0x69, 0x33, 0xde, 0x35, + 0x1c, 0x47, 0x09, 0xde, 0xf9, 0x73, 0x5a, 0x27, 0x6b, 0x75, 0x33, 0xf0, + 0x94, 0x94, 0xd0, 0x78, 0x2f, 0xbf, 0x60, 0xf1, 0x26, 0x3f, 0x05, 0xb3, + 0x87, 0x8e, 0xd6, 0xb6, 0x4f, 0x25, 0x66, 0x61, 0x8d, 0xf6, 0x9b, 0x4f, + 0x0e, 0x24, 0x82, 0x7c, 0xd5, 0xdb, 0xba, 0x9d, 0x74, 0x1f, 0x4e, 0xb6, + 0xfa, 0x96, 0x78, 0x8f, 0xa2, 0x12, 0x53, 0x76, 0xc9, 0x6f, 0x1c, 0x2a, + 0x59, 0x56, 0xed, 0x63, 0x8c, 0xfc, 0x95, 0x1b, 0xf3, 0xb2, 0xed, 0xd5, + 0xce, 0xd8, 0x7f, 0x75, 0xa7, 0x41, 0xf7, 0x05, 0x99, 0x7e, 0x46, 0x73, + 0xe4, 0x34, 0x92, 0x1b, 0xf4, 0xc3, 0x8c, 0x8f, 0xbf, 0xb2, 0x4a, 0x69, + 0xbd, 0x83, 0x27, 0x3a, 0xc7, 0x3b, 0xe8, 0x03, 0x05, 0xdd, 0x82, 0xd5, + 0xab, 0x02, 0x9a, 0x18, 0xd6, 0x56, 0xdf, 0x4e, 0x7e, 0x93, 0xdb, 0xc9, + 0x3f, 0x12, 0xab, 0xe3, 0x61, 0xda, 0xee, 0x0e, 0xc6, 0xeb, 0xcf, 0xe7, + 0xb8, 0xf7, 0x85, 0x7f, 0x19, 0xe5, 0x9b, 0xaa, 0x78, 0xf7, 0x6b, 0x3f, + 0x2d, 0x4a, 0x4a, 0x6a, 0x9e, 0x95, 0xac, 0xef, 0x26, 0x7d, 0xdb, 0x26, + 0x43, 0x94, 0x32, 0x31, 0x6a, 0xab, 0x73, 0x9a, 0xdd, 0xac, 0x68, 0x87, + 0xc9, 0x9d, 0xaa, 0xfb, 0xee, 0xa8, 0x80, 0xf6, 0x41, 0x03, 0x4a, 0x8b, + 0x4c, 0x89, 0x3f, 0x05, 0x5f, 0x3e, 0xca, 0x72, 0x29, 0x22, 0x34, 0xb1, + 0xbb, 0x6c, 0x23, 0x99, 0x49, 0x4d, 0x7a, 0xad, 0xac, 0xe2, 0x92, 0xdf, + 0x75, 0x62, 0x60, 0x8e, 0x24, 0x21, 0x63, 0xcb, 0x6b, 0x27, 0xc6, 0x0c, + 0x79, 0x94, 0xef, 0x61, 0xab, 0x0b, 0xd3, 0x26, 0x1a, 0xc6, 0x80, 0xd1, + 0xc4, 0xca, 0x8d, 0x6d, 0x6b, 0x1a, 0xd6, 0x33, 0x8d, 0x12, 0x53, 0x75, + 0x97, 0xdc, 0xc6, 0x00, 0x41, 0x08, 0xde, 0xb9, 0xf4, 0xf7, 0x4e, 0xbe, + 0x08, 0xce, 0xaf, 0x75, 0x0c, 0x9d, 0x0c, 0x77, 0x41, 0xf4, 0xf5, 0xdb, + 0x1f, 0x34, 0x94, 0xf5, 0x4f, 0x80, 0x4b, 0x62, 0x74, 0xd4, 0xa1, 0x10, + 0x40, 0x04, 0x89, 0x8e, 0x3f, 0xbd, 0x15, 0xe7, 0x80, 0x38, 0x8e, 0x7f, + 0x2a, 0x16, 0xe3, 0xa1, 0xfc, 0xdf, 0x14, 0x94, 0xc2, 0xc2, 0x24, 0x41, + 0x81, 0xc3, 0x8a, 0x1c, 0x8d, 0xba, 0x0e, 0x0c, 0xcf, 0x74, 0xf6, 0x49, + 0x98, 0xe3, 0x45, 0x16, 0x1d, 0xc3, 0x4d, 0x23, 0xf8, 0x24, 0xa5, 0xac, + 0x00, 0x89, 0xfd, 0xdd, 0x61, 0x51, 0xcd, 0xc5, 0x36, 0xbb, 0xd7, 0xa2, + 0x1b, 0x90, 0xc1, 0xf0, 0x0f, 0x68, 0xfc, 0xd7, 0xff, 0x00, 0x7a, 0xbe, + 0xf8, 0x89, 0x3a, 0x1e, 0x34, 0xec, 0x86, 0xd6, 0x0d, 0x63, 0x96, 0xfd, + 0xc9, 0x29, 0xe6, 0x7a, 0xad, 0x2c, 0xbe, 0x87, 0x39, 0x8c, 0xfd, 0x30, + 0xd1, 0xf5, 0xf0, 0x65, 0x74, 0x38, 0x78, 0x94, 0x63, 0x60, 0x53, 0x88, + 0x0c, 0x6c, 0x6b, 0x77, 0x11, 0xf9, 0xce, 0x06, 0x4f, 0xde, 0x4a, 0xa7, + 0xd4, 0x31, 0xda, 0xdb, 0x68, 0xbe, 0xc7, 0x6c, 0x1e, 0xa3, 0x43, 0x8f, + 0xef, 0x36, 0x75, 0x6a, 0xba, 0xcf, 0x4d, 0x96, 0x7a, 0x4f, 0x11, 0xb8, + 0x4d, 0x67, 0x90, 0x4a, 0x4a, 0x66, 0xe6, 0xba, 0xca, 0xdc, 0x08, 0x32, + 0xd2, 0x24, 0x9e, 0x10, 0x36, 0x80, 0x65, 0xb2, 0xe0, 0x34, 0x73, 0x4e, + 0x80, 0x85, 0x68, 0xc4, 0x6d, 0x73, 0xbd, 0xc7, 0x58, 0xed, 0x1c, 0xa8, + 0xbd, 0xad, 0x73, 0x77, 0x00, 0x4c, 0x01, 0xc4, 0xb7, 0x92, 0x92, 0x9a, + 0xb6, 0x41, 0x0e, 0x73, 0xc7, 0xb7, 0xb4, 0x76, 0x8e, 0x38, 0x54, 0xaf, + 0x69, 0xac, 0x49, 0x9d, 0xae, 0x31, 0x04, 0x0e, 0x4a, 0xd0, 0xb5, 0xb6, + 0x6c, 0x22, 0x36, 0x03, 0xae, 0x86, 0x20, 0x8f, 0x25, 0x56, 0xd3, 0x0d, + 0x2d, 0x78, 0xd4, 0x6a, 0x3c, 0x87, 0x88, 0x49, 0x4d, 0x53, 0xe9, 0xfa, + 0x7b, 0x1c, 0xdf, 0x69, 0x6c, 0x38, 0xf8, 0xf9, 0x2c, 0xac, 0xba, 0xee, + 0xc7, 0x67, 0xe8, 0xc9, 0x75, 0x33, 0x20, 0x72, 0x59, 0xf3, 0x5a, 0x8e, + 0x73, 0x84, 0x17, 0x70, 0x4c, 0x17, 0x1f, 0x05, 0x1b, 0xeb, 0x71, 0xdc, + 0xd7, 0x37, 0x68, 0x6b, 0x7b, 0x70, 0x7c, 0x12, 0x53, 0x8e, 0xdc, 0xeb, + 0x2c, 0x6e, 0xc7, 0x99, 0x03, 0x83, 0xdc, 0x2b, 0xdd, 0x3f, 0xac, 0x5f, + 0x59, 0xf4, 0x1e, 0xf9, 0x1d, 0x9c, 0xb1, 0xc5, 0x4e, 0x6d, 0xb6, 0x55, + 0x30, 0xf6, 0x1d, 0x3c, 0x08, 0x53, 0x6b, 0x1c, 0xe3, 0xa6, 0x8e, 0xe6, + 0x12, 0x53, 0xd9, 0x60, 0x67, 0x31, 0xb6, 0x43, 0x80, 0xdc, 0x7f, 0x3b, + 0xc4, 0x2d, 0x67, 0x6c, 0xb5, 0x92, 0xd3, 0xce, 0xb0, 0xb8, 0x9c, 0x2c, + 0xa7, 0x9f, 0xd1, 0xd9, 0xed, 0xb1, 0xbc, 0x13, 0xdd, 0x6c, 0xe2, 0x67, + 0xd8, 0x00, 0x6b, 0x9d, 0x09, 0x29, 0xbf, 0x98, 0x1e, 0xfa, 0x1c, 0xc8, + 0xde, 0xd8, 0x20, 0x8e, 0xf0, 0x57, 0x03, 0x6b, 0xed, 0xc7, 0xb9, 0xf5, + 0x6b, 0xec, 0x71, 0x1f, 0x72, 0xf4, 0x3a, 0xaf, 0x63, 0xdb, 0x00, 0x6e, + 0x27, 0x91, 0xe6, 0xb9, 0xff, 0x00, 0xac, 0x98, 0x35, 0x33, 0xf5, 0x8a, + 0xc6, 0xa4, 0xc3, 0xc7, 0xe4, 0x49, 0x4e, 0x66, 0x14, 0xd9, 0x56, 0xf3, + 0xac, 0xfe, 0x55, 0xa5, 0x85, 0x85, 0x24, 0xb8, 0xf2, 0x7b, 0xa0, 0xe0, + 0x63, 0x34, 0x52, 0x1b, 0x3e, 0x64, 0x2d, 0xac, 0x7d, 0x95, 0xd7, 0xae, + 0x91, 0xc2, 0x4a, 0x69, 0x7d, 0x91, 0x8d, 0xbe, 0xb9, 0x83, 0xee, 0x6c, + 0xf6, 0xef, 0xc2, 0xd3, 0x3d, 0x43, 0x07, 0x05, 0xa5, 0x97, 0xde, 0xda, + 0x88, 0x0d, 0xf6, 0xc8, 0x12, 0xea, 0x9f, 0xb7, 0xf3, 0xa5, 0xc7, 0x45, + 0x8f, 0xd4, 0xb2, 0x2c, 0xff, 0x00, 0x00, 0x7d, 0x32, 0x24, 0xef, 0x8e, + 0x0f, 0x8f, 0xcb, 0xb2, 0xe6, 0x6f, 0xa2, 0xf7, 0x66, 0xb9, 0x96, 0x92, + 0xeb, 0x1e, 0x77, 0x12, 0xe3, 0xb8, 0x99, 0x1b, 0xa4, 0x94, 0x94, 0xf6, + 0x99, 0x19, 0xd8, 0x17, 0x32, 0xc3, 0x8d, 0x73, 0x5e, 0x00, 0x70, 0x86, + 0x90, 0x34, 0x69, 0x25, 0xbc, 0x68, 0x74, 0x08, 0x02, 0xd7, 0x16, 0xcf, + 0x2d, 0x0c, 0x24, 0x77, 0xd4, 0xe8, 0xb0, 0x30, 0xb0, 0x1d, 0x5d, 0x81, + 0xce, 0x12, 0x26, 0x16, 0xce, 0xe6, 0x31, 0xbb, 0xb8, 0x10, 0x23, 0xe1, + 0xc9, 0xf2, 0x49, 0x49, 0x0d, 0x82, 0xa6, 0x0a, 0xc1, 0xda, 0xe7, 0x08, + 0x2e, 0xf0, 0x4c, 0x1c, 0xc8, 0x75, 0x6e, 0xd4, 0xe9, 0x31, 0xd8, 0x21, + 0x34, 0x8b, 0x03, 0x9c, 0x4e, 0xe7, 0x73, 0xfd, 0xae, 0xc1, 0x30, 0x8b, + 0x6a, 0x87, 0x9d, 0x8e, 0x13, 0xbe, 0x0f, 0x22, 0x63, 0x94, 0x94, 0x9a, + 0xf1, 0x4d, 0x55, 0xba, 0xd7, 0x6e, 0x34, 0xb7, 0x40, 0x4f, 0x30, 0x39, + 0x85, 0x57, 0x1a, 0xab, 0x7a, 0x8c, 0xdb, 0x1e, 0x9e, 0x13, 0x75, 0x6b, + 0x66, 0x3d, 0x42, 0xdf, 0xe0, 0x15, 0x8b, 0xda, 0xcc, 0x8a, 0xcd, 0x3b, + 0xa2, 0xab, 0x5b, 0xb6, 0x4f, 0x8f, 0xc1, 0x2a, 0x1e, 0x31, 0x9a, 0x0e, + 0xd9, 0xad, 0xbf, 0xa3, 0x23, 0xb3, 0x4f, 0x10, 0x92, 0x9b, 0x2f, 0x66, + 0x8e, 0x68, 0x1a, 0x88, 0xda, 0xd2, 0x78, 0xf1, 0x12, 0xa8, 0x65, 0x57, + 0x65, 0xc1, 0xcd, 0x92, 0x01, 0x10, 0x08, 0xd0, 0xc1, 0xf6, 0x93, 0xf2, + 0x5a, 0x5b, 0x18, 0xf8, 0x71, 0x91, 0x5b, 0x84, 0x86, 0x8e, 0x67, 0xb3, + 0x4a, 0xaf, 0x6b, 0x1a, 0xf2, 0xd7, 0xb5, 0x84, 0x06, 0xcc, 0x98, 0x06, + 0x0f, 0x3c, 0x24, 0xa4, 0x14, 0x31, 0xb4, 0xd5, 0x5d, 0x75, 0x0d, 0xac, + 0xa4, 0x7b, 0x5d, 0xe2, 0xe9, 0x93, 0x3e, 0x68, 0x4f, 0x68, 0x89, 0xd0, + 0xb6, 0xcd, 0x41, 0x13, 0x20, 0x9d, 0x75, 0x85, 0x64, 0xb4, 0x18, 0xad, + 0xa4, 0xcf, 0x2e, 0x24, 0x47, 0x3a, 0xa8, 0x3b, 0x19, 0xae, 0x01, 0xae, + 0x3a, 0x13, 0x23, 0x88, 0x27, 0x83, 0x29, 0x29, 0xa5, 0x0e, 0xca, 0x68, + 0x64, 0x98, 0x03, 0x68, 0x3f, 0x0f, 0x8a, 0x83, 0x9e, 0xea, 0x0b, 0x60, + 0x4e, 0xd2, 0xb4, 0x76, 0x55, 0x88, 0x4d, 0x8d, 0xed, 0xa0, 0x6f, 0x1f, + 0x39, 0x54, 0xda, 0xe6, 0xd9, 0x63, 0xa4, 0x6e, 0x13, 0x20, 0x24, 0xa7, + 0x5f, 0x1f, 0x22, 0xac, 0xda, 0x00, 0x3a, 0x3c, 0x78, 0x27, 0xf4, 0xfd, + 0xd1, 0x3a, 0x71, 0x2a, 0xad, 0x19, 0x0d, 0x60, 0xfd, 0x1b, 0x76, 0x1e, + 0xe8, 0xf1, 0x67, 0xa5, 0xea, 0x6e, 0xf6, 0xce, 0xe4, 0x94, 0xf4, 0x96, + 0x16, 0xfe, 0x69, 0xd0, 0x70, 0x84, 0xf8, 0xdc, 0x0f, 0xdc, 0x3c, 0x7c, + 0x54, 0xdc, 0xd2, 0xe1, 0xa7, 0x3d, 0xe7, 0xbe, 0x8a, 0x3b, 0x5c, 0x06, + 0xe7, 0x09, 0x2e, 0xe0, 0x79, 0x24, 0xa4, 0x24, 0x6f, 0x25, 0xa3, 0x53, + 0xdc, 0xf7, 0x51, 0x2c, 0x2d, 0x90, 0x35, 0xf1, 0x52, 0x0d, 0x70, 0x7b, + 0xbd, 0xd0, 0x7b, 0x79, 0xa6, 0x16, 0x03, 0x23, 0x80, 0x07, 0xcb, 0xe6, + 0x92, 0x96, 0x70, 0x6b, 0xec, 0xda, 0x62, 0x3b, 0x37, 0x5d, 0x54, 0x40, + 0x01, 0xe4, 0x0d, 0x03, 0xb8, 0x9f, 0x2d, 0x13, 0x87, 0x4b, 0xc3, 0xb9, + 0x06, 0x40, 0x6f, 0xfa, 0xf8, 0xa7, 0xf4, 0x9c, 0x5c, 0x6c, 0x71, 0x80, + 0x3c, 0x3b, 0x04, 0x94, 0xd3, 0xea, 0xf5, 0x1b, 0xfa, 0x7d, 0xad, 0x68, + 0x97, 0x56, 0x0b, 0xdb, 0xf1, 0x6e, 0xa8, 0x96, 0x62, 0x9b, 0x69, 0xad, + 0xf5, 0x7f, 0x32, 0x5a, 0x0e, 0xd2, 0x35, 0x1b, 0xa3, 0xe8, 0x9e, 0xc8, + 0xd6, 0x7a, 0x34, 0x56, 0xfc, 0x8b, 0x35, 0x63, 0x01, 0x73, 0x8c, 0xce, + 0x91, 0xaa, 0xad, 0xd2, 0xb2, 0x06, 0x4f, 0x4f, 0xa6, 0xea, 0xc9, 0xda, + 0x46, 0xdd, 0xbe, 0x40, 0x96, 0x80, 0x7e, 0xe4, 0x94, 0xb6, 0x3e, 0x4b, + 0x98, 0xe3, 0x46, 0x48, 0x76, 0xf2, 0x62, 0xbb, 0x0e, 0x9b, 0xff, 0x00, + 0xda, 0x3f, 0x14, 0x53, 0x6c, 0x87, 0x34, 0xc8, 0xed, 0xf2, 0xf8, 0x04, + 0x5b, 0xa9, 0x6d, 0xcc, 0x73, 0x2c, 0x68, 0x74, 0xc0, 0xdb, 0xfb, 0xb1, + 0xf8, 0xaa, 0x6d, 0xb1, 0xf8, 0xae, 0x6d, 0x79, 0x3a, 0xd6, 0x4f, 0xe8, + 0xed, 0x8f, 0xfa, 0x2e, 0xf3, 0x49, 0x49, 0xde, 0x06, 0xc9, 0x3a, 0x81, + 0xe1, 0xc6, 0x8b, 0x3f, 0x3a, 0xb2, 0xcd, 0x43, 0xa1, 0xc6, 0x63, 0x5e, + 0x76, 0x8d, 0x55, 0x9c, 0xbb, 0xae, 0xaa, 0x5e, 0xc1, 0x34, 0x69, 0x31, + 0xaf, 0xfb, 0xfc, 0x55, 0x6f, 0x52, 0xac, 0x90, 0x7d, 0x32, 0x1e, 0x1d, + 0xdf, 0xc4, 0xa4, 0xa6, 0x8b, 0xd8, 0xfb, 0x07, 0xd2, 0xf6, 0x38, 0x71, + 0x3d, 0xf9, 0xec, 0x89, 0x73, 0x41, 0x02, 0x09, 0x24, 0x88, 0x0e, 0x24, + 0x98, 0x08, 0xf4, 0x6d, 0x77, 0xa9, 0x8e, 0x5b, 0xb7, 0xd3, 0xf7, 0x30, + 0x69, 0x31, 0xcc, 0x6b, 0xe6, 0x87, 0x77, 0xb6, 0xb6, 0x3b, 0x68, 0x69, + 0x13, 0xba, 0x7e, 0x29, 0x29, 0xc3, 0xea, 0x35, 0xfa, 0x19, 0x55, 0xdc, + 0xdd, 0x5a, 0xef, 0x69, 0xfe, 0x0a, 0x36, 0x1d, 0x4d, 0x8c, 0xd2, 0x21, + 0xc3, 0xf8, 0xab, 0xfd, 0x52, 0xa7, 0xdd, 0x8d, 0xb3, 0x49, 0x60, 0xdc, + 0x08, 0xef, 0x0b, 0x3e, 0x87, 0x36, 0xca, 0x1b, 0xbf, 0x59, 0x96, 0x9d, + 0x63, 0x94, 0x94, 0xdc, 0xad, 0x87, 0x21, 0xa1, 0xf5, 0x40, 0x7b, 0x79, + 0x9d, 0x20, 0xad, 0x8e, 0x9d, 0x4b, 0x72, 0x46, 0xdb, 0x63, 0xd4, 0x1a, + 0x10, 0x0f, 0xf7, 0x2c, 0x3c, 0x0a, 0xdd, 0xea, 0x32, 0x08, 0x0e, 0xe2, + 0x0b, 0x41, 0x3a, 0x78, 0x4a, 0xec, 0x3a, 0x7f, 0x4c, 0xb1, 0xc5, 0xb6, + 0x49, 0x33, 0xc9, 0x80, 0x92, 0x9b, 0x58, 0xbd, 0x31, 0xb4, 0x0d, 0xd3, + 0x26, 0x34, 0xee, 0xb2, 0x7a, 0xfd, 0x3f, 0xa2, 0x21, 0xc2, 0x37, 0x11, + 0x1d, 0xfb, 0xae, 0xac, 0xd0, 0x2a, 0x60, 0x07, 0x52, 0x3c, 0x57, 0x29, + 0xf5, 0x9e, 0xc6, 0xef, 0xad, 0xa0, 0x40, 0x06, 0x74, 0x49, 0x4e, 0x45, + 0x61, 0xcc, 0x70, 0xf0, 0x5a, 0x2c, 0x7b, 0x4d, 0x5a, 0xf2, 0xb2, 0xc5, + 0xb1, 0xe6, 0x9c, 0xe4, 0xbf, 0x81, 0x26, 0x7f, 0x35, 0xbd, 0xfc, 0x12, + 0x52, 0xfd, 0x52, 0xbf, 0xd5, 0x1d, 0x7b, 0xda, 0x64, 0xb9, 0xad, 0xaa, + 0x0c, 0x6a, 0x4f, 0x23, 0xc7, 0x85, 0x3c, 0x9c, 0x56, 0xbb, 0xaf, 0x35, + 0xe4, 0x1f, 0x7d, 0x0e, 0x76, 0xd3, 0xcb, 0x4b, 0x4e, 0xd1, 0xff, 0x00, + 0x44, 0x84, 0xaf, 0x17, 0xe4, 0xb7, 0xed, 0x16, 0xb7, 0x63, 0x29, 0x69, + 0x75, 0x74, 0x01, 0x25, 0xad, 0x69, 0x13, 0xee, 0x77, 0x24, 0x15, 0xab, + 0x7b, 0x03, 0xf3, 0x1b, 0x91, 0x2d, 0x25, 0xcc, 0xb5, 0x9b, 0xfe, 0x8c, + 0xed, 0xf4, 0xa2, 0x47, 0xe6, 0xa4, 0xa6, 0xa3, 0x71, 0xcb, 0x5c, 0x48, + 0x9e, 0x26, 0x23, 0xe0, 0xab, 0x64, 0xbe, 0x5d, 0xee, 0x11, 0xb8, 0xea, + 0x07, 0x80, 0xed, 0xf7, 0xab, 0xed, 0x2c, 0x36, 0x35, 0xf1, 0x06, 0x3b, + 0xf8, 0x7c, 0x56, 0x7b, 0xce, 0xfb, 0x37, 0x02, 0x5c, 0x43, 0x4c, 0x1f, + 0x89, 0x29, 0x29, 0x67, 0x45, 0x8c, 0x0c, 0x68, 0x87, 0x1d, 0x41, 0x95, + 0x1c, 0x56, 0x9f, 0x7b, 0x5e, 0x60, 0x9e, 0xe0, 0x78, 0xe8, 0x9e, 0xda, + 0xe7, 0x64, 0x38, 0x30, 0xf2, 0x40, 0xec, 0x78, 0x51, 0x75, 0x5b, 0x1b, + 0xbc, 0x38, 0x91, 0xd8, 0x7c, 0x39, 0x49, 0x49, 0x3d, 0x56, 0xb6, 0xb1, + 0xfc, 0x91, 0xb4, 0x9d, 0x35, 0x33, 0x20, 0x2b, 0x14, 0xbe, 0xab, 0x83, + 0xde, 0xee, 0x1d, 0xc8, 0xf0, 0x59, 0xf6, 0x0a, 0x9e, 0xd7, 0x36, 0x48, + 0xd7, 0x76, 0xe1, 0xe2, 0x39, 0x40, 0xae, 0x9b, 0x5a, 0xe1, 0xe8, 0xdd, + 0xb0, 0xbb, 0x52, 0xd3, 0xe2, 0x92, 0x9d, 0xc6, 0x16, 0xd4, 0x7d, 0x17, + 0xbf, 0xd8, 0x64, 0x82, 0x0c, 0x10, 0x39, 0x95, 0x17, 0x64, 0x06, 0xb8, + 0x6d, 0xb0, 0x06, 0x40, 0x92, 0x78, 0x30, 0xb1, 0x5d, 0x56, 0x4b, 0x41, + 0x75, 0x85, 0xce, 0xdb, 0xa4, 0xfc, 0xf8, 0x41, 0x73, 0xad, 0x27, 0x69, + 0x77, 0xb5, 0xdc, 0x9e, 0xda, 0x24, 0xa7, 0x5a, 0xdc, 0xb6, 0x87, 0x12, + 0xd3, 0x10, 0x39, 0x03, 0xe9, 0x08, 0x55, 0x6e, 0xea, 0x6d, 0x2e, 0xfd, + 0x18, 0x9f, 0x1d, 0x34, 0xdc, 0x07, 0x2b, 0x3d, 0xce, 0x20, 0x12, 0xe3, + 0xc7, 0x0a, 0x00, 0x38, 0x9d, 0xa0, 0x44, 0x19, 0x01, 0x25, 0x26, 0xbb, + 0x2e, 0xfb, 0xde, 0xd6, 0x97, 0x1d, 0xa4, 0xc6, 0xab, 0x56, 0x86, 0x39, + 0xa2, 0x19, 0x1a, 0x72, 0xb2, 0xbd, 0x07, 0x52, 0x6a, 0x76, 0xd2, 0x77, + 0x91, 0x20, 0xf0, 0xd5, 0xb3, 0x5e, 0xbb, 0xb4, 0x9d, 0x40, 0x84, 0x94, + 0xca, 0xba, 0x5a, 0x49, 0xd6, 0x5c, 0x79, 0x0a, 0x5b, 0x32, 0x76, 0x7a, + 0x5b, 0xff, 0x00, 0x47, 0x3f, 0x34, 0x5a, 0xe9, 0x73, 0x25, 0xcd, 0xe0, + 0xf6, 0x4f, 0x0e, 0x89, 0x84, 0x94, 0xf4, 0x76, 0x12, 0x09, 0x6b, 0x4c, + 0x77, 0x31, 0xe6, 0xa2, 0x1e, 0x48, 0x27, 0x93, 0x13, 0xf0, 0x08, 0xf7, + 0xd4, 0x08, 0x9f, 0xbf, 0xc2, 0x02, 0xa4, 0xeb, 0x25, 0x8e, 0x04, 0xce, + 0xba, 0xf6, 0xe1, 0x25, 0x32, 0xad, 0xb2, 0x4b, 0x8e, 0xa0, 0xc9, 0x42, + 0xb2, 0xb9, 0x30, 0xc3, 0x02, 0x7f, 0x15, 0x20, 0xf0, 0x59, 0x0d, 0xf1, + 0xdb, 0xb7, 0xc2, 0x7c, 0x13, 0x56, 0xcd, 0xa1, 0xcd, 0x06, 0x67, 0xc5, + 0x25, 0x2c, 0xcd, 0xcd, 0x22, 0x67, 0x4e, 0x08, 0xd7, 0xe6, 0xac, 0x17, + 0x31, 0xad, 0x92, 0x41, 0x1c, 0xc2, 0xab, 0x91, 0x65, 0x8c, 0x00, 0x31, + 0xa5, 0xce, 0x76, 0x90, 0x10, 0xb1, 0xec, 0xdc, 0x08, 0x78, 0xd7, 0x99, + 0xee, 0x92, 0x93, 0x59, 0xb6, 0xca, 0x5c, 0xd8, 0x06, 0xb3, 0x21, 0xcd, + 0x1c, 0x47, 0xcf, 0x95, 0x9b, 0xd2, 0x1a, 0xdc, 0x2b, 0x2d, 0xc1, 0xa5, + 0xee, 0x75, 0x60, 0xef, 0x6b, 0x07, 0xd2, 0x60, 0xb0, 0x96, 0xc7, 0xde, + 0xb4, 0x65, 0xcd, 0x3b, 0x9a, 0xdf, 0x69, 0xd3, 0x55, 0x81, 0x85, 0x79, + 0x67, 0x5e, 0xcc, 0xac, 0x0d, 0x2f, 0xad, 0xa5, 0x9e, 0x41, 0xa7, 0xb2, + 0x4a, 0x76, 0xef, 0x19, 0xc1, 0xae, 0xf4, 0xdc, 0x5c, 0x1a, 0x74, 0xd3, + 0x43, 0xf0, 0x2a, 0xa5, 0xd7, 0xe4, 0x55, 0x54, 0x64, 0x63, 0x6f, 0xdd, + 0xf4, 0x8f, 0x33, 0x3c, 0xe8, 0xb4, 0x19, 0x9c, 0x59, 0xec, 0xb3, 0x40, + 0x3b, 0x77, 0x1c, 0xf9, 0xa9, 0x3d, 0xcd, 0x69, 0x27, 0x78, 0x70, 0x23, + 0xb6, 0xa7, 0xc1, 0x25, 0x38, 0x98, 0xd9, 0x7b, 0x1d, 0xb7, 0x5f, 0x41, + 0xa7, 0x42, 0xed, 0x5d, 0x58, 0x3d, 0xb5, 0xe4, 0x20, 0xe4, 0xe0, 0x3a, + 0xa7, 0x1c, 0x9c, 0x37, 0x6d, 0xdd, 0xab, 0x99, 0xc8, 0x33, 0xc2, 0xb9, + 0x93, 0x8c, 0xeb, 0x9c, 0x2c, 0xa9, 0xbb, 0x4e, 0x83, 0x9f, 0xa5, 0xe4, + 0xa9, 0xb3, 0xda, 0x1e, 0xe6, 0xb4, 0xb1, 0x9c, 0x59, 0x59, 0x3e, 0x1f, + 0x9c, 0xd9, 0xfc, 0x89, 0x29, 0x8b, 0x72, 0x03, 0xec, 0xae, 0xc0, 0xd7, + 0x36, 0xfa, 0x44, 0x64, 0x31, 0xd1, 0xdf, 0xf3, 0x9b, 0xf2, 0x45, 0x22, + 0xac, 0x8d, 0x1a, 0x09, 0x8d, 0x40, 0xd2, 0x37, 0x77, 0x55, 0xb3, 0xf6, + 0xd9, 0x5b, 0x72, 0xb1, 0x4e, 0xe2, 0xc1, 0x05, 0xfd, 0xdc, 0xde, 0xed, + 0x45, 0xc2, 0x0d, 0xbf, 0x1a, 0xab, 0x43, 0xf4, 0x30, 0x67, 0xc3, 0xc7, + 0xf2, 0x24, 0xa4, 0x8e, 0xa0, 0x38, 0x3d, 0xa0, 0x0d, 0x44, 0x47, 0xfa, + 0xf6, 0x5c, 0xfe, 0xc1, 0x4e, 0x4d, 0x94, 0x11, 0xdc, 0xb9, 0xa0, 0xf8, + 0x82, 0xba, 0x2b, 0x05, 0x5f, 0x45, 0xb2, 0x23, 0x42, 0x79, 0xe6, 0x4a, + 0xce, 0xbb, 0x14, 0x59, 0xd4, 0x28, 0x78, 0x8d, 0xa0, 0xc3, 0x87, 0xf5, + 0x75, 0x49, 0x49, 0x6a, 0xa0, 0xb5, 0xcc, 0x81, 0xee, 0x6c, 0x39, 0xdf, + 0x12, 0xbb, 0x9e, 0x99, 0x92, 0xcb, 0x31, 0x58, 0x23, 0x50, 0x38, 0xf3, + 0x5c, 0xc5, 0x34, 0x17, 0x5b, 0x3d, 0x8f, 0x2b, 0x7b, 0x06, 0xb7, 0x52, + 0x09, 0x1f, 0x44, 0xa4, 0xa6, 0xf6, 0x45, 0xe6, 0x08, 0x5c, 0x7f, 0xd6, + 0x37, 0x93, 0x6b, 0x01, 0x3c, 0xff, 0x00, 0x05, 0xd5, 0x39, 0xc1, 0xc0, + 0xbf, 0xc1, 0x72, 0x3f, 0x58, 0x6c, 0x0e, 0xcd, 0x6b, 0x3b, 0x06, 0xfe, + 0x54, 0x94, 0xe7, 0xd4, 0xc9, 0x1e, 0x2a, 0xc6, 0x13, 0x76, 0x66, 0xd6, + 0x26, 0x3d, 0x49, 0x64, 0xe9, 0xa6, 0xe1, 0xa7, 0x3e, 0x68, 0x74, 0x39, + 0xbb, 0x4e, 0xbc, 0x21, 0xe4, 0x5b, 0xb4, 0xee, 0x6e, 0x85, 0xbc, 0x7c, + 0x42, 0x4a, 0x7a, 0x2b, 0x4d, 0x57, 0xe2, 0x5b, 0xb9, 0xa1, 0xde, 0xc3, + 0x64, 0x90, 0x5e, 0xed, 0x7f, 0x47, 0x67, 0xe3, 0xaa, 0x03, 0x5c, 0xe7, + 0x51, 0x89, 0x69, 0x76, 0xa3, 0x1f, 0x7b, 0xc9, 0xd0, 0x93, 0x64, 0x3b, + 0x53, 0xdf, 0x45, 0x6a, 0xa7, 0x0b, 0xb1, 0x1c, 0xe6, 0xb4, 0xed, 0xc8, + 0xaf, 0xdb, 0xb9, 0xc0, 0x69, 0x73, 0x0f, 0x66, 0xff, 0x00, 0x2d, 0xaa, + 0x86, 0x0f, 0xbb, 0xa3, 0x50, 0x75, 0x07, 0x66, 0xd1, 0xac, 0x8f, 0x63, + 0x5a, 0xd3, 0xe6, 0x35, 0x49, 0x4c, 0x4d, 0xad, 0x2e, 0x1a, 0x46, 0xd6, + 0x98, 0xe3, 0xb0, 0x2a, 0x9b, 0x36, 0x9b, 0x5e, 0xd0, 0xdd, 0xc4, 0x06, + 0x8e, 0x7f, 0x93, 0xaa, 0x33, 0xe5, 0x8c, 0x7c, 0x02, 0xe2, 0x1a, 0x41, + 0x23, 0x4e, 0x56, 0x71, 0xbb, 0xd3, 0xca, 0xbb, 0xb0, 0x04, 0x40, 0x13, + 0xa2, 0x4a, 0x6e, 0xd9, 0x8e, 0xdb, 0x07, 0xd2, 0x68, 0xfd, 0xce, 0x4f, + 0xde, 0x86, 0xdb, 0x4b, 0x36, 0xb6, 0xcf, 0xd1, 0x90, 0x47, 0xc0, 0x0e, + 0xea, 0x1e, 0xa8, 0xb9, 0xc4, 0x82, 0x43, 0x48, 0x81, 0xb4, 0xea, 0x0f, + 0x28, 0x16, 0xd6, 0xf2, 0x01, 0x7b, 0xe4, 0x79, 0x8d, 0x7c, 0x92, 0x52, + 0x5b, 0x2a, 0x73, 0x49, 0x6b, 0x1d, 0xb9, 0x8d, 0x07, 0x69, 0xe6, 0x67, + 0xcd, 0x53, 0x7d, 0x8e, 0xad, 0xe5, 0xc3, 0x5e, 0xfa, 0xff, 0x00, 0x14, + 0xff, 0x00, 0xa4, 0x69, 0xf6, 0xbc, 0xe9, 0xa8, 0x01, 0x08, 0x92, 0xe3, + 0xef, 0x80, 0x26, 0x4e, 0xa9, 0x29, 0x9b, 0xb2, 0xac, 0x73, 0x75, 0x12, + 0x4c, 0xcf, 0x31, 0xaa, 0x8b, 0x43, 0xec, 0x0d, 0x60, 0x6e, 0xd6, 0xb7, + 0x41, 0xe4, 0xa6, 0xc7, 0xe3, 0xb6, 0x1a, 0x48, 0x33, 0x1e, 0xe5, 0x31, + 0x95, 0x8e, 0xc3, 0x24, 0x98, 0x1d, 0xbc, 0x92, 0x53, 0x1f, 0xb2, 0x16, + 0x81, 0x63, 0xe6, 0x47, 0x3a, 0x6a, 0x8a, 0xcc, 0x70, 0xe0, 0x5c, 0x01, + 0xd4, 0x18, 0x71, 0x1f, 0xc5, 0x0a, 0xde, 0xa5, 0x5b, 0x9f, 0xb6, 0xb3, + 0x31, 0xc1, 0x02, 0x27, 0xe2, 0x82, 0xfc, 0x8b, 0x6c, 0x30, 0xdf, 0x68, + 0x27, 0xe8, 0x8e, 0x12, 0x53, 0xa6, 0x36, 0xbf, 0x1a, 0xb0, 0x39, 0x6b, + 0xe1, 0x17, 0x14, 0xbb, 0xd7, 0x8f, 0x12, 0xb3, 0xf1, 0xd8, 0x45, 0x8d, + 0x12, 0x48, 0x00, 0xb8, 0xad, 0x5e, 0x9d, 0x65, 0x5b, 0x0d, 0x96, 0x69, + 0x02, 0x02, 0x4a, 0x4f, 0x9f, 0x92, 0xda, 0xd8, 0xda, 0x68, 0x77, 0xe9, + 0x0e, 0xaf, 0x28, 0x1e, 0xae, 0x47, 0xd9, 0xa2, 0x75, 0xfd, 0xef, 0x35, + 0x8d, 0xd4, 0x5f, 0x65, 0xb9, 0x25, 0xf4, 0x92, 0x07, 0x62, 0x11, 0x77, + 0x66, 0xfd, 0x83, 0xe9, 0x9e, 0x79, 0x49, 0x4f, 0xa0, 0x64, 0x65, 0xd6, + 0x74, 0x91, 0x3f, 0x9d, 0x1e, 0x2a, 0x8b, 0xdd, 0xa1, 0x6b, 0x0f, 0xb9, + 0xf1, 0xa0, 0xe6, 0x25, 0x66, 0xe4, 0xe3, 0xe5, 0x63, 0xbb, 0x73, 0x5c, + 0x5e, 0xc3, 0xaf, 0xc1, 0x58, 0xc5, 0xc9, 0x36, 0xb0, 0x0e, 0x2c, 0x3a, + 0x47, 0x7f, 0x8a, 0x4a, 0x6c, 0x87, 0x16, 0xde, 0xed, 0xdf, 0x45, 0xdc, + 0x47, 0x32, 0xa6, 0x5e, 0x58, 0x3d, 0x48, 0xf3, 0x43, 0xca, 0xac, 0x36, + 0x1c, 0x78, 0xd0, 0xe8, 0x83, 0x66, 0x68, 0x04, 0x48, 0xdd, 0x5f, 0x73, + 0xf9, 0x12, 0x53, 0x66, 0x82, 0x58, 0x4d, 0xa7, 0xe9, 0x38, 0xfb, 0x89, + 0x3c, 0x79, 0x22, 0xec, 0x68, 0x7e, 0xe6, 0xfe, 0x77, 0x92, 0x15, 0x2e, + 0x16, 0x36, 0x47, 0xd1, 0x3c, 0xcf, 0x64, 0x8b, 0xde, 0x3d, 0x80, 0x9f, + 0x07, 0x14, 0x94, 0xbe, 0x58, 0x25, 0x86, 0xaa, 0xdb, 0xba, 0xc3, 0xc0, + 0x9d, 0x02, 0xe5, 0x85, 0xdf, 0x66, 0xfa, 0xd3, 0x41, 0xb6, 0x36, 0xb8, + 0x0a, 0xde, 0xee, 0xc0, 0xbe, 0x7f, 0x21, 0x21, 0x75, 0x61, 0xde, 0xc2, + 0x00, 0x8f, 0x0f, 0x1f, 0x9a, 0xe5, 0xfa, 0x96, 0x03, 0xee, 0xf5, 0xaf, + 0x68, 0xf7, 0x07, 0x17, 0x03, 0xdc, 0x6d, 0xe1, 0x25, 0x3d, 0x2d, 0x98, + 0xed, 0xb2, 0x5f, 0x00, 0x13, 0xe0, 0x62, 0x7e, 0x4a, 0xb5, 0x98, 0xd7, + 0x57, 0x20, 0x34, 0x8d, 0xbe, 0x06, 0x7e, 0x5a, 0xa1, 0xe3, 0xe6, 0x91, + 0x8d, 0x5d, 0xa3, 0x5d, 0xed, 0x04, 0x9f, 0x37, 0x09, 0x25, 0x0e, 0xfe, + 0xab, 0x9a, 0xcd, 0x7d, 0x30, 0xe6, 0x8e, 0x0c, 0x73, 0xe6, 0x92, 0x94, + 0x6c, 0xb4, 0x12, 0xd7, 0x0d, 0xc7, 0xb4, 0x6b, 0x06, 0x3b, 0xaa, 0xb7, + 0x3e, 0x4e, 0xdb, 0x68, 0x2e, 0x13, 0xca, 0x93, 0xba, 0xd6, 0x56, 0xd2, + 0xd1, 0x84, 0x5e, 0xe7, 0x73, 0x03, 0x68, 0x84, 0x23, 0x99, 0xd5, 0x49, + 0x31, 0x84, 0xd6, 0xb7, 0xc1, 0xc5, 0x25, 0x35, 0x67, 0x1e, 0x97, 0x59, + 0xe9, 0x07, 0x30, 0xbc, 0x7b, 0xab, 0x71, 0xf6, 0x99, 0xf0, 0x1e, 0x29, + 0xfa, 0x3d, 0xb5, 0xb1, 0xd6, 0xd2, 0xd3, 0x35, 0xbb, 0xf4, 0x8c, 0x6f, + 0x3b, 0x49, 0xfa, 0x4d, 0x3f, 0x02, 0xa5, 0x7d, 0xbd, 0x5e, 0xc7, 0x34, + 0x7d, 0x9e, 0x9a, 0xc9, 0xd1, 0xb3, 0x13, 0x0b, 0x3a, 0xeb, 0xb2, 0x71, + 0x72, 0x05, 0xb7, 0x63, 0x8a, 0xa4, 0xc3, 0xac, 0x60, 0xd0, 0xb4, 0xe8, + 0x66, 0x12, 0x53, 0xbb, 0x75, 0x8d, 0x75, 0x67, 0x6c, 0x6c, 0x3a, 0x97, + 0x01, 0x10, 0x54, 0x31, 0xd9, 0xba, 0xdd, 0xc7, 0xb0, 0xd3, 0xe6, 0x83, + 0x8e, 0xe6, 0xfa, 0x63, 0x6b, 0xa7, 0x99, 0x57, 0xf0, 0x86, 0xe6, 0x6e, + 0x3c, 0xb8, 0xe9, 0xf0, 0x09, 0x29, 0xd0, 0xc1, 0xa8, 0x6e, 0xe3, 0x5f, + 0x35, 0xb1, 0x5b, 0x36, 0xb0, 0x8e, 0xca, 0xa6, 0x15, 0x5b, 0x4e, 0xe3, + 0xe0, 0xaf, 0x13, 0xed, 0x23, 0xba, 0x4a, 0x43, 0x60, 0x6b, 0x29, 0xf1, + 0x2b, 0x84, 0xeb, 0x96, 0x83, 0xd4, 0x5c, 0x3b, 0x34, 0x2e, 0xe7, 0x20, + 0x86, 0xd6, 0x67, 0x98, 0x5e, 0x7b, 0xd5, 0x9c, 0x1d, 0x9f, 0x63, 0xb9, + 0xdc, 0x92, 0x98, 0xd6, 0xf3, 0xf9, 0xaa, 0x37, 0x17, 0x1e, 0x51, 0x31, + 0x5a, 0xd2, 0x35, 0x56, 0x6c, 0xa0, 0x42, 0x4a, 0x77, 0x7e, 0xad, 0xb9, + 0xf7, 0xf4, 0xd6, 0xd6, 0x01, 0x05, 0x9b, 0xaa, 0x0e, 0x00, 0x73, 0x3e, + 0xa3, 0x25, 0xc5, 0x51, 0xa4, 0xfe, 0xa4, 0xd6, 0x02, 0x08, 0xa8, 0xbd, + 0x83, 0xc8, 0x1b, 0x1f, 0xc9, 0xef, 0x02, 0x11, 0x3e, 0xae, 0xb8, 0xb4, + 0xdd, 0x8e, 0x0c, 0x3b, 0x4b, 0x6b, 0x10, 0x5d, 0xee, 0x67, 0x97, 0x0a, + 0x65, 0xac, 0xae, 0xec, 0x86, 0x34, 0x45, 0x66, 0xd7, 0x58, 0xd9, 0xd2, + 0x03, 0xe1, 0xe3, 0x4f, 0xed, 0x24, 0xa6, 0x9b, 0x9f, 0x14, 0xb9, 0xd2, + 0x37, 0x1e, 0x5a, 0x7e, 0x20, 0x68, 0xa8, 0x48, 0x73, 0xf2, 0x6d, 0x78, + 0xd4, 0x97, 0x12, 0x27, 0x90, 0x16, 0xcd, 0xd4, 0xd6, 0x44, 0x3b, 0x47, + 0x69, 0x3e, 0x44, 0x11, 0xfc, 0x16, 0x5d, 0x58, 0xe1, 0xf5, 0xbc, 0x1d, + 0x03, 0x9c, 0x4c, 0x1e, 0xe0, 0x72, 0x12, 0x52, 0x0e, 0x9e, 0x2c, 0xa2, + 0xeb, 0x6d, 0xb4, 0x7e, 0x8d, 0xed, 0xf6, 0x32, 0x66, 0x3b, 0x83, 0xa2, + 0x0d, 0xf7, 0xbd, 0xd6, 0x38, 0x92, 0x3d, 0xe2, 0x1a, 0xdf, 0x0d, 0x55, + 0xd7, 0xd6, 0xe6, 0xb1, 0xc1, 0xad, 0x10, 0xde, 0x00, 0xfa, 0x40, 0x0f, + 0x10, 0xb3, 0xae, 0xa1, 0xc1, 0xdb, 0xe2, 0x3b, 0x83, 0x32, 0x92, 0x91, + 0x3b, 0x74, 0xc0, 0x3e, 0x48, 0x45, 0x8e, 0x26, 0x66, 0x11, 0xeb, 0x71, + 0x20, 0xc9, 0x98, 0xe3, 0xc9, 0x49, 0xcd, 0xf6, 0x87, 0x0f, 0xbd, 0x25, + 0x34, 0x4b, 0x07, 0xab, 0x00, 0xcb, 0x7b, 0x13, 0xa4, 0xfc, 0x93, 0xdd, + 0xed, 0xd0, 0x76, 0x1f, 0x95, 0x18, 0xb0, 0x7a, 0x80, 0xf0, 0x3b, 0xaa, + 0xce, 0x3b, 0xad, 0x71, 0x3f, 0x44, 0x14, 0x94, 0x92, 0x9d, 0xb5, 0xb7, + 0xd4, 0x77, 0xd2, 0xec, 0x13, 0xb1, 0xef, 0x27, 0x77, 0x12, 0x74, 0x01, + 0x0d, 0xa1, 0xd6, 0x1d, 0xd1, 0x23, 0x80, 0x17, 0x59, 0xf5, 0x4f, 0xa2, + 0x32, 0xef, 0xd7, 0xb2, 0x19, 0x3b, 0x5c, 0x7d, 0x36, 0x9d, 0x40, 0x8e, + 0xe9, 0x29, 0xac, 0xde, 0x99, 0x91, 0x8b, 0xd3, 0xce, 0x66, 0x48, 0xd8, + 0xfb, 0x61, 0xac, 0xac, 0x72, 0x07, 0xf2, 0xbc, 0xd5, 0x43, 0x60, 0xf4, + 0xc3, 0x1a, 0x7d, 0xc7, 0xb0, 0x5d, 0x67, 0xd6, 0x86, 0x81, 0x45, 0x35, + 0x76, 0xd4, 0xc2, 0xc2, 0xc4, 0xc3, 0x68, 0x67, 0xa9, 0xb3, 0x7c, 0xfd, + 0xe1, 0x25, 0x35, 0x6a, 0xad, 0xe2, 0x26, 0xa2, 0xe0, 0x79, 0x21, 0x5c, + 0xfb, 0x39, 0xf4, 0xe3, 0xd3, 0x76, 0xce, 0x63, 0xba, 0xb1, 0x4e, 0xf6, + 0x3f, 0x6b, 0x7e, 0xe5, 0xa3, 0x0e, 0xf4, 0xa7, 0xf3, 0x92, 0x53, 0x6f, + 0x21, 0xad, 0x71, 0x83, 0x24, 0xbb, 0xb0, 0xe1, 0x65, 0xe5, 0x61, 0x3a, + 0x97, 0xfa, 0xc0, 0xed, 0x02, 0x20, 0x71, 0x0a, 0xfd, 0x59, 0x95, 0x3c, + 0x6e, 0x2d, 0xd8, 0x75, 0x1c, 0xa1, 0xe5, 0x5a, 0x6c, 0x67, 0x88, 0x1a, + 0x1f, 0xbf, 0x44, 0x94, 0x96, 0xbb, 0xd9, 0x7e, 0x2b, 0x9a, 0xe1, 0x36, + 0x13, 0xc9, 0xe6, 0x55, 0x6a, 0x6b, 0x6b, 0x1a, 0xea, 0x6c, 0x6c, 0xb9, + 0xc4, 0xbb, 0x4d, 0x41, 0x3e, 0x1f, 0x20, 0xaa, 0xdb, 0x7b, 0xfa, 0x7d, + 0x95, 0xdb, 0x02, 0xca, 0xcb, 0xa5, 0xed, 0xf8, 0x05, 0xa6, 0xeb, 0x06, + 0x4d, 0x55, 0xdd, 0x4c, 0x00, 0xed, 0x64, 0x76, 0xee, 0x12, 0x53, 0x43, + 0x1e, 0xef, 0x42, 0xe2, 0xd2, 0x65, 0xae, 0xf1, 0xec, 0xb4, 0x1b, 0x64, + 0x89, 0x02, 0x0f, 0x7d, 0x55, 0x6c, 0xca, 0x05, 0xd5, 0x87, 0x81, 0xee, + 0xe5, 0xae, 0x1a, 0x6a, 0xab, 0x57, 0x65, 0x8e, 0x67, 0xb5, 0xfa, 0x8d, + 0x1e, 0x3b, 0xa4, 0xa7, 0x58, 0x0d, 0xfa, 0x1f, 0x8f, 0xc1, 0x57, 0xab, + 0x1c, 0x3c, 0x58, 0x0f, 0x04, 0xba, 0x50, 0xb1, 0xf3, 0x0b, 0x08, 0x65, + 0x9a, 0x0e, 0x35, 0xee, 0xb4, 0x71, 0xfd, 0x10, 0xd2, 0x5b, 0xac, 0xeb, + 0x1e, 0x69, 0x29, 0xa1, 0x81, 0x82, 0xdb, 0x30, 0xc8, 0x67, 0xb5, 0xf8, + 0xee, 0x7b, 0x27, 0xe7, 0x2d, 0xfb, 0xa5, 0x44, 0x55, 0x6b, 0x08, 0x6b, + 0xf4, 0x73, 0x34, 0x32, 0x3b, 0xfc, 0x55, 0x7a, 0xfa, 0xbb, 0x3a, 0x67, + 0x5e, 0xb3, 0x17, 0x24, 0xed, 0xc5, 0xcc, 0x01, 0xc0, 0xf3, 0xb2, 0xd1, + 0xed, 0x9d, 0x3c, 0x42, 0xd4, 0xfb, 0x7e, 0x15, 0xba, 0x16, 0x38, 0x02, + 0x61, 0xaf, 0x77, 0x0e, 0x3f, 0x1f, 0xef, 0x49, 0x48, 0x1d, 0xb2, 0x21, + 0x8d, 0x27, 0x69, 0x12, 0x40, 0x40, 0xb1, 0xf6, 0xee, 0x20, 0x34, 0x16, + 0x91, 0xcb, 0x9d, 0xfc, 0x16, 0x85, 0x9e, 0x9b, 0x40, 0x75, 0x6c, 0x24, + 0x1f, 0x6c, 0x1e, 0x7e, 0x50, 0x83, 0x2e, 0x61, 0x7b, 0x03, 0x18, 0xd2, + 0x34, 0x93, 0xac, 0x8f, 0x87, 0xc1, 0x25, 0x34, 0xac, 0xad, 0xd6, 0x34, + 0x58, 0xd3, 0xb0, 0xb7, 0x83, 0x00, 0xfc, 0x62, 0x56, 0x56, 0x6d, 0x17, + 0xd9, 0xbb, 0x7d, 0x8e, 0x2d, 0xf0, 0x76, 0x92, 0xb5, 0xad, 0xa3, 0x28, + 0xee, 0xd9, 0x6f, 0xa7, 0xdc, 0x80, 0x04, 0x41, 0xf8, 0xcc, 0x2c, 0xcb, + 0xe8, 0xcf, 0x60, 0x2d, 0x39, 0x0c, 0x03, 0x9e, 0x35, 0x49, 0x4d, 0x0e, + 0x99, 0x73, 0x98, 0x5f, 0x8d, 0x69, 0xda, 0xe6, 0x99, 0x03, 0xc4, 0x76, + 0xf8, 0xae, 0x93, 0x0a, 0xb0, 0x3d, 0x36, 0xf8, 0x05, 0xce, 0x61, 0xe2, + 0xdb, 0x67, 0x53, 0xad, 0xee, 0x76, 0xe3, 0x58, 0x25, 0xd1, 0xdf, 0xc9, + 0x75, 0xd8, 0x75, 0x8d, 0xc0, 0xf8, 0xe8, 0x92, 0x9d, 0x2a, 0x59, 0xb6, + 0xbf, 0x32, 0x13, 0xc3, 0xbb, 0xe8, 0x8d, 0xa3, 0x58, 0x3c, 0x90, 0x4b, + 0xbd, 0xc6, 0x4f, 0xcb, 0xe2, 0x92, 0x9a, 0x5d, 0x46, 0xc2, 0x29, 0x71, + 0x3a, 0xae, 0x36, 0xf6, 0x55, 0x92, 0x0b, 0x1e, 0x40, 0xb3, 0xf4, 0x8e, + 0x6b, 0x83, 0x75, 0x1f, 0x9c, 0x24, 0xf7, 0x0b, 0xa9, 0xeb, 0x0f, 0x73, + 0x6a, 0x3e, 0x2b, 0x91, 0xa6, 0xcd, 0xb7, 0x34, 0x58, 0x25, 0xe6, 0xb7, + 0x09, 0x07, 0x59, 0x2e, 0xda, 0x3f, 0x04, 0x94, 0x83, 0x15, 0xcf, 0x6d, + 0x9b, 0x5d, 0xcb, 0x74, 0x2b, 0x50, 0x09, 0x12, 0x50, 0xb2, 0x71, 0x9a, + 0xdb, 0xfd, 0x56, 0x9d, 0x43, 0xbd, 0x32, 0xd2, 0x20, 0xc3, 0x40, 0xd5, + 0x5b, 0xad, 0x9e, 0xc4, 0x94, 0xae, 0x9d, 0x71, 0xc6, 0xce, 0xae, 0xce, + 0x00, 0x27, 0x76, 0xb1, 0x21, 0x5e, 0x70, 0x9b, 0x1f, 0x0e, 0x02, 0xb9, + 0x21, 0xae, 0x1f, 0x44, 0xc9, 0xd0, 0x82, 0x7c, 0x95, 0x07, 0xd4, 0xf6, + 0x80, 0xf8, 0x20, 0xfd, 0x20, 0x78, 0xe3, 0xcc, 0xf0, 0xb4, 0x0b, 0x58, + 0xca, 0x6b, 0x00, 0x6e, 0x70, 0x20, 0xc4, 0xeb, 0xaf, 0x8c, 0xa4, 0xa5, + 0xdd, 0x58, 0x74, 0x68, 0x49, 0x81, 0x13, 0xc6, 0xbd, 0xd5, 0x5a, 0x1b, + 0xb7, 0x18, 0x19, 0x3a, 0x12, 0xe0, 0x74, 0xec, 0x7c, 0xfb, 0xab, 0xc2, + 0x41, 0x2e, 0x2d, 0xe1, 0xa6, 0x27, 0x8d, 0x01, 0x94, 0x1a, 0x8b, 0x1d, + 0x8e, 0xc0, 0xe9, 0x93, 0x05, 0xbe, 0x00, 0xf9, 0x04, 0x94, 0xd5, 0x20, + 0x96, 0xb8, 0x88, 0x04, 0xe8, 0x74, 0xd6, 0x0e, 0xab, 0x2f, 0x2d, 0x9f, + 0xa3, 0x22, 0x74, 0x6f, 0x00, 0x05, 0xac, 0xf6, 0xba, 0xa7, 0xb8, 0xf3, + 0x3d, 0xb4, 0xf0, 0x54, 0x5d, 0x59, 0x2d, 0x78, 0x22, 0x27, 0xb0, 0xfc, + 0x52, 0x53, 0x90, 0xf0, 0x5b, 0xc1, 0x8e, 0xd0, 0x93, 0x5f, 0xd8, 0x1e, + 0x7c, 0x78, 0x53, 0xbd, 0xa2, 0x35, 0xe4, 0x72, 0xa9, 0xef, 0x74, 0xe8, + 0x92, 0x9b, 0x0f, 0x78, 0xda, 0x7c, 0xb5, 0x56, 0xba, 0x17, 0x43, 0xb3, + 0xa8, 0x4d, 0xcf, 0x69, 0x35, 0x4e, 0x8d, 0xfd, 0xe4, 0x1e, 0x9d, 0x83, + 0x6f, 0x53, 0xcb, 0xaf, 0x0d, 0x86, 0x05, 0x92, 0x5e, 0xf8, 0x9d, 0xad, + 0x68, 0x97, 0x15, 0xe8, 0xdf, 0x57, 0xc5, 0x78, 0xbd, 0x3f, 0xec, 0xe6, + 0xbf, 0x6d, 0x76, 0x3a, 0xb2, 0x62, 0x08, 0x0d, 0x3a, 0x6e, 0xf9, 0x24, + 0xa7, 0x9c, 0xb7, 0xa1, 0x43, 0x36, 0x06, 0x6c, 0x64, 0x7b, 0x8e, 0x82, + 0x02, 0xe9, 0xb0, 0x29, 0xa7, 0x1f, 0x1e, 0xaa, 0x6a, 0x68, 0x6d, 0x6c, + 0x68, 0x0d, 0x6f, 0x92, 0x97, 0x55, 0x35, 0x0c, 0x77, 0x12, 0x43, 0x7d, + 0x43, 0xb4, 0x0f, 0xde, 0xf2, 0x0a, 0x36, 0x6d, 0xc7, 0x02, 0xe7, 0x38, + 0x0a, 0x8c, 0x7c, 0x92, 0x53, 0x8d, 0xf5, 0xa2, 0xdd, 0xd9, 0x0d, 0x68, + 0xfc, 0xc6, 0xc2, 0xa1, 0x4b, 0xdf, 0x5d, 0x6d, 0x03, 0x83, 0xe0, 0xa7, + 0xd6, 0x2c, 0xfb, 0x45, 0xae, 0xb1, 0xba, 0x82, 0x74, 0x43, 0xc7, 0x36, + 0x00, 0x01, 0x29, 0x29, 0x35, 0x4d, 0x9b, 0x24, 0x19, 0x27, 0xba, 0xd4, + 0xf4, 0x0f, 0xa1, 0x2a, 0x96, 0x25, 0x6d, 0x2f, 0x92, 0x56, 0xbe, 0x9e, + 0x9c, 0x7e, 0x6a, 0x4a, 0x7c, 0xfb, 0x2e, 0xeb, 0xea, 0xbb, 0x57, 0xbb, + 0x6b, 0x78, 0xd4, 0xc4, 0x2d, 0x6c, 0x3c, 0xe3, 0x6d, 0x4d, 0x68, 0x71, + 0xdc, 0x60, 0xfd, 0xc9, 0xec, 0xe9, 0xc2, 0xf2, 0xe9, 0x6e, 0xd1, 0x12, + 0x7e, 0x2a, 0xb5, 0x54, 0x65, 0xf4, 0xd7, 0x7e, 0x88, 0x6e, 0xac, 0xf2, + 0xd3, 0xfc, 0x0a, 0x4a, 0x76, 0x7a, 0x80, 0x6d, 0xb8, 0x63, 0x43, 0xea, + 0x36, 0x77, 0x4f, 0x71, 0xa7, 0x0b, 0x37, 0xa7, 0xe6, 0x5b, 0x8a, 0x4d, + 0x66, 0x4d, 0x73, 0xf4, 0x4f, 0x64, 0xee, 0xea, 0x62, 0xe7, 0xb6, 0xb1, + 0xec, 0x76, 0xbb, 0x83, 0xb9, 0xf8, 0xa6, 0xfb, 0x38, 0x73, 0xcb, 0xda, + 0x65, 0xde, 0x49, 0x29, 0xe8, 0x2b, 0xb2, 0xbb, 0x6b, 0xdc, 0x0e, 0x87, + 0xb7, 0x81, 0xee, 0xa8, 0xdf, 0x5f, 0xa3, 0x66, 0xe8, 0x86, 0xbf, 0x47, + 0x7f, 0x05, 0x56, 0xbb, 0xdf, 0x8f, 0xec, 0x74, 0xec, 0xd0, 0x13, 0xdc, + 0x2b, 0x0d, 0xcb, 0xab, 0x21, 0x86, 0xa7, 0x80, 0x0f, 0x63, 0xf0, 0xee, + 0x92, 0x97, 0x3a, 0xb4, 0xb5, 0xdf, 0x27, 0x0e, 0xe1, 0x1a, 0xab, 0x36, + 0x37, 0xb9, 0xf1, 0x55, 0x45, 0xa0, 0x7b, 0x5d, 0xf4, 0x9b, 0xa0, 0xf3, + 0xfb, 0x93, 0xdb, 0x94, 0xd6, 0x56, 0x4f, 0x27, 0xcb, 0xb2, 0x4a, 0x72, + 0xfa, 0xdb, 0xeb, 0xb7, 0x26, 0x81, 0x53, 0x0b, 0xf2, 0x43, 0x87, 0xa6, + 0xd1, 0xcf, 0x32, 0xb7, 0xf0, 0x1f, 0x5e, 0x3b, 0x36, 0x64, 0x36, 0x71, + 0xde, 0x64, 0x38, 0xeb, 0xb5, 0xd1, 0xdc, 0x78, 0x2a, 0x5f, 0x56, 0x2a, + 0x66, 0x6e, 0x4f, 0x51, 0xc9, 0x7c, 0x39, 0xf5, 0xfa, 0x75, 0xb1, 0xc7, + 0x90, 0x1d, 0xb8, 0x98, 0xf8, 0xc2, 0xdb, 0xaf, 0x1c, 0x55, 0x6b, 0xeb, + 0x26, 0x6b, 0x30, 0x08, 0xd0, 0x68, 0x92, 0x9a, 0xe7, 0x2b, 0x22, 0x90, + 0xe8, 0xc7, 0x7d, 0x94, 0x69, 0xe9, 0x39, 0x90, 0xf3, 0x07, 0xf9, 0x28, + 0x6d, 0xcc, 0xba, 0xdd, 0x5d, 0x50, 0xa8, 0xea, 0x06, 0xe0, 0x49, 0xdb, + 0xfb, 0xc7, 0xcd, 0x58, 0x39, 0x4c, 0x65, 0xde, 0x8e, 0x21, 0x6b, 0xac, + 0x24, 0x82, 0xf9, 0x96, 0xb7, 0xcc, 0xc1, 0x85, 0x4f, 0x2f, 0xa6, 0x67, + 0x5f, 0x5f, 0xf4, 0xeb, 0x4e, 0x92, 0x76, 0x10, 0xc6, 0xeb, 0xf9, 0xad, + 0x8d, 0x52, 0x52, 0xef, 0xb6, 0xd0, 0xc2, 0xf7, 0x68, 0xc3, 0xda, 0x3e, + 0x97, 0x65, 0x8f, 0xd6, 0x32, 0x29, 0x15, 0x37, 0xd1, 0xb3, 0xf4, 0xc0, + 0x83, 0xa8, 0x13, 0x1f, 0xba, 0x02, 0x1d, 0xbd, 0x27, 0xa8, 0xbd, 0xc6, + 0xa7, 0xdf, 0x69, 0x11, 0x04, 0x17, 0x18, 0xfc, 0x54, 0xeb, 0xe8, 0x21, + 0xa0, 0x39, 0xcf, 0x3b, 0x87, 0x32, 0x41, 0x31, 0xdf, 0x84, 0x94, 0x9f, + 0xea, 0xfd, 0x77, 0x5b, 0x5f, 0xaf, 0x70, 0x01, 0xc4, 0xc3, 0x40, 0x1b, + 0x74, 0xf3, 0x95, 0xd2, 0xd2, 0xc1, 0xed, 0xd2, 0x16, 0x7e, 0x05, 0x40, + 0x31, 0xa0, 0x08, 0x03, 0xb7, 0x92, 0xd4, 0xa0, 0xc1, 0x26, 0x35, 0x09, + 0x29, 0xb3, 0x26, 0x22, 0x66, 0x10, 0x2c, 0x71, 0x6e, 0xbe, 0x1d, 0xd4, + 0xdc, 0xfd, 0x47, 0x89, 0x50, 0xbc, 0x00, 0xcd, 0x4e, 0x89, 0x29, 0xc5, + 0xeb, 0x77, 0x46, 0x3d, 0x8e, 0xfd, 0xd6, 0x9f, 0xbe, 0x17, 0x25, 0x88, + 0xf7, 0x58, 0xc6, 0x64, 0x4c, 0xba, 0xa2, 0x3d, 0x46, 0xf3, 0x2d, 0x1c, + 0xe8, 0xba, 0x2e, 0xb7, 0x60, 0xfb, 0x2d, 0x8d, 0x1c, 0x91, 0x13, 0xf1, + 0x5c, 0xd6, 0x2b, 0xdb, 0x8d, 0x91, 0x10, 0x43, 0x1d, 0xe2, 0x92, 0x9d, + 0x86, 0x5a, 0x2d, 0xa8, 0x08, 0xe0, 0x17, 0x0d, 0x77, 0x37, 0x75, 0x8e, + 0xda, 0x34, 0xe4, 0x68, 0xae, 0xe0, 0xb2, 0x90, 0x0b, 0xed, 0x76, 0xf0, + 0xc1, 0x2e, 0x03, 0x56, 0x88, 0x13, 0xf3, 0x59, 0x35, 0xdb, 0xe8, 0x64, + 0x6c, 0x74, 0xed, 0x8d, 0xf4, 0xcf, 0x66, 0x34, 0x18, 0x6c, 0xf9, 0x39, + 0x15, 0xbf, 0x6a, 0xfb, 0x7d, 0x0c, 0x64, 0xb3, 0x1e, 0x26, 0xe8, 0xe1, + 0xef, 0x1a, 0x16, 0x9f, 0xee, 0x49, 0x4d, 0x9c, 0xe6, 0xd9, 0x95, 0x91, + 0x45, 0x1b, 0xa2, 0x08, 0xc8, 0xc8, 0x6f, 0x60, 0x5a, 0x7d, 0x8d, 0xf8, + 0x95, 0xa9, 0x2d, 0x73, 0x1a, 0x08, 0x93, 0xc1, 0x88, 0x55, 0x18, 0x1b, + 0xeb, 0xd8, 0x40, 0x0d, 0xac, 0x39, 0xbb, 0x1b, 0x20, 0xd8, 0x34, 0xdc, + 0x01, 0x3d, 0xd1, 0x34, 0x6f, 0xe9, 0x67, 0x42, 0x08, 0x74, 0x24, 0xa6, + 0xcb, 0x76, 0xb2, 0xbb, 0xac, 0x04, 0xe9, 0x59, 0x1f, 0x90, 0x77, 0xf8, + 0xaa, 0x4e, 0x71, 0xa8, 0x30, 0x68, 0x41, 0x10, 0x67, 0x52, 0x9f, 0x2a, + 0xf6, 0xb5, 0x8f, 0xac, 0x19, 0x7b, 0x9c, 0xc6, 0xf9, 0x93, 0xc9, 0x03, + 0xf0, 0x56, 0xac, 0xc3, 0x66, 0xd3, 0x66, 0x51, 0xf4, 0x6b, 0x89, 0xd7, + 0xe9, 0x49, 0x84, 0x94, 0xd2, 0x7b, 0xb7, 0xbe, 0x49, 0x05, 0xba, 0x0d, + 0x20, 0x7e, 0x08, 0x76, 0xd6, 0x01, 0x21, 0xa2, 0x01, 0x26, 0x4f, 0xe0, + 0xb4, 0x1c, 0xfc, 0x0c, 0x61, 0xea, 0xb2, 0x96, 0xbd, 0xb1, 0x3b, 0xdc, + 0x77, 0x13, 0xfc, 0x11, 0x31, 0xec, 0xe9, 0x5d, 0x49, 0xed, 0x6b, 0x6b, + 0x04, 0xbc, 0x6a, 0xf6, 0xfb, 0x63, 0xee, 0xee, 0x92, 0x9e, 0x43, 0x21, + 0xba, 0xba, 0x34, 0x00, 0x98, 0x59, 0xce, 0x20, 0x38, 0x9e, 0xc3, 0x58, + 0x5d, 0xb7, 0x56, 0xfa, 0x9d, 0x7e, 0xd7, 0x3b, 0xa6, 0xdc, 0xdb, 0x7b, + 0xfa, 0x6f, 0xd1, 0xde, 0x70, 0xee, 0x0a, 0xe4, 0x33, 0xfa, 0x5f, 0x51, + 0xe9, 0xe6, 0x73, 0x71, 0xdf, 0x53, 0x49, 0xd1, 0xc4, 0x7b, 0x49, 0xfe, + 0xb0, 0xd1, 0x25, 0x3d, 0x1f, 0xd5, 0x1a, 0x5c, 0xc0, 0xdb, 0xb5, 0x6b, + 0xad, 0x2f, 0x87, 0x71, 0x0c, 0x88, 0x99, 0xf9, 0x2e, 0xc7, 0x17, 0xa7, + 0x83, 0x63, 0xb2, 0x43, 0x9c, 0xda, 0xec, 0xf7, 0x1a, 0xff, 0x00, 0x35, + 0xce, 0x02, 0x37, 0x78, 0xac, 0x0f, 0xab, 0x6d, 0x65, 0xb8, 0x14, 0x0a, + 0xce, 0xd1, 0xe9, 0xb6, 0x4c, 0x7e, 0xef, 0xd2, 0xfb, 0xd7, 0x5f, 0x53, + 0xa6, 0x98, 0x26, 0x60, 0x4a, 0x4a, 0x70, 0xac, 0x79, 0xcd, 0xea, 0x17, + 0x50, 0x5c, 0xd0, 0x29, 0x6e, 0xc6, 0xb4, 0xf6, 0x27, 0x92, 0x83, 0x9e, + 0x71, 0x72, 0x6a, 0xfb, 0x23, 0xad, 0x2c, 0xbe, 0x91, 0x20, 0x4c, 0x49, + 0x0a, 0x8f, 0xd6, 0xb2, 0xec, 0x4b, 0x19, 0xd5, 0x71, 0x0c, 0x3c, 0x9d, + 0x99, 0x00, 0x71, 0x3d, 0x97, 0x2d, 0x9f, 0xd5, 0xee, 0xcc, 0x75, 0x6e, + 0xd5, 0xb6, 0xee, 0x02, 0x47, 0x29, 0x29, 0xd7, 0xbe, 0xf7, 0xda, 0xd6, + 0xb9, 0xc2, 0x27, 0x41, 0xf2, 0xd1, 0x3d, 0x44, 0x8d, 0x64, 0xeb, 0xe2, + 0x91, 0x6f, 0xa9, 0x40, 0x61, 0x10, 0xe6, 0x89, 0x95, 0x06, 0xde, 0x05, + 0x6e, 0x6b, 0xbe, 0x90, 0xd0, 0x14, 0x94, 0xdf, 0xe9, 0xf6, 0x03, 0x61, + 0xde, 0xb6, 0x77, 0x0f, 0x4b, 0xca, 0x56, 0x3f, 0x4b, 0xac, 0x38, 0x49, + 0xd5, 0x6d, 0xfa, 0x6d, 0xf4, 0x3e, 0x69, 0x29, 0xa8, 0xea, 0x1a, 0xd7, + 0x38, 0x34, 0x6b, 0x1a, 0x28, 0xd9, 0x88, 0xdb, 0x36, 0x02, 0x25, 0x4e, + 0x5d, 0xbf, 0x6e, 0xef, 0x71, 0x02, 0x7c, 0x14, 0xac, 0x73, 0xea, 0xa9, + 0xd7, 0x59, 0xed, 0x65, 0x60, 0x99, 0xf3, 0xe0, 0x42, 0x4a, 0x78, 0xfe, + 0xbb, 0x41, 0x6f, 0x50, 0x1f, 0x66, 0x30, 0x58, 0x20, 0xb8, 0x7c, 0x78, + 0x45, 0xc3, 0xea, 0x16, 0xd3, 0xed, 0xb4, 0x00, 0xf3, 0xf9, 0xd1, 0xa1, + 0x47, 0xae, 0x93, 0x7d, 0xcf, 0xb4, 0x89, 0xde, 0x64, 0x15, 0x1c, 0xfc, + 0x66, 0xb5, 0x8d, 0x11, 0xaf, 0x8a, 0x4a, 0x6c, 0xc5, 0xb6, 0x0f, 0x52, + 0x23, 0xf8, 0xa6, 0xb0, 0x54, 0x58, 0xd2, 0xcf, 0x6b, 0xc7, 0xe0, 0x56, + 0x7e, 0x3f, 0x51, 0xb7, 0x14, 0xfa, 0x4f, 0x1e, 0xa5, 0x27, 0x82, 0x79, + 0x6a, 0xb5, 0xeb, 0xd3, 0x68, 0x2f, 0xa5, 0xc0, 0xf8, 0x8e, 0xe3, 0xe4, + 0x52, 0x53, 0x1b, 0x72, 0xdc, 0xd1, 0xef, 0x6c, 0x39, 0xba, 0x07, 0xb5, + 0x53, 0xb2, 0xf7, 0xb9, 0x84, 0x13, 0x00, 0xf1, 0x08, 0xd7, 0x58, 0x5c, + 0x21, 0xc4, 0x40, 0xf0, 0x55, 0x1c, 0xf0, 0x39, 0x29, 0x29, 0x17, 0x4d, + 0xeb, 0x39, 0x7d, 0x2b, 0x35, 0xcf, 0xc7, 0x01, 0xed, 0xb6, 0x05, 0x95, + 0x1e, 0x1f, 0x1c, 0x7c, 0xf5, 0x5d, 0xc1, 0xbd, 0x99, 0x65, 0xa2, 0xd6, + 0x06, 0x5a, 0x04, 0x35, 0xa7, 0xf3, 0x67, 0x9d, 0x57, 0x9e, 0xb5, 0xec, + 0xab, 0x36, 0xab, 0x9d, 0xf4, 0x59, 0x63, 0x5c, 0x7e, 0x00, 0x82, 0xbd, + 0x1b, 0x1b, 0x1b, 0xed, 0x4d, 0x0f, 0x04, 0x17, 0x0d, 0x49, 0x1c, 0x90, + 0x7c, 0x52, 0x52, 0x0f, 0xd9, 0x77, 0xb0, 0x6f, 0xa2, 0x1a, 0xc1, 0xfb, + 0xb0, 0x3e, 0xf4, 0x16, 0xe6, 0x0c, 0x62, 0x19, 0x63, 0xde, 0x36, 0xea, + 0x60, 0x18, 0x3e, 0x5b, 0xb8, 0x5b, 0x34, 0xb2, 0xcc, 0x72, 0xd6, 0xb9, + 0xfe, 0xa5, 0x70, 0x79, 0xe5, 0xb3, 0xe0, 0x15, 0x7c, 0xb7, 0x87, 0xb3, + 0xd2, 0x6d, 0x7e, 0xa6, 0xed, 0x4b, 0x0e, 0x89, 0x29, 0xcb, 0xb7, 0xa8, + 0xe1, 0xe5, 0x3f, 0xd1, 0x0f, 0x1e, 0xab, 0xa4, 0x56, 0xc6, 0x0d, 0xc4, + 0xb8, 0xfe, 0xf2, 0x3b, 0xa9, 0xf4, 0x71, 0xf6, 0xba, 0x37, 0xd8, 0x76, + 0x92, 0x07, 0x82, 0x26, 0x2d, 0x0d, 0x65, 0x8e, 0x1b, 0x03, 0x45, 0x70, + 0xd0, 0x44, 0x44, 0xbb, 0x57, 0x44, 0x0f, 0x0d, 0x11, 0x5f, 0x51, 0xb7, + 0x66, 0xef, 0xa2, 0x25, 0xc7, 0xe2, 0x92, 0x99, 0x53, 0x56, 0xd0, 0xd1, + 0x1a, 0x8e, 0xca, 0xc3, 0x46, 0xd6, 0xc9, 0xd7, 0xc4, 0x21, 0xb8, 0x06, + 0xb7, 0xdb, 0xa6, 0x9d, 0x91, 0x9a, 0x25, 0xba, 0x84, 0x94, 0xc2, 0x65, + 0xe2, 0x3e, 0x6a, 0x39, 0x8e, 0x3b, 0x43, 0x41, 0xf8, 0x7c, 0x91, 0x58, + 0x36, 0xba, 0x5c, 0xa9, 0xe6, 0x38, 0xee, 0x84, 0x94, 0xf3, 0x9f, 0x58, + 0x5e, 0xdf, 0x45, 0xb5, 0x4c, 0x39, 0xef, 0x10, 0x7c, 0xc0, 0x95, 0x92, + 0x43, 0x6f, 0xc7, 0x20, 0x8d, 0xb6, 0x33, 0x9e, 0xc4, 0x1f, 0x05, 0x6f, + 0xeb, 0x33, 0xc3, 0xae, 0x65, 0x6d, 0x30, 0xf6, 0xcb, 0xc0, 0xf3, 0x1a, + 0x2c, 0xc6, 0x5e, 0xe2, 0x0b, 0xdd, 0xcb, 0x86, 0xb3, 0xde, 0x34, 0xfb, + 0xc2, 0x4a, 0x74, 0x3a, 0x60, 0x7e, 0x4b, 0x4e, 0x4e, 0x40, 0x1b, 0x71, + 0x78, 0x9f, 0xcf, 0x27, 0xf2, 0xc2, 0xd1, 0xc6, 0xb4, 0xd7, 0x45, 0x76, + 0x1f, 0x6c, 0x37, 0xf9, 0xc8, 0xe1, 0xd6, 0x12, 0xf0, 0x40, 0xfd, 0xee, + 0xd2, 0x8f, 0xd2, 0x70, 0xe8, 0xc8, 0xe9, 0x35, 0xb8, 0xcf, 0xe9, 0x37, + 0x12, 0x07, 0x79, 0x24, 0x4f, 0xcf, 0x80, 0xb3, 0x3a, 0x8e, 0x4b, 0xbe, + 0xda, 0xf7, 0xfd, 0x0c, 0x7a, 0x40, 0xa9, 0xaf, 0xff, 0x00, 0x49, 0x02, + 0x00, 0x1e, 0x4d, 0x1d, 0xd2, 0x53, 0x66, 0x9b, 0x49, 0x2e, 0xdc, 0x23, + 0x71, 0x25, 0xc0, 0xeb, 0x13, 0xd9, 0x1b, 0xd6, 0x73, 0xec, 0x00, 0x37, + 0xd4, 0x79, 0x86, 0xb5, 0x8d, 0x3f, 0x48, 0xf8, 0x42, 0xc8, 0xaa, 0xfb, + 0x2f, 0xb1, 0xb4, 0xd2, 0xd3, 0x63, 0xde, 0x7d, 0xad, 0x01, 0x74, 0x58, + 0x75, 0x57, 0xd2, 0x71, 0xc3, 0xde, 0x3d, 0x4c, 0xcb, 0x74, 0x31, 0xae, + 0xdf, 0xe4, 0xb5, 0x25, 0x25, 0x6d, 0x38, 0xbd, 0x36, 0xa1, 0x76, 0x44, + 0x59, 0x94, 0x35, 0xdd, 0xc8, 0x61, 0x3c, 0xed, 0x9e, 0xfe, 0x6b, 0x2d, + 0xc7, 0xad, 0xfd, 0x60, 0xbf, 0xd2, 0xc5, 0xaf, 0xf5, 0x76, 0x98, 0x75, + 0xa7, 0xda, 0xc0, 0x3c, 0xdc, 0x55, 0xfa, 0xb0, 0x7e, 0xd3, 0x6f, 0xaf, + 0x9a, 0xef, 0x69, 0x32, 0x28, 0x9f, 0x6f, 0xf6, 0x8f, 0x75, 0xb3, 0x4f, + 0x56, 0xc5, 0xae, 0x31, 0x71, 0x5b, 0x36, 0xb6, 0x00, 0xaa, 0xb1, 0x3f, + 0x38, 0x1d, 0x92, 0x52, 0x0c, 0x1f, 0xa9, 0x95, 0x32, 0xbd, 0x99, 0x79, + 0x6e, 0x79, 0x3c, 0xd6, 0xcd, 0x1b, 0xff, 0x00, 0x4a, 0x53, 0x64, 0x7d, + 0x55, 0xc6, 0xc6, 0x0e, 0x7e, 0x0d, 0xd6, 0x53, 0x60, 0xe7, 0x59, 0x07, + 0xe2, 0x16, 0xe5, 0x20, 0x90, 0x2d, 0xb3, 0x47, 0xf6, 0x6c, 0xf0, 0x50, + 0xac, 0x73, 0x8c, 0xbb, 0x99, 0xe6, 0x0e, 0x89, 0x29, 0x06, 0x16, 0x4b, + 0x1d, 0x47, 0xa7, 0x3b, 0xac, 0x60, 0x01, 0xce, 0xec, 0x5c, 0x06, 0xaa, + 0xcd, 0xd4, 0x55, 0x7d, 0x4e, 0xae, 0xc6, 0x87, 0xd6, 0xe1, 0x0e, 0x61, + 0x12, 0xd2, 0x0f, 0x88, 0x2b, 0x9b, 0xba, 0xe1, 0x85, 0x98, 0xe7, 0x30, + 0x96, 0x55, 0x69, 0x97, 0x8e, 0x60, 0x9e, 0x61, 0x74, 0xd4, 0x3d, 0xb6, + 0x54, 0xd7, 0xb0, 0xc8, 0x22, 0x41, 0xec, 0x42, 0x4a, 0x72, 0x3f, 0x63, + 0x9c, 0x12, 0xd1, 0xd3, 0xdc, 0x1b, 0x50, 0x98, 0xa5, 0xd3, 0x1a, 0x99, + 0x86, 0x95, 0x6f, 0x17, 0x3d, 0xcd, 0x70, 0xaf, 0x25, 0x86, 0xa7, 0x8e, + 0x01, 0xe1, 0xde, 0x6d, 0x3c, 0x15, 0x7b, 0x69, 0x1a, 0x48, 0x93, 0xd9, + 0x35, 0xd8, 0xec, 0x7b, 0x0b, 0x2d, 0x68, 0x7b, 0x3c, 0x12, 0x53, 0x91, + 0xf5, 0x9f, 0x1e, 0xac, 0xae, 0x91, 0x90, 0x1a, 0x65, 0xec, 0x87, 0x37, + 0x5e, 0xf3, 0x24, 0x95, 0xe7, 0xd4, 0xe1, 0xdb, 0xf6, 0x9a, 0x9a, 0xe1, + 0x0d, 0x0e, 0x12, 0xbb, 0xce, 0xab, 0xd3, 0xb2, 0x29, 0xc2, 0xbd, 0xf8, + 0xee, 0x36, 0xd1, 0xb4, 0xee, 0x61, 0xfa, 0x4d, 0x03, 0xcf, 0xba, 0xe4, + 0xf1, 0x9e, 0xe3, 0x73, 0x06, 0xe2, 0x41, 0xe4, 0x24, 0xa6, 0xe9, 0xb7, + 0xd3, 0x73, 0x9b, 0xca, 0xae, 0xf0, 0x1e, 0x64, 0x0d, 0xbd, 0xe1, 0x11, + 0xd5, 0x7a, 0xd7, 0x48, 0x1a, 0x35, 0x16, 0xd6, 0x81, 0x5c, 0x38, 0x00, + 0x47, 0x04, 0x24, 0xa6, 0x78, 0x79, 0x4d, 0xa4, 0x6b, 0xcf, 0x80, 0x5b, + 0xbf, 0x69, 0x1f, 0x60, 0xf5, 0xe0, 0xed, 0x95, 0xcb, 0xd0, 0x5c, 0x7b, + 0x72, 0x57, 0x49, 0xb0, 0xfe, 0xc4, 0x98, 0xef, 0xc2, 0x4a, 0x4f, 0x8f, + 0xb2, 0xcb, 0x5f, 0x60, 0x00, 0x86, 0x9d, 0xa3, 0xbc, 0x69, 0xaa, 0xa5, + 0xd7, 0xac, 0x2f, 0xf4, 0xf1, 0x9a, 0x64, 0x1d, 0x5c, 0x3c, 0xc2, 0xd3, + 0x6d, 0x62, 0x8a, 0x87, 0xe6, 0xba, 0x24, 0xfc, 0x56, 0x3d, 0xce, 0xf5, + 0xf2, 0xdd, 0xac, 0xec, 0x11, 0xf3, 0x49, 0x48, 0x58, 0xd6, 0xd2, 0xc0, + 0xc0, 0x37, 0x3e, 0x3b, 0x76, 0x55, 0xed, 0xc6, 0xb2, 0xc7, 0x0d, 0xe6, + 0x40, 0x04, 0x95, 0x7c, 0x56, 0x03, 0x75, 0x3e, 0xe7, 0x77, 0x4d, 0xb5, + 0xd1, 0xaf, 0x03, 0x44, 0x94, 0xe4, 0x5b, 0x80, 0x1e, 0x25, 0xbf, 0xd9, + 0xf3, 0x54, 0x2c, 0xc0, 0xbd, 0xb2, 0xf0, 0x36, 0x91, 0xdc, 0x2e, 0xa9, + 0x94, 0x07, 0x40, 0x03, 0x40, 0x87, 0x93, 0x5b, 0x18, 0xc9, 0x8d, 0x07, + 0x8a, 0x4a, 0x78, 0xcb, 0xf2, 0x6c, 0xa9, 0xc1, 0xb6, 0x09, 0x3e, 0x28, + 0x0f, 0xcd, 0xde, 0x35, 0x6a, 0xb7, 0xd4, 0xaa, 0xf5, 0x32, 0x09, 0x03, + 0x49, 0x54, 0xec, 0xa3, 0x68, 0x3e, 0x29, 0x29, 0x03, 0xdf, 0xb8, 0xaf, + 0x4d, 0xfa, 0xa7, 0x96, 0xfc, 0xce, 0x95, 0x43, 0xda, 0xff, 0x00, 0x73, + 0x1b, 0xe9, 0x5b, 0x27, 0xbb, 0x74, 0xfc, 0x8b, 0xcc, 0x48, 0x82, 0xbb, + 0xcf, 0xa8, 0xe0, 0x55, 0xd1, 0xec, 0xb9, 0xfa, 0x57, 0xeb, 0xb9, 0xce, + 0x9e, 0xf0, 0xd6, 0xc4, 0x4a, 0x4a, 0x7a, 0x3c, 0xcc, 0xd6, 0x54, 0xc6, + 0xfa, 0x67, 0x76, 0xf3, 0xb0, 0x3c, 0x7e, 0x73, 0x81, 0x8d, 0xaa, 0xb3, + 0xf1, 0x73, 0x5d, 0xd5, 0x2b, 0x2e, 0x3b, 0x70, 0xeb, 0x69, 0xde, 0xd1, + 0xf4, 0xad, 0xb2, 0x3f, 0xea, 0x5a, 0x7e, 0xf5, 0x56, 0xeb, 0x2e, 0xb3, + 0x66, 0x6d, 0x82, 0x03, 0x88, 0xfb, 0x3d, 0x7c, 0x6d, 0x68, 0xe5, 0xd1, + 0xe2, 0x42, 0xd8, 0xc2, 0x78, 0xb0, 0x32, 0xdb, 0x18, 0x19, 0x61, 0x6b, + 0xbd, 0x93, 0x3f, 0x9c, 0x7b, 0xfd, 0xc9, 0x29, 0xa9, 0x75, 0x54, 0xd1, + 0x7e, 0xba, 0x4c, 0x06, 0x6d, 0xd6, 0x49, 0x92, 0x64, 0x79, 0xc2, 0x76, + 0x01, 0x1a, 0x8e, 0xca, 0x1d, 0x55, 0x9b, 0x5f, 0xbe, 0xbd, 0x5e, 0x3e, + 0x97, 0xc2, 0x41, 0xd2, 0x3c, 0x02, 0x55, 0x3b, 0x7f, 0xbb, 0x9f, 0x00, + 0x92, 0x97, 0x2d, 0x97, 0x19, 0xfa, 0x23, 0x82, 0x88, 0xd2, 0x4b, 0x7f, + 0x22, 0x88, 0x27, 0xf3, 0xa3, 0x54, 0x8b, 0x9d, 0xc1, 0xd4, 0xa4, 0xa6, + 0x6f, 0x30, 0xcf, 0x3f, 0x15, 0x43, 0x26, 0x0c, 0x9e, 0xfd, 0x95, 0xd7, + 0x38, 0x35, 0xa5, 0x66, 0xe4, 0x59, 0xb4, 0x92, 0xed, 0x00, 0xd4, 0x93, + 0xe0, 0x12, 0x53, 0xc6, 0xf5, 0xf2, 0xeb, 0xfa, 0xa3, 0xda, 0xc6, 0x39, + 0xfe, 0x9b, 0x5a, 0xd8, 0x68, 0x26, 0x0f, 0xd2, 0x3c, 0x7c, 0x55, 0x3a, + 0x83, 0x1a, 0xed, 0x8e, 0x90, 0xfe, 0x5a, 0xd2, 0x0f, 0x3f, 0x05, 0xd6, + 0xe0, 0xd5, 0xf6, 0xb2, 0x6e, 0x73, 0xb6, 0x31, 0xe6, 0x44, 0x68, 0x48, + 0xf1, 0x25, 0x74, 0x5d, 0x37, 0xa3, 0x61, 0x30, 0x7d, 0xb9, 0xf4, 0xb4, + 0xbd, 0xbf, 0xcc, 0xb9, 0xc0, 0x17, 0x4f, 0x8c, 0x94, 0x94, 0xf2, 0xf8, + 0x58, 0xfd, 0x75, 0xfd, 0x23, 0xec, 0x98, 0x98, 0xee, 0xae, 0xf2, 0xf2, + 0x3d, 0x4b, 0x46, 0xc0, 0xca, 0x9d, 0xee, 0x96, 0x13, 0xdf, 0x77, 0x92, + 0x47, 0xea, 0x47, 0x56, 0xbd, 0x85, 0xb6, 0xe5, 0x55, 0xb4, 0x91, 0x05, + 0xcd, 0x74, 0x88, 0x1c, 0x37, 0xc9, 0x76, 0xec, 0x86, 0x00, 0x62, 0x79, + 0x30, 0x89, 0x73, 0xf6, 0x52, 0x5c, 0x63, 0x71, 0xd3, 0xfd, 0x81, 0x25, + 0x3c, 0xff, 0x00, 0x45, 0xfa, 0xb7, 0x8b, 0xd3, 0x69, 0x89, 0x2e, 0xb9, + 0xdf, 0x4e, 0xce, 0xe7, 0xfd, 0x88, 0xb9, 0x58, 0x34, 0x63, 0xee, 0x71, + 0x79, 0x0f, 0x7e, 0x81, 0xcf, 0x33, 0xf2, 0x1e, 0x0b, 0x48, 0x4b, 0x48, + 0x9f, 0x0f, 0xe2, 0xab, 0xe7, 0x60, 0xe3, 0xf5, 0x3a, 0x8d, 0x19, 0x25, + 0xcd, 0x68, 0x87, 0x31, 0xec, 0x3b, 0x5e, 0x1d, 0xe4, 0x52, 0x53, 0xcb, + 0xf5, 0x0c, 0xcc, 0x86, 0x64, 0xd5, 0x86, 0xe6, 0x96, 0x36, 0xd3, 0x1e, + 0xa8, 0xfa, 0x21, 0x83, 0x57, 0x10, 0x7c, 0x61, 0x69, 0x55, 0xd5, 0xbe, + 0xc9, 0x84, 0xd7, 0xe3, 0x61, 0x39, 0x8d, 0x22, 0x48, 0xad, 0x85, 0xce, + 0x23, 0xb1, 0x71, 0x02, 0x4c, 0x85, 0xd0, 0xe3, 0xe0, 0x55, 0x45, 0x4d, + 0xae, 0xa2, 0xdd, 0x8d, 0x10, 0x09, 0x1e, 0xef, 0x99, 0x46, 0x66, 0x33, + 0x5d, 0xab, 0x9e, 0x00, 0x1e, 0x09, 0x29, 0xe7, 0xba, 0x7f, 0x50, 0xcb, + 0xea, 0x6c, 0x16, 0x6e, 0x6d, 0x15, 0x73, 0xb1, 0xc7, 0xf4, 0x84, 0x0d, + 0x3e, 0x88, 0xe1, 0x6b, 0x36, 0xac, 0xa6, 0x09, 0xf4, 0xff, 0x00, 0x44, + 0x47, 0x0d, 0xd4, 0xa3, 0xfd, 0x8f, 0xa7, 0xd7, 0x7f, 0xda, 0x45, 0x40, + 0xdd, 0x1b, 0x7d, 0x43, 0xcc, 0x78, 0x2b, 0x03, 0x25, 0xb3, 0xed, 0x49, + 0x4e, 0x0e, 0x67, 0x4e, 0x7d, 0xd2, 0x5c, 0x3d, 0xa7, 0xc4, 0x14, 0x3c, + 0x3e, 0x9b, 0xd5, 0x31, 0x81, 0xfb, 0x1e, 0x4f, 0xa6, 0xc8, 0x9d, 0xb6, + 0x34, 0xb9, 0x9f, 0x8a, 0xe8, 0x5d, 0x7e, 0x86, 0x34, 0x1e, 0x2a, 0xb3, + 0xee, 0xf1, 0x27, 0x69, 0xd0, 0x8f, 0xe2, 0x92, 0x9e, 0x7a, 0xc6, 0xfd, + 0x73, 0xf7, 0x16, 0x5b, 0x56, 0xe1, 0xf9, 0xa5, 0x80, 0xff, 0x00, 0x9a, + 0x56, 0x5e, 0x4f, 0x5c, 0xfa, 0xe9, 0xd3, 0x8e, 0xfc, 0x8a, 0x9a, 0x6b, + 0x6f, 0x2e, 0xf4, 0xe5, 0xbf, 0x38, 0xe1, 0x75, 0xf5, 0x67, 0x35, 0x96, + 0x1a, 0xc0, 0x26, 0x15, 0xc0, 0xe6, 0xdc, 0xc3, 0xa0, 0xd7, 0x47, 0x02, + 0x92, 0x9e, 0x57, 0x1b, 0xeb, 0x5d, 0x3d, 0x43, 0xa6, 0xde, 0x2d, 0x6f, + 0xa5, 0x7b, 0x98, 0x41, 0xdb, 0xf4, 0x4c, 0xf6, 0x85, 0x93, 0x4e, 0x3d, + 0x02, 0xc0, 0xf6, 0x34, 0xc8, 0x12, 0x1d, 0x2b, 0x7f, 0xad, 0xfd, 0x5e, + 0xc0, 0xad, 0x8e, 0xea, 0x38, 0xec, 0xf4, 0x6e, 0x66, 0xae, 0xd8, 0x36, + 0xb5, 0xe3, 0x8f, 0x73, 0x78, 0x58, 0x95, 0xb9, 0xe0, 0xb9, 0x85, 0xa4, + 0x08, 0x3a, 0xf6, 0x49, 0x4b, 0xd0, 0x44, 0xba, 0x62, 0x4f, 0x08, 0x59, + 0x36, 0x1d, 0x9b, 0x76, 0x80, 0x7c, 0x50, 0x85, 0x45, 0xee, 0x30, 0xe2, + 0xd2, 0xdd, 0x74, 0x47, 0x24, 0x1a, 0xcc, 0xea, 0x38, 0x92, 0x92, 0x98, + 0x63, 0x07, 0xb9, 0xcd, 0x68, 0x3a, 0x2e, 0xbb, 0xd1, 0x1f, 0xb3, 0x3d, + 0x09, 0xfc, 0xd5, 0x83, 0xd3, 0x71, 0x1b, 0x66, 0xd7, 0xcf, 0x1a, 0xc2, + 0xe8, 0xff, 0x00, 0xc1, 0x47, 0x94, 0x24, 0xa4, 0x79, 0x2d, 0x79, 0x1a, + 0xe9, 0x1a, 0x98, 0x59, 0xd8, 0xb8, 0x6f, 0x70, 0x75, 0x9c, 0xb9, 0xe4, + 0xb8, 0x9f, 0x25, 0xa8, 0xf6, 0xfa, 0x8d, 0x91, 0x32, 0xf2, 0x1a, 0x01, + 0xec, 0xaf, 0x36, 0x8a, 0x6a, 0x66, 0xd0, 0x35, 0x02, 0x12, 0x53, 0x85, + 0x6d, 0x41, 0xa0, 0x08, 0x88, 0x50, 0x0d, 0x68, 0xf7, 0x6d, 0x1f, 0xed, + 0x57, 0xb3, 0x03, 0x77, 0x18, 0x8d, 0x39, 0x54, 0x84, 0x38, 0xc7, 0x03, + 0x99, 0x49, 0x49, 0x40, 0x0d, 0x6c, 0xbb, 0x9f, 0x0e, 0xeb, 0x37, 0x3e, + 0xc6, 0xbc, 0x96, 0x19, 0xd6, 0x20, 0x2b, 0xcf, 0x02, 0xb6, 0x97, 0x1f, + 0xc4, 0xac, 0x9b, 0x5c, 0xed, 0xce, 0xb1, 0xc3, 0xd8, 0x26, 0x3f, 0x2a, + 0x4a, 0x73, 0x32, 0xea, 0x68, 0x27, 0x4d, 0x79, 0x95, 0x9b, 0x94, 0xd1, + 0x10, 0x3e, 0x21, 0x6b, 0x64, 0x6e, 0x75, 0x65, 0xe7, 0xb9, 0x85, 0x9f, + 0x7d, 0x64, 0xd5, 0xba, 0x38, 0xd0, 0x94, 0x94, 0xe6, 0xfa, 0x0e, 0xb6, + 0xfa, 0xea, 0x66, 0x8e, 0xb5, 0xcd, 0x6b, 0x67, 0xc5, 0xc6, 0x17, 0xa7, + 0x8c, 0x1a, 0x2b, 0xc5, 0xc7, 0xe9, 0xcc, 0xf6, 0x51, 0x40, 0x6b, 0x03, + 0x06, 0x9b, 0xe4, 0xea, 0xe7, 0x7f, 0x5b, 0x95, 0xe7, 0x38, 0x95, 0xbd, + 0xf9, 0xf4, 0x7a, 0x7a, 0x39, 0x8e, 0x0f, 0x93, 0xfc, 0x83, 0xb9, 0x77, + 0xe7, 0xaa, 0x62, 0x64, 0xdb, 0x51, 0x32, 0xd7, 0x6e, 0x1a, 0x79, 0xfc, + 0x52, 0x53, 0x6f, 0x2a, 0xb3, 0x60, 0x05, 0x82, 0x03, 0x5b, 0x0d, 0xe2, + 0x01, 0x22, 0x21, 0x4a, 0xa1, 0x60, 0x10, 0xdd, 0x03, 0x40, 0x88, 0xf3, + 0xd7, 0x94, 0x67, 0xd4, 0xc7, 0x54, 0x00, 0x90, 0x08, 0x92, 0x0f, 0x0a, + 0xae, 0x30, 0x73, 0x6c, 0xdb, 0xbb, 0x58, 0x23, 0x99, 0xfa, 0x27, 0x94, + 0x94, 0xc3, 0xa8, 0x8b, 0xe5, 0x82, 0x97, 0x6c, 0xb1, 0xd0, 0x24, 0x7e, + 0x73, 0x8f, 0xd2, 0x1f, 0x31, 0xe2, 0x95, 0x15, 0x1a, 0xeb, 0x0d, 0x8d, + 0x44, 0x68, 0x79, 0x1f, 0x15, 0x3b, 0xde, 0xc7, 0x3d, 0x86, 0x4e, 0xf0, + 0x4c, 0xc0, 0x91, 0x33, 0x20, 0xea, 0x87, 0x82, 0xd9, 0xa7, 0x73, 0x9f, + 0xbc, 0xbd, 0xc4, 0x97, 0xfe, 0xf1, 0x9e, 0x61, 0x25, 0x25, 0xd7, 0x45, + 0x17, 0x12, 0xcd, 0x49, 0x94, 0xf6, 0x3a, 0x0c, 0x03, 0xc2, 0x5b, 0x77, + 0x89, 0x1c, 0x78, 0x78, 0xa4, 0xa4, 0x7b, 0xc1, 0x69, 0x3c, 0x2c, 0x4e, + 0xb1, 0x92, 0x59, 0x4d, 0x84, 0x77, 0x10, 0x07, 0x8c, 0xad, 0x9b, 0xe2, + 0xb6, 0xc3, 0x78, 0x5c, 0xfe, 0x4b, 0x5d, 0x97, 0x9c, 0xcc, 0x56, 0x89, + 0x0d, 0x05, 0xee, 0xf8, 0x9d, 0x02, 0x4a, 0x77, 0xba, 0x06, 0x28, 0xb3, + 0x11, 0x9e, 0xde, 0x5a, 0x3f, 0x12, 0x17, 0x46, 0xe6, 0x81, 0x5b, 0x5b, + 0xc0, 0x67, 0x01, 0x67, 0xf4, 0xda, 0xbe, 0xc7, 0x5b, 0x01, 0xd0, 0x40, + 0x61, 0xff, 0x00, 0x5f, 0x8a, 0xd2, 0xdc, 0xdd, 0xc4, 0x78, 0xb6, 0x35, + 0x49, 0x4d, 0x3b, 0x4e, 0xcd, 0xbd, 0xe2, 0x42, 0xab, 0x7d, 0xce, 0x78, + 0x04, 0x9f, 0xd1, 0x8e, 0x1b, 0xe6, 0xac, 0x65, 0x93, 0xb4, 0x83, 0xc9, + 0xe3, 0xe2, 0xa8, 0xd4, 0xf7, 0xc6, 0xd7, 0x01, 0xbb, 0xbb, 0x52, 0x53, + 0x60, 0xbc, 0x96, 0xb5, 0xd1, 0x31, 0xf9, 0x3b, 0xa8, 0x9b, 0xb6, 0xcb, + 0xe2, 0x47, 0x82, 0x66, 0xbd, 0xad, 0x66, 0xa7, 0x50, 0x74, 0x52, 0x6c, + 0x49, 0x05, 0xba, 0x3b, 0xba, 0x4a, 0x6b, 0xb3, 0xa9, 0x07, 0xb7, 0xda, + 0xd2, 0xc3, 0x3a, 0xb4, 0x88, 0x53, 0xaf, 0xa8, 0x19, 0x8d, 0xa4, 0xa7, + 0x7d, 0x14, 0xc9, 0x9f, 0x69, 0x1f, 0x8a, 0x0f, 0xa7, 0xbf, 0xda, 0x01, + 0x68, 0xed, 0x1a, 0x14, 0x94, 0x9d, 0xd9, 0xed, 0x6e, 0x85, 0xb2, 0x9d, + 0xb9, 0x5e, 0x0c, 0x20, 0x7e, 0x08, 0x0d, 0xa6, 0xd9, 0xf1, 0x8f, 0x14, + 0x53, 0x4b, 0x88, 0xe3, 0xe2, 0x12, 0x52, 0x61, 0x92, 0xd7, 0xea, 0x75, + 0xf2, 0x4c, 0x6f, 0xc6, 0x76, 0x8e, 0x26, 0x3c, 0x21, 0x53, 0xb2, 0xb7, + 0xb3, 0x56, 0xb4, 0xe8, 0xa2, 0x0d, 0xaf, 0x69, 0x23, 0x51, 0xe2, 0x92, + 0x9d, 0x21, 0x5e, 0x2b, 0xa0, 0xb7, 0x9e, 0xd0, 0xad, 0x56, 0x31, 0xc4, + 0x02, 0x34, 0xf3, 0x58, 0x95, 0xe5, 0xd8, 0xc2, 0x19, 0x5b, 0x0b, 0xdd, + 0xc7, 0x1c, 0x79, 0xab, 0xf4, 0x57, 0x65, 0xc4, 0x0b, 0x0e, 0xd2, 0x35, + 0x84, 0x94, 0x8b, 0xeb, 0x2b, 0x88, 0xe9, 0x36, 0xb6, 0xb3, 0x01, 0xce, + 0x68, 0x68, 0xf0, 0xd5, 0x72, 0x46, 0xe7, 0x0a, 0xdc, 0x1d, 0xfb, 0xbf, + 0x88, 0x5d, 0x47, 0xd6, 0x06, 0xfa, 0x78, 0xad, 0x1f, 0x4c, 0x39, 0xc3, + 0x43, 0xe4, 0xb0, 0x1f, 0x5b, 0x2d, 0xaf, 0x6b, 0xa0, 0x69, 0xc0, 0xec, + 0x92, 0x9a, 0xb8, 0xce, 0x0d, 0x69, 0x91, 0x32, 0x24, 0x21, 0x58, 0xef, + 0x69, 0x13, 0xa2, 0xb2, 0xe0, 0xc0, 0xc0, 0xd2, 0x60, 0xb7, 0x4d, 0x15, + 0x63, 0x54, 0x87, 0x01, 0xac, 0x70, 0x92, 0x9d, 0xae, 0x84, 0x03, 0xeb, + 0x81, 0xd9, 0x74, 0x1e, 0x91, 0xf4, 0xe6, 0x17, 0x37, 0xd0, 0x6c, 0xd9, + 0xed, 0x3a, 0x10, 0x75, 0x5d, 0x6c, 0x8f, 0xb3, 0x6e, 0x49, 0x4b, 0x16, + 0xb4, 0x8d, 0xfb, 0x46, 0xe6, 0x70, 0xa9, 0xe5, 0x65, 0xb9, 0xa4, 0xc8, + 0x84, 0x7b, 0x2c, 0xf6, 0xb8, 0x6b, 0xe2, 0xb2, 0xb2, 0x43, 0x9f, 0x2d, + 0x07, 0xb7, 0xdc, 0x92, 0x90, 0xe4, 0xe4, 0xb8, 0xba, 0x00, 0xd4, 0xea, + 0x87, 0x51, 0x26, 0x49, 0xd5, 0xca, 0x0f, 0x07, 0x71, 0x1c, 0xc7, 0x7e, + 0xc8, 0x39, 0x96, 0xd9, 0x4e, 0x23, 0x9c, 0xc3, 0x0e, 0x3e, 0xd1, 0xf3, + 0xd1, 0x25, 0x25, 0xbe, 0xe0, 0xe3, 0xb7, 0xb2, 0xa9, 0x90, 0x25, 0xb0, + 0xdd, 0x07, 0x1f, 0x05, 0x56, 0xbb, 0x36, 0x45, 0x64, 0x3b, 0x7b, 0x44, + 0x19, 0x3a, 0x19, 0xee, 0x14, 0xdd, 0x75, 0x6e, 0x61, 0x6b, 0xad, 0x8f, + 0x74, 0xed, 0x12, 0x92, 0x90, 0xe4, 0x1d, 0xc1, 0xac, 0x68, 0x30, 0xd5, + 0x5e, 0xda, 0xf6, 0xd0, 0xf0, 0xf1, 0xab, 0xb8, 0x1f, 0x05, 0x69, 0xf6, + 0x37, 0x91, 0x26, 0x01, 0xfb, 0xd6, 0x56, 0x57, 0x50, 0x36, 0xbf, 0x6b, + 0x3f, 0x37, 0x42, 0x7c, 0x12, 0x52, 0x3e, 0x9c, 0x63, 0x22, 0xc7, 0xfe, + 0xeb, 0x63, 0xef, 0x44, 0x76, 0x75, 0xd8, 0xd9, 0x21, 0xf5, 0x19, 0x93, + 0xee, 0x61, 0xd4, 0x10, 0xaa, 0x63, 0xe4, 0xb2, 0xb3, 0x63, 0x4f, 0xd2, + 0x71, 0xe5, 0x3b, 0x58, 0x4b, 0xcd, 0x8f, 0xe0, 0x24, 0xa7, 0xbf, 0xe9, + 0xf9, 0xed, 0xca, 0xc7, 0x6d, 0xcd, 0x26, 0x36, 0xed, 0xd9, 0xc9, 0x04, + 0x91, 0x2a, 0xc3, 0xf1, 0xc3, 0xee, 0xf5, 0x5b, 0x0d, 0x74, 0x90, 0xd3, + 0xe0, 0x38, 0x3f, 0x7a, 0xe1, 0xba, 0x4f, 0x5c, 0x76, 0x16, 0x60, 0x0f, + 0x93, 0x8a, 0xf3, 0x16, 0x0f, 0xdd, 0xed, 0xb8, 0x2e, 0xe7, 0x16, 0xd6, + 0xb8, 0xfa, 0x92, 0x2c, 0x96, 0x80, 0xc0, 0xd3, 0xd8, 0xf7, 0x49, 0x4d, + 0x7e, 0xa8, 0x1c, 0xda, 0x6b, 0x6b, 0x09, 0x3b, 0xec, 0x0d, 0x2e, 0x1a, + 0x18, 0xe2, 0x25, 0x58, 0xa1, 0x9e, 0x95, 0x41, 0xa3, 0x40, 0x02, 0x17, + 0x52, 0xda, 0x7d, 0x06, 0x12, 0xd0, 0xe2, 0xed, 0xc0, 0x3f, 0xb1, 0x6e, + 0xa7, 0x5f, 0x13, 0xd9, 0x59, 0x61, 0x01, 0xa0, 0x78, 0x8e, 0xe9, 0x29, + 0x18, 0x61, 0x7b, 0xa5, 0xc8, 0xa6, 0x2b, 0x64, 0x04, 0xc1, 0xe0, 0x68, + 0x04, 0x38, 0xa1, 0x5c, 0xe7, 0xb5, 0xba, 0x98, 0x00, 0x70, 0x92, 0x9a, + 0xb9, 0x44, 0x9e, 0xfc, 0xa5, 0xd1, 0x70, 0xd9, 0x60, 0x76, 0x7b, 0x46, + 0xe6, 0xdb, 0x2d, 0x0e, 0xf0, 0xd8, 0xe2, 0xd5, 0x5f, 0x32, 0xc7, 0x6c, + 0x73, 0x19, 0xfc, 0xe3, 0xe5, 0xad, 0x8f, 0x12, 0xaf, 0xfd, 0x54, 0xc8, + 0xc7, 0x66, 0x03, 0x71, 0x5c, 0x77, 0x36, 0x36, 0xc7, 0x70, 0xf8, 0x87, + 0x34, 0xf9, 0xa4, 0xa7, 0x72, 0xe6, 0xb7, 0xd1, 0xd8, 0x04, 0xba, 0x34, + 0x43, 0xa7, 0x24, 0x3e, 0xa1, 0x32, 0x5e, 0xdd, 0x1f, 0xf1, 0x53, 0x16, + 0x31, 0xc7, 0x4e, 0x46, 0x84, 0x79, 0xaa, 0x39, 0x16, 0x8c, 0x6b, 0x3d, + 0x58, 0x3b, 0x5d, 0xa5, 0x83, 0xe3, 0xdd, 0x25, 0x36, 0x72, 0x1a, 0x2e, + 0x88, 0x90, 0x0f, 0x72, 0xa8, 0xb9, 0x9e, 0x9b, 0xf7, 0x13, 0x31, 0x00, + 0x8f, 0xe2, 0xac, 0x1c, 0xaa, 0xf7, 0x86, 0x12, 0x03, 0x1d, 0xab, 0x08, + 0x29, 0xad, 0x6d, 0x45, 0xd3, 0x3a, 0xb8, 0x41, 0x3e, 0x20, 0x24, 0xa5, + 0x1c, 0x7a, 0xc8, 0x0f, 0x00, 0x00, 0x62, 0x7e, 0x2a, 0xe5, 0x98, 0xed, + 0xd8, 0x36, 0xea, 0x63, 0x95, 0x52, 0xa8, 0xda, 0x01, 0x93, 0x04, 0x7c, + 0xc2, 0xd0, 0x04, 0x06, 0x69, 0xa9, 0x49, 0x4d, 0x56, 0x00, 0xea, 0xc6, + 0xe6, 0x80, 0xf1, 0xa1, 0x1e, 0x69, 0x3e, 0x82, 0x78, 0xd1, 0x46, 0xc7, + 0x16, 0xd8, 0x48, 0xfc, 0xed, 0x47, 0xc7, 0xba, 0x28, 0xb5, 0xb0, 0x09, + 0xd1, 0x25, 0x22, 0xf4, 0x60, 0xc4, 0x7c, 0x52, 0x15, 0x91, 0x11, 0xa1, + 0xf3, 0x4e, 0xfc, 0xba, 0x5a, 0x75, 0x2a, 0x96, 0x5f, 0x5b, 0xc1, 0xc6, + 0x6c, 0xdb, 0x6b, 0x5b, 0x1e, 0x25, 0x25, 0x37, 0x4d, 0x26, 0xc2, 0x5c, + 0x74, 0x68, 0xfc, 0x53, 0x86, 0xd2, 0xcd, 0x1c, 0x04, 0x78, 0x2e, 0x5b, + 0x33, 0xeb, 0x8d, 0x60, 0x11, 0x8b, 0x53, 0xef, 0x3e, 0x23, 0x41, 0xf8, + 0xac, 0x3b, 0xfe, 0xb3, 0x75, 0x5c, 0xc7, 0x9a, 0xd9, 0xba, 0xaf, 0x16, + 0x81, 0xee, 0xfc, 0x52, 0x53, 0xdf, 0xdb, 0xd4, 0xb0, 0x71, 0x41, 0x73, + 0xde, 0xd6, 0x00, 0xb0, 0xb2, 0x7e, 0xb8, 0xe2, 0x0c, 0x82, 0x71, 0x5a, + 0x6d, 0x00, 0x41, 0x3c, 0x09, 0x2b, 0x97, 0x6e, 0x16, 0x7e, 0x53, 0xa6, + 0xdd, 0xd1, 0xfb, 0xd6, 0x1d, 0xcb, 0x43, 0x1f, 0xa6, 0x51, 0x8a, 0xd2, + 0xe7, 0xbb, 0x7b, 0xdc, 0x3e, 0x8f, 0x29, 0x29, 0x26, 0x7f, 0x5b, 0xea, + 0x1d, 0x40, 0xb3, 0x7e, 0xda, 0xea, 0x69, 0x3b, 0x5a, 0x39, 0xd7, 0xc4, + 0xaa, 0xaf, 0xea, 0x0d, 0xc7, 0x6c, 0xd8, 0x64, 0xf9, 0x15, 0x3c, 0xac, + 0x57, 0x16, 0x7b, 0x5a, 0xe6, 0x11, 0xd8, 0xac, 0x96, 0x61, 0x43, 0xdc, + 0xe7, 0xea, 0xe0, 0xee, 0x4a, 0x4a, 0x76, 0xf1, 0x6e, 0x37, 0x56, 0xeb, + 0x5f, 0xed, 0x24, 0xfb, 0x5b, 0xe4, 0xad, 0xb3, 0x0d, 0xd6, 0x6d, 0x74, + 0xc3, 0xa7, 0x8e, 0xd0, 0xaa, 0xd2, 0x03, 0x18, 0xd6, 0x81, 0xc8, 0x57, + 0xf1, 0xac, 0x7b, 0x59, 0x04, 0x4c, 0x14, 0x94, 0x96, 0x8a, 0xc5, 0x4e, + 0x32, 0x21, 0xde, 0x2b, 0x7f, 0x7f, 0xf9, 0x3f, 0x74, 0xea, 0xb2, 0x31, + 0x18, 0x72, 0xac, 0x05, 0xdf, 0x46, 0x60, 0x2e, 0x8b, 0xec, 0x6d, 0xf4, + 0x3d, 0x3f, 0x24, 0x94, 0xd4, 0xb5, 0xae, 0xdb, 0xbb, 0xb0, 0x54, 0x72, + 0x09, 0xed, 0xf3, 0x2b, 0x5b, 0x28, 0x34, 0x37, 0x9d, 0x0a, 0xcc, 0xbd, + 0xa1, 0xcd, 0x1d, 0xa3, 0x84, 0x94, 0xd1, 0x89, 0x31, 0xf9, 0x16, 0x5f, + 0x5d, 0xb4, 0xb4, 0x51, 0x8e, 0x34, 0x16, 0x3e, 0x4c, 0x72, 0x00, 0xff, + 0x00, 0x6a, 0xd9, 0x15, 0xb8, 0x12, 0x67, 0x93, 0x21, 0x73, 0x9d, 0x62, + 0xed, 0xdd, 0x59, 0x95, 0x8d, 0x45, 0x6d, 0xfc, 0x4a, 0x4a, 0x4a, 0xf1, + 0x2c, 0x6e, 0xe1, 0x11, 0xa0, 0x70, 0xe5, 0x54, 0x78, 0xb9, 0xb6, 0x98, + 0x01, 0xe0, 0x6b, 0x33, 0xaf, 0xf9, 0xaa, 0xe3, 0x48, 0x20, 0x6e, 0xfa, + 0x23, 0xb7, 0x9a, 0xac, 0x59, 0xb9, 0xce, 0x70, 0xe3, 0xcd, 0x25, 0x34, + 0x3a, 0x86, 0x4b, 0xc0, 0x6b, 0x58, 0xd2, 0x2e, 0x77, 0xe6, 0xb7, 0xc1, + 0x66, 0x1b, 0x5f, 0xee, 0x31, 0xef, 0x3f, 0x49, 0x5b, 0xea, 0x39, 0x8f, + 0x07, 0xd3, 0x63, 0x88, 0xed, 0xa1, 0xed, 0xf1, 0x59, 0xd5, 0x87, 0x39, + 0xe0, 0x04, 0x94, 0xc4, 0x93, 0x33, 0xdd, 0x5a, 0x65, 0xce, 0xb2, 0xb0, + 0xce, 0xe1, 0x56, 0x7b, 0x61, 0xe5, 0xbe, 0x6b, 0x7f, 0xa3, 0x7d, 0x51, + 0xea, 0xb9, 0xc1, 0xb7, 0xbc, 0x0c, 0x6a, 0x09, 0xe6, 0xc9, 0x0f, 0x23, + 0xc4, 0x31, 0x25, 0x34, 0xa8, 0xc3, 0x17, 0xbc, 0x54, 0xd3, 0x0e, 0x3d, + 0xe2, 0x57, 0x63, 0xd0, 0xea, 0xb3, 0x0e, 0xb6, 0xd1, 0x6b, 0x8b, 0xda, + 0xc9, 0xd8, 0xe3, 0xc8, 0x1c, 0xc2, 0x25, 0x3d, 0x17, 0x13, 0x01, 0xa1, + 0x94, 0x0d, 0xce, 0xe5, 0xce, 0x3c, 0x92, 0x3c, 0x54, 0x9c, 0x2e, 0xf5, + 0x5a, 0x1a, 0x09, 0x24, 0x81, 0xb5, 0xa0, 0x9e, 0x52, 0x53, 0x51, 0x99, + 0x27, 0xa9, 0x75, 0x13, 0x73, 0xbf, 0x9a, 0xa7, 0xd9, 0x53, 0x41, 0x24, + 0x11, 0xdd, 0xfa, 0xf7, 0xec, 0xb7, 0xea, 0x2c, 0x0d, 0x9e, 0x57, 0x2f, + 0x4b, 0x5f, 0xd3, 0xac, 0x73, 0x1d, 0xf4, 0x03, 0xdc, 0x1a, 0xef, 0x9c, + 0xc1, 0x5b, 0xd8, 0x75, 0x67, 0xe5, 0xb7, 0x7d, 0x15, 0x38, 0x30, 0xeb, + 0xb9, 0xde, 0xd6, 0x9f, 0x84, 0xa4, 0xa6, 0xd0, 0x68, 0x7b, 0xa6, 0x61, + 0x55, 0xea, 0x16, 0x32, 0xa6, 0xf3, 0x2e, 0x2a, 0xf3, 0x7a, 0x56, 0x78, + 0x6e, 0x85, 0x81, 0xdf, 0x1f, 0xf6, 0x2a, 0x39, 0x9d, 0x23, 0xa9, 0x06, + 0x38, 0xfa, 0x7e, 0xab, 0x80, 0x30, 0x1a, 0x66, 0x52, 0x53, 0xc7, 0xf5, + 0x4e, 0xa3, 0x93, 0xfb, 0x42, 0xa6, 0x63, 0x02, 0xe3, 0x43, 0xb7, 0x98, + 0xee, 0xef, 0xdd, 0xfb, 0x96, 0x83, 0x59, 0x9a, 0xf7, 0xfd, 0xb2, 0x8a, + 0x5d, 0x8b, 0x6b, 0xe3, 0x7c, 0xb8, 0x6c, 0x3f, 0x24, 0x7e, 0x9f, 0xd1, + 0x32, 0x83, 0xc9, 0x7d, 0x0f, 0xf5, 0x89, 0x25, 0xdb, 0xc4, 0x09, 0x3e, + 0x24, 0xae, 0x8e, 0x9e, 0x9a, 0xca, 0x83, 0x5d, 0x91, 0x16, 0xb8, 0x11, + 0xb5, 0x83, 0xe8, 0x37, 0xe5, 0xdd, 0x25, 0x39, 0x14, 0x5d, 0xd7, 0xad, + 0xfa, 0x34, 0x8b, 0x88, 0x1f, 0xce, 0x02, 0x5b, 0x3f, 0x33, 0xa1, 0x56, + 0x0e, 0x37, 0xd6, 0x3b, 0xa1, 0xaf, 0x65, 0x2d, 0x6f, 0xf2, 0x9c, 0x49, + 0xfc, 0x02, 0xdb, 0x73, 0xc8, 0x21, 0xa3, 0x46, 0xf6, 0x00, 0x78, 0x22, + 0x6f, 0x1e, 0x09, 0x29, 0xe7, 0xd9, 0xd2, 0xfa, 0x9b, 0x3d, 0xbe, 0x93, + 0x1e, 0xd9, 0xd4, 0x07, 0x8d, 0x3e, 0x1b, 0xa1, 0x58, 0x14, 0x75, 0x76, + 0xff, 0x00, 0xda, 0x60, 0x40, 0xd1, 0xb1, 0x63, 0x78, 0x5a, 0xc2, 0xe6, + 0x06, 0xce, 0xe0, 0x02, 0x0b, 0x33, 0x2b, 0x04, 0xb9, 0xc7, 0x69, 0x9d, + 0x40, 0x33, 0x29, 0x29, 0xca, 0xb6, 0xfe, 0xab, 0x50, 0x1b, 0x70, 0x2e, + 0x77, 0x69, 0x6e, 0xd7, 0x0f, 0xc1, 0xca, 0x14, 0xe7, 0x75, 0xb7, 0xbb, + 0x6f, 0xa4, 0xca, 0xcf, 0x66, 0xd8, 0x48, 0x3f, 0x74, 0x2d, 0x5b, 0x7e, + 0xb0, 0x60, 0x52, 0xed, 0x8e, 0xb0, 0x7a, 0x87, 0x86, 0x37, 0xdc, 0x7e, + 0xe0, 0x89, 0x5f, 0x51, 0xc6, 0xcb, 0x67, 0xe9, 0x69, 0x7e, 0xc3, 0xdd, + 0xcc, 0x30, 0x92, 0x9c, 0x8b, 0x07, 0x5f, 0x27, 0x70, 0xaa, 0xa2, 0x07, + 0x21, 0xae, 0x33, 0xf2, 0x98, 0x50, 0xa3, 0xf4, 0xef, 0xf4, 0x73, 0x6d, + 0xca, 0xa2, 0xd2, 0x60, 0xb8, 0x30, 0x31, 0xa3, 0xe0, 0x48, 0x74, 0xad, + 0xa7, 0x62, 0x92, 0x3d, 0x6c, 0x17, 0x8b, 0x1b, 0xde, 0xa7, 0x1f, 0xfa, + 0x93, 0xdb, 0xe6, 0x9a, 0xbb, 0xaa, 0xc9, 0x6b, 0xaa, 0xb1, 0xbb, 0x2c, + 0x1a, 0x39, 0x8e, 0x10, 0xe0, 0x52, 0x53, 0xcd, 0x75, 0x0f, 0xab, 0xfd, + 0x56, 0x87, 0xfa, 0xb5, 0xe4, 0xbf, 0x3b, 0x1c, 0x6a, 0x5b, 0x3b, 0x2c, + 0x03, 0xe0, 0xdd, 0x0f, 0xc9, 0x4b, 0x1f, 0xea, 0xff, 0x00, 0x4a, 0xea, + 0x55, 0x02, 0xe6, 0x96, 0x59, 0xfb, 0xc0, 0xfb, 0x81, 0xf9, 0xae, 0xa6, + 0xa7, 0xc4, 0x31, 0xc7, 0x50, 0xb3, 0xf3, 0xba, 0x55, 0xa2, 0xf7, 0x66, + 0xf4, 0xf7, 0x6d, 0x71, 0xd6, 0xca, 0x7b, 0x38, 0xf8, 0x84, 0x94, 0xe0, + 0xfe, 0xc6, 0xbb, 0xa3, 0xda, 0x0d, 0xed, 0x17, 0x61, 0x3f, 0x4f, 0x59, + 0xa3, 0xe8, 0x4f, 0x1b, 0xc7, 0x65, 0xac, 0xde, 0x91, 0xd3, 0xf2, 0xc8, + 0x8a, 0xda, 0xe3, 0x12, 0x0c, 0x05, 0x7b, 0x0b, 0x3f, 0xd4, 0xaf, 0x65, + 0xc2, 0x47, 0x0e, 0x69, 0x1f, 0x81, 0x95, 0x57, 0x2b, 0xa5, 0x64, 0x51, + 0x67, 0xda, 0xfa, 0x35, 0x92, 0x00, 0xf7, 0x62, 0x3c, 0xfb, 0x4f, 0xf5, + 0x0f, 0x6f, 0x82, 0x4a, 0x61, 0x95, 0xf5, 0x67, 0x1b, 0x23, 0x1d, 0xd5, + 0x35, 0xee, 0xc6, 0x7f, 0xe6, 0x5d, 0x59, 0x88, 0x3e, 0x63, 0xb8, 0x47, + 0xe9, 0xfd, 0x1f, 0x07, 0xa6, 0x52, 0x03, 0x8b, 0x6c, 0xb6, 0x35, 0xb0, + 0x92, 0xe7, 0x1f, 0x39, 0x72, 0x16, 0x2f, 0x5a, 0x17, 0x8f, 0x43, 0x29, + 0xa6, 0x8b, 0xf5, 0x0e, 0xad, 0xfa, 0x19, 0x1e, 0x08, 0x7d, 0x45, 0x96, + 0xbb, 0x68, 0x61, 0x3b, 0x0e, 0x84, 0xf8, 0x04, 0x94, 0xd5, 0xeb, 0x46, + 0xa3, 0x69, 0xb6, 0x92, 0x3d, 0xda, 0x3c, 0x01, 0xf8, 0xac, 0x1b, 0xea, + 0x1e, 0x96, 0x83, 0x92, 0xb5, 0xec, 0xc1, 0xc8, 0x1a, 0xbb, 0x50, 0xaa, + 0xe5, 0x63, 0x9a, 0xf1, 0xd8, 0x22, 0x1d, 0x32, 0x92, 0x98, 0x57, 0x5b, + 0xfd, 0xae, 0x6b, 0x87, 0xb4, 0x0d, 0x15, 0x86, 0x17, 0x1f, 0xa2, 0xef, + 0x79, 0xfc, 0xd4, 0xec, 0xa7, 0x71, 0x68, 0x6b, 0x65, 0xc4, 0x49, 0x29, + 0x9c, 0xd8, 0xc9, 0x68, 0x1a, 0x39, 0xbc, 0xa4, 0xa7, 0x5b, 0xa5, 0x56, + 0xe6, 0x6d, 0x6b, 0xf9, 0x26, 0x4a, 0xe9, 0x67, 0xb7, 0xf2, 0x26, 0x3e, + 0x6b, 0x23, 0xa6, 0xb0, 0xbc, 0x34, 0xf7, 0x5a, 0x7b, 0xff, 0x00, 0x5b, + 0xf4, 0x7b, 0xfa, 0x5f, 0xc5, 0x25, 0x21, 0xc8, 0x63, 0x9e, 0x08, 0xf1, + 0x59, 0xb7, 0x35, 0xc2, 0x5b, 0xc9, 0x1c, 0x2d, 0xab, 0x62, 0x26, 0x27, + 0xc7, 0xc5, 0x52, 0x7d, 0x00, 0xb8, 0x3c, 0x80, 0x27, 0xc3, 0x94, 0x94, + 0xe6, 0xbd, 0x8e, 0xd8, 0xed, 0xde, 0xdd, 0x3b, 0x2e, 0x2a, 0xcf, 0xd3, + 0x75, 0x7b, 0x9c, 0x4e, 0x81, 0xd1, 0x3f, 0x05, 0xe8, 0x39, 0x34, 0x0f, + 0x49, 0xc0, 0xce, 0x83, 0xba, 0xf3, 0xc6, 0x07, 0x55, 0x91, 0x73, 0x87, + 0x0e, 0x79, 0x92, 0x3b, 0x6a, 0x92, 0x9d, 0x47, 0x35, 0xa1, 0x90, 0x08, + 0x33, 0xca, 0xa1, 0xd4, 0xf3, 0x59, 0x87, 0x4f, 0xa4, 0xc3, 0x37, 0x59, + 0xa8, 0x03, 0xb0, 0xf1, 0x51, 0xc8, 0xcc, 0x14, 0x30, 0xbd, 0xb2, 0xfb, + 0x4f, 0xd1, 0x6f, 0x82, 0x17, 0x4e, 0xe9, 0xdf, 0x6a, 0x79, 0xca, 0xcd, + 0x3b, 0xdc, 0xee, 0x18, 0x52, 0x53, 0x89, 0x0e, 0x7d, 0xbf, 0xa4, 0x92, + 0x49, 0xd5, 0x6d, 0xf4, 0xef, 0xab, 0xfd, 0x43, 0xa8, 0x34, 0xbf, 0x0a, + 0x92, 0xea, 0xdb, 0xa3, 0xac, 0x3e, 0xd6, 0xfd, 0xe5, 0x76, 0x3d, 0x2b, + 0x17, 0x0e, 0xa6, 0x86, 0x0a, 0x58, 0x7d, 0x48, 0x12, 0x06, 0xab, 0x7d, + 0xcd, 0xa7, 0x16, 0x96, 0xd0, 0xc0, 0xda, 0x99, 0xc0, 0x0d, 0xd0, 0x7e, + 0x09, 0x29, 0xc1, 0xe8, 0x3f, 0x55, 0x71, 0xba, 0x6b, 0x3d, 0x7b, 0xeb, + 0x6d, 0xd9, 0x8e, 0x32, 0x6d, 0x70, 0x90, 0xc1, 0xe0, 0xc9, 0xfc, 0xab, + 0x57, 0x21, 0xc5, 0xb7, 0x06, 0xf0, 0x1e, 0x22, 0x7f, 0x95, 0xe6, 0xae, + 0x3e, 0xfa, 0xe9, 0xab, 0xdf, 0xa9, 0x02, 0x00, 0x1a, 0x92, 0xb2, 0xf2, + 0xf2, 0xea, 0xb1, 0x81, 0x80, 0x1d, 0xee, 0x30, 0xe0, 0x92, 0x91, 0xde, + 0x6d, 0xa4, 0x12, 0x6a, 0x0e, 0x6f, 0x72, 0xc3, 0x0e, 0x8f, 0x83, 0x95, + 0x5a, 0xb2, 0xb7, 0x58, 0xd7, 0x63, 0x38, 0xee, 0x04, 0x68, 0x39, 0xe7, + 0xb8, 0x57, 0x31, 0xf0, 0xf2, 0xb3, 0x6a, 0x26, 0xd7, 0xed, 0xa4, 0x18, + 0x16, 0x11, 0xab, 0x80, 0xf0, 0xf1, 0x5a, 0x38, 0xdd, 0x37, 0x1a, 0x8f, + 0x75, 0x6c, 0x9b, 0x0f, 0x36, 0x3b, 0x57, 0x14, 0x94, 0xe7, 0x61, 0x74, + 0x5f, 0x57, 0x3a, 0xcc, 0xdc, 0xf0, 0x1e, 0xe7, 0x39, 0xc6, 0xaa, 0x07, + 0xd0, 0xad, 0xb3, 0x23, 0x77, 0x8b, 0x97, 0x40, 0x0c, 0x08, 0x1a, 0x0e, + 0xc1, 0x35, 0x75, 0x86, 0x0f, 0x3e, 0xe5, 0x38, 0x12, 0xe3, 0xe4, 0x92, + 0x97, 0x09, 0xc1, 0x4a, 0x13, 0xa4, 0xa5, 0x10, 0x0f, 0x2a, 0x22, 0xb6, + 0x9e, 0xca, 0x49, 0x24, 0xa4, 0x4e, 0xa8, 0x12, 0x83, 0x63, 0x68, 0x63, + 0x98, 0xcb, 0x23, 0x75, 0x86, 0x1a, 0x3b, 0x98, 0x56, 0xd0, 0x6d, 0xc5, + 0xaa, 0xe7, 0x07, 0xbc, 0x7b, 0x99, 0xf4, 0x1c, 0x39, 0x6c, 0xf8, 0x24, + 0xa6, 0xad, 0x9d, 0x2f, 0x0a, 0xd0, 0x7d, 0x4a, 0x5b, 0x60, 0xf0, 0x74, + 0x91, 0xf9, 0x50, 0x3f, 0x60, 0xf4, 0xad, 0xc4, 0x8c, 0x7d, 0xb3, 0xcb, + 0x43, 0x9c, 0x07, 0xdc, 0x1c, 0xad, 0xb1, 0xb9, 0x58, 0xce, 0x8b, 0x0f, + 0xad, 0x4f, 0x67, 0xf0, 0xf6, 0xff, 0x00, 0x58, 0x77, 0x56, 0x46, 0xc7, + 0x8d, 0x12, 0x53, 0x9b, 0x4f, 0x44, 0xe9, 0x54, 0x3f, 0xd4, 0xab, 0x19, + 0xad, 0x79, 0xef, 0xa9, 0xfc, 0xa5, 0x5d, 0x6d, 0x6d, 0x6f, 0x02, 0x21, + 0x49, 0xde, 0xcf, 0xa5, 0xc7, 0x8a, 0x98, 0x00, 0x8d, 0x12, 0x53, 0x5e, + 0xcc, 0x70, 0x5d, 0xea, 0xd4, 0x76, 0x5b, 0xe3, 0xd9, 0xde, 0x4e, 0x0a, + 0xa6, 0x4e, 0x0f, 0xdb, 0xd9, 0xb8, 0x38, 0xe3, 0xe6, 0xd5, 0xa3, 0x6c, + 0x6f, 0x23, 0xc0, 0x3b, 0xf7, 0x9a, 0x56, 0x98, 0x6a, 0x85, 0x95, 0x93, + 0xef, 0x64, 0x0b, 0x1b, 0xc1, 0xf1, 0x1e, 0x05, 0x25, 0x3c, 0xfe, 0x37, + 0xed, 0x09, 0x35, 0xe4, 0xb7, 0xf4, 0x8c, 0x3b, 0x4b, 0x9b, 0xde, 0x3b, + 0xad, 0x4c, 0x52, 0xf8, 0x2d, 0x77, 0x2d, 0x46, 0x17, 0x52, 0xf0, 0x4b, + 0xa1, 0xaf, 0x1a, 0x39, 0xa7, 0x90, 0x54, 0x2f, 0xba, 0x9c, 0x5a, 0x8d, + 0x8e, 0xfa, 0x4e, 0xd0, 0x34, 0x72, 0x4f, 0x82, 0x4a, 0x47, 0x7d, 0x38, + 0xce, 0xb6, 0x01, 0xdb, 0x7b, 0xc7, 0x03, 0xf3, 0xbe, 0x2a, 0x96, 0xfc, + 0x9c, 0x77, 0x1d, 0xbc, 0x0d, 0x08, 0x2a, 0xc6, 0x0d, 0x17, 0x3a, 0xc7, + 0x65, 0x5a, 0x3d, 0xee, 0xe0, 0x78, 0x0f, 0x05, 0x66, 0xda, 0xab, 0x79, + 0x9d, 0x37, 0x1d, 0x08, 0x3e, 0x29, 0x29, 0xcc, 0xc9, 0xa7, 0x0b, 0xaa, + 0xd7, 0xb6, 0xef, 0x65, 0xc3, 0xe8, 0xd8, 0xd3, 0x0f, 0x69, 0x54, 0xeb, + 0xb7, 0x2f, 0xa6, 0xb8, 0x53, 0x9e, 0x3d, 0x4a, 0x26, 0x2b, 0xca, 0x68, + 0xf6, 0x9f, 0x27, 0x8f, 0xcd, 0x2b, 0x5a, 0xdc, 0x2a, 0xdd, 0xee, 0xd1, + 0xae, 0x1c, 0x10, 0xa5, 0x5d, 0x6e, 0xd8, 0x6b, 0xb4, 0x0b, 0x18, 0xe1, + 0x04, 0x1d, 0x41, 0x07, 0xc5, 0x25, 0x20, 0x01, 0x96, 0x06, 0xc1, 0x05, + 0xae, 0xe1, 0x63, 0x75, 0x6a, 0xa2, 0xd8, 0xec, 0x16, 0xbd, 0xb8, 0x16, + 0x60, 0x7e, 0x9f, 0x0c, 0x1b, 0x31, 0xf9, 0x75, 0x1c, 0x96, 0x79, 0xb2, + 0x7b, 0x2c, 0xec, 0xe2, 0xdb, 0xef, 0x2f, 0x1c, 0x13, 0xf8, 0x24, 0xa4, + 0x55, 0x63, 0xb8, 0xd6, 0x20, 0xec, 0x31, 0xf4, 0x95, 0x40, 0x1d, 0xf6, + 0xb8, 0x82, 0xe8, 0x30, 0x1c, 0xae, 0x5a, 0xd9, 0xd0, 0x02, 0xd0, 0xd1, + 0xf2, 0x2a, 0xf7, 0x4b, 0xc4, 0xae, 0xd8, 0x76, 0x84, 0xa4, 0xa7, 0x5b, + 0xa6, 0x53, 0xb6, 0xb0, 0x48, 0x88, 0x0a, 0xa7, 0xda, 0x2d, 0xff, 0x00, + 0x9d, 0xdf, 0x65, 0xd7, 0xd3, 0xfb, 0x1f, 0xa9, 0xe5, 0xf4, 0xa2, 0x56, + 0xcd, 0x6c, 0x0c, 0x60, 0x68, 0xec, 0x9b, 0xd1, 0xab, 0xd6, 0xf5, 0xf6, + 0x0f, 0x5b, 0x6e, 0xcd, 0xf1, 0xae, 0xd9, 0xdd, 0xb6, 0x7c, 0x25, 0x25, + 0x3f, 0xff, 0xd9 +}; +size_t demo_001_jpg_len = 18375; + +const uint8_t demo_002_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x34, 0x00, 0x37, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xe4, 0x98, 0x18, 0x46, 0xe2, 0xc1, 0x1f, 0x04, 0x4f, + 0x42, 0x98, 0x00, 0xb5, 0xa3, 0xce, 0x13, 0xed, 0xed, 0x32, 0xa4, 0x5a, + 0xdf, 0xce, 0x3f, 0x24, 0x94, 0x88, 0xb7, 0x15, 0xae, 0x82, 0x1b, 0x03, + 0xcb, 0xfd, 0x89, 0xc5, 0x58, 0xee, 0x98, 0x63, 0x75, 0xf2, 0xff, 0x00, + 0x62, 0x99, 0x6b, 0x65, 0x28, 0x06, 0x07, 0x1e, 0x32, 0x92, 0x98, 0x7a, + 0x34, 0x03, 0x06, 0xb1, 0xf1, 0x84, 0x8d, 0x38, 0xdd, 0x98, 0x11, 0x0e, + 0xde, 0xe5, 0x36, 0x9e, 0x29, 0x29, 0x08, 0x66, 0x39, 0xe6, 0xa8, 0x6f, + 0x67, 0x24, 0xea, 0xf1, 0xe3, 0x46, 0x6b, 0xf1, 0x28, 0xa1, 0xfb, 0x19, + 0x65, 0x64, 0x48, 0x7e, 0xbf, 0x34, 0x32, 0xe6, 0xc7, 0x74, 0x94, 0x84, + 0xb6, 0xbf, 0xdd, 0x8f, 0x99, 0xfe, 0xf4, 0x37, 0x00, 0x78, 0x9f, 0xbc, + 0xa3, 0x17, 0x0e, 0x23, 0x44, 0xd2, 0xde, 0x7b, 0x77, 0x49, 0x48, 0x58, + 0xd7, 0xd8, 0xed, 0xad, 0x92, 0x7e, 0x25, 0x5a, 0xa7, 0x1e, 0xb1, 0x2c, + 0xb6, 0x4b, 0xfb, 0xea, 0x44, 0x28, 0x57, 0x5b, 0xea, 0xb3, 0x79, 0x1e, + 0xce, 0x49, 0x02, 0x74, 0x47, 0x6d, 0xed, 0xaf, 0x7d, 0x85, 0xd2, 0xdd, + 0x35, 0xee, 0x52, 0x52, 0x23, 0x4b, 0x1b, 0x68, 0x02, 0x79, 0x10, 0x64, + 0xae, 0x8d, 0x94, 0x8b, 0x00, 0x69, 0xe3, 0x8f, 0xc0, 0xae, 0x6d, 0xb6, + 0x9b, 0xf2, 0x1a, 0xee, 0xdb, 0x84, 0x0f, 0x20, 0xba, 0xe6, 0x56, 0xe1, + 0x58, 0xb2, 0x43, 0x20, 0x80, 0x67, 0xbf, 0x60, 0x92, 0x9c, 0xde, 0xa6, + 0xcb, 0x06, 0x09, 0x63, 0x80, 0xd9, 0x20, 0xb4, 0xce, 0xb0, 0x42, 0xe5, + 0x6e, 0x11, 0x6b, 0x87, 0x81, 0x5d, 0x87, 0x5c, 0x04, 0x63, 0xfa, 0x7f, + 0xcb, 0x6f, 0xfd, 0xf9, 0x72, 0x19, 0x02, 0x2f, 0x78, 0xf3, 0x29, 0x29, + 0x1a, 0x49, 0x24, 0x92, 0x94, 0x92, 0x49, 0x24, 0xa5, 0x24, 0x92, 0x49, + 0x29, 0x49, 0x24, 0x92, 0x4a, 0x52, 0x49, 0x24, 0x92, 0x9d, 0x4e, 0x90, + 0x76, 0x9d, 0xc0, 0x49, 0x21, 0xc3, 0xf2, 0x2d, 0x10, 0xf3, 0xab, 0x5c, + 0x0c, 0xfd, 0xd0, 0xaa, 0xf4, 0x40, 0x5a, 0xcd, 0xe1, 0xbb, 0x89, 0xdc, + 0x3e, 0x1a, 0x8d, 0x56, 0x8d, 0xb4, 0x96, 0x43, 0x89, 0x9f, 0x12, 0x92, + 0x9c, 0x8c, 0xaa, 0x98, 0xeb, 0x9c, 0x48, 0xfc, 0x4a, 0x17, 0xa3, 0x5f, + 0x81, 0xfb, 0xca, 0xb3, 0x94, 0x22, 0xe7, 0x0e, 0x62, 0x10, 0xbe, 0x09, + 0x29, 0x80, 0xa2, 0xb3, 0xe3, 0xf7, 0x94, 0xbd, 0x0a, 0xfb, 0x13, 0xf7, + 0x95, 0x28, 0x4e, 0x20, 0xf0, 0x92, 0x98, 0x9a, 0x19, 0xd8, 0xbb, 0xef, + 0x4c, 0x71, 0xda, 0x1b, 0x3b, 0x8f, 0xde, 0x88, 0x9b, 0x43, 0xdd, 0x25, + 0x23, 0xf4, 0x07, 0x89, 0xfb, 0xd3, 0x1a, 0x23, 0xf3, 0x8f, 0x97, 0x08, + 0xba, 0xf7, 0xe3, 0xb1, 0x4d, 0x27, 0xc5, 0x25, 0x23, 0xf4, 0x3f, 0x94, + 0x7f, 0x04, 0xde, 0x83, 0xbf, 0x78, 0xfe, 0x08, 0xa1, 0xc4, 0x19, 0x94, + 0xa4, 0xf8, 0xa4, 0xa4, 0xdb, 0x72, 0x4b, 0x60, 0x52, 0xef, 0x8c, 0x0f, + 0xef, 0x51, 0xf4, 0xae, 0x3a, 0x9a, 0xac, 0x9f, 0x92, 0xdc, 0x01, 0xa3, + 0x95, 0x0b, 0x40, 0x0d, 0xd3, 0xef, 0x94, 0x94, 0xe3, 0x0a, 0x2f, 0xff, + 0x00, 0x47, 0x69, 0xfb, 0x92, 0xf4, 0xed, 0x1c, 0xd4, 0xf9, 0xf3, 0x5a, + 0x75, 0x3e, 0x49, 0x04, 0xeb, 0xe6, 0x54, 0x6e, 0x30, 0x67, 0xe6, 0x61, + 0x25, 0x39, 0x8e, 0xaf, 0x22, 0x49, 0xd8, 0xf1, 0x3e, 0x49, 0x0f, 0x5a, + 0x3e, 0x83, 0xbf, 0xcd, 0x56, 0x28, 0xb6, 0xcc, 0x8c, 0x9d, 0xa0, 0x0f, + 0x49, 0xbc, 0xf9, 0xad, 0x4f, 0x4c, 0x06, 0xfb, 0x5a, 0x07, 0x64, 0x94, + 0xe1, 0x96, 0xda, 0x7f, 0xc1, 0xbf, 0xfc, 0xd2, 0x9b, 0x65, 0x91, 0xfc, + 0xdb, 0xff, 0x00, 0xcd, 0x2b, 0x67, 0xd2, 0xda, 0x46, 0xe2, 0x00, 0xec, + 0x9c, 0x30, 0x4f, 0xb9, 0x25, 0x38, 0x8e, 0x63, 0xb4, 0xf6, 0x3b, 0xe3, + 0xb5, 0xca, 0x22, 0xbf, 0xe4, 0x3f, 0xfc, 0xd7, 0x7f, 0x72, 0xe8, 0x4b, + 0x2b, 0x00, 0x1d, 0xb0, 0x42, 0x11, 0x68, 0x07, 0x50, 0x00, 0xec, 0x92, + 0x9c, 0xa6, 0xdc, 0x1a, 0x20, 0xb5, 0xd1, 0xc4, 0x6d, 0x33, 0xf9, 0x14, + 0x6c, 0x65, 0x2f, 0x97, 0x16, 0x99, 0x3d, 0xf6, 0x9f, 0xee, 0x5a, 0xc0, + 0x01, 0xa0, 0xf9, 0xa9, 0x08, 0x00, 0xc3, 0x74, 0x09, 0x29, 0xc5, 0xa9, + 0x95, 0xd7, 0x63, 0x75, 0x23, 0xdc, 0x39, 0x69, 0x1d, 0xfe, 0x0b, 0xb5, + 0x14, 0x97, 0xd2, 0xe6, 0x91, 0x20, 0xc1, 0x8f, 0x86, 0xab, 0x9f, 0xba, + 0xce, 0x00, 0x3d, 0xc7, 0xe5, 0x5d, 0x46, 0x3b, 0x5c, 0x5a, 0x5a, 0x34, + 0xd0, 0xeb, 0xf2, 0x49, 0x4e, 0x37, 0x5b, 0x05, 0xd8, 0xb5, 0xbc, 0x0f, + 0xa5, 0x63, 0x7f, 0x21, 0x5c, 0x6e, 0x58, 0x2d, 0xca, 0xb4, 0x1e, 0x43, + 0x8a, 0xed, 0xfa, 0xa5, 0x66, 0xd6, 0x63, 0x63, 0xcf, 0xe9, 0x1c, 0xe6, + 0x41, 0xed, 0x30, 0x57, 0x1b, 0xd5, 0x6a, 0x75, 0x3d, 0x4b, 0x26, 0xa7, + 0x10, 0x5c, 0xc7, 0x90, 0x48, 0xe1, 0x25, 0x35, 0x12, 0x49, 0x24, 0x94, + 0xa4, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, 0x49, 0x24, 0x92, + 0x52, 0x92, 0x49, 0x24, 0x94, 0xf4, 0x3f, 0x57, 0xd9, 0x34, 0x6e, 0xe0, + 0x80, 0xf8, 0xfc, 0x16, 0xab, 0xab, 0x69, 0x6b, 0x77, 0x6b, 0xc2, 0xa3, + 0xf5, 0x76, 0xb0, 0xfc, 0x31, 0x3a, 0x6a, 0xe3, 0xf8, 0x85, 0xa9, 0x7d, + 0x60, 0xb0, 0x47, 0x22, 0x00, 0x3f, 0x24, 0x94, 0xf3, 0xb9, 0xdb, 0xce, + 0x4b, 0xdc, 0x1a, 0x43, 0x01, 0xdb, 0xc1, 0x3c, 0x68, 0xab, 0x3c, 0xb8, + 0x8f, 0xa2, 0xe1, 0xe5, 0xb5, 0xca, 0xe7, 0x54, 0xb2, 0xc6, 0x66, 0x3a, + 0xb0, 0x7d, 0xbe, 0xd3, 0x1d, 0xa6, 0x10, 0x01, 0x76, 0xd9, 0xd7, 0x54, + 0x94, 0x88, 0x3c, 0x40, 0x99, 0xfb, 0x8f, 0xf7, 0x27, 0x16, 0xb0, 0x1d, + 0x5d, 0xf8, 0x14, 0x56, 0x38, 0x03, 0x2e, 0x6e, 0xbf, 0x18, 0x4e, 0xfa, + 0x58, 0x61, 0xcd, 0xd3, 0xe2, 0x92, 0x90, 0x1b, 0x6b, 0x07, 0xe9, 0x0f, + 0x9c, 0xa6, 0x16, 0xd5, 0x11, 0xbc, 0x04, 0x43, 0x5b, 0x8f, 0x6f, 0x9f, + 0x75, 0x03, 0xea, 0x0e, 0x35, 0x49, 0x4b, 0x7a, 0xd5, 0xfe, 0xf8, 0x3f, + 0x12, 0x9c, 0x5b, 0x57, 0xef, 0x37, 0xef, 0x4b, 0x52, 0x75, 0x10, 0xac, + 0x57, 0x53, 0x03, 0x01, 0x73, 0x41, 0x3e, 0x30, 0x12, 0x53, 0x5f, 0xd4, + 0xa8, 0xfe, 0x73, 0x47, 0xcc, 0x26, 0xdf, 0x57, 0xef, 0x0f, 0xbc, 0x29, + 0x8a, 0x01, 0xb3, 0x76, 0xd0, 0x5b, 0xe0, 0xac, 0x7a, 0x54, 0xec, 0xfa, + 0x29, 0x29, 0xd6, 0xb2, 0x4d, 0x91, 0x06, 0x13, 0x58, 0x34, 0x20, 0xf7, + 0xe1, 0x67, 0x32, 0xee, 0xa9, 0x64, 0xef, 0x7b, 0x5a, 0xe0, 0x78, 0xf4, + 0xc7, 0xf0, 0x46, 0x73, 0x73, 0xda, 0xc0, 0x4d, 0xed, 0x3e, 0x42, 0xb1, + 0x13, 0xf7, 0xa4, 0xa6, 0x74, 0xfb, 0x2c, 0x20, 0x81, 0x07, 0xc5, 0x36, + 0x5c, 0xfa, 0x6e, 0x00, 0xeb, 0x1a, 0xf9, 0xaa, 0xbe, 0xb6, 0x63, 0x49, + 0xf7, 0xb4, 0xcf, 0x8b, 0x27, 0xf8, 0xa8, 0x3a, 0xcc, 0xb7, 0x03, 0x2e, + 0x6c, 0x1e, 0x4e, 0xcf, 0xf6, 0xa4, 0xa6, 0xde, 0x13, 0xf1, 0xe9, 0xa8, + 0x17, 0xb8, 0x31, 0xc7, 0xb7, 0x8a, 0xd3, 0x63, 0x98, 0xf6, 0xee, 0x69, + 0x99, 0xf9, 0xac, 0x16, 0xb7, 0x2e, 0x61, 0x8e, 0x69, 0xf2, 0xda, 0x3f, + 0x8a, 0xb3, 0x41, 0xce, 0x6c, 0x6c, 0x2c, 0x6c, 0xfe, 0x6e, 0xc3, 0xfd, + 0xe9, 0x29, 0xd2, 0xb0, 0x37, 0xf3, 0xb8, 0xe5, 0x44, 0x01, 0xc8, 0x41, + 0x35, 0xe7, 0xf0, 0x5f, 0x51, 0x27, 0xf9, 0x2e, 0xff, 0x00, 0xc9, 0x27, + 0x15, 0xe7, 0xc7, 0xd2, 0xa8, 0x7f, 0x65, 0xff, 0x00, 0xf9, 0x24, 0x94, + 0xd8, 0x03, 0x73, 0x7f, 0x04, 0x22, 0xce, 0xc5, 0x0f, 0xfc, 0xa0, 0xce, + 0x45, 0x31, 0xf0, 0x7f, 0xfe, 0x49, 0x39, 0xb7, 0x35, 0xd0, 0xdd, 0xb5, + 0x99, 0xf0, 0x0f, 0x1f, 0xc5, 0x25, 0x2b, 0xd3, 0x93, 0xed, 0x33, 0x07, + 0x59, 0xec, 0xa6, 0x18, 0x75, 0xd7, 0xe4, 0x50, 0xdd, 0x66, 0x63, 0x01, + 0x86, 0xd6, 0x5c, 0x01, 0x96, 0xcb, 0xa6, 0x07, 0x72, 0x82, 0xcb, 0xf3, + 0xad, 0x67, 0xa8, 0xda, 0x99, 0x1e, 0x65, 0xdf, 0xdc, 0x92, 0x99, 0x5e, + 0xd9, 0x70, 0x24, 0xf7, 0x1f, 0x95, 0x75, 0xb8, 0xb1, 0x12, 0x74, 0x1f, + 0xec, 0x5c, 0x7b, 0x06, 0x55, 0xcf, 0x12, 0x18, 0x35, 0xd6, 0x5c, 0xe1, + 0xfc, 0x17, 0x61, 0x4e, 0x95, 0xfc, 0x52, 0x53, 0x89, 0xd4, 0xae, 0x0c, + 0xbe, 0x97, 0x91, 0x3b, 0x2d, 0x68, 0x8f, 0x1d, 0xbb, 0x97, 0x21, 0xd6, + 0x1e, 0xdb, 0x3a, 0xa6, 0x4b, 0xd8, 0x08, 0x6b, 0xac, 0x24, 0x02, 0xba, + 0xce, 0xb2, 0xd7, 0xb2, 0xe0, 0x23, 0x4d, 0xec, 0x77, 0xdf, 0xb9, 0x71, + 0xf9, 0xff, 0x00, 0xd3, 0x2e, 0xfe, 0xb9, 0x49, 0x4d, 0x74, 0x92, 0x49, + 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, + 0x24, 0x94, 0xa4, 0x92, 0x49, 0x25, 0x3d, 0x77, 0xd5, 0xb6, 0x6e, 0xc0, + 0x6f, 0x6f, 0xa7, 0xf9, 0x42, 0xd5, 0xb9, 0x90, 0x01, 0xf1, 0xe4, 0x2c, + 0xef, 0xab, 0x5a, 0x74, 0xfa, 0xbf, 0x94, 0x5e, 0x3f, 0x15, 0xb1, 0x7b, + 0x7d, 0xa0, 0x69, 0xf0, 0x49, 0x4f, 0x29, 0xd5, 0x58, 0x5f, 0x9e, 0xfd, + 0xa0, 0x98, 0x0d, 0xe3, 0xb6, 0x88, 0x4c, 0xa5, 0xd1, 0xa8, 0xd3, 0xe0, + 0xac, 0xf5, 0x26, 0x5b, 0xfb, 0x41, 0xc1, 0x8f, 0xda, 0x5c, 0x07, 0x03, + 0xc9, 0x41, 0x98, 0x79, 0x44, 0x97, 0x7a, 0xa2, 0x23, 0xb8, 0x3f, 0xde, + 0x92, 0x98, 0xb6, 0xa6, 0xf0, 0x44, 0xfc, 0x94, 0xc5, 0x40, 0x0d, 0x1a, + 0x63, 0xcd, 0x23, 0x8d, 0x93, 0x31, 0xea, 0x00, 0x07, 0x06, 0x21, 0x07, + 0xec, 0xe4, 0xb8, 0x87, 0xe4, 0xb5, 0xce, 0x1f, 0x9a, 0x5d, 0xcf, 0xe2, + 0x92, 0x99, 0x3a, 0xb1, 0x32, 0x1a, 0x7f, 0x2a, 0x1b, 0x81, 0x27, 0x88, + 0x56, 0x86, 0x26, 0x4b, 0x84, 0x07, 0x34, 0x0f, 0x11, 0x2a, 0x36, 0x61, + 0x64, 0xed, 0xd4, 0xb3, 0xef, 0x29, 0x29, 0xa6, 0xe6, 0xc9, 0x11, 0xa2, + 0x33, 0x24, 0xb7, 0x4d, 0x74, 0x85, 0x30, 0xd7, 0xfa, 0x7e, 0x9f, 0xa6, + 0xdd, 0xdf, 0xbd, 0xaf, 0x03, 0xe4, 0x98, 0x55, 0x63, 0x41, 0x1b, 0x06, + 0xbe, 0x67, 0xfb, 0x92, 0x52, 0x99, 0x3c, 0x71, 0xe4, 0xa7, 0x27, 0x6c, + 0x26, 0x14, 0xdd, 0xfb, 0x83, 0xe1, 0x3f, 0xec, 0x4d, 0xe9, 0xd9, 0xba, + 0x36, 0x8e, 0x63, 0xe9, 0x1f, 0xee, 0x49, 0x4d, 0xec, 0xa7, 0xc3, 0x4b, + 0x81, 0x01, 0xce, 0xe7, 0xcd, 0x03, 0x18, 0xe4, 0x5a, 0xc3, 0x20, 0x32, + 0xb0, 0x7e, 0x9b, 0xbf, 0x84, 0xa3, 0x38, 0x9f, 0x88, 0x4e, 0x1c, 0x36, + 0x8d, 0x3e, 0xe4, 0x94, 0x8c, 0xd0, 0xd2, 0x64, 0xc9, 0xfe, 0x50, 0xd3, + 0xf2, 0x24, 0xdc, 0x70, 0x07, 0x6f, 0xba, 0x51, 0x98, 0xf8, 0x3e, 0x28, + 0xa6, 0xdd, 0xa2, 0x4f, 0xe4, 0x49, 0x4d, 0x1b, 0x30, 0x19, 0x61, 0xf6, + 0xb6, 0x1f, 0xe2, 0x02, 0xbd, 0x8e, 0x4b, 0x1a, 0x1a, 0xe3, 0x24, 0x68, + 0x60, 0x19, 0x43, 0x77, 0x54, 0xae, 0x9f, 0xcc, 0x7b, 0xcf, 0x90, 0x8f, + 0xca, 0xac, 0x57, 0x93, 0x5d, 0xa4, 0x3c, 0x56, 0xe6, 0x93, 0xc8, 0x70, + 0x49, 0x49, 0x04, 0x1d, 0x40, 0xfb, 0xd3, 0xb7, 0x98, 0x84, 0x2b, 0x6f, + 0x7b, 0x3e, 0x83, 0x74, 0xef, 0xa2, 0x19, 0xc9, 0xb0, 0x9e, 0x22, 0x12, + 0x53, 0x6c, 0xb1, 0xa4, 0x79, 0xf9, 0xc2, 0x61, 0x59, 0x0d, 0x24, 0x46, + 0xee, 0xc7, 0x85, 0x53, 0xd6, 0xb5, 0x48, 0x64, 0x5b, 0x1b, 0x49, 0xf8, + 0x24, 0xa6, 0x54, 0xd6, 0xda, 0x85, 0xa1, 0xed, 0x97, 0x3c, 0x44, 0x78, + 0xc9, 0x92, 0x54, 0x6b, 0x61, 0x0d, 0xda, 0x09, 0x9f, 0xb9, 0x4b, 0xf4, + 0x81, 0x85, 0xd3, 0xbb, 0xc5, 0x45, 0xb7, 0xbc, 0x08, 0x6b, 0x62, 0x79, + 0x25, 0x25, 0x32, 0x03, 0x68, 0x90, 0xde, 0xfc, 0xae, 0x89, 0x9b, 0xbd, + 0x03, 0xb4, 0xc1, 0xd0, 0x4f, 0xcc, 0x2e, 0x64, 0x1f, 0x50, 0x6c, 0x70, + 0x05, 0xa6, 0x27, 0x91, 0xdd, 0x75, 0x35, 0x36, 0x6a, 0x21, 0x25, 0x38, + 0x7f, 0x58, 0x44, 0x16, 0x1f, 0x12, 0xdf, 0xb8, 0x12, 0xb8, 0x8c, 0xff, + 0x00, 0xe9, 0xb7, 0x7f, 0x5c, 0xae, 0xe7, 0xeb, 0x1b, 0x46, 0xda, 0xdd, + 0xdb, 0x73, 0x7f, 0x2a, 0xe1, 0xba, 0x87, 0xf4, 0xdb, 0xbf, 0xae, 0x52, + 0x53, 0x5d, 0x24, 0x92, 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, + 0x24, 0x94, 0xa4, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, 0x4f, 0x67, + 0xf5, 0x6b, 0x6f, 0xec, 0xea, 0x77, 0x90, 0x3d, 0xce, 0x8f, 0x89, 0x72, + 0xd3, 0xb9, 0xbb, 0xaf, 0x71, 0x07, 0xf3, 0x03, 0x63, 0xe0, 0x4c, 0xac, + 0xbf, 0xab, 0x95, 0x07, 0xf4, 0xca, 0x67, 0xf7, 0x8f, 0xe0, 0xe5, 0xb3, + 0x65, 0x61, 0x8e, 0xd3, 0xe0, 0x92, 0x9e, 0x67, 0xa9, 0xc0, 0xea, 0x2e, + 0x68, 0x31, 0xed, 0x6c, 0x11, 0xf0, 0x45, 0xa9, 0xa7, 0xd3, 0xdc, 0x0c, + 0x83, 0xf9, 0x50, 0x3a, 0xb1, 0xff, 0x00, 0x29, 0x38, 0x73, 0x01, 0xb0, + 0x3e, 0x48, 0xb5, 0x92, 0xd6, 0x80, 0x00, 0xf9, 0x24, 0xa5, 0xe5, 0xdd, + 0xc4, 0x81, 0xe2, 0x81, 0x93, 0x89, 0x4d, 0x9e, 0xe6, 0xb0, 0x07, 0x78, + 0x85, 0x6c, 0x35, 0xe6, 0x7d, 0xb3, 0x1c, 0xa1, 0x1c, 0xca, 0x5a, 0xef, + 0x4d, 0xc1, 0xc1, 0xdf, 0x0d, 0x12, 0x52, 0xf4, 0xb9, 0xcc, 0xaf, 0x69, + 0x06, 0x06, 0x81, 0x1c, 0x58, 0xd2, 0xdd, 0x74, 0x51, 0x9d, 0xc2, 0x79, + 0x1e, 0x29, 0x8b, 0x01, 0x09, 0x29, 0x8b, 0xc5, 0x60, 0xee, 0xd6, 0x7c, + 0x90, 0xdd, 0x73, 0x40, 0xfa, 0x27, 0xf0, 0x52, 0x70, 0x70, 0x4c, 0x5a, + 0x1d, 0xca, 0x4a, 0x46, 0xeb, 0x8d, 0x90, 0xd6, 0xcb, 0x60, 0xff, 0x00, + 0xaf, 0x09, 0xbd, 0xbe, 0xa4, 0xc9, 0xff, 0x00, 0x6a, 0x45, 0xbb, 0x5d, + 0x3c, 0x7c, 0x13, 0x6f, 0x66, 0xe9, 0x9d, 0x52, 0x53, 0xd0, 0x8e, 0x91, + 0x81, 0xff, 0x00, 0x71, 0xd9, 0xf0, 0xda, 0xa1, 0x67, 0x4c, 0xe9, 0xe3, + 0xfe, 0xd3, 0xb2, 0x3b, 0xe8, 0xb5, 0xfe, 0x3f, 0x35, 0x17, 0xd6, 0x1c, + 0x39, 0x84, 0x94, 0xe1, 0x8c, 0x2e, 0x92, 0x4b, 0x7d, 0x8c, 0x6c, 0xf1, + 0xac, 0x22, 0x9e, 0x93, 0x86, 0xe6, 0xfb, 0x2b, 0x1a, 0xf7, 0x04, 0xff, + 0x00, 0x7a, 0x6c, 0xce, 0x9f, 0x6e, 0xff, 0x00, 0x50, 0x00, 0xf1, 0x3d, + 0xb4, 0x44, 0xc5, 0x17, 0x56, 0x20, 0x8f, 0x6f, 0x61, 0xcc, 0x24, 0xa7, + 0x2b, 0x33, 0xa6, 0xbb, 0x1d, 0xe2, 0xc6, 0x30, 0x3d, 0x93, 0xab, 0x5d, + 0xbb, 0x4f, 0x98, 0x2a, 0x75, 0x63, 0x50, 0xe6, 0x82, 0xea, 0x48, 0xf8, + 0x3d, 0xcb, 0x4f, 0x35, 0xc5, 0xd5, 0xc6, 0xaa, 0xbe, 0x31, 0x73, 0x61, + 0xaf, 0x04, 0x4f, 0x12, 0x92, 0x91, 0x0e, 0x9f, 0x86, 0xe2, 0x0e, 0xc7, + 0x4f, 0x89, 0x73, 0xbf, 0xf2, 0x48, 0x83, 0xa6, 0x61, 0x9d, 0x36, 0x90, + 0x7f, 0xac, 0xff, 0x00, 0xef, 0x57, 0x5b, 0x00, 0x46, 0x91, 0xdb, 0x45, + 0x21, 0xe4, 0x92, 0x9c, 0xf7, 0x74, 0xbc, 0x68, 0xd0, 0x38, 0x7c, 0x1e, + 0xff, 0x00, 0xef, 0x51, 0xaf, 0xa6, 0x51, 0xf9, 0xdb, 0xbf, 0xcf, 0x77, + 0xf7, 0xad, 0x22, 0x7c, 0x00, 0x42, 0x73, 0x9c, 0xd3, 0xc0, 0x27, 0xe6, + 0x12, 0x53, 0x57, 0xec, 0x15, 0x0d, 0x01, 0x77, 0x90, 0xde, 0xef, 0xef, + 0x48, 0xf4, 0xca, 0x3c, 0x5d, 0xaf, 0x3e, 0xf7, 0x7f, 0x7a, 0xb8, 0xd7, + 0x07, 0x7e, 0x6e, 0xaa, 0x73, 0xe5, 0xaa, 0x4a, 0x73, 0x8f, 0x4d, 0xc7, + 0x6c, 0x10, 0x5e, 0x08, 0x3a, 0x45, 0x8f, 0xff, 0x00, 0xc9, 0x2e, 0x9a, + 0x9d, 0x19, 0x1e, 0x2b, 0x16, 0xc3, 0xe5, 0xc2, 0xd0, 0x76, 0x55, 0x6d, + 0xc5, 0x7d, 0x8f, 0x04, 0x80, 0xd9, 0x76, 0xdd, 0x4e, 0x9a, 0xa4, 0xa6, + 0x87, 0xd6, 0x20, 0xd3, 0x4b, 0x35, 0xe1, 0xed, 0xfc, 0xab, 0x83, 0xea, + 0x1f, 0xd3, 0x6e, 0xfe, 0xb1, 0x5d, 0xcf, 0xd6, 0x26, 0x0d, 0x94, 0xd9, + 0x3f, 0x48, 0x03, 0x1e, 0x52, 0x0a, 0xe1, 0xba, 0x87, 0xf4, 0xdb, 0xbf, + 0xac, 0x52, 0x53, 0x5d, 0x24, 0x92, 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, + 0x92, 0x49, 0x24, 0x94, 0xa4, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, + 0x4f, 0x6f, 0xf5, 0x60, 0x81, 0xd2, 0xaa, 0x9f, 0x17, 0x47, 0xf9, 0xcb, + 0x4e, 0xf7, 0x89, 0x93, 0x33, 0x3a, 0x2c, 0xcf, 0xab, 0x0e, 0x60, 0xe9, + 0x75, 0xb4, 0x9d, 0x49, 0x74, 0x7f, 0x9c, 0xb5, 0x2d, 0x6c, 0xf0, 0x23, + 0xc2, 0x52, 0x53, 0x83, 0x99, 0x8d, 0x4d, 0x9d, 0x49, 0xe6, 0xc6, 0xb4, + 0xe8, 0xde, 0x44, 0xf6, 0x44, 0x3d, 0x3b, 0x1b, 0x6c, 0x8a, 0xd9, 0x1f, + 0x04, 0x67, 0xb4, 0x7e, 0xd0, 0x7b, 0x88, 0x97, 0x43, 0x47, 0xca, 0x15, + 0xd6, 0x00, 0x74, 0x22, 0x07, 0x9c, 0xff, 0x00, 0x72, 0x4a, 0x71, 0x9b, + 0x83, 0x40, 0x0f, 0x1b, 0x01, 0x30, 0x4e, 0x9a, 0x2c, 0xe6, 0x7f, 0x3b, + 0xb5, 0xd8, 0xcd, 0x78, 0x9f, 0x17, 0x02, 0xba, 0x87, 0xd3, 0x59, 0xfc, + 0xdf, 0xc0, 0xff, 0x00, 0x72, 0x09, 0xc6, 0xa9, 0xae, 0x96, 0xb7, 0xdc, + 0x3c, 0x8a, 0x4a, 0x69, 0xd3, 0x85, 0x43, 0xc0, 0xdd, 0x4e, 0xcf, 0xed, + 0x39, 0x1b, 0xf6, 0x5e, 0x31, 0xfc, 0xd2, 0x3e, 0x0e, 0x77, 0xf7, 0xab, + 0xac, 0x3e, 0xff, 0x00, 0x76, 0x95, 0x81, 0xa7, 0xef, 0x12, 0xa6, 0x0b, + 0x08, 0xd0, 0xf1, 0xe6, 0x92, 0x9c, 0xe3, 0xd2, 0xb1, 0x79, 0xda, 0x7f, + 0xce, 0x77, 0xf7, 0xa6, 0x3d, 0x2b, 0x1c, 0xf0, 0x08, 0xfe, 0xd3, 0xbf, + 0xf2, 0x4b, 0x54, 0x00, 0x7b, 0x4c, 0xf9, 0x26, 0x70, 0x81, 0xd8, 0x79, + 0x24, 0xa7, 0x23, 0xf6, 0x3e, 0x3c, 0x6b, 0xba, 0x7f, 0xac, 0xef, 0xfc, + 0x92, 0x8f, 0xec, 0x6c, 0x6d, 0xdc, 0x3b, 0xfc, 0xe3, 0xfd, 0xea, 0xf5, + 0xae, 0x76, 0xef, 0x73, 0xa0, 0x76, 0x4d, 0xea, 0x0e, 0x37, 0x98, 0x89, + 0x9f, 0xe0, 0x92, 0x9b, 0xbf, 0xb4, 0xaa, 0x1c, 0xb2, 0xef, 0xfb, 0x69, + 0xdf, 0xdc, 0x90, 0xea, 0x98, 0xc3, 0xe9, 0x36, 0xe1, 0xe3, 0xfa, 0x27, + 0xff, 0x00, 0x72, 0xd0, 0x21, 0xba, 0x69, 0xa1, 0xef, 0xae, 0x8a, 0x0e, + 0x15, 0x6b, 0xba, 0x07, 0xf1, 0x49, 0x4e, 0x5d, 0x9d, 0x57, 0x1d, 0xd9, + 0x05, 0xa3, 0xd5, 0xf4, 0x76, 0xc0, 0xfd, 0x1b, 0xf9, 0xd3, 0xf3, 0x61, + 0x0d, 0xdd, 0x4a, 0x80, 0x74, 0x16, 0x47, 0x8f, 0xa4, 0xff, 0x00, 0xfc, + 0x8a, 0xd6, 0xf4, 0x59, 0x32, 0x00, 0xf2, 0x51, 0x7d, 0x0c, 0x20, 0x8e, + 0x3e, 0xef, 0xee, 0x49, 0x4e, 0x0d, 0xdd, 0x4a, 0xed, 0xe0, 0xd7, 0x51, + 0x7d, 0x47, 0x47, 0x1d, 0x96, 0x4c, 0x7d, 0xc8, 0x9f, 0xb4, 0xf1, 0x76, + 0x89, 0xdc, 0xd8, 0xd4, 0xcb, 0x1d, 0xa1, 0xff, 0x00, 0x35, 0x47, 0xaa, + 0x74, 0x77, 0x1f, 0xd2, 0x52, 0xe7, 0xb5, 0xc3, 0x5d, 0x1c, 0x55, 0x9e, + 0x9e, 0xdb, 0x85, 0x20, 0x5a, 0xe2, 0xe3, 0x1a, 0xee, 0x49, 0x48, 0x8f, + 0x55, 0xc1, 0x74, 0x34, 0x5d, 0x07, 0xbf, 0xb5, 0xff, 0x00, 0xf9, 0x14, + 0x46, 0x75, 0x2e, 0x9e, 0x09, 0x3e, 0xae, 0x9e, 0x3b, 0x1f, 0xff, 0x00, + 0x91, 0x4f, 0x66, 0x3d, 0x4e, 0xb2, 0x4b, 0x00, 0x3e, 0x23, 0xc3, 0xe4, + 0xae, 0x56, 0x18, 0x1b, 0x0d, 0x10, 0x3c, 0xbf, 0xdc, 0x92, 0x9a, 0x9f, + 0xb4, 0xf0, 0x3f, 0xd2, 0x0f, 0xf3, 0x5d, 0xff, 0x00, 0x91, 0x4e, 0xfe, + 0xa1, 0xd3, 0x8e, 0xdf, 0x7c, 0xc9, 0x82, 0x43, 0x5d, 0xa0, 0xff, 0x00, + 0x35, 0x5d, 0x2c, 0x0e, 0xf2, 0xf9, 0x0f, 0xee, 0x4d, 0xe9, 0x3b, 0xb3, + 0xe3, 0xe2, 0xd6, 0x9f, 0xe0, 0x92, 0x9a, 0x83, 0x3b, 0xa5, 0x8d, 0x45, + 0xc0, 0x7c, 0x9d, 0xff, 0x00, 0x91, 0x48, 0xf5, 0x0e, 0x9c, 0x7f, 0xc3, + 0x37, 0xfe, 0x97, 0xf7, 0x2b, 0x62, 0x8b, 0x48, 0x80, 0xf0, 0x3e, 0x2c, + 0x6f, 0xf7, 0x26, 0xf4, 0x2f, 0xff, 0x00, 0x48, 0xcd, 0x3c, 0x6b, 0x1f, + 0xdc, 0x92, 0x9a, 0x2e, 0xce, 0xc0, 0xff, 0x00, 0x4c, 0xdf, 0x86, 0xbf, + 0xdc, 0xb5, 0x8b, 0x2b, 0xf4, 0x5d, 0xb8, 0x01, 0xb9, 0xa4, 0x7f, 0x5b, + 0x4f, 0x05, 0x4e, 0xca, 0xae, 0x03, 0x52, 0xc3, 0xa7, 0xee, 0x91, 0xf9, + 0x1c, 0xb4, 0xaa, 0x25, 0xd4, 0xed, 0xf2, 0xe5, 0x25, 0x39, 0x9f, 0x58, + 0xb6, 0x9c, 0x6a, 0xde, 0xc8, 0x3b, 0x80, 0x83, 0xf3, 0x0b, 0x80, 0xcf, + 0xfe, 0x99, 0x6e, 0x91, 0xee, 0xe1, 0x77, 0xff, 0x00, 0x58, 0x48, 0x76, + 0x2b, 0x3c, 0x43, 0x9b, 0xf1, 0xe5, 0x70, 0x1d, 0x43, 0xfa, 0x6d, 0xdf, + 0xd6, 0x49, 0x4d, 0x74, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, + 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0xa5, 0x2a, 0xd8, 0xeb, + 0x1e, 0xd6, 0x37, 0x97, 0x18, 0x0a, 0x2a, 0xe7, 0x4d, 0xad, 0xa6, 0xd7, + 0x58, 0xee, 0x18, 0x34, 0xf8, 0x94, 0x94, 0xf5, 0x9d, 0x12, 0xb6, 0xb3, + 0x11, 0x8d, 0x98, 0x0c, 0x90, 0x3e, 0x32, 0xb4, 0xac, 0x73, 0x43, 0x01, + 0x3e, 0x0b, 0x37, 0xa4, 0x10, 0xfc, 0x3a, 0xcc, 0xe8, 0x5e, 0x75, 0x1e, + 0x4e, 0x57, 0x72, 0x03, 0x8c, 0x09, 0x81, 0xe0, 0x92, 0x9c, 0xbb, 0x2e, + 0xb5, 0x99, 0xd6, 0x5a, 0xc6, 0x97, 0x35, 0xc1, 0xa0, 0x81, 0x1d, 0x87, + 0x82, 0xb2, 0x72, 0x8b, 0xdb, 0x2f, 0x65, 0xcd, 0x03, 0xc0, 0x73, 0xf8, + 0xaa, 0x96, 0xe4, 0x7a, 0x59, 0xce, 0x01, 0xae, 0x74, 0x47, 0x0d, 0x91, + 0xc2, 0xb5, 0xbe, 0xab, 0x3d, 0xe6, 0xbb, 0x03, 0xbf, 0xa8, 0xe8, 0xfb, + 0xa1, 0x25, 0x20, 0x76, 0x46, 0xd3, 0x3b, 0x2c, 0x78, 0xf0, 0x70, 0x3f, + 0xde, 0xab, 0x7e, 0xd0, 0xcd, 0xae, 0xe3, 0x34, 0x87, 0xd2, 0x7b, 0x6c, + 0x87, 0x00, 0xb6, 0x1b, 0x92, 0x1a, 0xd0, 0xd1, 0x5b, 0xbf, 0xed, 0xb2, + 0x3f, 0x82, 0xc8, 0xce, 0xa2, 0xd3, 0x98, 0xdc, 0xaa, 0x05, 0x9b, 0xb9, + 0x73, 0x5c, 0x1d, 0x1f, 0x71, 0x09, 0x29, 0xb3, 0x5e, 0x73, 0xb9, 0x65, + 0x56, 0x09, 0xf0, 0xac, 0xe9, 0xf3, 0x52, 0x19, 0xef, 0xdd, 0x01, 0xb6, + 0xf9, 0x8f, 0x49, 0xdf, 0xdc, 0xa7, 0x8f, 0x98, 0x59, 0x1e, 0xa5, 0x6e, + 0x9f, 0x36, 0x93, 0xf8, 0xa9, 0x9c, 0x96, 0xb5, 0xa5, 0xcd, 0x70, 0x24, + 0x99, 0x83, 0x33, 0xf0, 0xd4, 0x04, 0x94, 0x89, 0xfd, 0x47, 0x69, 0xd8, + 0xe1, 0x60, 0x73, 0xb8, 0x06, 0xb7, 0x83, 0xf9, 0x10, 0xbf, 0x68, 0xd2, + 0x0e, 0x81, 0xed, 0x70, 0xef, 0xb1, 0xf3, 0xff, 0x00, 0x52, 0xad, 0x5c, + 0xfc, 0x5c, 0x82, 0xdb, 0x8b, 0x48, 0xb1, 0xb0, 0x60, 0x12, 0x46, 0x9f, + 0x04, 0x27, 0x39, 0xde, 0xae, 0xf6, 0x87, 0x3a, 0x4f, 0xb8, 0x98, 0x88, + 0xf2, 0xdc, 0x92, 0x91, 0x3b, 0xaa, 0xb4, 0xe8, 0x5e, 0xef, 0xfb, 0x6d, + 0xff, 0x00, 0xf9, 0x15, 0x0f, 0xda, 0x2c, 0x89, 0xde, 0x63, 0xc3, 0xd3, + 0x7f, 0xf7, 0x2b, 0xec, 0x6b, 0x4e, 0xa1, 0xae, 0x1e, 0x3a, 0xb5, 0x1b, + 0x63, 0x39, 0xdc, 0xe9, 0xf8, 0x84, 0x94, 0x9a, 0xbc, 0xa7, 0x35, 0xda, + 0x93, 0xb4, 0xa2, 0x3a, 0xea, 0x9f, 0xf4, 0x81, 0x95, 0x9e, 0xda, 0x73, + 0xde, 0xef, 0xe7, 0x2b, 0x9f, 0x12, 0xc7, 0x47, 0xfd, 0x5a, 0x91, 0xab, + 0xa8, 0xb4, 0xc7, 0xa9, 0x49, 0xfe, 0xcb, 0xbf, 0xf2, 0x49, 0x29, 0xbe, + 0x32, 0x18, 0x04, 0x4f, 0x1e, 0x49, 0x1c, 0x86, 0x11, 0xa3, 0xbf, 0x28, + 0x54, 0x1c, 0x3a, 0x80, 0x12, 0xe7, 0x53, 0xfe, 0x63, 0xbf, 0xf2, 0x4a, + 0x1b, 0xb3, 0x3f, 0xe0, 0x67, 0xfa, 0xae, 0xff, 0x00, 0xc9, 0x24, 0xa7, + 0x42, 0xcb, 0xea, 0x88, 0x2f, 0x6e, 0xbc, 0x49, 0x84, 0x36, 0xb9, 0xad, + 0xd3, 0x48, 0xf2, 0x21, 0x65, 0x65, 0xd9, 0x70, 0xaf, 0x75, 0xfe, 0x83, + 0x44, 0xc0, 0x3b, 0x5e, 0x75, 0x3f, 0xda, 0x4f, 0x5b, 0x72, 0x99, 0xb5, + 0x95, 0xd9, 0x43, 0xe7, 0x98, 0xdf, 0xa6, 0x93, 0xe2, 0x92, 0x9b, 0xee, + 0xb7, 0xdf, 0xa4, 0x8f, 0xb9, 0x15, 0x97, 0xf9, 0x7f, 0xaf, 0xde, 0xa8, + 0x1c, 0x6c, 0xfd, 0xa1, 0xf1, 0x4f, 0x8e, 0x9b, 0xd4, 0x43, 0x7a, 0x80, + 0xd3, 0x6d, 0x53, 0xfd, 0xa4, 0x94, 0xeb, 0x0b, 0xe7, 0xc4, 0x22, 0x7a, + 0xe0, 0x81, 0xdf, 0xe6, 0xb2, 0x01, 0xea, 0x3b, 0x4c, 0x36, 0xae, 0x3f, + 0x94, 0xa6, 0xc3, 0xd4, 0x80, 0x82, 0xda, 0xbe, 0x32, 0xef, 0xee, 0x49, + 0x4e, 0xa7, 0xaa, 0x7c, 0x0a, 0x46, 0xf7, 0x03, 0xa4, 0xca, 0xcc, 0xdd, + 0xd4, 0x3f, 0x76, 0xbf, 0x3d, 0x5d, 0xfd, 0xc9, 0x81, 0xce, 0x3a, 0x96, + 0xd7, 0xf7, 0xbb, 0xfb, 0x92, 0x53, 0xa1, 0x65, 0xf2, 0xd2, 0x0e, 0xba, + 0x44, 0x2b, 0x78, 0xff, 0x00, 0x44, 0x7c, 0x16, 0x13, 0x9f, 0x98, 0x01, + 0x96, 0xb0, 0xc7, 0x9b, 0xbf, 0xb9, 0x6d, 0x50, 0xe2, 0xe6, 0xf9, 0x01, + 0xaf, 0xdc, 0x92, 0x9c, 0xde, 0xbe, 0x0f, 0xa0, 0xc7, 0x79, 0xb4, 0x7c, + 0x8b, 0x82, 0xe1, 0x7a, 0x8f, 0xf4, 0xdb, 0xbf, 0xac, 0xbb, 0x9e, 0xba, + 0x43, 0xb1, 0x87, 0x88, 0x2d, 0x11, 0xf3, 0x5c, 0x2e, 0x7f, 0xf4, 0xcb, + 0x7f, 0xac, 0x92, 0x9a, 0xe9, 0x41, 0x1c, 0xad, 0xee, 0x9d, 0xd2, 0x31, + 0x71, 0xf1, 0x99, 0x9f, 0xd4, 0xce, 0x8f, 0x1b, 0xa9, 0xa2, 0x60, 0x91, + 0xe2, 0xef, 0x8a, 0xb0, 0x7a, 0x8e, 0x1e, 0x4b, 0x9b, 0x5b, 0x71, 0x45, + 0x38, 0xe3, 0xf3, 0xb6, 0xb5, 0xc0, 0x79, 0x90, 0x44, 0xfe, 0x29, 0x29, + 0xe6, 0x52, 0x5d, 0x19, 0x6f, 0x48, 0x7e, 0xeb, 0x2c, 0xa1, 0xbe, 0xa1, + 0x30, 0xdd, 0x8e, 0x9d, 0x64, 0xf2, 0xd0, 0x61, 0x66, 0xf5, 0x3a, 0xdb, + 0x3b, 0xa9, 0x6e, 0xda, 0x9a, 0x76, 0xc4, 0x7b, 0xa3, 0xb1, 0x29, 0x29, + 0xce, 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0xa5, 0x63, 0x1f, + 0x25, 0xd4, 0xb1, 0xed, 0x00, 0x10, 0x75, 0x92, 0x35, 0x98, 0x80, 0xab, + 0xab, 0x16, 0xd4, 0xda, 0xb1, 0x6a, 0x90, 0x45, 0x96, 0x92, 0xe3, 0x3f, + 0xba, 0x34, 0x6f, 0xde, 0x92, 0x9e, 0xb7, 0xea, 0xd4, 0x7e, 0xcd, 0xa7, + 0x77, 0x1e, 0xe3, 0xff, 0x00, 0x49, 0x5e, 0xb1, 0xe5, 0xd7, 0x38, 0x4e, + 0x8d, 0x68, 0xd3, 0xcd, 0x50, 0xfa, 0xbc, 0xe3, 0xfb, 0x36, 0x81, 0xcc, + 0x87, 0x0f, 0xfa, 0x45, 0x5e, 0xb0, 0x16, 0xda, 0xff, 0x00, 0x80, 0x22, + 0x12, 0x53, 0x97, 0x73, 0x9d, 0xfb, 0x44, 0xd6, 0xc1, 0xb9, 0xc4, 0x34, + 0x6d, 0x1d, 0xe4, 0x2d, 0x9a, 0xea, 0x73, 0x58, 0x37, 0x19, 0x31, 0xc1, + 0xe7, 0xe6, 0xb2, 0x2c, 0xb5, 0xd5, 0xe7, 0x17, 0x57, 0x63, 0x5a, 0xf7, + 0x00, 0x35, 0x61, 0x71, 0xe1, 0x5d, 0xaf, 0xf6, 0x95, 0xba, 0xb5, 0xe1, + 0xcd, 0xff, 0x00, 0x8a, 0x3f, 0xf9, 0x30, 0x92, 0x9b, 0x9b, 0xa0, 0x44, + 0xa8, 0xfd, 0xc4, 0xaa, 0x37, 0x62, 0xe5, 0x96, 0x93, 0x6c, 0x34, 0x7f, + 0x57, 0xff, 0x00, 0x52, 0x2a, 0x78, 0x58, 0xc5, 0xf7, 0xbc, 0xe2, 0xdf, + 0x5e, 0xf6, 0xfd, 0x36, 0x90, 0x47, 0xfd, 0xfd, 0x25, 0x3a, 0xb6, 0x09, + 0xef, 0xc2, 0xae, 0xe0, 0x67, 0xf8, 0xa6, 0x75, 0x59, 0x73, 0xfc, 0xfe, + 0x38, 0x23, 0xc9, 0xc7, 0xf2, 0x12, 0x9f, 0xec, 0xf9, 0x87, 0xfc, 0x2d, + 0x1f, 0xe6, 0x59, 0xfd, 0xe9, 0x29, 0x25, 0x5b, 0x4f, 0xd2, 0x30, 0x02, + 0x85, 0x95, 0xdd, 0x6b, 0xbf, 0x46, 0xcd, 0x95, 0x9e, 0x0f, 0x6d, 0x7b, + 0x93, 0x29, 0x9b, 0x8b, 0x9c, 0x4c, 0x36, 0xda, 0x09, 0x3d, 0xa2, 0xc0, + 0x9d, 0xd4, 0x75, 0x16, 0xe9, 0xba, 0x80, 0x39, 0xe5, 0xc1, 0x25, 0x26, + 0xda, 0xda, 0xc4, 0x0e, 0x3c, 0x53, 0x6f, 0x1e, 0x08, 0x2e, 0x6e, 0x7b, + 0x01, 0xf5, 0x1f, 0x8e, 0x00, 0x1e, 0x2f, 0x27, 0xf0, 0x4d, 0xb3, 0xa9, + 0x4c, 0xc5, 0x11, 0xfb, 0xd2, 0xed, 0xbe, 0x29, 0x29, 0xd9, 0xaa, 0xbd, + 0x66, 0x20, 0x29, 0x9a, 0x9a, 0xee, 0xda, 0x29, 0x07, 0x16, 0x08, 0xda, + 0x79, 0x2a, 0x2e, 0xc8, 0x03, 0x42, 0x39, 0xe0, 0x78, 0xa4, 0xa6, 0xa6, + 0x5b, 0x7d, 0x90, 0xd1, 0xaf, 0x8f, 0x65, 0x5a, 0xba, 0x9e, 0xc6, 0xcb, + 0xe3, 0x5d, 0x4c, 0x2b, 0xf6, 0x3c, 0xb8, 0x18, 0x61, 0x27, 0xb6, 0x85, + 0x0b, 0xd6, 0x9e, 0x58, 0x5a, 0x3e, 0x05, 0x25, 0x39, 0x79, 0x15, 0x8c, + 0x92, 0xe7, 0x47, 0xb2, 0xae, 0x09, 0xe0, 0x94, 0x85, 0x4d, 0x6d, 0xb5, + 0xbd, 0xcf, 0x01, 0x8e, 0x6c, 0xb8, 0x78, 0x04, 0x5c, 0xac, 0x9a, 0xf0, + 0xda, 0xf7, 0x3a, 0xb3, 0x63, 0x1e, 0x75, 0x80, 0x74, 0x4a, 0xba, 0xa8, + 0xb1, 0xde, 0xb6, 0xa7, 0x76, 0xb2, 0x92, 0x9b, 0xec, 0xb1, 0x8f, 0x68, + 0x2c, 0xd5, 0xbc, 0x05, 0x06, 0x55, 0x2f, 0x3e, 0x01, 0x0c, 0x3b, 0x69, + 0xdc, 0xd2, 0x76, 0xf6, 0x1d, 0x95, 0x3c, 0xbe, 0xae, 0x29, 0xb7, 0xd2, + 0x61, 0x80, 0x1f, 0xb5, 0xce, 0xf8, 0x0d, 0xce, 0xfc, 0xa0, 0x24, 0xa7, + 0x47, 0x27, 0x50, 0x2b, 0x60, 0xd0, 0x73, 0x0a, 0xb3, 0x9a, 0xe6, 0x34, + 0x8d, 0xce, 0x69, 0x6c, 0xb8, 0xba, 0x74, 0x1e, 0x01, 0x36, 0x06, 0x75, + 0xf7, 0xdc, 0xfa, 0x71, 0x68, 0xf5, 0xf6, 0x6b, 0x6e, 0x43, 0xcc, 0x34, + 0x13, 0xfb, 0xa1, 0x13, 0x2f, 0x07, 0x3f, 0x2d, 0xfb, 0x09, 0x2c, 0xaa, + 0x75, 0x68, 0x1b, 0x40, 0xf8, 0xc1, 0xd5, 0x25, 0x25, 0xa3, 0x32, 0xb7, + 0x3b, 0xd2, 0x7b, 0x47, 0xa8, 0x40, 0x24, 0x76, 0x82, 0x39, 0x09, 0xc8, + 0x6c, 0x68, 0x21, 0x57, 0xea, 0x14, 0x1c, 0x26, 0x35, 0xd4, 0x38, 0xc3, + 0x7d, 0xc4, 0x3b, 0xb4, 0x73, 0x05, 0x17, 0x12, 0xf6, 0xe4, 0x63, 0x32, + 0xdd, 0x7d, 0xe3, 0x5f, 0x92, 0x4a, 0x63, 0x73, 0x9a, 0x1a, 0x67, 0x41, + 0xe2, 0xae, 0x63, 0x93, 0xb2, 0x06, 0x9b, 0x87, 0x2a, 0xad, 0xf5, 0x02, + 0xd7, 0x00, 0x60, 0x11, 0xdd, 0x5a, 0xa4, 0xb4, 0x55, 0x27, 0xf3, 0x40, + 0xd5, 0x25, 0x34, 0x3a, 0xeb, 0x81, 0xc7, 0x68, 0x06, 0x48, 0x73, 0x7e, + 0xf5, 0xc6, 0xd9, 0xb3, 0xf6, 0xbc, 0xd8, 0x3d, 0x9e, 0xa0, 0x2e, 0x05, + 0x75, 0x5d, 0x69, 0xdb, 0xab, 0xad, 0xc3, 0xb9, 0x1f, 0x74, 0xae, 0x47, + 0x37, 0x71, 0xea, 0x2f, 0x00, 0x7b, 0x8b, 0xc4, 0x0f, 0x3d, 0x12, 0x53, + 0xa0, 0xec, 0xab, 0x3a, 0xa6, 0x73, 0x31, 0x40, 0x0e, 0x75, 0x8f, 0x0d, + 0xdc, 0xe0, 0x4c, 0x0e, 0x03, 0x47, 0x90, 0x5e, 0x87, 0xd3, 0xbe, 0xaa, + 0x74, 0xbc, 0x7a, 0x1a, 0x2f, 0x06, 0xeb, 0x23, 0xdc, 0x0e, 0x8c, 0x9f, + 0xea, 0xae, 0x27, 0xea, 0x97, 0x4f, 0x23, 0xaf, 0x13, 0x61, 0x91, 0x8e, + 0x1c, 0xe0, 0xe1, 0xa8, 0x30, 0x76, 0xc8, 0x2b, 0xb7, 0xb7, 0xeb, 0x16, + 0x2b, 0x2f, 0x18, 0xd8, 0xed, 0x37, 0xd9, 0x21, 0xae, 0xdb, 0x3e, 0xd2, + 0x7c, 0x74, 0x49, 0x4c, 0x3a, 0xb7, 0xd5, 0xde, 0x9b, 0x76, 0x33, 0x8e, + 0x2d, 0x4d, 0xa2, 0xf6, 0x8f, 0x63, 0x98, 0x20, 0x18, 0xec, 0x57, 0x9b, + 0xf5, 0x6b, 0xac, 0x16, 0x3e, 0x87, 0xc0, 0x80, 0x1b, 0x1e, 0x24, 0x19, + 0x95, 0xe9, 0x3d, 0x47, 0xac, 0xd9, 0x87, 0x73, 0x28, 0xb3, 0x1d, 0xef, + 0xad, 0xe3, 0x71, 0x7b, 0x1a, 0x5d, 0x1f, 0xe6, 0xaf, 0x3c, 0xfa, 0xd1, + 0x8e, 0xda, 0xfa, 0x83, 0xaf, 0xac, 0xb8, 0xd5, 0x79, 0x2f, 0x60, 0x73, + 0x62, 0x01, 0x83, 0xf3, 0xe5, 0x25, 0x38, 0xa9, 0x24, 0x92, 0x4a, 0x52, + 0x49, 0x24, 0x92, 0x99, 0xd4, 0xd0, 0xfb, 0x58, 0xc3, 0xa0, 0x73, 0x80, + 0x3f, 0x32, 0xac, 0x75, 0x3b, 0x7d, 0x4c, 0xc7, 0x81, 0xf4, 0x6b, 0x86, + 0x34, 0x0f, 0x06, 0xaa, 0xa0, 0x90, 0x41, 0x1a, 0x11, 0xa8, 0x29, 0x12, + 0x5c, 0x4b, 0x89, 0x92, 0x75, 0x25, 0x25, 0x3d, 0x97, 0xd5, 0xe3, 0xfa, + 0x86, 0x3f, 0xc1, 0xda, 0xff, 0x00, 0x69, 0x68, 0xda, 0x0b, 0x5c, 0xf2, + 0x78, 0x3a, 0x4a, 0xca, 0xfa, 0xb8, 0x40, 0xc2, 0xa0, 0x93, 0x10, 0x5d, + 0xf9, 0x56, 0x95, 0xc4, 0x9b, 0x1f, 0xf8, 0x24, 0xa7, 0x3f, 0xd0, 0xb1, + 0xd9, 0xae, 0x73, 0x5b, 0x2d, 0x81, 0x04, 0x18, 0x3c, 0x2d, 0x8a, 0x3d, + 0x56, 0x08, 0x04, 0xf9, 0x87, 0x09, 0xfc, 0x90, 0xb1, 0x61, 0xe7, 0xa8, + 0x18, 0xdd, 0x10, 0x35, 0x1c, 0x0d, 0x16, 0xd5, 0x45, 0xd0, 0x06, 0xfd, + 0x7c, 0xd2, 0x52, 0x47, 0xbd, 0xe4, 0x16, 0xed, 0x06, 0x3c, 0x42, 0xce, + 0x38, 0x2c, 0xae, 0xff, 0x00, 0x5e, 0xb6, 0xed, 0x73, 0xbe, 0x94, 0x77, + 0xfb, 0xc2, 0xbb, 0x66, 0x47, 0xa4, 0x25, 0xdb, 0x88, 0xef, 0xb4, 0x6e, + 0x55, 0xea, 0xea, 0x78, 0xd7, 0x3c, 0xd6, 0x1c, 0xea, 0xdf, 0xe1, 0x63, + 0x36, 0xca, 0x4a, 0x49, 0x55, 0xef, 0xaf, 0x48, 0x03, 0xe2, 0x07, 0xe5, + 0x94, 0x4c, 0x3c, 0xc7, 0x5d, 0xd4, 0x2c, 0xa0, 0xc6, 0xd3, 0x43, 0x88, + 0xf8, 0x82, 0xa0, 0xed, 0xce, 0x13, 0x21, 0xc3, 0xe0, 0xab, 0x61, 0xb1, + 0xcd, 0xea, 0xd5, 0x3c, 0x88, 0x69, 0x05, 0xa7, 0xb7, 0x29, 0x29, 0x23, + 0x33, 0x2c, 0x90, 0x4b, 0x80, 0xed, 0x1a, 0xff, 0x00, 0x72, 0x59, 0x17, + 0xd7, 0x55, 0x6e, 0xbc, 0xb5, 0x8e, 0x70, 0x13, 0x30, 0x65, 0x4d, 0xf5, + 0x00, 0xf7, 0x82, 0xcf, 0xa2, 0xe2, 0x01, 0x0a, 0x87, 0x52, 0x75, 0x67, + 0x16, 0xc6, 0x86, 0xc1, 0x09, 0x29, 0xb7, 0x90, 0x2a, 0xf5, 0x9e, 0xdb, + 0x46, 0xed, 0x03, 0x48, 0x98, 0xd1, 0x3c, 0xb2, 0x77, 0xed, 0x6e, 0xd8, + 0x8d, 0x9d, 0x94, 0x32, 0x60, 0xbe, 0xa7, 0x80, 0x3f, 0x49, 0x53, 0x1c, + 0x7e, 0x30, 0xa1, 0xae, 0xc8, 0x81, 0x1e, 0x10, 0x92, 0x91, 0x5d, 0x84, + 0xc6, 0xc1, 0x68, 0x20, 0x11, 0xe2, 0xe3, 0xf9, 0x4a, 0x8b, 0x30, 0xda, + 0xee, 0x5a, 0xef, 0xbc, 0xff, 0x00, 0x7a, 0xbf, 0xb1, 0xff, 0x00, 0xba, + 0x9e, 0x08, 0x1a, 0x84, 0x94, 0xd2, 0xfb, 0x08, 0x31, 0xa1, 0xff, 0x00, + 0x38, 0xff, 0x00, 0x7a, 0x83, 0xf0, 0x48, 0xe3, 0xfe, 0xa9, 0xca, 0xfc, + 0x83, 0xa4, 0x9f, 0x91, 0x4b, 0xd2, 0x2e, 0x1c, 0x92, 0x12, 0x53, 0x4a, + 0xdc, 0x7a, 0x19, 0x58, 0xf6, 0x07, 0x8e, 0xe5, 0xce, 0x77, 0xf7, 0xaa, + 0xf5, 0x63, 0x54, 0xf7, 0x12, 0xd6, 0x96, 0x7c, 0x09, 0xe3, 0xef, 0x5a, + 0x56, 0x62, 0x4e, 0x93, 0x13, 0xc4, 0xa8, 0xb7, 0x1c, 0xb1, 0x25, 0x23, + 0xa7, 0xa7, 0x56, 0x48, 0x12, 0x63, 0xc3, 0x73, 0xa3, 0xf2, 0xac, 0xbe, + 0xb2, 0xca, 0x85, 0x62, 0xd6, 0x7b, 0x83, 0x5e, 0x4b, 0x80, 0xef, 0xef, + 0x01, 0xdf, 0xdc, 0xba, 0x0a, 0xe9, 0xb3, 0x63, 0xbf, 0x36, 0x44, 0x02, + 0xb2, 0x3a, 0xab, 0xa9, 0x26, 0xac, 0x7a, 0x1c, 0x3d, 0x27, 0x4d, 0x2f, + 0x7f, 0x60, 0xfe, 0x47, 0xfd, 0x24, 0x94, 0xf4, 0x9d, 0x2b, 0x09, 0xec, + 0xe9, 0xa4, 0xe1, 0x39, 0xac, 0x75, 0x87, 0x7f, 0xb9, 0xbb, 0xb4, 0x20, + 0x44, 0xc1, 0x09, 0xf1, 0x71, 0x7a, 0xa5, 0x6c, 0xba, 0xcc, 0x87, 0xb4, + 0xba, 0x09, 0xad, 0xac, 0xdc, 0x5b, 0x1f, 0xda, 0x26, 0x13, 0xe3, 0xde, + 0xf7, 0xd0, 0xc6, 0xd0, 0xed, 0xa7, 0x60, 0x69, 0x9f, 0x10, 0x21, 0x43, + 0x2a, 0xec, 0xca, 0xea, 0xdb, 0x5b, 0x6d, 0xab, 0x43, 0xbb, 0x6b, 0x98, + 0xfd, 0xde, 0x70, 0x4a, 0x4a, 0x71, 0x7a, 0xbb, 0xfa, 0xab, 0xb0, 0x72, + 0x05, 0xf5, 0x8d, 0xb0, 0xdd, 0x97, 0x48, 0x89, 0x24, 0x0d, 0xb1, 0x00, + 0xa1, 0xe3, 0xe0, 0x54, 0xda, 0x18, 0xeb, 0xcb, 0xa7, 0xd3, 0x07, 0x68, + 0x73, 0x87, 0x23, 0xc0, 0x1e, 0x65, 0x4f, 0xeb, 0x06, 0x6b, 0xc7, 0x4d, + 0x38, 0xf6, 0xce, 0xcb, 0xdc, 0xdd, 0xa5, 0xda, 0x38, 0x09, 0x0e, 0xe3, + 0xca, 0x11, 0x7a, 0x69, 0x36, 0xe1, 0x52, 0xeb, 0x3e, 0x9b, 0x26, 0x23, + 0xc3, 0xb4, 0xa4, 0xa4, 0x63, 0xa6, 0x50, 0x5a, 0x09, 0x0f, 0xd4, 0x4f, + 0xf3, 0x8f, 0xff, 0x00, 0xc9, 0x2d, 0x5a, 0xc8, 0x18, 0xe4, 0x3b, 0x40, + 0x06, 0xbf, 0x00, 0x10, 0x89, 0xf2, 0x98, 0xd7, 0x84, 0x76, 0xb4, 0x1c, + 0x72, 0x39, 0x24, 0x42, 0x4a, 0x73, 0x3a, 0xd5, 0x2d, 0x6e, 0x38, 0x2d, + 0x27, 0x70, 0x2d, 0x8f, 0x0e, 0x7c, 0x17, 0x19, 0x9a, 0xe7, 0x37, 0x3a, + 0xc7, 0x7e, 0x73, 0x5c, 0x0f, 0xcc, 0x42, 0xed, 0xba, 0xe1, 0x23, 0x18, + 0x9f, 0x36, 0x8f, 0xc5, 0x71, 0x1d, 0x40, 0xce, 0x65, 0xbf, 0x1f, 0xe0, + 0x92, 0x9f, 0x42, 0xe8, 0xd9, 0x38, 0x37, 0xb5, 0xbd, 0x43, 0x1a, 0xc6, + 0x97, 0xd8, 0xd0, 0x1f, 0x54, 0x8d, 0xd5, 0x81, 0x12, 0xc2, 0xcf, 0x23, + 0xdf, 0xba, 0xda, 0x6e, 0x55, 0x36, 0x3a, 0x69, 0xad, 0xa6, 0xe3, 0xa9, + 0x2e, 0xd0, 0x00, 0x17, 0x9b, 0x7d, 0x5a, 0xa7, 0x2a, 0x8c, 0xec, 0x7c, + 0xb2, 0x36, 0x63, 0x5c, 0xe7, 0x52, 0x1e, 0xe3, 0x01, 0xe4, 0x88, 0xf6, + 0x8e, 0xf0, 0x48, 0x5d, 0xad, 0x56, 0xe2, 0x87, 0xbb, 0x1f, 0x2d, 0xad, + 0xd7, 0x42, 0xd7, 0x77, 0x49, 0x49, 0xdf, 0xd4, 0xaf, 0xf5, 0xb7, 0x5f, + 0xf6, 0x73, 0x1a, 0x06, 0x31, 0xdb, 0x9c, 0xef, 0x81, 0xf2, 0x5c, 0x5f, + 0xd7, 0x3c, 0xfa, 0xb2, 0x72, 0xea, 0xa6, 0xbf, 0xa5, 0x50, 0x73, 0xac, + 0xf2, 0x2f, 0x88, 0x1f, 0x70, 0x95, 0xd9, 0x66, 0x64, 0x60, 0xe3, 0xd1, + 0x65, 0xed, 0xd9, 0x63, 0xa9, 0x63, 0x9c, 0xc6, 0x34, 0x6a, 0x20, 0x76, + 0x5e, 0x5f, 0x95, 0x91, 0x66, 0x56, 0x45, 0x99, 0x16, 0x7d, 0x3b, 0x1c, + 0x5c, 0x7f, 0xb9, 0x25, 0x22, 0x49, 0x24, 0xa1, 0x25, 0x29, 0x24, 0x92, + 0x49, 0x4b, 0xed, 0x20, 0x07, 0x76, 0x3c, 0x7c, 0x93, 0x24, 0x92, 0x4a, + 0x7a, 0xef, 0xab, 0xe0, 0x9c, 0x0a, 0xa3, 0xf9, 0x5a, 0x7f, 0x69, 0x69, + 0xbc, 0xfb, 0xb5, 0xef, 0xaa, 0xcb, 0xfa, 0xbc, 0xe1, 0xf6, 0x2a, 0x87, + 0xf5, 0xa7, 0xef, 0x5a, 0x6f, 0xda, 0xdb, 0x20, 0x6b, 0x3a, 0x04, 0x94, + 0xe7, 0xfa, 0x54, 0x59, 0x9b, 0x60, 0xb1, 0xa0, 0x93, 0x11, 0x33, 0x3c, + 0x2b, 0xac, 0xc2, 0xc4, 0x03, 0x5a, 0x9a, 0x7c, 0xf5, 0x51, 0xa9, 0xb5, + 0x9c, 0x87, 0x00, 0x0b, 0xac, 0x20, 0x70, 0xd9, 0xed, 0xe3, 0x21, 0x5c, + 0x74, 0x8d, 0x20, 0xb7, 0x5f, 0x09, 0xff, 0x00, 0xa9, 0x29, 0x29, 0xa3, + 0x95, 0x86, 0xc6, 0xb0, 0x9a, 0x31, 0xeb, 0xdd, 0xdb, 0x76, 0xef, 0xef, + 0x54, 0xf0, 0xf0, 0x2d, 0xb2, 0xc7, 0x1c, 0xba, 0x6b, 0x8f, 0xcd, 0xdb, + 0x21, 0x6d, 0x93, 0xed, 0xef, 0xfe, 0x6b, 0x92, 0xdb, 0x03, 0x46, 0x92, + 0x7c, 0xe0, 0x7f, 0x14, 0x94, 0xd2, 0xfb, 0x06, 0x30, 0x98, 0xa8, 0x0f, + 0x83, 0x9d, 0xfd, 0xe8, 0x34, 0x63, 0xd3, 0x56, 0x5b, 0x2c, 0x6b, 0x0c, + 0xb1, 0xc0, 0x8f, 0x73, 0xb4, 0xd5, 0x5e, 0xf4, 0xed, 0x79, 0x98, 0x20, + 0x79, 0x46, 0xbf, 0x8a, 0xaf, 0x6e, 0xec, 0x63, 0xbd, 0xf3, 0xb0, 0x73, + 0x22, 0x7f, 0xbd, 0x25, 0x26, 0xce, 0xc2, 0xa1, 0xf9, 0x76, 0xbc, 0xb4, + 0xee, 0x79, 0x92, 0x43, 0x9c, 0x39, 0xf2, 0x05, 0x66, 0x67, 0xf4, 0xea, + 0x05, 0x44, 0xb5, 0xa4, 0x3b, 0xfa, 0xc7, 0xfb, 0xd6, 0xce, 0x7b, 0x89, + 0x7d, 0x56, 0x37, 0x56, 0xd9, 0x5b, 0x5d, 0x3f, 0xea, 0x16, 0x47, 0x50, + 0xbc, 0x37, 0x6b, 0x6c, 0x0e, 0xf7, 0x9d, 0x36, 0xc1, 0xfc, 0x12, 0x53, + 0xa0, 0x70, 0x31, 0xf2, 0x71, 0xb1, 0x2c, 0xb1, 0xa4, 0xb9, 0xb5, 0x06, + 0xc8, 0x71, 0x1a, 0x0f, 0x81, 0x51, 0xfd, 0x8d, 0x87, 0xfb, 0xae, 0xff, + 0x00, 0x3d, 0xdf, 0xde, 0xac, 0x62, 0xb5, 0xee, 0xe9, 0xb8, 0xfb, 0x7e, + 0x93, 0x65, 0xa5, 0x2f, 0x4f, 0x27, 0x76, 0xdd, 0xc3, 0xf8, 0xfe, 0x54, + 0x94, 0x87, 0xd5, 0xb0, 0x8f, 0xe6, 0xec, 0xfb, 0x87, 0xf7, 0xa9, 0xb6, + 0xe2, 0x1b, 0x06, 0xa7, 0xff, 0x00, 0x9b, 0xfe, 0xd4, 0x47, 0x4b, 0x66, + 0x60, 0x27, 0xa9, 0xbe, 0xa1, 0x3e, 0x03, 0x94, 0x94, 0x82, 0x41, 0xff, + 0x00, 0x04, 0xff, 0x00, 0x8e, 0xd4, 0xa2, 0xcf, 0xcd, 0x0e, 0x1f, 0x2f, + 0xf6, 0xab, 0x0d, 0xe7, 0x5d, 0x02, 0x9b, 0xe0, 0x1d, 0x81, 0xc9, 0x29, + 0xcd, 0xba, 0xbe, 0xa1, 0x6c, 0x0a, 0xec, 0x78, 0x23, 0x40, 0x03, 0x25, + 0x5e, 0x3d, 0x23, 0xad, 0xe3, 0xd2, 0xdb, 0xac, 0x8b, 0x24, 0x7b, 0x98, + 0xd1, 0x2f, 0x13, 0xd8, 0xb4, 0x2d, 0xbe, 0x91, 0xd3, 0xa8, 0x6c, 0x67, + 0xbd, 0xbb, 0xae, 0x20, 0x8a, 0xa7, 0x86, 0x8f, 0xde, 0x8f, 0x35, 0x6e, + 0xdb, 0xcf, 0xac, 0xd6, 0xb4, 0x7d, 0x12, 0x25, 0xde, 0x65, 0x25, 0x3c, + 0x96, 0x63, 0xb3, 0xb1, 0xf1, 0xb7, 0xdb, 0x5b, 0xaa, 0x93, 0x13, 0x63, + 0x4b, 0x04, 0x78, 0x09, 0xee, 0xb3, 0xa9, 0xe8, 0x7d, 0x47, 0x37, 0x11, + 0xed, 0xdb, 0xe9, 0xb5, 0xa1, 0xd6, 0x17, 0xb8, 0x19, 0x30, 0x37, 0x40, + 0xf3, 0xd1, 0x75, 0x9f, 0x5a, 0x2c, 0xff, 0x00, 0x23, 0xbd, 0xe4, 0x4b, + 0x83, 0xeb, 0x73, 0x67, 0xf7, 0x83, 0xa4, 0x2d, 0x76, 0x65, 0x62, 0xbf, + 0xa7, 0xd7, 0x99, 0x7b, 0xdb, 0x4d, 0x57, 0x56, 0xd7, 0x17, 0x38, 0xc0, + 0x1b, 0xdb, 0x31, 0xaa, 0x4a, 0x79, 0x4c, 0x46, 0x64, 0x57, 0x45, 0x59, + 0x15, 0x19, 0xdc, 0xc6, 0xb9, 0xcd, 0x3d, 0xcc, 0x22, 0xbf, 0xab, 0x5d, + 0x60, 0xf4, 0xcd, 0x1e, 0xfe, 0xc4, 0x8f, 0xe2, 0xad, 0xd3, 0x55, 0x47, + 0x19, 0xbf, 0x67, 0xb1, 0xb7, 0x53, 0xa8, 0xae, 0xc6, 0x99, 0x04, 0x03, + 0x09, 0x86, 0x05, 0xa5, 0xe1, 0xad, 0x6c, 0xd8, 0xed, 0x07, 0x82, 0x4a, + 0x78, 0x1c, 0xbb, 0xee, 0xcf, 0xea, 0x77, 0x37, 0x24, 0xed, 0x15, 0x87, + 0x0a, 0xdb, 0x1a, 0x00, 0x0f, 0xf1, 0x5d, 0x36, 0x15, 0x95, 0xd5, 0x89, + 0x50, 0x6e, 0xe3, 0x2d, 0x07, 0x46, 0xbb, 0xbf, 0xc9, 0x5a, 0xeb, 0xbf, + 0x57, 0xb1, 0xf1, 0xf0, 0xc6, 0x4d, 0x2e, 0x0d, 0xb5, 0x8d, 0x6d, 0x37, + 0xd8, 0xee, 0xed, 0x2e, 0x9d, 0xc3, 0xcc, 0x13, 0xf7, 0x21, 0xe3, 0x52, + 0xd7, 0x31, 0x8c, 0xad, 0xc0, 0xb5, 0xad, 0x01, 0xa4, 0x1d, 0x08, 0x03, + 0xc5, 0x25, 0x2c, 0xec, 0x86, 0x6d, 0x3a, 0x3c, 0x9f, 0x26, 0x3b, 0xfb, + 0x95, 0xda, 0x8f, 0xe8, 0xc7, 0x89, 0x02, 0x09, 0x54, 0xed, 0x86, 0x7b, + 0x41, 0xfb, 0xb5, 0x56, 0x99, 0x24, 0x34, 0xf6, 0x11, 0xa7, 0xc9, 0x25, + 0x34, 0x3a, 0xcb, 0x5f, 0x6b, 0x4d, 0x75, 0xb4, 0xbd, 0xe4, 0x86, 0xb5, + 0x8d, 0x12, 0x49, 0x27, 0xb2, 0xa3, 0x8d, 0xf5, 0x17, 0x23, 0x2b, 0x25, + 0xd7, 0x75, 0x1b, 0xbe, 0xcd, 0x59, 0x20, 0xec, 0x60, 0xde, 0xf2, 0x3c, + 0xdd, 0xf4, 0x5b, 0xf8, 0xae, 0xab, 0xa6, 0x52, 0xc7, 0x3a, 0xdc, 0x87, + 0x09, 0x20, 0x86, 0xb7, 0xcb, 0x49, 0x2a, 0xcd, 0xee, 0x60, 0x73, 0x20, + 0x91, 0x3a, 0x0e, 0xe0, 0x88, 0x49, 0x4e, 0x01, 0xc0, 0xb7, 0x0d, 0xe3, + 0x12, 0xf7, 0xb6, 0xfc, 0x2a, 0x61, 0x98, 0xae, 0x21, 0xa1, 0xf8, 0xe4, + 0x90, 0xe6, 0xee, 0x0d, 0x89, 0x1a, 0x72, 0xa7, 0x94, 0x1b, 0x63, 0x5c, + 0xcb, 0xd9, 0xee, 0x6f, 0x88, 0xd4, 0x7c, 0x0a, 0xd1, 0x2c, 0xa4, 0x17, + 0xba, 0xc6, 0xb5, 0xee, 0xfa, 0x05, 0xf1, 0xa9, 0x61, 0xd2, 0x0a, 0xcb, + 0x19, 0x2f, 0xa7, 0x24, 0xd1, 0x90, 0x7d, 0x5c, 0x70, 0x45, 0x6d, 0xb0, + 0xea, 0x5b, 0x3c, 0x07, 0x79, 0x78, 0x14, 0x94, 0xc6, 0x9c, 0x6a, 0xdd, + 0x8c, 0xfa, 0xeb, 0x91, 0xbd, 0xa4, 0x6e, 0xee, 0x34, 0xe5, 0x52, 0xbf, + 0xea, 0x93, 0x7a, 0x8e, 0x25, 0x56, 0xb4, 0x8c, 0x7c, 0xed, 0x92, 0xe3, + 0x1e, 0xcb, 0x08, 0xd3, 0xdd, 0x1f, 0x95, 0x75, 0x0e, 0x6e, 0x2d, 0x35, + 0x03, 0x63, 0x9b, 0x5d, 0x2d, 0xfa, 0x44, 0xf7, 0xf2, 0xf9, 0xaa, 0x59, + 0x99, 0x2f, 0xce, 0x61, 0x66, 0x1b, 0xad, 0xc2, 0xda, 0x76, 0xb2, 0xd2, + 0xd0, 0x09, 0x1d, 0xc8, 0x06, 0x60, 0x24, 0xa7, 0xce, 0xf3, 0x3a, 0x1f, + 0x56, 0xc2, 0xdc, 0x72, 0x31, 0x6c, 0x6b, 0x1b, 0xcd, 0x81, 0xbb, 0x99, + 0xfe, 0x7b, 0x64, 0x2a, 0x5d, 0xe0, 0x2f, 0x4e, 0xc7, 0xa7, 0xa9, 0xd0, + 0x1a, 0xe1, 0x9e, 0xfb, 0x48, 0x12, 0xe6, 0xbd, 0x8c, 0x21, 0xf1, 0xc8, + 0x30, 0x27, 0x55, 0xcb, 0xfd, 0x6e, 0xc1, 0xc5, 0xf5, 0x5b, 0x9f, 0x89, + 0x58, 0xa7, 0x7b, 0x83, 0x6f, 0x63, 0x7e, 0x8e, 0xe3, 0xa8, 0x77, 0x97, + 0x9a, 0x4a, 0x79, 0xf6, 0xd2, 0xc8, 0xd4, 0x8f, 0xbd, 0x3f, 0xa5, 0x5f, + 0x8b, 0x7e, 0xf4, 0xe6, 0xb0, 0x09, 0x0a, 0x25, 0x9a, 0x24, 0xa5, 0x8d, + 0x6d, 0x8e, 0x47, 0xde, 0x14, 0x1d, 0x5c, 0x70, 0x41, 0xf9, 0xa2, 0x6c, + 0x11, 0xc9, 0x51, 0x2d, 0x1e, 0x69, 0x29, 0xe9, 0xfa, 0x08, 0x23, 0x09, + 0x9d, 0xc0, 0x9f, 0xca, 0xb4, 0xcd, 0x60, 0xd8, 0xd7, 0x13, 0xa8, 0x95, + 0x9d, 0xf5, 0x7c, 0x01, 0x89, 0x5c, 0xf8, 0x3b, 0xf2, 0xad, 0x39, 0x9b, + 0x07, 0x6f, 0x00, 0x92, 0x90, 0x56, 0x6c, 0xaf, 0x35, 0xce, 0x63, 0x5e, + 0x5b, 0xb4, 0x7d, 0x16, 0x97, 0x6b, 0xa7, 0x82, 0xb3, 0xea, 0x37, 0x53, + 0xe9, 0x5c, 0xe7, 0x13, 0xa3, 0xb6, 0xb8, 0x11, 0xe4, 0x98, 0x5e, 0x28, + 0x73, 0xdc, 0x44, 0xbb, 0xb0, 0x9e, 0x56, 0x66, 0x65, 0x99, 0x39, 0x19, + 0x0d, 0xb0, 0xda, 0xe6, 0x39, 0xbc, 0x35, 0xa4, 0xed, 0x01, 0x25, 0x3a, + 0x87, 0x39, 0xed, 0x66, 0xd1, 0x55, 0xa4, 0xf6, 0xfd, 0x11, 0x9f, 0xca, + 0x81, 0x56, 0x7e, 0x59, 0x73, 0xbd, 0x6a, 0xec, 0x2d, 0xfc, 0xd2, 0x2a, + 0xec, 0x83, 0x5e, 0x4b, 0xeb, 0xd5, 0xc4, 0xbc, 0x8e, 0x67, 0x9f, 0x92, + 0x26, 0x13, 0x9c, 0xfb, 0x5c, 0xff, 0x00, 0x54, 0xbe, 0xb7, 0xea, 0xd1, + 0xd8, 0x24, 0xa6, 0x6d, 0xea, 0x76, 0x6b, 0x15, 0xda, 0x08, 0xd0, 0xfe, + 0x8b, 0xb7, 0xde, 0x81, 0x7e, 0x50, 0xb4, 0x8f, 0x59, 0x97, 0xbb, 0xf9, + 0x25, 0xb0, 0x3e, 0xe0, 0xaf, 0x16, 0x8d, 0xfb, 0xc7, 0xc3, 0xe2, 0x99, + 0xfb, 0x48, 0x26, 0x24, 0x04, 0x94, 0xbe, 0x56, 0x43, 0x46, 0x06, 0x25, + 0xcd, 0x6b, 0xe0, 0x82, 0xc2, 0xd6, 0xb6, 0x5c, 0x23, 0xcb, 0xb2, 0xcb, + 0xbb, 0x32, 0x86, 0x9d, 0x28, 0xb3, 0xd4, 0xfd, 0xfb, 0x1a, 0x64, 0x7e, + 0x55, 0xac, 0xe0, 0x1d, 0xd3, 0x9c, 0x22, 0x7d, 0x2b, 0x26, 0x3c, 0x9c, + 0xb3, 0xde, 0x4b, 0xa4, 0x06, 0xf9, 0x72, 0x42, 0x4a, 0x6d, 0xe2, 0x65, + 0xef, 0xe9, 0x16, 0x5a, 0x03, 0x9d, 0xe9, 0xbe, 0x36, 0xb4, 0x41, 0x3f, + 0x04, 0x1f, 0xda, 0x15, 0x6c, 0xfa, 0x39, 0x1b, 0xe3, 0xc3, 0xbf, 0xde, + 0x8f, 0xd3, 0x3f, 0xa1, 0x64, 0xb1, 0xc0, 0x43, 0x61, 0xc4, 0x7c, 0x90, + 0xbd, 0x6a, 0xf9, 0x86, 0xc7, 0x82, 0x4a, 0x6d, 0xef, 0xdc, 0x49, 0x20, + 0xc7, 0xf1, 0x53, 0x6b, 0x83, 0x5d, 0xed, 0xe0, 0xf2, 0x4f, 0x0b, 0x3d, + 0xdf, 0x6c, 0x65, 0x7b, 0xcd, 0xa0, 0xf0, 0x20, 0x55, 0x3c, 0xe9, 0xe2, + 0xa5, 0x19, 0xed, 0x1e, 0xeb, 0x20, 0x72, 0x4f, 0xa3, 0xa7, 0xe5, 0x49, + 0x4e, 0x83, 0x9e, 0x03, 0xa4, 0x08, 0xf1, 0x46, 0xa5, 0x9f, 0x68, 0xb5, + 0x8d, 0x63, 0x84, 0x13, 0xee, 0x8e, 0xc3, 0xb9, 0x59, 0x42, 0xbc, 0xa2, + 0xdd, 0xdf, 0x68, 0x6f, 0xc3, 0xd3, 0x1f, 0xf9, 0x25, 0x36, 0x8c, 0x97, + 0x51, 0x76, 0xfc, 0xb3, 0x8e, 0xd1, 0x1f, 0xa5, 0x63, 0x36, 0x99, 0x3d, + 0xb9, 0x29, 0x29, 0xea, 0x99, 0x95, 0x8e, 0xfb, 0x7e, 0xcb, 0x5b, 0xc0, + 0x75, 0x60, 0x4b, 0x01, 0xe1, 0xbd, 0x87, 0xcd, 0x57, 0xb5, 0xff, 0x00, + 0xac, 0xd0, 0xce, 0xee, 0x2f, 0xb0, 0xfc, 0x84, 0x05, 0xcd, 0x60, 0xdb, + 0x82, 0x6e, 0xa9, 0xcc, 0x87, 0xe7, 0x62, 0x07, 0x35, 0x97, 0x02, 0x41, + 0xb0, 0x38, 0x7d, 0x23, 0xe2, 0x7e, 0x2a, 0xef, 0xd5, 0xee, 0xa9, 0x77, + 0x54, 0xce, 0x7f, 0xda, 0x69, 0x75, 0x57, 0xe3, 0x34, 0xb1, 0xcd, 0x8f, + 0x68, 0xf1, 0xf9, 0xa4, 0xa6, 0xdf, 0xd6, 0x9b, 0x5a, 0x3a, 0x57, 0xa4, + 0x4f, 0xba, 0xc7, 0x02, 0x07, 0x8e, 0xc1, 0xaa, 0x87, 0x47, 0xc0, 0x77, + 0x51, 0xe9, 0x18, 0x9f, 0x6a, 0xb0, 0xbe, 0xac, 0x62, 0xe1, 0x5b, 0x0f, + 0x10, 0x38, 0x9f, 0x18, 0x44, 0xeb, 0xed, 0x76, 0x46, 0x35, 0x55, 0x57, + 0x4f, 0xad, 0x66, 0xf8, 0x60, 0x98, 0x32, 0xf0, 0x7c, 0xc6, 0x8a, 0xd7, + 0x41, 0x65, 0xf4, 0xe0, 0x3e, 0xab, 0xeb, 0xf4, 0x76, 0xbd, 0xc0, 0x32, + 0x41, 0x8e, 0xdc, 0x84, 0x94, 0xce, 0xac, 0x4b, 0x28, 0xac, 0x57, 0x5e, + 0xd3, 0x40, 0xd6, 0xb0, 0x46, 0xac, 0x9d, 0x48, 0xd3, 0xb4, 0xa8, 0xb2, + 0xde, 0xa5, 0x8d, 0x60, 0xb8, 0x86, 0xdd, 0x43, 0xa1, 0xaf, 0xa9, 0x8d, + 0xf7, 0xb2, 0x7f, 0x39, 0xa7, 0xbc, 0x78, 0x2b, 0xef, 0xd1, 0xa4, 0xd6, + 0xef, 0x70, 0xfc, 0xd3, 0xdd, 0x56, 0xce, 0xcb, 0xab, 0x03, 0x13, 0xd7, + 0xb8, 0xc3, 0x5a, 0x09, 0xdb, 0x3c, 0x9e, 0x04, 0xa4, 0xa7, 0x37, 0xeb, + 0x4f, 0x52, 0xa5, 0xbd, 0x21, 0xd4, 0x54, 0xf6, 0x59, 0x66, 0x51, 0x0c, + 0x6b, 0x5a, 0x64, 0x80, 0x0e, 0xe7, 0x13, 0xe0, 0xab, 0xfd, 0x59, 0xe8, + 0xf4, 0x9c, 0x17, 0x5d, 0x92, 0xd2, 0x45, 0xba, 0x56, 0x24, 0x82, 0x00, + 0xfc, 0xef, 0xbd, 0x63, 0x61, 0xe2, 0x59, 0xd5, 0x3a, 0xa0, 0x73, 0xb5, + 0x6d, 0xae, 0x2e, 0x7b, 0x80, 0x8d, 0x39, 0x71, 0x5d, 0xb5, 0xce, 0x6e, + 0x2e, 0x38, 0x63, 0x00, 0x6b, 0x5b, 0xb5, 0x8c, 0x68, 0xff, 0x00, 0x34, + 0x24, 0xa7, 0x37, 0x33, 0xa5, 0xd1, 0x56, 0x3b, 0xae, 0xa6, 0xc2, 0xd7, + 0xb4, 0x10, 0x1a, 0xf8, 0x3b, 0xf4, 0xe0, 0x70, 0xa9, 0xb5, 0xc4, 0x30, + 0x38, 0x6b, 0xa0, 0xd3, 0xc5, 0x69, 0xf5, 0x6b, 0x2a, 0x0d, 0xac, 0x38, + 0x4e, 0xd7, 0x02, 0x7e, 0x61, 0x62, 0x3b, 0xa8, 0x53, 0x82, 0x58, 0x5f, + 0xef, 0xbe, 0x41, 0xaa, 0x96, 0xfb, 0x9e, 0xef, 0x0f, 0x6f, 0xf0, 0x49, + 0x4f, 0x4d, 0x55, 0x6c, 0xc5, 0xa0, 0x31, 0xde, 0xdd, 0x03, 0x9c, 0x4e, + 0x9a, 0x9e, 0x55, 0x1c, 0xcc, 0x47, 0xe4, 0x5d, 0x45, 0xcc, 0x2e, 0x0c, + 0x69, 0x2e, 0x21, 0xa7, 0xc0, 0x1e, 0xde, 0x05, 0x73, 0x5d, 0x4b, 0xa9, + 0xf5, 0x77, 0x3b, 0x19, 0xf9, 0x20, 0x63, 0xd7, 0x98, 0xf2, 0xd6, 0x17, + 0x9d, 0xcf, 0x68, 0xfd, 0xe2, 0xc1, 0x11, 0xf7, 0xaa, 0xb8, 0xce, 0xea, + 0xde, 0xbb, 0x86, 0x2e, 0x68, 0x75, 0xf3, 0xfa, 0x3a, 0xc8, 0x2c, 0xdd, + 0xac, 0x1d, 0xd3, 0xed, 0x10, 0x92, 0x9e, 0xba, 0xe0, 0xd1, 0x5e, 0xe3, + 0xa1, 0xdc, 0x24, 0x4f, 0x75, 0x54, 0x63, 0xd6, 0xf0, 0xf7, 0x3b, 0x51, + 0x1e, 0xe6, 0xc4, 0xcc, 0x76, 0x28, 0x75, 0x9c, 0xce, 0x32, 0xae, 0xaa, + 0xeb, 0x21, 0xa1, 0xc2, 0xb1, 0x02, 0x62, 0x4f, 0x7f, 0x14, 0x77, 0xb4, + 0xb5, 0xae, 0x30, 0x4b, 0x9b, 0x0e, 0x23, 0xf2, 0xa4, 0xa6, 0x57, 0xd2, + 0xed, 0xcd, 0x78, 0x02, 0xd6, 0x81, 0xa3, 0x49, 0xfe, 0x6c, 0x7f, 0x25, + 0x3f, 0xa8, 0xc0, 0x25, 0xcd, 0x20, 0xf7, 0x05, 0x0e, 0xf0, 0xda, 0xe7, + 0x93, 0xbf, 0x53, 0x3c, 0x14, 0xa9, 0x6b, 0xac, 0x2e, 0x71, 0x88, 0x1c, + 0x42, 0x4a, 0x57, 0xda, 0x1a, 0x25, 0xec, 0x3f, 0xcd, 0x83, 0xe3, 0xdb, + 0xb2, 0xc3, 0xfa, 0xc5, 0x49, 0xbf, 0x0f, 0x3b, 0x68, 0x91, 0x8f, 0x55, + 0x0f, 0x76, 0x9f, 0x9e, 0xe7, 0xeb, 0xf7, 0x05, 0xa9, 0x96, 0xc6, 0x55, + 0x8a, 0xfd, 0xe7, 0xd8, 0xe2, 0xd6, 0xbc, 0x91, 0x1c, 0xb8, 0x21, 0x55, + 0x50, 0xcb, 0xc2, 0xea, 0xcd, 0xff, 0x00, 0x4e, 0xd7, 0x31, 0xa0, 0x7f, + 0x21, 0x9e, 0xd4, 0x94, 0xf0, 0x4c, 0x32, 0xc6, 0x9e, 0x74, 0x48, 0x8d, + 0x27, 0x45, 0x1a, 0xbf, 0x9b, 0x1f, 0x3f, 0xca, 0xa4, 0x4c, 0x76, 0x99, + 0xf0, 0x49, 0x4b, 0x6d, 0x1d, 0xdc, 0x3e, 0xf5, 0x07, 0x34, 0x78, 0xfe, + 0x2a, 0x73, 0xe4, 0x7f, 0x05, 0x03, 0x13, 0xa8, 0x23, 0xee, 0x49, 0x4f, + 0x51, 0xf5, 0x7d, 0xa1, 0xd8, 0x95, 0x83, 0x1c, 0x1d, 0x7b, 0x7d, 0x25, + 0xa6, 0xf1, 0xb1, 0xdb, 0x86, 0xb1, 0xc9, 0x59, 0xbf, 0x57, 0x84, 0xe1, + 0xb3, 0xe0, 0xe3, 0xff, 0x00, 0x49, 0x1b, 0xab, 0xe4, 0x3a, 0x8c, 0x4b, + 0x1c, 0xce, 0x62, 0x27, 0xb0, 0x94, 0x94, 0xd4, 0xb7, 0xa9, 0x07, 0xe5, + 0x6d, 0xad, 0xbb, 0xde, 0xe3, 0xb2, 0xb6, 0xf9, 0xa9, 0x64, 0x5d, 0x55, + 0x4e, 0x15, 0xb9, 0xfe, 0xf6, 0x9f, 0x7f, 0xf5, 0xbb, 0x85, 0x4b, 0xea, + 0xc6, 0x3d, 0xb9, 0x5d, 0x44, 0x58, 0x1a, 0x6c, 0x75, 0x4c, 0x75, 0xb1, + 0xe6, 0x3e, 0x8f, 0xfd, 0x25, 0xa1, 0x4f, 0xd5, 0xc7, 0x66, 0xdb, 0x70, + 0x7b, 0x2f, 0xaa, 0xc8, 0x24, 0x3d, 0xc3, 0x68, 0xdd, 0x1a, 0xe8, 0x79, + 0x92, 0x92, 0x9a, 0xef, 0xcb, 0xa8, 0x0d, 0xed, 0x33, 0x1a, 0xc7, 0x90, + 0x4b, 0x0f, 0x34, 0x55, 0x9a, 0x2b, 0x9f, 0xd1, 0x5d, 0xc7, 0x80, 0x2e, + 0xff, 0x00, 0x6a, 0xcb, 0x1d, 0x2b, 0xaa, 0x8c, 0x81, 0x40, 0xa9, 0xee, + 0x97, 0x41, 0x70, 0x69, 0xdb, 0xf1, 0x95, 0x5c, 0x1b, 0xea, 0xc9, 0x6d, + 0x2f, 0xfe, 0x72, 0xb7, 0x16, 0x47, 0x9c, 0xff, 0x00, 0x7a, 0x4a, 0x7b, + 0x47, 0x48, 0x28, 0x42, 0xcb, 0x35, 0x6b, 0x80, 0xf9, 0x29, 0xb1, 0xd6, + 0xfd, 0x9d, 0x9e, 0xa3, 0xb7, 0x59, 0x12, 0xe7, 0x10, 0x1a, 0x75, 0xf2, + 0x0a, 0xb6, 0xfb, 0x0b, 0xcb, 0x43, 0xbb, 0x83, 0xaf, 0xc0, 0xa4, 0xa7, + 0x4b, 0x15, 0xdb, 0xf1, 0x32, 0xab, 0xee, 0x1a, 0x1c, 0x07, 0xc1, 0x66, + 0x39, 0xc4, 0xf7, 0x85, 0x73, 0xa3, 0x39, 0xff, 0x00, 0x6a, 0xb6, 0x9b, + 0x1d, 0xb8, 0xbe, 0xb7, 0x0d, 0x7b, 0x9f, 0x15, 0x99, 0x71, 0x7b, 0x2c, + 0x02, 0x63, 0xdd, 0x04, 0x24, 0xa7, 0x5b, 0xa4, 0xc1, 0x19, 0x0c, 0xfd, + 0xe6, 0x7f, 0xb1, 0x56, 0xd3, 0x88, 0x56, 0x7a, 0x41, 0x1f, 0x6d, 0x35, + 0x9e, 0x1e, 0xc3, 0xfc, 0x0a, 0x8e, 0xcf, 0xd6, 0x3d, 0x1d, 0x3e, 0x9e, + 0xd9, 0x8f, 0x34, 0x94, 0xc9, 0x97, 0x3f, 0x61, 0x0e, 0x74, 0x00, 0x9a, + 0xcc, 0x87, 0x1a, 0x9e, 0xd9, 0x9f, 0x69, 0xfc, 0x8a, 0xb9, 0x71, 0x70, + 0xd7, 0x40, 0x78, 0xf8, 0xa9, 0xd8, 0x65, 0x86, 0x47, 0xe6, 0x9f, 0xc8, + 0x92, 0x92, 0xb5, 0xa4, 0x0d, 0x39, 0x27, 0x8f, 0x8a, 0xb1, 0x96, 0xea, + 0xf1, 0x71, 0x7d, 0x26, 0xba, 0x5e, 0x04, 0xbd, 0xdf, 0xca, 0x43, 0x2d, + 0x76, 0xe2, 0x47, 0x00, 0xac, 0xbe, 0xad, 0x95, 0x0d, 0x35, 0x8e, 0x5c, + 0x92, 0x9a, 0xb4, 0xdd, 0x43, 0x9e, 0x5f, 0x93, 0x53, 0xdc, 0xe7, 0x9d, + 0xb5, 0x3f, 0x1e, 0x03, 0x98, 0xef, 0x1d, 0xae, 0xfa, 0x5f, 0x7a, 0xd9, + 0xe9, 0xdd, 0x4e, 0xdc, 0x4c, 0xb0, 0x32, 0x9b, 0xef, 0x20, 0xb0, 0x59, + 0xc3, 0x6c, 0x1f, 0x90, 0x3b, 0x45, 0x99, 0xd2, 0xb1, 0xa4, 0x8c, 0x87, + 0x70, 0xd1, 0x0c, 0xf8, 0x9e, 0x4a, 0xde, 0xc3, 0xc5, 0xc7, 0xc8, 0xa7, + 0x25, 0x99, 0x20, 0x3a, 0x97, 0x34, 0x17, 0x03, 0xa1, 0x1b, 0x24, 0xee, + 0x1e, 0x04, 0x78, 0xa4, 0xa7, 0x3f, 0xeb, 0x77, 0x50, 0xf5, 0xac, 0xc3, + 0xc7, 0xa6, 0xc3, 0xb5, 0x8d, 0xde, 0xed, 0xa6, 0x3d, 0xce, 0x3a, 0x4f, + 0x81, 0x10, 0xb1, 0xaa, 0xc9, 0xc9, 0xa0, 0x93, 0x45, 0xcf, 0xad, 0xc4, + 0xcc, 0xb1, 0xe4, 0x12, 0x7c, 0xfc, 0x51, 0x1b, 0x9b, 0x89, 0x7b, 0xdd, + 0x8f, 0x97, 0xb8, 0xd6, 0xc2, 0x45, 0x19, 0x27, 0xe9, 0x35, 0xa7, 0xe8, + 0xef, 0x53, 0xbf, 0x02, 0xea, 0xd8, 0x1e, 0xc6, 0x7a, 0xec, 0xe4, 0x5b, + 0x59, 0x90, 0x47, 0xc0, 0x4c, 0x24, 0xa6, 0xd3, 0x3e, 0xb1, 0xf5, 0xba, + 0xf1, 0xff, 0x00, 0xa5, 0x39, 0xde, 0xf8, 0x05, 0xed, 0x6b, 0x8c, 0x47, + 0x1c, 0x28, 0xd9, 0xf5, 0x8b, 0xac, 0xd8, 0x76, 0x59, 0x7b, 0x5d, 0x3c, + 0xb1, 0xcc, 0x69, 0x69, 0x1e, 0x0e, 0x1b, 0x55, 0x07, 0x5d, 0x58, 0x60, + 0xac, 0x34, 0xb4, 0xcc, 0xf3, 0xac, 0xc4, 0x78, 0x28, 0x3a, 0xab, 0x68, + 0xb4, 0xd5, 0x6b, 0x5c, 0xcb, 0x34, 0x25, 0xaf, 0x10, 0xed, 0x44, 0xa4, + 0xa7, 0xa7, 0xfa, 0xaa, 0xfa, 0xee, 0xdf, 0x77, 0xa7, 0xb3, 0x21, 0x96, + 0x38, 0x3d, 0xcd, 0x24, 0x56, 0xd6, 0x11, 0xfb, 0x8b, 0x40, 0xe6, 0x7d, + 0xaf, 0x25, 0xd7, 0x3c, 0xed, 0xa6, 0xb2, 0x76, 0x0f, 0x21, 0xdf, 0xe2, + 0x57, 0x31, 0xd1, 0x73, 0x72, 0x5b, 0x5e, 0x7e, 0x36, 0x2b, 0x66, 0xeb, + 0x98, 0x0b, 0x1d, 0x1a, 0x34, 0xea, 0x0e, 0xaa, 0xcd, 0xf9, 0xf7, 0x43, + 0x7a, 0x6f, 0x4f, 0x1e, 0xbe, 0x73, 0xf9, 0x0c, 0xd5, 0xac, 0xf1, 0x32, + 0x78, 0x8f, 0x14, 0x94, 0xcf, 0xaf, 0xfd, 0x62, 0xf4, 0x89, 0xae, 0xb2, + 0x1f, 0x92, 0x60, 0xb4, 0x34, 0x68, 0xcd, 0x3f, 0x3b, 0xcd, 0x5e, 0xe8, + 0xfd, 0x34, 0x61, 0xe2, 0x55, 0xd4, 0x03, 0xc5, 0xd9, 0xd9, 0x20, 0x3d, + 0xf9, 0x0f, 0x1c, 0x34, 0xf0, 0xc6, 0x03, 0xc0, 0xf1, 0x3d, 0xd6, 0x20, + 0xfa, 0xbf, 0x65, 0x38, 0xb9, 0x62, 0xe7, 0x0b, 0x72, 0xdc, 0x04, 0xbd, + 0xba, 0x8d, 0x0e, 0xe2, 0x1b, 0x2b, 0x6b, 0x07, 0x2c, 0x55, 0xd2, 0x28, + 0x6d, 0x9a, 0x1a, 0x4e, 0xcf, 0x70, 0x31, 0x1c, 0x8f, 0xca, 0x92, 0x9c, + 0x5f, 0xad, 0x77, 0x5f, 0x94, 0x2a, 0x7f, 0xa6, 0x6b, 0xf4, 0xe5, 0xad, + 0x00, 0xcc, 0x99, 0xdd, 0xb9, 0xbd, 0xd5, 0x5e, 0x98, 0xcc, 0x8c, 0xeb, + 0x00, 0xb2, 0xe7, 0x54, 0xf8, 0x01, 0xce, 0x6f, 0xd2, 0x70, 0xf1, 0x3e, + 0x6a, 0xdf, 0x5b, 0xca, 0xc7, 0xb1, 0xa4, 0xd6, 0x6a, 0x19, 0x73, 0xfa, + 0x36, 0x57, 0xef, 0x71, 0x07, 0x92, 0x4f, 0xe6, 0xc0, 0x58, 0x9d, 0x2e, + 0xfc, 0xba, 0xb2, 0x1a, 0xea, 0xde, 0x6b, 0x60, 0x77, 0xb8, 0x44, 0xb6, + 0x26, 0x48, 0x49, 0x4f, 0x75, 0x8b, 0xd3, 0xb1, 0xb1, 0x00, 0xd8, 0xe7, + 0x39, 0xee, 0x1a, 0xbd, 0xc6, 0x49, 0x56, 0x2c, 0xb0, 0x97, 0x90, 0x0c, + 0xb5, 0xde, 0xd3, 0x1d, 0xbe, 0x28, 0x38, 0x6e, 0x17, 0xd2, 0xdb, 0x1b, + 0x13, 0xf1, 0x95, 0x0c, 0x8c, 0xba, 0xf0, 0x68, 0x7d, 0x97, 0xeb, 0x2e, + 0xd0, 0x37, 0x97, 0x3b, 0xb0, 0x09, 0x29, 0x3d, 0xc3, 0xd7, 0xae, 0xb7, + 0xc9, 0x25, 0xa3, 0x8f, 0x11, 0xc1, 0x9f, 0x84, 0x27, 0x65, 0x82, 0xb6, + 0x92, 0xc6, 0x4c, 0x72, 0x1b, 0xaa, 0xa9, 0x83, 0x7d, 0xb9, 0x4c, 0x7d, + 0xa1, 0x84, 0x1e, 0xc2, 0x41, 0xdb, 0x3d, 0xa4, 0x2b, 0x53, 0x63, 0x5a, + 0xd7, 0x34, 0x12, 0x1c, 0x26, 0x23, 0x83, 0xdd, 0x25, 0x35, 0xba, 0x93, + 0xeb, 0xc8, 0xc1, 0x73, 0x58, 0x64, 0xee, 0x6b, 0xcc, 0x7f, 0x24, 0x83, + 0x09, 0xfa, 0x31, 0x63, 0x31, 0x06, 0xed, 0x4d, 0x8f, 0x26, 0x3e, 0x70, + 0xa1, 0x9f, 0x8a, 0x6d, 0xc7, 0xbd, 0xd5, 0x4b, 0x1c, 0x2b, 0x73, 0x8e, + 0xd1, 0x12, 0x40, 0x9e, 0x50, 0xba, 0x40, 0x75, 0xd4, 0x31, 0xc1, 0xa7, + 0xd3, 0x10, 0x18, 0xd0, 0x60, 0xfc, 0x4a, 0x4a, 0x78, 0xac, 0xaa, 0x1d, + 0x8d, 0x93, 0x76, 0x39, 0x10, 0x6b, 0xb1, 0xed, 0xfb, 0x9c, 0x42, 0x11, + 0xec, 0xb6, 0xfe, 0xb5, 0xe3, 0x7a, 0x3d, 0x50, 0xda, 0x07, 0xb7, 0x25, + 0xbe, 0xa7, 0xf6, 0xa7, 0x6b, 0xbf, 0x22, 0xc4, 0x8d, 0x42, 0x4a, 0x58, + 0xa8, 0x95, 0x30, 0x09, 0xd0, 0x28, 0x96, 0x99, 0x88, 0x49, 0x4f, 0x51, + 0xf5, 0x78, 0x4e, 0x23, 0x3c, 0x48, 0x31, 0xfe, 0x72, 0xb5, 0x9b, 0x8c, + 0x32, 0x2a, 0xb6, 0x99, 0xda, 0x2d, 0x6c, 0x4c, 0x4c, 0x2a, 0xfd, 0x04, + 0x1f, 0xb0, 0xd7, 0xa7, 0x67, 0x71, 0xfd, 0x65, 0xa5, 0x63, 0x5a, 0x1c, + 0x09, 0x70, 0x81, 0xcb, 0x8c, 0x01, 0xaf, 0x8a, 0x4a, 0x73, 0x7e, 0xa8, + 0xb1, 0xfd, 0x3b, 0xa9, 0xe5, 0xd3, 0x70, 0xf7, 0x6d, 0x6e, 0xcf, 0xe5, + 0x34, 0x1e, 0x42, 0xea, 0x2f, 0xea, 0x02, 0xb1, 0xb9, 0x8e, 0xa9, 0x8e, + 0x33, 0xb9, 0x8f, 0xdc, 0x23, 0xfc, 0xd0, 0xb3, 0x9f, 0xd3, 0xb2, 0xeb, + 0x76, 0xf2, 0xc2, 0x41, 0x32, 0x2c, 0x66, 0xb0, 0x23, 0xc9, 0x0a, 0xee, + 0xa7, 0x75, 0x55, 0x86, 0x5d, 0x8a, 0x32, 0x1a, 0xdd, 0x03, 0x9a, 0x52, + 0x53, 0xa0, 0xdc, 0xea, 0x5d, 0x4c, 0x82, 0xcb, 0x08, 0xfa, 0x65, 0x9d, + 0x8f, 0xce, 0x17, 0x19, 0xd3, 0x70, 0x2c, 0xcb, 0xcf, 0xbf, 0xa8, 0xdc, + 0xd8, 0xa1, 0xaf, 0x71, 0xac, 0x9f, 0xce, 0x79, 0x3a, 0x47, 0x90, 0x5d, + 0x05, 0x56, 0x66, 0xe6, 0xbd, 0x8e, 0xf4, 0x43, 0x2a, 0x2e, 0x0c, 0x6b, + 0x66, 0x40, 0x9f, 0xdf, 0x52, 0xc8, 0xaa, 0xff, 0x00, 0xda, 0x23, 0x1a, + 0xaf, 0x7d, 0x15, 0x33, 0x7b, 0xc8, 0xd3, 0x71, 0xfa, 0x20, 0x34, 0x78, + 0x24, 0xa4, 0x6f, 0x27, 0x60, 0xd3, 0x95, 0x59, 0xad, 0x22, 0xf2, 0x08, + 0x8e, 0x26, 0x7e, 0x6b, 0x52, 0x97, 0xd7, 0x5b, 0xed, 0xab, 0x22, 0x90, + 0xdb, 0xa9, 0x6e, 0xfa, 0x9c, 0x09, 0x2d, 0x7b, 0x49, 0xd1, 0xde, 0xee, + 0xe3, 0x49, 0x0b, 0x3b, 0x73, 0xbd, 0x7d, 0xee, 0xd4, 0x93, 0x27, 0xee, + 0x25, 0x25, 0x33, 0xc1, 0x21, 0x9d, 0x51, 0x8f, 0xec, 0x20, 0x1f, 0xed, + 0x68, 0xab, 0x75, 0x3a, 0xf6, 0x65, 0xd8, 0xd8, 0xe2, 0xcf, 0xcb, 0xaa, + 0x2d, 0x4f, 0x06, 0xcf, 0x55, 0xbc, 0x7b, 0x5d, 0xfc, 0x51, 0x3a, 0xdb, + 0x07, 0xda, 0x4b, 0xe7, 0xe9, 0x86, 0xbb, 0xf0, 0x49, 0x4a, 0xe9, 0xee, + 0xdb, 0xd4, 0x6b, 0xed, 0x20, 0xb7, 0xf0, 0x56, 0xb6, 0x1f, 0xda, 0x71, + 0xfc, 0xad, 0xdf, 0x84, 0xaa, 0x38, 0xba, 0x67, 0x55, 0xac, 0x7b, 0x82, + 0xd7, 0xf4, 0xbf, 0xca, 0x5b, 0xbf, 0x93, 0xb9, 0x25, 0x39, 0x02, 0xb3, + 0xf2, 0x52, 0xb0, 0x90, 0xd7, 0xb3, 0xc1, 0x93, 0xf7, 0xca, 0x55, 0xec, + 0x87, 0x6b, 0xa8, 0xe5, 0x49, 0xe0, 0x3b, 0x71, 0xfe, 0x44, 0x24, 0xa5, + 0x7a, 0x96, 0xb9, 0xef, 0x69, 0x30, 0x1b, 0x1f, 0x79, 0x0a, 0x87, 0x50, + 0xa4, 0xd9, 0x63, 0x49, 0x3a, 0x06, 0x93, 0xf3, 0x6a, 0xd0, 0x1f, 0x4d, + 0xfd, 0x80, 0x30, 0xaa, 0xe6, 0x44, 0x13, 0xdf, 0x63, 0xbf, 0x22, 0x4a, + 0x6c, 0x56, 0xe6, 0x8f, 0xd1, 0xb1, 0xbb, 0x5a, 0xc0, 0x22, 0x3c, 0xd4, + 0xfa, 0x86, 0x57, 0xd9, 0x7a, 0x3b, 0x8b, 0x09, 0x6d, 0xb9, 0x2f, 0x34, + 0xb6, 0x39, 0xd9, 0x12, 0xf4, 0x1a, 0x8e, 0xa7, 0xcd, 0xad, 0x54, 0x3a, + 0xc6, 0x60, 0xc8, 0xba, 0xba, 0x6b, 0x3e, 0xcc, 0x46, 0x06, 0x0f, 0x3b, + 0x5e, 0x77, 0x3c, 0xa4, 0xa7, 0x3a, 0xa6, 0x43, 0x7c, 0xdc, 0x75, 0x47, + 0xa6, 0xdc, 0x8c, 0x57, 0x6e, 0xc6, 0xb5, 0xd4, 0xb8, 0xea, 0x43, 0x75, + 0x6f, 0x3d, 0xda, 0x54, 0x76, 0xc0, 0x6b, 0x7c, 0x14, 0xac, 0x75, 0x6e, + 0x3a, 0x1d, 0xa4, 0x08, 0x24, 0xf1, 0xf2, 0x29, 0x29, 0xb9, 0x47, 0x57, + 0xcc, 0x6d, 0xcc, 0x76, 0x43, 0x2a, 0xb9, 0x8d, 0x21, 0xcf, 0x73, 0x5a, + 0xd6, 0xdb, 0x03, 0xf7, 0x49, 0x69, 0x12, 0xa5, 0x95, 0xd7, 0xb3, 0x2f, + 0xb1, 0xe6, 0x9a, 0x8d, 0x94, 0x17, 0x9b, 0x36, 0xe4, 0xb5, 0x8e, 0x2c, + 0x24, 0x7e, 0xf3, 0x1a, 0x26, 0x56, 0x73, 0xb4, 0x30, 0x5e, 0xd1, 0xa0, + 0xef, 0x3a, 0x7c, 0x95, 0x9c, 0x5c, 0x4a, 0xee, 0x65, 0xb9, 0x01, 0x8e, + 0x3e, 0x90, 0x87, 0x38, 0x48, 0x6c, 0x47, 0x7f, 0xe0, 0x92, 0x9a, 0x99, + 0x3d, 0x57, 0xa9, 0x5e, 0x05, 0x46, 0xc1, 0x55, 0x4e, 0x99, 0x65, 0x40, + 0x30, 0x69, 0xf0, 0x5b, 0x78, 0x21, 0xf8, 0x1d, 0x35, 0xd6, 0x61, 0xbc, + 0xd1, 0x6b, 0xc6, 0xe7, 0xb8, 0x43, 0x8b, 0xcf, 0x6d, 0xdb, 0x81, 0x95, + 0x81, 0x8f, 0x58, 0xb3, 0x26, 0xba, 0xc8, 0x2f, 0xde, 0x5c, 0xd0, 0x07, + 0x72, 0x41, 0x8f, 0xc5, 0x76, 0x3f, 0xb3, 0xbd, 0x2c, 0x32, 0xdb, 0x1d, + 0xf9, 0xbc, 0x7c, 0x92, 0x52, 0xf5, 0xd8, 0x76, 0x56, 0x5f, 0xab, 0xde, + 0x25, 0xc4, 0x08, 0x97, 0x46, 0xa8, 0x79, 0x18, 0xee, 0xc9, 0xc0, 0x14, + 0xc9, 0x1b, 0xc0, 0x1b, 0xbc, 0x24, 0x29, 0x56, 0x74, 0xaf, 0xc9, 0xa4, + 0xfe, 0x0b, 0x9b, 0xb7, 0xeb, 0x15, 0xee, 0xa8, 0x53, 0x59, 0x7e, 0x3d, + 0x8c, 0x30, 0xd3, 0xd9, 0xd1, 0xc7, 0xc1, 0x25, 0x37, 0x6d, 0xe9, 0x58, + 0xdd, 0x33, 0x05, 0xe2, 0xbf, 0x75, 0xaf, 0x2d, 0xdd, 0x63, 0xb9, 0x22, + 0x66, 0x07, 0x80, 0x59, 0x8c, 0xc3, 0xc8, 0x17, 0xbf, 0x25, 0xe3, 0x6d, + 0x04, 0xed, 0x6c, 0xe9, 0xb8, 0x91, 0xd8, 0x79, 0x78, 0xa9, 0x3b, 0xeb, + 0x05, 0xd7, 0xd6, 0x6b, 0xcb, 0x60, 0xb0, 0x4f, 0xd3, 0x6f, 0xb5, 0xc0, + 0xf9, 0x88, 0x85, 0x2c, 0x8b, 0x73, 0x33, 0x19, 0x5e, 0xc6, 0xbd, 0x95, + 0x01, 0x15, 0xb7, 0x46, 0x88, 0x03, 0xf1, 0x49, 0x4d, 0xdc, 0x3e, 0xad, + 0x6e, 0x21, 0x75, 0x45, 0xc1, 0xad, 0x78, 0x22, 0x4e, 0xa1, 0xa7, 0xb1, + 0x45, 0x75, 0xf9, 0xd7, 0xe4, 0x55, 0x6e, 0x5d, 0x0e, 0x75, 0x14, 0xb6, + 0x5a, 0xea, 0x5a, 0x5e, 0xd2, 0x4f, 0xe7, 0x12, 0xd9, 0x58, 0xed, 0xc0, + 0x73, 0x9a, 0x5d, 0x75, 0xae, 0x00, 0x6a, 0x7d, 0xd1, 0xa2, 0x6a, 0xab, + 0xa8, 0x18, 0xc7, 0x7d, 0xaf, 0x77, 0x8b, 0x1c, 0xe0, 0xdf, 0xf3, 0x92, + 0x53, 0xa7, 0x9d, 0xd7, 0xef, 0xa7, 0x31, 0x8e, 0xe9, 0xac, 0x70, 0xa1, + 0x8c, 0x01, 0xe6, 0x0e, 0xaf, 0x9f, 0xce, 0x04, 0x76, 0x50, 0x7f, 0x5f, + 0xeb, 0x39, 0x56, 0x7e, 0x83, 0x28, 0xb2, 0x41, 0x77, 0xa3, 0xb4, 0x37, + 0x6c, 0x7f, 0x2e, 0x0c, 0xa5, 0x88, 0x3e, 0xcf, 0x69, 0xb2, 0xc7, 0x19, + 0x7b, 0x5c, 0xdd, 0xbb, 0x9d, 0xa6, 0xe1, 0x1d, 0xe7, 0xef, 0x50, 0xbb, + 0x23, 0x76, 0xd0, 0xd6, 0x39, 0xc5, 0xbf, 0x4c, 0x91, 0xdb, 0xcc, 0x94, + 0x94, 0xdc, 0xc2, 0xea, 0x99, 0xdf, 0x64, 0xb2, 0xcc, 0xec, 0x87, 0x59, + 0x8b, 0x04, 0x5b, 0x5d, 0x7e, 0xe7, 0x81, 0xc3, 0xa5, 0xce, 0xe3, 0x9e, + 0x00, 0x57, 0xba, 0x6b, 0x71, 0xb1, 0xf0, 0xcd, 0xcc, 0x70, 0xaf, 0xd4, + 0xf7, 0x54, 0x0c, 0xc8, 0x61, 0xfa, 0x24, 0x97, 0x72, 0x61, 0x60, 0x7d, + 0xa2, 0xcc, 0x3b, 0x1d, 0x6b, 0x6a, 0x9a, 0x1e, 0xdd, 0xb9, 0x0c, 0x07, + 0xe9, 0xd6, 0xed, 0x24, 0x88, 0xe4, 0x4a, 0xd0, 0xe9, 0x74, 0x3a, 0x80, + 0x72, 0x43, 0xcd, 0x6c, 0x07, 0xe8, 0x80, 0xd3, 0xb9, 0xbf, 0x9a, 0x7d, + 0xd3, 0x02, 0x3c, 0x92, 0x52, 0x5f, 0xad, 0x74, 0xbe, 0xce, 0x9f, 0x8d, + 0x94, 0xe1, 0x2e, 0xae, 0xc2, 0xc9, 0xfe, 0x4b, 0xdb, 0x23, 0xfe, 0xa5, + 0x72, 0x90, 0x49, 0x11, 0xca, 0xec, 0x7a, 0x9d, 0xa3, 0x27, 0xa3, 0x65, + 0xb9, 0xe5, 0xb0, 0x36, 0xb9, 0x83, 0x76, 0xe7, 0x48, 0x70, 0x3d, 0xe1, + 0x72, 0x35, 0x8f, 0xd2, 0x03, 0xc7, 0x3c, 0xa4, 0xa5, 0xb6, 0xc3, 0x4f, + 0x88, 0xd6, 0x54, 0x5e, 0xc8, 0x6c, 0xcc, 0x8f, 0x25, 0x70, 0x30, 0x1f, + 0x0d, 0x50, 0x45, 0x7b, 0xdf, 0xe8, 0xb4, 0x17, 0xbd, 0xe4, 0x35, 0x80, + 0x6a, 0x4b, 0x89, 0x80, 0x12, 0x53, 0xd1, 0x7d, 0x5f, 0x04, 0xe0, 0xd4, + 0xd6, 0xf2, 0x58, 0xef, 0xc1, 0xc8, 0xd9, 0x38, 0x2f, 0xea, 0x6c, 0x06, + 0xcb, 0x5f, 0x46, 0x3d, 0xb0, 0x28, 0x7b, 0x36, 0xba, 0xb2, 0xee, 0xde, + 0xa0, 0xe7, 0x55, 0x6a, 0xfc, 0x1a, 0xfa, 0x2f, 0x4d, 0xc6, 0xe9, 0xce, + 0x25, 0xd9, 0xb9, 0x30, 0xcb, 0xee, 0x6f, 0x0c, 0x6b, 0x8c, 0x9a, 0xd9, + 0xf9, 0x09, 0x59, 0x56, 0x66, 0x54, 0x6d, 0x38, 0xad, 0xa9, 0xc7, 0x01, + 0xb6, 0x0a, 0x8e, 0xa4, 0x39, 0xee, 0x3e, 0xe7, 0x00, 0x7f, 0x93, 0xe4, + 0x92, 0x9e, 0xd3, 0x06, 0x9b, 0x2a, 0xc4, 0xaa, 0xbb, 0x1d, 0x36, 0x56, + 0xc0, 0xd7, 0x38, 0x1d, 0x24, 0x08, 0xd2, 0x75, 0x85, 0xce, 0x75, 0x5a, + 0xf0, 0xea, 0xfa, 0xc1, 0x8c, 0xdb, 0x1b, 0xb2, 0xbb, 0x29, 0x73, 0x40, + 0xac, 0xfa, 0x72, 0xf6, 0x99, 0x60, 0x3b, 0x60, 0x6b, 0xc6, 0xab, 0x4b, + 0xa4, 0xf5, 0x2a, 0x1f, 0x8e, 0xf1, 0x45, 0x86, 0xea, 0x6b, 0x79, 0x63, + 0x1e, 0xee, 0x60, 0x01, 0xc9, 0xef, 0x12, 0xb9, 0xcf, 0xad, 0x0e, 0x19, + 0x3d, 0x5e, 0xa7, 0x07, 0xfa, 0x41, 0xb4, 0x82, 0x2c, 0x3c, 0x35, 0xcd, + 0x71, 0x2d, 0x32, 0x92, 0x9e, 0x93, 0x1a, 0xea, 0xf3, 0xc0, 0xc8, 0xc4, + 0xb8, 0x3b, 0xd2, 0x3e, 0xd3, 0xf4, 0x5d, 0x0d, 0x3e, 0xea, 0xae, 0x1d, + 0xfe, 0x29, 0xf2, 0x72, 0x8f, 0xaa, 0x4d, 0x6c, 0xac, 0xb9, 0xc3, 0xdb, + 0x6b, 0xa7, 0xc4, 0xe8, 0x1a, 0xd1, 0xd8, 0xf9, 0xac, 0x2e, 0x97, 0xd7, + 0x8d, 0x59, 0x07, 0x1f, 0x3f, 0x60, 0xb2, 0xe0, 0xd7, 0x37, 0x29, 0xad, + 0x00, 0xd8, 0x23, 0x4d, 0xe4, 0x44, 0x95, 0xbc, 0xfa, 0x0d, 0xf4, 0xb9, + 0xd4, 0x58, 0x6b, 0x2f, 0x1f, 0x4d, 0xbf, 0x95, 0x25, 0x23, 0xc7, 0x19, + 0x59, 0x35, 0x5d, 0x91, 0x7b, 0x99, 0x5e, 0xc3, 0xb6, 0x8d, 0xd2, 0xc0, + 0xe0, 0x74, 0x73, 0x5d, 0xbc, 0xf3, 0x1e, 0x0b, 0x25, 0xf4, 0xdf, 0x46, + 0x6f, 0xa5, 0x90, 0xdd, 0xae, 0x69, 0xd0, 0x8e, 0x1c, 0xdd, 0xa7, 0xdc, + 0x0f, 0x70, 0xb5, 0xf3, 0x8f, 0xa1, 0x8f, 0x53, 0xae, 0xb1, 0xe6, 0x93, + 0x0d, 0x36, 0xb3, 0x52, 0xcb, 0x07, 0x72, 0xc2, 0xae, 0xd1, 0x88, 0x32, + 0xb1, 0x19, 0x5d, 0xc5, 0xb7, 0x57, 0x04, 0xd5, 0x7b, 0x20, 0x81, 0x3f, + 0x9c, 0xc1, 0xcb, 0x7c, 0xdb, 0xc2, 0x4a, 0x79, 0xaa, 0x9b, 0xe3, 0xc6, + 0xd0, 0x8d, 0xd5, 0xa5, 0xf5, 0x62, 0xd8, 0x06, 0x8e, 0x61, 0x04, 0xf9, + 0xb4, 0x68, 0x9b, 0x23, 0x1a, 0xcc, 0x4b, 0xdf, 0x4d, 0x9c, 0xb4, 0x48, + 0x23, 0x87, 0x34, 0xf0, 0x42, 0x2d, 0xc3, 0xd4, 0xe9, 0x4c, 0x71, 0xff, + 0x00, 0x04, 0xf2, 0x3e, 0xf4, 0x94, 0xd0, 0x61, 0xd9, 0x9d, 0x5b, 0xbb, + 0x08, 0x27, 0xef, 0x0b, 0xa6, 0xda, 0x3d, 0x4f, 0x52, 0x7f, 0x36, 0x27, + 0xe6, 0xb9, 0xab, 0x34, 0xb1, 0xae, 0x68, 0xfc, 0xdf, 0xee, 0x5d, 0x26, + 0xef, 0xd0, 0xef, 0xfe, 0x44, 0xfe, 0x12, 0x92, 0x9e, 0x7d, 0x9a, 0x17, + 0xc8, 0x9f, 0x04, 0x52, 0x3d, 0xa7, 0xe0, 0x80, 0xd7, 0x08, 0x76, 0xaa, + 0xc4, 0xcd, 0x67, 0xc2, 0x0a, 0x4a, 0x67, 0xe9, 0x6e, 0x73, 0x89, 0x1c, + 0x92, 0x42, 0xa7, 0x9b, 0x4f, 0xb3, 0x73, 0x24, 0xfb, 0x5d, 0xba, 0x7b, + 0x68, 0xaf, 0x49, 0x3b, 0x83, 0x7b, 0x18, 0x55, 0x72, 0x1c, 0x0d, 0x6e, + 0x68, 0x33, 0xf4, 0x87, 0xe0, 0x92, 0x95, 0x5b, 0x0f, 0xa4, 0xd3, 0xdf, + 0x60, 0xd5, 0x51, 0x77, 0x4b, 0xb3, 0x1a, 0xe3, 0x55, 0xcd, 0xf5, 0x2d, + 0x92, 0xf2, 0x5a, 0xe0, 0xe0, 0x67, 0xfa, 0xab, 0x4d, 0xc0, 0xb7, 0x19, + 0x8e, 0x04, 0x02, 0x5a, 0x39, 0x1e, 0x4b, 0x3b, 0x26, 0xe2, 0xd6, 0xc3, + 0x9c, 0xef, 0x20, 0x4f, 0xf0, 0x49, 0x48, 0x2d, 0xad, 0xed, 0x74, 0x00, + 0xd6, 0x44, 0xe8, 0x48, 0xfe, 0x25, 0x42, 0xd6, 0x7b, 0x23, 0xd3, 0x0e, + 0xd3, 0x48, 0x8f, 0xfb, 0xe9, 0x55, 0x32, 0x4e, 0xb6, 0xbb, 0x98, 0x00, + 0x7e, 0x2a, 0xbe, 0x8e, 0xb0, 0x03, 0xd9, 0xa3, 0xf1, 0x49, 0x4e, 0x86, + 0x55, 0x41, 0xb7, 0x41, 0xac, 0x83, 0x0d, 0x1a, 0x1f, 0x25, 0xd4, 0x37, + 0x1a, 0xde, 0x93, 0xf5, 0x57, 0x32, 0x83, 0x58, 0x7d, 0xf9, 0x12, 0xe7, + 0xbd, 0x8e, 0x6b, 0xc3, 0x03, 0x80, 0x1e, 0xed, 0xa7, 0xb0, 0x5c, 0xd7, + 0x4f, 0xc4, 0xb6, 0xec, 0xdc, 0x6a, 0x05, 0x87, 0x6d, 0x8f, 0x68, 0x2d, + 0x93, 0x04, 0x77, 0xe7, 0xc9, 0x6e, 0x7d, 0x70, 0x7d, 0x15, 0xb6, 0xaa, + 0xfe, 0x86, 0xbf, 0x49, 0xba, 0x1d, 0xbe, 0x09, 0x29, 0xcf, 0xfa, 0xa7, + 0xd2, 0x2d, 0xcb, 0xcd, 0x6e, 0x7d, 0xa2, 0x31, 0x71, 0x89, 0xda, 0x7f, + 0x7e, 0xc2, 0x20, 0x01, 0xf0, 0xe4, 0xae, 0x8b, 0xad, 0x32, 0xc0, 0xd2, + 0xda, 0x87, 0xb8, 0xfb, 0x63, 0xc8, 0xac, 0x2c, 0x3f, 0xad, 0x2c, 0xc7, + 0xc7, 0xc7, 0xc2, 0xa1, 0xa2, 0xb6, 0x56, 0x5a, 0xd1, 0x1f, 0x9e, 0x27, + 0x59, 0xf8, 0xad, 0x8e, 0xa1, 0xd4, 0x4b, 0x6e, 0x73, 0x23, 0xd4, 0x6b, + 0x80, 0xdb, 0x1c, 0xa4, 0xa6, 0xb0, 0xac, 0xb0, 0x40, 0x3f, 0x45, 0xa4, + 0x0f, 0x90, 0x5c, 0x9f, 0x56, 0xfb, 0x4b, 0x1b, 0x5d, 0x59, 0x41, 0x8e, + 0x9a, 0xd9, 0xb6, 0xc6, 0xeb, 0x1a, 0x93, 0x27, 0xb8, 0x24, 0x2d, 0x6b, + 0x7a, 0xa7, 0x5a, 0xda, 0xf7, 0x37, 0x19, 0xc1, 0x8d, 0x04, 0x97, 0x1a, + 0xce, 0x8d, 0xf3, 0xf9, 0x2c, 0x4b, 0x33, 0x1b, 0x7b, 0xc3, 0xb2, 0x00, + 0xb0, 0x06, 0x96, 0xb7, 0x69, 0x80, 0x09, 0xfc, 0xe3, 0xe3, 0x09, 0x29, + 0xbf, 0x57, 0x4a, 0xe9, 0x77, 0x74, 0xe1, 0x93, 0x5d, 0xa5, 0xd7, 0x36, + 0x37, 0x80, 0xe1, 0x13, 0x31, 0x05, 0xa4, 0x4a, 0x0b, 0x5b, 0x65, 0x22, + 0xca, 0x6a, 0x79, 0xae, 0xbd, 0xd1, 0xa7, 0xd2, 0x33, 0x1d, 0xfb, 0x2c, + 0xd3, 0x5b, 0xc5, 0xfb, 0x6a, 0x70, 0xb0, 0x3d, 0xde, 0xd7, 0xfe, 0x6b, + 0xbe, 0x20, 0xad, 0x16, 0x58, 0x4b, 0x1a, 0x20, 0x37, 0xc4, 0x0e, 0xd0, + 0x92, 0x98, 0x5a, 0xcd, 0xee, 0x1e, 0xa3, 0xdd, 0x61, 0x27, 0x67, 0xb8, + 0xc8, 0x1d, 0xc2, 0x7a, 0xac, 0xb4, 0x13, 0x4e, 0xc6, 0x4f, 0xee, 0xba, + 0x41, 0xfe, 0xc9, 0x0a, 0x1b, 0xe2, 0x90, 0xe3, 0xdd, 0xe0, 0xfd, 0xc4, + 0x23, 0xde, 0xda, 0x9e, 0x21, 0xe0, 0x87, 0x8d, 0x5a, 0xe0, 0x60, 0xa4, + 0xa6, 0x66, 0xcb, 0x6b, 0x69, 0x73, 0xe9, 0x69, 0x67, 0x72, 0x1e, 0xe9, + 0x1f, 0x79, 0x51, 0xc9, 0xb0, 0x7a, 0xac, 0xa9, 0x87, 0xda, 0xe2, 0x09, + 0x03, 0x82, 0xa9, 0x3c, 0xe4, 0x11, 0xe9, 0x92, 0x40, 0x71, 0xe4, 0x77, + 0x45, 0x66, 0x97, 0x52, 0x5d, 0xc9, 0x74, 0xfc, 0x82, 0x4a, 0x6e, 0x64, + 0x38, 0xb6, 0xb9, 0x3a, 0xcd, 0x0f, 0x05, 0xa7, 0xc5, 0xa5, 0x68, 0x74, + 0xeb, 0xee, 0x6e, 0x0d, 0x56, 0x0a, 0xb7, 0x31, 0xc2, 0x44, 0x1f, 0x0e, + 0xf0, 0x5a, 0xe2, 0x55, 0x0c, 0xa9, 0xd8, 0x20, 0x49, 0x1b, 0xc0, 0xfe, + 0xd0, 0xe1, 0x6b, 0x37, 0xa6, 0x75, 0x5c, 0x0e, 0x9f, 0x5d, 0xd4, 0x5a, + 0xdb, 0xf6, 0x34, 0x39, 0xd8, 0xcf, 0x64, 0x76, 0x92, 0x1a, 0xe0, 0x65, + 0x25, 0x21, 0xea, 0x37, 0x63, 0x57, 0xd2, 0xcb, 0x7d, 0x43, 0x6d, 0xd9, + 0x26, 0x18, 0x37, 0x17, 0x86, 0x34, 0x10, 0x5d, 0xab, 0x80, 0x5c, 0xf3, + 0x46, 0xc7, 0x69, 0xaf, 0x80, 0x89, 0x56, 0xf2, 0xba, 0x86, 0x2e, 0x55, + 0xbe, 0xa3, 0x9c, 0x6b, 0x6b, 0x8e, 0xe3, 0x59, 0x6b, 0x8c, 0x38, 0x81, + 0xbb, 0xc9, 0x57, 0x19, 0x18, 0x8c, 0x27, 0x6d, 0xa7, 0x5e, 0x0e, 0xd7, + 0x68, 0x92, 0x97, 0x73, 0xa3, 0x58, 0xe3, 0xc9, 0x69, 0xfd, 0x54, 0x68, + 0xb3, 0xeb, 0x06, 0x24, 0xb4, 0x43, 0x1c, 0xf7, 0x8d, 0x3b, 0xb5, 0x8e, + 0x20, 0xac, 0x97, 0x64, 0xe3, 0xc6, 0x8e, 0xdc, 0x4f, 0x7d, 0xae, 0x95, + 0x6f, 0xa2, 0x75, 0x1a, 0xb0, 0xba, 0xae, 0x36, 0x43, 0xdf, 0xb6, 0xb6, + 0xbb, 0x6d, 0x84, 0xb5, 0xd0, 0x18, 0xf1, 0xb5, 0xc7, 0x41, 0xe6, 0x92, + 0x9e, 0x9f, 0xeb, 0x25, 0x2c, 0x19, 0xb8, 0x4f, 0xbd, 0xcf, 0x60, 0xb2, + 0xcd, 0xdb, 0xc6, 0xa3, 0x73, 0x67, 0xf2, 0xac, 0xbc, 0x1c, 0x11, 0xd4, + 0x6c, 0xcf, 0x7d, 0x40, 0x7a, 0x76, 0x1f, 0xd1, 0x87, 0xc8, 0xda, 0xe1, + 0x1e, 0xe8, 0x1c, 0x1f, 0x35, 0xd2, 0x75, 0x7e, 0x95, 0x67, 0x55, 0x6b, + 0x1c, 0x5f, 0x53, 0xa9, 0x03, 0x75, 0x60, 0x38, 0xb8, 0xbc, 0x38, 0x6b, + 0x11, 0xa4, 0x78, 0x15, 0xc2, 0xe7, 0x63, 0xe6, 0x61, 0x66, 0x7a, 0x67, + 0x21, 0xee, 0x7b, 0x06, 0xd6, 0x81, 0x2d, 0x7b, 0x7c, 0x07, 0x74, 0x94, + 0xf4, 0xbd, 0x26, 0xaa, 0xaa, 0xa1, 0xf5, 0xd2, 0x21, 0x8d, 0xb0, 0x8e, + 0x77, 0x02, 0x46, 0x84, 0xce, 0x9d, 0xd6, 0xce, 0x3f, 0x46, 0xe9, 0xf9, + 0xb3, 0x66, 0x4d, 0x62, 0xcb, 0x1a, 0x36, 0xb4, 0xc9, 0xd2, 0x41, 0xf0, + 0xf8, 0xae, 0x73, 0xa3, 0x97, 0x53, 0x88, 0xca, 0x8e, 0xae, 0xd4, 0x92, + 0x7c, 0x4e, 0xab, 0x57, 0x07, 0xac, 0xd7, 0x87, 0xd4, 0x6d, 0xa2, 0xe7, + 0x4b, 0x1c, 0xc6, 0x98, 0x9d, 0x43, 0xb5, 0xd7, 0xcd, 0x25, 0x3c, 0xc7, + 0x57, 0xa9, 0xb5, 0xe7, 0xfd, 0x89, 0xff, 0x00, 0xa2, 0xc6, 0xac, 0x8a, + 0x46, 0xd8, 0x75, 0x9b, 0x5b, 0xc9, 0xda, 0x24, 0xfc, 0xca, 0xd9, 0xe8, + 0xd9, 0xa2, 0xdc, 0x56, 0xb2, 0xb7, 0xbb, 0x6d, 0x3e, 0xd6, 0x93, 0xcb, + 0x9a, 0x38, 0x25, 0x4b, 0xeb, 0x1e, 0x16, 0x1f, 0xed, 0x1a, 0x7a, 0xc9, + 0x6e, 0xfe, 0x9d, 0x94, 0x3d, 0x2c, 0x9b, 0x2b, 0x24, 0x16, 0x58, 0x44, + 0x35, 0xce, 0x8e, 0xc5, 0x3d, 0x1d, 0x39, 0xdd, 0x3e, 0xe9, 0xda, 0xf1, + 0x45, 0xa2, 0x18, 0x1d, 0xf4, 0x40, 0x03, 0x48, 0x3e, 0x69, 0x29, 0xd6, + 0xc5, 0xa6, 0xac, 0xbd, 0xd5, 0x5a, 0x61, 0xce, 0x1e, 0xd9, 0x3a, 0x48, + 0xfc, 0x11, 0x30, 0x70, 0xb2, 0x71, 0xac, 0x2c, 0xac, 0x0f, 0x4c, 0x9d, + 0x5a, 0x3f, 0x1d, 0x16, 0x68, 0xb9, 0x92, 0x5a, 0x4e, 0x9c, 0x4a, 0xb1, + 0x8d, 0xd7, 0xb2, 0x29, 0x7b, 0xaa, 0xcc, 0x6f, 0xa8, 0xe6, 0xb8, 0x36, + 0xab, 0x46, 0x82, 0xd0, 0xed, 0x46, 0xe0, 0x38, 0x3a, 0x6a, 0x92, 0x97, + 0xeb, 0x86, 0xb7, 0x7a, 0x6d, 0x2d, 0x22, 0xea, 0xe6, 0x49, 0x10, 0x76, + 0xf8, 0x15, 0x4b, 0x1f, 0xf4, 0x98, 0x39, 0x55, 0x78, 0x00, 0xf1, 0xf7, + 0x29, 0x5d, 0x73, 0xf2, 0x6e, 0x7d, 0xb6, 0x44, 0x9e, 0xdd, 0x80, 0xf0, + 0x4b, 0x0b, 0xf9, 0xf7, 0x30, 0xff, 0x00, 0x84, 0x63, 0x9a, 0x92, 0x9a, + 0x20, 0x4d, 0x75, 0x11, 0xac, 0xb4, 0x7e, 0x40, 0xb7, 0x37, 0x0f, 0xd9, + 0xfb, 0xfb, 0xfa, 0x7f, 0x8e, 0xd5, 0x89, 0xb0, 0xb1, 0x8c, 0x69, 0x3a, + 0xb4, 0x6d, 0x3f, 0x2d, 0x16, 0xae, 0xe3, 0xfb, 0x23, 0xfb, 0x3b, 0x7f, + 0xe9, 0x24, 0xa7, 0x38, 0x30, 0x6d, 0x4a, 0xea, 0xf6, 0xd0, 0xf7, 0x8d, + 0x0b, 0x5a, 0x4a, 0x23, 0x48, 0xd0, 0x25, 0x96, 0xe0, 0x31, 0x2d, 0x27, + 0xf7, 0x0a, 0x4a, 0x67, 0xb3, 0x74, 0xfc, 0x78, 0xf8, 0x25, 0x65, 0x65, + 0xf5, 0x10, 0x74, 0xd1, 0xc3, 0xe1, 0xa1, 0x56, 0x5a, 0xd1, 0xa9, 0x03, + 0x84, 0x8b, 0x61, 0x92, 0x39, 0x83, 0xf9, 0x12, 0x53, 0x47, 0xa8, 0x02, + 0xcc, 0x4a, 0x5a, 0x4c, 0x49, 0x1f, 0x80, 0x95, 0x87, 0x63, 0xcd, 0x8f, + 0xd4, 0xe9, 0x3c, 0xfc, 0xd6, 0xbf, 0x5c, 0x96, 0xb6, 0x91, 0xb4, 0x86, + 0x35, 0x8e, 0x71, 0x7c, 0xe9, 0xbb, 0xda, 0x36, 0xc2, 0xc7, 0x64, 0x6d, + 0x92, 0x47, 0x9a, 0x4a, 0x6b, 0x65, 0x3e, 0x59, 0x64, 0x8d, 0x7c, 0x55, + 0x26, 0x12, 0x6f, 0x6c, 0x73, 0x03, 0xf0, 0x56, 0x72, 0xa7, 0x63, 0xbc, + 0x0a, 0x06, 0x1d, 0x66, 0xdc, 0xec, 0x7a, 0x81, 0xfe, 0x71, 0xc1, 0x92, + 0x39, 0x12, 0x61, 0x25, 0x3d, 0x2f, 0xd5, 0x6a, 0x9d, 0x6f, 0x52, 0x75, + 0xae, 0x78, 0x73, 0x71, 0xeb, 0x24, 0x19, 0xfc, 0xe3, 0xed, 0x0a, 0xb7, + 0xd6, 0xab, 0xcd, 0x99, 0x46, 0xb2, 0xe9, 0x35, 0xb7, 0xf1, 0x28, 0x35, + 0x75, 0xcc, 0xbe, 0x99, 0x91, 0x91, 0x57, 0x4d, 0x6b, 0x1b, 0x56, 0xe8, + 0xfd, 0x20, 0xdc, 0xf7, 0x01, 0xc4, 0x9e, 0x14, 0x32, 0xda, 0xcc, 0xaa, + 0x19, 0xd4, 0xb2, 0x09, 0x63, 0xb2, 0x4b, 0x99, 0x65, 0x6d, 0x1a, 0x07, + 0x33, 0xf3, 0x9a, 0x92, 0x9c, 0x8a, 0xf2, 0x2e, 0xad, 0x86, 0xb6, 0x10, + 0x1a, 0x4c, 0xf0, 0x26, 0x7c, 0x8f, 0x2b, 0xa9, 0xfa, 0xac, 0xe7, 0x64, + 0xd1, 0x65, 0xd7, 0x0d, 0xf6, 0x54, 0xf0, 0xca, 0xec, 0x77, 0x21, 0xa4, + 0x49, 0x0b, 0x9f, 0x34, 0x74, 0xf1, 0xc3, 0xec, 0x9f, 0x03, 0x03, 0xf8, + 0x2d, 0x3e, 0x9f, 0x9f, 0x9b, 0x87, 0x8e, 0x71, 0xb0, 0x68, 0x2f, 0x6b, + 0x9c, 0x5c, 0x5c, 0x58, 0xe7, 0x1d, 0xc7, 0x4f, 0x82, 0x4a, 0x7a, 0xa1, + 0xc1, 0x9e, 0xe0, 0xac, 0x6a, 0x7a, 0x2f, 0x4b, 0xb1, 0x85, 0xce, 0xa0, + 0x6e, 0x7e, 0xae, 0x74, 0x91, 0x13, 0xe1, 0xae, 0x8a, 0xbf, 0xda, 0x3e, + 0xb3, 0xda, 0x65, 0x95, 0xb9, 0x9e, 0x65, 0xad, 0x67, 0xfd, 0x52, 0xc6, + 0x3d, 0x63, 0x32, 0x08, 0x6d, 0xf6, 0x0d, 0xbd, 0x81, 0x8f, 0xc8, 0x92, + 0x92, 0x75, 0x3e, 0x98, 0xde, 0x9f, 0x9a, 0x19, 0x53, 0xcb, 0xea, 0x30, + 0xe1, 0x3f, 0x48, 0x6b, 0xc1, 0x23, 0x94, 0x1a, 0x5c, 0x0c, 0xc9, 0x81, + 0xa9, 0x94, 0xce, 0xc8, 0xcc, 0x7e, 0xef, 0x5d, 0xee, 0x7e, 0xe6, 0xb4, + 0xcb, 0x8c, 0x98, 0x3a, 0x8f, 0xc0, 0xa1, 0xb1, 0xd2, 0xc7, 0x03, 0xf0, + 0x49, 0x49, 0x5c, 0x26, 0x8a, 0xdb, 0xf1, 0x3f, 0x8a, 0xb8, 0xe6, 0x0b, + 0x03, 0x77, 0x6a, 0x23, 0xe6, 0xaa, 0xba, 0x07, 0xa6, 0xde, 0xca, 0xe3, + 0xcb, 0x00, 0x13, 0xd8, 0x24, 0xa4, 0x44, 0xb4, 0x39, 0xac, 0x2c, 0x30, + 0xd7, 0x0d, 0x7c, 0x50, 0x9e, 0x77, 0x66, 0x80, 0x04, 0x6c, 0x1c, 0x78, + 0x14, 0xb2, 0xad, 0x86, 0x82, 0xde, 0x09, 0x13, 0x1f, 0x72, 0x86, 0x2f, + 0xe9, 0x32, 0x9e, 0xe6, 0xf0, 0x34, 0xfb, 0x92, 0x53, 0x75, 0xce, 0x77, + 0xab, 0x4c, 0xc1, 0x02, 0xc0, 0x7e, 0x3e, 0x4b, 0xb4, 0xc4, 0xc8, 0xab, + 0x27, 0xa7, 0xd7, 0x63, 0x4e, 0x8e, 0x1d, 0xfc, 0x57, 0x1c, 0x69, 0x16, + 0xd9, 0x04, 0xed, 0x6d, 0x5f, 0xa5, 0x73, 0xbc, 0x1a, 0xcd, 0x7f, 0x1e, + 0x16, 0xbf, 0x45, 0xcd, 0xae, 0xee, 0x9a, 0x7d, 0x4f, 0x67, 0xa5, 0x7b, + 0xc3, 0x40, 0xf0, 0xfa, 0x43, 0xee, 0x94, 0x94, 0xe8, 0x5d, 0x9d, 0x89, + 0x8a, 0xe1, 0x5d, 0xa5, 0x80, 0x81, 0xf9, 0xc5, 0xa3, 0x4f, 0x9a, 0x13, + 0xfa, 0xd7, 0x4d, 0x60, 0x97, 0x3e, 0xb0, 0x3c, 0x64, 0x7f, 0x05, 0xcb, + 0xfd, 0x62, 0x6d, 0x79, 0x31, 0x99, 0x54, 0xec, 0x63, 0x18, 0xcd, 0x7f, + 0x15, 0x83, 0x25, 0x25, 0x3e, 0x88, 0xce, 0xb1, 0x81, 0x68, 0x2e, 0xae, + 0xea, 0xc3, 0x47, 0x32, 0xe0, 0x0f, 0xdc, 0x61, 0x10, 0x75, 0x3c, 0x38, + 0xfe, 0x93, 0x48, 0x31, 0xc6, 0xf6, 0xff, 0x00, 0x7a, 0xf3, 0x79, 0x29, + 0x49, 0x49, 0x4f, 0xa7, 0xf4, 0xfe, 0xb0, 0xeb, 0x5e, 0xec, 0x4c, 0x6b, + 0xe9, 0xb5, 0xcf, 0x69, 0xd8, 0xd6, 0x91, 0x2d, 0x20, 0x4c, 0x8e, 0x56, + 0x07, 0x52, 0xc1, 0xcd, 0x1d, 0x51, 0x9e, 0xa5, 0x7b, 0x98, 0x77, 0x39, + 0xee, 0x6f, 0xbb, 0x57, 0x1d, 0x49, 0xfb, 0x96, 0x67, 0xd4, 0xb3, 0x3f, + 0x58, 0x28, 0x9f, 0xdc, 0xb7, 0xfe, 0xa1, 0xcb, 0xd0, 0x5f, 0x8c, 0x2c, + 0x3e, 0xab, 0xdb, 0x2e, 0xd3, 0xe2, 0x92, 0x9e, 0x61, 0x8f, 0xa6, 0xb6, + 0x93, 0xba, 0x1a, 0xc1, 0xa9, 0xf0, 0x85, 0x2a, 0x3a, 0x60, 0xc9, 0x69, + 0xcb, 0xb1, 0xa7, 0x75, 0xa3, 0x50, 0x7b, 0x03, 0xf4, 0x7f, 0x05, 0xd0, + 0xdf, 0xd1, 0xb0, 0x7d, 0xb6, 0x58, 0xc0, 0x6c, 0x99, 0xdd, 0xd8, 0x9f, + 0x30, 0xa2, 0x6b, 0x35, 0xd5, 0xb4, 0x68, 0x1b, 0x05, 0xbe, 0x40, 0x24, + 0xa7, 0x36, 0x9b, 0x47, 0x4b, 0xc7, 0x7e, 0x26, 0x45, 0x27, 0x37, 0x06, + 0xc6, 0xc3, 0x9b, 0xf4, 0xdd, 0xfd, 0x57, 0x7f, 0x02, 0x8d, 0x93, 0x90, + 0xeb, 0xab, 0x1f, 0xb3, 0xe7, 0xec, 0x86, 0xaf, 0x4f, 0xd3, 0xb0, 0xfb, + 0x6b, 0x77, 0xe6, 0xbb, 0x5d, 0x5d, 0x0a, 0xc3, 0x99, 0xa1, 0xb0, 0x7f, + 0x68, 0xf9, 0xf8, 0x84, 0x27, 0x3c, 0x58, 0x1b, 0xa0, 0x27, 0x53, 0x23, + 0x40, 0x52, 0x53, 0x83, 0x8b, 0x96, 0xeb, 0x9a, 0x59, 0x68, 0xdb, 0x6d, + 0x44, 0xb6, 0xc1, 0xe0, 0xe1, 0xca, 0x3d, 0xaf, 0x96, 0xd0, 0xf0, 0x77, + 0x0f, 0x5d, 0x83, 0x4f, 0x98, 0xfe, 0x2a, 0xdb, 0xb0, 0x31, 0x6e, 0xbe, + 0xd7, 0xbd, 0xbb, 0x6d, 0x2e, 0x73, 0x5f, 0xb7, 0x49, 0x73, 0x44, 0x89, + 0x8f, 0x16, 0xc2, 0x0e, 0x4d, 0x6c, 0x6d, 0x4c, 0x0c, 0x80, 0x19, 0x65, + 0x64, 0x00, 0x47, 0xef, 0x84, 0x94, 0xd8, 0xad, 0xb2, 0xed, 0x3b, 0x85, + 0x1a, 0x88, 0x17, 0xd6, 0x78, 0x87, 0x01, 0xf7, 0xe8, 0xa6, 0xc6, 0xbd, + 0xae, 0xd0, 0x1d, 0x3b, 0xa1, 0xed, 0x7e, 0xdd, 0xf0, 0x41, 0x1e, 0xee, + 0x3c, 0x12, 0x53, 0x1c, 0x8a, 0xc8, 0xbd, 0xed, 0x8e, 0x1c, 0xac, 0xee, + 0x6f, 0xec, 0xcd, 0x9d, 0xf7, 0xc7, 0xf1, 0x4d, 0x94, 0xd0, 0x6f, 0x2e, + 0xec, 0xf0, 0x08, 0xfb, 0x93, 0x6c, 0xfd, 0x5e, 0x24, 0x7d, 0x39, 0xe7, + 0xf9, 0x29, 0x29, 0xc1, 0x1d, 0x7b, 0xa6, 0xb8, 0x7f, 0x38, 0xf6, 0x1f, + 0xe5, 0x30, 0xff, 0x00, 0xdf, 0x65, 0x36, 0x5f, 0x57, 0xc5, 0x7e, 0x1d, + 0xad, 0xae, 0xf6, 0xbd, 0xdb, 0x61, 0xad, 0xd4, 0x13, 0xaf, 0x98, 0x08, + 0x23, 0xea, 0xf6, 0x31, 0x1a, 0x17, 0x6b, 0xc6, 0xa9, 0x0f, 0xab, 0xb8, + 0xc4, 0xf2, 0xef, 0x84, 0xa4, 0xa6, 0x75, 0x7d, 0x71, 0x20, 0xcd, 0xb8, + 0xc0, 0xff, 0x00, 0x55, 0xc4, 0x7e, 0x59, 0x4b, 0x2b, 0xeb, 0x81, 0x73, + 0x1a, 0xdc, 0x5a, 0x0d, 0x67, 0xf3, 0xcb, 0xc8, 0x77, 0xc8, 0x27, 0xff, + 0x00, 0x9b, 0xb8, 0x9a, 0x08, 0x77, 0x99, 0x94, 0xff, 0x00, 0xf3, 0x77, + 0x0c, 0x72, 0xd7, 0x1f, 0x1f, 0x71, 0x49, 0x4a, 0x3d, 0x7e, 0xce, 0xae, + 0x3d, 0x13, 0x43, 0x69, 0x0c, 0x21, 0xc4, 0xee, 0x2e, 0x07, 0xb7, 0x70, + 0x13, 0xbe, 0xb7, 0x39, 0xfb, 0x6b, 0xac, 0x92, 0x4e, 0xd6, 0xb7, 0x99, + 0xf8, 0x29, 0xb3, 0xa5, 0xe3, 0xe0, 0xb1, 0xcf, 0xa9, 0xae, 0xf7, 0xc3, + 0x5d, 0xac, 0xe9, 0xcc, 0xad, 0x8e, 0x9f, 0x84, 0x71, 0x6b, 0x19, 0x56, + 0xff, 0x00, 0x3b, 0x60, 0xfd, 0x18, 0x3c, 0x35, 0xa7, 0xbf, 0xc5, 0x25, + 0x35, 0x71, 0xfe, 0xaf, 0x63, 0x31, 0x9e, 0xa7, 0x51, 0x76, 0xf7, 0x9d, + 0x4d, 0x2d, 0x30, 0xc6, 0x8f, 0xe5, 0x38, 0x73, 0xf2, 0x52, 0x7d, 0x58, + 0x94, 0x16, 0xbe, 0x8a, 0x69, 0xc6, 0x0d, 0xfa, 0x0f, 0x73, 0x01, 0xb2, + 0x7c, 0x5a, 0x39, 0x1f, 0x35, 0x1e, 0xa3, 0xd4, 0x5b, 0x5b, 0x77, 0x4e, + 0xa7, 0x56, 0x0f, 0xfb, 0xf1, 0xf8, 0xf6, 0x5c, 0xf6, 0x4e, 0x55, 0xd6, + 0xe2, 0xbb, 0x2c, 0xd8, 0xe6, 0xc5, 0xa2, 0xb0, 0xd0, 0x79, 0x04, 0x6e, + 0x71, 0x25, 0x25, 0x3a, 0x99, 0x1d, 0x3f, 0x13, 0x28, 0x39, 0xf8, 0xee, + 0x68, 0xb6, 0x24, 0xc0, 0xdb, 0xba, 0x3c, 0x95, 0x2e, 0xa8, 0xef, 0x4f, + 0xa7, 0xe0, 0x54, 0xd3, 0x1b, 0x5a, 0x5c, 0x47, 0x9b, 0x8c, 0x95, 0x99, + 0x65, 0xb7, 0xd3, 0xad, 0x56, 0x97, 0xb1, 0xc2, 0x46, 0xa6, 0x5b, 0xbb, + 0xb1, 0xf3, 0xf8, 0x2d, 0x8c, 0xac, 0x2f, 0xb4, 0x62, 0x11, 0xcd, 0xf8, + 0xb5, 0x56, 0x76, 0xf8, 0x88, 0x97, 0x24, 0xa7, 0x12, 0xe6, 0x43, 0x83, + 0x87, 0x0e, 0xd4, 0x2b, 0xdf, 0xf3, 0xa3, 0xaa, 0x34, 0x6d, 0xa4, 0xb2, + 0xb6, 0x8e, 0xdb, 0x43, 0xbb, 0x47, 0xe7, 0x4a, 0xad, 0x4b, 0x05, 0xcd, + 0xf4, 0x8f, 0x2d, 0x70, 0x20, 0xf9, 0x13, 0x05, 0x74, 0xa3, 0xa1, 0x74, + 0xe1, 0xa7, 0xa0, 0x3e, 0x26, 0x52, 0x53, 0x80, 0xef, 0xac, 0xfd, 0x69, + 0xc0, 0x83, 0x78, 0x00, 0xf8, 0x31, 0x9f, 0xf9, 0x15, 0x5f, 0x0e, 0xa1, + 0x65, 0x64, 0x38, 0xc1, 0xb1, 0xdb, 0x41, 0xf8, 0xc0, 0x5d, 0x4b, 0x7a, + 0x2f, 0x4f, 0x1c, 0xe3, 0xb2, 0x3c, 0xc1, 0x4a, 0xce, 0x9d, 0x81, 0x4d, + 0x65, 0xcc, 0xc7, 0x6b, 0x4b, 0x4c, 0x88, 0x27, 0x9f, 0x84, 0xa4, 0xa7, + 0x99, 0xcf, 0x79, 0x66, 0x61, 0x63, 0x07, 0xd0, 0x86, 0x81, 0xe5, 0x10, + 0xa5, 0x43, 0x37, 0x39, 0xe0, 0xf8, 0xad, 0x07, 0x37, 0x1c, 0xe0, 0x5d, + 0x75, 0x95, 0xb4, 0xdb, 0x65, 0xe4, 0xd5, 0x64, 0x7b, 0x80, 0x69, 0x88, + 0x9f, 0x05, 0x42, 0x87, 0x68, 0xf2, 0x7b, 0x9d, 0x3f, 0x22, 0x4a, 0x66, + 0x48, 0x75, 0xcd, 0xfe, 0x49, 0x1a, 0x2b, 0x36, 0x8d, 0xc6, 0x67, 0x42, + 0x34, 0x55, 0x2b, 0x00, 0xe4, 0x01, 0xd9, 0x5c, 0x7e, 0x90, 0x12, 0x53, + 0x43, 0x24, 0x16, 0xd5, 0xa1, 0xfc, 0xe1, 0x28, 0xdd, 0x29, 0xa7, 0x71, + 0x3d, 0xe1, 0x43, 0x28, 0x03, 0x53, 0x80, 0xe7, 0x9f, 0x92, 0x3f, 0x49, + 0x6c, 0x87, 0x9f, 0x2e, 0x52, 0x53, 0xab, 0x85, 0x8d, 0x76, 0x5f, 0xaf, + 0x8f, 0x48, 0x1b, 0xec, 0xd8, 0xc2, 0x4e, 0x81, 0xad, 0x1e, 0xf7, 0xb9, + 0xc7, 0xc3, 0x40, 0xb7, 0xf0, 0xbe, 0xa7, 0x9a, 0xeb, 0x7b, 0x3e, 0xd0, + 0x6b, 0xaa, 0xcf, 0x71, 0x20, 0x4b, 0xde, 0xe2, 0xdd, 0xa5, 0xda, 0xe8, + 0xd1, 0xe0, 0x10, 0xfe, 0xad, 0xfa, 0x54, 0x62, 0x32, 0xc2, 0xdf, 0x7d, + 0xf6, 0x38, 0xb8, 0xb8, 0x49, 0x20, 0x18, 0x6f, 0xdd, 0xb4, 0xae, 0xa5, + 0xb7, 0x07, 0xd5, 0xbd, 0xbe, 0xef, 0xe4, 0xf7, 0x49, 0x4f, 0x15, 0xd6, + 0x3a, 0x03, 0x71, 0x3a, 0x26, 0x43, 0x6f, 0xb5, 0xa1, 0x94, 0x31, 0xbb, + 0x0f, 0xd1, 0x73, 0xcb, 0x4e, 0x9c, 0xc8, 0xd5, 0x70, 0x0b, 0xda, 0xb3, + 0xe9, 0xa3, 0x2f, 0x0d, 0xf5, 0xbd, 0x81, 0xf5, 0xbc, 0x7b, 0x98, 0xe0, + 0x0c, 0x81, 0xac, 0x41, 0x5c, 0xbb, 0xfa, 0x7e, 0x0d, 0x4e, 0x73, 0x3e, + 0xc9, 0x44, 0xb7, 0x82, 0x6b, 0x6c, 0x79, 0x24, 0xa7, 0xcf, 0x52, 0x5e, + 0x80, 0xdc, 0x2e, 0x9c, 0xdf, 0xa3, 0x87, 0x46, 0xa6, 0x49, 0x2c, 0x07, + 0x53, 0xf1, 0x4c, 0x71, 0xb0, 0x41, 0x8f, 0xb2, 0x51, 0xff, 0x00, 0x6d, + 0xb7, 0xfb, 0x92, 0x53, 0xce, 0xfd, 0x4b, 0x00, 0xfd, 0x60, 0xa4, 0xf8, + 0x32, 0xc2, 0x3f, 0xcc, 0x72, 0xf4, 0xca, 0xe2, 0x01, 0x32, 0x78, 0x1a, + 0xac, 0x1e, 0x95, 0x4e, 0x23, 0x73, 0x9a, 0x6b, 0xa6, 0xaa, 0x9c, 0x1a, + 0xef, 0x7b, 0x18, 0xd6, 0x9e, 0x3c, 0x42, 0xdf, 0x61, 0x1b, 0xc4, 0x88, + 0x10, 0x02, 0x4a, 0x5b, 0x30, 0xce, 0xc6, 0xb7, 0xe9, 0x4f, 0xe0, 0x02, + 0xa8, 0xf1, 0x21, 0xc0, 0x7b, 0x64, 0x00, 0x3e, 0x2a, 0x59, 0x97, 0x46, + 0x4d, 0x6d, 0x33, 0xa8, 0x74, 0x0f, 0xb9, 0x54, 0xbe, 0xed, 0xb7, 0x39, + 0xbb, 0x88, 0x3b, 0x44, 0x1e, 0xdf, 0x24, 0x94, 0xc2, 0xf7, 0x00, 0xc7, + 0xb1, 0xbe, 0xd7, 0x69, 0x3d, 0xd0, 0x6a, 0xaf, 0x60, 0x6f, 0x70, 0xfd, + 0x00, 0x44, 0xfc, 0xd2, 0xe7, 0x0d, 0x40, 0xe7, 0xcd, 0x43, 0xd7, 0x6b, + 0x06, 0xd7, 0x49, 0x24, 0x98, 0x1e, 0x29, 0x29, 0x70, 0xd6, 0xfd, 0xbc, + 0x07, 0x91, 0xb6, 0xda, 0x83, 0xfe, 0x25, 0xbe, 0xc3, 0xff, 0x00, 0x44, + 0xaf, 0x37, 0xca, 0xa9, 0xd8, 0xd9, 0x77, 0x53, 0xc1, 0xa6, 0xc7, 0x36, + 0x7f, 0xaa, 0x61, 0x7a, 0x05, 0xae, 0x73, 0x6d, 0xc5, 0xb9, 0xda, 0x80, + 0xe2, 0x1d, 0xe4, 0x1d, 0xa2, 0xa5, 0xd4, 0x71, 0x31, 0x7e, 0xd4, 0xf7, + 0x9a, 0x58, 0xe2, 0xf0, 0x1e, 0x5c, 0xe6, 0x82, 0x4c, 0xf2, 0x4a, 0x4a, + 0x78, 0xa3, 0x93, 0x90, 0x79, 0xb5, 0xe7, 0xfb, 0x45, 0x47, 0xd5, 0xb3, + 0xf7, 0xdd, 0xf7, 0x95, 0xd4, 0x9c, 0x7c, 0x5d, 0xdf, 0xcc, 0xd5, 0x1d, + 0xfd, 0xad, 0xf9, 0x42, 0x81, 0x6e, 0x13, 0x5a, 0x4b, 0xea, 0xad, 0x84, + 0x76, 0x2d, 0x12, 0x92, 0x95, 0xf5, 0x90, 0x1c, 0x9e, 0x91, 0xd3, 0xb3, + 0x5b, 0xfb, 0xa0, 0x3c, 0xff, 0x00, 0x59, 0xa3, 0xf8, 0xb5, 0x73, 0x5e, + 0xab, 0xbd, 0x2f, 0x4e, 0x7d, 0xbb, 0xb7, 0x7c, 0xe2, 0x17, 0x69, 0x43, + 0xf1, 0xaf, 0xe8, 0xbb, 0xee, 0x69, 0xf4, 0x69, 0x76, 0xad, 0x0d, 0x06, + 0x00, 0x3d, 0x9a, 0x81, 0xb7, 0xa7, 0x46, 0xef, 0xb3, 0x37, 0xd1, 0x89, + 0xdf, 0x2d, 0x9f, 0xfa, 0x98, 0x49, 0x4e, 0xa3, 0xf0, 0xee, 0x6f, 0xe6, + 0xee, 0x1d, 0xe0, 0xa8, 0x86, 0x41, 0xd4, 0x44, 0x76, 0x90, 0xb4, 0xf2, + 0xf2, 0xb0, 0xb0, 0x65, 0xf9, 0x56, 0xb2, 0xae, 0xf0, 0x4f, 0xb8, 0xfc, + 0x1a, 0x35, 0x2b, 0x8a, 0xea, 0xdf, 0x59, 0x2d, 0xbb, 0x39, 0xce, 0xc3, + 0x60, 0x65, 0x2d, 0x88, 0xdc, 0x25, 0xce, 0x8e, 0xe5, 0x25, 0x3d, 0x28, + 0x0d, 0x8e, 0xdf, 0x32, 0xa3, 0xed, 0x89, 0x91, 0xaf, 0x1a, 0xae, 0x3e, + 0xcf, 0xac, 0x1d, 0x4a, 0xc7, 0x17, 0x17, 0xb5, 0xa4, 0xea, 0x76, 0xb1, + 0xa3, 0xf8, 0x28, 0x7e, 0xdc, 0xea, 0x5f, 0xe9, 0x7f, 0xe8, 0xb7, 0xfb, + 0x92, 0x53, 0xda, 0x32, 0x96, 0xde, 0xe0, 0x5d, 0xad, 0x75, 0x9d, 0xce, + 0x9e, 0x09, 0xec, 0x12, 0xcb, 0xc8, 0x2e, 0x24, 0x3c, 0xcb, 0x1a, 0x24, + 0xcf, 0xee, 0xf6, 0x6f, 0x1f, 0x9c, 0x54, 0x30, 0x85, 0xf5, 0x74, 0xda, + 0x86, 0x41, 0x9b, 0xac, 0x6e, 0xfb, 0x0f, 0xb6, 0x44, 0xeb, 0x02, 0x20, + 0x68, 0x21, 0x65, 0xf5, 0x6c, 0xad, 0x98, 0xfe, 0x98, 0x20, 0x39, 0xf2, + 0x5d, 0x1e, 0x69, 0x29, 0xc8, 0xea, 0x39, 0x4f, 0xc9, 0xbc, 0xbc, 0xbb, + 0xdb, 0x3a, 0x00, 0xae, 0x62, 0x61, 0xb6, 0xea, 0x31, 0x69, 0x78, 0x05, + 0x87, 0xd5, 0xb9, 0xf3, 0xde, 0x3d, 0x83, 0xfe, 0xa5, 0x64, 0xbc, 0xcb, + 0x9b, 0xde, 0x47, 0xf1, 0x5b, 0xdb, 0xcd, 0x15, 0x17, 0xd6, 0x60, 0x53, + 0x8c, 0xc6, 0x8f, 0x8b, 0xc6, 0xe3, 0xf9, 0x52, 0x53, 0x91, 0x8c, 0xdd, + 0xf7, 0x35, 0x91, 0x21, 0xc4, 0x00, 0x3e, 0x70, 0xaf, 0x5b, 0x97, 0xe8, + 0xfd, 0x60, 0x20, 0x1f, 0xd1, 0xb8, 0xfa, 0x6e, 0x1d, 0x88, 0xe1, 0x56, + 0xe9, 0x0d, 0x2e, 0xbe, 0x97, 0x01, 0xa9, 0xb1, 0xad, 0x9f, 0x9c, 0x93, + 0xf7, 0x21, 0x75, 0x22, 0x3d, 0x67, 0x5c, 0x07, 0xb8, 0xd8, 0x48, 0x77, + 0x78, 0x05, 0x25, 0x2d, 0x92, 0xc3, 0x8d, 0x9a, 0xf6, 0xb4, 0xc0, 0x6b, + 0xa1, 0xa4, 0x78, 0x4c, 0xb5, 0x75, 0x58, 0xfd, 0x45, 0xb6, 0xd1, 0x5d, + 0x8e, 0x69, 0xf7, 0x8d, 0x48, 0x23, 0xe9, 0x0f, 0xa4, 0xb0, 0xb2, 0x71, + 0x99, 0x97, 0xd4, 0x31, 0x19, 0xba, 0x3e, 0xd8, 0xd6, 0x43, 0xbc, 0x0b, + 0x84, 0x0f, 0xc5, 0x5a, 0xfa, 0xbd, 0x49, 0xbe, 0xeb, 0x7a, 0x7d, 0xae, + 0x35, 0x5a, 0xd9, 0x20, 0x40, 0x24, 0xb9, 0x9a, 0x39, 0xba, 0xa4, 0xa7, + 0x55, 0xd9, 0xb5, 0x11, 0xb5, 0xb2, 0xe7, 0x9e, 0x00, 0xd5, 0x0f, 0x2a, + 0xe0, 0xdc, 0x6d, 0xcf, 0x05, 0xaf, 0x82, 0xe7, 0x03, 0xa1, 0x1b, 0x41, + 0x2a, 0xf3, 0x7a, 0x56, 0xcd, 0x24, 0x1d, 0xbc, 0x92, 0x48, 0x2b, 0x3b, + 0xac, 0xd0, 0xe6, 0x30, 0x50, 0xc6, 0xc5, 0x96, 0xb5, 0xac, 0x89, 0x9d, + 0x6c, 0x70, 0x68, 0x49, 0x4e, 0x4f, 0x51, 0x9a, 0xf0, 0x71, 0x6a, 0x88, + 0x8a, 0xf7, 0xbb, 0xfa, 0xcf, 0xd5, 0x54, 0x15, 0x06, 0xe2, 0x36, 0xd6, + 0xea, 0x77, 0xba, 0xb7, 0x9f, 0x08, 0x6b, 0x48, 0xfe, 0x2a, 0xdf, 0x56, + 0x31, 0x98, 0xec, 0x5e, 0x45, 0x4e, 0x0c, 0x3d, 0xf4, 0x62, 0x23, 0x30, + 0x85, 0x0c, 0xc8, 0xa6, 0xe2, 0x62, 0xec, 0x76, 0x65, 0xd4, 0x40, 0x24, + 0x4f, 0xfb, 0xf4, 0x49, 0x4e, 0x76, 0x20, 0xdd, 0x7c, 0x9d, 0x34, 0x56, + 0xde, 0x60, 0x91, 0xe4, 0xaa, 0xd2, 0xed, 0xbb, 0x9f, 0xc9, 0x3a, 0x4a, + 0x26, 0xf2, 0x49, 0x9e, 0x23, 0x94, 0x94, 0xd7, 0xbf, 0xb9, 0xf2, 0x2a, + 0xc6, 0x03, 0x85, 0x38, 0xe1, 0xe4, 0xfd, 0x39, 0xdb, 0xe7, 0xa2, 0xab, + 0x7e, 0xad, 0xf3, 0x57, 0x58, 0x05, 0x74, 0x36, 0xb3, 0xf9, 0xad, 0x1f, + 0xed, 0x49, 0x4f, 0x71, 0xf5, 0x79, 0xad, 0x18, 0x6c, 0x63, 0x9b, 0x0f, + 0x00, 0x43, 0x8e, 0xa2, 0x48, 0x9f, 0xe2, 0xb4, 0xac, 0x86, 0x3b, 0x6b, + 0xa6, 0xb2, 0x01, 0x87, 0xb7, 0x43, 0xaf, 0xe0, 0xa9, 0x74, 0x2b, 0x2b, + 0x6e, 0x0d, 0x4e, 0x24, 0x0a, 0xdc, 0xd5, 0xa7, 0xbf, 0x1e, 0xd1, 0x06, + 0xc6, 0xba, 0x3c, 0xd2, 0x52, 0x3a, 0xde, 0xd0, 0xc0, 0x1a, 0x64, 0x44, + 0x3b, 0xcf, 0xcd, 0x63, 0xf5, 0x0a, 0x62, 0xd0, 0x58, 0x09, 0x04, 0x10, + 0x63, 0x58, 0x82, 0xb5, 0x72, 0x1b, 0x56, 0x33, 0x1d, 0x66, 0xf0, 0x1b, + 0x1f, 0x44, 0x95, 0x41, 0xb6, 0xfa, 0x80, 0xb9, 0xd0, 0x1b, 0x3e, 0xdf, + 0x81, 0x49, 0x4e, 0x7b, 0xaa, 0xb0, 0x88, 0xd8, 0xef, 0x23, 0x05, 0x0d, + 0xcc, 0xb6, 0x67, 0x63, 0xa7, 0xc2, 0x0a, 0xd3, 0x7d, 0x95, 0xb1, 0xa4, + 0xbd, 0xdb, 0x47, 0x89, 0x3e, 0x29, 0xc9, 0x11, 0xcc, 0xa4, 0xa6, 0xaf, + 0x4e, 0x0f, 0xfb, 0x60, 0x76, 0xc2, 0x06, 0xd7, 0x6a, 0x44, 0x0e, 0x21, + 0x6d, 0x0b, 0x08, 0x21, 0xd0, 0x61, 0xa3, 0x5f, 0x9a, 0xcf, 0x65, 0x90, + 0x64, 0x6a, 0x60, 0xe8, 0xac, 0xd0, 0x5c, 0xfa, 0x9c, 0x5e, 0xe9, 0x2e, + 0xee, 0x7c, 0xbb, 0x24, 0xa6, 0xa6, 0x5d, 0xed, 0xfb, 0x65, 0x60, 0x49, + 0x0d, 0x61, 0x3a, 0xf9, 0x94, 0x2c, 0xaa, 0xc5, 0xa4, 0x90, 0xed, 0xba, + 0x01, 0x2a, 0xbe, 0x63, 0xe7, 0xab, 0xc7, 0x66, 0xd4, 0xd1, 0xf3, 0x2e, + 0x2a, 0xfb, 0x01, 0x7b, 0xbb, 0x44, 0x4a, 0x4a, 0x6b, 0x3d, 0x8e, 0x66, + 0x3e, 0xa7, 0x5e, 0x37, 0x2a, 0x0f, 0xc9, 0x0d, 0xb6, 0xb0, 0x27, 0xc6, + 0x5d, 0xc6, 0x8b, 0x5b, 0x32, 0xb6, 0x7a, 0x0f, 0x24, 0x49, 0x10, 0x42, + 0xce, 0xda, 0xd6, 0x30, 0x3b, 0x61, 0x3b, 0xb8, 0x31, 0x30, 0x01, 0xd7, + 0xef, 0x49, 0x49, 0x72, 0x5d, 0x34, 0xd4, 0x41, 0x89, 0x13, 0xaa, 0xa9, + 0xd5, 0x9c, 0xe6, 0x8a, 0x5e, 0x41, 0x2e, 0x76, 0xe6, 0x98, 0x1c, 0x46, + 0xbf, 0x72, 0xbf, 0x6d, 0x61, 0xd5, 0xb5, 0xc0, 0x4c, 0x73, 0x3e, 0x01, + 0x03, 0xab, 0x54, 0xdb, 0x70, 0xdc, 0xe7, 0xb1, 0xd6, 0xb5, 0xa4, 0x12, + 0xda, 0xc9, 0x0e, 0xd7, 0x4e, 0xc9, 0x29, 0xc0, 0xb9, 0xf6, 0xb6, 0xaf, + 0x50, 0xfb, 0x58, 0x49, 0x1a, 0x9d, 0x74, 0x8e, 0x3e, 0xf5, 0x9b, 0xb8, + 0x1b, 0x88, 0x7b, 0xe4, 0xcf, 0x60, 0x0c, 0x41, 0x57, 0x5b, 0x6d, 0x59, + 0xf7, 0x9e, 0x9f, 0x8b, 0x8d, 0x61, 0x73, 0xcf, 0xd2, 0xdf, 0xf4, 0x60, + 0x46, 0xe3, 0xb9, 0xab, 0x4a, 0x9f, 0xaa, 0xf8, 0xb8, 0xf0, 0xec, 0x9b, + 0x4d, 0xb6, 0xf3, 0xb1, 0xbe, 0xd6, 0x79, 0x49, 0xe4, 0xa4, 0xa5, 0x74, + 0x47, 0xc6, 0x36, 0x4e, 0x30, 0x3b, 0x8c, 0x6f, 0x9f, 0x32, 0x3c, 0x15, + 0x6f, 0x52, 0xad, 0xdb, 0xb6, 0xb7, 0x77, 0x3b, 0x7b, 0x6e, 0xf1, 0x85, + 0xa5, 0x85, 0x45, 0x35, 0x64, 0xd8, 0x05, 0x66, 0xbb, 0x1d, 0xed, 0xd0, + 0x97, 0x31, 0xcd, 0x3d, 0xc1, 0x23, 0x9f, 0x25, 0x9f, 0xff, 0x00, 0x37, + 0x32, 0xfe, 0xd5, 0xbf, 0xed, 0x23, 0xec, 0xfb, 0xb7, 0xcc, 0x1f, 0x53, + 0xfa, 0x91, 0xc2, 0x4a, 0x73, 0x9b, 0x53, 0x9b, 0xba, 0xcb, 0x3d, 0xce, + 0x3c, 0xbd, 0xda, 0x9f, 0xbc, 0xaa, 0x42, 0xdc, 0xba, 0x72, 0xef, 0x18, + 0xee, 0x35, 0xfa, 0xad, 0x35, 0x5a, 0x74, 0x8d, 0x8e, 0x89, 0x06, 0x56, + 0xd5, 0x8d, 0xc7, 0xc7, 0x27, 0x71, 0xdd, 0x60, 0xd4, 0x0f, 0xa6, 0xff, + 0x00, 0xfc, 0x8b, 0x56, 0x45, 0xd7, 0x97, 0x5e, 0xf2, 0x04, 0x19, 0xd0, + 0x0d, 0x52, 0x53, 0x4a, 0xe6, 0x38, 0x3c, 0xb8, 0x88, 0x92, 0x63, 0xe4, + 0xae, 0xf4, 0x1c, 0x36, 0xe6, 0x75, 0x3a, 0xab, 0x78, 0x26, 0xb6, 0x7e, + 0x92, 0xc0, 0x23, 0xe8, 0xb3, 0x58, 0xd7, 0xc4, 0xe8, 0x84, 0xe7, 0x06, + 0xf6, 0xd0, 0xce, 0xe3, 0xaf, 0x2b, 0xa0, 0xfa, 0xbb, 0x40, 0xc7, 0xc5, + 0xbb, 0x2c, 0xb7, 0x5b, 0x9d, 0xb1, 0x80, 0xf8, 0x37, 0xf7, 0x4e, 0xa7, + 0xe9, 0x14, 0x94, 0xea, 0x65, 0xdc, 0x08, 0x33, 0x1b, 0x49, 0xd7, 0xda, + 0x20, 0x86, 0xfc, 0x75, 0x1a, 0xae, 0x77, 0xa9, 0x5a, 0xe2, 0xf2, 0x1d, + 0xc9, 0xd7, 0xe4, 0xb5, 0x72, 0x5d, 0xbf, 0xf4, 0x60, 0x80, 0x5f, 0x00, + 0x18, 0x8e, 0x3e, 0x2b, 0x17, 0xa8, 0xd9, 0xba, 0xf7, 0x88, 0x82, 0xdd, + 0x3e, 0xe4, 0x94, 0xd3, 0xad, 0x86, 0xdb, 0xeb, 0x60, 0xd3, 0x79, 0x03, + 0xef, 0x30, 0xb6, 0xf3, 0xc1, 0xfb, 0x16, 0x5b, 0x99, 0xf9, 0xd6, 0x00, + 0x23, 0xf7, 0x43, 0x9a, 0x16, 0x6f, 0x49, 0x60, 0x77, 0x51, 0xc7, 0x27, + 0x86, 0x12, 0xf7, 0x7c, 0x1b, 0xee, 0x8f, 0xc1, 0x6d, 0xbb, 0x18, 0xbb, + 0xa3, 0xbb, 0x36, 0xb7, 0xcb, 0x36, 0xb9, 0xcf, 0x0e, 0xd3, 0x59, 0x83, + 0x1f, 0x34, 0x94, 0xe4, 0xf4, 0x70, 0x0e, 0x65, 0x0d, 0xe5, 0xad, 0xde, + 0xe1, 0x1d, 0xf6, 0xb4, 0xa0, 0xe7, 0x3e, 0x69, 0x03, 0x80, 0x0c, 0x91, + 0xa6, 0xa7, 0xe2, 0x8d, 0xd1, 0x25, 0xb9, 0x2e, 0xb3, 0x48, 0xaa, 0x87, + 0x98, 0x22, 0x64, 0xb8, 0x7f, 0xe6, 0x48, 0x57, 0x17, 0x1a, 0x1e, 0xe0, + 0x06, 0x9c, 0x4f, 0x10, 0x7b, 0xea, 0x92, 0x9d, 0x1e, 0x8d, 0x5f, 0xda, + 0x7a, 0x87, 0x48, 0x73, 0x88, 0x0d, 0xac, 0x17, 0x38, 0x9d, 0x04, 0x54, + 0x4b, 0x95, 0x8e, 0xbc, 0xea, 0xfa, 0x7f, 0x5e, 0xaf, 0xaa, 0x61, 0x3c, + 0x39, 0x96, 0xb8, 0x58, 0x43, 0x78, 0xf5, 0x1b, 0xa3, 0xc4, 0xff, 0x00, + 0x28, 0x2c, 0x7a, 0xc1, 0x77, 0x4f, 0xc7, 0x82, 0x41, 0x6b, 0xac, 0x06, + 0x3c, 0x1c, 0x42, 0x0d, 0xd8, 0xd7, 0x35, 0xfb, 0x89, 0x80, 0xe1, 0x2c, + 0x64, 0xfe, 0x77, 0x90, 0x49, 0x4f, 0x57, 0xd4, 0x7e, 0xb0, 0x1c, 0x8a, + 0xe3, 0x1e, 0x90, 0xc6, 0x58, 0x01, 0x0e, 0x71, 0x25, 0xd0, 0x7b, 0xe9, + 0x10, 0xb3, 0x2f, 0xc9, 0x73, 0x5b, 0x8f, 0x75, 0x8f, 0x20, 0x1b, 0x41, + 0xde, 0x4e, 0xbe, 0xc1, 0x22, 0x0f, 0xc4, 0xac, 0x23, 0x63, 0xe1, 0xa0, + 0x19, 0x04, 0x16, 0x89, 0xd4, 0x09, 0x5a, 0xd9, 0xbb, 0xb1, 0xdb, 0x8b, + 0x57, 0x2f, 0x65, 0x73, 0x11, 0xa4, 0xb8, 0xf8, 0x24, 0xa6, 0x9b, 0xec, + 0x36, 0xe5, 0xd9, 0x63, 0x89, 0x79, 0x76, 0xe7, 0x13, 0xc9, 0x33, 0xf1, + 0x47, 0xcb, 0xca, 0xf5, 0x0d, 0x2f, 0x01, 0xec, 0x68, 0x1f, 0x67, 0x2e, + 0x7c, 0x70, 0x47, 0x04, 0x4c, 0xe9, 0x0a, 0xa5, 0x26, 0x1c, 0xf7, 0x1e, + 0xc3, 0x5f, 0xbd, 0x3e, 0x46, 0xec, 0x8b, 0x1a, 0xc3, 0xb6, 0xa7, 0x00, + 0x60, 0x1f, 0xbb, 0x5f, 0x34, 0x94, 0xc9, 0xdb, 0x6b, 0x6b, 0x6b, 0x6e, + 0xb2, 0x49, 0xdd, 0xd9, 0x4e, 0x43, 0x5a, 0xe7, 0x3b, 0x84, 0x17, 0x54, + 0x7d, 0x50, 0xd0, 0x61, 0xac, 0x10, 0x39, 0xec, 0xad, 0x57, 0x8f, 0x5b, + 0x87, 0xb8, 0x6e, 0x03, 0x89, 0xf1, 0x49, 0x4d, 0x29, 0xf5, 0x6e, 0x63, + 0x07, 0x03, 0xdc, 0xef, 0x80, 0xec, 0xae, 0x3f, 0x69, 0x61, 0x1e, 0x23, + 0x54, 0x21, 0x8d, 0xbf, 0x24, 0xd5, 0x4c, 0x6f, 0x71, 0x0d, 0x63, 0xbb, + 0x0d, 0xca, 0x19, 0x63, 0x37, 0x07, 0x23, 0xec, 0xb9, 0x75, 0xfb, 0xf4, + 0xd0, 0x19, 0xdc, 0xd3, 0xc1, 0x69, 0x09, 0x29, 0xde, 0xfa, 0xb1, 0xf5, + 0x91, 0x98, 0x8d, 0xfd, 0x99, 0x9e, 0x40, 0x63, 0x49, 0xfb, 0x3d, 0xae, + 0xfa, 0x3a, 0xfe, 0x63, 0xff, 0x00, 0x81, 0x5b, 0xb7, 0xf5, 0x3a, 0x00, + 0x26, 0x2b, 0x60, 0xe4, 0x96, 0xf2, 0xbc, 0xf2, 0xd2, 0xc1, 0xa3, 0x8e, + 0xe8, 0xfc, 0xde, 0xea, 0xc7, 0x4e, 0xae, 0xec, 0x87, 0x59, 0x5e, 0xd7, + 0x3e, 0xb6, 0xb7, 0xe8, 0x82, 0x4e, 0xd9, 0x29, 0x29, 0xea, 0x9b, 0xd4, + 0xfa, 0x73, 0x9f, 0xeb, 0x64, 0xe4, 0xb0, 0x37, 0xf3, 0x59, 0xbb, 0x71, + 0x3f, 0x18, 0x9f, 0xb9, 0x3d, 0xdf, 0x59, 0xfa, 0x4d, 0x7c, 0x58, 0xeb, + 0x3f, 0xaa, 0xd3, 0xfc, 0x61, 0x73, 0x6f, 0xe9, 0x16, 0x56, 0x24, 0x35, + 0xce, 0x9e, 0x06, 0xb1, 0xf8, 0x21, 0x59, 0x86, 0xc7, 0xd6, 0xc9, 0xf6, + 0xed, 0xf6, 0x93, 0xaf, 0xf1, 0x49, 0x4f, 0x46, 0x3e, 0xb6, 0xf4, 0xb7, + 0x7b, 0x4b, 0x6d, 0x8f, 0x1d, 0xa0, 0xfe, 0x47, 0x2b, 0x54, 0xf5, 0xfe, + 0x93, 0x73, 0x4c, 0x65, 0x35, 0x87, 0xc2, 0xcf, 0x61, 0xff, 0x00, 0xa4, + 0x17, 0x26, 0xce, 0x94, 0xcb, 0x8c, 0x53, 0xac, 0x46, 0xee, 0x74, 0x9f, + 0x3e, 0xe8, 0xaf, 0xe8, 0x4d, 0x07, 0x4b, 0x1c, 0x20, 0x02, 0x77, 0x0d, + 0x3e, 0x09, 0x29, 0xec, 0xa8, 0xcc, 0xc3, 0xb1, 0xed, 0xf4, 0x6f, 0xae, + 0xc7, 0x9e, 0x1a, 0xd7, 0x35, 0xc4, 0xfd, 0xc5, 0x69, 0x56, 0xd0, 0xda, + 0x1a, 0x0b, 0x75, 0x3a, 0xc7, 0x9a, 0xe2, 0x7a, 0x0f, 0x4e, 0xae, 0x9e, + 0xad, 0x53, 0x81, 0x20, 0xb1, 0xaf, 0x3a, 0xf7, 0xf6, 0xc2, 0xee, 0xa4, + 0xfa, 0x20, 0x90, 0x23, 0xb1, 0xee, 0x92, 0x9e, 0x6f, 0x29, 0xf3, 0xd7, + 0x1c, 0x22, 0x61, 0xac, 0xef, 0xa4, 0x00, 0xb6, 0x81, 0x61, 0x68, 0xb0, + 0x6b, 0x23, 0x48, 0x58, 0x85, 0x81, 0xdd, 0x5a, 0xdb, 0x0b, 0xa3, 0x8d, + 0x38, 0xd3, 0xc9, 0x6e, 0x62, 0xfd, 0x03, 0xc0, 0xf0, 0x3e, 0x09, 0x29, + 0x59, 0x00, 0x7d, 0x9c, 0x88, 0x91, 0x0a, 0x98, 0xac, 0x1d, 0x22, 0x4f, + 0xe6, 0xf8, 0x00, 0x56, 0x86, 0x40, 0x26, 0xa7, 0x98, 0xe4, 0x6a, 0x7b, + 0xac, 0xf6, 0x98, 0xd3, 0x4f, 0x12, 0x52, 0x52, 0x76, 0xd2, 0x03, 0x1a, + 0x1b, 0xa0, 0x6c, 0x82, 0x00, 0x4a, 0xca, 0xdc, 0xcc, 0x4b, 0x08, 0x68, + 0x2f, 0x82, 0x40, 0x7f, 0xd1, 0xd3, 0xc5, 0x1a, 0x98, 0x73, 0x1b, 0x1c, + 0x9e, 0x0f, 0x01, 0x48, 0xb0, 0x90, 0xfa, 0xdd, 0xa6, 0xe1, 0xac, 0x71, + 0xa8, 0xec, 0x92, 0x9c, 0x4c, 0x6c, 0x9c, 0x83, 0xa5, 0x38, 0xec, 0x30, + 0x20, 0xba, 0xa2, 0xd3, 0xfd, 0xc5, 0x4b, 0xa8, 0xdb, 0x91, 0x4e, 0x29, + 0xb4, 0x38, 0x35, 0xcc, 0x6c, 0xc0, 0x00, 0xbd, 0xcf, 0xec, 0xd1, 0x2b, + 0x3c, 0x60, 0xe5, 0x92, 0x5f, 0x89, 0x98, 0xd0, 0x41, 0x20, 0xbc, 0xb0, + 0xb1, 0xed, 0x23, 0xb3, 0xb6, 0x95, 0x26, 0xe0, 0x5c, 0xf2, 0x0e, 0x75, + 0xe3, 0x26, 0xdf, 0xcd, 0x60, 0x92, 0xd9, 0x8e, 0x4c, 0xf6, 0x49, 0x48, + 0xe8, 0xeb, 0x79, 0xb7, 0x61, 0x4e, 0x55, 0x41, 0x97, 0x31, 0xc2, 0x08, + 0x1e, 0xd7, 0x81, 0xac, 0xc0, 0xe1, 0x68, 0xfa, 0xe7, 0x66, 0xe9, 0x1f, + 0x4b, 0xe5, 0xcc, 0xfe, 0x44, 0x21, 0x89, 0x8a, 0xca, 0xb6, 0xd7, 0x53, + 0x78, 0x82, 0x00, 0x83, 0x31, 0x06, 0x15, 0x4f, 0xb4, 0xd7, 0xf6, 0x6f, + 0x4e, 0x4f, 0xa9, 0x3b, 0x76, 0x41, 0x9d, 0xdb, 0x76, 0x7d, 0xe9, 0x29, + 0xcf, 0x7e, 0xd6, 0xb2, 0x18, 0x00, 0x1f, 0x95, 0x63, 0x3a, 0x1d, 0x63, + 0x8f, 0x1a, 0x9f, 0xca, 0xb4, 0xad, 0xb7, 0xc3, 0x8e, 0x01, 0x55, 0x2b, + 0xc2, 0xb7, 0xe9, 0x3d, 0xae, 0x60, 0x74, 0xc3, 0x83, 0x49, 0x1f, 0x34, + 0x94, 0x84, 0x00, 0xc3, 0x0d, 0x77, 0x7d, 0x67, 0x85, 0xd5, 0xb5, 0xbf, + 0x67, 0xc3, 0xa6, 0x91, 0x00, 0x06, 0x82, 0xe8, 0x30, 0x1c, 0x7e, 0x91, + 0xd7, 0xe2, 0x56, 0x26, 0x37, 0x4e, 0x73, 0xf2, 0x18, 0xd6, 0x9f, 0x51, + 0xa5, 0xe3, 0x71, 0x68, 0xd2, 0x06, 0xbc, 0xf0, 0xb6, 0x6f, 0x79, 0xb2, + 0xe9, 0x9f, 0xa4, 0x44, 0x81, 0xac, 0xc9, 0xef, 0xe0, 0x92, 0x90, 0xdc, + 0x59, 0x2d, 0x7b, 0xc9, 0x1e, 0x90, 0x24, 0xcf, 0x73, 0x1b, 0xb9, 0x58, + 0x17, 0xdd, 0xbc, 0xb8, 0x9e, 0x4e, 0xab, 0x73, 0xae, 0xbb, 0x1e, 0x8c, + 0x4c, 0x71, 0x51, 0x9c, 0x8c, 0x86, 0xef, 0xb4, 0x4f, 0x00, 0xb8, 0xed, + 0xfc, 0x17, 0x36, 0xe3, 0x3f, 0x3e, 0x42, 0x4a, 0x75, 0xba, 0x23, 0x40, + 0xc6, 0xcd, 0xcb, 0x77, 0x15, 0x54, 0x6b, 0x1f, 0xd6, 0xb2, 0x00, 0xfc, + 0x25, 0x6f, 0x61, 0xe2, 0x3a, 0xcf, 0xab, 0xae, 0x61, 0xb3, 0xdb, 0x6d, + 0x4e, 0x10, 0x78, 0x69, 0x0e, 0x77, 0xf1, 0x0b, 0x02, 0xb2, 0xec, 0x5e, + 0x8c, 0xda, 0x9d, 0xf4, 0xb2, 0x9d, 0xeb, 0x91, 0x3d, 0x98, 0x0b, 0x58, + 0x0f, 0xc7, 0x95, 0xad, 0x5d, 0xce, 0xc7, 0xfa, 0xaf, 0x8f, 0x53, 0x8b, + 0x9a, 0xeb, 0x74, 0x6f, 0xf5, 0x77, 0xb9, 0xee, 0x03, 0xe4, 0x12, 0x53, + 0x99, 0xd2, 0xda, 0x3d, 0x2e, 0xa3, 0x91, 0x30, 0xca, 0xaa, 0x6d, 0x4d, + 0x3e, 0x6e, 0x70, 0xd7, 0xfe, 0x8a, 0xa8, 0xdd, 0xe3, 0x1a, 0xc3, 0xa1, + 0x64, 0x00, 0x24, 0x4f, 0xdc, 0xaf, 0xd7, 0xfa, 0xaf, 0xd5, 0xa2, 0xf7, + 0x0f, 0x76, 0x4d, 0xcd, 0x86, 0x8e, 0xe1, 0x82, 0x7f, 0x8a, 0xa5, 0x8e, + 0xf1, 0x77, 0xaa, 0xfb, 0x9a, 0xed, 0x8d, 0x67, 0xb0, 0x34, 0x86, 0xa4, + 0xa4, 0xb8, 0xbb, 0x46, 0x05, 0x53, 0xfe, 0x91, 0xfa, 0x7d, 0xc9, 0xc7, + 0xa7, 0x6d, 0xae, 0x0e, 0x33, 0xb5, 0xb0, 0x09, 0xed, 0xe6, 0xa3, 0x43, + 0x76, 0x61, 0xd5, 0xe0, 0x5c, 0xf7, 0x0f, 0xc0, 0x7f, 0x04, 0x07, 0x49, + 0xa9, 0xe4, 0x98, 0x78, 0x24, 0x81, 0xe5, 0x09, 0x29, 0x7c, 0x68, 0xae, + 0xfa, 0xec, 0x74, 0x3a, 0xa7, 0x3b, 0x53, 0xdb, 0x53, 0x05, 0x69, 0xf5, + 0x8a, 0xad, 0x39, 0x32, 0xca, 0xcb, 0xc8, 0xda, 0xd6, 0x11, 0xa8, 0x80, + 0x35, 0x3a, 0x2c, 0x9a, 0x2c, 0xc7, 0xb3, 0x1d, 0x8c, 0xb1, 0xdb, 0x5d, + 0x51, 0x30, 0x38, 0x90, 0x55, 0xdc, 0x8e, 0xa1, 0x8f, 0x95, 0x91, 0x8e, + 0xd2, 0x1e, 0xda, 0xea, 0x69, 0x2f, 0x73, 0x5d, 0x06, 0x7c, 0x41, 0x3e, + 0x41, 0x25, 0x35, 0x5a, 0xdf, 0x41, 0xc4, 0xde, 0x43, 0x37, 0x41, 0x8e, + 0x5d, 0xa1, 0xf0, 0x49, 0xec, 0x75, 0xc5, 0xf7, 0x35, 0x85, 0xb5, 0xc1, + 0xd4, 0xf2, 0x7e, 0x0a, 0xb3, 0x1a, 0xc7, 0xd8, 0xf7, 0xbc, 0xb9, 0xcc, + 0x69, 0x9d, 0x79, 0x89, 0x5a, 0x10, 0x1c, 0xc8, 0x69, 0x22, 0x74, 0x3e, + 0x43, 0xcd, 0x25, 0x34, 0x03, 0xef, 0x6c, 0x9a, 0xec, 0x74, 0x1f, 0x18, + 0xfe, 0x2a, 0x0e, 0xbf, 0x24, 0x08, 0xde, 0x75, 0x45, 0x32, 0x0b, 0x99, + 0xe0, 0x75, 0x3f, 0x04, 0x3b, 0x07, 0x64, 0x94, 0xec, 0xf4, 0x4a, 0x83, + 0xad, 0xc6, 0x71, 0x74, 0x81, 0xee, 0x3f, 0x22, 0x54, 0xbe, 0xb4, 0xed, + 0xfb, 0x7d, 0x0e, 0x89, 0xdd, 0x54, 0x1f, 0x19, 0x0e, 0x28, 0x7d, 0x30, + 0xd8, 0xca, 0x1a, 0xfa, 0x44, 0xb8, 0x08, 0x20, 0xf9, 0x9d, 0x4a, 0x87, + 0x5b, 0xb2, 0xcb, 0x2c, 0xa5, 0xcf, 0x04, 0x6c, 0x90, 0x27, 0xcf, 0x54, + 0x94, 0xd0, 0x6d, 0x35, 0x0d, 0x46, 0xa4, 0xf6, 0x1c, 0xfe, 0x2b, 0x5f, + 0xea, 0xd9, 0x34, 0xf5, 0x07, 0x0d, 0xc5, 0xa0, 0xd6, 0x49, 0x1e, 0x3a, + 0x8d, 0x0a, 0xca, 0x2d, 0x69, 0x99, 0x00, 0xe9, 0xca, 0xb7, 0xd1, 0x5e, + 0xe6, 0x65, 0xcd, 0x7a, 0x9d, 0x8e, 0xe7, 0xe2, 0x12, 0x53, 0xd9, 0x7a, + 0xe3, 0x90, 0x7f, 0x8a, 0x66, 0xba, 0xbb, 0x0c, 0x96, 0xb4, 0xf9, 0xc4, + 0xac, 0xd1, 0x91, 0x6b, 0x7e, 0x97, 0x7e, 0xf3, 0xa7, 0xe0, 0xa6, 0xcc, + 0xc6, 0x0f, 0x69, 0x1b, 0x5c, 0x7f, 0x2a, 0x4a, 0x74, 0x22, 0xb1, 0xf9, + 0xad, 0xfb, 0x82, 0x52, 0xc9, 0xfa, 0x0d, 0x3e, 0x26, 0x02, 0xcf, 0x66, + 0x75, 0x6f, 0x96, 0xd6, 0x77, 0x3c, 0x72, 0x07, 0x20, 0xfc, 0xd1, 0x05, + 0xc7, 0x61, 0x97, 0x00, 0xef, 0xbd, 0x25, 0x3a, 0x18, 0xed, 0x63, 0xed, + 0x00, 0x35, 0xad, 0xf0, 0x22, 0x25, 0x5d, 0x79, 0x2d, 0xa8, 0x07, 0x08, + 0xd2, 0x01, 0x58, 0x55, 0xe5, 0x16, 0x38, 0x3e, 0xb7, 0x49, 0x1f, 0x25, + 0x70, 0xf5, 0x3b, 0x1e, 0xd0, 0xc7, 0xb0, 0x16, 0x8d, 0x64, 0x76, 0x49, + 0x4d, 0x76, 0xd4, 0xd7, 0x5c, 0xe7, 0x38, 0x97, 0x6b, 0xae, 0x9d, 0x8a, + 0xd0, 0xc4, 0x3b, 0x0b, 0xdb, 0x33, 0xba, 0x0e, 0xbc, 0x4a, 0xcb, 0x7e, + 0x56, 0x3d, 0x59, 0x01, 0x8e, 0xb9, 0xac, 0x7b, 0xb5, 0x20, 0x9d, 0xba, + 0x7f, 0x69, 0x5e, 0x63, 0xc0, 0x6e, 0xf6, 0x8d, 0xec, 0x3c, 0x96, 0x99, + 0xfc, 0x89, 0x29, 0xbd, 0x92, 0xef, 0xd1, 0x38, 0x6b, 0x3b, 0x79, 0x0b, + 0x3d, 0xaf, 0x63, 0x01, 0x78, 0x27, 0x4d, 0x1d, 0x23, 0x95, 0x64, 0x90, + 0xea, 0x49, 0x74, 0x88, 0x04, 0x9f, 0x20, 0x02, 0xc3, 0x67, 0x5f, 0xe9, + 0x76, 0x45, 0x4c, 0x7b, 0xac, 0xb1, 0xc7, 0x68, 0x1b, 0x4c, 0x7e, 0x29, + 0x29, 0xdd, 0xab, 0xd5, 0xda, 0x1f, 0x5c, 0x78, 0xb4, 0x3b, 0x8f, 0xc1, + 0x1c, 0xbe, 0xc1, 0xe0, 0x03, 0x80, 0x2e, 0x3e, 0x73, 0xd9, 0x66, 0xd3, + 0xd5, 0x71, 0xab, 0xa9, 0xad, 0x7b, 0x88, 0x70, 0x93, 0xc1, 0x3f, 0x91, + 0x47, 0x27, 0xeb, 0x0e, 0x0e, 0x3e, 0xd7, 0x38, 0x3e, 0xc2, 0xe1, 0x2c, + 0xda, 0xdf, 0x96, 0xbb, 0x88, 0x8e, 0x12, 0x53, 0xcd, 0xe4, 0xf5, 0x0a, + 0x70, 0xfa, 0xb6, 0x58, 0xa9, 0xf3, 0x8d, 0x65, 0xce, 0xdc, 0xf1, 0x30, + 0xd7, 0x10, 0x0b, 0xa0, 0x7f, 0x5b, 0x45, 0xa3, 0x55, 0xac, 0xa8, 0x0b, + 0x18, 0x37, 0xd7, 0x66, 0xbe, 0xa0, 0x23, 0x71, 0x95, 0xcd, 0xe7, 0xda, + 0x32, 0x32, 0xae, 0x7d, 0x75, 0x16, 0x36, 0xeb, 0x1c, 0xf0, 0xce, 0x4e, + 0xa4, 0xee, 0x6f, 0xf1, 0x56, 0x3a, 0x7e, 0x70, 0xe9, 0xe3, 0xec, 0xd7, + 0x3c, 0xb9, 0xa4, 0xc9, 0x81, 0x22, 0xb3, 0xfc, 0x99, 0xe7, 0xcd, 0x25, + 0x3d, 0x0c, 0xbd, 0xde, 0xf6, 0x98, 0x67, 0x7e, 0xc4, 0x26, 0xf4, 0x6c, + 0x9f, 0xb5, 0x76, 0xf0, 0xef, 0x3c, 0x6e, 0xfb, 0x93, 0x7a, 0x98, 0xd5, + 0xb3, 0xd6, 0xbe, 0xc9, 0x6b, 0x40, 0x25, 0xee, 0x3a, 0x47, 0xc3, 0x85, + 0x4b, 0xfe, 0x75, 0x63, 0x7d, 0xa7, 0xd3, 0xf4, 0xdd, 0xf6, 0x7e, 0x3d, + 0x6e, 0xff, 0x00, 0x1d, 0xbe, 0x09, 0x29, 0x2d, 0x78, 0x58, 0xfb, 0x8f, + 0xd9, 0x9d, 0x5e, 0x58, 0x01, 0xc6, 0xd2, 0xed, 0x1a, 0xcd, 0xa7, 0x4e, + 0x34, 0x92, 0x8d, 0x6d, 0xb8, 0xff, 0x00, 0xa2, 0x39, 0x14, 0x93, 0xb9, + 0xc1, 0x95, 0x54, 0xc1, 0xbc, 0xcc, 0x6a, 0x74, 0x5a, 0x57, 0x61, 0x56, + 0xe8, 0x7d, 0x6f, 0x34, 0x06, 0x99, 0xf6, 0x3b, 0x63, 0x60, 0x73, 0xed, + 0x20, 0xb7, 0xf0, 0x40, 0xac, 0xd7, 0x43, 0xac, 0x35, 0x38, 0xfa, 0x80, + 0x48, 0x7b, 0xe0, 0x3a, 0x0f, 0xf6, 0x63, 0xee, 0x09, 0x29, 0xab, 0x25, + 0xe5, 0xd6, 0x86, 0x1a, 0x58, 0xcd, 0xcc, 0x65, 0x64, 0xc6, 0xe1, 0xd9, + 0xdb, 0x42, 0xa6, 0xe7, 0x4b, 0x9c, 0xe3, 0x3a, 0x6e, 0x33, 0xc4, 0xc0, + 0xd3, 0xda, 0xae, 0x59, 0x91, 0x90, 0x59, 0x61, 0xb9, 0xac, 0x63, 0xac, + 0x70, 0x78, 0x15, 0x99, 0xdc, 0x38, 0xdc, 0x66, 0x08, 0x3a, 0x2c, 0xb7, + 0x59, 0x0d, 0x73, 0x84, 0x49, 0xfb, 0xf9, 0x9d, 0x4f, 0x74, 0x94, 0xe7, + 0xf5, 0x3c, 0x97, 0xe4, 0x65, 0x3d, 0xe7, 0x81, 0x0d, 0x6f, 0x93, 0x5a, + 0x36, 0x81, 0xf7, 0x2a, 0xd8, 0x38, 0xbf, 0x6e, 0xcb, 0x65, 0x1e, 0xab, + 0x29, 0x1c, 0x97, 0xd8, 0x60, 0x40, 0xe6, 0x3c, 0xd4, 0xef, 0xbc, 0x81, + 0xbb, 0x63, 0x01, 0x3f, 0xc9, 0x08, 0x4c, 0xb6, 0xd6, 0x80, 0x44, 0x07, + 0x3f, 0xe8, 0x00, 0x23, 0xe6, 0x7f, 0x82, 0x4a, 0x7a, 0x4c, 0xbe, 0x8f, + 0x91, 0x66, 0x38, 0xaf, 0x16, 0xca, 0x6e, 0x71, 0x3c, 0x4b, 0x5a, 0xff, + 0x00, 0x6e, 0x90, 0x0b, 0xb8, 0x08, 0xfd, 0x63, 0x1b, 0x24, 0x1c, 0x4c, + 0x63, 0x56, 0xea, 0xa8, 0xa0, 0xd6, 0xdd, 0xa4, 0x12, 0xfb, 0x5c, 0xdd, + 0xa7, 0x6f, 0xf6, 0x56, 0x1e, 0xe7, 0x59, 0x9f, 0x40, 0x6b, 0xdc, 0x5a, + 0x5f, 0x5b, 0x1d, 0xac, 0x07, 0x0d, 0xdb, 0x23, 0x4f, 0x14, 0xfd, 0x4b, + 0x26, 0xf6, 0x66, 0x5f, 0xe9, 0xd8, 0x59, 0xe9, 0x5c, 0xef, 0x44, 0x03, + 0xa3, 0x5a, 0xd3, 0xb4, 0x06, 0xfd, 0xc9, 0x29, 0x9e, 0x4d, 0x96, 0x16, + 0x55, 0x88, 0xf6, 0xed, 0xaf, 0x15, 0xa5, 0xa1, 0xa4, 0x47, 0xb8, 0x99, + 0x74, 0xcf, 0x9a, 0x88, 0x6b, 0x7e, 0xcf, 0x7b, 0x8c, 0xfd, 0x11, 0x04, + 0x09, 0x83, 0xe0, 0xaa, 0xdb, 0x9b, 0x90, 0x58, 0x3d, 0x7b, 0x5d, 0x61, + 0x80, 0x1a, 0x1c, 0x66, 0x00, 0xf8, 0xab, 0x58, 0x8d, 0x73, 0xba, 0x5d, + 0xd6, 0xbc, 0x9f, 0x7b, 0x89, 0x13, 0xc1, 0xda, 0x3b, 0x24, 0xa4, 0x65, + 0xee, 0xaf, 0x0f, 0x15, 0x9d, 0xcb, 0x5c, 0xf8, 0x1f, 0xca, 0x71, 0x42, + 0xa9, 0xb7, 0x3d, 0xce, 0xda, 0xc0, 0x1a, 0x0c, 0x10, 0x79, 0xdc, 0x46, + 0x9f, 0x8a, 0xd2, 0x18, 0xbb, 0xdb, 0x50, 0x88, 0xf4, 0xeb, 0x63, 0x79, + 0xf2, 0x9f, 0xe2, 0xa1, 0x76, 0x0e, 0x43, 0x2d, 0xf5, 0x71, 0x9b, 0xbf, + 0x74, 0x6f, 0x68, 0x30, 0x64, 0x70, 0x75, 0x49, 0x4e, 0x7b, 0x7a, 0x7d, + 0x8d, 0x78, 0x0e, 0x23, 0x75, 0x9a, 0x01, 0x1c, 0xeb, 0xa9, 0x56, 0xeb, + 0xc1, 0x17, 0x35, 0xd5, 0x30, 0x08, 0x69, 0x9b, 0x08, 0xd3, 0x73, 0x80, + 0xfa, 0x23, 0xc8, 0x27, 0xb2, 0xbc, 0xba, 0x58, 0x72, 0x72, 0x37, 0x7a, + 0xad, 0x00, 0x31, 0xed, 0xda, 0x59, 0x5b, 0x67, 0xdc, 0xd7, 0x0e, 0x64, + 0xa8, 0xd5, 0xd4, 0xf2, 0xac, 0x60, 0x1e, 0xad, 0x60, 0xb7, 0x8d, 0xc0, + 0x8f, 0xc6, 0x02, 0x4a, 0x68, 0xe2, 0x90, 0x1c, 0xf1, 0xe5, 0xf0, 0xe0, + 0xa3, 0x9c, 0x86, 0xd8, 0xf0, 0xc0, 0x03, 0x41, 0x3a, 0x89, 0xfe, 0x2a, + 0xcb, 0x6b, 0xc7, 0x6b, 0xa6, 0xcc, 0x66, 0x92, 0xff, 0x00, 0x6e, 0xea, + 0x2c, 0xdd, 0xa9, 0xf2, 0x04, 0xa4, 0xce, 0x9b, 0xe9, 0x58, 0xf2, 0xf2, + 0x4f, 0x00, 0x0e, 0xe2, 0x52, 0x53, 0x49, 0xc3, 0x75, 0x82, 0x74, 0x93, + 0xaf, 0x82, 0x6b, 0xeb, 0x00, 0x6e, 0xd7, 0x4e, 0xe8, 0xb9, 0x2c, 0x2c, + 0x2c, 0xec, 0x48, 0xd4, 0x78, 0x6d, 0x30, 0x87, 0x63, 0x1c, 0x59, 0xa7, + 0x1d, 0xcf, 0x60, 0x92, 0x9b, 0x78, 0xd6, 0x96, 0xd5, 0x53, 0x00, 0xd2, + 0x24, 0x91, 0xe2, 0x51, 0x7a, 0xa3, 0x5c, 0xec, 0x36, 0x3d, 0xe6, 0x5e, + 0xd7, 0x09, 0x3f, 0x15, 0x0c, 0x36, 0xc5, 0x6d, 0xd6, 0x7b, 0x80, 0x3c, + 0x15, 0x8c, 0xd0, 0x1d, 0x86, 0xf0, 0x48, 0x92, 0xd9, 0x03, 0xe1, 0xaa, + 0x4a, 0x72, 0x5a, 0x7d, 0xb2, 0x78, 0x2a, 0xf7, 0x49, 0x64, 0xe4, 0x82, + 0x0e, 0xbb, 0x0e, 0x83, 0x5e, 0xea, 0x83, 0x4c, 0xb0, 0x2b, 0xbd, 0x31, + 0xa0, 0x66, 0x7f, 0x60, 0x81, 0xac, 0x78, 0x24, 0xa7, 0x67, 0x4e, 0x09, + 0x83, 0xe7, 0xaa, 0x97, 0xa4, 0xcd, 0xa4, 0x4e, 0x9c, 0x90, 0x46, 0x88, + 0x00, 0x53, 0x3c, 0x0f, 0x8c, 0xca, 0xb0, 0xc8, 0x20, 0x35, 0xba, 0x47, + 0x29, 0x29, 0x8f, 0xd9, 0x99, 0x3b, 0x86, 0x9e, 0x3a, 0x27, 0x75, 0x15, + 0xcc, 0xc9, 0xd4, 0x79, 0xa9, 0x97, 0x13, 0xa1, 0xe3, 0xc2, 0x54, 0x4b, + 0xc8, 0xed, 0xa7, 0x71, 0xd9, 0x25, 0x2e, 0x2a, 0xda, 0x3d, 0x84, 0x03, + 0xf0, 0x4e, 0x2d, 0x73, 0x0b, 0x77, 0x12, 0x01, 0xef, 0xe0, 0xa0, 0xc1, + 0x63, 0xa5, 0xa1, 0xdf, 0x7f, 0xe4, 0x52, 0xd9, 0x6b, 0x47, 0xba, 0x63, + 0xba, 0x4a, 0x73, 0xfa, 0xa5, 0x3f, 0x69, 0xb7, 0x7c, 0xcc, 0x36, 0x27, + 0xb2, 0xcb, 0x38, 0xd6, 0x54, 0xe0, 0x6a, 0x7b, 0x9a, 0x47, 0x3b, 0x49, + 0x1f, 0x91, 0x74, 0xf5, 0x50, 0x1e, 0xd7, 0x4e, 0xba, 0xfe, 0x0a, 0xae, + 0x56, 0x33, 0x59, 0x01, 0xa3, 0x49, 0x04, 0xfc, 0x25, 0x25, 0x38, 0xd6, + 0x59, 0xd5, 0x69, 0xb5, 0xd8, 0xd6, 0x65, 0xda, 0x43, 0x7f, 0x37, 0x7b, + 0xa0, 0x87, 0x09, 0xf1, 0x44, 0xe9, 0xf4, 0x1a, 0xf2, 0xaa, 0x7b, 0x87, + 0xd1, 0x70, 0x31, 0xf0, 0x5a, 0x79, 0xf8, 0xec, 0xb3, 0xa8, 0x10, 0xd0, + 0x08, 0x2c, 0x6c, 0xfc, 0x75, 0x45, 0xa7, 0x09, 0xac, 0xf7, 0x8e, 0xc3, + 0x44, 0x94, 0xe8, 0xdb, 0xb1, 0xc3, 0x46, 0x09, 0x3c, 0x03, 0xc6, 0xbe, + 0x61, 0x53, 0x76, 0x15, 0x36, 0x19, 0x71, 0x24, 0x81, 0x0d, 0x02, 0x34, + 0xf9, 0xc7, 0x65, 0x69, 0xb5, 0x00, 0xd9, 0x1a, 0x82, 0x3b, 0xe8, 0x90, + 0x63, 0x5a, 0x35, 0x1a, 0x7e, 0x44, 0x94, 0xd0, 0xbf, 0x0e, 0x96, 0xb7, + 0xd5, 0x71, 0x0d, 0xf4, 0xf5, 0x6b, 0xb8, 0xe1, 0x64, 0x3d, 0xb8, 0x82, + 0x5d, 0x5b, 0xa5, 0xc4, 0x68, 0x76, 0x38, 0x82, 0x08, 0x20, 0x7b, 0x63, + 0x42, 0xba, 0x43, 0x45, 0x37, 0x69, 0x1b, 0xd8, 0x7b, 0x72, 0xa3, 0xf6, + 0x3a, 0x1d, 0xf9, 0x93, 0xf1, 0x30, 0x92, 0x9e, 0x58, 0xe2, 0xb6, 0xcd, + 0xa1, 0xf6, 0x3c, 0xb0, 0x1d, 0xad, 0x1b, 0x4e, 0xc0, 0x07, 0x7d, 0x4f, + 0x01, 0x4b, 0xec, 0xb8, 0xbb, 0x7e, 0x8b, 0xf7, 0xc6, 0xef, 0xa0, 0x26, + 0x3e, 0x13, 0xf3, 0x5d, 0x48, 0xc3, 0xc7, 0x68, 0x2d, 0x0d, 0x20, 0x76, + 0x77, 0x30, 0x9b, 0xec, 0xd4, 0x4c, 0x47, 0xbb, 0xc7, 0x68, 0x49, 0x4d, + 0xcb, 0x0d, 0x36, 0xb4, 0x34, 0x92, 0x5a, 0x47, 0xb8, 0x8d, 0x04, 0x14, + 0x0f, 0xb3, 0xe3, 0xbe, 0xb8, 0x16, 0x39, 0xf5, 0x6a, 0x36, 0x97, 0x4b, + 0x75, 0xe6, 0x42, 0x08, 0x6d, 0x65, 0xe0, 0xdb, 0x58, 0x36, 0x34, 0xe8, + 0x35, 0x21, 0xa3, 0xc0, 0x76, 0x46, 0xdc, 0x49, 0x22, 0x20, 0x71, 0xa0, + 0xd2, 0x12, 0x53, 0x4b, 0xa9, 0x7a, 0x35, 0xd2, 0xda, 0xd9, 0xb4, 0x06, + 0xc8, 0x31, 0xa0, 0x80, 0x34, 0x95, 0x8c, 0xf7, 0x18, 0x2d, 0x04, 0xe9, + 0x11, 0x3f, 0x35, 0xa9, 0xd4, 0xf4, 0xad, 0x81, 0xa7, 0x99, 0x82, 0x04, + 0xf6, 0x59, 0x94, 0xd4, 0x6e, 0x7b, 0x6b, 0xae, 0x25, 0xef, 0x01, 0xb1, + 0x2e, 0xd6, 0x1d, 0xe2, 0x92, 0x9c, 0xab, 0xb6, 0xba, 0xc3, 0x23, 0xda, + 0xdd, 0x20, 0x69, 0x2e, 0xf0, 0x44, 0xc6, 0x6b, 0x8b, 0x9d, 0x73, 0xe0, + 0x16, 0x82, 0x64, 0xe8, 0x26, 0x34, 0xfb, 0x94, 0x86, 0x35, 0x8e, 0x79, + 0x73, 0x84, 0x00, 0x60, 0x37, 0xb8, 0xd7, 0xf2, 0xa8, 0x66, 0xda, 0x19, + 0x59, 0xc7, 0x67, 0x62, 0x03, 0xc8, 0xee, 0x79, 0x29, 0x29, 0x1b, 0xee, + 0x77, 0xad, 0x50, 0xa4, 0x90, 0x18, 0x01, 0x67, 0x8e, 0xef, 0x14, 0x47, + 0x0d, 0xc4, 0x99, 0x90, 0xdd, 0x1a, 0x7f, 0x7a, 0x39, 0x28, 0x35, 0x6d, + 0x63, 0xc3, 0x9d, 0xcc, 0x43, 0x7c, 0x8f, 0x12, 0x8f, 0x66, 0xd6, 0xd7, + 0xb8, 0xe8, 0x00, 0x80, 0x92, 0x9a, 0xce, 0x00, 0x9d, 0xce, 0xd4, 0xf8, + 0x95, 0xd1, 0x1a, 0x3d, 0x3e, 0x91, 0x87, 0x8e, 0x40, 0x0f, 0xb8, 0x82, + 0x7f, 0xeb, 0x8e, 0x9f, 0xc8, 0xb9, 0xec, 0x6a, 0xce, 0x56, 0x55, 0x54, + 0x0d, 0x05, 0x8f, 0x0d, 0xfb, 0xca, 0xea, 0x73, 0x1a, 0xd7, 0xf5, 0x1a, + 0xa8, 0xa8, 0x43, 0x29, 0x05, 0xd0, 0x3c, 0x47, 0xb1, 0xbf, 0x8a, 0x4a, + 0x6c, 0x55, 0x5b, 0x5c, 0xdd, 0x43, 0x84, 0x9e, 0x48, 0x02, 0x7e, 0x0a, + 0x66, 0xaa, 0x58, 0xe3, 0x32, 0x4b, 0x46, 0xba, 0xf0, 0xa5, 0x04, 0xf8, + 0x0f, 0x32, 0x49, 0xfc, 0x90, 0x86, 0xf6, 0x0d, 0xb0, 0x7d, 0xda, 0xcc, + 0x8d, 0x35, 0x49, 0x4b, 0x16, 0x07, 0x72, 0x61, 0x86, 0x41, 0x1f, 0x4a, + 0x67, 0xc9, 0x56, 0x1d, 0x2f, 0x0d, 0xba, 0x30, 0x18, 0x3e, 0x07, 0xf8, + 0x19, 0x46, 0x75, 0xc0, 0x38, 0x06, 0x81, 0xe7, 0xbb, 0xb0, 0xee, 0x84, + 0x32, 0xe9, 0x73, 0x8e, 0xd2, 0x4c, 0x78, 0x08, 0x11, 0xf1, 0x49, 0x4e, + 0x47, 0x53, 0xae, 0xbc, 0x0b, 0xd8, 0x5b, 0x50, 0x75, 0x6f, 0x12, 0xd7, + 0xcc, 0x38, 0x38, 0x1d, 0x78, 0x56, 0xfa, 0x4e, 0x63, 0x1e, 0xe3, 0x45, + 0xf0, 0x5e, 0x7d, 0xf5, 0xb8, 0x93, 0xee, 0x9e, 0x42, 0x27, 0x51, 0xae, + 0xbc, 0xdc, 0x63, 0x5b, 0x75, 0x73, 0x4e, 0xe6, 0x3b, 0xc0, 0xff, 0x00, + 0x71, 0x58, 0x40, 0xba, 0x93, 0xe9, 0x5e, 0x0b, 0x0b, 0x75, 0x6b, 0xbb, + 0x8f, 0x31, 0xe2, 0x92, 0x9d, 0x5e, 0xac, 0xc8, 0x7d, 0x4f, 0x6b, 0x9b, + 0xce, 0xd7, 0x30, 0xfd, 0x26, 0xc9, 0xfa, 0x4a, 0xbe, 0x55, 0x36, 0xb2, + 0xa3, 0xbb, 0x88, 0xe4, 0x21, 0xd4, 0x1f, 0x92, 0x22, 0xb7, 0x17, 0x39, + 0xa2, 0x4b, 0xdc, 0x36, 0xb4, 0x37, 0xf1, 0x2a, 0xd5, 0xb8, 0xd9, 0x4c, + 0xac, 0x80, 0x7d, 0x56, 0x4c, 0x7a, 0x4e, 0x0e, 0xdd, 0xf2, 0x74, 0x04, + 0x94, 0x9f, 0x06, 0xc7, 0x3b, 0x16, 0xb6, 0x35, 0xa2, 0x60, 0xc1, 0xe3, + 0xbf, 0x8a, 0x25, 0xac, 0x71, 0xac, 0x8d, 0xa1, 0xc4, 0x8d, 0x0e, 0x9f, + 0xc5, 0x47, 0x0e, 0xb7, 0x0a, 0x19, 0x5b, 0x86, 0xd8, 0x9d, 0xc2, 0x24, + 0x89, 0xd5, 0x58, 0xd9, 0x50, 0x77, 0xb4, 0xed, 0x27, 0x4e, 0x39, 0x49, + 0x4e, 0x2d, 0x0d, 0x65, 0xe2, 0x5a, 0xcd, 0x85, 0xa0, 0x93, 0x07, 0x4f, + 0xc5, 0x1b, 0x0b, 0xdb, 0x98, 0x21, 0xa4, 0xba, 0x0e, 0xe7, 0x72, 0xd8, + 0xe7, 0x48, 0x50, 0xad, 0x96, 0xb4, 0x3e, 0x8a, 0x41, 0x36, 0x6e, 0xd7, + 0x49, 0x86, 0x83, 0xfc, 0x51, 0x71, 0x0d, 0x8d, 0xcb, 0x0e, 0x35, 0x39, + 0x8f, 0x01, 0xc6, 0x00, 0xd1, 0xd1, 0xcc, 0x24, 0xa7, 0x55, 0xae, 0xf0, + 0x68, 0x12, 0x7c, 0x0a, 0x23, 0x6d, 0xf6, 0xea, 0xd8, 0x27, 0xc7, 0x45, + 0x16, 0x3c, 0xbd, 0xa0, 0xea, 0x3c, 0x88, 0x2d, 0x84, 0x8d, 0x3c, 0x3b, + 0x76, 0x9d, 0xb4, 0x49, 0x4c, 0xdb, 0x36, 0x41, 0x73, 0x40, 0xdb, 0xc4, + 0x72, 0x88, 0x64, 0x80, 0x36, 0x82, 0x3b, 0xea, 0x85, 0xbd, 0xcd, 0x10, + 0x48, 0x91, 0xc1, 0x22, 0x3f, 0x22, 0x98, 0x7b, 0x80, 0x13, 0x24, 0x76, + 0xd1, 0x25, 0x33, 0xda, 0x34, 0x2d, 0x30, 0x7b, 0x4a, 0x26, 0xcd, 0x24, + 0x99, 0x77, 0x92, 0xac, 0xe2, 0x41, 0x06, 0x04, 0x77, 0x92, 0xa2, 0xdc, + 0x82, 0x06, 0xad, 0x73, 0x75, 0x82, 0x08, 0x3f, 0xc2, 0x52, 0x53, 0x7f, + 0x1d, 0xae, 0x0e, 0x70, 0x77, 0x3c, 0xa8, 0x65, 0x31, 0xae, 0x63, 0x8f, + 0x3a, 0x28, 0xe0, 0xda, 0x6c, 0xb0, 0xc1, 0x91, 0xdf, 0x91, 0xf9, 0x51, + 0x33, 0x34, 0x69, 0x1d, 0xc9, 0x89, 0x49, 0x4d, 0x56, 0x56, 0x0e, 0x55, + 0x84, 0x81, 0x3b, 0x5b, 0xf9, 0x15, 0xa7, 0xb4, 0x32, 0xbd, 0x15, 0x7a, + 0xcc, 0xdc, 0x27, 0x92, 0xd8, 0x3f, 0x25, 0x66, 0xf1, 0x0c, 0xf1, 0x9d, + 0x12, 0x53, 0x16, 0xdc, 0x58, 0xd0, 0x1c, 0x41, 0x6c, 0x77, 0xd3, 0xfd, + 0x8a, 0x7e, 0xb3, 0x26, 0x20, 0xc1, 0xee, 0xab, 0x3b, 0x63, 0x40, 0xd0, + 0x6b, 0xe2, 0x9c, 0x58, 0x5d, 0xf4, 0x44, 0x24, 0xa4, 0xb1, 0x53, 0xb5, + 0xd8, 0x24, 0x71, 0x13, 0xaf, 0xcb, 0x45, 0x30, 0xf6, 0xb7, 0x41, 0x13, + 0x1a, 0x04, 0x1d, 0xc0, 0xf3, 0x20, 0xf8, 0x95, 0x1b, 0x1e, 0xe6, 0x09, + 0xa8, 0x97, 0x11, 0xdb, 0xc7, 0xf8, 0x24, 0xa4, 0xe2, 0xd8, 0x3a, 0xe8, + 0x0f, 0xca, 0x52, 0xde, 0xde, 0x60, 0x4f, 0xef, 0x4a, 0xa4, 0x32, 0x32, + 0xc9, 0x22, 0x1a, 0xd1, 0xe1, 0xc9, 0x44, 0xf5, 0xb2, 0x63, 0x6e, 0xd6, + 0xcc, 0x4c, 0xf9, 0x24, 0xa4, 0xcd, 0x2f, 0x61, 0x2d, 0x2f, 0x75, 0xdb, + 0x7b, 0xbb, 0x6b, 0x40, 0xfb, 0x80, 0x53, 0xda, 0xf2, 0x3d, 0xed, 0xf3, + 0xd3, 0x99, 0xfb, 0xd3, 0x35, 0x85, 0x86, 0x44, 0x99, 0xf3, 0x95, 0x20, + 0xf1, 0x59, 0xdc, 0xe7, 0x11, 0xd9, 0x25, 0x39, 0x9d, 0x64, 0x01, 0x5b, + 0x0c, 0x6c, 0x92, 0x67, 0x58, 0xec, 0xb3, 0x71, 0xb2, 0x0d, 0x0d, 0xfb, + 0x40, 0x05, 0xc6, 0xa7, 0xb5, 0xc0, 0x71, 0xd9, 0xde, 0x0b, 0x57, 0xac, + 0xbd, 0xaf, 0xc7, 0x69, 0x6b, 0xb7, 0x16, 0xbb, 0x5e, 0xe6, 0x08, 0xf3, + 0x58, 0xb4, 0xb9, 0xa1, 0x96, 0x35, 0xa7, 0x88, 0x7c, 0xc7, 0x81, 0xd7, + 0xf2, 0xa4, 0xa6, 0xb9, 0x7d, 0xcd, 0x65, 0x99, 0x4f, 0x0e, 0x6b, 0x9c, + 0x4b, 0xa1, 0xdc, 0xbb, 0x71, 0xe4, 0xf8, 0x6a, 0xa9, 0xb5, 0x9b, 0xc3, + 0x01, 0x70, 0x97, 0x12, 0xe7, 0x1f, 0xf5, 0xf8, 0x2e, 0x83, 0x33, 0x1f, + 0xa7, 0xd1, 0x8e, 0xf6, 0x89, 0xf5, 0x1c, 0x77, 0x1b, 0x27, 0xdc, 0x48, + 0x58, 0x17, 0x00, 0x2d, 0x0c, 0x88, 0x76, 0x93, 0xf0, 0x49, 0x4c, 0xec, + 0x75, 0x6f, 0xac, 0x00, 0x3d, 0xe6, 0xc7, 0x46, 0x93, 0x20, 0x68, 0xd0, + 0x13, 0x64, 0xb6, 0xc0, 0x03, 0x5c, 0xd3, 0x03, 0xb7, 0xc1, 0x13, 0x13, + 0x63, 0xde, 0xca, 0xa0, 0xfa, 0x9b, 0xe1, 0xaf, 0x1e, 0x04, 0x09, 0x95, + 0xb6, 0xfe, 0x97, 0x50, 0xdf, 0xb9, 0x92, 0xd6, 0x81, 0x1a, 0xf6, 0x23, + 0xe0, 0x92, 0x9c, 0xff, 0x00, 0xab, 0x98, 0xcc, 0x76, 0x65, 0x99, 0x2e, + 0x10, 0xdc, 0x66, 0x17, 0x00, 0x7b, 0xb9, 0xfe, 0xd6, 0xad, 0x3c, 0x33, + 0x37, 0x5b, 0x91, 0xc8, 0x2e, 0x0c, 0x69, 0x27, 0xf3, 0x58, 0x23, 0xf2, + 0x94, 0x12, 0xda, 0xfa, 0x76, 0x0b, 0xbd, 0x29, 0xdf, 0x90, 0x74, 0x69, + 0x33, 0x00, 0x1d, 0xac, 0xfc, 0x65, 0x3b, 0x1c, 0xda, 0xc3, 0x68, 0x68, + 0x71, 0xf4, 0xc0, 0x69, 0x2d, 0xe0, 0x9e, 0x5c, 0x7e, 0xf4, 0x94, 0xe8, + 0xb5, 0xe4, 0x8d, 0xbb, 0xc0, 0x27, 0xb4, 0xa7, 0x2c, 0x2e, 0x6c, 0x17, + 0x41, 0xf2, 0x28, 0x15, 0xd8, 0x4c, 0x7b, 0x40, 0x8f, 0x25, 0x61, 0xae, + 0x7c, 0x12, 0x5a, 0x20, 0x73, 0xf0, 0x49, 0x4c, 0x0d, 0x05, 0xd3, 0xcc, + 0x71, 0xa9, 0x10, 0x91, 0xa0, 0x47, 0xb8, 0x02, 0x8b, 0xb8, 0x93, 0xae, + 0xa1, 0x47, 0xd5, 0x1b, 0xbb, 0xed, 0x49, 0x4d, 0x7b, 0x31, 0x9a, 0x44, + 0x34, 0x36, 0x7e, 0x6a, 0xbb, 0xba, 0x7b, 0x1e, 0x49, 0x78, 0xdd, 0x1c, + 0x48, 0x5a, 0x12, 0x3e, 0x7e, 0x29, 0x32, 0x4b, 0xda, 0xc3, 0x1b, 0x67, + 0x53, 0x3d, 0x92, 0x53, 0x55, 0xb8, 0xde, 0x86, 0x3b, 0x8b, 0x2a, 0x25, + 0xef, 0x86, 0x8d, 0x0f, 0x07, 0xb6, 0x89, 0xf2, 0x03, 0xab, 0xc0, 0x16, + 0x35, 0xc4, 0x3c, 0x49, 0x70, 0x99, 0x83, 0xde, 0x7b, 0xad, 0xd0, 0x2b, + 0x32, 0x77, 0x36, 0x40, 0xd1, 0xcb, 0x2b, 0xad, 0x7a, 0x47, 0x1d, 0xcc, + 0x64, 0x1b, 0xac, 0x1b, 0x5a, 0xe1, 0xd8, 0x92, 0x92, 0x9c, 0x6c, 0x47, + 0xda, 0x58, 0x5c, 0x5c, 0x49, 0x71, 0x9d, 0x51, 0x89, 0xb0, 0x88, 0x79, + 0x23, 0xcc, 0x68, 0x89, 0x8d, 0x80, 0xea, 0xda, 0x03, 0x86, 0xe3, 0xe3, + 0xe6, 0xa7, 0x6d, 0x04, 0x34, 0xb8, 0x03, 0xaf, 0x1a, 0x24, 0xa4, 0xb8, + 0xd8, 0x8c, 0x65, 0x0f, 0xb9, 0xb1, 0xb1, 0xcd, 0x24, 0x13, 0xce, 0xee, + 0xe5, 0x09, 0x80, 0xec, 0x6d, 0xad, 0x6c, 0xc1, 0x30, 0xf6, 0x99, 0x80, + 0x7c, 0x8e, 0xab, 0x57, 0x13, 0x0a, 0xb7, 0x61, 0xd3, 0xb9, 0xce, 0x73, + 0x43, 0x41, 0xd8, 0x0c, 0x36, 0x4f, 0xc1, 0x4d, 0xf8, 0x55, 0x44, 0x70, + 0xc1, 0xac, 0x11, 0x31, 0xf0, 0x3c, 0xa4, 0xa7, 0x30, 0x5a, 0xe7, 0x88, + 0x2e, 0xf9, 0x22, 0x32, 0x0f, 0x07, 0xe4, 0x10, 0x5a, 0x06, 0xf7, 0x36, + 0x24, 0x35, 0xc4, 0x07, 0x0f, 0x24, 0x71, 0x2e, 0x1e, 0xd6, 0xea, 0x12, + 0x52, 0xe5, 0x8d, 0x26, 0x60, 0x11, 0xf8, 0xa9, 0x12, 0x26, 0x08, 0x89, + 0xee, 0x97, 0xbb, 0x4d, 0xda, 0x14, 0xe7, 0xda, 0x75, 0x06, 0x12, 0x52, + 0x27, 0xb6, 0x34, 0x6c, 0x3c, 0xf8, 0x70, 0x53, 0xb7, 0x7b, 0x8c, 0xc4, + 0x79, 0x72, 0xa7, 0xb9, 0x87, 0xf3, 0x48, 0x07, 0xba, 0x89, 0x3a, 0xe9, + 0x3f, 0x04, 0x94, 0x97, 0x1d, 0xfe, 0x9d, 0xad, 0xec, 0x26, 0x14, 0xf3, + 0x6c, 0x91, 0x33, 0xb4, 0x4f, 0x3c, 0xaa, 0xb2, 0x5c, 0x40, 0x88, 0x33, + 0x1a, 0xa3, 0xbc, 0x93, 0x40, 0x0f, 0x02, 0x44, 0x7c, 0xd2, 0x52, 0x3a, + 0x9e, 0xc3, 0x65, 0x6e, 0x03, 0xe2, 0x7c, 0x44, 0x23, 0xe4, 0x58, 0xcd, + 0xb0, 0xd3, 0xaf, 0x69, 0xe0, 0x20, 0x56, 0x5a, 0x1c, 0x40, 0x00, 0x90, + 0x3b, 0x26, 0xb1, 0xe4, 0x38, 0x17, 0x37, 0x6f, 0x82, 0x4a, 0x5c, 0x58, + 0xe3, 0x30, 0x41, 0x23, 0xcb, 0x44, 0xc5, 0xc5, 0xc7, 0xe8, 0x96, 0x91, + 0xc4, 0x7d, 0x1f, 0xb9, 0x28, 0xa9, 0xc0, 0x18, 0xf7, 0x73, 0xe0, 0x51, + 0x1b, 0x4d, 0x67, 0x58, 0x2d, 0x3e, 0x65, 0x25, 0x22, 0x36, 0xbc, 0x0d, + 0xb2, 0x01, 0x1e, 0x23, 0x45, 0x20, 0x5f, 0xcb, 0x9a, 0x07, 0xc3, 0x44, + 0x43, 0x48, 0x00, 0xc4, 0x91, 0xcc, 0x4c, 0xa9, 0x36, 0xa6, 0xb4, 0x68, + 0xd3, 0xe6, 0x79, 0x49, 0x48, 0x40, 0x60, 0xd5, 0xa0, 0xf8, 0xc0, 0x4b, + 0x4f, 0x03, 0xbb, 0xc7, 0x5e, 0x11, 0xdc, 0x23, 0xdd, 0xb4, 0x9f, 0x92, + 0x6d, 0xed, 0xe2, 0x7f, 0x14, 0x94, 0xdb, 0xdb, 0x23, 0x71, 0x1f, 0x01, + 0xfe, 0xc5, 0x01, 0x24, 0x43, 0xd8, 0x1c, 0x5b, 0xe1, 0x27, 0x5f, 0x89, + 0x56, 0x5c, 0x6b, 0x77, 0xd2, 0x31, 0xe1, 0xaf, 0x29, 0x9a, 0x2a, 0xdb, + 0xa3, 0x49, 0x1d, 0xa6, 0x52, 0x53, 0x91, 0xd4, 0xd8, 0xd3, 0x87, 0x63, + 0x63, 0x56, 0xeb, 0x31, 0xe6, 0xb9, 0xdc, 0x51, 0xba, 0xd7, 0x57, 0xc6, + 0xe6, 0xb9, 0xa0, 0x79, 0x91, 0xa2, 0xed, 0xdf, 0x45, 0x36, 0xd6, 0xfa, + 0xdc, 0xdd, 0x9b, 0xc1, 0x6f, 0x1e, 0x22, 0x17, 0x0d, 0xee, 0xc5, 0xcb, + 0x2d, 0x7e, 0x8e, 0xad, 0xd0, 0x7e, 0x45, 0x25, 0x36, 0x71, 0xf0, 0x2f, + 0xcd, 0x73, 0x1e, 0x29, 0xb5, 0xd5, 0x9e, 0x5e, 0x4c, 0x30, 0x9e, 0xf0, + 0x56, 0xa5, 0x1f, 0x56, 0x58, 0xc7, 0xfa, 0xd9, 0x07, 0xf4, 0xce, 0x77, + 0x88, 0x22, 0x4f, 0x92, 0xb1, 0xd0, 0x2f, 0x63, 0x2d, 0xbb, 0x09, 0xc7, + 0xbf, 0xad, 0x47, 0xfc, 0x5b, 0xb5, 0x74, 0x7c, 0xd6, 0xbb, 0xec, 0x0e, + 0xb0, 0x00, 0x78, 0x9d, 0x08, 0x8d, 0x52, 0x53, 0x92, 0xee, 0x87, 0x45, + 0x76, 0xb0, 0xd6, 0xc9, 0x73, 0x7d, 0xdc, 0xc0, 0xd0, 0xfc, 0x95, 0x7b, + 0x29, 0xbc, 0x64, 0x16, 0xd9, 0x87, 0xb2, 0xad, 0x77, 0x58, 0xe7, 0x87, + 0x71, 0xae, 0x82, 0x4a, 0xda, 0xb1, 0xce, 0xf5, 0x65, 0xa4, 0x68, 0xd8, + 0x24, 0xfc, 0x89, 0x58, 0x1d, 0x53, 0xa9, 0x5c, 0x6c, 0xb6, 0xa6, 0x02, + 0xdf, 0x53, 0xdb, 0x58, 0x00, 0x12, 0xed, 0xc0, 0x7e, 0x58, 0x49, 0x4d, + 0x56, 0x7a, 0x99, 0xd9, 0xbb, 0x99, 0xad, 0x74, 0xfd, 0x06, 0x0d, 0x7d, + 0xfd, 0x89, 0xf8, 0x72, 0xb5, 0x69, 0xe9, 0xcc, 0x60, 0xfd, 0x23, 0x01, + 0xf3, 0xd5, 0x57, 0xe8, 0xf4, 0x33, 0x0a, 0xb7, 0xee, 0x70, 0x36, 0x93, + 0xee, 0x77, 0xfa, 0xf9, 0xab, 0x96, 0xe4, 0xb8, 0xee, 0x0c, 0x73, 0xb8, + 0xd4, 0x8e, 0x12, 0x52, 0xee, 0xc5, 0xa1, 0xa0, 0x10, 0x0b, 0x7e, 0xf4, + 0x8d, 0x60, 0x6a, 0x1b, 0xcf, 0x9e, 0xa8, 0x61, 0xd6, 0x98, 0x82, 0xe7, + 0x93, 0xce, 0xe1, 0x2a, 0xdb, 0x0b, 0xa7, 0xdc, 0x27, 0xc8, 0x24, 0xa4, + 0x11, 0xb8, 0x43, 0x41, 0xf9, 0xa6, 0x15, 0x3a, 0x48, 0x22, 0x7b, 0xa3, + 0xbd, 0xf5, 0x6b, 0xed, 0x23, 0xcf, 0xc1, 0x22, 0x1b, 0xc8, 0xd3, 0xcf, + 0xc7, 0xee, 0x49, 0x48, 0x83, 0x04, 0x0d, 0xdc, 0xa9, 0x59, 0x43, 0x4d, + 0x64, 0x6e, 0x2d, 0x77, 0x67, 0x37, 0x47, 0x0f, 0x81, 0x08, 0xcd, 0x63, + 0x49, 0x03, 0xe6, 0xa6, 0x58, 0x52, 0x53, 0x94, 0x70, 0xf2, 0xa7, 0x4c, + 0xfb, 0xc3, 0x49, 0xee, 0x5a, 0x7f, 0x2b, 0x51, 0x6b, 0xc2, 0x0c, 0x73, + 0x5c, 0xf7, 0xbe, 0xd7, 0x83, 0xcb, 0xe0, 0xcf, 0xcf, 0x80, 0xad, 0x8a, + 0x8b, 0xbe, 0x83, 0x40, 0xd7, 0x53, 0xe5, 0xe5, 0x0a, 0x5b, 0x5c, 0x34, + 0x12, 0x42, 0x4a, 0x51, 0xa4, 0x06, 0x8d, 0x15, 0x53, 0x85, 0x53, 0x5c, + 0x48, 0x0e, 0xd7, 0xc5, 0xc6, 0x3e, 0x41, 0x5f, 0x63, 0x09, 0xe7, 0x88, + 0xf0, 0x51, 0x35, 0xc7, 0xd2, 0x69, 0x3f, 0x24, 0x94, 0xe6, 0x3e, 0xee, + 0xad, 0x8c, 0x4b, 0x31, 0xe9, 0x6d, 0xd5, 0x0e, 0x3d, 0xfb, 0x4f, 0xdc, + 0x42, 0x0f, 0xdb, 0x7a, 0xcd, 0x8e, 0xf4, 0xce, 0x33, 0x6a, 0x2e, 0xd0, + 0x17, 0x5b, 0xdb, 0xe4, 0xb6, 0x21, 0xa2, 0x41, 0xe3, 0xe1, 0xaa, 0x13, + 0xc5, 0x64, 0x89, 0x6f, 0xbb, 0xb1, 0x89, 0x8f, 0xc1, 0x25, 0x20, 0xc7, + 0xc5, 0x63, 0x04, 0x69, 0xbf, 0x97, 0x47, 0x8f, 0x74, 0x71, 0x48, 0x1f, + 0x03, 0xd9, 0x4b, 0x64, 0x91, 0xb7, 0x88, 0x4d, 0xe9, 0x90, 0xed, 0x5b, + 0xa7, 0x8a, 0x4a, 0x60, 0xf7, 0xed, 0x3b, 0x4b, 0x09, 0x3d, 0xb6, 0x89, + 0x4a, 0x0f, 0x92, 0x2e, 0xd7, 0x11, 0x22, 0x20, 0x78, 0xa7, 0x15, 0xb4, + 0xeb, 0xc4, 0x24, 0xa4, 0x05, 0x8d, 0x3d, 0xa5, 0x0d, 0xe0, 0xb4, 0x68, + 0xad, 0x16, 0x46, 0x92, 0x49, 0xf9, 0x20, 0xd8, 0xd7, 0x36, 0x1e, 0xc0, + 0x0b, 0x87, 0xe6, 0xbb, 0xba, 0x4a, 0x5f, 0x13, 0x19, 0xc5, 0xc2, 0xdb, + 0x78, 0x3f, 0x45, 0xb1, 0xf9, 0x55, 0x2e, 0xb5, 0x98, 0x31, 0x08, 0x0f, + 0x98, 0x71, 0xf6, 0x79, 0xf9, 0x2b, 0x16, 0xe7, 0x65, 0x57, 0xb3, 0x63, + 0x1c, 0x5a, 0x5d, 0xfa, 0x42, 0x35, 0xda, 0xcf, 0x97, 0x24, 0xaa, 0xd9, + 0x14, 0xb7, 0xa8, 0x5e, 0xdb, 0x63, 0x6b, 0x2b, 0x1e, 0xd0, 0xf6, 0x99, + 0x24, 0xf3, 0x12, 0x92, 0x9a, 0xd8, 0x19, 0x62, 0xfc, 0xc6, 0xd3, 0x05, + 0x84, 0x82, 0x40, 0x3d, 0xfc, 0x56, 0xee, 0x5d, 0x05, 0xf5, 0x0f, 0x4c, + 0x4d, 0x8d, 0x1a, 0x7c, 0x16, 0x58, 0xc1, 0x7d, 0x17, 0x33, 0x26, 0xbf, + 0x7f, 0xa7, 0xcb, 0x40, 0xd6, 0x0e, 0x84, 0xab, 0xa3, 0xab, 0xb4, 0x5e, + 0x6b, 0x6b, 0xb7, 0x56, 0x18, 0x1e, 0x09, 0x04, 0x1d, 0x0c, 0x39, 0xba, + 0xf7, 0xee, 0x12, 0x52, 0x0a, 0x9a, 0xd1, 0x24, 0x81, 0x3d, 0xc7, 0x1f, + 0x82, 0x38, 0x78, 0x0d, 0xd7, 0x50, 0x79, 0x41, 0x7e, 0x5e, 0x3d, 0x99, + 0x3b, 0x76, 0xed, 0x73, 0xf9, 0x74, 0x18, 0x71, 0xf1, 0xe1, 0x1d, 0xb5, + 0xb4, 0xf0, 0xe2, 0x92, 0x97, 0x05, 0xbb, 0x65, 0xb1, 0x01, 0x30, 0xdd, + 0xf4, 0x81, 0xd3, 0xc9, 0x0d, 0xdb, 0x98, 0xf1, 0x22, 0x5b, 0xfb, 0xd1, + 0xf7, 0x77, 0x44, 0x6b, 0xc9, 0xe3, 0x54, 0x94, 0xbb, 0xdc, 0xf2, 0xd8, + 0x68, 0xf8, 0xea, 0x9b, 0x63, 0xb6, 0xcc, 0xe9, 0x11, 0xfe, 0xa5, 0x4b, + 0xd4, 0x3b, 0xa2, 0x20, 0x79, 0x27, 0xf5, 0x1b, 0x3b, 0xa3, 0xc9, 0x25, + 0x37, 0x4b, 0x47, 0x2d, 0xd3, 0xc0, 0xa6, 0x01, 0xe7, 0x83, 0xaf, 0x9f, + 0x0a, 0x66, 0xb0, 0x63, 0x88, 0xf0, 0x48, 0xb5, 0xad, 0xe4, 0xe9, 0xe2, + 0x12, 0x53, 0x08, 0x20, 0x7b, 0xdf, 0x31, 0xcc, 0x2e, 0x5f, 0xeb, 0x4e, + 0x10, 0xab, 0x25, 0xb9, 0x75, 0xcf, 0xa7, 0x77, 0x3e, 0x4f, 0x1c, 0xfd, + 0xeb, 0xa8, 0xb1, 0x95, 0xbd, 0xb0, 0xd7, 0xb9, 0xbd, 0x89, 0x6f, 0x92, + 0xca, 0xcd, 0xc7, 0xb6, 0xe6, 0xbe, 0x8b, 0x1a, 0xeb, 0x2a, 0x70, 0xd3, + 0x4d, 0x41, 0xec, 0x5b, 0x1d, 0xd2, 0x53, 0x87, 0x89, 0x91, 0x69, 0x65, + 0x57, 0xe3, 0x9f, 0xd6, 0xf1, 0x89, 0x2c, 0x07, 0xf3, 0xda, 0x79, 0x6a, + 0xdd, 0xc7, 0xfa, 0xc3, 0xd3, 0x6d, 0x1e, 0xa5, 0xa7, 0xd1, 0x7c, 0x7b, + 0xd8, 0xe9, 0x71, 0xdd, 0xdf, 0x6e, 0x9c, 0x2e, 0x5e, 0xdc, 0x7c, 0xbe, + 0x9d, 0x60, 0x75, 0x8c, 0x7b, 0x2b, 0x27, 0xda, 0xf2, 0x08, 0x08, 0xe1, + 0xd8, 0x59, 0x04, 0xd9, 0x76, 0x8f, 0xfd, 0xe6, 0x90, 0x27, 0xe2, 0x0a, + 0x4a, 0x6e, 0x75, 0x0f, 0xac, 0x42, 0xf7, 0x7a, 0x78, 0x20, 0xc9, 0x2e, + 0x13, 0x07, 0xdc, 0x0c, 0x7f, 0x72, 0x06, 0x36, 0x25, 0x98, 0xee, 0x16, + 0xd8, 0x77, 0x67, 0x59, 0xfc, 0xdb, 0x3b, 0x54, 0xd7, 0x72, 0xe3, 0x3d, + 0xfc, 0x14, 0x71, 0x4d, 0x4d, 0x78, 0x6e, 0x0d, 0x7e, 0xf2, 0x60, 0xde, + 0xe1, 0x20, 0x7c, 0x3c, 0xd7, 0x41, 0x85, 0x82, 0xda, 0x46, 0xf7, 0x8d, + 0xd6, 0x3b, 0x57, 0x3c, 0xea, 0x49, 0xf3, 0x49, 0x4d, 0x7c, 0x7c, 0x51, + 0x5d, 0x63, 0xd4, 0x71, 0x11, 0xd9, 0xdc, 0x7c, 0xd5, 0xaa, 0xc5, 0x64, + 0x49, 0x80, 0x3c, 0x91, 0x5e, 0xf7, 0x13, 0x1b, 0x5b, 0x03, 0x82, 0x40, + 0x24, 0xff, 0x00, 0x14, 0xe5, 0xf5, 0xb5, 0x9b, 0xec, 0xda, 0xc6, 0x81, + 0x24, 0x0e, 0xc7, 0xe6, 0x02, 0x4a, 0x44, 0x1a, 0x0b, 0x86, 0xd7, 0x12, + 0x38, 0x02, 0x08, 0x1f, 0x19, 0x46, 0x14, 0x1d, 0x4b, 0x84, 0xf8, 0x00, + 0x53, 0xd2, 0xcf, 0x54, 0x03, 0x58, 0x25, 0x8e, 0xd5, 0xb1, 0xed, 0x6f, + 0xe1, 0x1a, 0xa8, 0x0b, 0x9e, 0x2b, 0xdc, 0x21, 0x8e, 0x3c, 0x34, 0x90, + 0xe3, 0xa1, 0xd7, 0xe8, 0x94, 0x94, 0xa6, 0xe2, 0xd7, 0x64, 0xcf, 0x1d, + 0x84, 0xce, 0xa9, 0xfd, 0x36, 0x54, 0x63, 0xe9, 0x47, 0x63, 0xe7, 0xc2, + 0x83, 0xaf, 0xb6, 0x49, 0x24, 0x34, 0x0e, 0x4c, 0x69, 0xf8, 0xa6, 0x0f, + 0x75, 0x8e, 0x9d, 0xd2, 0x0f, 0xc5, 0x25, 0x24, 0x6b, 0xcc, 0x10, 0x19, + 0xb4, 0x8e, 0x79, 0x4f, 0x53, 0x37, 0x1d, 0xce, 0x93, 0x27, 0xbf, 0xf0, + 0x4e, 0x2b, 0xf6, 0x44, 0x3b, 0xdd, 0xe1, 0xc9, 0x53, 0x75, 0x6f, 0x60, + 0x6b, 0x9b, 0xc8, 0x9d, 0x4e, 0x9f, 0x2e, 0x12, 0x52, 0xe0, 0xd4, 0xc3, + 0x24, 0x89, 0x1d, 0xc0, 0x94, 0x2b, 0x7d, 0x73, 0xee, 0xae, 0x1c, 0x27, + 0x89, 0xda, 0xa4, 0x29, 0xa7, 0x7c, 0x93, 0xb1, 0xe7, 0x58, 0x99, 0x93, + 0xf7, 0x22, 0xb6, 0x86, 0x36, 0x49, 0xf7, 0x0f, 0xcd, 0xf8, 0xa4, 0xa6, + 0xbb, 0xac, 0xc8, 0x68, 0xd5, 0x85, 0xd3, 0xa7, 0xb4, 0x85, 0x59, 0xaf, + 0xca, 0x87, 0x6d, 0x01, 0xb3, 0xc6, 0xf7, 0xb9, 0xda, 0xfc, 0x00, 0x0b, + 0x47, 0x63, 0x0e, 0xae, 0xfa, 0x51, 0x3a, 0x28, 0xfa, 0x01, 0xc3, 0xf3, + 0x84, 0xf8, 0x84, 0x94, 0xd3, 0x0e, 0xb5, 0xc0, 0x0e, 0x5d, 0xdc, 0x8d, + 0x25, 0x10, 0x0b, 0x06, 0x90, 0x61, 0x11, 0xd5, 0x3e, 0x9d, 0x40, 0x31, + 0xdf, 0x90, 0xa7, 0xbd, 0xce, 0x03, 0x4d, 0x3e, 0x09, 0x29, 0x19, 0xb1, + 0xe3, 0x43, 0xa0, 0xf1, 0x84, 0xfe, 0xa1, 0x81, 0x02, 0x53, 0xef, 0x91, + 0xa8, 0x8f, 0x25, 0x2f, 0x6c, 0x71, 0xcf, 0x09, 0x29, 0x51, 0x22, 0x40, + 0x82, 0x53, 0x31, 0xae, 0xff, 0x00, 0x08, 0x01, 0x70, 0xe0, 0x89, 0xfe, + 0x2a, 0x60, 0x38, 0xe8, 0xd3, 0xc7, 0x00, 0x8f, 0x14, 0xc5, 0x8f, 0x73, + 0xa0, 0xc8, 0x23, 0xc2, 0x52, 0x52, 0xee, 0x6c, 0x8d, 0x14, 0x0d, 0x46, + 0x09, 0x9f, 0x92, 0x99, 0x0f, 0x1c, 0xce, 0x89, 0xdb, 0xaf, 0x1f, 0x72, + 0x4a, 0x40, 0x6a, 0x98, 0x91, 0x07, 0xb7, 0x3f, 0x8a, 0x86, 0xd7, 0x03, + 0xab, 0x49, 0x23, 0xee, 0x56, 0xdc, 0x08, 0x04, 0x37, 0x9f, 0x05, 0x16, + 0x0b, 0x00, 0xf7, 0xe8, 0x7b, 0x81, 0xc7, 0xde, 0x92, 0x9a, 0xf0, 0x5d, + 0xa6, 0xd2, 0x3e, 0x70, 0x52, 0x01, 0xc0, 0xed, 0x83, 0xf1, 0x56, 0xb6, + 0xb4, 0x92, 0x79, 0xd7, 0x54, 0xa1, 0xa6, 0x0f, 0x27, 0xb2, 0x4a, 0x6b, + 0x39, 0x80, 0xf8, 0x12, 0x3c, 0xd2, 0x78, 0x0d, 0x68, 0x3a, 0x07, 0x1f, + 0x8c, 0x2b, 0x1e, 0x97, 0x30, 0x64, 0xf8, 0x11, 0xc2, 0x83, 0xeb, 0x27, + 0x53, 0x27, 0xe4, 0x92, 0x91, 0x4b, 0x1c, 0xdf, 0x77, 0xf7, 0x28, 0x96, + 0xd6, 0xf3, 0xec, 0x22, 0x46, 0xa6, 0x39, 0x28, 0xc3, 0x1d, 0xce, 0x33, + 0x00, 0xb7, 0xc7, 0xfd, 0x90, 0x93, 0x71, 0xa3, 0xe9, 0x34, 0x37, 0xf1, + 0x49, 0x48, 0x5a, 0xd7, 0x34, 0x41, 0xd0, 0x4e, 0x84, 0xea, 0xa5, 0xb1, + 0xbc, 0x4f, 0xcf, 0x49, 0x45, 0xf4, 0xe4, 0x9d, 0x48, 0x9e, 0xca, 0x3e, + 0x9b, 0xb8, 0x93, 0xf1, 0x49, 0x4c, 0xcd, 0xc6, 0x3d, 0xa2, 0x7c, 0x0f, + 0x2a, 0x16, 0x5d, 0x71, 0x6f, 0xe8, 0x99, 0x31, 0xc9, 0x76, 0x88, 0xf9, + 0x0c, 0x60, 0xdc, 0x18, 0xf1, 0x2d, 0x02, 0x5a, 0x48, 0x03, 0xfa, 0xc1, + 0x53, 0x39, 0xb5, 0xd2, 0x08, 0xb8, 0x80, 0xdd, 0xfb, 0x03, 0xdb, 0xc1, + 0xd3, 0xf9, 0x33, 0xaa, 0x4a, 0x48, 0x0d, 0xa5, 0xa1, 0xde, 0x91, 0xde, + 0x44, 0x1e, 0x62, 0x7e, 0x49, 0x30, 0xbc, 0x4f, 0xa8, 0xd0, 0x01, 0x89, + 0xe7, 0xb7, 0x1c, 0xa8, 0xb7, 0x39, 0xbb, 0xb6, 0xd6, 0xdb, 0x1c, 0x0f, + 0x0e, 0x0c, 0x74, 0x37, 0xe2, 0x9f, 0x26, 0xec, 0xdb, 0x5a, 0xdf, 0xb2, + 0x31, 0xac, 0xfd, 0xf7, 0x5c, 0xd2, 0x3f, 0x27, 0x29, 0x29, 0x57, 0xd8, + 0xe7, 0xb4, 0x57, 0x01, 0xcd, 0x77, 0xd3, 0x91, 0x2d, 0x23, 0xe0, 0x56, + 0x5d, 0xdd, 0x0b, 0x1e, 0xc7, 0x1b, 0x8d, 0x05, 0xa2, 0x67, 0x68, 0x6e, + 0xd6, 0xff, 0x00, 0x05, 0xa6, 0x2d, 0xc9, 0x01, 0xad, 0xb7, 0xd2, 0xaa, + 0xc7, 0x68, 0x5c, 0xd6, 0x6e, 0x27, 0xe6, 0xfe, 0x14, 0x2d, 0xaa, 0xa2, + 0xe6, 0x8b, 0x1b, 0xeb, 0x38, 0xfe, 0x7d, 0x8e, 0x91, 0xf0, 0x00, 0x98, + 0xfc, 0x12, 0x53, 0x55, 0x95, 0xb2, 0x90, 0xd6, 0xd6, 0xe6, 0xb0, 0xb7, + 0x96, 0xb6, 0x1c, 0x47, 0xdc, 0xad, 0x37, 0x27, 0x6b, 0x64, 0x30, 0x90, + 0x7b, 0xba, 0x7f, 0x01, 0xfe, 0xd4, 0x42, 0xd7, 0xfa, 0x65, 0xb5, 0xb0, + 0x57, 0x1d, 0xc4, 0x44, 0xf8, 0xf0, 0xab, 0xb9, 0xb7, 0x3a, 0x5a, 0xe7, + 0x6e, 0x98, 0x0e, 0x80, 0x92, 0x92, 0x0b, 0xab, 0x7e, 0xaf, 0x73, 0xa7, + 0xc3, 0x40, 0x35, 0xf8, 0x7f, 0x7a, 0x15, 0xcd, 0xa9, 0xcd, 0x80, 0x44, + 0x6b, 0x3b, 0x89, 0x21, 0xde, 0x44, 0xa9, 0xb7, 0x1a, 0x1d, 0xb4, 0x88, + 0x8d, 0x41, 0x9f, 0xca, 0x8f, 0x5b, 0x1a, 0xd9, 0x2c, 0x60, 0x81, 0xcc, + 0x82, 0x67, 0xef, 0x49, 0x4e, 0x76, 0x36, 0x1d, 0x75, 0xee, 0x76, 0x24, + 0x31, 0xef, 0x8d, 0xe2, 0x09, 0x63, 0xa0, 0xe9, 0xa0, 0x21, 0x58, 0xab, + 0x04, 0xb7, 0x75, 0x8e, 0x21, 0xaf, 0x77, 0x2e, 0x6b, 0x40, 0x93, 0xf0, + 0x6a, 0xb6, 0xed, 0xa0, 0xc0, 0x02, 0x4c, 0x19, 0x8e, 0xde, 0x48, 0x6d, + 0xc6, 0x02, 0xf3, 0x71, 0xba, 0xd2, 0x47, 0x0c, 0x91, 0xe9, 0x8f, 0xec, + 0xa4, 0xa6, 0x35, 0xe2, 0x97, 0x12, 0x34, 0x27, 0xf3, 0x89, 0xf0, 0x47, + 0x63, 0x59, 0x43, 0xa5, 0xce, 0x0e, 0xdf, 0xcc, 0x4f, 0x29, 0xec, 0x74, + 0x00, 0xed, 0x60, 0xf6, 0x05, 0x45, 0xa1, 0xe4, 0xc8, 0x3c, 0xf3, 0x1a, + 0x7c, 0x92, 0x52, 0x5f, 0x57, 0x69, 0x05, 0x83, 0x76, 0x9c, 0x0e, 0xc9, + 0x39, 0xc5, 0xc4, 0x4c, 0xc1, 0x3c, 0x11, 0xfd, 0xe8, 0x8d, 0x24, 0x56, + 0x59, 0x10, 0x4f, 0xe7, 0x77, 0x48, 0x41, 0x06, 0x7b, 0x72, 0x79, 0x49, + 0x48, 0x2e, 0x0c, 0x6f, 0x0d, 0x0e, 0x77, 0xe4, 0x52, 0xa4, 0x39, 0xa0, + 0x92, 0xe0, 0x7c, 0x87, 0x28, 0xdb, 0x00, 0x61, 0x8a, 0xf7, 0x11, 0xc3, + 0x4c, 0x7f, 0x15, 0x11, 0xb6, 0x7d, 0xa3, 0x5e, 0xe0, 0x84, 0x94, 0xc0, + 0xbe, 0x60, 0xf7, 0xef, 0xa7, 0x8a, 0x8b, 0xcd, 0x80, 0x11, 0x12, 0x23, + 0x44, 0x60, 0xc2, 0x48, 0x70, 0x81, 0xe4, 0x78, 0x2a, 0x46, 0xbd, 0x08, + 0x20, 0xc7, 0x78, 0x80, 0x92, 0x9a, 0xe1, 0xfb, 0x99, 0xb6, 0xc3, 0xaf, + 0x84, 0xa7, 0x98, 0x74, 0xb4, 0x19, 0xef, 0x07, 0xfb, 0xd1, 0x4d, 0x2d, + 0x02, 0x1b, 0x3f, 0x35, 0x13, 0x58, 0x89, 0x7b, 0x89, 0xd7, 0xc9, 0x25, + 0x23, 0x75, 0x6e, 0x27, 0x71, 0xf7, 0x0f, 0x23, 0xc7, 0xdc, 0x96, 0xc6, + 0xb8, 0x09, 0x3c, 0x70, 0x8a, 0x1a, 0x0b, 0x81, 0x0d, 0x1a, 0x7d, 0xc8, + 0x80, 0x35, 0xc2, 0x40, 0x00, 0x8e, 0x02, 0x4a, 0x6b, 0x06, 0x96, 0x19, + 0x9f, 0xbb, 0x54, 0x5d, 0xa0, 0xb4, 0x13, 0x3e, 0x23, 0xc9, 0x4b, 0x6b, + 0xc8, 0x0e, 0x1b, 0x5c, 0x5b, 0xcb, 0x41, 0xfe, 0x2a, 0x43, 0xdc, 0x34, + 0x6c, 0x78, 0x82, 0x20, 0xa4, 0xa4, 0x00, 0xb5, 0xce, 0x99, 0xed, 0xf4, + 0x78, 0xfe, 0x09, 0xcb, 0xdb, 0xc3, 0x5a, 0x74, 0xf1, 0x2a, 0xc0, 0xaa, + 0x44, 0xf7, 0xff, 0x00, 0x5f, 0x15, 0x1b, 0x2a, 0x69, 0x3e, 0x7e, 0x29, + 0x29, 0x18, 0x35, 0xb9, 0xbe, 0xf3, 0x2e, 0xec, 0x90, 0x80, 0x0e, 0xd1, + 0xf0, 0x4c, 0xea, 0x80, 0x13, 0x24, 0x79, 0x4e, 0x89, 0x9b, 0xa0, 0x87, + 0x48, 0x13, 0xa4, 0x1f, 0xee, 0x49, 0x4c, 0x1c, 0x1c, 0xe3, 0x2e, 0x83, + 0xe4, 0x12, 0x1b, 0x9a, 0xed, 0x38, 0xfd, 0xde, 0xca, 0x64, 0xfb, 0xb9, + 0xfe, 0xf5, 0x12, 0xd2, 0x7c, 0xbe, 0x09, 0x29, 0x9f, 0xa9, 0xa6, 0xad, + 0x33, 0xc4, 0xa4, 0x24, 0x92, 0x7b, 0x1e, 0x13, 0xd7, 0xb4, 0x0d, 0x75, + 0x1e, 0x25, 0x4d, 0xcd, 0xac, 0x8d, 0x3b, 0x78, 0x24, 0xa4, 0x7e, 0xf1, + 0xf4, 0x76, 0xa8, 0x9d, 0xf2, 0x37, 0x7e, 0x08, 0xa2, 0x06, 0x91, 0x30, + 0x91, 0x0e, 0x70, 0xd6, 0x7e, 0xe4, 0x94, 0x87, 0x6e, 0x9b, 0xb5, 0x1e, + 0x4a, 0x1a, 0x6f, 0x99, 0x3c, 0xf8, 0xff, 0x00, 0x05, 0x37, 0x08, 0x3a, + 0x76, 0x4b, 0x70, 0xdb, 0xbe, 0x74, 0xe6, 0x23, 0x54, 0x94, 0xff, 0x00, + 0xff, 0xd9 +}; +size_t demo_002_jpg_len = 20678; + +const uint8_t demo_003_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xee, 0x0a, 0x81, 0x53, 0x72, 0x81, 0x49, 0x4b, 0x15, + 0x02, 0xde, 0xe3, 0x43, 0xe2, 0xa6, 0x54, 0x4a, 0x4a, 0x63, 0xba, 0x34, + 0x77, 0xdf, 0xd9, 0x3a, 0x49, 0xa0, 0x8f, 0xa3, 0xc7, 0x82, 0x4a, 0x52, + 0x49, 0x02, 0x0f, 0xc7, 0xc1, 0x3a, 0x4a, 0x52, 0x49, 0x27, 0x84, 0x94, + 0xb2, 0x8d, 0xb6, 0xd7, 0x43, 0x0d, 0x96, 0x38, 0x35, 0xa1, 0x07, 0x33, + 0x3a, 0x9c, 0x46, 0x1d, 0xde, 0xeb, 0x3b, 0x30, 0x7f, 0x15, 0xcf, 0x64, + 0x5f, 0x97, 0x95, 0x90, 0xf7, 0xe4, 0x3e, 0x1a, 0x08, 0x65, 0x18, 0xed, + 0x12, 0xe7, 0xc8, 0xd4, 0xfc, 0x8a, 0x4a, 0x6d, 0xe7, 0x75, 0x57, 0x5f, + 0x53, 0x8b, 0x0f, 0xa7, 0x8e, 0xd9, 0x93, 0xc4, 0xc7, 0x89, 0x50, 0xc6, + 0xc7, 0xbb, 0x26, 0x96, 0xbe, 0xa8, 0xc7, 0xa1, 0xe0, 0x07, 0xd8, 0xef, + 0xa7, 0x63, 0x46, 0xbb, 0x83, 0x4f, 0x9f, 0x8f, 0xdc, 0xa7, 0x8b, 0xd3, + 0x83, 0x58, 0x1f, 0x99, 0x04, 0x37, 0x5a, 0xe9, 0x99, 0x6b, 0x7b, 0xeb, + 0xe2, 0x51, 0xf2, 0x72, 0xc0, 0x69, 0x8f, 0x6b, 0x47, 0x8a, 0x4a, 0x41, + 0x73, 0xe9, 0xc5, 0xaf, 0xd2, 0xa0, 0x6d, 0x07, 0xe9, 0x38, 0xea, 0xe7, + 0x1f, 0x12, 0x56, 0x1f, 0x52, 0xea, 0x98, 0xf8, 0x62, 0x6c, 0xf7, 0xda, + 0x7e, 0x8d, 0x40, 0xeb, 0x3e, 0x7e, 0x0a, 0x8f, 0x57, 0xfa, 0xc0, 0x0b, + 0xcd, 0x58, 0x47, 0x73, 0xc6, 0x86, 0xee, 0xc3, 0xfa, 0xbf, 0xde, 0xb0, + 0x1e, 0xe7, 0x17, 0xef, 0x71, 0x2f, 0x7b, 0xbe, 0x91, 0x3a, 0x92, 0x52, + 0x53, 0x63, 0x2f, 0x3b, 0x23, 0x32, 0xcd, 0xf9, 0x0e, 0xf6, 0xfe, 0x6b, + 0x47, 0xd1, 0x6a, 0x0c, 0x17, 0xf3, 0xf4, 0x54, 0x5a, 0x3c, 0x75, 0xf2, + 0x46, 0x90, 0xd1, 0x25, 0x25, 0x23, 0x0d, 0x84, 0xb7, 0x46, 0x8d, 0xd4, + 0xa4, 0x5c, 0x0f, 0xf7, 0x24, 0x0c, 0x71, 0xf8, 0xa4, 0xa5, 0x06, 0x93, + 0xa9, 0x52, 0x0c, 0x03, 0xcd, 0x38, 0x29, 0xe4, 0xf1, 0xd9, 0x25, 0x2c, + 0x1a, 0x06, 0xa0, 0x42, 0x98, 0x8e, 0xe9, 0xa0, 0x77, 0x52, 0x69, 0x84, + 0x94, 0xc8, 0x3b, 0xc0, 0x4a, 0x7d, 0xee, 0x1c, 0x40, 0xfc, 0x54, 0x65, + 0x49, 0xb5, 0xda, 0xff, 0x00, 0xa2, 0xc2, 0x7c, 0xce, 0x9f, 0x95, 0x25, + 0x2c, 0x75, 0xe6, 0x4f, 0xc5, 0x29, 0xed, 0x10, 0x88, 0x31, 0xac, 0xe5, + 0xce, 0x0d, 0x1e, 0x5a, 0x94, 0xde, 0x83, 0x64, 0x6e, 0x9d, 0x0f, 0x8f, + 0x3f, 0x72, 0x4a, 0x42, 0x5d, 0xaf, 0xf0, 0x53, 0xae, 0x8b, 0xec, 0x70, + 0x6d, 0x75, 0xb9, 0xce, 0x77, 0x00, 0xe8, 0xb4, 0x30, 0x70, 0x2f, 0xcb, + 0xb7, 0x66, 0x33, 0x34, 0x1f, 0x49, 0xdc, 0x35, 0xbf, 0x12, 0xba, 0x8e, + 0x9f, 0xd3, 0x71, 0xba, 0x73, 0x7d, 0xc4, 0x1b, 0x9c, 0x3d, 0xd6, 0x3a, + 0x27, 0xfb, 0x21, 0x25, 0x38, 0x98, 0x3f, 0x54, 0xed, 0xb1, 0xad, 0xb3, + 0x36, 0xef, 0x48, 0x1d, 0x7d, 0x26, 0x09, 0x77, 0xcd, 0xc7, 0x45, 0xbd, + 0x47, 0x4c, 0xc3, 0xaa, 0xa0, 0xd6, 0x57, 0xb9, 0xad, 0xec, 0xe3, 0x23, + 0xee, 0xd0, 0x2b, 0x3e, 0xa0, 0x33, 0xe9, 0xb1, 0xd6, 0x48, 0xd0, 0x81, + 0xb5, 0xbf, 0x7b, 0xa1, 0x1e, 0xb2, 0xf3, 0x4b, 0x86, 0xd6, 0x54, 0x7b, + 0x03, 0xef, 0x3f, 0xc1, 0x25, 0x30, 0xad, 0xa1, 0xa0, 0x06, 0x34, 0x31, + 0xbe, 0x00, 0x40, 0xfc, 0x14, 0xbd, 0x4a, 0xd9, 0xfc, 0xeb, 0x9a, 0xdf, + 0x89, 0x41, 0xf4, 0x9c, 0x47, 0xe9, 0x2c, 0x7b, 0xbc, 0x81, 0xd8, 0x3f, + 0xe8, 0xc2, 0x9b, 0x2b, 0x65, 0x7e, 0xe6, 0xb0, 0x0f, 0x38, 0x93, 0xf7, + 0xa4, 0xa4, 0x2f, 0xb2, 0xc7, 0x58, 0x3d, 0x09, 0x7d, 0x5a, 0xef, 0x1b, + 0x62, 0x7c, 0x3d, 0xce, 0x2d, 0x52, 0x15, 0xe5, 0x3e, 0x20, 0x32, 0xa1, + 0xe2, 0x65, 0xe7, 0xf0, 0x80, 0xa5, 0xea, 0xf2, 0xe7, 0x38, 0x31, 0xa3, + 0x92, 0xe3, 0x03, 0xf1, 0x42, 0xfd, 0xa1, 0x8f, 0x24, 0x52, 0xe3, 0x73, + 0xbc, 0x2a, 0x05, 0xff, 0x00, 0x8b, 0x44, 0x7e, 0x29, 0x29, 0xb2, 0xcc, + 0x7d, 0xc3, 0x6d, 0x97, 0x3d, 0xe3, 0xc0, 0x1d, 0x83, 0xfe, 0x84, 0x27, + 0xfb, 0x36, 0x1c, 0xc7, 0xa4, 0xdf, 0xbb, 0xdd, 0x3f, 0xd6, 0xe5, 0x56, + 0x19, 0x59, 0xaf, 0x11, 0x5d, 0x02, 0xbf, 0x3b, 0x9e, 0x07, 0xfd, 0x16, + 0x6e, 0x43, 0xd9, 0xd4, 0x67, 0x77, 0xaf, 0x54, 0xfe, 0xef, 0xa6, 0x76, + 0xff, 0x00, 0x9d, 0xba, 0x52, 0x53, 0xd3, 0x13, 0xe3, 0xa2, 0x89, 0x53, + 0x70, 0x50, 0x88, 0xe3, 0xee, 0x49, 0x4c, 0x4a, 0x62, 0x9c, 0x9f, 0x1d, + 0x0a, 0x64, 0x94, 0xb2, 0x49, 0x24, 0x92, 0x96, 0x2d, 0x07, 0x94, 0xda, + 0x8e, 0x75, 0x1e, 0x2a, 0x4a, 0x36, 0xdb, 0x5d, 0x2c, 0x36, 0x5a, 0xe0, + 0xd6, 0x8e, 0xe5, 0x25, 0x32, 0x1e, 0x3d, 0x96, 0x6e, 0x6f, 0x55, 0x0d, + 0x77, 0xa1, 0x8b, 0xef, 0xb0, 0xcc, 0xb8, 0x6b, 0x11, 0xa9, 0x85, 0x4f, + 0x3b, 0xa9, 0x59, 0x91, 0x2c, 0xa6, 0x6a, 0xab, 0xb9, 0xe2, 0x47, 0x9a, + 0x05, 0x14, 0x8c, 0x8b, 0x5c, 0x68, 0x2e, 0x6d, 0x03, 0x4f, 0x54, 0xe8, + 0xf7, 0x03, 0xe1, 0xe0, 0x3c, 0xd2, 0x53, 0x0a, 0xcd, 0x97, 0x5b, 0x63, + 0x1b, 0xfa, 0x4b, 0x89, 0x1e, 0xf7, 0x13, 0xb6, 0xbe, 0xe4, 0xbb, 0xc4, + 0x9f, 0x05, 0x6f, 0x03, 0xa6, 0x55, 0x84, 0xe7, 0xe4, 0x3d, 0xe6, 0xec, + 0x87, 0xe8, 0xeb, 0x5f, 0xc9, 0xf2, 0x68, 0xe1, 0xa3, 0xc8, 0x22, 0xd5, + 0x4d, 0x74, 0x08, 0xac, 0x06, 0x88, 0x59, 0x3d, 0x67, 0xeb, 0x16, 0x2e, + 0x00, 0x2c, 0x1f, 0xa5, 0xc9, 0xfc, 0xda, 0x47, 0x6f, 0x37, 0x1e, 0xc9, + 0x29, 0xbd, 0xd4, 0xba, 0x9d, 0x18, 0x75, 0x1b, 0xb2, 0x1e, 0x1a, 0xd1, + 0xc0, 0xee, 0x4f, 0x80, 0x0b, 0x88, 0xeb, 0x3d, 0x7b, 0x2f, 0x3c, 0x16, + 0x56, 0xd3, 0x4e, 0x21, 0xed, 0xf9, 0xce, 0xfe, 0xb7, 0xf7, 0x2a, 0x99, + 0x59, 0xb9, 0x19, 0xb7, 0xfd, 0xa3, 0x31, 0xdb, 0xfc, 0x1a, 0x3e, 0x8b, + 0x07, 0x90, 0x4c, 0xe7, 0x6f, 0x10, 0x34, 0x6f, 0xe5, 0x49, 0x4d, 0x46, + 0xcc, 0xfb, 0x7e, 0xf4, 0x7a, 0xc1, 0x1d, 0xbe, 0x24, 0xa9, 0x6c, 0x00, + 0x78, 0x28, 0x97, 0xc6, 0x8d, 0xfb, 0xd2, 0x52, 0xe5, 0xc1, 0xa7, 0xcd, + 0x46, 0x5c, 0xe3, 0x25, 0x20, 0x34, 0xf3, 0x53, 0x6b, 0x0f, 0x82, 0x4a, + 0x5a, 0x0a, 0x90, 0x6a, 0x9b, 0x6b, 0x3d, 0xf4, 0x44, 0x15, 0x0e, 0x4e, + 0xa9, 0x29, 0x16, 0x81, 0x49, 0xac, 0x7b, 0xbe, 0x8b, 0x49, 0x44, 0x63, + 0x7d, 0xc5, 0xa0, 0x0f, 0x28, 0xe5, 0x1b, 0x46, 0x8d, 0x4c, 0x24, 0xa4, + 0x2d, 0xc7, 0xb0, 0xf3, 0x03, 0xf1, 0x45, 0x6e, 0x2d, 0x7d, 0xc9, 0x72, + 0x93, 0x49, 0x77, 0xd1, 0x04, 0xfe, 0x03, 0xf1, 0x53, 0x1e, 0xa0, 0xec, + 0xd6, 0xf9, 0x9d, 0x4a, 0x4a, 0x64, 0xca, 0x9a, 0xc6, 0xcb, 0x5a, 0x3e, + 0x41, 0x23, 0x66, 0xdf, 0xa4, 0x40, 0xf8, 0x95, 0x17, 0x07, 0x97, 0x36, + 0x5c, 0x4b, 0x7f, 0x3b, 0x58, 0xfb, 0xa1, 0x1f, 0x1b, 0x15, 0xd9, 0x0f, + 0x0d, 0xc7, 0xaa, 0x5c, 0x4c, 0x03, 0x1f, 0x89, 0x29, 0x29, 0x03, 0x37, + 0xd8, 0xe0, 0xca, 0xd8, 0xe7, 0xb9, 0xc6, 0x00, 0x03, 0x93, 0xf3, 0x5b, + 0x58, 0x9f, 0x56, 0x32, 0xad, 0xda, 0xfc, 0x97, 0xb2, 0x90, 0x75, 0x35, + 0x8f, 0x73, 0xbe, 0x7c, 0x05, 0x7f, 0x07, 0x06, 0x8c, 0x00, 0x1d, 0x63, + 0xc3, 0xaf, 0x77, 0x2e, 0xd0, 0x6d, 0xf2, 0x68, 0xe5, 0x68, 0x32, 0xc2, + 0x5a, 0x62, 0xb7, 0xb8, 0x9f, 0xa2, 0x48, 0xda, 0x3e, 0xf7, 0x42, 0x4a, + 0x63, 0x56, 0x16, 0x3d, 0x0c, 0x15, 0x34, 0x9d, 0x83, 0xf3, 0x1b, 0xed, + 0x1f, 0xf4, 0x61, 0x4e, 0xa6, 0x56, 0xc2, 0x76, 0xd6, 0x1b, 0xfb, 0xa6, + 0x35, 0x2a, 0x26, 0xbc, 0xb7, 0x6a, 0x76, 0x56, 0x0f, 0x1c, 0xbc, 0xff, + 0x00, 0x00, 0xa5, 0xf6, 0x72, 0x75, 0xb2, 0xd7, 0xbf, 0xc8, 0x1d, 0xa3, + 0xfe, 0x8c, 0x24, 0xa6, 0x56, 0xd8, 0xd6, 0x09, 0xb1, 0xe1, 0xa3, 0xcf, + 0x45, 0x06, 0x65, 0xb1, 0xdf, 0x41, 0x8e, 0xb7, 0xfa, 0xad, 0x31, 0xf7, + 0x98, 0x0a, 0x6c, 0xaa, 0x96, 0x19, 0x65, 0x6d, 0x04, 0x77, 0x3a, 0x9f, + 0xc5, 0x4c, 0xc5, 0x66, 0x5e, 0x7f, 0xb8, 0x24, 0xa6, 0x1b, 0xb2, 0x9e, + 0xd1, 0xb6, 0xb6, 0x55, 0xa9, 0x92, 0xf7, 0x6e, 0x3f, 0x73, 0x3f, 0xbd, + 0x45, 0xf4, 0x5a, 0xe1, 0xfa, 0x4b, 0xdd, 0x07, 0xb5, 0x60, 0x56, 0x3e, + 0xff, 0x00, 0x71, 0xfc, 0x53, 0x8c, 0x9a, 0xc9, 0x86, 0x9d, 0xe7, 0xb0, + 0x60, 0x2e, 0xfc, 0x92, 0xa6, 0x4e, 0x43, 0xc4, 0x32, 0x92, 0x07, 0x8b, + 0xc8, 0x6f, 0xe0, 0x24, 0xa4, 0xa6, 0x83, 0x71, 0x71, 0x3d, 0x57, 0x01, + 0x54, 0xd8, 0xce, 0x5d, 0x60, 0x2f, 0x33, 0xe4, 0x5f, 0x2a, 0xe8, 0x12, + 0x00, 0x02, 0x3e, 0x1c, 0x28, 0xba, 0x8b, 0x86, 0xb6, 0x5a, 0xd6, 0xff, + 0x00, 0x51, 0xbf, 0xf7, 0xe7, 0xff, 0x00, 0x72, 0x23, 0x28, 0xa1, 0xff, + 0x00, 0x4f, 0x75, 0xbf, 0xd6, 0x76, 0x9f, 0x70, 0x80, 0x92, 0x90, 0x5a, + 0xfc, 0x71, 0xb7, 0xd4, 0x73, 0x49, 0x06, 0x43, 0x41, 0x93, 0xf7, 0x0d, + 0x53, 0x7a, 0xde, 0xd9, 0xf4, 0x6d, 0xd9, 0xce, 0xed, 0x87, 0x9f, 0x87, + 0x3f, 0x82, 0xb2, 0xea, 0x9a, 0x1b, 0xb6, 0xa6, 0x8a, 0xc7, 0x83, 0x00, + 0x1f, 0x91, 0x0b, 0xd0, 0xb6, 0x38, 0x1f, 0x0e, 0xf1, 0xf1, 0x49, 0x4f, + 0x42, 0x42, 0x81, 0x53, 0x3e, 0x6a, 0x25, 0x25, 0x30, 0x20, 0x42, 0x84, + 0x11, 0xc7, 0xdc, 0x51, 0x0a, 0x8a, 0x4a, 0x60, 0x08, 0x3a, 0x70, 0x7c, + 0x13, 0xa7, 0x20, 0x46, 0xbc, 0x2c, 0xdc, 0xde, 0xaa, 0x2a, 0x9a, 0xf1, + 0xce, 0xf7, 0xfe, 0xff, 0x00, 0x20, 0x7c, 0x3c, 0x52, 0x53, 0x67, 0x2f, + 0x36, 0xac, 0x51, 0xee, 0xf7, 0x58, 0x78, 0x60, 0xe7, 0xe6, 0xb0, 0x73, + 0xb2, 0xec, 0xb8, 0x0b, 0x6e, 0x24, 0x35, 0xda, 0x56, 0xd1, 0xc9, 0xd6, + 0x21, 0xad, 0x08, 0x5e, 0xb3, 0x9c, 0x5c, 0x09, 0x36, 0x5e, 0xe2, 0x09, + 0xf0, 0x68, 0x3d, 0xdc, 0x51, 0xf1, 0x71, 0xb6, 0x38, 0x5b, 0x61, 0xdf, + 0x61, 0xee, 0x7b, 0x0f, 0x06, 0x8e, 0xc9, 0x29, 0x8d, 0x78, 0xae, 0xb8, + 0x87, 0xde, 0xd0, 0xc6, 0x69, 0xb7, 0x1c, 0x71, 0xf1, 0x79, 0xef, 0xf0, + 0x56, 0x6d, 0xb9, 0xb8, 0x8c, 0x73, 0xf4, 0xd0, 0x6a, 0x49, 0x80, 0x02, + 0x16, 0x7f, 0x50, 0xc6, 0xc1, 0xab, 0xd6, 0xca, 0x78, 0x68, 0xfc, 0xd6, + 0xfe, 0x73, 0x8f, 0x90, 0x5c, 0x67, 0x52, 0xeb, 0x59, 0x1d, 0x51, 0xc5, + 0xaf, 0x3e, 0x96, 0x20, 0x32, 0x2a, 0x69, 0xd4, 0xf8, 0x6e, 0x49, 0x4e, + 0x8f, 0x55, 0xfa, 0xcf, 0x6d, 0xf6, 0x3a, 0x8e, 0x9e, 0xed, 0xad, 0x1a, + 0x1b, 0xcf, 0x61, 0xfc, 0x9f, 0xef, 0x58, 0x37, 0xd7, 0x58, 0x12, 0xe7, + 0x17, 0x5a, 0xed, 0x77, 0xcc, 0x97, 0x1f, 0x35, 0x23, 0x75, 0x6c, 0x0d, + 0xd0, 0x0d, 0xbf, 0x45, 0xc3, 0xcf, 0xc4, 0x2a, 0xed, 0x78, 0xb1, 0xee, + 0x3c, 0x0e, 0xc9, 0x29, 0x60, 0xc3, 0x32, 0x79, 0xfc, 0x11, 0x24, 0x37, + 0x5f, 0xc1, 0x41, 0xf7, 0x01, 0xed, 0x60, 0xd5, 0x45, 0xba, 0x99, 0x27, + 0x54, 0x94, 0xc8, 0x97, 0x3c, 0xf8, 0x0f, 0x04, 0xe1, 0x8a, 0x40, 0x78, + 0x34, 0x94, 0x9c, 0x5e, 0xd0, 0x09, 0x80, 0x92, 0x99, 0x35, 0x8a, 0x63, + 0x60, 0xe4, 0x80, 0x7c, 0x10, 0x77, 0x13, 0xa1, 0x93, 0x28, 0xac, 0x1a, + 0x6b, 0xcf, 0x92, 0x4a, 0x66, 0x1e, 0x3b, 0x09, 0xfc, 0x3f, 0x2a, 0x76, + 0xb8, 0x9d, 0x01, 0x02, 0x3e, 0x6a, 0x2d, 0x69, 0x76, 0x82, 0x5d, 0xe4, + 0x35, 0x46, 0x66, 0x35, 0xdc, 0x86, 0x44, 0xf8, 0x94, 0x94, 0xa6, 0x81, + 0xf9, 0xc4, 0x9f, 0xc0, 0x29, 0x02, 0x07, 0xd1, 0x10, 0x3c, 0x82, 0x95, + 0x78, 0xee, 0x7e, 0x8f, 0x76, 0xd2, 0x3f, 0x34, 0x0f, 0xef, 0x46, 0x18, + 0xf5, 0x81, 0x26, 0x5d, 0xf1, 0x29, 0x29, 0xae, 0x5f, 0xac, 0xce, 0xa5, + 0x4d, 0xad, 0xb9, 0xdf, 0x45, 0x87, 0xe2, 0x74, 0xfc, 0xab, 0x43, 0x18, + 0xd2, 0xd1, 0xb4, 0x55, 0xb9, 0xe7, 0x46, 0x86, 0x8f, 0xe0, 0xb5, 0x70, + 0x7a, 0x76, 0x35, 0x6e, 0xf5, 0x73, 0x9c, 0x37, 0x8d, 0x5b, 0x8e, 0x3d, + 0xd1, 0xfd, 0x68, 0xfc, 0x89, 0x29, 0xce, 0xe9, 0x7f, 0x56, 0xf2, 0x73, + 0x4f, 0xad, 0x73, 0xbd, 0x1a, 0x4f, 0xe7, 0x72, 0xe7, 0x7f, 0x56, 0x57, + 0x4b, 0x47, 0x4e, 0xc2, 0xc2, 0xc7, 0xf4, 0xea, 0x92, 0xd6, 0x8d, 0x77, + 0x3a, 0x27, 0xcd, 0xdb, 0x61, 0x45, 0xf9, 0x39, 0x4e, 0x21, 0x98, 0xd5, + 0x38, 0x37, 0xbb, 0xdf, 0x0c, 0x00, 0x79, 0x07, 0x6b, 0xf8, 0x28, 0x3a, + 0xbb, 0xec, 0xac, 0xd7, 0x63, 0x9a, 0x43, 0x84, 0x38, 0x41, 0x74, 0x83, + 0xf7, 0x04, 0x94, 0xd8, 0xc7, 0x7b, 0x5b, 0x03, 0xd3, 0x6b, 0x4b, 0x84, + 0x8f, 0x4f, 0x56, 0xfd, 0xf0, 0x11, 0x5f, 0x75, 0x35, 0x36, 0x6c, 0x7b, + 0x5b, 0x1f, 0xbc, 0x40, 0xfc, 0xab, 0x2e, 0x99, 0x39, 0xaf, 0xc4, 0xb1, + 0xcf, 0xf4, 0x99, 0x58, 0x73, 0x58, 0xd7, 0x6c, 0x07, 0x58, 0xe2, 0xb8, + 0xd1, 0x5c, 0xae, 0xb6, 0xd6, 0xe0, 0x28, 0xa5, 0x8d, 0x3f, 0xbd, 0xb6, + 0x5d, 0xfe, 0x71, 0xd5, 0x25, 0x33, 0x19, 0x2c, 0x78, 0xdd, 0x53, 0x5f, + 0x76, 0xba, 0x6c, 0x69, 0x80, 0x3f, 0xac, 0x60, 0x29, 0x4e, 0x4b, 0xe0, + 0x35, 0x8d, 0xab, 0xfa, 0xee, 0xdc, 0x7e, 0xe6, 0x7f, 0x7a, 0x2c, 0x3c, + 0x0d, 0xd6, 0xbf, 0xef, 0xe3, 0xf1, 0x42, 0x76, 0x4d, 0x03, 0x87, 0xef, + 0x70, 0xec, 0xd0, 0x5d, 0xf9, 0x12, 0x53, 0x13, 0x8f, 0x69, 0x0e, 0x26, + 0xd7, 0x39, 0xe3, 0x86, 0xb0, 0x0a, 0xc7, 0xdf, 0xee, 0x2a, 0x6d, 0xc6, + 0xa4, 0x00, 0xe7, 0xb0, 0x3e, 0xce, 0xe5, 0xd2, 0xff, 0x00, 0xfa, 0xa9, + 0x51, 0x76, 0x4b, 0x9e, 0x25, 0xb5, 0xc4, 0xfe, 0x73, 0xc8, 0x1f, 0x80, + 0x94, 0x27, 0x3e, 0xe0, 0xd8, 0x36, 0xed, 0x1f, 0xc8, 0x1a, 0xfd, 0xee, + 0x9f, 0xc8, 0x92, 0x9b, 0x80, 0x38, 0x69, 0x30, 0x3c, 0x07, 0xfb, 0x14, + 0x1f, 0x91, 0x4b, 0x34, 0x7d, 0x80, 0x1f, 0x02, 0x75, 0xfb, 0x95, 0x12, + 0x77, 0x7d, 0x37, 0x39, 0xe0, 0xf6, 0x73, 0x8c, 0x7d, 0xc2, 0x02, 0x43, + 0x63, 0x44, 0x30, 0x00, 0x7c, 0xb4, 0x49, 0x49, 0xdd, 0x76, 0x2e, 0xf0, + 0xed, 0x8f, 0xb1, 0xdd, 0xb4, 0x81, 0x3f, 0xdb, 0x85, 0x0b, 0x72, 0xec, + 0xd0, 0x31, 0xad, 0x67, 0xcc, 0x9f, 0xc9, 0x0a, 0xbe, 0x41, 0xb1, 0xb5, + 0x97, 0x34, 0x1d, 0x46, 0xa4, 0x90, 0xdf, 0xc5, 0xc8, 0x55, 0x3e, 0x96, + 0x9d, 0xcc, 0x97, 0xbc, 0xea, 0x76, 0x07, 0x58, 0x67, 0xe2, 0x01, 0x09, + 0x29, 0xb3, 0xea, 0x58, 0x74, 0x7b, 0xdc, 0x4f, 0x94, 0x37, 0xf2, 0x09, + 0x52, 0xf4, 0xc6, 0xdd, 0xd0, 0x7e, 0x32, 0x7f, 0x2c, 0xca, 0x0e, 0xeb, + 0x8e, 0xad, 0xaa, 0x3f, 0xe3, 0x1c, 0x1b, 0xf8, 0x0d, 0xc5, 0x13, 0x7d, + 0xde, 0x9e, 0xdf, 0x66, 0xef, 0x83, 0xe3, 0xef, 0xff, 0x00, 0x62, 0x4a, + 0x7a, 0xae, 0xca, 0x24, 0x78, 0x27, 0x29, 0x8a, 0x4a, 0x60, 0x67, 0xba, + 0x1d, 0x96, 0x57, 0x5b, 0x0b, 0xde, 0xe0, 0x1a, 0x3b, 0xa3, 0x15, 0x93, + 0xd6, 0x80, 0x0d, 0xae, 0xcf, 0x71, 0x20, 0x90, 0x58, 0xde, 0xe3, 0xfb, + 0xd2, 0x53, 0x5b, 0x37, 0xa8, 0x59, 0x90, 0xff, 0x00, 0x4a, 0xb3, 0xb2, + 0x9e, 0xf2, 0x62, 0x63, 0x5f, 0x71, 0x59, 0xac, 0xb2, 0xfc, 0xab, 0x0b, + 0x70, 0xc6, 0xca, 0x7e, 0x8b, 0xf2, 0x9c, 0x3e, 0x90, 0xee, 0xda, 0xc7, + 0x7f, 0x8f, 0x0a, 0xcb, 0x3a, 0x73, 0xb2, 0x5e, 0x2c, 0xca, 0x96, 0x50, + 0x0c, 0xb7, 0x14, 0x6b, 0x3e, 0x1e, 0xab, 0xbb, 0xfc, 0x3e, 0xf4, 0x6c, + 0xcc, 0x9a, 0x30, 0xe9, 0x75, 0xb6, 0x10, 0xca, 0x98, 0x35, 0x8f, 0xc0, + 0x24, 0xa4, 0x74, 0xe2, 0xd5, 0x43, 0x05, 0x75, 0x8e, 0xf2, 0x67, 0x53, + 0x3d, 0xc9, 0x3d, 0xca, 0xce, 0xea, 0xff, 0x00, 0x58, 0xb1, 0xba, 0x7e, + 0xea, 0x28, 0x1e, 0xbe, 0x54, 0x46, 0xd1, 0xf4, 0x59, 0xfd, 0x62, 0xb2, + 0x7a, 0x9f, 0xd6, 0x5b, 0xb2, 0x41, 0xc6, 0xc0, 0x9a, 0x98, 0x47, 0xbe, + 0xd3, 0xa3, 0x8f, 0x90, 0xf0, 0x59, 0x98, 0x27, 0x0a, 0xb2, 0x4e, 0x4c, + 0xfa, 0xc7, 0x82, 0xef, 0xa2, 0x7e, 0x7f, 0xde, 0x92, 0x91, 0x64, 0x1c, + 0xfc, 0xa9, 0xce, 0xcb, 0x26, 0xc8, 0xd0, 0x6e, 0xd3, 0x4f, 0x16, 0x8f, + 0x05, 0x56, 0xe7, 0x80, 0x62, 0x21, 0xc3, 0xb7, 0x0a, 0xe6, 0x6f, 0x51, + 0x6f, 0xba, 0xaa, 0x4e, 0xf6, 0x91, 0x04, 0x9e, 0x07, 0x90, 0x54, 0x2a, + 0xa6, 0xdb, 0xdd, 0xa6, 0xa3, 0xbb, 0x8f, 0x09, 0x29, 0x87, 0xb9, 0xee, + 0x1d, 0xcf, 0x82, 0xb3, 0x45, 0x63, 0x66, 0xe8, 0xd4, 0xa2, 0x16, 0xd5, + 0x8e, 0xd8, 0x68, 0x92, 0x74, 0x73, 0xfb, 0x4a, 0x7c, 0x76, 0xfe, 0x88, + 0x4f, 0x8f, 0xf1, 0x49, 0x4d, 0x70, 0xc0, 0x6c, 0x76, 0x9d, 0xd1, 0xda, + 0x18, 0xd0, 0x24, 0xc2, 0x1e, 0xc9, 0xbd, 0xc3, 0xb4, 0xf0, 0xaf, 0x55, + 0x4b, 0x40, 0x10, 0xd1, 0xf1, 0x84, 0x94, 0x84, 0x00, 0x75, 0x68, 0x2e, + 0xf8, 0x04, 0xe7, 0x1e, 0xcb, 0x34, 0xfa, 0x31, 0xe3, 0xfe, 0xc5, 0x6c, + 0xb9, 0x8c, 0xfa, 0x6e, 0x03, 0xe6, 0x91, 0xbe, 0x98, 0xf6, 0x4b, 0xfc, + 0xc7, 0xfb, 0x52, 0x52, 0x1a, 0xf0, 0x5a, 0x3e, 0x93, 0xa5, 0x1c, 0x63, + 0xd4, 0xd1, 0xa3, 0x27, 0xcc, 0xea, 0xa3, 0xea, 0x59, 0xd9, 0xa0, 0x7c, + 0x75, 0x4a, 0x6c, 0x77, 0x2f, 0x3f, 0x01, 0xa2, 0x4a, 0x6c, 0x00, 0xd1, + 0x02, 0x40, 0xfc, 0x02, 0x85, 0x96, 0xd7, 0x30, 0x1f, 0xc7, 0xee, 0xea, + 0x84, 0xd6, 0x34, 0x6b, 0x12, 0x7c, 0x4e, 0xbf, 0x95, 0x39, 0x01, 0x25, + 0x2d, 0x63, 0xdc, 0xf1, 0x0d, 0x64, 0x78, 0x38, 0x98, 0xfc, 0x8a, 0xce, + 0x0f, 0x4f, 0xcf, 0xce, 0x76, 0xda, 0xce, 0xda, 0xc7, 0xd3, 0xb2, 0x34, + 0x1f, 0x7a, 0xb9, 0xd3, 0xba, 0x48, 0xb4, 0x0b, 0xb2, 0xdc, 0x59, 0x57, + 0x22, 0xb6, 0xc9, 0x73, 0xbe, 0x3e, 0x01, 0x6f, 0xd7, 0x65, 0x55, 0x56, + 0x2b, 0xa6, 0xad, 0xac, 0x03, 0x40, 0x48, 0x68, 0xfb, 0x9b, 0x29, 0x29, + 0x16, 0x27, 0x46, 0xc3, 0xc3, 0x00, 0x81, 0xea, 0x5b, 0x1a, 0xdb, 0x61, + 0x24, 0xfc, 0x87, 0x01, 0x5a, 0x1e, 0xdd, 0x1a, 0x20, 0x79, 0x08, 0x42, + 0x36, 0x5c, 0x40, 0xd8, 0x43, 0x49, 0xec, 0xd1, 0xaf, 0xde, 0x54, 0x03, + 0x1e, 0x4c, 0xd8, 0x4b, 0xbc, 0x89, 0x31, 0xf7, 0x24, 0xa4, 0xc6, 0xd6, + 0xb4, 0x92, 0x48, 0x04, 0xf6, 0x27, 0x55, 0x0b, 0x2f, 0x03, 0xe8, 0xcf, + 0xc8, 0x47, 0xfd, 0x52, 0x83, 0x60, 0x1d, 0x00, 0x1f, 0x04, 0xcf, 0x11, + 0xab, 0xb4, 0x9d, 0x35, 0xee, 0x4a, 0x4a, 0x46, 0xd7, 0x16, 0xe5, 0x1b, + 0xc0, 0x87, 0x16, 0x6c, 0x20, 0xeb, 0xa4, 0xcf, 0x92, 0x3f, 0xda, 0x2c, + 0x78, 0xf6, 0xd8, 0x5a, 0x3b, 0xed, 0x1b, 0x50, 0x5f, 0x5b, 0x83, 0x4d, + 0x84, 0x90, 0xd6, 0x02, 0xe2, 0x07, 0x3a, 0x2a, 0x98, 0xd9, 0xc7, 0x39, + 0x9b, 0xb0, 0xc5, 0x6e, 0x69, 0xec, 0xf7, 0xea, 0x3e, 0x2c, 0x68, 0x90, + 0x92, 0x9b, 0xce, 0x1e, 0xef, 0x77, 0xb9, 0xde, 0x2e, 0xd7, 0xf2, 0xa2, + 0x35, 0xed, 0x68, 0xf7, 0x15, 0x4f, 0xd1, 0xc9, 0x7c, 0x1b, 0x2d, 0xdb, + 0xe2, 0x2a, 0x00, 0x7f, 0xd2, 0x76, 0xe2, 0x97, 0xd9, 0x29, 0xe5, 0xfb, + 0xad, 0x71, 0xe7, 0x7b, 0x8b, 0xbf, 0x0e, 0x12, 0x53, 0x62, 0xcc, 0xcc, + 0x46, 0x18, 0x36, 0xb6, 0x47, 0x0d, 0x99, 0x3f, 0x73, 0x64, 0xa1, 0xfd, + 0xab, 0xd5, 0x74, 0x57, 0x5b, 0xdc, 0x7b, 0x08, 0x0c, 0x1f, 0xf4, 0xc8, + 0x3f, 0x82, 0x5b, 0x5b, 0x58, 0xf6, 0x34, 0x34, 0x7f, 0x24, 0x47, 0xe4, + 0x55, 0xba, 0x73, 0x2b, 0x37, 0xd9, 0x74, 0x6c, 0x3b, 0x88, 0x73, 0xdf, + 0xa4, 0xc7, 0xc4, 0xa4, 0xa6, 0xd9, 0x19, 0x6e, 0x81, 0xec, 0xac, 0x78, + 0x99, 0x79, 0xff, 0x00, 0xbe, 0xa1, 0x7a, 0x6f, 0x0f, 0x87, 0x5c, 0xf8, + 0xef, 0xb6, 0x18, 0x3f, 0xe8, 0x89, 0xfc, 0x55, 0xc7, 0x5f, 0x85, 0xc3, + 0x6d, 0xf5, 0x1d, 0xe1, 0x58, 0x2f, 0xff, 0x00, 0xa9, 0x55, 0xec, 0x16, + 0x5d, 0xfc, 0xdd, 0x56, 0x35, 0x87, 0x43, 0x64, 0xb5, 0xa4, 0x0f, 0x10, + 0x26, 0x52, 0x52, 0xf1, 0x4d, 0x44, 0x34, 0x06, 0xee, 0x27, 0x42, 0xe1, + 0x27, 0xef, 0x7c, 0x94, 0x5d, 0xcf, 0x81, 0xa9, 0x50, 0xab, 0x18, 0x12, + 0x0b, 0x19, 0x2e, 0xec, 0xf7, 0x99, 0x3f, 0x7a, 0xbd, 0x4f, 0x4d, 0xb2, + 0xe6, 0x07, 0xba, 0xe0, 0xc0, 0x7b, 0x35, 0xb2, 0x47, 0x97, 0xb8, 0xc7, + 0xe0, 0x92, 0x9a, 0x3e, 0xa0, 0x04, 0x33, 0x52, 0xe3, 0xd8, 0x0f, 0xee, + 0x4a, 0x2c, 0xfa, 0x5b, 0x87, 0xc1, 0x69, 0x33, 0xa4, 0xd2, 0xd7, 0x0f, + 0x51, 0xd6, 0x5b, 0x26, 0x1c, 0x0b, 0x88, 0x1a, 0x8f, 0x06, 0x6d, 0x47, + 0xfd, 0x9b, 0x87, 0xb7, 0x6f, 0xd9, 0xeb, 0x8e, 0x78, 0x13, 0xf7, 0xf2, + 0x92, 0x9d, 0x14, 0xc9, 0xe5, 0x31, 0x49, 0x4b, 0x15, 0x9d, 0x75, 0x93, + 0x92, 0xf9, 0xe1, 0x80, 0x34, 0x2b, 0xd6, 0xbc, 0x57, 0x5b, 0x9e, 0x78, + 0x68, 0x95, 0xca, 0x5b, 0xd4, 0xb2, 0xb2, 0xb2, 0x1f, 0x85, 0xd2, 0x6b, + 0x19, 0x39, 0x4e, 0x33, 0x6d, 0xc7, 0xf9, 0xaa, 0x41, 0xee, 0xf7, 0x7f, + 0x04, 0x94, 0xdb, 0xea, 0x5d, 0x57, 0x1f, 0x05, 0x8d, 0x36, 0x12, 0xeb, + 0x2c, 0xd2, 0xba, 0x58, 0x37, 0x59, 0x61, 0xec, 0x1a, 0xd5, 0x9d, 0x7f, + 0xd5, 0xbe, 0xb5, 0xd6, 0x69, 0xfb, 0x4e, 0x65, 0x8d, 0xc6, 0xef, 0x4e, + 0x06, 0xbc, 0x7f, 0xc2, 0x38, 0x7e, 0x72, 0xdb, 0xe9, 0x3f, 0x57, 0xe8, + 0xc0, 0xb3, 0xed, 0x79, 0x0f, 0x39, 0x7d, 0x45, 0xe3, 0xdf, 0x92, 0xff, + 0x00, 0xcd, 0xfe, 0x4d, 0x6d, 0xfc, 0xd0, 0xb5, 0xd2, 0x53, 0xe5, 0x7d, + 0x4f, 0xa7, 0x59, 0xd3, 0xed, 0x35, 0xe4, 0xd2, 0x68, 0x79, 0xe2, 0x04, + 0xb1, 0xdf, 0x0e, 0xdf, 0x72, 0xc2, 0xb9, 0xe5, 0xce, 0x23, 0xb0, 0x5e, + 0xd5, 0x99, 0x53, 0x2d, 0xc7, 0x73, 0x5f, 0x50, 0xb8, 0x01, 0x3e, 0x99, + 0x01, 0xd3, 0xe4, 0x03, 0xbb, 0xae, 0x0e, 0xcf, 0xaa, 0x97, 0xf5, 0x2b, + 0xaf, 0xbb, 0x0b, 0x10, 0xe1, 0xb1, 0xb3, 0x15, 0xd8, 0x4b, 0x65, 0xfe, + 0x1e, 0xef, 0xe1, 0xa2, 0x4a, 0x79, 0x5a, 0x68, 0x69, 0x1b, 0xed, 0x30, + 0xde, 0xcd, 0xee, 0x55, 0xda, 0x9e, 0x1d, 0xfa, 0x36, 0x00, 0xc0, 0x38, + 0x6f, 0x04, 0xab, 0x39, 0x1d, 0x20, 0xe3, 0xbb, 0xec, 0xd9, 0x2c, 0x76, + 0x36, 0x43, 0x7b, 0xbf, 0x87, 0x7f, 0x03, 0xf2, 0x55, 0x2c, 0xc7, 0xc8, + 0xc7, 0x03, 0xd4, 0x87, 0xd7, 0xdb, 0xfd, 0x89, 0x29, 0x9f, 0xa0, 0xed, + 0x74, 0xf6, 0xb8, 0x10, 0x67, 0x88, 0xf1, 0x52, 0xc5, 0x67, 0xe8, 0x87, + 0xc4, 0xa3, 0x51, 0x91, 0x73, 0x58, 0x00, 0x68, 0xb1, 0x80, 0x70, 0x74, + 0x74, 0x7c, 0x7b, 0xa5, 0x8a, 0xd1, 0xe9, 0x0f, 0xeb, 0x1f, 0xca, 0x92, + 0x9a, 0x45, 0x87, 0xed, 0x36, 0x41, 0x88, 0x28, 0xfb, 0x5c, 0x47, 0xb9, + 0xc4, 0xf9, 0x70, 0x84, 0xf7, 0xec, 0xcb, 0xb8, 0x44, 0xea, 0xa4, 0x2e, + 0x7b, 0x8c, 0x34, 0x40, 0xf1, 0x49, 0x4c, 0xfd, 0x31, 0xc0, 0x1c, 0xf2, + 0x95, 0x4e, 0x60, 0x0e, 0x06, 0x1a, 0xe0, 0x7c, 0x53, 0x38, 0x3c, 0x98, + 0xdd, 0x3e, 0x49, 0xc3, 0x20, 0x70, 0x92, 0x99, 0x9b, 0x07, 0x99, 0x4f, + 0xbc, 0xc7, 0x01, 0xbf, 0x12, 0x8f, 0x89, 0xd2, 0xb3, 0x73, 0x44, 0xd3, + 0x54, 0xd7, 0xfe, 0x91, 0xc7, 0x6b, 0x7e, 0xf5, 0x6f, 0x1b, 0xa0, 0xdf, + 0x74, 0x39, 0xef, 0xad, 0x8c, 0x92, 0x26, 0x49, 0x30, 0x0c, 0x18, 0xd1, + 0x25, 0x34, 0x6a, 0xaa, 0xfc, 0x87, 0x8a, 0xe9, 0x97, 0x39, 0xdd, 0x9a, + 0x3f, 0x29, 0x5b, 0xf8, 0x1d, 0x26, 0x8c, 0x51, 0xbe, 0xd0, 0x2d, 0xbf, + 0xf7, 0x9d, 0xa8, 0x6f, 0xf5, 0x41, 0x56, 0xf1, 0xea, 0xc4, 0xc5, 0xaf, + 0xd3, 0xa5, 0xbc, 0x72, 0x46, 0xa5, 0xc7, 0xcc, 0x84, 0xce, 0xcc, 0xd7, + 0x6b, 0x6b, 0x3b, 0x87, 0x0d, 0x30, 0xd9, 0xfc, 0xa9, 0x29, 0x24, 0xd8, + 0x1f, 0xa0, 0x73, 0xda, 0xee, 0x4e, 0x9b, 0x59, 0x09, 0x4c, 0x9d, 0xa1, + 0xb3, 0xf2, 0x43, 0x76, 0x7e, 0xd2, 0x6b, 0x70, 0xf4, 0xcf, 0x01, 0xe6, + 0x00, 0x3f, 0x02, 0xe5, 0x4f, 0x2f, 0xad, 0xe1, 0xd1, 0x11, 0x92, 0xd7, + 0x38, 0x72, 0xd6, 0x9d, 0xda, 0xff, 0x00, 0x65, 0x25, 0x3a, 0x01, 0xf6, + 0x80, 0xff, 0x00, 0x4d, 0x92, 0xe1, 0xc6, 0xe3, 0x00, 0xfe, 0x5f, 0x04, + 0x0c, 0x5c, 0x8c, 0xab, 0x4b, 0x85, 0xce, 0x63, 0x34, 0x91, 0xb0, 0x4f, + 0xc7, 0x57, 0x2c, 0x2b, 0xbe, 0xb0, 0x57, 0x61, 0x2d, 0xa9, 0xb7, 0x5a, + 0x1c, 0x21, 0xdb, 0x7d, 0x80, 0xf9, 0x77, 0x28, 0x6d, 0xea, 0x3d, 0x55, + 0xc2, 0x31, 0xf1, 0xdb, 0x4b, 0x63, 0x68, 0x2f, 0x92, 0x63, 0xfb, 0x50, + 0x92, 0x9e, 0x8a, 0xcb, 0xe8, 0x69, 0x03, 0x71, 0x7b, 0xbb, 0xff, 0x00, + 0xa8, 0x84, 0x0c, 0xbc, 0xd8, 0x65, 0x6c, 0x68, 0x6b, 0x77, 0x58, 0xcd, + 0xa2, 0x75, 0x89, 0x1a, 0xf8, 0xac, 0x07, 0x53, 0xd5, 0x2e, 0xfe, 0x7b, + 0x27, 0x60, 0x3c, 0xb5, 0x9a, 0x7e, 0x48, 0x44, 0xc3, 0xe9, 0x8c, 0x66, + 0x65, 0x36, 0xbd, 0xee, 0xb1, 0xed, 0x7b, 0x48, 0x24, 0xf7, 0x05, 0x25, + 0x3d, 0x38, 0x05, 0xd4, 0xb9, 0xae, 0x82, 0xe7, 0x34, 0xfe, 0x4f, 0x35, + 0xcb, 0xfd, 0x54, 0xb6, 0xaa, 0xf2, 0xdc, 0x1e, 0x75, 0x35, 0xb8, 0x43, + 0x41, 0x71, 0xe4, 0x76, 0x6c, 0xae, 0x95, 0xe1, 0xcd, 0xb2, 0x49, 0x68, + 0x69, 0x61, 0x11, 0x1e, 0xe9, 0x3e, 0x6b, 0x0b, 0xea, 0xb0, 0x2d, 0x7d, + 0xad, 0x6e, 0x84, 0xb0, 0x83, 0xe3, 0xa3, 0x84, 0xa4, 0xa7, 0xa1, 0x37, + 0x12, 0x3d, 0x95, 0x3c, 0x81, 0xfb, 0xc4, 0x30, 0x7e, 0x3a, 0xfe, 0x0a, + 0x05, 0xd9, 0x76, 0x1f, 0x6f, 0xa7, 0x48, 0xf1, 0x87, 0x58, 0x7f, 0x1d, + 0xa1, 0x11, 0xcf, 0xad, 0x9f, 0x49, 0xc0, 0x79, 0x12, 0x93, 0x1e, 0xe3, + 0xad, 0x75, 0xbd, 0xc3, 0xc9, 0xa7, 0xf2, 0x94, 0x94, 0xc7, 0xec, 0x6e, + 0xb4, 0x1f, 0x5b, 0x22, 0xc3, 0xe1, 0xb4, 0x86, 0x37, 0x5f, 0x26, 0x00, + 0x7f, 0x14, 0x4a, 0x7a, 0x6e, 0x0d, 0x2f, 0x6e, 0xda, 0x43, 0x8f, 0x3b, + 0xdd, 0xef, 0xf9, 0xcb, 0xa5, 0x48, 0x0c, 0x92, 0x7f, 0x9a, 0xdb, 0x23, + 0x97, 0xbc, 0x01, 0xff, 0x00, 0x47, 0x72, 0x95, 0x74, 0x64, 0x17, 0x02, + 0x6f, 0x1b, 0x9b, 0xa4, 0x34, 0x13, 0xcf, 0xf5, 0xb4, 0xfc, 0x12, 0x52, + 0x67, 0xb9, 0xac, 0x70, 0x8a, 0xf7, 0xc8, 0xd0, 0x34, 0x68, 0x13, 0x4b, + 0x1b, 0x5f, 0xb8, 0x0a, 0xa6, 0x61, 0xa4, 0x89, 0x4b, 0xd1, 0x0e, 0xd1, + 0xee, 0x7b, 0xfc, 0x8b, 0xa0, 0x7d, 0xcd, 0x84, 0xff, 0x00, 0x67, 0xa9, + 0xa0, 0x96, 0xb1, 0xa0, 0xf8, 0xc0, 0x94, 0x94, 0xca, 0xa8, 0xd0, 0x81, + 0xf7, 0xad, 0x1c, 0x58, 0xf4, 0x80, 0xf3, 0x2a, 0x83, 0x76, 0xb2, 0xb0, + 0x49, 0x03, 0xb1, 0x3f, 0x15, 0x77, 0x10, 0xfe, 0x8c, 0x8f, 0x02, 0x52, + 0x53, 0x4b, 0xeb, 0x3e, 0x46, 0x46, 0x2f, 0x47, 0xb7, 0x27, 0x16, 0xc7, + 0x55, 0x75, 0x65, 0xb0, 0xe6, 0xf8, 0x17, 0x00, 0x7f, 0x05, 0xcb, 0xfa, + 0xf9, 0x7e, 0xa4, 0xfd, 0xae, 0xff, 0x00, 0x52, 0x7e, 0x97, 0xa8, 0xee, + 0x7f, 0x22, 0xea, 0xbe, 0xb2, 0xb7, 0x7f, 0x42, 0xcd, 0x11, 0x31, 0x51, + 0x77, 0xf9, 0xa4, 0x39, 0x71, 0xbe, 0xb0, 0xd9, 0xeb, 0x76, 0x8d, 0xfc, + 0xf6, 0x8d, 0xc9, 0x29, 0xf4, 0xb2, 0x99, 0x3a, 0x62, 0x92, 0x9a, 0xf9, + 0x78, 0xb5, 0x65, 0xe3, 0xbf, 0x1a, 0xd2, 0xe1, 0x5d, 0x82, 0x1c, 0x58, + 0xe2, 0xc7, 0x7c, 0x88, 0x50, 0xc2, 0xc1, 0xc4, 0xc0, 0xa0, 0x63, 0xe2, + 0x56, 0x2a, 0xa9, 0xbd, 0x87, 0x24, 0xf8, 0xb8, 0xf7, 0x2a, 0xc9, 0x4c, + 0x92, 0x96, 0x49, 0x24, 0x92, 0x52, 0x93, 0xca, 0x64, 0x92, 0x52, 0x3c, + 0x9c, 0x4c, 0x5c, 0xca, 0xcd, 0x59, 0x35, 0x36, 0xd6, 0x1e, 0xce, 0x1c, + 0x7c, 0x0f, 0x65, 0xcc, 0xf5, 0x3f, 0xa9, 0xf6, 0x06, 0xb9, 0xdd, 0x3d, + 0xfe, 0xad, 0x67, 0x53, 0x8d, 0x67, 0x3f, 0xd9, 0x72, 0xea, 0xd3, 0xa4, + 0xa7, 0xca, 0x5f, 0xd3, 0x6c, 0xc7, 0xb5, 0xcc, 0x82, 0xc7, 0x03, 0x0e, + 0xa6, 0xc9, 0x69, 0x1f, 0x02, 0xa5, 0x88, 0xd1, 0xe9, 0x09, 0xec, 0xe3, + 0xf9, 0x57, 0xa5, 0xe6, 0xf4, 0xdc, 0x2e, 0xa1, 0x5f, 0xa7, 0x95, 0x58, + 0x7e, 0x90, 0xd7, 0x8d, 0x1e, 0xdf, 0xea, 0xb9, 0x79, 0xbd, 0x0d, 0x0d, + 0x0f, 0x68, 0xe1, 0xb6, 0x3d, 0xa0, 0x9f, 0x00, 0xe2, 0x12, 0x53, 0x99, + 0x7b, 0x49, 0xce, 0xb4, 0x41, 0x3a, 0xf0, 0x8a, 0xca, 0xac, 0x71, 0xd2, + 0x03, 0x54, 0x88, 0x61, 0xea, 0x17, 0x17, 0x18, 0xd4, 0x7e, 0x45, 0x71, + 0x86, 0xb0, 0x21, 0xad, 0x73, 0xbf, 0x0f, 0xca, 0x92, 0x9a, 0x8e, 0xc6, + 0x7b, 0x40, 0x21, 0xdc, 0x89, 0xf0, 0x4f, 0x75, 0x75, 0x11, 0x53, 0x24, + 0x17, 0x93, 0xee, 0xd7, 0xc9, 0x6a, 0x63, 0x74, 0xbc, 0x8e, 0xa9, 0xba, + 0x9a, 0xb6, 0xd4, 0xc6, 0x89, 0x75, 0x8e, 0x24, 0xfc, 0x06, 0x8b, 0x6b, + 0x07, 0xea, 0xae, 0x05, 0x1e, 0x9b, 0xb2, 0x09, 0xba, 0xd6, 0xf7, 0x3a, + 0x30, 0x1f, 0xea, 0xf7, 0x49, 0x4d, 0x8e, 0x9e, 0xc6, 0xb7, 0xa7, 0x63, + 0x33, 0xe8, 0x96, 0xd6, 0xd1, 0x11, 0x0b, 0x9e, 0xbb, 0xac, 0xe0, 0xe3, + 0xbd, 0xf4, 0x39, 0xb6, 0x5d, 0x73, 0x1e, 0xf6, 0xba, 0xb6, 0x8d, 0x04, + 0x3d, 0xd1, 0xaf, 0x1c, 0x2e, 0x9e, 0xcf, 0x65, 0x8e, 0x60, 0x92, 0x01, + 0xfc, 0x17, 0x09, 0x65, 0x65, 0xdd, 0x7a, 0xed, 0xba, 0x1f, 0x5d, 0xdf, + 0x74, 0x94, 0x94, 0xe9, 0x1f, 0xac, 0x19, 0xaf, 0x61, 0xaf, 0x13, 0x0f, + 0x63, 0x7b, 0x17, 0x49, 0xfc, 0x90, 0x15, 0x72, 0x7a, 0xdd, 0xda, 0xba, + 0xd1, 0x48, 0x3c, 0xed, 0x80, 0x7e, 0xf1, 0x25, 0x5f, 0x0d, 0x1e, 0x0a, + 0x61, 0xa6, 0x12, 0x53, 0x95, 0xfb, 0x20, 0xd8, 0x67, 0x22, 0xf7, 0xda, + 0x7c, 0xc9, 0xfe, 0x32, 0x8f, 0x5f, 0x4c, 0xc4, 0xae, 0x22, 0xb0, 0x7c, + 0xce, 0xaa, 0xf8, 0xa8, 0xf7, 0x52, 0x15, 0x04, 0x94, 0xd6, 0x6d, 0x4c, + 0x6e, 0x8d, 0x68, 0x1f, 0x01, 0x0a, 0x61, 0x87, 0xb0, 0x56, 0x03, 0x07, + 0x82, 0x90, 0xac, 0xa4, 0xa6, 0xaf, 0xa4, 0x4a, 0x9d, 0x6c, 0xdb, 0x63, + 0x08, 0xec, 0xe1, 0xf9, 0x51, 0xbd, 0x32, 0x42, 0x71, 0x5c, 0x47, 0x92, + 0x4a, 0x6d, 0xb9, 0xa6, 0xc7, 0x07, 0xcf, 0x07, 0xc1, 0x60, 0x7d, 0x57, + 0xa9, 0x8e, 0xea, 0xae, 0xae, 0xd9, 0x70, 0x1e, 0xa8, 0x2d, 0x92, 0x1b, + 0xa1, 0xf0, 0x0b, 0xa3, 0x70, 0x01, 0xe1, 0x8d, 0x82, 0x1e, 0x60, 0x11, + 0xc4, 0xf2, 0xb9, 0xbf, 0xab, 0x62, 0xe1, 0xd6, 0x9c, 0xd6, 0x96, 0x87, + 0xb5, 0xf6, 0x87, 0xb9, 0xd2, 0x67, 0x99, 0xd0, 0x42, 0x4a, 0x7b, 0x31, + 0x5d, 0x4c, 0x3f, 0xa3, 0x63, 0x59, 0xfd, 0x50, 0x02, 0x79, 0x92, 0x35, + 0x88, 0x41, 0x73, 0x6d, 0x73, 0xe0, 0xda, 0x47, 0xf5, 0x40, 0x1f, 0xde, + 0x50, 0xdf, 0x5b, 0x0e, 0xae, 0x25, 0xce, 0xe3, 0xdc, 0x49, 0xfc, 0xa9, + 0x29, 0xb0, 0x5f, 0x53, 0x7e, 0x93, 0xc6, 0xbd, 0xa5, 0x47, 0xd5, 0x82, + 0x03, 0x18, 0xf7, 0x4f, 0x70, 0xd8, 0x1f, 0x7b, 0xa1, 0x4e, 0xb0, 0x1a, + 0xd0, 0x1a, 0x03, 0x74, 0xec, 0x21, 0x4f, 0x52, 0x24, 0xa4, 0xa4, 0x2e, + 0xf5, 0xa0, 0xbb, 0x68, 0x6c, 0x6b, 0x05, 0xd3, 0xa7, 0xf6, 0x50, 0x6d, + 0xb6, 0xd8, 0x68, 0xae, 0x6c, 0x2f, 0x1b, 0xbd, 0x82, 0x00, 0x6f, 0x8c, + 0xba, 0x51, 0xad, 0xba, 0x8d, 0xae, 0x66, 0xf1, 0xb8, 0x82, 0x34, 0x32, + 0x75, 0xf8, 0x2a, 0xfb, 0xec, 0x14, 0x06, 0x56, 0x1d, 0xb8, 0x30, 0x34, + 0x38, 0x36, 0x3d, 0xc3, 0xbc, 0xba, 0x12, 0x53, 0x6c, 0xd4, 0x0d, 0x20, + 0x38, 0x4c, 0x41, 0x8f, 0x31, 0x05, 0x5d, 0xc3, 0xe1, 0xe3, 0xb8, 0x3f, + 0x95, 0x55, 0x13, 0xe9, 0x00, 0x7c, 0x07, 0x2a, 0xce, 0x14, 0x0d, 0xfe, + 0x26, 0x09, 0x49, 0x4b, 0x75, 0x5a, 0xfd, 0x4e, 0x9b, 0x95, 0x5f, 0xef, + 0x53, 0x60, 0xff, 0x00, 0xa2, 0x57, 0x9d, 0x7a, 0xbf, 0xe4, 0xad, 0xd1, + 0xaf, 0xa1, 0xb7, 0xe7, 0x1b, 0x57, 0xa7, 0x5e, 0xdd, 0xf4, 0xbd, 0xbe, + 0x2d, 0x70, 0xfb, 0xc1, 0x5e, 0x55, 0x27, 0xf6, 0x66, 0xce, 0xfb, 0xfd, + 0x3f, 0xfa, 0x49, 0x29, 0xf5, 0xd4, 0xc5, 0x39, 0x4c, 0x92, 0x98, 0x94, + 0xc5, 0x3a, 0x64, 0x94, 0xb2, 0x49, 0x24, 0x92, 0x94, 0x92, 0x49, 0x24, + 0xa5, 0x29, 0x02, 0xa2, 0x9c, 0x24, 0xa6, 0x43, 0x90, 0xbc, 0xc1, 0x82, + 0x1f, 0x68, 0x1a, 0x93, 0x75, 0x80, 0x01, 0xfd, 0x62, 0xbd, 0x3c, 0x72, + 0xb9, 0x7e, 0x9f, 0xd2, 0x6a, 0xc5, 0x71, 0xb5, 0xce, 0x0e, 0xb5, 0xd6, + 0x5a, 0x5c, 0x79, 0x10, 0xe2, 0x60, 0x09, 0xf0, 0x49, 0x4f, 0x1a, 0xfa, + 0x5f, 0x4f, 0x53, 0xb9, 0x96, 0xb4, 0xb5, 0xc3, 0x69, 0x20, 0xf2, 0x24, + 0x02, 0xb7, 0x7a, 0x6f, 0x47, 0x17, 0x91, 0x6e, 0x4b, 0xfd, 0x3a, 0x79, + 0x0c, 0x1a, 0xbd, 0xdf, 0x21, 0xc2, 0xa5, 0xd5, 0xbd, 0x31, 0xf5, 0xa2, + 0xe7, 0xb9, 0xa1, 0xcd, 0x0e, 0xa8, 0x90, 0x7c, 0x21, 0xab, 0xb1, 0xc1, + 0x16, 0x0a, 0xcb, 0x8b, 0xc3, 0x83, 0x89, 0x2d, 0x20, 0x01, 0x0d, 0x3c, + 0x0d, 0x34, 0xd1, 0x25, 0x2a, 0x96, 0x57, 0x4d, 0x62, 0xbc, 0x6a, 0x1c, + 0x18, 0x38, 0x11, 0xb0, 0x1f, 0x9b, 0xc8, 0x44, 0x03, 0x25, 0xda, 0x86, + 0x31, 0x9f, 0xd6, 0x25, 0xc7, 0xee, 0x6c, 0x7e, 0x54, 0x4d, 0xf5, 0x83, + 0xab, 0xc7, 0xc2, 0x65, 0x2f, 0x54, 0x13, 0x00, 0x17, 0x7c, 0x04, 0x7e, + 0x58, 0x49, 0x4e, 0x7d, 0xcd, 0x73, 0x6e, 0x70, 0x71, 0x05, 0xd3, 0xa9, + 0x02, 0x07, 0xcb, 0x95, 0xc6, 0x86, 0xff, 0x00, 0x97, 0xf2, 0x07, 0xfc, + 0x2b, 0xbf, 0x21, 0x5d, 0xa6, 0x44, 0xba, 0xe7, 0x3a, 0x20, 0x9e, 0xdf, + 0x25, 0xc7, 0xb8, 0x6d, 0xfa, 0xc5, 0x78, 0x3f, 0xe9, 0x0f, 0xe4, 0x49, + 0x4e, 0x8c, 0x6a, 0x88, 0xc1, 0xb9, 0xdb, 0x53, 0x46, 0xaa, 0x75, 0x0f, + 0xd2, 0x7c, 0x92, 0x53, 0x3f, 0x4e, 0x13, 0xb1, 0x92, 0x60, 0x29, 0x91, + 0xa1, 0x52, 0xa4, 0x0d, 0xc9, 0x29, 0x6f, 0x44, 0xe9, 0x2a, 0x6d, 0xa7, + 0x44, 0x72, 0x3d, 0xa0, 0xfc, 0x54, 0xda, 0x04, 0x7c, 0x8a, 0x4a, 0x6b, + 0xb6, 0x81, 0x00, 0xc7, 0x70, 0x35, 0x4e, 0x6a, 0x80, 0x7e, 0x13, 0xf8, + 0xa3, 0xb4, 0x0f, 0x4f, 0xfb, 0x41, 0x2d, 0xb2, 0x08, 0xf1, 0x11, 0xf8, + 0xa4, 0xa6, 0xbd, 0x6e, 0x3c, 0x76, 0xec, 0xb9, 0xce, 0x9a, 0xf3, 0x8f, + 0xf5, 0x96, 0xc6, 0x86, 0x97, 0x03, 0x73, 0xdb, 0x00, 0x4f, 0xd3, 0x05, + 0x74, 0x4c, 0xab, 0x73, 0x9c, 0x64, 0x8d, 0xa1, 0xc0, 0x47, 0xc5, 0x60, + 0x62, 0xb4, 0x7f, 0xce, 0x77, 0x87, 0x13, 0x3e, 0xbe, 0x80, 0x7c, 0x12, + 0x53, 0xd5, 0x83, 0x79, 0x71, 0x22, 0xbd, 0xb1, 0xfb, 0xce, 0x03, 0xf2, + 0x4a, 0x67, 0x57, 0x7b, 0x89, 0x2e, 0x7b, 0x19, 0xf0, 0x05, 0xdf, 0x94, + 0x85, 0x23, 0x65, 0x2d, 0xfa, 0x6e, 0x0d, 0xfe, 0xb9, 0x83, 0xf7, 0x1d, + 0x53, 0x7a, 0xcc, 0x3f, 0x40, 0x39, 0xdf, 0xd5, 0x61, 0x3f, 0x8f, 0x09, + 0x29, 0x8b, 0x59, 0xbf, 0x73, 0x4d, 0xf6, 0x1d, 0xbc, 0xc4, 0x30, 0x7f, + 0xd1, 0x6a, 0x93, 0x59, 0x47, 0x60, 0x1f, 0x1f, 0xbc, 0x4b, 0xff, 0x00, + 0xea, 0xa5, 0x30, 0x7e, 0x5b, 0xac, 0x01, 0xb4, 0x81, 0x54, 0x6a, 0x5e, + 0xe0, 0x1d, 0x3f, 0x06, 0xee, 0x53, 0x66, 0x33, 0xc1, 0x71, 0x68, 0x65, + 0x65, 0xda, 0xba, 0x01, 0x71, 0x27, 0xfe, 0x8a, 0x4a, 0x5c, 0x18, 0x1e, + 0xd0, 0x1a, 0x3c, 0xb4, 0xfc, 0x89, 0xe5, 0xc5, 0x21, 0x8a, 0x49, 0xf7, + 0xda, 0xf8, 0x3d, 0x9b, 0x0d, 0x1f, 0x80, 0x95, 0x21, 0x89, 0x8f, 0x1a, + 0xb7, 0x77, 0x9b, 0xc9, 0x77, 0xfd, 0x51, 0x29, 0x29, 0x9b, 0x64, 0xd6, + 0x3e, 0x01, 0x58, 0xc3, 0x3e, 0xf7, 0x7c, 0x02, 0xac, 0x08, 0x1e, 0xc0, + 0x21, 0xb1, 0x1a, 0x23, 0xe1, 0x69, 0x67, 0x8c, 0xb5, 0x25, 0x37, 0x9c, + 0x25, 0xa4, 0x78, 0xaf, 0x29, 0xf6, 0xfa, 0xdf, 0x64, 0xfc, 0xef, 0xb6, + 0x44, 0x79, 0x6f, 0x5e, 0xac, 0x78, 0x5e, 0x5f, 0xe8, 0x9f, 0xf9, 0xdb, + 0xe9, 0x46, 0x9f, 0x6d, 0xff, 0x00, 0xbf, 0xee, 0x49, 0x4f, 0xab, 0x15, + 0x12, 0xa6, 0x42, 0x89, 0x49, 0x4c, 0x13, 0x15, 0x22, 0x13, 0x24, 0xa6, + 0x29, 0xd2, 0x49, 0x25, 0x2c, 0x92, 0x74, 0x92, 0x52, 0xc9, 0xd2, 0x49, + 0x25, 0x2e, 0x16, 0x39, 0x70, 0x0e, 0x73, 0xbb, 0x35, 0xcf, 0xd1, 0x6c, + 0x05, 0xca, 0xe7, 0x61, 0x64, 0xdf, 0x6b, 0xac, 0xa9, 0xd6, 0xb9, 0x85, + 0xce, 0x06, 0xa6, 0x3c, 0x56, 0xdd, 0x3c, 0x7b, 0xa4, 0xa7, 0x9f, 0xce, + 0x87, 0xfd, 0x69, 0x78, 0x27, 0xda, 0xe7, 0xd5, 0x31, 0xe1, 0x0d, 0x5d, + 0xb0, 0x15, 0x8d, 0x03, 0x06, 0x9e, 0x3a, 0xfe, 0x55, 0xc2, 0x3a, 0x8b, + 0x6a, 0xfa, 0xc0, 0x2b, 0x0d, 0x6d, 0x4e, 0x6b, 0xab, 0x3b, 0x49, 0x36, + 0x01, 0x3b, 0x63, 0x5d, 0x25, 0x77, 0x66, 0x97, 0x12, 0x66, 0xc7, 0x7f, + 0x64, 0x06, 0xa4, 0xa4, 0x84, 0x88, 0x11, 0xa7, 0x90, 0x08, 0x45, 0xd5, + 0x34, 0x99, 0x2d, 0x67, 0x78, 0x9d, 0x49, 0x2a, 0x43, 0x1e, 0xa9, 0xf7, + 0x02, 0xff, 0x00, 0xeb, 0x12, 0x7f, 0x2a, 0x90, 0xa9, 0x8c, 0x27, 0x68, + 0x03, 0xc0, 0x84, 0x94, 0xd1, 0xbd, 0xe3, 0x79, 0x20, 0xc8, 0x3c, 0x15, + 0xc7, 0xe4, 0x4f, 0xfc, 0xe3, 0xb8, 0xf1, 0x36, 0x37, 0xf2, 0x05, 0xd8, + 0x65, 0xcf, 0xac, 0x77, 0x1e, 0xc3, 0xf2, 0x2e, 0x47, 0x26, 0x3f, 0xe7, + 0x15, 0x9e, 0x6f, 0x67, 0xe4, 0x09, 0x29, 0xd5, 0x11, 0x32, 0x35, 0x53, + 0xab, 0xf9, 0xd1, 0xf0, 0x4d, 0x11, 0xa0, 0x4f, 0x5f, 0xf3, 0xa1, 0x25, + 0x36, 0x23, 0xda, 0x52, 0xa7, 0xe9, 0x27, 0x3c, 0x25, 0x58, 0xf7, 0x24, + 0xa6, 0xcc, 0x7e, 0x8c, 0x7c, 0x4a, 0x71, 0xc0, 0xf8, 0x14, 0xc4, 0xc5, + 0x64, 0x9d, 0x00, 0x3a, 0xfc, 0x16, 0x17, 0x50, 0xeb, 0x79, 0x70, 0xfa, + 0xf1, 0x1b, 0xe9, 0x31, 0xa0, 0x81, 0x69, 0x12, 0xe7, 0x7c, 0x3b, 0x04, + 0x94, 0xef, 0x34, 0xc3, 0x48, 0x3e, 0x47, 0xf1, 0x54, 0x7a, 0x96, 0x69, + 0xc7, 0x60, 0x63, 0x4f, 0xbd, 0xdd, 0xbb, 0xc4, 0xf6, 0x5c, 0x8d, 0xfd, + 0x43, 0x39, 0xad, 0x8b, 0x32, 0x6c, 0x73, 0x9c, 0x3d, 0xc3, 0x71, 0xef, + 0xd9, 0x52, 0xbb, 0xa8, 0x64, 0xbc, 0xc3, 0xde, 0x5f, 0x11, 0x04, 0x9f, + 0x73, 0x60, 0x46, 0x85, 0x25, 0x3d, 0xde, 0x25, 0xe6, 0xc6, 0x96, 0xd5, + 0xf4, 0xda, 0x7f, 0x48, 0xd3, 0xd8, 0x78, 0x4a, 0xc6, 0x6d, 0x6c, 0xb3, + 0xeb, 0x0b, 0x9e, 0x5b, 0x3b, 0xae, 0x64, 0xb6, 0x4f, 0x90, 0xd5, 0x53, + 0xfa, 0xbd, 0xd5, 0x2b, 0x6e, 0x6e, 0xdc, 0x87, 0x96, 0x1b, 0x18, 0x1b, + 0x3f, 0x98, 0x5c, 0xd1, 0xa1, 0x77, 0x9a, 0xb6, 0xe7, 0xb8, 0xf5, 0xef, + 0x52, 0x87, 0xb0, 0x31, 0xcf, 0xa9, 0xe1, 0xe7, 0xdc, 0x35, 0xda, 0x92, + 0x9e, 0xcf, 0xd2, 0xa6, 0xb3, 0xec, 0x63, 0x5a, 0x7c, 0x80, 0x09, 0x89, + 0xd7, 0x8f, 0x9c, 0xa4, 0x69, 0x71, 0xfa, 0x77, 0xb8, 0xf8, 0xed, 0x0d, + 0x6f, 0xf7, 0xa6, 0xfb, 0x3e, 0x3f, 0x2e, 0xdc, 0xff, 0x00, 0xeb, 0x38, + 0x94, 0x94, 0xaf, 0x56, 0xb6, 0x99, 0x73, 0x9a, 0xdf, 0x89, 0x09, 0x7d, + 0xa6, 0xb3, 0xf4, 0x49, 0x77, 0xf5, 0x41, 0x2a, 0x4d, 0xae, 0xa6, 0x11, + 0xb2, 0xb6, 0x8f, 0x30, 0x02, 0x90, 0x7c, 0x98, 0x1d, 0x92, 0x53, 0x11, + 0x63, 0xc8, 0xf6, 0x54, 0xf3, 0xfd, 0x68, 0x6f, 0xe5, 0x2a, 0x25, 0xf9, + 0x3a, 0xfe, 0x8d, 0x8d, 0xf8, 0xb8, 0xbb, 0xf2, 0x00, 0x88, 0x6c, 0x68, + 0xd4, 0x98, 0x08, 0x27, 0x26, 0xa0, 0xe8, 0xde, 0x0f, 0x90, 0xf7, 0x7e, + 0x44, 0x94, 0xcd, 0xa1, 0xc4, 0x0d, 0xf1, 0xba, 0x3d, 0xd1, 0xc2, 0x36, + 0x0c, 0x0b, 0x00, 0x06, 0x46, 0xb0, 0x84, 0xc7, 0xee, 0x01, 0xc2, 0x75, + 0xd0, 0x48, 0x8f, 0xca, 0x9f, 0xa7, 0x37, 0x69, 0x6f, 0x94, 0x82, 0x3c, + 0xe5, 0x25, 0x3a, 0x6e, 0xfa, 0x27, 0xc9, 0x79, 0xf6, 0xc7, 0x7f, 0xcf, + 0xcf, 0x4b, 0xf3, 0x7e, 0xd5, 0xea, 0x47, 0xf6, 0x25, 0x7a, 0x01, 0x3e, + 0xd3, 0xf0, 0x5c, 0x4f, 0xa5, 0xff, 0x00, 0xaf, 0x0a, 0x7b, 0x47, 0xa9, + 0xff, 0x00, 0x81, 0xc2, 0x4a, 0x7b, 0xf2, 0x98, 0xa9, 0x26, 0x29, 0x29, + 0x81, 0x4c, 0xa4, 0x54, 0x4a, 0x4a, 0x62, 0x92, 0x72, 0x9a, 0x12, 0x52, + 0x92, 0x4e, 0x92, 0x4a, 0x59, 0x24, 0xe9, 0x24, 0xa5, 0x05, 0x92, 0xc6, + 0xea, 0xe8, 0xe4, 0xbd, 0xeb, 0x58, 0x2c, 0x66, 0xb3, 0x75, 0x9b, 0xc1, + 0x23, 0x6b, 0xec, 0x1b, 0x7b, 0x12, 0x4c, 0x6b, 0xf0, 0x84, 0x94, 0xf2, + 0x99, 0xee, 0x2d, 0xfa, 0xd6, 0xe0, 0xd6, 0xef, 0x3b, 0xa9, 0xee, 0x07, + 0x66, 0xae, 0xc0, 0xbe, 0xf9, 0xd4, 0x31, 0xa3, 0xe2, 0x5d, 0xfd, 0xcb, + 0x8a, 0xcc, 0x0e, 0xa7, 0xeb, 0x3f, 0xe9, 0x9d, 0xb9, 0xe4, 0xd4, 0x49, + 0x03, 0x99, 0x0d, 0xe0, 0x05, 0xda, 0x3e, 0xd2, 0x4f, 0xb5, 0x8e, 0x20, + 0x79, 0x47, 0xfd, 0x54, 0x24, 0xa5, 0xe6, 0xd3, 0xfe, 0x12, 0x3f, 0xaa, + 0xd0, 0x3f, 0x2c, 0xa8, 0x8a, 0xa4, 0xfe, 0x91, 0xcf, 0xb0, 0x9e, 0x25, + 0xc4, 0x0f, 0xb9, 0xb0, 0x14, 0x5d, 0x75, 0x9f, 0xba, 0x01, 0xfe, 0x53, + 0xbf, 0xb8, 0x21, 0xfd, 0xa2, 0xc3, 0xa8, 0x31, 0x1f, 0xc9, 0xfe, 0xf2, + 0x92, 0x91, 0xe4, 0xd6, 0xd6, 0xbc, 0xb5, 0xa3, 0x68, 0x8e, 0xde, 0x6b, + 0x90, 0xc9, 0x69, 0xaf, 0xae, 0xb9, 0xa4, 0x97, 0x16, 0x9a, 0xc6, 0xe3, + 0xc9, 0xd1, 0xbc, 0xae, 0xba, 0xc7, 0x1b, 0x3d, 0xee, 0x32, 0x4e, 0x9f, + 0xeb, 0x0b, 0x91, 0xea, 0x7e, 0xde, 0xb7, 0x61, 0x1c, 0xfb, 0x08, 0xf9, + 0x00, 0x92, 0x9d, 0xa3, 0xca, 0x93, 0x3f, 0x9d, 0x67, 0xc1, 0x28, 0x33, + 0xaa, 0x93, 0x63, 0xd4, 0x6a, 0x4a, 0x4e, 0x46, 0x8a, 0x0e, 0xb5, 0x94, + 0x82, 0xf7, 0x98, 0x68, 0x45, 0x72, 0xcf, 0xcd, 0x78, 0x73, 0x9b, 0x58, + 0xf1, 0xff, 0x00, 0x62, 0x4a, 0x6d, 0xe2, 0xe2, 0xe5, 0x75, 0x32, 0x64, + 0xfa, 0x78, 0xfc, 0x6d, 0x6f, 0x2e, 0xf9, 0xa3, 0xe6, 0x74, 0xba, 0xaa, + 0x64, 0x10, 0xd8, 0x68, 0x80, 0x00, 0x5a, 0x7d, 0x28, 0x37, 0x1f, 0x05, + 0xa3, 0x6e, 0xd2, 0xd1, 0xf9, 0x55, 0x1e, 0xad, 0x93, 0x50, 0x64, 0xb1, + 0xed, 0x2f, 0x98, 0xda, 0x5c, 0x24, 0x8e, 0xe9, 0x29, 0xe5, 0x7a, 0x8e, + 0x26, 0x38, 0x96, 0xed, 0x13, 0xf0, 0x58, 0x39, 0x18, 0x45, 0xa0, 0xb9, + 0x83, 0x8e, 0xcb, 0xa9, 0xcc, 0xaa, 0x93, 0x8c, 0xdb, 0x5e, 0xe9, 0xbe, + 0xd2, 0x48, 0x68, 0xec, 0xce, 0x02, 0xca, 0xb5, 0x82, 0x22, 0x0c, 0x1f, + 0x24, 0x94, 0xe2, 0x53, 0x50, 0x7b, 0x5c, 0x47, 0xd2, 0x6b, 0x49, 0x23, + 0xc8, 0x77, 0x1f, 0x05, 0xa9, 0x60, 0x38, 0xd9, 0x6c, 0x35, 0x38, 0xb8, + 0x43, 0x08, 0x27, 0xf3, 0xbb, 0xe8, 0xa8, 0x5d, 0x59, 0xc7, 0xb6, 0x78, + 0x9d, 0x41, 0x57, 0xab, 0xb1, 0xb7, 0x7a, 0x2f, 0x1f, 0x9a, 0xdd, 0xa4, + 0x78, 0x41, 0x49, 0x4f, 0xa0, 0xb3, 0x29, 0x96, 0x31, 0xaf, 0x6b, 0x5d, + 0x2e, 0x68, 0x74, 0x18, 0x1c, 0x89, 0xf3, 0x50, 0x37, 0x58, 0x49, 0xfa, + 0x2d, 0xf0, 0xe4, 0xff, 0x00, 0x72, 0x4c, 0x15, 0x55, 0x5b, 0x1a, 0x5e, + 0xd6, 0x80, 0xd0, 0x00, 0x98, 0x3a, 0x05, 0x11, 0x65, 0x64, 0xe9, 0xee, + 0x3f, 0xc9, 0x05, 0xdf, 0x90, 0x24, 0xa6, 0x7e, 0xf2, 0x06, 0xeb, 0x0f, + 0xc1, 0xa0, 0x0f, 0xcb, 0x2a, 0x4c, 0xad, 0xa7, 0xdc, 0x77, 0x9f, 0x12, + 0xe7, 0x1f, 0xe1, 0x0a, 0x2d, 0x7b, 0x88, 0xd2, 0x97, 0x0f, 0x19, 0x86, + 0xfe, 0x52, 0x88, 0x1d, 0x71, 0x6e, 0x8c, 0x63, 0x7c, 0xcb, 0xa4, 0x8f, + 0x90, 0x6a, 0x4a, 0x47, 0xfa, 0x20, 0xf2, 0x03, 0x04, 0xf8, 0xc4, 0x9f, + 0xc5, 0x4b, 0xdd, 0xc7, 0x01, 0x31, 0x16, 0x92, 0x5c, 0x5e, 0xd0, 0x4f, + 0xee, 0xb7, 0xfb, 0xca, 0x70, 0xc7, 0x1f, 0xa5, 0x63, 0xcf, 0xcc, 0x37, + 0xfe, 0xa4, 0x04, 0x94, 0x96, 0xb6, 0x9d, 0x9a, 0xf2, 0x09, 0x4f, 0x8b, + 0xed, 0xbb, 0xe6, 0x47, 0xde, 0x54, 0x6a, 0x01, 0xad, 0x2d, 0x1c, 0x03, + 0xdc, 0x93, 0xf8, 0x99, 0x52, 0x64, 0x7d, 0xa0, 0x1e, 0x3d, 0xc3, 0xf1, + 0x49, 0x4e, 0x90, 0x12, 0xd2, 0x3c, 0x57, 0x2b, 0xe9, 0x8f, 0xf9, 0xef, + 0xea, 0x76, 0xfb, 0x2c, 0xcf, 0xcb, 0x6a, 0xea, 0xc2, 0xc6, 0xfb, 0x3f, + 0xfd, 0x93, 0x7a, 0xd1, 0xff, 0x00, 0x68, 0xe3, 0xe7, 0xea, 0x24, 0xa7, + 0xa2, 0x29, 0x93, 0x94, 0xc9, 0x29, 0x89, 0x4c, 0x9c, 0xa6, 0x49, 0x4b, + 0x26, 0x52, 0x4d, 0x09, 0x29, 0x64, 0xe9, 0x42, 0x74, 0x94, 0xb2, 0x49, + 0xd2, 0x84, 0x94, 0xb0, 0x1a, 0xac, 0x5a, 0x5c, 0x5c, 0x1c, 0x7b, 0x9b, + 0xad, 0x9f, 0x93, 0x8a, 0xdc, 0x1c, 0xac, 0x2c, 0x59, 0xf7, 0x81, 0xda, + 0xfb, 0xbf, 0xea, 0xca, 0x4a, 0x79, 0x5e, 0xa2, 0xfd, 0x9f, 0x5a, 0x83, + 0x89, 0x81, 0xfa, 0x12, 0x49, 0xf8, 0x35, 0x75, 0x6f, 0xba, 0x90, 0x74, + 0xb0, 0x13, 0xe0, 0x0c, 0xae, 0x57, 0xaa, 0xd6, 0xc3, 0xf5, 0x9d, 0xbb, + 0xda, 0x1c, 0x22, 0xad, 0x0f, 0x1d, 0x97, 0x69, 0xb4, 0x34, 0xfb, 0x61, + 0xbf, 0x01, 0xa7, 0xe0, 0x92, 0x9a, 0x4e, 0x25, 0xda, 0x80, 0xe3, 0xf0, + 0x69, 0xfe, 0x2a, 0x02, 0x9b, 0x1d, 0xf9, 0x87, 0xe2, 0xe2, 0x07, 0xf7, + 0xad, 0x02, 0xe0, 0x06, 0xa6, 0x3f, 0x04, 0x23, 0x75, 0x0d, 0x92, 0xe7, + 0x89, 0xf8, 0xcf, 0xe4, 0x49, 0x4d, 0x57, 0x52, 0x6a, 0x68, 0x63, 0xa2, + 0x7e, 0x96, 0x86, 0x57, 0x27, 0xd5, 0x9b, 0xfe, 0x5e, 0xf8, 0x8a, 0xff, + 0x00, 0x82, 0xeb, 0x72, 0x1e, 0xdb, 0x1c, 0x1c, 0xce, 0x00, 0x8e, 0x08, + 0xfc, 0xab, 0x93, 0xeb, 0x32, 0x3a, 0xe3, 0x7c, 0xd9, 0x5f, 0xe5, 0x49, + 0x4e, 0xc1, 0x02, 0x52, 0x6f, 0xf3, 0x8d, 0x49, 0xdc, 0xa4, 0xd9, 0x2f, + 0x67, 0xc5, 0x25, 0x36, 0x4a, 0xc6, 0xb0, 0xec, 0xea, 0x81, 0xae, 0xe0, + 0x39, 0xb0, 0x3b, 0x6a, 0x56, 0xda, 0xa1, 0x65, 0x00, 0xf5, 0x26, 0x17, + 0x49, 0x6b, 0x98, 0x49, 0x68, 0x12, 0x49, 0x6f, 0xd0, 0xff, 0x00, 0xa4, + 0x42, 0x4a, 0x77, 0xf2, 0xad, 0xca, 0xa3, 0x1c, 0xb7, 0x1d, 0x8d, 0x71, + 0x7b, 0x48, 0x2e, 0x7b, 0xb6, 0x35, 0xa2, 0x3c, 0xa4, 0xca, 0xe4, 0x7a, + 0x57, 0x47, 0xea, 0x9d, 0x43, 0xab, 0x54, 0xfb, 0xa9, 0x02, 0xa6, 0xd8, + 0x1d, 0x73, 0xfd, 0xc1, 0xbb, 0x5a, 0x64, 0x81, 0xbb, 0x53, 0x2b, 0xb8, + 0x07, 0x1e, 0xca, 0x48, 0x71, 0xdc, 0xe0, 0x60, 0x81, 0xe4, 0x81, 0x7f, + 0xed, 0x1c, 0x76, 0xba, 0xcc, 0x0a, 0xdb, 0x64, 0xb0, 0xed, 0x6b, 0xbb, + 0xbf, 0xf3, 0x41, 0x49, 0x4f, 0x33, 0xf5, 0xc2, 0x8f, 0x4b, 0xa9, 0x9f, + 0x40, 0x43, 0x1e, 0xd0, 0x63, 0xb4, 0x8d, 0x34, 0x59, 0x2d, 0x7d, 0xac, + 0x10, 0xe7, 0x35, 0xed, 0xec, 0x0b, 0x75, 0x5a, 0x5d, 0x68, 0x75, 0xc3, + 0xe9, 0x5f, 0xd4, 0x9b, 0x48, 0xb9, 0xc4, 0x0b, 0x43, 0x4e, 0xe0, 0xd6, + 0x99, 0x80, 0xd1, 0x3e, 0x4a, 0xa3, 0x76, 0x39, 0xba, 0x8d, 0xae, 0xf0, + 0x49, 0x4e, 0x2f, 0x56, 0x6f, 0xba, 0xb7, 0x01, 0x00, 0xca, 0x06, 0x0d, + 0xcd, 0x6d, 0x81, 0x8e, 0xfa, 0x27, 0xf0, 0x2b, 0x43, 0xab, 0x86, 0x36, + 0x91, 0xf3, 0x21, 0x62, 0xd7, 0x3b, 0x81, 0x49, 0x4f, 0xac, 0x63, 0x36, + 0xb1, 0x8f, 0x51, 0x6b, 0x40, 0x96, 0x37, 0x50, 0x07, 0x80, 0x53, 0x27, + 0xb4, 0xaa, 0x5d, 0x39, 0xf6, 0xdd, 0xd3, 0xf1, 0x9e, 0x5f, 0xa3, 0xab, + 0x6e, 0xa2, 0x06, 0xa0, 0x44, 0x70, 0x51, 0x8b, 0x00, 0xe4, 0xb9, 0xc7, + 0xcd, 0xc7, 0xf8, 0x42, 0x4a, 0x4a, 0xe2, 0xc0, 0x35, 0x30, 0x7c, 0xf4, + 0x42, 0x75, 0xf5, 0x0f, 0xcf, 0x1f, 0x23, 0x3f, 0x91, 0x0c, 0x32, 0xb2, + 0xe3, 0x0d, 0x69, 0x23, 0x99, 0x1b, 0x8f, 0xf1, 0x53, 0xda, 0x5a, 0x20, + 0xbf, 0x68, 0x3f, 0x04, 0x94, 0xb1, 0xc9, 0xae, 0x23, 0x5f, 0x90, 0x29, + 0x8e, 0x51, 0x02, 0x36, 0x68, 0x7c, 0x48, 0xfe, 0x12, 0x9f, 0xd3, 0xdd, + 0x04, 0x19, 0x09, 0xbd, 0x00, 0xde, 0x61, 0xa0, 0xff, 0x00, 0xaf, 0x72, + 0x12, 0x52, 0x6c, 0x4b, 0x77, 0xb1, 0xc4, 0x8f, 0xce, 0x8e, 0xff, 0x00, + 0xc5, 0x17, 0x50, 0xf9, 0xf0, 0x20, 0xa1, 0xe1, 0x8a, 0xe1, 0xc1, 0x8e, + 0x0e, 0x1a, 0x13, 0xb4, 0x83, 0xf9, 0x11, 0x5c, 0x3d, 0xce, 0xf1, 0x30, + 0x92, 0x9d, 0x46, 0xea, 0xaa, 0xfa, 0x5f, 0xe5, 0x2f, 0x57, 0xfe, 0x07, + 0x6f, 0xfd, 0x35, 0x66, 0xb3, 0x21, 0x46, 0x3f, 0x4d, 0x3e, 0x51, 0xf8, + 0xca, 0x4a, 0x6d, 0x94, 0xc9, 0xd2, 0x29, 0x29, 0x8a, 0x65, 0x24, 0xc9, + 0x29, 0x8a, 0x49, 0xd3, 0xa4, 0xa6, 0x30, 0x9d, 0x24, 0x92, 0x52, 0x92, + 0x4f, 0x1e, 0x29, 0xb8, 0x49, 0x4a, 0x1f, 0x05, 0x8b, 0x8e, 0x36, 0x9b, + 0x3f, 0xe3, 0x6c, 0xfc, 0x5c, 0x56, 0xd8, 0x04, 0xac, 0x80, 0xd2, 0xd7, + 0x58, 0x39, 0xfd, 0x23, 0xcf, 0xde, 0x92, 0x9e, 0x2f, 0xaf, 0x58, 0xf6, + 0x7d, 0x62, 0x05, 0xa6, 0x0e, 0xda, 0x8c, 0xf7, 0xe0, 0x2e, 0xa9, 0xcf, + 0x79, 0x79, 0x6b, 0xb7, 0x47, 0x62, 0x5d, 0xcf, 0x8e, 0x80, 0xf6, 0x5c, + 0xa7, 0xd6, 0x7d, 0xec, 0xfa, 0xc1, 0xec, 0x12, 0x4d, 0x75, 0x91, 0xf7, + 0x2e, 0x99, 0xb5, 0xe5, 0x38, 0x87, 0x39, 0x8d, 0x6b, 0xbb, 0x13, 0xda, + 0x79, 0xf1, 0x49, 0x4c, 0xdc, 0xd1, 0x32, 0x40, 0xfb, 0xa5, 0x22, 0x76, + 0xf7, 0xd0, 0xf8, 0x27, 0x38, 0xb6, 0x90, 0x0b, 0xec, 0xf6, 0xff, 0x00, + 0x27, 0xfd, 0x89, 0x0c, 0x46, 0x9d, 0x39, 0xef, 0x2e, 0x93, 0xa7, 0xcc, + 0xa4, 0xa6, 0x25, 0xc1, 0xc3, 0x99, 0x3c, 0x2e, 0x57, 0xeb, 0x01, 0xdb, + 0xd5, 0x98, 0xef, 0xf8, 0x36, 0x9f, 0xb8, 0x95, 0xd5, 0xd8, 0xd6, 0x32, + 0x5a, 0xc1, 0x1f, 0x25, 0xca, 0x7d, 0x63, 0x00, 0x75, 0x2a, 0xff, 0x00, + 0xe2, 0xc7, 0xe5, 0x29, 0x29, 0xd8, 0x6f, 0xb8, 0x35, 0xdc, 0x48, 0x06, + 0x3e, 0x2a, 0x6d, 0xfa, 0x6c, 0x50, 0x69, 0x24, 0x0f, 0x80, 0xfc, 0x8a, + 0x60, 0x6a, 0x0f, 0x82, 0x4a, 0x6c, 0x17, 0x05, 0x4a, 0xfb, 0x83, 0x33, + 0xf1, 0x2f, 0x6d, 0x81, 0x81, 0x8f, 0x0c, 0x79, 0x3a, 0x8d, 0xaf, 0x3b, + 0x5d, 0x28, 0xd6, 0x3a, 0x58, 0x4c, 0xc6, 0x9c, 0xae, 0x7f, 0xa9, 0x8c, + 0x7f, 0x51, 0xce, 0x63, 0xf7, 0x3a, 0x23, 0xe0, 0xe1, 0xa4, 0xa4, 0xa7, + 0xad, 0xb2, 0xfc, 0x9a, 0xb3, 0xab, 0xb3, 0x6c, 0x52, 0xca, 0x9e, 0x32, + 0x09, 0x31, 0x0d, 0x6b, 0xce, 0xd7, 0x47, 0x92, 0xb2, 0x73, 0xf2, 0x5e, + 0x45, 0x74, 0xb5, 0xa1, 0x83, 0x9b, 0xac, 0x78, 0x6b, 0x41, 0x3a, 0x8d, + 0x39, 0x2b, 0x3e, 0xfc, 0x8f, 0xb4, 0xd9, 0x8d, 0xb4, 0xfe, 0x8f, 0x23, + 0x12, 0xd0, 0x5f, 0xfb, 0xd2, 0x1a, 0xf5, 0x9d, 0xf5, 0x7f, 0x3b, 0xed, + 0x58, 0xd6, 0x60, 0xdc, 0xff, 0x00, 0xd3, 0x62, 0xb8, 0xb4, 0xb8, 0xf2, + 0xea, 0xff, 0x00, 0x34, 0xfc, 0xb8, 0x49, 0x4d, 0x6e, 0xaf, 0x91, 0x97, + 0x79, 0x8b, 0xac, 0xad, 0xef, 0x63, 0x8c, 0x86, 0xbc, 0xbb, 0x43, 0xc7, + 0xe6, 0x8e, 0x15, 0x16, 0xbd, 0xc0, 0x80, 0x5b, 0xb6, 0x3c, 0xe5, 0x5a, + 0xea, 0x58, 0xd5, 0xe3, 0xe4, 0x4d, 0x4e, 0xdc, 0x5d, 0xa9, 0x68, 0x1a, + 0x05, 0x42, 0xdb, 0x83, 0x04, 0x9d, 0x12, 0x53, 0x57, 0xac, 0x3f, 0x73, + 0x18, 0x3c, 0x4a, 0xa2, 0x68, 0x7b, 0x19, 0x5b, 0x88, 0xfe, 0x72, 0x63, + 0xe4, 0x61, 0x59, 0xaa, 0xca, 0xf2, 0xb3, 0xd8, 0xdc, 0xa7, 0x8a, 0x71, + 0xc1, 0xe5, 0xdc, 0x69, 0x3f, 0x94, 0xab, 0x7d, 0x4d, 0xd8, 0xf7, 0x67, + 0x83, 0x41, 0x06, 0x8a, 0x9b, 0x1e, 0xdf, 0xa2, 0x3c, 0x00, 0xf1, 0x49, + 0x4f, 0x61, 0xd3, 0x6d, 0x7d, 0x7d, 0x3f, 0x1c, 0x32, 0xa7, 0xb9, 0xbe, + 0x9b, 0x04, 0x68, 0x3b, 0x72, 0x35, 0x56, 0x5f, 0x76, 0x48, 0x61, 0x22, + 0xa6, 0x01, 0xd8, 0xb9, 0xff, 0x00, 0x4a, 0x7c, 0x36, 0xff, 0x00, 0x7a, + 0xad, 0xd3, 0x47, 0xad, 0xd3, 0x71, 0xc3, 0x9b, 0xec, 0x0d, 0x6c, 0x12, + 0x79, 0x01, 0x5d, 0x0e, 0xa5, 0xb3, 0x24, 0x4f, 0x6d, 0x52, 0x53, 0x59, + 0xb4, 0xbd, 0xf2, 0x5a, 0x40, 0x7b, 0xc6, 0xad, 0x68, 0x27, 0x8f, 0x32, + 0xe0, 0x84, 0xea, 0xaf, 0x63, 0xe1, 0x84, 0x83, 0x1c, 0x92, 0x07, 0xf0, + 0x2a, 0xe3, 0x0b, 0x5b, 0xb8, 0x89, 0x97, 0x9e, 0xc0, 0x90, 0xa3, 0xee, + 0x70, 0xd1, 0x87, 0x4e, 0x26, 0x07, 0xe5, 0x29, 0x29, 0x17, 0xa4, 0xed, + 0x9e, 0xe2, 0x5e, 0xfe, 0xe1, 0xee, 0x77, 0xf0, 0x2a, 0x4c, 0xa9, 0x90, + 0x09, 0x63, 0x01, 0x3e, 0x53, 0xf8, 0x94, 0x40, 0xdb, 0x1c, 0xe0, 0x76, + 0x01, 0xf1, 0x77, 0xf7, 0x02, 0x9c, 0xd6, 0xf9, 0x82, 0xe6, 0xb7, 0xc8, + 0x02, 0x7f, 0x88, 0x49, 0x49, 0x31, 0xff, 0x00, 0x39, 0xbc, 0xc0, 0xd3, + 0x40, 0x07, 0xe0, 0x8e, 0xe1, 0xae, 0x9c, 0x90, 0x85, 0x8e, 0xdd, 0xa5, + 0xc4, 0x9d, 0xc2, 0x3c, 0x21, 0x10, 0x88, 0x74, 0xf8, 0xe8, 0x92, 0x9b, + 0xf8, 0xe6, 0x58, 0x3e, 0x03, 0xf2, 0x29, 0x7f, 0x84, 0xf9, 0xff, 0x00, + 0x04, 0x2c, 0x53, 0x35, 0x30, 0xf9, 0x04, 0x6f, 0xf0, 0x92, 0x92, 0x9b, + 0x25, 0x31, 0x4e, 0x53, 0x24, 0xa5, 0x93, 0x27, 0x4b, 0xe4, 0x92, 0x96, + 0x49, 0x25, 0x57, 0xa9, 0x66, 0x7d, 0x8f, 0x18, 0xbc, 0x10, 0x2c, 0x76, + 0x95, 0x83, 0xdc, 0xf7, 0x3f, 0x20, 0x92, 0x92, 0x3f, 0x26, 0x9a, 0xdc, + 0xd6, 0x39, 0xc0, 0x3d, 0xe4, 0x86, 0x83, 0xc9, 0xdb, 0xc9, 0x4f, 0x76, + 0x4d, 0x14, 0x56, 0x6d, 0xbe, 0xc6, 0xd6, 0xc1, 0xcb, 0x9c, 0x60, 0x2f, + 0x3f, 0xea, 0x99, 0x46, 0xcb, 0xa5, 0xcf, 0x2f, 0x78, 0x33, 0xf8, 0xf8, + 0x2c, 0xbb, 0x3a, 0x9e, 0x4e, 0x53, 0xe9, 0xab, 0x2a, 0xe7, 0x11, 0x41, + 0x01, 0xa1, 0xc7, 0x80, 0x3c, 0x12, 0x53, 0xe8, 0xae, 0xeb, 0xf8, 0x4e, + 0x1f, 0xa1, 0xf5, 0x6c, 0x6c, 0x80, 0xeb, 0x19, 0x53, 0xc8, 0x03, 0xc4, + 0x69, 0xaf, 0x82, 0x7a, 0x3a, 0xe6, 0x05, 0xce, 0xd5, 0xe6, 0x96, 0xf0, + 0xc6, 0x58, 0xd7, 0x31, 0xef, 0x3c, 0x7e, 0x70, 0xd7, 0xe4, 0xbc, 0xcb, + 0x23, 0xab, 0xdf, 0xbe, 0x1b, 0x6d, 0x9b, 0x9b, 0xa0, 0x21, 0xe6, 0x46, + 0xb3, 0xa1, 0x47, 0xc0, 0xfa, 0xd9, 0x9d, 0x8b, 0x69, 0x75, 0xb1, 0x92, + 0xc8, 0x80, 0xdb, 0xbd, 0xe4, 0x01, 0xd8, 0x4c, 0x8f, 0xc1, 0x25, 0x3e, + 0xaf, 0x55, 0xa6, 0xcd, 0x43, 0x0b, 0x5b, 0xd8, 0xbb, 0x4f, 0xc1, 0x66, + 0x1d, 0x2d, 0xb7, 0xfe, 0x31, 0xcb, 0x07, 0xa6, 0x7f, 0x8c, 0x1c, 0x4b, + 0x0b, 0x59, 0x95, 0x4b, 0xb1, 0xda, 0x39, 0x73, 0x7d, 0xec, 0x1f, 0xd9, + 0x89, 0x0b, 0x72, 0x9b, 0xe8, 0xcb, 0xad, 0xf7, 0xd0, 0xf6, 0xd9, 0x55, + 0x8f, 0x2e, 0x6d, 0x8c, 0x32, 0x0e, 0x89, 0x29, 0xe2, 0xfe, 0xb3, 0x12, + 0xdf, 0xac, 0x40, 0xc4, 0xcd, 0x75, 0xc0, 0x5d, 0x6f, 0xda, 0x9c, 0x07, + 0xd0, 0x02, 0x06, 0xbb, 0x9c, 0x34, 0x8f, 0x84, 0xae, 0x4b, 0xeb, 0x69, + 0x15, 0xf5, 0xf0, 0xe0, 0x7f, 0xc1, 0x33, 0xf8, 0xae, 0x8c, 0xdd, 0x57, + 0xa4, 0x1c, 0xda, 0x1f, 0x63, 0x61, 0xa7, 0xe8, 0x1d, 0xbe, 0x3d, 0xd2, + 0x52, 0x77, 0xdb, 0x63, 0x9a, 0x1c, 0x5c, 0xd0, 0xc1, 0xae, 0x92, 0x7f, + 0xb9, 0x43, 0xd7, 0x68, 0x1a, 0xda, 0x1b, 0x3a, 0x88, 0x1d, 0xbf, 0x15, + 0x1a, 0xb2, 0x3e, 0xd0, 0xd7, 0x01, 0x8e, 0xed, 0xae, 0x90, 0x08, 0x2d, + 0x12, 0x7c, 0xc1, 0x4c, 0xdd, 0x09, 0x03, 0x1a, 0xb0, 0x41, 0x13, 0xb9, + 0xe4, 0xc7, 0x7d, 0x20, 0x24, 0xa5, 0x1b, 0x05, 0xa7, 0xda, 0xe2, 0xe0, + 0x34, 0x71, 0x3e, 0x3e, 0x50, 0xb9, 0xaf, 0xac, 0x8c, 0x73, 0xb3, 0xe8, + 0xd8, 0xd2, 0xe3, 0xe9, 0xf0, 0xd0, 0x4f, 0x73, 0xe0, 0xba, 0x6f, 0x4d, + 0xec, 0x9d, 0xc1, 0xa0, 0x9d, 0x46, 0xc0, 0x63, 0xe7, 0xb9, 0x13, 0x05, + 0xff, 0x00, 0xad, 0x5a, 0xce, 0xfe, 0x9b, 0x1d, 0xf8, 0xb8, 0x24, 0xa7, + 0x2a, 0xaa, 0xb2, 0x1c, 0x1b, 0x15, 0x3f, 0x50, 0x3f, 0x34, 0xf8, 0x23, + 0xb7, 0x0b, 0x34, 0x9f, 0xe6, 0xc8, 0x1e, 0x64, 0x2d, 0xd2, 0x0f, 0x7d, + 0x02, 0x01, 0xc8, 0xa2, 0xa9, 0xf5, 0x6f, 0x63, 0x75, 0xd3, 0x73, 0x9a, + 0xd8, 0xfc, 0x52, 0x53, 0x9a, 0x7a, 0x56, 0x55, 0x8c, 0xda, 0xe2, 0xd6, + 0x83, 0xe7, 0x3f, 0xc1, 0x56, 0xbb, 0xea, 0xb1, 0xb4, 0x40, 0xbc, 0x30, + 0x9f, 0xa4, 0xed, 0xbb, 0x89, 0x5a, 0xb6, 0x75, 0xae, 0x93, 0x50, 0x3b, + 0xf3, 0x2a, 0xd3, 0x90, 0x1d, 0xbb, 0xfe, 0xa6, 0x55, 0x57, 0x7d, 0x65, + 0xe8, 0xed, 0x3a, 0x5e, 0x5f, 0xe4, 0xc6, 0x38, 0xff, 0x00, 0x04, 0x94, + 0x92, 0x9e, 0x98, 0x31, 0xf1, 0xf0, 0x69, 0x73, 0xcb, 0xdf, 0x8f, 0xba, + 0xb6, 0xba, 0x3e, 0x93, 0x5c, 0x1d, 0x00, 0xae, 0x63, 0xac, 0x63, 0xfd, + 0x8d, 0xd7, 0x3f, 0x1c, 0x9a, 0xf2, 0x31, 0x6c, 0x8d, 0xed, 0xef, 0x5b, + 0xf9, 0x07, 0xe0, 0xef, 0xca, 0xbb, 0x1c, 0x2c, 0xaa, 0xb3, 0xdb, 0x56, + 0x45, 0x6d, 0x7b, 0x6b, 0x2e, 0x3e, 0x9e, 0xf0, 0x5b, 0x31, 0xa6, 0xe8, + 0xf0, 0x5c, 0xb7, 0xd6, 0x2a, 0xdc, 0xdc, 0x9c, 0xa6, 0x34, 0xe8, 0xf0, + 0x09, 0xef, 0x20, 0x90, 0x7f, 0x82, 0x4a, 0x70, 0xaa, 0xca, 0xce, 0xca, + 0x71, 0x3b, 0xc4, 0x0e, 0x5c, 0x75, 0xd0, 0x20, 0x12, 0xe7, 0xfb, 0x9c, + 0x77, 0x14, 0x40, 0xe3, 0x8d, 0x51, 0x1c, 0x3d, 0xe3, 0x6c, 0x76, 0x83, + 0xdd, 0x13, 0x0f, 0x0a, 0xfc, 0xa8, 0x0c, 0x05, 0xb5, 0xf7, 0xb0, 0x8d, + 0x23, 0xcb, 0xc5, 0x25, 0x22, 0xc0, 0xc3, 0x7e, 0x4e, 0x47, 0xd1, 0x0e, + 0xad, 0xa7, 0xde, 0x5d, 0xa8, 0xf8, 0x2d, 0x2c, 0x7c, 0x21, 0x66, 0x40, + 0x6d, 0x75, 0x86, 0x61, 0x34, 0x49, 0x71, 0xe5, 0xee, 0x07, 0x9e, 0x64, + 0x05, 0xa5, 0x6e, 0x3d, 0x58, 0x38, 0x5b, 0x31, 0x9b, 0x2e, 0x78, 0x86, + 0x09, 0xd7, 0x73, 0xbb, 0xb9, 0xc7, 0xc3, 0x92, 0x55, 0xaf, 0xab, 0xbd, + 0x07, 0x2e, 0xdc, 0x36, 0x58, 0x75, 0x75, 0xce, 0x9b, 0x2d, 0x71, 0x91, + 0xa6, 0x9f, 0x31, 0x1c, 0x24, 0xa6, 0x78, 0xae, 0x75, 0x55, 0x32, 0x8a, + 0xab, 0x6e, 0xc6, 0x4c, 0x17, 0x0d, 0xc4, 0x0f, 0x89, 0x57, 0x69, 0xb6, + 0xf2, 0xe0, 0xd6, 0x0d, 0xee, 0x3d, 0x9a, 0x3f, 0xb9, 0x6a, 0x9c, 0x4a, + 0x28, 0xc7, 0xfb, 0x1e, 0x38, 0x1e, 0xa1, 0xd6, 0xeb, 0x9c, 0x35, 0x6b, + 0x46, 0xb2, 0x7f, 0x80, 0x52, 0xaa, 0xca, 0x71, 0x98, 0xfb, 0x2b, 0x01, + 0xb8, 0xf5, 0xb6, 0x3d, 0x48, 0x83, 0x63, 0x92, 0x53, 0x9e, 0xdb, 0x8b, + 0xac, 0x35, 0xbc, 0x16, 0xb8, 0x72, 0xd7, 0x27, 0x88, 0xf9, 0xf8, 0x2c, + 0xe7, 0x5c, 0xe7, 0xdc, 0x6d, 0xfc, 0xe7, 0x12, 0xe3, 0x0b, 0x56, 0xaa, + 0xa8, 0xb2, 0xb6, 0xd9, 0xb0, 0x1d, 0xc2, 0x75, 0x24, 0xfe, 0x54, 0x94, + 0x8f, 0x78, 0x04, 0x6e, 0x20, 0x7c, 0x4a, 0x63, 0x63, 0x49, 0x89, 0x93, + 0xe5, 0xaf, 0xe4, 0x56, 0x9b, 0x53, 0x07, 0x0c, 0x03, 0xe0, 0x00, 0x53, + 0xd4, 0x79, 0x24, 0xa6, 0xbd, 0x33, 0xbb, 0x82, 0x04, 0x6a, 0x5c, 0x08, + 0x1f, 0x8a, 0x39, 0x1e, 0xe0, 0x7b, 0x77, 0x48, 0xb7, 0xba, 0x4e, 0x93, + 0xfc, 0x52, 0x52, 0x7c, 0x33, 0xfa, 0x30, 0x3c, 0x24, 0x7d, 0xc4, 0xab, + 0x1f, 0x9f, 0xf2, 0x58, 0xff, 0x00, 0x6e, 0xbf, 0x1a, 0xf6, 0x54, 0xda, + 0x83, 0xa8, 0x2e, 0x2e, 0xb6, 0xd2, 0x7f, 0x9b, 0x69, 0x71, 0x13, 0x1f, + 0x15, 0xad, 0xb8, 0x4e, 0xe9, 0x1b, 0x76, 0xcc, 0xf6, 0x8f, 0x8a, 0x4a, + 0x6d, 0xa6, 0x3e, 0x65, 0x3c, 0x1f, 0x14, 0xa0, 0x24, 0xa5, 0xbe, 0x01, + 0x34, 0x78, 0xa9, 0x24, 0x92, 0x9a, 0xf9, 0xb6, 0x0a, 0x71, 0x2d, 0x78, + 0x3b, 0x48, 0x69, 0xda, 0x7c, 0xe3, 0x45, 0xc5, 0x65, 0x67, 0x5d, 0x60, + 0x06, 0xdb, 0x5d, 0x64, 0x48, 0x61, 0x76, 0xa5, 0xad, 0x9f, 0x15, 0xb3, + 0xf5, 0x97, 0x32, 0xd6, 0x83, 0x54, 0x80, 0xce, 0x1a, 0x3f, 0x7b, 0xcc, + 0xaa, 0xdd, 0x2f, 0xa2, 0xd7, 0x9b, 0x58, 0xb6, 0xf1, 0xfa, 0x26, 0x7d, + 0x1a, 0xc1, 0x80, 0x48, 0xee, 0x92, 0x9e, 0x47, 0x32, 0xf0, 0xdd, 0xf7, + 0x12, 0x08, 0x70, 0xe6, 0x0a, 0xc5, 0xbf, 0x24, 0xbd, 0xda, 0x68, 0x07, + 0x07, 0xcd, 0x77, 0xbd, 0x6f, 0xa7, 0x60, 0xd6, 0xc2, 0x45, 0x6d, 0xdb, + 0xc4, 0xf8, 0x42, 0xe4, 0x72, 0xa9, 0xa7, 0x71, 0x15, 0xb4, 0x0f, 0x82, + 0x4a, 0x72, 0xb7, 0x12, 0x64, 0x9d, 0x7b, 0xa4, 0x23, 0x95, 0x65, 0xd8, + 0xe2, 0x09, 0x01, 0x57, 0x2d, 0x20, 0xc2, 0x4a, 0x49, 0x45, 0xaf, 0xaa, + 0xc0, 0xf6, 0x38, 0xb4, 0x8e, 0xed, 0x30, 0x57, 0x5f, 0xd1, 0x72, 0x1d, + 0x88, 0xe6, 0x5f, 0x55, 0x9f, 0xa9, 0x5e, 0xe0, 0x1f, 0x60, 0x69, 0x00, + 0x39, 0xdd, 0xad, 0x6f, 0xd1, 0xfe, 0xd0, 0x5c, 0x7e, 0x3d, 0x7e, 0xad, + 0xbe, 0x99, 0x70, 0x66, 0xe0, 0x76, 0xb9, 0xda, 0x09, 0x03, 0x45, 0xb3, + 0xf5, 0x70, 0xe6, 0x64, 0x3d, 0xf8, 0x78, 0xf6, 0x8a, 0xcb, 0x9a, 0x5c, + 0x5a, 0xe2, 0x4b, 0x5c, 0xde, 0xe3, 0x67, 0x05, 0x25, 0x3a, 0x5f, 0x5a, + 0x4c, 0x75, 0xd6, 0x38, 0xf7, 0xa5, 0x9c, 0x7c, 0xd7, 0x52, 0x5c, 0xed, + 0x8d, 0x73, 0xa0, 0xd6, 0xe6, 0x82, 0x66, 0x79, 0xed, 0xca, 0xe3, 0x3a, + 0xb5, 0x59, 0x2d, 0xea, 0x15, 0xd5, 0x96, 0x00, 0xb2, 0xa6, 0x35, 0x81, + 0xcc, 0x24, 0x02, 0xdf, 0xcd, 0xf8, 0x2e, 0xcf, 0x17, 0x13, 0x1d, 0xf8, + 0xd4, 0xb9, 0xcc, 0x0f, 0x25, 0x8d, 0x32, 0xe2, 0x5c, 0x78, 0x1f, 0xbd, + 0x29, 0x29, 0x83, 0x83, 0x6b, 0x1b, 0x81, 0x6b, 0x48, 0xe0, 0x48, 0x84, + 0xb7, 0xd4, 0x09, 0x70, 0x70, 0x32, 0x01, 0x3b, 0x75, 0x33, 0xf2, 0x56, + 0x45, 0x35, 0x00, 0x61, 0x8d, 0x1f, 0x00, 0x02, 0x4d, 0xa5, 0xad, 0x25, + 0xc3, 0x97, 0x72, 0x92, 0x9a, 0x97, 0x34, 0x64, 0x54, 0x58, 0xcb, 0x2d, + 0xad, 0xc7, 0x8b, 0x2b, 0x69, 0x04, 0x7f, 0x9e, 0x21, 0x65, 0x33, 0xa1, + 0xf5, 0x31, 0x63, 0xac, 0xfb, 0x7d, 0xc0, 0xb8, 0x6d, 0xdc, 0x3d, 0xa4, + 0xb4, 0x6a, 0x3f, 0x38, 0x2e, 0x8b, 0x68, 0x1a, 0x98, 0x03, 0xcf, 0x44, + 0x37, 0xe4, 0x63, 0xb4, 0x82, 0xeb, 0x1a, 0x27, 0xcc, 0x24, 0xa7, 0x17, + 0xfe, 0x6e, 0xb6, 0xc0, 0x3e, 0xd1, 0x75, 0xd6, 0x3a, 0x35, 0x2f, 0xb4, + 0xeb, 0xf2, 0x01, 0xca, 0x63, 0xa1, 0x74, 0x9a, 0x21, 0xcf, 0xa9, 0xae, + 0xd4, 0x0d, 0x77, 0xbc, 0xc9, 0x31, 0xe2, 0x16, 0xb7, 0xaf, 0x4c, 0xe8, + 0xed, 0xd3, 0xc4, 0x02, 0x7f, 0x22, 0x3e, 0x2d, 0x5f, 0x6a, 0x78, 0x6b, + 0x5a, 0x5a, 0xd1, 0xf4, 0xdc, 0x5a, 0x46, 0x9f, 0x3e, 0xe9, 0x29, 0xa3, + 0x4f, 0x45, 0xc1, 0xd4, 0xd5, 0x8e, 0xc7, 0x06, 0x89, 0x27, 0x60, 0x81, + 0xfe, 0x74, 0xad, 0x4c, 0x5e, 0x91, 0x8b, 0x53, 0x43, 0xed, 0xad, 0xa0, + 0x93, 0xa3, 0x00, 0x00, 0x6b, 0xe3, 0xb4, 0x05, 0x72, 0xc6, 0xb1, 0x98, + 0xcf, 0x65, 0x40, 0x36, 0x3d, 0xbf, 0x32, 0x9e, 0xf7, 0x8d, 0xd5, 0xb4, + 0x6b, 0x12, 0xe3, 0xfd, 0x9d, 0x3f, 0x29, 0x49, 0x4d, 0x5c, 0xcd, 0xbe, + 0xa9, 0x65, 0x7a, 0x7a, 0x75, 0xc4, 0x08, 0xf6, 0x93, 0xdb, 0xee, 0x5c, + 0x77, 0x5a, 0x0d, 0x76, 0x61, 0x1e, 0x15, 0x41, 0xf3, 0x2b, 0xa1, 0xfa, + 0xc3, 0x98, 0xdc, 0x36, 0x3d, 0xf4, 0x88, 0xb6, 0xdf, 0xa4, 0x7c, 0x76, + 0x88, 0x0b, 0x89, 0xca, 0xba, 0xc7, 0xcb, 0x81, 0xfd, 0x2d, 0x9c, 0x9f, + 0x00, 0x92, 0x91, 0x55, 0x4b, 0x2f, 0xc8, 0x97, 0x34, 0x11, 0x5c, 0x06, + 0xce, 0xa2, 0x56, 0xee, 0x3d, 0x12, 0x1a, 0x08, 0xf8, 0x05, 0x4f, 0xa7, + 0x61, 0x80, 0x18, 0x0f, 0x1c, 0x92, 0x7c, 0x57, 0x51, 0xd1, 0x70, 0x1b, + 0x6d, 0xfb, 0xde, 0xd9, 0xae, 0xb1, 0x24, 0x1e, 0x09, 0xec, 0x12, 0x53, + 0x85, 0x95, 0x8e, 0xec, 0xfe, 0xaf, 0x8d, 0xd3, 0xb6, 0xb8, 0xe3, 0xb4, + 0x8f, 0xb4, 0x11, 0xc7, 0xe9, 0x27, 0x63, 0x5c, 0x7c, 0xe1, 0x76, 0xcf, + 0x15, 0xe3, 0xd4, 0xca, 0xa9, 0x1b, 0x6b, 0xa8, 0x08, 0x68, 0x1d, 0x86, + 0x8d, 0x68, 0xf8, 0x95, 0xcd, 0xbf, 0x29, 0xf5, 0xf5, 0xbc, 0xb6, 0xb5, + 0xe6, 0x9a, 0xab, 0xca, 0xab, 0xd4, 0x7b, 0x5b, 0xa7, 0xf3, 0x70, 0xc6, + 0xb8, 0x8e, 0x7b, 0xe8, 0xba, 0x5d, 0x2c, 0x70, 0xb5, 0xa7, 0xd8, 0xe6, + 0x00, 0x48, 0xef, 0x06, 0x61, 0x25, 0x20, 0x6d, 0x75, 0xd7, 0x51, 0x76, + 0x5f, 0xf3, 0x97, 0x3b, 0x73, 0xd9, 0xce, 0xe8, 0xd4, 0x37, 0x45, 0x8b, + 0x9d, 0x97, 0x66, 0x5d, 0x93, 0xf4, 0x6b, 0x1a, 0x31, 0x9e, 0x01, 0x6c, + 0x66, 0xc3, 0x9a, 0xf6, 0xd4, 0x43, 0xb2, 0x5e, 0x0c, 0x6b, 0xf4, 0x58, + 0x7f, 0x00, 0xb3, 0x99, 0x8d, 0x8d, 0x8b, 0x50, 0xbb, 0x36, 0xc0, 0xf7, + 0x1e, 0x2a, 0x69, 0x1a, 0x13, 0xc4, 0xc7, 0x3a, 0x24, 0xa7, 0x30, 0x57, + 0x0e, 0x31, 0xf1, 0x5a, 0x38, 0xd7, 0xbd, 0x94, 0x35, 0xad, 0x6b, 0x4f, + 0x3a, 0x92, 0x7f, 0x80, 0x59, 0xe6, 0xc6, 0xba, 0xc7, 0x16, 0x37, 0x68, + 0x26, 0x47, 0x78, 0x08, 0x94, 0xdc, 0xc0, 0x1c, 0x1e, 0xf0, 0xc1, 0x3a, + 0x12, 0x63, 0xee, 0x49, 0x4e, 0x81, 0xc9, 0xb8, 0xf7, 0x68, 0xf8, 0x02, + 0x7f, 0xef, 0xc8, 0x6f, 0xba, 0xc7, 0x68, 0x6d, 0x3a, 0x73, 0xb4, 0x06, + 0xff, 0x00, 0x02, 0xab, 0xfd, 0xa6, 0xb2, 0x40, 0x69, 0x2e, 0xf3, 0x6b, + 0x5c, 0x7f, 0x20, 0x49, 0xcf, 0x73, 0xe6, 0x29, 0xb4, 0xf7, 0x1e, 0xd8, + 0xff, 0x00, 0xaa, 0x84, 0x94, 0xd9, 0xa5, 0xee, 0x73, 0xc3, 0x49, 0x79, + 0x06, 0x75, 0x26, 0x7f, 0x22, 0xb6, 0xd6, 0xe8, 0x44, 0xff, 0x00, 0xa8, + 0x54, 0x71, 0x0d, 0xbe, 0xab, 0x4b, 0xeb, 0x2c, 0x6c, 0x90, 0x4b, 0x9c, + 0xdf, 0x0f, 0x00, 0x4a, 0xb6, 0x3d, 0x4d, 0xc3, 0x5f, 0x03, 0xa7, 0x81, + 0x49, 0x4d, 0x17, 0xd8, 0x1b, 0x9f, 0xb7, 0x70, 0x69, 0x7d, 0x64, 0x34, + 0x38, 0x81, 0xb8, 0x87, 0x6a, 0x07, 0x8f, 0xd2, 0x4d, 0xeb, 0xbf, 0xfe, + 0x6d, 0xf3, 0xae, 0xff, 0x00, 0x4a, 0x7f, 0x93, 0xbb, 0x84, 0xb2, 0xb1, + 0xe8, 0xb3, 0x28, 0x3a, 0xca, 0xc3, 0xdc, 0xc2, 0x0b, 0x66, 0x63, 0xee, + 0x5a, 0xfe, 0x8d, 0x7f, 0x64, 0xf4, 0xb6, 0x37, 0xd3, 0xdb, 0xf4, 0x20, + 0x47, 0xdc, 0x92, 0x9d, 0x44, 0x92, 0x49, 0x25, 0x2c, 0x92, 0x74, 0x92, + 0x53, 0xcd, 0xfd, 0x65, 0x14, 0xb5, 0xd5, 0xee, 0x0d, 0x16, 0x48, 0xd9, + 0xe3, 0x0a, 0xce, 0x09, 0x14, 0xf4, 0xd6, 0x19, 0x6b, 0x5b, 0x13, 0xee, + 0x21, 0xb3, 0x3e, 0x65, 0x1b, 0xae, 0x74, 0xb6, 0xe5, 0xd2, 0x6f, 0x69, + 0x0d, 0xb6, 0xa6, 0x93, 0x24, 0x72, 0x06, 0xb0, 0xb9, 0x6f, 0xac, 0xb8, + 0xdd, 0x4e, 0xcc, 0x06, 0x8a, 0x68, 0x8c, 0x6a, 0xda, 0xd2, 0x1f, 0x23, + 0x75, 0x92, 0x07, 0x03, 0x9d, 0x12, 0x52, 0xfd, 0x53, 0xa9, 0x60, 0xd9, + 0xb9, 0x9e, 0xa0, 0xb1, 0x9b, 0x88, 0x1b, 0x35, 0x1b, 0x87, 0x9a, 0xe6, + 0x6d, 0x2d, 0x76, 0xac, 0x12, 0x64, 0xe8, 0x06, 0xab, 0x67, 0xa4, 0xfd, + 0x5f, 0xc8, 0x1d, 0x07, 0x37, 0x37, 0x32, 0xb3, 0x53, 0xbd, 0xae, 0xc7, + 0x6b, 0xb4, 0x27, 0x6f, 0xd2, 0x31, 0xf8, 0x2c, 0xa6, 0x30, 0x58, 0xf0, + 0x0c, 0x80, 0x39, 0x8e, 0x7c, 0x92, 0x53, 0x5f, 0x63, 0xc9, 0x82, 0xd2, + 0x3e, 0x2a, 0xae, 0x5d, 0x3b, 0x3d, 0xdf, 0x7a, 0xd3, 0x14, 0xdd, 0x58, + 0x05, 0xce, 0xdd, 0xa6, 0xa3, 0xb7, 0xc9, 0x03, 0x22, 0xbf, 0x52, 0xb3, + 0x3c, 0xa4, 0xa7, 0x24, 0x00, 0x5c, 0xd0, 0x7c, 0x42, 0xdc, 0xa2, 0xb7, + 0xf4, 0xec, 0xfa, 0xb2, 0xf1, 0xf7, 0x08, 0x3a, 0xcf, 0x76, 0x9f, 0xf6, + 0x20, 0xf4, 0x5e, 0x9e, 0xcc, 0xfe, 0xaf, 0x8d, 0x89, 0x1e, 0xdb, 0x1c, + 0x5a, 0x74, 0x98, 0xda, 0x37, 0x49, 0x5d, 0x1b, 0xba, 0x33, 0xe9, 0x73, + 0xe8, 0x79, 0xdc, 0xda, 0xdf, 0xe9, 0xb9, 0xc3, 0xf7, 0x5c, 0xdd, 0x0f, + 0xc4, 0x14, 0x94, 0xd4, 0xfa, 0xd6, 0xf1, 0xfb, 0x53, 0x1e, 0xd6, 0xc6, + 0xdb, 0x31, 0xd8, 0xef, 0x8f, 0xd2, 0xd5, 0x74, 0xfd, 0x2f, 0x27, 0xd6, + 0xe9, 0xf8, 0xee, 0x6b, 0xff, 0x00, 0xc1, 0xb7, 0x86, 0x47, 0x6f, 0xe5, + 0x2e, 0x4f, 0xeb, 0x1d, 0x6f, 0xa7, 0x2f, 0x0a, 0xab, 0x75, 0x75, 0x54, + 0x06, 0x6e, 0x1d, 0xc3, 0x5c, 0xe8, 0x2b, 0xa5, 0xe9, 0xb6, 0xbd, 0x9d, + 0x3a, 0x8f, 0xd1, 0x97, 0x12, 0xc0, 0x41, 0x71, 0x63, 0x74, 0x23, 0xf9, + 0x29, 0x29, 0xba, 0xe7, 0xba, 0x4c, 0xb9, 0xc4, 0x7c, 0x87, 0xe4, 0x09, + 0x8b, 0x40, 0xfc, 0xe7, 0x1f, 0x22, 0xe3, 0xfd, 0xea, 0x06, 0xdb, 0x0e, + 0xbe, 0x9b, 0x00, 0xf3, 0x79, 0xfe, 0x0d, 0x4d, 0xeb, 0xde, 0xe2, 0x1a, + 0x3d, 0x26, 0x7f, 0x65, 0xce, 0xfe, 0x2d, 0x49, 0x4a, 0x73, 0x2b, 0x99, + 0xd8, 0xdf, 0xba, 0x7f, 0x2a, 0x8e, 0xe7, 0x02, 0x23, 0xdb, 0x3c, 0x00, + 0x00, 0xfe, 0x09, 0x1f, 0x5c, 0xf3, 0x68, 0x9f, 0xe4, 0xb0, 0x7f, 0xdf, + 0x89, 0x50, 0x12, 0x49, 0x06, 0xd7, 0xf9, 0xc6, 0xd1, 0xf9, 0x1a, 0x92, + 0x92, 0x0d, 0xee, 0x3a, 0xc9, 0x25, 0x6f, 0xd3, 0x5b, 0x31, 0x31, 0xc3, + 0x66, 0x23, 0x57, 0x38, 0xf7, 0x72, 0xe7, 0xeb, 0x65, 0x4d, 0xb1, 0x8f, + 0x77, 0xa9, 0x66, 0xc2, 0x08, 0x0e, 0xb1, 0xd0, 0x63, 0x55, 0x64, 0xf5, + 0xdb, 0xcb, 0xa5, 0xcc, 0x63, 0x18, 0x34, 0x2d, 0x71, 0x23, 0x5f, 0x8a, + 0x4a, 0x74, 0x9e, 0xf6, 0xba, 0xc7, 0x30, 0x7f, 0x84, 0xda, 0xe3, 0xf1, + 0x69, 0xed, 0xf2, 0x4f, 0x90, 0x43, 0x6b, 0xe7, 0xdc, 0xfd, 0x07, 0x8c, + 0x4c, 0x95, 0x57, 0x23, 0x26, 0xab, 0x45, 0x65, 0xae, 0x0e, 0x25, 0xa0, + 0x8d, 0x84, 0xc8, 0x71, 0xe3, 0x58, 0x41, 0xcc, 0xb9, 0xe2, 0xa9, 0x7b, + 0xa6, 0xc2, 0x20, 0x91, 0xa4, 0x00, 0x92, 0x9c, 0x2f, 0xac, 0x37, 0x6f, + 0x07, 0x5d, 0x49, 0xd8, 0xd1, 0xe4, 0x17, 0x3d, 0xb4, 0xbf, 0x25, 0xac, + 0xec, 0x34, 0xfb, 0xd5, 0xdc, 0xec, 0x9f, 0x5b, 0x20, 0xeb, 0x2c, 0x67, + 0x08, 0x7d, 0x3e, 0x83, 0x65, 0xc2, 0xc3, 0xf4, 0x66, 0x67, 0xe0, 0x92, + 0x9d, 0xcc, 0x1c, 0x79, 0x73, 0x18, 0xd1, 0xee, 0x74, 0x34, 0x1f, 0x8a, + 0xeb, 0xf1, 0xa8, 0x66, 0x3d, 0x42, 0xa6, 0x08, 0x0d, 0xe4, 0xf8, 0x9f, + 0x15, 0xcf, 0x74, 0xb6, 0x0f, 0xb7, 0x53, 0xcc, 0x03, 0x3f, 0x70, 0xfc, + 0x8b, 0xa5, 0xee, 0x92, 0x9e, 0x2b, 0xeb, 0x16, 0x46, 0x6f, 0x4a, 0xea, + 0x97, 0x5b, 0x5c, 0x1c, 0x6c, 0xe6, 0x86, 0x92, 0x40, 0xf6, 0x58, 0x34, + 0x07, 0x55, 0xd1, 0x74, 0xdb, 0x99, 0x6d, 0x04, 0x58, 0x76, 0xd3, 0x54, + 0x43, 0xa6, 0x03, 0xcb, 0x86, 0xe3, 0xf7, 0x2c, 0x0f, 0xae, 0x3b, 0x7e, + 0xd9, 0x5b, 0x6f, 0x31, 0x8f, 0x1b, 0x8b, 0x7b, 0x3c, 0x8e, 0x1a, 0x4a, + 0xbd, 0xd3, 0xf1, 0x8e, 0x27, 0x4e, 0xc7, 0xa0, 0x92, 0xe2, 0xc6, 0x02, + 0x4b, 0xb9, 0x97, 0x7b, 0xa3, 0xe5, 0x30, 0x92, 0x9d, 0x5c, 0x8c, 0xee, + 0x9f, 0x4b, 0x23, 0xf3, 0x75, 0xfa, 0x2c, 0x90, 0xb9, 0xbc, 0x9c, 0x8e, + 0x9d, 0x7d, 0xc4, 0x62, 0x58, 0xd0, 0xff, 0x00, 0xdc, 0x82, 0xd7, 0x0f, + 0xec, 0xb9, 0x17, 0xa8, 0xdb, 0xec, 0x2b, 0x8f, 0xc9, 0x7e, 0xfb, 0xcb, + 0x87, 0x63, 0xa1, 0xee, 0x12, 0x53, 0xd2, 0x0b, 0x1e, 0xd7, 0x00, 0xf1, + 0x24, 0x9d, 0x08, 0xee, 0x15, 0xbc, 0x7b, 0x3d, 0x16, 0x81, 0x07, 0x73, + 0xc9, 0x73, 0x8f, 0xfb, 0x56, 0x4f, 0x4a, 0xc8, 0xc9, 0xbd, 0x85, 0xb6, + 0xfb, 0x8d, 0x64, 0x6d, 0xb3, 0xb9, 0x04, 0x70, 0x56, 0xcb, 0x29, 0x6b, + 0xf6, 0xb4, 0xe4, 0x06, 0x39, 0xc3, 0xe8, 0x40, 0x2e, 0x1f, 0x79, 0x49, + 0x49, 0x0d, 0xce, 0x3f, 0x0d, 0x12, 0x0e, 0x3a, 0x95, 0x2f, 0xb0, 0x00, + 0x35, 0xc8, 0xb0, 0xf9, 0x0d, 0xa3, 0xfe, 0xfa, 0x97, 0xd8, 0xa9, 0x3a, + 0x17, 0x5a, 0xe3, 0xde, 0x6c, 0x23, 0xf2, 0x42, 0x4a, 0x5d, 0x80, 0x97, + 0x01, 0xe6, 0xac, 0x82, 0x45, 0x8d, 0x1c, 0x37, 0x69, 0xfb, 0xc4, 0x42, + 0xae, 0xcc, 0x2c, 0x66, 0x38, 0x58, 0xd6, 0x12, 0xe6, 0x19, 0x04, 0xbd, + 0xc7, 0x8f, 0x89, 0x56, 0x6b, 0x24, 0xb9, 0xa7, 0xe3, 0xa1, 0xf3, 0x84, + 0x94, 0x8d, 0xb5, 0x4e, 0x4b, 0xcc, 0x7d, 0x10, 0x0a, 0xd1, 0xd7, 0xd3, + 0x88, 0xed, 0xf2, 0x54, 0xe9, 0x1f, 0xac, 0xbc, 0x1f, 0x01, 0xf9, 0x4a, + 0xb5, 0xae, 0xe8, 0xdc, 0x27, 0x8d, 0xa9, 0x29, 0xd1, 0x49, 0x36, 0x89, + 0x40, 0x49, 0x4b, 0xa4, 0x9a, 0x12, 0xd7, 0xc5, 0x25, 0x29, 0xcd, 0x0f, + 0x69, 0x69, 0xe1, 0xc0, 0x83, 0xf3, 0x59, 0xd7, 0x5b, 0x5e, 0x36, 0x36, + 0xec, 0x87, 0x43, 0x28, 0x1a, 0xc7, 0x83, 0x56, 0x96, 0xab, 0x8d, 0xfa, + 0xd9, 0x7e, 0x57, 0x4e, 0xea, 0x0c, 0xb8, 0x7e, 0x97, 0x0b, 0x24, 0x07, + 0x3e, 0x97, 0x7d, 0x1d, 0xec, 0xd1, 0xc3, 0xca, 0x74, 0x29, 0x29, 0xb1, + 0xd6, 0xfa, 0xf6, 0x2e, 0x47, 0x49, 0xf4, 0xaa, 0xb1, 0xa2, 0xf7, 0x86, + 0xee, 0xaa, 0x7e, 0x83, 0x5e, 0x25, 0xbb, 0xbe, 0x4b, 0x8f, 0xc6, 0x7d, + 0x6f, 0x81, 0x21, 0xc0, 0xf0, 0xf0, 0xb5, 0xf3, 0x7e, 0xb0, 0xf4, 0xfe, + 0xa1, 0x48, 0xf4, 0xba, 0x76, 0xfb, 0x80, 0x00, 0x39, 0xcc, 0x04, 0x13, + 0x11, 0xb4, 0x16, 0x89, 0x20, 0x2e, 0x7e, 0xb7, 0x8a, 0xac, 0xd8, 0xfd, + 0xcd, 0x74, 0xc4, 0x38, 0x10, 0x92, 0x9b, 0xd7, 0x08, 0x1a, 0x70, 0xab, + 0x7a, 0x76, 0x5a, 0xe1, 0x4d, 0x4d, 0xdf, 0x6d, 0x84, 0x35, 0x8d, 0x1c, + 0x97, 0x1d, 0x00, 0x52, 0x7d, 0xb0, 0xde, 0x55, 0xff, 0x00, 0xaa, 0xb4, + 0x1c, 0xae, 0xbf, 0x8c, 0x06, 0xad, 0xa8, 0x9b, 0x5d, 0xfd, 0x81, 0xa7, + 0xe3, 0x09, 0x29, 0xdc, 0xfa, 0x9d, 0xf5, 0x4b, 0x27, 0xa7, 0x64, 0x7e, + 0xd2, 0xea, 0x03, 0x65, 0xe1, 0xa5, 0xb5, 0x52, 0x08, 0x24, 0x6e, 0xd1, + 0xce, 0x79, 0x1a, 0x4c, 0x68, 0xb6, 0x2c, 0xad, 0xae, 0xca, 0xca, 0x0e, + 0x00, 0x82, 0xf6, 0xe9, 0xe5, 0x0b, 0x65, 0x64, 0x49, 0x39, 0x99, 0x63, + 0xc1, 0xcd, 0x8f, 0xc5, 0x25, 0x3c, 0x5f, 0xd7, 0x76, 0x86, 0x75, 0x4c, + 0x68, 0xd0, 0x7a, 0x5f, 0xf7, 0xe7, 0x2d, 0x9e, 0x99, 0x7d, 0x5f, 0xb3, + 0x71, 0xa5, 0xe2, 0x45, 0x60, 0x11, 0x3a, 0xe9, 0xa2, 0xca, 0xfa, 0xea, + 0xd9, 0xea, 0xb8, 0x80, 0x8d, 0x7d, 0x2e, 0x3f, 0xb4, 0xe5, 0xd1, 0x74, + 0x96, 0xb5, 0x9d, 0x2f, 0x18, 0x96, 0x4f, 0xb3, 0xf3, 0x7d, 0xb1, 0xa9, + 0xe6, 0x12, 0x52, 0x3f, 0x56, 0xb7, 0x18, 0x69, 0x2e, 0xf8, 0x35, 0xc7, + 0xf8, 0x24, 0x5f, 0xb4, 0xc9, 0x63, 0xe3, 0xcd, 0xa4, 0x7e, 0x58, 0x57, + 0x1d, 0xb5, 0xe2, 0x03, 0x0f, 0x6d, 0x5a, 0x49, 0x2a, 0x2e, 0xb3, 0x07, + 0x1e, 0xbd, 0xce, 0xb4, 0xee, 0xec, 0x2c, 0x71, 0x24, 0xa4, 0xa6, 0xb0, + 0xb5, 0xd1, 0x02, 0xa2, 0xe0, 0x78, 0x98, 0xfe, 0xf5, 0x12, 0xeb, 0x89, + 0x81, 0x49, 0x07, 0xe7, 0xfc, 0x01, 0x56, 0x1d, 0x9f, 0x84, 0x1b, 0x22, + 0xc6, 0x17, 0x76, 0x8d, 0xc7, 0xef, 0x43, 0xab, 0xaa, 0x63, 0x3d, 0xce, + 0x63, 0x5c, 0x5f, 0xb6, 0x46, 0xd6, 0x34, 0x93, 0x3f, 0x24, 0x94, 0xc0, + 0xfa, 0xcd, 0x6b, 0x9e, 0x59, 0x0d, 0x68, 0x25, 0xdc, 0xf6, 0xf8, 0xc2, + 0xc7, 0x3d, 0x44, 0x35, 0xfe, 0xad, 0x8c, 0xf5, 0xaf, 0x79, 0xfd, 0x1d, + 0x7f, 0x9a, 0xd0, 0x78, 0xf1, 0x92, 0x56, 0xeb, 0xf3, 0x43, 0x5a, 0x5c, + 0xdc, 0x6b, 0x88, 0x1e, 0xe2, 0x76, 0xc0, 0xe3, 0xcd, 0x57, 0xe9, 0x5d, + 0x27, 0xd2, 0x71, 0xcc, 0xca, 0x03, 0xed, 0x56, 0x19, 0x6b, 0x7b, 0x56, + 0x0f, 0x61, 0xe6, 0x92, 0x9b, 0x78, 0x27, 0x33, 0xec, 0xde, 0xa6, 0x58, + 0x6d, 0x64, 0xea, 0xda, 0x9b, 0x30, 0xd1, 0xfc, 0xaf, 0x35, 0x9b, 0xd5, + 0xf3, 0xcb, 0x28, 0x79, 0x69, 0xd5, 0xde, 0xc6, 0xad, 0x4e, 0xa7, 0x78, + 0xa6, 0xa1, 0x5c, 0xfb, 0x8f, 0x2b, 0x90, 0xea, 0x39, 0x06, 0xdb, 0x05, + 0x60, 0xfb, 0x58, 0x92, 0x9a, 0x2f, 0x71, 0x6d, 0x67, 0xf7, 0x9e, 0x63, + 0xef, 0x5d, 0x07, 0x4f, 0xa4, 0x57, 0x53, 0x1b, 0x11, 0x01, 0x73, 0xf5, + 0x8f, 0x57, 0x29, 0x8c, 0x1c, 0x33, 0xdc, 0x7f, 0x82, 0xe9, 0xb1, 0xb6, + 0x96, 0x36, 0x0e, 0x80, 0x0e, 0x12, 0x53, 0xa9, 0xd1, 0x84, 0xe7, 0x71, + 0xf4, 0x03, 0x8c, 0xf8, 0x69, 0x1f, 0xc5, 0x74, 0x07, 0x85, 0x8f, 0xd1, + 0xb1, 0x9f, 0x55, 0x8e, 0xbd, 0xc2, 0x1a, 0x5b, 0x0d, 0x07, 0x93, 0x27, + 0x9f, 0x82, 0xd6, 0x7b, 0xc0, 0x6e, 0xee, 0xc1, 0x25, 0x3c, 0xc7, 0xd7, + 0x06, 0x32, 0xf7, 0xe2, 0x63, 0x92, 0x03, 0xac, 0xb5, 0xad, 0xf7, 0x78, + 0x48, 0x24, 0x0f, 0xb9, 0x5f, 0xb8, 0x83, 0x3f, 0x91, 0x56, 0xfa, 0xc5, + 0x57, 0xda, 0x6d, 0xc5, 0x6d, 0x6d, 0x9b, 0x19, 0x73, 0x5f, 0xb8, 0xfe, + 0x6b, 0x5a, 0x43, 0x8b, 0xbf, 0x04, 0x57, 0x3f, 0x74, 0x9e, 0xc9, 0x29, + 0xc4, 0xeb, 0x37, 0x7a, 0x55, 0x1d, 0x7b, 0x42, 0xe5, 0xe6, 0x5d, 0xe7, + 0xdd, 0x6d, 0x75, 0xfc, 0xa6, 0xb9, 0xc2, 0xa6, 0xf3, 0xdd, 0x65, 0x62, + 0x52, 0x6e, 0xb9, 0xac, 0xec, 0x4e, 0xbf, 0x0e, 0xe9, 0x29, 0xdf, 0xe9, + 0x35, 0x96, 0x63, 0x32, 0x44, 0x17, 0x19, 0xf9, 0x15, 0xa0, 0xdc, 0x1c, + 0x50, 0xfd, 0xdb, 0x89, 0x33, 0x27, 0x68, 0x24, 0xcf, 0xc6, 0x10, 0xf0, + 0x19, 0x2f, 0x63, 0x48, 0x80, 0x23, 0xf0, 0x5a, 0x36, 0x3a, 0x03, 0xbb, + 0xf8, 0x24, 0xa6, 0x42, 0xd6, 0xed, 0xfa, 0x2f, 0xff, 0x00, 0x34, 0xff, + 0x00, 0x15, 0x0f, 0x5c, 0x0d, 0x05, 0x4f, 0x23, 0xcf, 0x68, 0xfc, 0xae, + 0x43, 0x69, 0x29, 0xcb, 0xa4, 0xc1, 0x3e, 0x69, 0x29, 0x23, 0xaf, 0x79, + 0x30, 0x2a, 0x86, 0x9f, 0x17, 0x0f, 0xe1, 0x28, 0xad, 0x33, 0x67, 0x91, + 0x74, 0x03, 0xf2, 0x55, 0x49, 0xd6, 0x0e, 0x8a, 0xc3, 0x79, 0x68, 0xed, + 0xb8, 0x9f, 0xb9, 0x25, 0x33, 0xc6, 0x27, 0xed, 0x56, 0x07, 0x08, 0x81, + 0x01, 0x5e, 0x81, 0x13, 0x1a, 0xf2, 0xa9, 0xb1, 0xa3, 0xed, 0x45, 0xc3, + 0x82, 0xd2, 0x23, 0xe0, 0x55, 0xd8, 0xd3, 0xcd, 0x25, 0x37, 0x65, 0x2d, + 0x12, 0x49, 0x25, 0x2d, 0x1e, 0x09, 0xf5, 0x4b, 0x44, 0xb4, 0x49, 0x4a, + 0xd5, 0x51, 0xeb, 0x1d, 0x2e, 0x9e, 0xad, 0x82, 0xfc, 0x4b, 0x7d, 0xa4, + 0xeb, 0x5d, 0x9f, 0xb8, 0xf1, 0xc1, 0x57, 0xb4, 0x51, 0xb2, 0xca, 0xea, + 0x61, 0x7d, 0xaf, 0x0c, 0x60, 0xe5, 0xce, 0x20, 0x01, 0xf3, 0x29, 0x29, + 0xf2, 0x1c, 0xca, 0x73, 0xba, 0x76, 0x55, 0x98, 0x97, 0xcd, 0x76, 0x52, + 0x60, 0x8e, 0xde, 0x44, 0x79, 0x15, 0x59, 0xf6, 0xba, 0x77, 0x39, 0xdb, + 0x89, 0xd6, 0x4a, 0xea, 0x7e, 0xbd, 0xe4, 0xe2, 0x66, 0xe4, 0xd0, 0xdc, + 0x47, 0x32, 0xc7, 0xd4, 0xc3, 0xbe, 0xc6, 0x6b, 0x3b, 0x8e, 0x8d, 0x91, + 0xe1, 0xfc, 0x57, 0x17, 0x75, 0x59, 0x2d, 0x20, 0x77, 0x3c, 0x01, 0xca, + 0x4a, 0x67, 0x6e, 0x59, 0xe0, 0x15, 0xb7, 0xf5, 0x37, 0xac, 0xe3, 0x74, + 0xee, 0xae, 0x2c, 0xcc, 0x21, 0xb5, 0x5c, 0xc3, 0x57, 0xaa, 0x78, 0xac, + 0xb8, 0x82, 0x1c, 0x7c, 0xb4, 0x82, 0xb2, 0xf1, 0x3e, 0xae, 0xf5, 0x6c, + 0x92, 0x1c, 0x29, 0x35, 0xb0, 0xfe, 0x7d, 0xbe, 0xd1, 0xf7, 0x73, 0xf8, + 0x2d, 0xbc, 0x6f, 0xa9, 0xe1, 0x90, 0xec, 0x9b, 0xe6, 0x39, 0x15, 0x8d, + 0xa3, 0xfc, 0xe7, 0x24, 0xa7, 0xd3, 0x9a, 0xe6, 0xbd, 0xa1, 0xed, 0x70, + 0x73, 0x5d, 0xab, 0x5c, 0x0c, 0x82, 0x3c, 0xa1, 0x65, 0xbd, 0xb1, 0x9d, + 0x95, 0xe7, 0xb0, 0xfd, 0xe1, 0xcb, 0x9e, 0xc1, 0x77, 0xec, 0xca, 0xbe, + 0xcd, 0x87, 0x91, 0x63, 0x2b, 0x24, 0x48, 0xdc, 0x5e, 0xd6, 0x9f, 0x8b, + 0xb4, 0x1f, 0x25, 0xa3, 0x65, 0xf9, 0xb8, 0x4f, 0x75, 0xd9, 0x0f, 0xaa, + 0xc0, 0xf0, 0xd0, 0x4b, 0x9e, 0x18, 0xe7, 0x40, 0xd3, 0x6c, 0x80, 0x09, + 0xd5, 0x25, 0x3c, 0xf7, 0xd7, 0x70, 0x4f, 0x51, 0xc3, 0x33, 0x1f, 0xa3, + 0x3a, 0x8f, 0xeb, 0x15, 0xaf, 0xd2, 0x71, 0xe9, 0x1d, 0x33, 0x1d, 0xe4, + 0x3d, 0xc7, 0x6c, 0xc9, 0x7b, 0xbc, 0x4f, 0x9a, 0xc4, 0xfa, 0xd3, 0x78, + 0xea, 0x17, 0x62, 0x5f, 0x8e, 0xd3, 0xb5, 0x8d, 0x73, 0x5f, 0x22, 0x76, + 0x92, 0x67, 0x58, 0x5d, 0x27, 0x4b, 0xc2, 0x7f, 0xec, 0xdc, 0x76, 0x3a, + 0xc1, 0x06, 0xb1, 0xc3, 0x4f, 0x7d, 0x7c, 0x52, 0x52, 0x07, 0xec, 0xaa, + 0xe0, 0xf2, 0xd1, 0xb4, 0x93, 0xa3, 0xb5, 0xd3, 0xc7, 0x55, 0x53, 0x37, + 0xae, 0xf4, 0x8c, 0x2b, 0x0b, 0x1e, 0x5a, 0xeb, 0x44, 0x1d, 0xac, 0x60, + 0x3f, 0x7f, 0x9a, 0xad, 0xf5, 0xb7, 0x2d, 0xd8, 0x34, 0xb2, 0x8a, 0xdc, + 0x4d, 0xf6, 0x83, 0xb5, 0xdc, 0x6d, 0x68, 0xfa, 0x45, 0x71, 0x6c, 0xad, + 0xf6, 0x99, 0x12, 0x7c, 0xfc, 0x52, 0x53, 0xd3, 0x67, 0x7d, 0x73, 0x2e, + 0x61, 0x6e, 0x0d, 0x45, 0x8f, 0x31, 0xb5, 0xf6, 0x01, 0xa7, 0x8e, 0x80, + 0xaa, 0x1d, 0x37, 0xeb, 0x1f, 0xd8, 0xed, 0x6b, 0xee, 0xae, 0x40, 0x66, + 0xc2, 0xe6, 0x68, 0x4e, 0xb3, 0x27, 0xc4, 0xac, 0xf1, 0x84, 0xe0, 0x75, + 0x41, 0xbb, 0x1c, 0xb7, 0x51, 0xf7, 0x24, 0xa7, 0xd3, 0xba, 0x2e, 0x7d, + 0x1d, 0x5e, 0xb7, 0x64, 0x50, 0x4f, 0xa3, 0x5e, 0x8e, 0xdc, 0x23, 0xdd, + 0xe0, 0xb4, 0xdd, 0x0d, 0xfd, 0x23, 0x8c, 0x31, 0xba, 0xae, 0x67, 0xfc, + 0x5f, 0x5c, 0x2c, 0xe9, 0x37, 0x62, 0x30, 0x45, 0x95, 0xde, 0x4b, 0xfc, + 0x61, 0xed, 0x1b, 0x4f, 0xe0, 0x56, 0xe7, 0x5c, 0xbc, 0x51, 0x88, 0xe6, + 0x0f, 0x04, 0x94, 0xf3, 0xfd, 0x4b, 0xa8, 0x1b, 0xae, 0xb6, 0xd2, 0x7d, + 0xa3, 0x40, 0xb9, 0xdb, 0x6d, 0x27, 0x73, 0xce, 0x92, 0xad, 0x65, 0x5b, + 0xbb, 0xd8, 0x3e, 0x25, 0x65, 0x66, 0xda, 0x5a, 0xd2, 0xd1, 0xca, 0x4a, + 0x49, 0xd3, 0xb2, 0x0b, 0xf2, 0xdd, 0x53, 0x39, 0x78, 0xf7, 0x3b, 0xf7, + 0x40, 0x2b, 0xaa, 0xc1, 0xba, 0x8a, 0x1f, 0x5b, 0x5e, 0xf0, 0x18, 0x08, + 0x2e, 0x2e, 0xe2, 0x27, 0x59, 0x5c, 0xe7, 0xd5, 0xbe, 0x99, 0x97, 0x9b, + 0x71, 0xa7, 0x18, 0x16, 0xb9, 0xc2, 0x6e, 0xb8, 0xfd, 0x16, 0x35, 0x77, + 0x58, 0x3f, 0x56, 0xb0, 0x70, 0xc8, 0xb1, 0xe5, 0xd9, 0x37, 0x0f, 0xcf, + 0xb0, 0xc8, 0x07, 0xc9, 0xbc, 0x24, 0xa7, 0x5b, 0xed, 0x78, 0xee, 0x64, + 0xd6, 0xed, 0xc0, 0xf0, 0x47, 0x87, 0xc5, 0x02, 0xdc, 0xbb, 0x1c, 0xdd, + 0x8d, 0xf6, 0x83, 0x3a, 0xf7, 0x52, 0x73, 0x5a, 0xc1, 0x10, 0xaa, 0xb8, + 0xfb, 0xb5, 0x49, 0x4c, 0x1c, 0xd7, 0xd8, 0xe9, 0x24, 0x92, 0x7b, 0x95, + 0x57, 0x3a, 0xff, 0x00, 0xb3, 0x54, 0x47, 0x96, 0xaa, 0xe3, 0xad, 0xae, + 0xb0, 0x49, 0x23, 0x45, 0xce, 0x75, 0x9c, 0x93, 0x65, 0x4f, 0x2d, 0x3e, + 0x29, 0x29, 0xc2, 0xca, 0xb8, 0xdf, 0x73, 0xac, 0x3d, 0xce, 0x8b, 0x43, + 0xa5, 0xd3, 0xb5, 0x86, 0xd3, 0xc9, 0xd1, 0xab, 0x2e, 0xa6, 0x39, 0xef, + 0x0d, 0x1d, 0xd6, 0xee, 0x34, 0x56, 0xc0, 0xde, 0xcd, 0xd0, 0x24, 0xa7, + 0x57, 0xa7, 0xb4, 0x38, 0x96, 0xb9, 0xc5, 0x8e, 0x8d, 0x0b, 0x62, 0x74, + 0xe7, 0xe9, 0x02, 0xaf, 0x8c, 0x66, 0xf2, 0x6c, 0xb0, 0xfc, 0xc0, 0xfc, + 0x8d, 0x0a, 0x97, 0x4f, 0x68, 0x61, 0x36, 0x90, 0xe7, 0x01, 0x2d, 0x01, + 0xad, 0x2e, 0xd4, 0xf3, 0x30, 0xaf, 0x8b, 0x41, 0x32, 0x2b, 0xb0, 0xcf, + 0x6d, 0xb0, 0x3f, 0x12, 0x12, 0x53, 0x1f, 0xb2, 0xd6, 0x75, 0x3b, 0xcf, + 0xc5, 0xee, 0xfe, 0xf4, 0xe3, 0x07, 0x1f, 0xf7, 0x60, 0xf8, 0x92, 0x4f, + 0xe5, 0x2a, 0x6d, 0xb1, 0xee, 0x9f, 0xd0, 0xbf, 0x4f, 0x1d, 0xa3, 0xfe, + 0xfc, 0x91, 0xb5, 0xe4, 0xec, 0x35, 0x10, 0x39, 0xd5, 0xcd, 0x1f, 0x92, + 0x52, 0x53, 0x03, 0x87, 0x43, 0x1d, 0xf4, 0x1a, 0x7e, 0x21, 0x3d, 0x2e, + 0x9d, 0x7c, 0x1d, 0xac, 0x71, 0x33, 0x09, 0xf7, 0xd8, 0xe2, 0x41, 0x6b, + 0x40, 0xfe, 0xb1, 0xff, 0x00, 0xc8, 0xa6, 0x63, 0x5c, 0xdd, 0xd2, 0x34, + 0xfa, 0x43, 0xef, 0x49, 0x49, 0xd8, 0x22, 0xf0, 0x4f, 0x71, 0x0a, 0xef, + 0x9f, 0x75, 0x4e, 0x62, 0xc6, 0x7d, 0xc8, 0xfb, 0xdd, 0x3b, 0x52, 0x52, + 0x6b, 0x3a, 0xa7, 0x4d, 0xaf, 0xe9, 0xe4, 0x30, 0x47, 0x9c, 0xfe, 0x45, + 0x5c, 0x75, 0xfe, 0x9e, 0xe0, 0xe2, 0xd0, 0xf2, 0x26, 0x1a, 0x76, 0x9f, + 0x70, 0xf1, 0x0b, 0x8a, 0x3d, 0x63, 0xa7, 0x08, 0x63, 0x4f, 0xa8, 0xd7, + 0x6b, 0xb8, 0x33, 0x8f, 0xeb, 0x38, 0xc4, 0x2c, 0xfc, 0xfe, 0xbf, 0x6d, + 0xf5, 0xec, 0xc0, 0xaf, 0xd2, 0x64, 0xc1, 0xb1, 0xdf, 0x4c, 0x9f, 0x2f, + 0x04, 0x94, 0xf6, 0x59, 0x9f, 0x5d, 0xfa, 0x76, 0x13, 0x9e, 0x2e, 0xad, + 0xc4, 0xb4, 0xc3, 0x58, 0xdf, 0xa6, 0x7e, 0x3d, 0x82, 0xbb, 0x47, 0xd6, + 0x9e, 0x8b, 0x91, 0x82, 0xcc, 0xa6, 0xde, 0x1a, 0x1f, 0xcd, 0x5a, 0x9b, + 0x1a, 0xee, 0xed, 0x2d, 0x0b, 0xc8, 0xec, 0xa3, 0x29, 0xcf, 0x79, 0x7e, + 0xae, 0x1a, 0x9d, 0x57, 0x45, 0xd0, 0xb1, 0x0d, 0x46, 0xa6, 0x3c, 0x6e, + 0x79, 0xfd, 0x23, 0xc0, 0xe2, 0x63, 0xda, 0x3f, 0x22, 0x4a, 0x7b, 0xdf, + 0xdb, 0x6d, 0xb5, 0xc1, 0xb8, 0xd5, 0x9d, 0xb1, 0x2e, 0x7d, 0x9a, 0x44, + 0xf0, 0x03, 0x42, 0xc9, 0xeb, 0x9b, 0x33, 0xb1, 0xde, 0xec, 0xc7, 0x3b, + 0x65, 0x3f, 0xa4, 0x6b, 0x5b, 0xa0, 0x91, 0xfc, 0x9e, 0x0a, 0x9d, 0x43, + 0xd3, 0x6c, 0x1d, 0x7b, 0x9f, 0x32, 0xb3, 0x33, 0x3a, 0x86, 0x48, 0xcd, + 0x35, 0x3d, 0x95, 0xd7, 0x88, 0x00, 0xf5, 0x2d, 0xbb, 0xe8, 0x10, 0x79, + 0x82, 0x92, 0x9a, 0xfd, 0x37, 0xa7, 0x62, 0x66, 0xd5, 0xea, 0x9d, 0xee, + 0x33, 0x0e, 0x04, 0xc6, 0xa3, 0xcc, 0x05, 0xaf, 0x4e, 0x06, 0x0e, 0x2e, + 0xb5, 0x54, 0xc6, 0x38, 0x72, 0xf8, 0x97, 0x7f, 0x9c, 0x65, 0x04, 0x75, + 0x0c, 0x26, 0x56, 0xdf, 0xb3, 0xd8, 0xc7, 0x32, 0x3d, 0x8d, 0x64, 0x1f, + 0xc9, 0xc2, 0x06, 0x46, 0x49, 0xdb, 0xba, 0xd3, 0xa7, 0x2d, 0xa9, 0x87, + 0x53, 0xf1, 0xfe, 0xf4, 0x94, 0xd9, 0xbf, 0x35, 0x8c, 0x6c, 0xb4, 0x80, + 0xde, 0x37, 0x99, 0x93, 0xfd, 0x50, 0xb1, 0xf2, 0xba, 0x89, 0x0f, 0x00, + 0x92, 0x5c, 0x75, 0x03, 0x52, 0x7e, 0x70, 0xa3, 0x91, 0x7d, 0xb6, 0xb8, + 0x31, 0xb0, 0x6d, 0x70, 0xd0, 0x7e, 0x6b, 0x5b, 0xe3, 0xf0, 0x42, 0xaf, + 0x19, 0xf3, 0xb9, 0xda, 0xb9, 0xdc, 0x38, 0xfe, 0x2e, 0x49, 0x4a, 0x7e, + 0x65, 0xb7, 0x1d, 0xac, 0x10, 0xe1, 0xc9, 0x02, 0x1a, 0xdf, 0x3f, 0x8a, + 0x8d, 0x98, 0xa6, 0xff, 0x00, 0x75, 0xce, 0x36, 0xd8, 0x7f, 0x78, 0xc9, + 0xf9, 0xca, 0xb0, 0xc6, 0x35, 0xa2, 0x1a, 0x3d, 0xa0, 0xe8, 0x7f, 0x79, + 0xc9, 0xdb, 0xa9, 0x2d, 0xf9, 0x13, 0xf1, 0x49, 0x4d, 0x67, 0xe2, 0x3c, + 0xd4, 0x06, 0xf7, 0x12, 0xc3, 0xc3, 0x4c, 0x02, 0x3c, 0x17, 0x67, 0xd2, + 0xf2, 0xab, 0x77, 0x4f, 0xc7, 0x80, 0xe7, 0x6c, 0xac, 0x07, 0x69, 0xc1, + 0x68, 0x83, 0xc9, 0x5c, 0xb6, 0xe2, 0xdd, 0x46, 0xb0, 0x03, 0x5c, 0x3e, + 0x08, 0xb8, 0xb6, 0xbb, 0x12, 0xd6, 0xdb, 0x51, 0xfa, 0x1e, 0xe0, 0x3b, + 0x39, 0xa4, 0xfd, 0x12, 0x92, 0x9c, 0x6f, 0xae, 0x39, 0x2f, 0xbf, 0xad, + 0xdb, 0xaf, 0xb1, 0x8d, 0x6b, 0x18, 0x0f, 0x60, 0x44, 0xcf, 0xe2, 0xab, + 0xe1, 0xd4, 0xc8, 0x68, 0x1c, 0x00, 0xa7, 0xf5, 0x8c, 0x0b, 0xfa, 0xd1, + 0x7b, 0x34, 0x16, 0x06, 0x17, 0x34, 0x76, 0xd0, 0x23, 0x62, 0x54, 0xe0, + 0x7d, 0x8c, 0xdc, 0x07, 0x79, 0x01, 0x25, 0x36, 0x86, 0x23, 0x5c, 0xdd, + 0x10, 0x2e, 0xc0, 0x0e, 0x69, 0x95, 0xa1, 0x45, 0xdf, 0x98, 0xf6, 0x96, + 0x3a, 0x34, 0x07, 0xfd, 0x88, 0x79, 0x37, 0x10, 0x36, 0x31, 0x85, 0xee, + 0x3c, 0xc6, 0x9f, 0x89, 0x49, 0x4c, 0x3e, 0xa3, 0xe5, 0xb7, 0xa7, 0xf5, + 0xe7, 0x63, 0xd8, 0x61, 0x99, 0x75, 0x96, 0x01, 0xc0, 0x2f, 0x6f, 0xbd, + 0x9f, 0x90, 0xad, 0x8e, 0xbd, 0x95, 0x65, 0xde, 0xa9, 0xf0, 0x25, 0x71, + 0x99, 0xd5, 0xdd, 0x5d, 0x9e, 0xa4, 0x1a, 0xde, 0xd3, 0xb9, 0xae, 0x07, + 0x50, 0x47, 0x06, 0x42, 0xd9, 0xe8, 0xee, 0xea, 0x9d, 0x7a, 0x8b, 0x65, + 0xe0, 0x59, 0x56, 0xd0, 0xe7, 0x96, 0x98, 0x78, 0x3e, 0x24, 0x70, 0x74, + 0x49, 0x4d, 0x27, 0x12, 0xca, 0xdc, 0xf7, 0x9d, 0x3c, 0x4a, 0xcb, 0x73, + 0x8d, 0xd6, 0x6e, 0xfc, 0xd1, 0xf4, 0x7f, 0xbd, 0x1b, 0x37, 0x31, 0xd9, + 0x8e, 0x65, 0x4d, 0x1b, 0x2b, 0x61, 0x82, 0x27, 0xe9, 0x10, 0x79, 0x52, + 0xd9, 0x45, 0x5b, 0x5a, 0x09, 0x2e, 0x77, 0x03, 0x92, 0x92, 0x9e, 0xdb, + 0xea, 0x3b, 0xf1, 0xe9, 0xe9, 0x97, 0x93, 0xfc, 0xeb, 0xad, 0xf7, 0xfc, + 0x03, 0x46, 0xdf, 0xe2, 0xb7, 0x2d, 0xea, 0x0d, 0xe1, 0xbc, 0x2e, 0x0f, + 0xa3, 0x67, 0x5b, 0x82, 0xf7, 0xc5, 0x56, 0x59, 0x5d, 0xa2, 0x1c, 0x1a, + 0xd3, 0xa1, 0x1c, 0x15, 0xd0, 0x17, 0x75, 0x0b, 0x2b, 0x0f, 0x18, 0x96, + 0x00, 0xe1, 0x22, 0x76, 0x83, 0x07, 0xc8, 0xb9, 0x25, 0x37, 0xad, 0xea, + 0x5b, 0xa5, 0xad, 0xe7, 0xc5, 0x67, 0x65, 0xf5, 0x41, 0x4c, 0x97, 0x3a, + 0x4f, 0x80, 0x54, 0x6f, 0x3d, 0x54, 0x92, 0xd6, 0xe1, 0x5c, 0x47, 0x90, + 0x68, 0x1f, 0xf5, 0x45, 0x66, 0xdd, 0x57, 0x50, 0xdd, 0xfa, 0x4a, 0x0d, + 0x23, 0xb9, 0x7c, 0x93, 0xf9, 0x12, 0x52, 0x5c, 0xae, 0xaf, 0x91, 0x64, + 0x86, 0x12, 0x25, 0x54, 0xf5, 0xf2, 0x6c, 0x61, 0xad, 0xdc, 0x1e, 0x5c, + 0x51, 0x19, 0x8e, 0x79, 0x79, 0x94, 0x66, 0x0d, 0xb1, 0xa2, 0x4a, 0x63, + 0x45, 0x6d, 0x60, 0x10, 0x41, 0x77, 0xe7, 0x2b, 0x60, 0x38, 0x76, 0x22, + 0x35, 0x94, 0x31, 0x3e, 0x1a, 0xa2, 0x56, 0x0c, 0x77, 0xf9, 0x24, 0xa7, + 0x7b, 0xa7, 0xff, 0x00, 0x43, 0x27, 0xbe, 0xe7, 0x72, 0xad, 0xb5, 0xd2, + 0x07, 0x63, 0xe3, 0xda, 0x53, 0x60, 0x52, 0x2c, 0xc2, 0xa5, 0xf6, 0x13, + 0xb9, 0xed, 0x0e, 0x3b, 0x7d, 0xa3, 0x5f, 0x82, 0x31, 0xc7, 0xaa, 0x3b, + 0xe9, 0xc7, 0xb8, 0xff, 0x00, 0x7a, 0x4a, 0x47, 0xb9, 0xdf, 0x15, 0x2d, + 0x44, 0x0f, 0x14, 0xbe, 0xcb, 0x54, 0xce, 0xa6, 0x79, 0x97, 0x38, 0xff, + 0x00, 0x15, 0x5b, 0xa8, 0x30, 0xe3, 0xe2, 0xdf, 0x7b, 0x18, 0xc2, 0xd6, + 0x34, 0x16, 0x00, 0x0e, 0xe0, 0x7f, 0x38, 0x92, 0x4a, 0x4a, 0x6b, 0x75, + 0x1e, 0xb3, 0x56, 0x09, 0x73, 0x36, 0x17, 0xb9, 0xa2, 0x5d, 0xae, 0x82, + 0x7b, 0x2c, 0x1b, 0xbe, 0xb5, 0x67, 0x49, 0x73, 0x08, 0x6d, 0x3a, 0xb4, + 0x07, 0x01, 0xaa, 0xa7, 0x40, 0xcd, 0xeb, 0x59, 0x46, 0x9c, 0x66, 0x93, + 0x04, 0x97, 0x13, 0xc7, 0xcd, 0x1b, 0x2b, 0xa4, 0x57, 0x8d, 0x63, 0x59, + 0x7e, 0xe7, 0xbd, 0xbf, 0x20, 0x27, 0xc9, 0x25, 0x3a, 0x95, 0x7d, 0x76, + 0xc4, 0x73, 0x6b, 0x19, 0x35, 0x39, 0x96, 0xe9, 0xb9, 0xcc, 0x20, 0xb7, + 0xe2, 0xba, 0x1f, 0xda, 0xdd, 0x3b, 0xf6, 0x6f, 0xdb, 0x7e, 0xd0, 0xdf, + 0xb3, 0xff, 0x00, 0xa5, 0x9f, 0xce, 0xf0, 0xf1, 0x9f, 0x25, 0xe6, 0x7d, + 0x43, 0x1d, 0xcc, 0x2e, 0x1e, 0x99, 0x05, 0xa7, 0x43, 0xe0, 0x3c, 0xc2, + 0xad, 0x16, 0xfa, 0x5e, 0x9c, 0xbb, 0x67, 0xd2, 0xdb, 0x26, 0x26, 0x22, + 0x52, 0x53, 0xb1, 0x87, 0xd4, 0xf3, 0x33, 0xa8, 0xc8, 0xc6, 0xb9, 0xc0, + 0xd6, 0xd1, 0x5b, 0x40, 0x00, 0x09, 0x05, 0xe0, 0x6a, 0x97, 0x50, 0xa8, + 0x57, 0x94, 0xf6, 0x81, 0x03, 0x73, 0x60, 0x7c, 0x90, 0xfa, 0x35, 0x5e, + 0xdc, 0xa7, 0x70, 0x03, 0xa9, 0x13, 0xf1, 0x7a, 0xb1, 0xd5, 0xbf, 0xa5, + 0xc4, 0xce, 0xad, 0x49, 0x4b, 0x65, 0x32, 0xa0, 0x2a, 0x24, 0x48, 0xd9, + 0x2f, 0x8e, 0x4e, 0xaa, 0xf3, 0x31, 0x6d, 0xb9, 0xad, 0x77, 0xa8, 0xea, + 0x6b, 0x74, 0x38, 0x36, 0xb3, 0xb5, 0xc6, 0x47, 0xe7, 0x38, 0x7e, 0x45, + 0x50, 0xd7, 0xeb, 0x64, 0x63, 0xd3, 0x3f, 0x48, 0x37, 0x70, 0xf2, 0x26, + 0x7f, 0x22, 0xd9, 0x70, 0x82, 0x00, 0x10, 0x06, 0x89, 0x29, 0xab, 0xf6, + 0x1a, 0xcc, 0x97, 0x3e, 0xd3, 0xe6, 0x6c, 0x77, 0xf7, 0xa4, 0x70, 0x31, + 0xb6, 0x8d, 0xe0, 0xd9, 0xb4, 0xcb, 0x43, 0xdc, 0x5c, 0x01, 0x3c, 0xc4, + 0x95, 0x60, 0x19, 0x9e, 0xe4, 0xf2, 0x98, 0x91, 0xa0, 0x49, 0x48, 0xc6, + 0x2d, 0x03, 0x50, 0xc0, 0x08, 0xe0, 0x8d, 0x35, 0x42, 0x7e, 0x33, 0x46, + 0xe2, 0xc7, 0x16, 0x92, 0x7b, 0xeb, 0xf9, 0x51, 0xdd, 0x64, 0x02, 0xa0, + 0x74, 0xf9, 0x0f, 0xc5, 0x25, 0x22, 0x65, 0x5b, 0x0b, 0x8c, 0xcb, 0x9e, + 0x43, 0x67, 0xc8, 0x6a, 0x52, 0xf5, 0x7d, 0x33, 0x0e, 0xfa, 0x2e, 0xe0, + 0xfe, 0xe8, 0x1c, 0xa3, 0x0d, 0x00, 0x91, 0xf4, 0x04, 0x9f, 0x89, 0x55, + 0xb3, 0x69, 0x73, 0xab, 0x96, 0xea, 0x34, 0xde, 0xdf, 0x89, 0x49, 0x49, + 0x4c, 0x38, 0x7b, 0x48, 0xf4, 0xf8, 0x6f, 0x9e, 0x8a, 0x0c, 0x3a, 0x9f, + 0x88, 0x54, 0xf0, 0x72, 0xdc, 0xed, 0xf8, 0xcf, 0x31, 0x63, 0x0c, 0x80, + 0x7c, 0x01, 0x84, 0x76, 0x58, 0x43, 0xe0, 0x69, 0x32, 0x3e, 0xe4, 0x94, + 0xd9, 0xac, 0x48, 0x79, 0x3c, 0x7f, 0x73, 0x8a, 0x89, 0x26, 0x0b, 0x7b, + 0xb4, 0x90, 0x3e, 0x1c, 0xa8, 0xe3, 0x3b, 0x71, 0x78, 0xef, 0x2f, 0x1f, + 0x8a, 0x9c, 0x6e, 0x71, 0x8e, 0xee, 0x1a, 0x79, 0x10, 0x92, 0x9c, 0x7c, + 0xe6, 0x91, 0xd4, 0xab, 0xb2, 0x24, 0x5a, 0xc9, 0x93, 0xd8, 0xb4, 0x16, + 0xa3, 0x63, 0xe1, 0xb3, 0x21, 0xb2, 0xe7, 0xb8, 0x6a, 0x22, 0x0f, 0x82, + 0x97, 0x54, 0xa6, 0xd6, 0x1a, 0xb2, 0x43, 0x37, 0x55, 0x49, 0x15, 0xda, + 0xef, 0xdc, 0xf5, 0x0f, 0xb4, 0xfd, 0xe1, 0x3f, 0x4c, 0xb4, 0x34, 0xed, + 0x77, 0x64, 0x94, 0xde, 0xae, 0xb0, 0xc7, 0xfb, 0x5a, 0x26, 0x3d, 0xac, + 0x1e, 0x00, 0x44, 0xaa, 0xf9, 0x2c, 0x17, 0xcb, 0x6d, 0x91, 0x07, 0x58, + 0xe4, 0x2b, 0x22, 0xe0, 0xdb, 0x03, 0x98, 0xef, 0x74, 0xc9, 0x00, 0x03, + 0x23, 0xc0, 0xca, 0x1e, 0x45, 0xe5, 0xd6, 0x17, 0x58, 0x35, 0x26, 0x64, + 0x81, 0x31, 0xe1, 0xa0, 0x09, 0x29, 0xcb, 0xca, 0xa8, 0x03, 0x0d, 0xfe, + 0x6c, 0xf6, 0xf0, 0x85, 0xd7, 0xfd, 0x4c, 0xa1, 0x87, 0xa0, 0x34, 0x81, + 0x02, 0xf7, 0x59, 0xbe, 0x39, 0x12, 0x76, 0x9f, 0xba, 0x17, 0x3b, 0xf6, + 0x5f, 0xb6, 0x66, 0xd3, 0x89, 0x51, 0x87, 0x5e, 0xed, 0x80, 0xf3, 0x13, + 0xc9, 0xf9, 0x05, 0xdd, 0xe3, 0xe0, 0xe1, 0xe1, 0x51, 0x5e, 0x2d, 0x0c, + 0x6b, 0x2a, 0xac, 0x6d, 0x60, 0xf1, 0x3c, 0x9e, 0x79, 0x27, 0x94, 0x94, + 0xf9, 0x56, 0x4e, 0x05, 0xdd, 0x37, 0x32, 0xdc, 0x4c, 0x86, 0x96, 0xbe, + 0xa7, 0x44, 0x1e, 0xed, 0x3f, 0x45, 0xc3, 0xc8, 0x85, 0xd1, 0x7d, 0x52, + 0xe9, 0x95, 0x75, 0x0c, 0xa7, 0x3b, 0x22, 0xb1, 0xb1, 0xe0, 0xb6, 0xb7, + 0x91, 0xa8, 0x2d, 0x05, 0xd2, 0xcf, 0xe2, 0xa7, 0xf5, 0xcb, 0xa7, 0xdb, + 0x7f, 0x5a, 0xc4, 0x6b, 0x18, 0x19, 0x5d, 0x94, 0xc7, 0xa8, 0x07, 0x3b, + 0x5c, 0x77, 0x4f, 0xc2, 0x42, 0xea, 0x3e, 0xac, 0x61, 0xe3, 0xd5, 0x8e, + 0xdb, 0x5b, 0xa1, 0xaa, 0x58, 0xd6, 0x8f, 0x00, 0x21, 0x25, 0x33, 0xc7, + 0xfa, 0xb9, 0xe9, 0x38, 0x07, 0xb9, 0xa5, 0xa3, 0x92, 0x24, 0x9f, 0xb8, + 0xe8, 0xb6, 0x99, 0x45, 0x35, 0xb0, 0x56, 0xd6, 0x0d, 0xad, 0x10, 0x04, + 0x05, 0x30, 0x41, 0x00, 0x8e, 0x0a, 0x62, 0x61, 0xc3, 0xc2, 0x12, 0x52, + 0xc2, 0xaa, 0xc6, 0xbb, 0x1a, 0x0f, 0xc0, 0x2c, 0xbc, 0xd6, 0x51, 0x66, + 0x49, 0xae, 0xc6, 0x07, 0x6d, 0x6b, 0x9c, 0xe1, 0x1c, 0xc3, 0x4c, 0x2d, + 0x50, 0x75, 0x3e, 0x4b, 0x2f, 0x2d, 0xbf, 0xae, 0xbd, 0xe7, 0x40, 0x2a, + 0x71, 0x3e, 0x7a, 0x42, 0x4a, 0x72, 0xd9, 0xd1, 0xf1, 0x32, 0x2b, 0x61, + 0x03, 0x63, 0xde, 0xe2, 0x3c, 0xbe, 0x2a, 0x95, 0xdd, 0x1d, 0xac, 0xbe, + 0xea, 0x59, 0x2f, 0x35, 0x1e, 0x47, 0x84, 0x05, 0xbf, 0xd2, 0xeb, 0x69, + 0xda, 0xe3, 0xae, 0xd2, 0xed, 0x3e, 0x03, 0xfd, 0xaa, 0x96, 0x55, 0x39, + 0x0d, 0xb2, 0xcc, 0x97, 0xb0, 0xb5, 0x96, 0xb8, 0x8d, 0xd3, 0xe3, 0xdb, + 0x44, 0x94, 0xe2, 0x3f, 0x05, 0xa0, 0x8d, 0xa4, 0x9f, 0x88, 0x51, 0x76, + 0x35, 0x95, 0x82, 0xe1, 0xee, 0x68, 0x1a, 0xc7, 0x30, 0xb4, 0x9c, 0xc0, + 0xe0, 0x4f, 0x70, 0x9b, 0x4d, 0xa3, 0xc9, 0x25, 0x37, 0x7a, 0x63, 0xec, + 0x18, 0x14, 0x8f, 0x4d, 0xce, 0x21, 0xa5, 0xb3, 0xa0, 0xd0, 0x13, 0x1c, + 0x95, 0x64, 0xbe, 0xcf, 0xf4, 0x67, 0xef, 0x6f, 0xf7, 0xa8, 0x60, 0xbe, + 0x71, 0xc3, 0x4f, 0xe6, 0x92, 0xd1, 0x1e, 0x1d, 0x91, 0x8f, 0x10, 0x92, + 0x98, 0x6e, 0x71, 0x00, 0x6c, 0x20, 0xf7, 0xd4, 0x20, 0xe6, 0xb4, 0xdb, + 0x89, 0x6b, 0x1c, 0xd3, 0xf4, 0x49, 0x80, 0xee, 0x63, 0xc5, 0x59, 0xf3, + 0x48, 0xf0, 0x41, 0xe0, 0xa4, 0xa7, 0x1b, 0x05, 0xd8, 0x1d, 0x2b, 0x26, + 0xea, 0x31, 0x60, 0xdb, 0xe9, 0xd7, 0x65, 0xcf, 0x77, 0x0d, 0x75, 0x87, + 0x6c, 0x08, 0xf3, 0xfc, 0xab, 0x2b, 0xad, 0x67, 0x43, 0x9e, 0xfa, 0x00, + 0xb6, 0xf0, 0x64, 0xc6, 0xbb, 0x48, 0xee, 0x47, 0x92, 0x6e, 0xbf, 0x55, + 0x95, 0x9c, 0x90, 0xf0, 0x6b, 0x76, 0x55, 0x94, 0x80, 0xe1, 0xc3, 0x59, + 0x5b, 0x4c, 0x38, 0xbb, 0xc3, 0x7c, 0x15, 0x1f, 0xab, 0xb8, 0x65, 0xb6, + 0xfe, 0xd9, 0xbd, 0xec, 0x6d, 0x6c, 0x0f, 0xaa, 0x01, 0x2e, 0xf5, 0x2c, + 0x07, 0x6b, 0x9d, 0xaf, 0x62, 0x92, 0x9a, 0x58, 0xbd, 0x17, 0xa8, 0x66, + 0xd4, 0xec, 0xeb, 0x03, 0xab, 0xa4, 0x33, 0x73, 0x8b, 0x8f, 0xb9, 0xee, + 0xf2, 0x54, 0xb6, 0x53, 0xbb, 0xd5, 0xef, 0x11, 0x1d, 0xa7, 0xc6, 0x3e, + 0x0b, 0x67, 0x37, 0xaa, 0x5f, 0x56, 0x4e, 0x47, 0xd8, 0xaa, 0xb0, 0xf4, + 0xc7, 0x92, 0xd7, 0xba, 0xc2, 0x58, 0xc6, 0x91, 0xd9, 0xbb, 0xbb, 0xa8, + 0xfd, 0x94, 0x7e, 0xdb, 0xe0, 0x7f, 0x40, 0xdd, 0xe9, 0x48, 0x9d, 0xfe, + 0x84, 0x6d, 0xdb, 0xe3, 0xe4, 0x92, 0x9a, 0x5d, 0x11, 0x80, 0xd7, 0x98, + 0x38, 0x05, 0xd4, 0xe9, 0xe7, 0xea, 0x23, 0xf5, 0x9a, 0x9a, 0x72, 0x01, + 0x88, 0x3b, 0x04, 0x79, 0xea, 0x75, 0x40, 0xe9, 0x1b, 0x9b, 0x5e, 0x43, + 0xb8, 0x05, 0xf4, 0x8f, 0xfa, 0x6a, 0xdf, 0x54, 0x61, 0x7e, 0x75, 0x75, + 0x83, 0x25, 0xc1, 0x8d, 0x1f, 0x32, 0x92, 0x90, 0xd7, 0x53, 0x9b, 0xd7, + 0xd8, 0xd2, 0x20, 0x32, 0xa6, 0x38, 0xfc, 0xab, 0xff, 0x00, 0x6a, 0xe8, + 0xe8, 0xe9, 0x39, 0xf9, 0x7b, 0x5c, 0xca, 0xcb, 0x58, 0xed, 0x43, 0xdf, + 0xa3, 0x63, 0xc5, 0x66, 0x7d, 0x8d, 0xcd, 0xea, 0xb9, 0x19, 0x67, 0xe8, + 0x10, 0xda, 0xea, 0xf9, 0x35, 0xa1, 0xcb, 0xd0, 0x2a, 0x68, 0xae, 0x96, + 0x30, 0x7e, 0x6b, 0x40, 0xfb, 0x82, 0x4a, 0x71, 0x2b, 0xfa, 0xaf, 0x4b, + 0x58, 0x7d, 0x5b, 0x9c, 0x5e, 0x7b, 0xb0, 0x00, 0x07, 0xde, 0x81, 0x67, + 0xd5, 0xba, 0x5a, 0x4b, 0x8e, 0x43, 0x88, 0x1c, 0xe8, 0x16, 0xfd, 0xaf, + 0x80, 0x55, 0x3b, 0x5e, 0x60, 0xcf, 0x00, 0xeb, 0x29, 0x29, 0xc1, 0xea, + 0x1d, 0x31, 0x95, 0xd6, 0x05, 0x2d, 0x97, 0xb6, 0x1d, 0xa7, 0x26, 0x67, + 0x4f, 0xc1, 0x66, 0x9a, 0x2e, 0xd8, 0x5d, 0xb0, 0xed, 0x04, 0x02, 0x7c, + 0xfc, 0x16, 0xbe, 0x51, 0xb1, 0xd9, 0xad, 0x61, 0x31, 0x58, 0x6f, 0xd2, + 0xf8, 0x13, 0x2b, 0x1c, 0xde, 0x5e, 0x76, 0xb3, 0xdb, 0x59, 0x71, 0x73, + 0x5b, 0xfe, 0xbe, 0x49, 0x29, 0x68, 0x7e, 0x8d, 0x23, 0xbc, 0x91, 0xf0, + 0x51, 0x25, 0xc4, 0xb4, 0x11, 0xa1, 0x3b, 0x9d, 0xf0, 0x1c, 0x22, 0x36, + 0x0e, 0xb3, 0xcf, 0x1f, 0x00, 0x81, 0x7d, 0xe1, 0x8d, 0x27, 0xb9, 0x1a, + 0x01, 0xe1, 0xd9, 0x25, 0x39, 0xdd, 0x41, 0x82, 0xab, 0x19, 0x98, 0x04, + 0x58, 0xd1, 0xb9, 0xf1, 0xdc, 0x38, 0xf0, 0x7e, 0x48, 0x82, 0xe6, 0x3d, + 0xf5, 0x3d, 0x9a, 0xb2, 0xcd, 0x41, 0xf3, 0x54, 0xba, 0x9d, 0xd9, 0x0e, + 0x9a, 0x76, 0x92, 0x63, 0x79, 0x77, 0x68, 0x40, 0xe9, 0x56, 0x18, 0x73, + 0x6d, 0x7c, 0x06, 0x19, 0x13, 0xcb, 0x4c, 0x11, 0xf9, 0x4a, 0x4a, 0x77, + 0x31, 0x64, 0x5e, 0x5b, 0xfc, 0xa3, 0xf8, 0x84, 0x5a, 0xde, 0x7d, 0x4d, + 0xa7, 0xbc, 0x7f, 0xaf, 0xe0, 0xab, 0xe3, 0x97, 0x3a, 0xd0, 0xf6, 0x34, + 0xba, 0x40, 0x97, 0x70, 0x37, 0x77, 0x47, 0x6b, 0x0b, 0x7d, 0xce, 0xb1, + 0xa1, 0xda, 0xf9, 0xea, 0x52, 0x52, 0x77, 0x60, 0x65, 0xf5, 0x36, 0xbf, + 0x03, 0x1a, 0xc6, 0x55, 0x5e, 0x40, 0x6f, 0xda, 0x5e, 0xf1, 0x24, 0x57, + 0x5b, 0xb7, 0x7b, 0x07, 0x8c, 0xc2, 0xcf, 0xea, 0xfd, 0x3b, 0xf6, 0x3f, + 0x52, 0xf4, 0x1a, 0xf2, 0xea, 0x5e, 0xd0, 0xfa, 0xde, 0x62, 0x48, 0x3a, + 0x1d, 0xd1, 0xde, 0x42, 0xb4, 0x3a, 0xd1, 0xe9, 0x2c, 0x7d, 0xcd, 0xab, + 0xd7, 0xb1, 0xe3, 0x6b, 0x5c, 0x7d, 0xa1, 0x91, 0xdc, 0xf7, 0x21, 0x73, + 0x3d, 0x47, 0xac, 0x66, 0x75, 0x0c, 0xbf, 0xb4, 0xe4, 0xbf, 0x7b, 0xe3, + 0x68, 0x03, 0x46, 0x86, 0xf8, 0x00, 0x92, 0x9d, 0x7a, 0xde, 0x5d, 0xb8, + 0x34, 0x17, 0x3c, 0x6a, 0xd0, 0x1d, 0xb4, 0x7c, 0xd0, 0x6b, 0xab, 0x21, + 0x96, 0x39, 0xf9, 0x16, 0x97, 0x49, 0x9f, 0x4c, 0x19, 0x68, 0xfb, 0xd5, + 0x6c, 0x5c, 0x9a, 0x5c, 0x35, 0x78, 0x1e, 0x47, 0x42, 0x9b, 0x37, 0xa8, + 0x56, 0xd6, 0xec, 0xa1, 0xdb, 0x9c, 0x74, 0x91, 0xc0, 0x49, 0x4f, 0x43, + 0xd3, 0x7a, 0x23, 0xfa, 0x86, 0x3b, 0x73, 0xd9, 0x99, 0x66, 0x25, 0x8d, + 0x7b, 0x85, 0x4e, 0xab, 0x90, 0x1b, 0xed, 0x3a, 0xe8, 0xae, 0x8f, 0xab, + 0x34, 0x31, 0xf5, 0xdf, 0x46, 0x6e, 0x43, 0x72, 0x6a, 0x78, 0xb1, 0xb7, + 0x3d, 0xde, 0xa7, 0xbc, 0x7e, 0x76, 0xd7, 0x68, 0xb9, 0x9e, 0x91, 0xd4, + 0x3a, 0xb6, 0x13, 0x21, 0x96, 0xb9, 0x94, 0x09, 0x2d, 0xa5, 0xda, 0xb6, + 0x4e, 0xa4, 0xc1, 0x5b, 0x14, 0xfd, 0x64, 0xca, 0x00, 0x8b, 0xd8, 0xdb, + 0x1a, 0x78, 0x23, 0xda, 0xe1, 0x1f, 0x81, 0x49, 0x4e, 0x9e, 0x6e, 0x5e, + 0x45, 0xe6, 0xaa, 0xb2, 0xf6, 0x9b, 0x28, 0xdc, 0xe7, 0x96, 0x08, 0x06, + 0x4e, 0xd6, 0x98, 0x93, 0x12, 0x04, 0xc2, 0xe8, 0x3a, 0x65, 0xf8, 0xc2, + 0x8a, 0xe8, 0xac, 0x7a, 0x61, 0x82, 0x4f, 0x8b, 0xc9, 0xe4, 0xfc, 0xd7, + 0x31, 0x5d, 0xac, 0xc8, 0xdd, 0x93, 0x6c, 0xcd, 0x90, 0x4b, 0x47, 0x03, + 0xc0, 0x2b, 0x74, 0x64, 0xd8, 0x1e, 0xd8, 0x1b, 0x76, 0x10, 0x63, 0xc1, + 0x25, 0x3d, 0x83, 0x09, 0x2d, 0x13, 0xca, 0x4f, 0x80, 0x27, 0xc1, 0x56, + 0xc2, 0xbc, 0x5b, 0x5e, 0x9c, 0xf2, 0xac, 0xb8, 0x4b, 0x48, 0x49, 0x4c, + 0x43, 0xa5, 0xbb, 0x87, 0x75, 0x99, 0x9e, 0x5c, 0x2e, 0xb1, 0xc3, 0xe8, + 0x9a, 0xf6, 0xcf, 0x99, 0x2b, 0x49, 0xb0, 0x2b, 0xfc, 0x8b, 0x3b, 0xab, + 0x37, 0x6b, 0x19, 0x1c, 0xb8, 0xeb, 0xf2, 0x49, 0x4c, 0xba, 0x40, 0x1b, + 0x5e, 0x7b, 0x83, 0xfc, 0x14, 0x7a, 0xc5, 0xb1, 0x8b, 0xe9, 0x00, 0x3f, + 0x48, 0x34, 0x9e, 0xc7, 0x90, 0xa1, 0xd2, 0xdf, 0xb7, 0x23, 0x6f, 0x01, + 0xe0, 0x8f, 0x98, 0x43, 0xeb, 0x66, 0x2f, 0x68, 0xe6, 0x58, 0x34, 0xf8, + 0x4a, 0x4a, 0x72, 0x2b, 0xc9, 0x22, 0x43, 0x81, 0x12, 0x36, 0x90, 0x46, + 0x9a, 0xa4, 0x0c, 0x46, 0xb3, 0x3a, 0x7d, 0xea, 0x6c, 0xb1, 0xac, 0x6c, + 0xbb, 0x56, 0x4c, 0x13, 0xe1, 0xf1, 0x52, 0x6b, 0x28, 0x25, 0xce, 0x68, + 0x07, 0xc0, 0x1e, 0x12, 0x53, 0x3a, 0x4c, 0x92, 0x09, 0x20, 0x79, 0x12, + 0x3f, 0x22, 0x30, 0x6b, 0x00, 0xef, 0xfe, 0x73, 0xbf, 0xbd, 0x56, 0xa8, + 0x90, 0xf2, 0x07, 0xb8, 0x89, 0x1c, 0xc7, 0x05, 0x18, 0xfa, 0x84, 0xff, + 0x00, 0x37, 0xff, 0x00, 0x4e, 0x3f, 0x82, 0x4a, 0x67, 0xb1, 0x8e, 0x1a, + 0x82, 0x62, 0x7b, 0x9f, 0xef, 0x49, 0xb5, 0x56, 0x4c, 0x16, 0xc8, 0xfb, + 0xd3, 0x03, 0x60, 0xd3, 0x60, 0x1e, 0x3e, 0xff, 0x00, 0xfc, 0xc5, 0x38, + 0x75, 0x83, 0xf3, 0x1b, 0xfe, 0x71, 0xff, 0x00, 0xc8, 0xa4, 0xa5, 0xee, + 0xe9, 0x8e, 0xcc, 0xa4, 0xd7, 0x5d, 0x4c, 0xda, 0x60, 0x17, 0xbc, 0xc3, + 0x40, 0xfb, 0x8e, 0xa1, 0x73, 0xf9, 0xdd, 0x3f, 0x2f, 0xa6, 0x17, 0x36, + 0x86, 0xfb, 0x58, 0x77, 0x5b, 0x4b, 0xa7, 0x61, 0x23, 0xf3, 0x87, 0xc5, + 0x77, 0xf5, 0x52, 0xda, 0x68, 0x6d, 0x4d, 0x00, 0x40, 0xd7, 0xb8, 0x24, + 0xf3, 0x3f, 0x15, 0x8d, 0xd7, 0x5e, 0x19, 0x87, 0x93, 0x63, 0x07, 0x0c, + 0x0d, 0x04, 0xf9, 0x03, 0x21, 0x25, 0x38, 0xcd, 0x75, 0x35, 0xe2, 0xb3, + 0xaa, 0xfd, 0x61, 0x68, 0x36, 0xbb, 0xdf, 0x8b, 0x84, 0x4c, 0x86, 0xc7, + 0x0f, 0x70, 0xf1, 0x77, 0xe4, 0x5c, 0xc7, 0xed, 0x47, 0x7e, 0xd6, 0xfd, + 0xa7, 0x1f, 0xa4, 0xf5, 0x37, 0xed, 0x9e, 0xd3, 0xf4, 0x67, 0xe0, 0xb5, + 0xfe, 0xb9, 0x35, 0xd7, 0x37, 0x17, 0x31, 0x8e, 0x9a, 0xec, 0xad, 0xa5, + 0x8d, 0xec, 0x25, 0xb2, 0xb2, 0x3f, 0x60, 0xdd, 0xfc, 0xef, 0xda, 0x19, + 0xf6, 0x5f, 0x4f, 0x7f, 0xab, 0xde, 0x62, 0x76, 0xed, 0x49, 0x4e, 0x8f, + 0x47, 0xc3, 0x7b, 0xdb, 0x7b, 0x00, 0xd4, 0x5b, 0x53, 0x4c, 0xf6, 0xf7, + 0x15, 0x6f, 0x39, 0x82, 0xae, 0xb7, 0x40, 0x7c, 0x34, 0x34, 0xd7, 0x24, + 0xf1, 0x3d, 0x96, 0x87, 0x43, 0x6e, 0x38, 0xc6, 0x7e, 0x45, 0x41, 0xcf, + 0xb8, 0xda, 0xd3, 0x91, 0x58, 0x83, 0xa3, 0x0f, 0xb5, 0xcd, 0x0a, 0xbf, + 0x5a, 0xe9, 0x99, 0xd9, 0xfd, 0x40, 0xde, 0xca, 0xf6, 0x54, 0x76, 0x00, + 0xe7, 0x10, 0x3b, 0x44, 0xc2, 0x4a, 0x5f, 0x31, 0xd1, 0x7d, 0x91, 0xd9, + 0xcb, 0xb4, 0xa5, 0xe2, 0xcc, 0x7a, 0xde, 0x0c, 0x87, 0x30, 0x19, 0xf9, + 0x2e, 0x0d, 0xe4, 0x8d, 0x1c, 0x77, 0x38, 0x68, 0x49, 0xee, 0x42, 0xd4, + 0xe9, 0x1f, 0x58, 0x3e, 0xce, 0xdf, 0xb2, 0xe5, 0x1f, 0xd1, 0xc1, 0xf4, + 0xdd, 0xfb, 0xbe, 0x45, 0x25, 0x3d, 0x15, 0xa4, 0x10, 0xb3, 0xf2, 0x6e, + 0x0c, 0x69, 0x25, 0xd1, 0xac, 0x23, 0x9b, 0xd9, 0x63, 0x03, 0xd8, 0xe0, + 0xe0, 0x78, 0x20, 0xac, 0xcc, 0xdb, 0x1a, 0x20, 0x9e, 0x09, 0xd4, 0x24, + 0xa7, 0x37, 0x3f, 0x39, 0xcf, 0x6d, 0x81, 0x90, 0x03, 0x86, 0xc0, 0x47, + 0x87, 0x1f, 0xc5, 0x67, 0x87, 0x47, 0x03, 0x81, 0x01, 0x4e, 0xff, 0x00, + 0x75, 0xb6, 0x10, 0x46, 0xd6, 0x1f, 0xca, 0x84, 0xd9, 0x3b, 0x47, 0x8e, + 0xa9, 0x29, 0x99, 0xd0, 0x10, 0x0f, 0x02, 0x12, 0x15, 0x37, 0x41, 0x12, + 0xe8, 0x0d, 0x9f, 0xca, 0x90, 0x83, 0x03, 0xce, 0x53, 0xcc, 0x00, 0x4f, + 0x83, 0x9d, 0xf7, 0xa4, 0xa6, 0x87, 0x54, 0x7b, 0x45, 0x2f, 0x2c, 0xd0, + 0x36, 0x77, 0x1f, 0x21, 0xa4, 0x2e, 0x7b, 0x12, 0xc7, 0xd2, 0xef, 0x51, + 0xb0, 0xe1, 0xc3, 0x9a, 0x55, 0xee, 0xb5, 0x6d, 0xbe, 0xca, 0xc1, 0x8a, + 0x8f, 0x3f, 0xca, 0x70, 0x03, 0x55, 0x9e, 0xc6, 0x38, 0xb3, 0x70, 0x69, + 0x81, 0xa9, 0x78, 0xd6, 0x07, 0x9a, 0x4a, 0x76, 0xdb, 0xd5, 0x71, 0x80, + 0x00, 0xb9, 0xd7, 0x11, 0xf9, 0x8d, 0xf6, 0x34, 0x7c, 0x51, 0x3f, 0x6b, + 0xdd, 0x11, 0x55, 0x55, 0xd7, 0xe7, 0x1b, 0x8f, 0xf0, 0x59, 0x37, 0xed, + 0x6d, 0x78, 0xe3, 0x63, 0x43, 0xc8, 0x2e, 0x75, 0x8d, 0x74, 0xef, 0x04, + 0xe9, 0x23, 0xb4, 0x22, 0x31, 0xd2, 0x12, 0x53, 0x66, 0xcc, 0xdc, 0x8b, + 0xed, 0x0d, 0xb9, 0xc1, 0xcd, 0xe4, 0x40, 0x02, 0x0f, 0xc9, 0x39, 0xe9, + 0x98, 0xf7, 0x8f, 0xa3, 0xb5, 0xdf, 0xbc, 0xdd, 0x15, 0x76, 0x98, 0xbe, + 0xb3, 0xfc, 0xa0, 0x3e, 0xf5, 0xb6, 0xca, 0xf6, 0x00, 0x7b, 0x0e, 0x7e, + 0x05, 0x25, 0x3c, 0xd3, 0xf0, 0x2f, 0x6b, 0xdd, 0x58, 0xad, 0xc4, 0x82, + 0x40, 0xd3, 0x94, 0xe7, 0xa6, 0xe5, 0x34, 0x07, 0x3d, 0xbb, 0x07, 0x89, + 0x23, 0xf8, 0x2e, 0x91, 0xd5, 0x43, 0x89, 0x1a, 0xce, 0xa9, 0xac, 0xa0, + 0x39, 0x81, 0xae, 0x1c, 0x6b, 0x09, 0x29, 0xa9, 0x53, 0xc5, 0xb8, 0xed, + 0x93, 0xef, 0x00, 0x07, 0x4f, 0x88, 0xd2, 0x52, 0xb9, 0x9b, 0x04, 0x81, + 0xca, 0x3d, 0x38, 0xa3, 0x60, 0x2d, 0xe4, 0x38, 0x83, 0xf0, 0x0a, 0x39, + 0x22, 0x2c, 0xa9, 0x9d, 0x8b, 0xda, 0x3f, 0x10, 0x92, 0x9d, 0x6c, 0x79, + 0x15, 0xb3, 0x4d, 0x06, 0x92, 0x39, 0x95, 0x72, 0x8a, 0x8b, 0x75, 0x23, + 0xbe, 0xba, 0xa5, 0x50, 0x0d, 0x05, 0xba, 0x68, 0x65, 0x16, 0xbd, 0x79, + 0xe4, 0xa4, 0xa7, 0x47, 0x0e, 0xf3, 0x4b, 0xda, 0xe0, 0x74, 0x3a, 0x38, + 0x79, 0x15, 0xba, 0x08, 0x70, 0x07, 0xb1, 0x12, 0xb9, 0x96, 0x92, 0xd6, + 0x6b, 0xcc, 0xe8, 0xba, 0x2c, 0x53, 0x38, 0xd5, 0x13, 0xdd, 0xa3, 0xf2, + 0x24, 0xa6, 0x51, 0x3a, 0x76, 0x0a, 0x87, 0x55, 0x6c, 0xed, 0xd2, 0x64, + 0x40, 0x1e, 0x6b, 0x41, 0xbe, 0x6a, 0xbe, 0x43, 0x37, 0xd8, 0x67, 0xb4, + 0x1f, 0xb9, 0x25, 0x39, 0x78, 0x6f, 0xd9, 0x93, 0x51, 0xfe, 0x50, 0x07, + 0xe7, 0xa2, 0x7e, 0xb4, 0x27, 0x21, 0x8e, 0xe4, 0x39, 0xa2, 0x3e, 0x45, + 0x56, 0x0e, 0x2c, 0x76, 0xe1, 0xa1, 0x6b, 0xa4, 0x7d, 0xea, 0xe6, 0x70, + 0x6d, 0xf8, 0xf5, 0x5d, 0x5e, 0xbb, 0x01, 0x0e, 0xf2, 0x04, 0xa4, 0xa7, + 0x2c, 0xb2, 0x0c, 0x8d, 0x27, 0x92, 0x3b, 0xa4, 0x1b, 0x13, 0xa6, 0x9c, + 0xa2, 0x48, 0xff, 0x00, 0x62, 0x5d, 0xa1, 0x25, 0x23, 0xc7, 0x11, 0x60, + 0x10, 0x4e, 0x84, 0xfe, 0x2a, 0xc0, 0x9f, 0x04, 0x06, 0x34, 0x17, 0x71, + 0x30, 0x22, 0x11, 0x0d, 0x40, 0x92, 0x40, 0x68, 0x3e, 0x30, 0x92, 0x92, + 0xc7, 0x88, 0xec, 0x96, 0xa0, 0x8d, 0x35, 0x41, 0xf4, 0xda, 0x22, 0x5a, + 0xd3, 0xf2, 0x0a, 0x40, 0x31, 0xdf, 0xe0, 0x9a, 0x0f, 0x13, 0xb4, 0x24, + 0xa7, 0xa1, 0xb2, 0xc0, 0xec, 0x51, 0x61, 0x21, 0xad, 0x73, 0x64, 0x9f, + 0x88, 0x5c, 0xdf, 0x57, 0x71, 0x6f, 0x4a, 0xb6, 0x5f, 0xbf, 0x7e, 0xe3, + 0xb8, 0xe8, 0x4f, 0x82, 0xd0, 0xa7, 0x2a, 0xd6, 0x63, 0x7a, 0x2c, 0x81, + 0xb6, 0x40, 0x31, 0xae, 0xbd, 0x82, 0xc9, 0xfa, 0xc9, 0x6e, 0xce, 0x9e, + 0xe6, 0x93, 0x26, 0x35, 0x29, 0x29, 0xce, 0xc8, 0xac, 0xe6, 0xfd, 0x56, + 0xc4, 0x78, 0xd5, 0xf5, 0x34, 0xb6, 0x7f, 0xa8, 0xe2, 0xdf, 0xe0, 0xb2, + 0xbe, 0xdd, 0x4f, 0xec, 0x4f, 0xb3, 0x47, 0xeb, 0x5b, 0xf6, 0xcf, 0x7d, + 0x9c, 0xad, 0xcf, 0xab, 0xaf, 0xae, 0xfe, 0x83, 0xe8, 0xfe, 0x75, 0x6f, + 0x7b, 0x5d, 0xfd, 0xa3, 0xb8, 0x2e, 0x77, 0xec, 0x4e, 0xfd, 0xa9, 0xe8, + 0x46, 0x9b, 0xb7, 0x7c, 0x92, 0x53, 0xa1, 0xf5, 0x67, 0x2b, 0x25, 0xbd, + 0x5a, 0xba, 0xab, 0x21, 0x8d, 0x35, 0x96, 0xb8, 0xb8, 0x12, 0x3c, 0x75, + 0xe3, 0xb8, 0x5d, 0x95, 0xa3, 0x21, 0xd0, 0x7d, 0x40, 0xf3, 0x30, 0x18, + 0x1a, 0x00, 0x33, 0xf7, 0x95, 0xc3, 0xd3, 0x92, 0xec, 0x0c, 0x86, 0xbc, + 0x19, 0x71, 0x20, 0xb1, 0xde, 0x03, 0xb8, 0x5d, 0x7f, 0xd5, 0xb6, 0x63, + 0xe6, 0xe4, 0xdb, 0xd4, 0x9f, 0x59, 0x37, 0xb5, 0xde, 0x9b, 0x6c, 0x71, + 0x27, 0xdd, 0xb7, 0xdf, 0x03, 0x40, 0x34, 0x80, 0x92, 0x9e, 0x7a, 0xf7, + 0xc1, 0x74, 0x8e, 0xe7, 0xe1, 0xca, 0xa8, 0xe2, 0xe8, 0xf7, 0x38, 0x13, + 0xcc, 0x85, 0xad, 0xd6, 0xf0, 0x1f, 0x56, 0x4d, 0xce, 0x68, 0x8c, 0x72, + 0xe2, 0x01, 0x1a, 0x8f, 0x82, 0xca, 0x2d, 0x68, 0xa3, 0x71, 0x8e, 0xe0, + 0x14, 0x94, 0x93, 0x13, 0xa8, 0xe4, 0x61, 0x99, 0x63, 0x89, 0x67, 0x76, + 0x1d, 0x44, 0x2d, 0x1b, 0x7a, 0x95, 0x39, 0x54, 0xfa, 0x84, 0x86, 0xb9, + 0x84, 0x02, 0xd3, 0xe6, 0xb1, 0x37, 0x6e, 0x01, 0xa3, 0xb9, 0x1a, 0xf9, + 0x05, 0x10, 0xe0, 0x6c, 0x88, 0xee, 0x4c, 0x79, 0x70, 0x3f, 0x22, 0x4a, + 0x6c, 0x1b, 0x03, 0x9e, 0xf3, 0xfb, 0xe7, 0xdb, 0x03, 0x98, 0x0a, 0x62, + 0xca, 0xc7, 0xb8, 0x11, 0xa8, 0xd1, 0x04, 0x90, 0x03, 0x08, 0xf1, 0x29, + 0xea, 0x01, 0xde, 0x8c, 0x76, 0x2e, 0x49, 0x49, 0xc3, 0xd9, 0x26, 0x08, + 0xd1, 0xa9, 0xad, 0xb6, 0xb6, 0x82, 0x09, 0x88, 0x81, 0xf2, 0x4c, 0xd1, + 0x0e, 0x6c, 0xfe, 0x6e, 0xbf, 0x7a, 0x57, 0x0d, 0xcd, 0xdb, 0xa4, 0x49, + 0xfc, 0x44, 0xa4, 0xa7, 0x2f, 0xaa, 0xe3, 0xbb, 0x2a, 0xb6, 0x1a, 0xbf, + 0x32, 0x48, 0xf3, 0x95, 0x88, 0x25, 0xb2, 0xc3, 0x2d, 0x3c, 0x38, 0x71, + 0xf7, 0xae, 0x96, 0xa8, 0x70, 0x2d, 0x3d, 0x8f, 0xe2, 0xa9, 0xf5, 0x3e, + 0x9e, 0x6d, 0x69, 0xba, 0xb1, 0x16, 0x37, 0x9f, 0xe5, 0x04, 0x94, 0xe5, + 0x35, 0xa1, 0x1e, 0xb7, 0x76, 0x55, 0x5b, 0xbf, 0x76, 0xde, 0xfc, 0xa3, + 0x32, 0xab, 0x49, 0x80, 0x47, 0x8a, 0x4a, 0x6d, 0x34, 0x6e, 0xb2, 0xb6, + 0x8d, 0x49, 0x70, 0x5d, 0x09, 0x02, 0x21, 0x63, 0xf4, 0xfc, 0x57, 0x07, + 0x0b, 0x6c, 0xd4, 0xb7, 0x81, 0xe0, 0xb5, 0xe4, 0x40, 0xf1, 0x09, 0x29, + 0x6d, 0xc5, 0xbc, 0xfe, 0x67, 0x74, 0x58, 0x0f, 0x6c, 0x85, 0x11, 0x1b, + 0xbc, 0x9d, 0xc7, 0xc5, 0x26, 0xfb, 0x03, 0xbc, 0x1a, 0x09, 0x1f, 0x04, + 0x94, 0xb5, 0x2d, 0x3e, 0x97, 0xf6, 0x8f, 0xe5, 0x55, 0x33, 0x21, 0xb6, + 0xd4, 0xe3, 0xc0, 0x7b, 0x4f, 0xfd, 0x25, 0x7e, 0xb6, 0x16, 0xb1, 0x9d, + 0x89, 0xd4, 0xfc, 0xd6, 0x6f, 0x59, 0x25, 0xb5, 0xee, 0x1a, 0x11, 0x24, + 0x7c, 0x42, 0x4a, 0x7a, 0x37, 0x07, 0x07, 0x9e, 0xda, 0xea, 0x8d, 0x58, + 0x32, 0x0a, 0x83, 0x48, 0xb5, 0x95, 0x59, 0xdd, 0xcc, 0x04, 0xfc, 0xc2, + 0x20, 0x11, 0xa0, 0x49, 0x49, 0xc7, 0x7f, 0x35, 0xbd, 0x83, 0xee, 0xc3, + 0xa7, 0xfa, 0xbf, 0x91, 0x60, 0x83, 0x00, 0x3b, 0xb1, 0xd0, 0xad, 0xde, + 0x9a, 0x67, 0x0a, 0xaf, 0x81, 0xfc, 0xa5, 0x25, 0x36, 0x47, 0x25, 0x03, + 0x20, 0x86, 0x6f, 0x7b, 0x8c, 0x0d, 0xb1, 0x28, 0xc0, 0xea, 0x50, 0x32, + 0xd8, 0x1e, 0xd8, 0x70, 0x91, 0xc4, 0x24, 0xa7, 0x06, 0xf0, 0xd6, 0x58, + 0x58, 0x3c, 0x01, 0xfb, 0xc2, 0x35, 0x19, 0x55, 0xd3, 0x8e, 0xf6, 0x46, + 0xe7, 0xb8, 0xf0, 0x78, 0x84, 0xfd, 0x4a, 0xb6, 0xb2, 0xf1, 0x1d, 0xda, + 0x09, 0xfc, 0x8a, 0xab, 0x5a, 0x5c, 0x4c, 0x68, 0x3b, 0x92, 0x92, 0x98, + 0x11, 0xf2, 0x4c, 0x5c, 0x74, 0xfc, 0x51, 0x1c, 0xf6, 0x00, 0x58, 0xd0, + 0x1c, 0xe1, 0xf9, 0xc7, 0xf8, 0x20, 0xea, 0x7e, 0x29, 0x29, 0x76, 0x17, + 0x97, 0xc5, 0x60, 0x39, 0xc7, 0xb1, 0x30, 0x34, 0xf3, 0x82, 0x89, 0x39, + 0x42, 0x41, 0xad, 0xa0, 0xf8, 0x6f, 0xff, 0x00, 0xcc, 0x54, 0x31, 0x80, + 0xf5, 0x99, 0xe1, 0x27, 0xf2, 0x2b, 0x76, 0x09, 0xef, 0x30, 0x92, 0x9a, + 0xe0, 0xe5, 0x7f, 0xa3, 0x67, 0xfd, 0xb9, 0xff, 0x00, 0x98, 0xa9, 0x0f, + 0xb4, 0xc7, 0xf3, 0x6c, 0x9f, 0xf8, 0xcf, 0xfc, 0xc5, 0x4c, 0x37, 0xc4, + 0xc7, 0xc5, 0x3b, 0x7e, 0x30, 0x92, 0x99, 0xd2, 0x1f, 0xb4, 0x97, 0xc0, + 0xd6, 0x4c, 0x1d, 0xc3, 0xf2, 0x05, 0xcf, 0xfd, 0x66, 0xc9, 0xdd, 0x43, + 0xc4, 0xad, 0xab, 0x2d, 0xda, 0xc3, 0x58, 0x3a, 0xb9, 0x72, 0xdf, 0x58, + 0x0b, 0xbd, 0x2d, 0x7f, 0x38, 0xc7, 0xdc, 0x92, 0x99, 0x7d, 0x50, 0xca, + 0xdb, 0x6e, 0x4e, 0x39, 0xe1, 0xed, 0xdc, 0xdf, 0x8b, 0x79, 0xfc, 0x0a, + 0xd5, 0xfb, 0x2b, 0x3e, 0xdf, 0xeb, 0x46, 0xb0, 0x81, 0xf5, 0x67, 0x0a, + 0xa6, 0xfd, 0x5d, 0xb7, 0xa8, 0xbe, 0x18, 0xfa, 0xb2, 0x9c, 0xe0, 0xf2, + 0x39, 0x66, 0xd6, 0xd6, 0xe6, 0x92, 0xb4, 0xb6, 0x8d, 0xfb, 0x92, 0x53, + 0xc7, 0x6b, 0x6d, 0x4d, 0x6b, 0x5c, 0x1d, 0xb0, 0xc8, 0x71, 0x3a, 0x00, + 0x79, 0x95, 0xdb, 0x7d, 0x52, 0xea, 0x34, 0xfe, 0xce, 0xb9, 0x9a, 0x7e, + 0xa4, 0x3e, 0x97, 0x1b, 0xb7, 0x99, 0x98, 0xf9, 0x2e, 0x03, 0x18, 0x92, + 0xf3, 0xe0, 0xf1, 0xb5, 0xe3, 0xcc, 0xf7, 0x5a, 0xdd, 0x16, 0xcb, 0xe8, + 0xb1, 0xfa, 0x96, 0xb2, 0xd6, 0xec, 0x73, 0x7c, 0x60, 0xc8, 0x49, 0x4f, + 0x6d, 0xd3, 0x05, 0x59, 0x98, 0xf9, 0x35, 0x5e, 0x37, 0xb5, 0xef, 0x3b, + 0x81, 0xf3, 0xd4, 0x2e, 0x6f, 0xae, 0x74, 0xc3, 0xd3, 0xdd, 0xe9, 0x02, + 0x5c, 0xc7, 0x82, 0xf6, 0x13, 0xe0, 0x67, 0x45, 0xb9, 0xf5, 0x7d, 0xe4, + 0xe4, 0xdf, 0x5c, 0xe9, 0x2c, 0x77, 0xe5, 0x0a, 0xff, 0x00, 0x5e, 0xc7, + 0xc7, 0xc8, 0xc7, 0x0c, 0xb8, 0x70, 0x0e, 0xd7, 0x77, 0x1a, 0x24, 0xa7, + 0xcf, 0x18, 0x61, 0xc2, 0x7c, 0x4a, 0x13, 0x5e, 0xe1, 0x7b, 0x67, 0xb8, + 0x02, 0x11, 0x19, 0x5d, 0x96, 0x65, 0x57, 0x5d, 0x7e, 0xe7, 0x38, 0x96, + 0xb4, 0x78, 0x93, 0xa2, 0x0d, 0x92, 0x2e, 0x8e, 0x1c, 0x0c, 0x47, 0x98, + 0x84, 0x94, 0xdb, 0x9d, 0x00, 0x3f, 0xbc, 0x7f, 0x8a, 0x7c, 0x63, 0x04, + 0x03, 0xd8, 0xba, 0x3e, 0xf4, 0xc4, 0x47, 0xbb, 0x90, 0x5c, 0x0a, 0x81, + 0x25, 0x8f, 0x0e, 0xec, 0x1c, 0x41, 0xf9, 0xa4, 0xa6, 0xcf, 0xf8, 0x48, + 0x27, 0x91, 0x0a, 0x6f, 0x05, 0xc0, 0xf8, 0xf2, 0x3e, 0x21, 0x30, 0x1b, + 0xdd, 0xbb, 0x88, 0x11, 0xf1, 0x52, 0x63, 0xa5, 0xc5, 0xbd, 0xe2, 0x52, + 0x53, 0x4d, 0xbe, 0xdb, 0x8e, 0xdf, 0xce, 0x13, 0x1f, 0x94, 0x2b, 0x24, + 0x6e, 0xae, 0x3c, 0x47, 0x2a, 0x06, 0xa8, 0xb4, 0x38, 0x68, 0x58, 0x7f, + 0x02, 0x8c, 0xe2, 0x22, 0x5b, 0xc1, 0x1a, 0x7e, 0x54, 0x94, 0xf3, 0x39, + 0xb5, 0x7a, 0x19, 0x4e, 0x81, 0xed, 0x3e, 0xe0, 0x3c, 0x8f, 0x65, 0x2c, + 0x47, 0xcd, 0x85, 0xbc, 0xc0, 0x80, 0x7c, 0x91, 0xba, 0xdb, 0x40, 0x7b, + 0x1e, 0x3c, 0xc4, 0xfc, 0x75, 0x54, 0xb0, 0x5d, 0x16, 0x90, 0x52, 0x53, + 0xbd, 0x88, 0xef, 0xa4, 0x0f, 0x8a, 0xb8, 0xd7, 0x01, 0xa2, 0xce, 0xc7, + 0xb6, 0x1c, 0x64, 0xfc, 0x15, 0xa6, 0x59, 0x30, 0x92, 0x9b, 0x4e, 0x3e, + 0xcd, 0x39, 0x1a, 0x85, 0x07, 0xc1, 0x0d, 0x0e, 0x89, 0x24, 0x6a, 0x95, + 0x67, 0x9d, 0x34, 0x44, 0xae, 0xa6, 0x4c, 0xbb, 0x52, 0x3b, 0x1f, 0xee, + 0x49, 0x4c, 0xeb, 0x73, 0xde, 0xd3, 0x23, 0x50, 0x60, 0x2c, 0xae, 0xb5, + 0x3e, 0x8f, 0xc8, 0xca, 0xd8, 0x76, 0x8b, 0x37, 0xab, 0x55, 0xbe, 0xa1, + 0x3d, 0xa6, 0x52, 0x53, 0xd0, 0x61, 0x38, 0x3f, 0x15, 0x8e, 0x03, 0xe8, + 0x00, 0x07, 0xc2, 0x24, 0x7e, 0x08, 0xc3, 0x5d, 0x47, 0x62, 0xb2, 0xba, + 0x16, 0x43, 0xdd, 0x8d, 0x48, 0x1e, 0xe0, 0xfa, 0x87, 0xc6, 0x6a, 0x3e, + 0x9b, 0xbf, 0x82, 0xd5, 0xdb, 0x04, 0x11, 0xdd, 0x25, 0x26, 0xac, 0x4b, + 0x20, 0xf6, 0x5b, 0xbd, 0x30, 0xce, 0x1b, 0x3c, 0x89, 0x1f, 0x8a, 0xc0, + 0xad, 0xd2, 0x08, 0xee, 0x3f, 0x15, 0xb9, 0xd2, 0x08, 0x38, 0x62, 0x3b, + 0x38, 0x84, 0x94, 0xdb, 0x07, 0xdc, 0xef, 0x92, 0x85, 0xad, 0xdc, 0x35, + 0xf1, 0x53, 0x1f, 0x4d, 0xc3, 0xe0, 0x99, 0xd1, 0x12, 0x52, 0x53, 0x8f, + 0xd6, 0x00, 0x0e, 0x63, 0xfb, 0x91, 0x1f, 0x72, 0xa1, 0x53, 0x5f, 0x6b, + 0x9c, 0xd6, 0x73, 0x05, 0xc7, 0xc2, 0x02, 0xd7, 0xea, 0xd5, 0x97, 0xd2, + 0xd7, 0x34, 0x49, 0x69, 0xec, 0xb3, 0xb0, 0x59, 0x67, 0xa8, 0x61, 0x84, + 0x87, 0xb4, 0xb5, 0x25, 0x35, 0xec, 0xac, 0xd4, 0xe1, 0xb9, 0xc0, 0xcf, + 0x82, 0x67, 0x9f, 0x25, 0x67, 0xa9, 0x52, 0x19, 0xe9, 0xb8, 0x40, 0x00, + 0x46, 0xd1, 0xdb, 0x45, 0x52, 0x65, 0xba, 0xea, 0x52, 0x52, 0xf4, 0x0d, + 0xd6, 0xb5, 0xa6, 0x22, 0x75, 0x95, 0x7b, 0xd2, 0xa4, 0x18, 0xd8, 0x35, + 0x54, 0xf1, 0x44, 0xdc, 0x20, 0x6e, 0x80, 0x74, 0x56, 0xfd, 0x7f, 0xe4, + 0x8f, 0xbd, 0x25, 0x33, 0xf4, 0xa9, 0xef, 0x5b, 0x53, 0xfa, 0x14, 0xff, + 0x00, 0xa3, 0x6f, 0xdc, 0xa2, 0x2c, 0x3c, 0xed, 0xfc, 0x42, 0xb7, 0x83, + 0x4b, 0xad, 0xb7, 0x7b, 0x9b, 0x0c, 0x61, 0xe4, 0x91, 0xa9, 0xec, 0x92, + 0x98, 0xbb, 0x07, 0x1d, 0x94, 0x9f, 0x55, 0x80, 0x3d, 0xd0, 0x5a, 0x1a, + 0x3d, 0xe2, 0x16, 0x16, 0x77, 0x41, 0xaf, 0x36, 0x9b, 0x5f, 0x96, 0x1f, + 0x43, 0x2a, 0x25, 0xc0, 0xb5, 0xcd, 0x27, 0x6f, 0x9c, 0x8e, 0xeb, 0xa9, + 0x73, 0x68, 0xbb, 0x24, 0xb5, 0xc6, 0x5e, 0xcd, 0x48, 0xed, 0xe4, 0xb1, + 0xfe, 0xb0, 0xe6, 0xf4, 0xec, 0x6a, 0xeb, 0xc4, 0xca, 0x7b, 0xea, 0xa0, + 0xbb, 0xd4, 0xbf, 0x63, 0x4b, 0xb7, 0x86, 0xfe, 0x69, 0x73, 0x78, 0x04, + 0xf3, 0xe4, 0x92, 0x9e, 0x73, 0x13, 0xea, 0xc7, 0x55, 0xb7, 0x05, 0xcd, + 0xc0, 0xb1, 0xc7, 0x12, 0xf7, 0x12, 0xda, 0xad, 0x71, 0xad, 0xaf, 0xd4, + 0x6d, 0x27, 0xc7, 0xe3, 0x0b, 0x5f, 0xf6, 0x3e, 0x7f, 0xd8, 0xbe, 0xc5, + 0xf6, 0x8a, 0xfe, 0xdb, 0xe9, 0x7a, 0x7e, 0xa6, 0xbb, 0x77, 0xc4, 0x2b, + 0xb5, 0x7d, 0x6c, 0xe8, 0x57, 0x02, 0x31, 0x72, 0xd8, 0xe7, 0xb2, 0x1b, + 0x5d, 0x5a, 0xb4, 0x9f, 0xea, 0x87, 0x81, 0x2a, 0x8f, 0xab, 0x6f, 0xad, + 0xea, 0xc9, 0x9d, 0xdb, 0xe2, 0x4f, 0x8c, 0xc4, 0xa4, 0xa7, 0x88, 0x68, + 0x0d, 0xba, 0x66, 0x1a, 0x4f, 0x21, 0x59, 0xc8, 0xc9, 0x7b, 0x6c, 0xf4, + 0xdb, 0xed, 0x88, 0x92, 0x3e, 0xf4, 0x1b, 0x58, 0x1a, 0xf7, 0x35, 0xbc, + 0x37, 0x40, 0xa3, 0x69, 0x6b, 0x5c, 0x6c, 0xb7, 0xc0, 0x06, 0xb3, 0xbb, + 0xa0, 0x47, 0xc8, 0x24, 0xa7, 0xba, 0xfa, 0xa1, 0x61, 0xc9, 0xb5, 0xd7, + 0x76, 0xf4, 0x61, 0xdf, 0xd6, 0xdd, 0x08, 0x9f, 0x58, 0x73, 0x8f, 0xda, + 0x0e, 0x3d, 0x60, 0xbd, 0xc1, 0xa4, 0x38, 0x0e, 0x1a, 0x1d, 0xa4, 0x95, + 0x5f, 0xea, 0x03, 0xc1, 0xe9, 0xf9, 0x99, 0x2f, 0x3a, 0xb5, 0xf1, 0xf0, + 0x6b, 0x5b, 0xb9, 0x64, 0x65, 0xe7, 0x5f, 0x91, 0x90, 0xe7, 0xb8, 0x91, + 0x5d, 0xae, 0x3b, 0x9a, 0x38, 0x89, 0xff, 0x00, 0x62, 0x4a, 0x6a, 0x74, + 0xef, 0x67, 0x57, 0xc3, 0xf0, 0x16, 0xb7, 0x4f, 0x1d, 0x42, 0x06, 0x6d, + 0x7b, 0x73, 0xee, 0x3f, 0xf0, 0x8f, 0xfc, 0xaa, 0xcd, 0x45, 0x98, 0x3d, + 0x63, 0x16, 0xd2, 0xe0, 0x5a, 0xdb, 0x1a, 0xed, 0xee, 0xe3, 0x69, 0x8d, + 0x7e, 0xe2, 0x87, 0xd5, 0xe6, 0xae, 0xa1, 0x70, 0x3f, 0xe9, 0x1d, 0xfe, + 0xc4, 0x94, 0xdb, 0xcc, 0xc0, 0x75, 0x38, 0xb8, 0xd9, 0x0c, 0x3b, 0x99, + 0x65, 0x6c, 0xb1, 0xff, 0x00, 0xc9, 0x73, 0x8c, 0x42, 0xa1, 0x68, 0x99, + 0xfe, 0xb0, 0xfc, 0x56, 0xc5, 0xf1, 0x93, 0xd1, 0x6b, 0x34, 0xb8, 0xb8, + 0xd1, 0x55, 0x25, 0xed, 0xe6, 0x35, 0x70, 0xfc, 0xab, 0x1c, 0xc9, 0x26, + 0x74, 0x1a, 0x14, 0x94, 0xbd, 0x37, 0x39, 0x97, 0x35, 0x84, 0xc0, 0x32, + 0xdf, 0xbb, 0xdc, 0x11, 0xec, 0x71, 0x6b, 0xd8, 0xf1, 0xf0, 0x2a, 0x9d, + 0xed, 0x20, 0x12, 0x3e, 0x90, 0xd5, 0xa7, 0xcc, 0x2b, 0x55, 0x3c, 0x5f, + 0x8e, 0xc7, 0x71, 0xb8, 0x7e, 0x23, 0x42, 0x92, 0x92, 0xbc, 0x83, 0x0e, + 0x1d, 0xc7, 0xe4, 0x51, 0xa6, 0x05, 0x7b, 0x7b, 0x09, 0x03, 0xe1, 0xc8, + 0xfc, 0x0a, 0x10, 0x2e, 0x0d, 0xda, 0xed, 0x36, 0xbb, 0x43, 0xf1, 0x44, + 0x88, 0xd4, 0x24, 0xa7, 0x2f, 0xac, 0x32, 0x71, 0xdd, 0xfc, 0x87, 0x02, + 0x3e, 0x05, 0x63, 0x56, 0x5c, 0xd3, 0x2d, 0xd0, 0xf8, 0xad, 0xec, 0xf6, + 0x9b, 0x29, 0xb3, 0x43, 0xf4, 0x48, 0xf9, 0x85, 0x84, 0xcd, 0x08, 0x07, + 0x9f, 0x04, 0x94, 0xd8, 0xae, 0xdb, 0xbf, 0x7c, 0xcf, 0x65, 0x69, 0x99, + 0x57, 0x54, 0xe0, 0x1c, 0xf9, 0x27, 0xb1, 0x55, 0x2b, 0x11, 0xa9, 0x3f, + 0x04, 0xee, 0x3b, 0xce, 0xc7, 0x7c, 0x8a, 0x4a, 0x77, 0xf0, 0xf2, 0x9b, + 0x68, 0x9e, 0x08, 0xe4, 0x2b, 0xac, 0x3f, 0xa4, 0x85, 0xcf, 0xe0, 0x9b, + 0x6a, 0xb9, 0x95, 0x9f, 0x70, 0x3a, 0x03, 0xc4, 0x8f, 0x35, 0xd0, 0x30, + 0x17, 0x41, 0xe3, 0xb2, 0x4a, 0x48, 0xe2, 0x35, 0x93, 0xc7, 0x0a, 0xa7, + 0x51, 0x6e, 0xfa, 0x1c, 0x5b, 0xc8, 0x0a, 0xd9, 0x02, 0x20, 0xf8, 0xa0, + 0x64, 0x40, 0x63, 0x81, 0xee, 0x38, 0x49, 0x48, 0xfa, 0x13, 0xb6, 0x61, + 0x54, 0xf6, 0xf3, 0x8f, 0x73, 0x83, 0xbf, 0xa9, 0x69, 0xda, 0x7f, 0x18, + 0x5d, 0x2c, 0x83, 0xa2, 0xe5, 0x7e, 0xaf, 0xd8, 0xcf, 0x53, 0x22, 0x87, + 0xfd, 0x10, 0xf8, 0x77, 0xf5, 0x6c, 0x1c, 0xfc, 0x88, 0x5d, 0x2e, 0x31, + 0x3b, 0x4b, 0x5f, 0xf4, 0xdb, 0xed, 0x77, 0xc4, 0x68, 0x92, 0x99, 0x90, + 0x43, 0xa7, 0x82, 0xb6, 0xfa, 0x2c, 0xfd, 0x95, 0xdf, 0xd7, 0x31, 0xf7, + 0x05, 0x8e, 0xe0, 0x62, 0x7c, 0x39, 0x5b, 0x5d, 0x1c, 0x01, 0x85, 0x3e, + 0x2e, 0x71, 0x3f, 0x91, 0x25, 0x27, 0xd5, 0xb7, 0x07, 0x1e, 0x1e, 0xe2, + 0xdf, 0x94, 0x08, 0xfc, 0x42, 0x29, 0x00, 0xc8, 0x2a, 0xbe, 0x58, 0x3f, + 0x67, 0x2e, 0x07, 0xdc, 0x08, 0x70, 0x3f, 0x34, 0x76, 0x58, 0x2c, 0x63, + 0x5e, 0xde, 0x1e, 0x01, 0x49, 0x48, 0xb2, 0x59, 0xea, 0x54, 0xe6, 0x9e, + 0x20, 0xe8, 0xb2, 0xa9, 0xac, 0xd5, 0x43, 0x9e, 0x4e, 0xa0, 0x12, 0x35, + 0xe3, 0xc5, 0x6d, 0x58, 0x25, 0xa7, 0xcc, 0x2c, 0x8f, 0x44, 0x31, 0x97, + 0xd2, 0x4e, 0xaf, 0x1e, 0xdf, 0x8a, 0x4a, 0x73, 0xf3, 0x2e, 0x16, 0xbe, + 0x1b, 0xf4, 0x40, 0x1a, 0xfc, 0x46, 0xaa, 0xb8, 0x25, 0x4c, 0x8d, 0x75, + 0xed, 0xca, 0x67, 0x68, 0x92, 0x93, 0x61, 0x09, 0x79, 0x77, 0x70, 0x39, + 0xf9, 0xab, 0x18, 0xd4, 0x31, 0xd9, 0x0f, 0x2e, 0x6c, 0xeb, 0xa7, 0xcf, + 0x95, 0x5f, 0x11, 0xc5, 0xaf, 0x23, 0x4d, 0xa7, 0xf2, 0x85, 0xa3, 0x47, + 0xf3, 0x92, 0x92, 0x9c, 0x2c, 0x3b, 0x3a, 0xad, 0xbd, 0x7a, 0xfe, 0x95, + 0x50, 0x6b, 0xf1, 0xe9, 0x74, 0xb9, 0xee, 0x6f, 0xd0, 0xa8, 0xc1, 0xe4, + 0x77, 0xd7, 0x45, 0xd8, 0x08, 0xa5, 0xa2, 0xba, 0xd8, 0x76, 0x34, 0x72, + 0xb0, 0xe9, 0xcb, 0xbb, 0x13, 0x3b, 0x2f, 0xd1, 0xa5, 0x9f, 0xa5, 0x78, + 0x36, 0x58, 0xe9, 0xdc, 0xe8, 0x68, 0x00, 0x93, 0x3c, 0x78, 0x22, 0x62, + 0xfd, 0x65, 0xc3, 0xbf, 0x22, 0xcc, 0x6b, 0x4b, 0x98, 0xe1, 0xc3, 0xe0, + 0xba, 0xb3, 0x1e, 0x2e, 0x1f, 0x47, 0xe6, 0x92, 0x9d, 0x3c, 0x77, 0x4f, + 0xa8, 0x4c, 0x6f, 0x9d, 0xa6, 0x3f, 0x37, 0xc5, 0x70, 0xdf, 0x59, 0x32, + 0xe8, 0xca, 0xc8, 0xbf, 0x15, 0xce, 0xf6, 0x07, 0x57, 0x58, 0x7c, 0xea, + 0xed, 0xc7, 0x61, 0x81, 0xe4, 0x75, 0x5d, 0x55, 0xb9, 0x5f, 0x66, 0xc4, + 0x7b, 0xf9, 0xbe, 0xf7, 0x1f, 0x4a, 0xb1, 0xaf, 0xb6, 0x74, 0x3a, 0x79, + 0x6a, 0xbc, 0xdf, 0xae, 0x80, 0x6f, 0x63, 0x98, 0x77, 0x3a, 0xbd, 0xce, + 0x2e, 0x1f, 0x87, 0xe4, 0x49, 0x4c, 0x3a, 0x6f, 0x46, 0x39, 0x02, 0xe7, + 0xda, 0x4b, 0x19, 0x8a, 0x76, 0x92, 0x39, 0x2f, 0x9e, 0x07, 0x87, 0x0b, + 0x5b, 0xf6, 0xe5, 0x9f, 0x65, 0xf4, 0x37, 0x7e, 0xb7, 0x3e, 0x97, 0xad, + 0xdf, 0x6c, 0x7d, 0x3f, 0xeb, 0x7f, 0xbd, 0x6e, 0xd8, 0x2a, 0xc8, 0xe9, + 0x35, 0xdd, 0x4b, 0x43, 0x45, 0xec, 0x16, 0x10, 0xd1, 0x12, 0xe7, 0x89, + 0x71, 0x31, 0xe6, 0xb8, 0xef, 0xb3, 0x1f, 0xda, 0x3e, 0x9f, 0x9c, 0xa4, + 0xa6, 0x2f, 0xb6, 0x1e, 0xe7, 0xfe, 0x71, 0x24, 0x80, 0xab, 0x96, 0xd9, + 0x75, 0x9d, 0xdc, 0xe7, 0x72, 0x4a, 0x2d, 0x58, 0xee, 0x7b, 0x86, 0xed, + 0x1a, 0xe4, 0x67, 0xdd, 0x56, 0x38, 0xda, 0xcd, 0x5d, 0xe1, 0xfd, 0xe9, + 0x29, 0xd9, 0xe8, 0x3d, 0x46, 0xbe, 0x92, 0xdb, 0x68, 0xbd, 0xf1, 0x46, + 0x4b, 0x1c, 0xdb, 0x0f, 0x83, 0xa3, 0xda, 0xef, 0xe0, 0x86, 0xe7, 0x01, + 0x8e, 0x0f, 0x98, 0x3f, 0x7a, 0xe7, 0xec, 0xbd, 0xf7, 0x38, 0xc9, 0x92, + 0x79, 0xf2, 0x5a, 0x98, 0x6e, 0x2f, 0xc0, 0xb1, 0xbc, 0xec, 0x70, 0x8f, + 0x82, 0x4a, 0x4d, 0x69, 0xaa, 0xc6, 0xb3, 0x73, 0x26, 0xc6, 0x98, 0xde, + 0x4e, 0x9b, 0x47, 0x02, 0x14, 0xfa, 0xb3, 0x0d, 0x8d, 0xc5, 0xc8, 0x1a, + 0x9b, 0x69, 0x63, 0x9c, 0x7c, 0x5c, 0xcf, 0xd1, 0xbb, 0xf1, 0x6a, 0x13, + 0x8c, 0x03, 0xf1, 0x1f, 0x71, 0x46, 0x75, 0xad, 0xb3, 0x0c, 0x50, 0x67, + 0xd4, 0xa5, 0xce, 0x35, 0x1f, 0xe4, 0xbb, 0x52, 0xdf, 0xbf, 0x54, 0x94, + 0x93, 0xa1, 0x5e, 0x19, 0x79, 0xc5, 0xb1, 0xc4, 0x55, 0x94, 0x0d, 0x4e, + 0xf2, 0x27, 0x56, 0x47, 0xf6, 0xbf, 0x2a, 0x1e, 0x6d, 0x07, 0x1f, 0x22, + 0xda, 0x5c, 0x20, 0xb4, 0x90, 0x55, 0x40, 0xd7, 0x4b, 0xa1, 0xf0, 0x44, + 0x16, 0x80, 0x3b, 0x85, 0xa3, 0xd5, 0x0b, 0xee, 0xbe, 0xbb, 0xce, 0xbf, + 0x69, 0xa5, 0x96, 0x38, 0xf8, 0xba, 0x03, 0x5d, 0xf8, 0x84, 0x94, 0xd0, + 0x76, 0xba, 0x1e, 0x08, 0x52, 0xe9, 0xce, 0x01, 0xee, 0xc6, 0x71, 0x80, + 0xf3, 0x35, 0x93, 0xc0, 0x7f, 0xfb, 0x42, 0x1b, 0xcb, 0x8c, 0x06, 0x8f, + 0x8a, 0x1d, 0x84, 0x8f, 0x73, 0x74, 0x31, 0x33, 0xe6, 0xd4, 0x94, 0xde, + 0xb5, 0x85, 0xcd, 0x71, 0x12, 0x09, 0x83, 0x1f, 0x04, 0xf3, 0x1e, 0xee, + 0xc3, 0x5f, 0xbf, 0x44, 0x6b, 0x7f, 0x4b, 0x55, 0x39, 0x23, 0xe8, 0xde, + 0xd3, 0xbc, 0x8e, 0x1b, 0x63, 0x74, 0x70, 0xf9, 0xf3, 0xf3, 0x55, 0x8f, + 0xf3, 0x32, 0x92, 0x90, 0x5c, 0x0b, 0xab, 0x77, 0xc1, 0xd0, 0x3c, 0xd6, + 0x15, 0xae, 0x75, 0x99, 0x2e, 0x2d, 0xd7, 0x86, 0x8f, 0x90, 0x85, 0xd0, + 0x38, 0x68, 0xf0, 0x7c, 0xff, 0x00, 0x15, 0x83, 0x86, 0xd2, 0xeb, 0x09, + 0x3c, 0xa4, 0xa4, 0xaf, 0xc7, 0x3b, 0x67, 0x9e, 0xee, 0x03, 0xb7, 0x9a, + 0x93, 0x6b, 0x1b, 0x78, 0x91, 0xe5, 0xc8, 0xf8, 0x2b, 0xf5, 0xb0, 0x02, + 0xd0, 0x3b, 0xf2, 0xa4, 0x69, 0x11, 0xb5, 0xba, 0x36, 0x66, 0x3c, 0xd2, + 0x52, 0x1a, 0x31, 0x9e, 0x19, 0xea, 0xbf, 0x56, 0xc7, 0xb4, 0x03, 0xac, + 0xf8, 0xad, 0xaa, 0x1c, 0x0d, 0x4d, 0x27, 0xba, 0xa9, 0x8b, 0x50, 0xf4, + 0xde, 0x08, 0xe5, 0x5a, 0xc5, 0xd6, 0xa2, 0xce, 0xed, 0x49, 0x49, 0x86, + 0xa3, 0xc1, 0x51, 0xea, 0x59, 0x0d, 0xa1, 0xa0, 0xbb, 0xf3, 0x81, 0x00, + 0x79, 0xab, 0x6e, 0x3b, 0x5a, 0x49, 0xf9, 0x2c, 0x3e, 0xa9, 0x69, 0xb6, + 0xc6, 0x77, 0x0d, 0x9e, 0x12, 0x53, 0x5f, 0xa6, 0xe5, 0x5b, 0x8b, 0x9d, + 0xeb, 0xd8, 0x26, 0xbb, 0x34, 0xb0, 0x0f, 0x0f, 0x1f, 0x92, 0xed, 0xe9, + 0xb1, 0xae, 0x2c, 0xb1, 0xa7, 0x73, 0x6d, 0x6c, 0x87, 0x0e, 0x0c, 0x69, + 0x3f, 0x91, 0x70, 0xf5, 0xb0, 0x8d, 0xef, 0x76, 0x80, 0x9f, 0x68, 0xf2, + 0x5d, 0x07, 0x40, 0xc9, 0x73, 0xb1, 0x9d, 0x53, 0xb5, 0x18, 0xf6, 0xb4, + 0xb4, 0xff, 0x00, 0x26, 0xe0, 0x5a, 0x47, 0xf9, 0xcd, 0x49, 0x4f, 0x42, + 0xe9, 0x8f, 0x25, 0xb1, 0xd2, 0x5f, 0xfe, 0x4e, 0x77, 0xf2, 0x5c, 0xe0, + 0x3e, 0x71, 0xfd, 0xeb, 0x17, 0x70, 0x8d, 0x56, 0xd7, 0x4c, 0x69, 0x6e, + 0x03, 0x47, 0xfa, 0x4b, 0x24, 0x7c, 0x27, 0xfd, 0x89, 0x29, 0xb5, 0x7b, + 0x66, 0xa7, 0x56, 0x4f, 0xee, 0xfe, 0x54, 0x3e, 0x9c, 0xf0, 0x69, 0x35, + 0xf7, 0x63, 0x8f, 0xe3, 0xaa, 0x2d, 0xa4, 0x17, 0x39, 0xa4, 0xf8, 0x7e, + 0x50, 0xa9, 0x60, 0xbb, 0x65, 0xee, 0x13, 0xa1, 0xe4, 0x79, 0x84, 0x94, + 0xea, 0x11, 0xa2, 0xcd, 0xca, 0x66, 0xd7, 0x97, 0x44, 0x93, 0xa0, 0x5a, + 0x4a, 0xae, 0x73, 0x09, 0xa9, 0xd1, 0xe1, 0xa9, 0x49, 0x4f, 0x3b, 0x70, + 0x8b, 0x5d, 0xa4, 0x6a, 0x54, 0x1c, 0x11, 0xb2, 0x07, 0xe9, 0x09, 0x42, + 0x70, 0xd1, 0x25, 0x25, 0xc5, 0x9d, 0xcd, 0x1d, 0x8c, 0xab, 0xf4, 0x98, + 0x76, 0x9a, 0x85, 0x47, 0x0c, 0x6b, 0xed, 0x77, 0xa8, 0xe0, 0x7d, 0xc0, + 0x7e, 0x68, 0x77, 0x01, 0x5e, 0xa9, 0xbb, 0x4e, 0x9a, 0x49, 0x27, 0xef, + 0x49, 0x4e, 0x46, 0x78, 0xbe, 0xce, 0xaf, 0x7e, 0x3d, 0x6e, 0xf6, 0x06, + 0xb1, 0xe5, 0x93, 0xce, 0xe6, 0xc6, 0xef, 0xc1, 0x5a, 0xe9, 0xd5, 0xd7, + 0x8d, 0x5d, 0x82, 0xb0, 0x07, 0x77, 0xc7, 0x77, 0x79, 0xaa, 0x1d, 0x57, + 0xd4, 0xab, 0xeb, 0x1e, 0x31, 0x61, 0xd6, 0xec, 0x7d, 0x84, 0x9e, 0xf0, + 0x5c, 0xad, 0xe1, 0x92, 0xda, 0x2c, 0x93, 0xae, 0xb3, 0xf1, 0x49, 0x4f, + 0x35, 0xd4, 0xfa, 0xce, 0x5e, 0x1e, 0x6b, 0xd9, 0x5b, 0xf7, 0x52, 0xe0, + 0x43, 0xab, 0x3e, 0x07, 0x9d, 0xa7, 0xb2, 0xcf, 0xb1, 0xf5, 0x65, 0xe3, + 0xd9, 0x73, 0x5c, 0x0b, 0xdc, 0xf1, 0xb9, 0x9d, 0xdb, 0xe0, 0x3e, 0xe4, + 0x1e, 0xb2, 0xe2, 0xec, 0xd7, 0xa1, 0x74, 0xd6, 0x02, 0xeb, 0x5e, 0x78, + 0x00, 0x04, 0x94, 0xf6, 0x7f, 0x57, 0x9f, 0xbf, 0xa1, 0xb1, 0x87, 0x9a, + 0x4b, 0xeb, 0x8f, 0x81, 0x91, 0xf8, 0x15, 0x83, 0xb3, 0xfc, 0xaf, 0x2b, + 0x7f, 0xa1, 0x86, 0x0e, 0x9d, 0x0c, 0x1f, 0x48, 0xb8, 0xb8, 0x8e, 0xee, + 0xf1, 0xfb, 0x96, 0x4f, 0xa7, 0xfe, 0x57, 0xfe, 0x09, 0x29, 0xc1, 0xb3, + 0x2c, 0xb8, 0xfb, 0x4c, 0x0f, 0x04, 0x02, 0xe2, 0xed, 0x4f, 0x7e, 0xea, + 0x30, 0xd6, 0x9f, 0x12, 0xa2, 0xe3, 0xf3, 0x49, 0x4c, 0xc3, 0x80, 0xd0, + 0x2b, 0xfd, 0x37, 0x23, 0x61, 0xb2, 0xa7, 0x1f, 0x6d, 0x83, 0xf1, 0x59, + 0xcd, 0x3d, 0xd1, 0x18, 0xed, 0xae, 0x99, 0x49, 0x4e, 0xcb, 0x8e, 0xee, + 0xdc, 0xb7, 0xf2, 0x27, 0x24, 0x8f, 0x71, 0xf2, 0x28, 0x34, 0xbc, 0xba, + 0xaa, 0xdd, 0x3d, 0xc8, 0xf8, 0xa2, 0x4c, 0xb7, 0x9f, 0x16, 0x94, 0x94, + 0xc5, 0x80, 0x07, 0xcf, 0x3a, 0xc7, 0xc9, 0x6d, 0x65, 0xd7, 0x3d, 0x1f, + 0xa6, 0xe4, 0x77, 0x68, 0xb2, 0xa3, 0xf0, 0x0f, 0x24, 0x2c, 0x49, 0x04, + 0x69, 0xa9, 0xfe, 0xe5, 0xd0, 0x54, 0x7e, 0xd1, 0xf5, 0x71, 0xcc, 0x31, + 0x38, 0xd6, 0xb8, 0x92, 0x7f, 0x35, 0xa4, 0x07, 0x04, 0x94, 0xe2, 0x9d, + 0x44, 0x0e, 0x08, 0x41, 0xdb, 0x2c, 0x6c, 0xfe, 0xe9, 0x47, 0x6e, 0xad, + 0x03, 0xf9, 0x3a, 0xfe, 0x09, 0x9a, 0xcd, 0x19, 0xe6, 0x0f, 0xf0, 0x49, + 0x4d, 0xde, 0x8b, 0x6d, 0x45, 0xc7, 0x07, 0x22, 0x3d, 0x1c, 0x81, 0x35, + 0xb9, 0xdc, 0x32, 0xd0, 0x21, 0xa7, 0xe7, 0xc2, 0x1e, 0x4d, 0x2f, 0xa1, + 0xa6, 0x9b, 0x04, 0x3d, 0x93, 0x3f, 0x7e, 0x8a, 0xa6, 0x83, 0x6c, 0x78, + 0x15, 0xad, 0xd5, 0x61, 0xfe, 0x95, 0xa7, 0xf3, 0xb1, 0xe9, 0x71, 0x3e, + 0x32, 0xd0, 0xdf, 0xe0, 0x92, 0x9c, 0xc2, 0x06, 0xf2, 0x0f, 0xc5, 0x61, + 0xe1, 0xff, 0x00, 0x38, 0xff, 0x00, 0x89, 0xfc, 0xab, 0x6c, 0xea, 0xe9, + 0xf8, 0x80, 0xb1, 0xb0, 0xf5, 0x7b, 0xcf, 0x99, 0xfc, 0xa9, 0x29, 0xd4, + 0xad, 0xba, 0xb7, 0xbc, 0xab, 0x2d, 0x6e, 0x83, 0xc9, 0x57, 0xab, 0x96, + 0xc2, 0xb4, 0x38, 0x49, 0x49, 0x28, 0x00, 0x12, 0x89, 0x51, 0x0d, 0xb0, + 0x8f, 0xdf, 0x0a, 0x15, 0x0d, 0x10, 0x7d, 0x76, 0x8b, 0x9c, 0xd7, 0x12, + 0xd2, 0x00, 0x8f, 0x34, 0x94, 0x96, 0xdb, 0x37, 0x34, 0xc8, 0x88, 0x30, + 0x56, 0x36, 0x45, 0x8d, 0x63, 0xdc, 0x4b, 0x77, 0x12, 0x08, 0x1c, 0x8d, + 0xa4, 0xf0, 0x56, 0xd5, 0x8e, 0xdf, 0x54, 0x8e, 0x0f, 0x0a, 0x8e, 0x55, + 0x13, 0x05, 0xb3, 0xb4, 0xfd, 0x2f, 0x23, 0xd8, 0xa4, 0xa7, 0x30, 0x38, + 0x1e, 0x4c, 0xfe, 0x45, 0xb1, 0xf5, 0x7f, 0x71, 0xc0, 0xea, 0x57, 0x0d, + 0x76, 0xba, 0xa2, 0x3e, 0x15, 0x9d, 0xc5, 0x63, 0x5f, 0x35, 0x83, 0xc9, + 0x1d, 0xa5, 0x74, 0x5f, 0x54, 0x69, 0x0f, 0xe9, 0x79, 0x80, 0xeb, 0xea, + 0x38, 0x83, 0xfe, 0x6f, 0xfb, 0x52, 0x53, 0xb4, 0xc8, 0x7b, 0x03, 0x87, + 0x0e, 0x12, 0x17, 0x47, 0x82, 0x03, 0x31, 0x71, 0x2b, 0xee, 0x46, 0xef, + 0xbc, 0x17, 0x7f, 0x15, 0xca, 0xf4, 0xe7, 0x97, 0x63, 0x35, 0xa7, 0x52, + 0xcf, 0x69, 0xf9, 0x2d, 0x9c, 0x6c, 0xb7, 0x55, 0x95, 0x53, 0x4f, 0xb9, + 0xac, 0xac, 0xc8, 0xf8, 0xc0, 0x49, 0x4e, 0xc3, 0xd9, 0x2f, 0x2d, 0xe4, + 0xb8, 0x19, 0x54, 0xa8, 0x90, 0xf2, 0xee, 0xee, 0x71, 0x8f, 0xbd, 0x5c, + 0xa7, 0x21, 0x96, 0x19, 0x1f, 0x48, 0xaa, 0x8c, 0x90, 0x74, 0xfc, 0xd2, + 0xed, 0x7e, 0x69, 0x29, 0xd1, 0x61, 0x25, 0xa1, 0x2b, 0x1a, 0x1d, 0x5b, + 0x81, 0xee, 0x14, 0x6a, 0x7e, 0xe6, 0xa9, 0x83, 0x3a, 0x24, 0xa7, 0x9a, + 0xcd, 0xac, 0xb2, 0xe2, 0xd0, 0x34, 0xe7, 0xe4, 0xab, 0xb9, 0xc1, 0xa1, + 0xce, 0x77, 0x0d, 0x04, 0x9f, 0x80, 0xd5, 0x6a, 0x75, 0x7a, 0xc3, 0x6d, + 0x69, 0xf1, 0x6c, 0x7d, 0xcb, 0x26, 0xf6, 0x97, 0xd7, 0x65, 0x6d, 0x20, + 0x39, 0xed, 0x2d, 0x04, 0xe8, 0x01, 0x22, 0x12, 0x52, 0x3f, 0xa9, 0xfe, + 0x9e, 0x67, 0x43, 0x0e, 0xb0, 0x49, 0x6e, 0x45, 0x86, 0x41, 0x20, 0xc9, + 0x76, 0xfe, 0x47, 0xf5, 0x96, 0xeb, 0x41, 0xe7, 0xe2, 0x16, 0x57, 0xd5, + 0x2e, 0x9f, 0xfb, 0x3b, 0xa5, 0x3a, 0x87, 0xda, 0x2d, 0x73, 0xec, 0xde, + 0xe0, 0x01, 0x6e, 0xc2, 0x40, 0x1b, 0x75, 0xf8, 0x2d, 0x76, 0x83, 0xbc, + 0x8e, 0xd3, 0xca, 0x4a, 0x79, 0x3f, 0xae, 0xb6, 0xe4, 0xd5, 0xd4, 0xfa, + 0x51, 0xc5, 0xb0, 0xd5, 0x65, 0x92, 0xc0, 0xe1, 0xd8, 0xef, 0x6f, 0x8f, + 0xc5, 0x6d, 0xd8, 0xfa, 0x5c, 0xc7, 0xdb, 0x4b, 0x83, 0xea, 0xb1, 0xbb, + 0x9a, 0xe6, 0x99, 0x6b, 0xbc, 0xc1, 0x0b, 0x1b, 0xeb, 0xeb, 0x5d, 0x5d, + 0xbd, 0x33, 0x24, 0x7f, 0x83, 0xb1, 0xda, 0xf9, 0xcb, 0x1c, 0xb7, 0x32, + 0x69, 0xaa, 0x8a, 0x4b, 0x29, 0x63, 0x6b, 0xad, 0xb5, 0xfb, 0x58, 0xd0, + 0x00, 0x03, 0x5e, 0x00, 0x49, 0x4f, 0x9d, 0xf5, 0x53, 0x39, 0x96, 0x7c, + 0x55, 0xcf, 0xab, 0xfd, 0x2e, 0xce, 0xa2, 0xe1, 0x8e, 0xd3, 0xb1, 0xb6, + 0x3c, 0xb9, 0xf6, 0x44, 0xc3, 0x6b, 0x13, 0xf8, 0x93, 0x0a, 0x8f, 0x51, + 0x3b, 0xb2, 0xec, 0x3e, 0x6b, 0xa9, 0xe8, 0x3d, 0x37, 0xad, 0xd7, 0xd2, + 0xab, 0xbf, 0xa7, 0x3a, 0x86, 0x0c, 0x80, 0x5c, 0x5c, 0xe9, 0xf5, 0x22, + 0x4f, 0xef, 0x68, 0x12, 0x53, 0x67, 0xa3, 0x35, 0xd5, 0xb7, 0x23, 0x19, + 0xf0, 0x2c, 0xa2, 0xd7, 0x31, 0xe0, 0x19, 0x82, 0x21, 0x54, 0xf4, 0xdb, + 0xfb, 0x5f, 0x82, 0xaf, 0x74, 0xec, 0x2e, 0xad, 0x89, 0x6d, 0xaf, 0xea, + 0x5e, 0xe7, 0x5b, 0xb7, 0x65, 0x92, 0x1d, 0x3b, 0x41, 0x1f, 0x9a, 0xab, + 0xec, 0x3f, 0xb6, 0x3e, 0x49, 0x29, 0xff, 0xd9 +}; +size_t demo_003_jpg_len = 19604; + +const uint8_t demo_004_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0x2e, 0x3b, 0xf7, 0x7a, 0xae, 0x1f, 0x44, 0xba, 0x01, + 0xf2, 0xd2, 0x0f, 0xe2, 0xab, 0x66, 0x86, 0xdb, 0x8e, 0x31, 0x6b, 0x33, + 0x6b, 0x09, 0x6b, 0xf4, 0x3a, 0x35, 0xff, 0x00, 0x72, 0x86, 0x15, 0x4f, + 0xaa, 0xa6, 0x1b, 0x35, 0x78, 0xda, 0xe2, 0xff, 0x00, 0x02, 0xf7, 0x09, + 0x1f, 0x70, 0x5b, 0x5b, 0x58, 0x5c, 0x06, 0xd9, 0xf5, 0x1e, 0xd0, 0x4e, + 0x9d, 0x9d, 0x29, 0x29, 0xe4, 0xbe, 0xb2, 0xe2, 0x9a, 0x33, 0xaa, 0xc7, + 0xfa, 0x5e, 0x8d, 0x2d, 0x69, 0x3e, 0x64, 0x97, 0x15, 0x96, 0x01, 0x8d, + 0x47, 0x1f, 0x7a, 0xd8, 0xfa, 0xc7, 0x7b, 0x9d, 0xd7, 0x72, 0x1a, 0x04, + 0x86, 0x86, 0x37, 0xe7, 0xb4, 0x13, 0xf9, 0x55, 0x20, 0xea, 0x4b, 0xbd, + 0xcd, 0x88, 0xf2, 0xff, 0x00, 0x50, 0x92, 0x90, 0x31, 0xfb, 0x44, 0x11, + 0xcf, 0x1e, 0x21, 0x58, 0xae, 0xac, 0x6b, 0x1b, 0xed, 0x74, 0xb8, 0x9f, + 0xa3, 0xa4, 0xfd, 0xc5, 0x10, 0x62, 0xb5, 0xec, 0xdc, 0xc2, 0x08, 0xed, + 0xc6, 0xbf, 0xc1, 0x0f, 0xec, 0xa5, 0xbf, 0x49, 0xb1, 0xf1, 0xd0, 0xa4, + 0xa6, 0x0f, 0xc4, 0xad, 0xe3, 0xdb, 0xdf, 0xc4, 0x41, 0x08, 0x18, 0x58, + 0x1b, 0xba, 0x9d, 0x15, 0x11, 0x23, 0x7c, 0x91, 0xe4, 0xdf, 0x77, 0xf0, + 0x57, 0x98, 0xdb, 0x2b, 0x7f, 0x26, 0x74, 0x8d, 0xdd, 0xd1, 0xba, 0x7b, + 0x7d, 0x4e, 0xb1, 0x8f, 0xd8, 0xeb, 0x23, 0xe5, 0xaa, 0x4a, 0x7a, 0x01, + 0x51, 0x6e, 0x18, 0x73, 0x7e, 0x93, 0xec, 0x79, 0x02, 0x3b, 0x00, 0x3f, + 0x24, 0x2d, 0x1e, 0x88, 0x5a, 0xc7, 0xef, 0x79, 0xf7, 0x34, 0x13, 0xf0, + 0x00, 0x39, 0x67, 0x37, 0x2b, 0x21, 0xbd, 0x41, 0x98, 0x6e, 0xa8, 0x0c, + 0x20, 0xd3, 0x16, 0x89, 0x2e, 0x6b, 0xac, 0x3b, 0x67, 0xef, 0x01, 0x69, + 0xd2, 0xd6, 0x51, 0xea, 0x38, 0x99, 0x6e, 0xc7, 0x44, 0x69, 0xf4, 0x74, + 0xfc, 0xa9, 0x29, 0x1f, 0xac, 0x1f, 0x91, 0xbd, 0xa3, 0xda, 0x49, 0x33, + 0xf0, 0x10, 0xaa, 0x65, 0xda, 0xf7, 0xb9, 0xf5, 0x6d, 0xd1, 0xae, 0x01, + 0x84, 0x1f, 0xa5, 0xec, 0x13, 0xf0, 0xe5, 0x17, 0xa7, 0x90, 0xea, 0xfe, + 0x96, 0x8d, 0x07, 0x9e, 0xf2, 0xe4, 0x1c, 0xa0, 0xe6, 0xda, 0x0b, 0x48, + 0x24, 0xbd, 0xd2, 0x7f, 0xcd, 0x09, 0x29, 0x8d, 0xed, 0x61, 0x60, 0x01, + 0xb0, 0xe7, 0x41, 0xd7, 0xc0, 0x18, 0x85, 0x27, 0x52, 0x6f, 0x7d, 0x60, + 0x12, 0x2b, 0x61, 0x2d, 0x73, 0x3b, 0x11, 0x03, 0x95, 0x0a, 0x9e, 0x2f, + 0x73, 0xda, 0xe9, 0xf6, 0x3f, 0x68, 0x71, 0x10, 0x09, 0x81, 0xf4, 0x7c, + 0x55, 0xd6, 0x30, 0x9a, 0xf6, 0xce, 0xd2, 0xe0, 0x49, 0x23, 0x53, 0xe4, + 0x92, 0x90, 0x55, 0xb2, 0xde, 0xa7, 0x75, 0xae, 0xaf, 0x4a, 0x43, 0x19, + 0x4b, 0xf4, 0xfc, 0xe0, 0x4b, 0xa3, 0xe6, 0x55, 0xe3, 0x65, 0x67, 0xd6, + 0xad, 0xa7, 0xdc, 0xcd, 0xb2, 0x3c, 0x9f, 0xba, 0x3f, 0x22, 0x06, 0xcb, + 0x1a, 0x01, 0xa9, 0xa3, 0x73, 0x9c, 0x4e, 0xbc, 0x7b, 0x41, 0x1a, 0xfc, + 0xd5, 0xa3, 0x51, 0x18, 0xb5, 0x9d, 0xa3, 0x79, 0x8f, 0x56, 0x3b, 0x96, + 0x84, 0x94, 0xd3, 0xb1, 0x95, 0x5d, 0x78, 0xa6, 0x25, 0x8d, 0x2d, 0x79, + 0x1c, 0x41, 0x07, 0x48, 0x8f, 0x82, 0x1e, 0x45, 0x57, 0x7d, 0xb4, 0xb5, + 0xcf, 0xdb, 0x5b, 0x43, 0x36, 0x36, 0x3b, 0x09, 0xdd, 0x3f, 0x19, 0x47, + 0xa9, 0xb3, 0x97, 0x65, 0xa5, 0xc4, 0xb6, 0x6b, 0x63, 0x5b, 0x11, 0x1b, + 0x01, 0x27, 0xf2, 0xa0, 0xb5, 0xd7, 0x5f, 0xd4, 0x2e, 0x0f, 0x64, 0x54, + 0xd7, 0x35, 0xb5, 0x99, 0xfa, 0x51, 0xf4, 0xb4, 0x49, 0x4e, 0x45, 0x0f, + 0x71, 0xb6, 0xf7, 0x93, 0xf4, 0xb2, 0x5d, 0xaf, 0x80, 0x68, 0x6b, 0x07, + 0xe2, 0x9f, 0x2d, 0xa3, 0xed, 0x77, 0xb8, 0x19, 0x73, 0x9b, 0x5b, 0x48, + 0xf0, 0xd2, 0x7f, 0x82, 0xaf, 0x8b, 0xfa, 0x7a, 0x8b, 0xaa, 0x88, 0xb6, + 0xd7, 0x3a, 0x49, 0xee, 0x6c, 0x93, 0xf8, 0x2b, 0x0e, 0x05, 0xf9, 0x19, + 0x0f, 0xfc, 0xe3, 0x63, 0x5a, 0xef, 0xec, 0x00, 0x00, 0xfc, 0x52, 0x53, + 0x51, 0xd9, 0x17, 0xbb, 0x2d, 0xcd, 0xfa, 0x5e, 0x96, 0xf2, 0x07, 0xf2, + 0x74, 0x00, 0x7e, 0x08, 0x8e, 0xbb, 0xf5, 0x90, 0x5e, 0x20, 0x0d, 0xa4, + 0x83, 0xda, 0x75, 0x28, 0x58, 0xad, 0x70, 0xce, 0xb1, 0xce, 0x3f, 0x49, + 0xc4, 0x08, 0xfe, 0xb1, 0x71, 0xfc, 0x14, 0x5e, 0xf1, 0x6d, 0xf9, 0x32, + 0x34, 0x0f, 0x8f, 0x93, 0x40, 0x49, 0x4d, 0xdb, 0x71, 0x00, 0xf5, 0x2e, + 0x61, 0x01, 0x96, 0x03, 0xea, 0x37, 0xf9, 0x43, 0xe8, 0x90, 0x8b, 0x76, + 0x0d, 0x45, 0xb0, 0xe6, 0x82, 0x0f, 0x97, 0x92, 0xa0, 0x2d, 0xb5, 0xf8, + 0xb6, 0x10, 0xf9, 0x0f, 0x73, 0x00, 0x3f, 0x07, 0x1d, 0xdf, 0x82, 0xbd, + 0x95, 0x92, 0x1b, 0x6b, 0x08, 0x13, 0xb4, 0xbb, 0x5f, 0xec, 0xca, 0x4a, + 0x72, 0x73, 0x3a, 0x25, 0x2f, 0xba, 0x90, 0xc1, 0x1e, 0xa3, 0xc8, 0x3e, + 0x10, 0x1a, 0x5c, 0xb3, 0x72, 0x7a, 0x43, 0xa8, 0xc9, 0x65, 0x63, 0xe8, + 0xbc, 0x13, 0x1f, 0x35, 0xd3, 0x53, 0x7d, 0x77, 0xe4, 0x56, 0xd1, 0xf4, + 0xaa, 0x63, 0x9e, 0x47, 0xf5, 0x80, 0x08, 0x79, 0xb5, 0x35, 0xd7, 0xd7, + 0x68, 0xe0, 0xb5, 0x8d, 0x1f, 0xda, 0x32, 0x92, 0x93, 0xf4, 0x8c, 0x36, + 0x61, 0xd8, 0xf2, 0x46, 0xd6, 0x57, 0x53, 0x4b, 0x8f, 0xc7, 0xba, 0xbc, + 0xd7, 0x01, 0x63, 0x9c, 0x04, 0x43, 0xbe, 0xf8, 0x44, 0xb2, 0xb1, 0xe9, + 0x64, 0x87, 0x37, 0xdb, 0xb1, 0xac, 0x20, 0xf0, 0x41, 0x94, 0x21, 0xdf, + 0xc2, 0x49, 0xfc, 0xa9, 0x29, 0xe7, 0x31, 0xf3, 0x3a, 0x97, 0x4d, 0xc9, + 0x75, 0xf4, 0x9f, 0x5a, 0xa9, 0x20, 0xb2, 0xdf, 0x70, 0x82, 0x66, 0x03, + 0x86, 0xa1, 0x69, 0x63, 0xf5, 0xcc, 0x4b, 0x72, 0xdf, 0x7d, 0x8d, 0x76, + 0x1d, 0xb7, 0xe9, 0x6b, 0x6d, 0xf7, 0x52, 0xf3, 0xff, 0x00, 0x18, 0xde, + 0x3e, 0x68, 0x34, 0xd2, 0x5b, 0x8f, 0xea, 0x57, 0x50, 0x75, 0x4e, 0x77, + 0x77, 0x6e, 0x3b, 0x40, 0x8d, 0xad, 0x9e, 0xdd, 0xd4, 0x5f, 0x56, 0x0d, + 0xae, 0x04, 0x31, 0xf5, 0xc6, 0x8e, 0xda, 0x67, 0x5f, 0x36, 0x94, 0x94, + 0xec, 0xb2, 0x81, 0x65, 0x84, 0x10, 0x36, 0x58, 0x37, 0x31, 0xe0, 0xcb, + 0x4f, 0x94, 0xff, 0x00, 0x15, 0x5b, 0x27, 0x07, 0xd3, 0x25, 0xc3, 0xd8, + 0x63, 0x99, 0x21, 0xd0, 0x7c, 0xc2, 0xa5, 0x45, 0x8c, 0xc5, 0x71, 0x76, + 0x2d, 0xfe, 0x93, 0x5d, 0xcb, 0x59, 0xf4, 0x67, 0xf9, 0x55, 0x3f, 0x42, + 0xad, 0xbb, 0xab, 0x38, 0x80, 0xdb, 0x29, 0xf5, 0x67, 0x97, 0x53, 0xc8, + 0xf1, 0x2e, 0xa9, 0xda, 0xff, 0x00, 0x9a, 0x4a, 0x4a, 0x6a, 0x64, 0x51, + 0x6d, 0x2d, 0xf7, 0x89, 0x69, 0xe0, 0xf1, 0xf8, 0xfd, 0x12, 0xad, 0xf4, + 0x36, 0xb1, 0xb8, 0x17, 0x39, 0x8d, 0x87, 0xda, 0xf7, 0x30, 0xc8, 0x89, + 0xd0, 0x05, 0x67, 0x16, 0xcc, 0x6c, 0xec, 0x73, 0x65, 0x0f, 0x24, 0x30, + 0x6d, 0x7b, 0x08, 0xef, 0x1d, 0xda, 0x75, 0xd1, 0x13, 0xa7, 0x50, 0xda, + 0x68, 0xaa, 0xbe, 0xc6, 0xc7, 0x3e, 0x3c, 0x24, 0xf0, 0x92, 0x91, 0xf5, + 0x9c, 0x2b, 0xb3, 0x31, 0xad, 0xa2, 0xb2, 0x43, 0x9e, 0x2b, 0xaf, 0xca, + 0x1d, 0x63, 0x41, 0xfc, 0x12, 0xff, 0x00, 0x98, 0x9d, 0x0a, 0xa6, 0x02, + 0x5d, 0x73, 0x88, 0xdc, 0x27, 0x7c, 0x13, 0x3c, 0x1d, 0x1b, 0xf9, 0xab, + 0x56, 0xa0, 0xd2, 0xe7, 0x92, 0x60, 0x17, 0xb0, 0x79, 0x7d, 0x29, 0x51, + 0xbf, 0xa8, 0xb2, 0x7d, 0x4f, 0xa5, 0x41, 0x0c, 0x15, 0xed, 0xe5, 0xce, + 0x2e, 0x2d, 0x71, 0xf8, 0x24, 0xa7, 0x8f, 0xea, 0x9f, 0x57, 0x33, 0xfa, + 0x79, 0x2f, 0xa8, 0x8c, 0xec, 0x7e, 0xc5, 0xa3, 0x6d, 0xed, 0xf8, 0xb4, + 0x72, 0xb2, 0xbd, 0x5a, 0xb6, 0xc4, 0xbb, 0x74, 0xc7, 0xa5, 0x07, 0xd4, + 0x9f, 0x08, 0x5e, 0x86, 0x32, 0xb1, 0xed, 0x69, 0xb7, 0x77, 0x04, 0xc7, + 0x9c, 0x18, 0x3c, 0xaa, 0x1f, 0xb3, 0x71, 0x3e, 0xdb, 0xfb, 0x5b, 0xd2, + 0xfd, 0x2e, 0xc9, 0xf5, 0x64, 0xfd, 0x2d, 0xdb, 0x67, 0xc2, 0x76, 0xa4, + 0xa4, 0x35, 0x34, 0x6f, 0x60, 0x33, 0xb5, 0xa5, 0xb3, 0xf0, 0x0a, 0xdb, + 0x5f, 0x78, 0xcf, 0xc7, 0xac, 0x80, 0xea, 0x48, 0xb5, 0xee, 0xfd, 0xed, + 0xcd, 0xfa, 0x3f, 0x95, 0x53, 0x27, 0xdc, 0x1a, 0x3f, 0x78, 0x4f, 0xde, + 0x02, 0xbf, 0x51, 0x16, 0x75, 0x06, 0xf7, 0xd9, 0x5b, 0xe3, 0xe6, 0x40, + 0x49, 0x4f, 0x37, 0x9d, 0x5d, 0x6f, 0xea, 0x79, 0x76, 0x3a, 0x08, 0xf5, + 0x48, 0x3e, 0x22, 0x04, 0x2a, 0x8e, 0x64, 0xcc, 0xb6, 0x24, 0xf7, 0x57, + 0x2e, 0x67, 0xa9, 0x93, 0x93, 0x76, 0xd9, 0x63, 0xad, 0xb0, 0xcb, 0x23, + 0x77, 0xd2, 0x3c, 0x8e, 0x0a, 0x8b, 0x29, 0x6b, 0x99, 0xb9, 0x8f, 0xf5, + 0x1a, 0xde, 0x7b, 0x11, 0xe4, 0x5a, 0x92, 0x9c, 0xff, 0x00, 0xb3, 0xbc, + 0x3c, 0x35, 0x87, 0x5f, 0xe4, 0x19, 0xff, 0x00, 0x6a, 0x23, 0x2d, 0xc8, + 0x61, 0x87, 0x7b, 0xa3, 0x89, 0x10, 0x7e, 0xfd, 0x15, 0xa0, 0xda, 0xc8, + 0x12, 0xd1, 0x20, 0xf1, 0x10, 0x7e, 0xf5, 0x61, 0x95, 0x6f, 0x70, 0xdc, + 0xcd, 0xed, 0xec, 0xdd, 0x26, 0x7b, 0xf3, 0xca, 0x4a, 0x6b, 0x0b, 0xc1, + 0xd2, 0xea, 0xe7, 0x70, 0x90, 0x63, 0xbf, 0x8c, 0x8f, 0xee, 0x56, 0x3a, + 0x33, 0x2b, 0xb3, 0xab, 0xfa, 0x95, 0x48, 0x6b, 0x2a, 0x74, 0x83, 0xcc, + 0x92, 0x3c, 0x11, 0xce, 0x23, 0x46, 0x9e, 0x99, 0x1a, 0x71, 0x3f, 0xde, + 0xa7, 0xd0, 0xea, 0xac, 0x65, 0xe4, 0x90, 0x23, 0x68, 0x63, 0x63, 0x88, + 0x99, 0x3d, 0xd2, 0x53, 0xa2, 0x5d, 0x6b, 0xb2, 0x4b, 0x44, 0x86, 0xd6, + 0xc6, 0xc7, 0xc5, 0xd3, 0xa2, 0xbc, 0x4e, 0xdc, 0x7c, 0x82, 0xe1, 0xfe, + 0x0a, 0x3f, 0xce, 0x78, 0x1f, 0xc1, 0x55, 0x2e, 0xd8, 0x1c, 0x47, 0x0f, + 0xb0, 0x89, 0xf2, 0x69, 0x8d, 0x11, 0x72, 0xb7, 0x3b, 0xa7, 0xd9, 0xb1, + 0xdb, 0x6c, 0xb1, 0xf5, 0x34, 0x38, 0x89, 0xd0, 0x39, 0xce, 0x3a, 0x7c, + 0x92, 0x53, 0x1c, 0x0a, 0xc0, 0x68, 0x1f, 0xbc, 0x01, 0xfb, 0x8f, 0xfb, + 0x15, 0x7c, 0xa7, 0x0f, 0x58, 0x9e, 0xda, 0x98, 0xf9, 0xca, 0xbd, 0x4f, + 0x6f, 0xdd, 0x01, 0xbf, 0x90, 0x95, 0x95, 0x98, 0x5c, 0xc1, 0x6b, 0xda, + 0x0b, 0x88, 0x02, 0x23, 0xf9, 0x44, 0x0f, 0xe2, 0x92, 0x99, 0xb4, 0x0d, + 0x1d, 0x1f, 0x44, 0xee, 0x8f, 0x03, 0x0a, 0xde, 0x3e, 0x80, 0x07, 0x73, + 0xb6, 0x3f, 0x15, 0x56, 0xa3, 0x2c, 0xd3, 0x40, 0xed, 0x08, 0xef, 0xaa, + 0xb5, 0x59, 0x20, 0x39, 0xfc, 0xc4, 0x00, 0x3e, 0x09, 0x29, 0x2b, 0x1c, + 0x0b, 0xdb, 0xdb, 0x6c, 0x83, 0xf3, 0x47, 0xba, 0xd0, 0xd6, 0x56, 0xde, + 0x46, 0xd9, 0x3e, 0x52, 0x4f, 0xf0, 0x41, 0xa8, 0x38, 0xdc, 0xc6, 0xcf, + 0x62, 0x5d, 0x3d, 0xe5, 0x4f, 0xa8, 0x10, 0xdf, 0x50, 0xf6, 0x00, 0x34, + 0x0f, 0x80, 0x84, 0x94, 0xc3, 0x11, 0xa2, 0xc6, 0x6f, 0xe2, 0x1c, 0x5f, + 0x1f, 0x15, 0x07, 0x3a, 0xb1, 0xbf, 0x25, 0xd2, 0x3d, 0x1a, 0xec, 0x7e, + 0x9c, 0x68, 0xd9, 0xd5, 0x12, 0xb0, 0x29, 0x63, 0x58, 0x04, 0x6f, 0x66, + 0xe3, 0x1c, 0x4b, 0xbb, 0xaa, 0x3d, 0x4e, 0xe3, 0x57, 0x4a, 0xcf, 0x20, + 0xc7, 0xe8, 0x2c, 0x68, 0x8f, 0xe5, 0x08, 0xfe, 0x29, 0x29, 0xc2, 0xe8, + 0x8d, 0x03, 0x1f, 0x1d, 0xad, 0xd0, 0xbd, 0x9e, 0xa1, 0x3c, 0x89, 0x24, + 0x8f, 0xe0, 0xac, 0x51, 0x5b, 0xda, 0xeb, 0x9c, 0xe3, 0xab, 0xef, 0xb1, + 0xff, 0x00, 0x2d, 0xdb, 0x47, 0xe4, 0x42, 0xc0, 0xae, 0xdc, 0x46, 0xe2, + 0xd1, 0x6c, 0x17, 0xb9, 0xa1, 0xb2, 0x38, 0x02, 0x09, 0x83, 0xf3, 0x2a, + 0xe8, 0x23, 0x7f, 0xc4, 0x91, 0x1f, 0xda, 0x71, 0x29, 0x29, 0xa7, 0x8f, + 0x55, 0x82, 0xd0, 0xf7, 0x88, 0x2e, 0x75, 0x8e, 0xf9, 0x13, 0x0d, 0xfc, + 0x15, 0x59, 0x0d, 0x6e, 0x55, 0xc4, 0xc3, 0x7d, 0x42, 0xdf, 0xfa, 0x50, + 0xb5, 0xab, 0x6f, 0xd1, 0x11, 0x20, 0x44, 0xfd, 0xcb, 0x39, 0xb4, 0x32, + 0xda, 0x00, 0x79, 0x3b, 0x5e, 0xfd, 0xce, 0x07, 0xc0, 0x12, 0xee, 0xc9, + 0x29, 0x7b, 0x18, 0x1b, 0x8d, 0xec, 0x10, 0x0b, 0xc9, 0x60, 0xf9, 0xc0, + 0x51, 0xc9, 0xb0, 0xb4, 0x6a, 0xe0, 0x49, 0x97, 0x1f, 0x9b, 0x78, 0xfb, + 0xd1, 0x2d, 0x63, 0xcd, 0x35, 0xd4, 0x3e, 0x98, 0x0d, 0x70, 0x00, 0x71, + 0xac, 0xa0, 0x75, 0x36, 0x3b, 0x53, 0x1e, 0xde, 0x01, 0xf1, 0x20, 0x03, + 0x1f, 0x82, 0x4a, 0x5f, 0x0e, 0xd7, 0x30, 0xdb, 0x78, 0xd0, 0x96, 0x96, + 0x8f, 0x31, 0xc2, 0xd0, 0xb7, 0xf4, 0xb6, 0xe3, 0x33, 0xf7, 0xac, 0x1f, + 0x73, 0x43, 0x42, 0xa3, 0x50, 0x68, 0xdd, 0x40, 0xd1, 0xcc, 0x0c, 0x0e, + 0xf0, 0x93, 0x04, 0xfe, 0x55, 0xa1, 0x88, 0xd0, 0xec, 0xdc, 0x6d, 0xba, + 0x80, 0x09, 0x9f, 0x8b, 0x92, 0x53, 0xb7, 0x94, 0xd0, 0x6a, 0x7b, 0x5b, + 0xf9, 0xc1, 0xb3, 0xf7, 0xc2, 0xa2, 0xff, 0x00, 0xe6, 0xdf, 0x1a, 0x18, + 0x7c, 0x77, 0xd4, 0x82, 0xb4, 0x72, 0xd8, 0x5b, 0x47, 0xaa, 0x0e, 0x84, + 0xb1, 0xbe, 0x72, 0x08, 0x2b, 0x27, 0x26, 0xdf, 0x49, 0x8f, 0x87, 0x43, + 0xf6, 0xd8, 0x5a, 0x40, 0xd2, 0x40, 0x99, 0x49, 0x4e, 0x2d, 0x17, 0xe5, + 0xe2, 0xb4, 0xd7, 0x98, 0xc7, 0x3a, 0xa1, 0x03, 0x75, 0x60, 0x1f, 0xed, + 0x16, 0x68, 0xe5, 0x76, 0xb7, 0x61, 0xe5, 0x7f, 0x47, 0xb5, 0xb6, 0x3b, + 0xbb, 0x38, 0x77, 0xdd, 0xa3, 0x94, 0x69, 0xc8, 0xaa, 0xc6, 0xb5, 0xb9, + 0x4c, 0x1b, 0xbf, 0x7d, 0xba, 0xb7, 0xe6, 0x3b, 0x21, 0x64, 0x74, 0xec, + 0x6b, 0x01, 0xb2, 0xb8, 0x75, 0x8d, 0xe0, 0x8f, 0x3f, 0x31, 0xee, 0x09, + 0x29, 0x35, 0x94, 0x16, 0x0d, 0xcf, 0x68, 0x20, 0x72, 0x79, 0xd3, 0xcd, + 0xcd, 0x55, 0xdc, 0xea, 0xf7, 0x0d, 0xcd, 0xf6, 0x0e, 0x0b, 0x7b, 0x0f, + 0x92, 0x0d, 0x19, 0x1d, 0x4b, 0x1a, 0xdd, 0xac, 0x7f, 0xa8, 0x1b, 0xab, + 0x59, 0x7e, 0xb3, 0xfd, 0x5b, 0x07, 0xf1, 0x56, 0x3e, 0xdd, 0x86, 0xf1, + 0xb7, 0x3a, 0xa7, 0x62, 0x58, 0x78, 0x7f, 0x2c, 0x3f, 0xda, 0x6a, 0x4a, + 0x5d, 0x8d, 0x6b, 0x08, 0xb2, 0x8b, 0x77, 0x80, 0x75, 0x27, 0xe9, 0x6b, + 0xda, 0x64, 0x15, 0xbd, 0xd3, 0xe6, 0xd6, 0xe3, 0xba, 0x77, 0x0d, 0x5c, + 0x27, 0xc2, 0x4a, 0xc1, 0x38, 0xf5, 0xda, 0xd2, 0xea, 0x5e, 0xdb, 0x63, + 0x42, 0x59, 0x0d, 0x3f, 0x18, 0xfa, 0x2e, 0xf9, 0x2d, 0xde, 0x94, 0x0d, + 0x74, 0xe3, 0x10, 0x61, 0xbe, 0x9c, 0x6d, 0x3a, 0x41, 0x05, 0xd2, 0x92, + 0x9b, 0xdb, 0x9a, 0xd0, 0x43, 0x9a, 0x36, 0xef, 0x67, 0xdf, 0xaf, 0xf7, + 0x2c, 0xdc, 0x8d, 0x84, 0xd8, 0xda, 0xc6, 0xd1, 0x49, 0xda, 0xc1, 0x31, + 0x26, 0x77, 0xab, 0x56, 0xdd, 0xb0, 0x57, 0x1e, 0xe7, 0x59, 0x64, 0x0f, + 0x93, 0x5f, 0x2a, 0x9d, 0xb6, 0x0b, 0x6d, 0x75, 0x75, 0xbb, 0x58, 0xde, + 0xe3, 0xe3, 0xb7, 0x73, 0xa0, 0x7e, 0x09, 0x29, 0xad, 0x93, 0x8d, 0x7d, + 0x55, 0x3a, 0xda, 0xc1, 0xb8, 0x7a, 0x76, 0x3b, 0x73, 0x47, 0xd1, 0xf7, + 0x4b, 0x8c, 0x76, 0xec, 0x9f, 0xed, 0x77, 0xfd, 0x93, 0xec, 0xf1, 0xec, + 0xfb, 0x34, 0x72, 0x67, 0x7c, 0x4c, 0xa9, 0xb7, 0xa7, 0x75, 0x2b, 0xb1, + 0x9f, 0x95, 0x84, 0xd3, 0x65, 0x65, 0x8e, 0xad, 0xf5, 0x83, 0xee, 0x71, + 0xd5, 0xdc, 0x72, 0x67, 0x72, 0x7f, 0xd6, 0x7f, 0x68, 0x6e, 0xd8, 0x77, + 0x7a, 0x7f, 0x67, 0xdb, 0xb7, 0xf3, 0x7d, 0x2e, 0x36, 0xf8, 0xa4, 0xa5, + 0x9a, 0xd2, 0x6c, 0xac, 0xff, 0x00, 0xc2, 0x09, 0xfb, 0x8b, 0x91, 0xfa, + 0x65, 0xcc, 0xba, 0xf3, 0x63, 0x08, 0x77, 0xe8, 0x6d, 0x92, 0x0e, 0xef, + 0xa2, 0xf5, 0x59, 0xd6, 0xed, 0xaa, 0xfb, 0x1a, 0x0e, 0xfa, 0x5e, 0xc2, + 0x3e, 0x62, 0x13, 0x74, 0x9f, 0x51, 0x94, 0x67, 0x64, 0x35, 0xa1, 0xb5, + 0xb2, 0xa7, 0x31, 0x84, 0x44, 0x12, 0xe0, 0x5c, 0x4e, 0x9e, 0x69, 0x29, + 0xc3, 0xaa, 0xef, 0x55, 0xaf, 0x16, 0x6e, 0x1b, 0x89, 0x24, 0xb6, 0x27, + 0x5e, 0x02, 0x8b, 0x05, 0x35, 0x59, 0xbe, 0xbb, 0x1c, 0xdb, 0x48, 0x82, + 0xe3, 0xaf, 0x3e, 0x32, 0x8b, 0x8d, 0x5b, 0xc3, 0x18, 0x5e, 0x38, 0x12, + 0x48, 0xf1, 0x29, 0xed, 0xc7, 0x6b, 0x9f, 0xed, 0x69, 0x00, 0xc9, 0x31, + 0xca, 0x4a, 0x6e, 0x16, 0x55, 0x63, 0xab, 0xb0, 0xbb, 0xdc, 0x00, 0x16, + 0x39, 0xb2, 0x27, 0xc7, 0xe8, 0x76, 0xf8, 0xa3, 0xb6, 0x86, 0xed, 0x2f, + 0xa5, 0xfb, 0x9a, 0x34, 0x3e, 0x9b, 0x9a, 0x75, 0xf3, 0x6f, 0xfb, 0x16, + 0x6d, 0x4d, 0x25, 0x9e, 0xd1, 0x06, 0x48, 0x0e, 0xf8, 0x2b, 0x75, 0x31, + 0xed, 0xac, 0x1b, 0x06, 0xf9, 0xd4, 0x9e, 0xf1, 0xfd, 0x6e, 0x52, 0x53, + 0x7d, 0xb1, 0xb3, 0x73, 0x46, 0xe3, 0x1e, 0xd3, 0x05, 0x9f, 0x90, 0xa2, + 0xf4, 0xca, 0x62, 0xdc, 0x92, 0x79, 0xdc, 0x00, 0xff, 0x00, 0x35, 0x53, + 0xde, 0x1f, 0x63, 0x5e, 0x49, 0x96, 0x02, 0x1a, 0x0f, 0x06, 0x7f, 0x8a, + 0xb7, 0x86, 0x4e, 0x3e, 0x05, 0x8e, 0x79, 0x2e, 0x73, 0xec, 0x3e, 0xe3, + 0xa9, 0xd0, 0xc2, 0x4a, 0x67, 0x4d, 0xd9, 0x0e, 0xc7, 0x8c, 0x9a, 0x3d, + 0x07, 0x3b, 0x7b, 0xb1, 0xdd, 0xab, 0xf7, 0x8d, 0xce, 0x71, 0x25, 0xa0, + 0x68, 0x40, 0xfb, 0xd5, 0xcc, 0xd6, 0xb4, 0xe1, 0x56, 0xe0, 0xe9, 0x1e, + 0xad, 0x6d, 0x11, 0xa7, 0xe6, 0xb8, 0xff, 0x00, 0x14, 0x5a, 0x72, 0x9e, + 0xe0, 0xd6, 0x1f, 0x77, 0xa6, 0xc0, 0x02, 0x86, 0x4f, 0xb6, 0xac, 0x76, + 0x44, 0x87, 0x5c, 0xe7, 0x3b, 0xe4, 0xd0, 0x12, 0x53, 0x2a, 0x41, 0x0d, + 0xb1, 0xfd, 0x80, 0xd3, 0xe4, 0xd8, 0x59, 0xd6, 0x49, 0xde, 0x0f, 0x04, + 0xeb, 0x3e, 0x21, 0x69, 0x34, 0x1f, 0x42, 0xc3, 0xf1, 0x8e, 0xde, 0x4b, + 0x36, 0xf6, 0xe8, 0x48, 0xe5, 0xce, 0x74, 0xf9, 0x6b, 0x1f, 0xc1, 0x25, + 0x30, 0xaa, 0xda, 0xc5, 0xed, 0xa4, 0x92, 0x5c, 0x58, 0x5e, 0x48, 0xe0, + 0x06, 0x44, 0x83, 0xf7, 0xab, 0x74, 0x8d, 0xf5, 0x56, 0xe0, 0x75, 0x3b, + 0x89, 0x8f, 0x8a, 0xa6, 0xd1, 0x19, 0x56, 0x38, 0x81, 0xed, 0xa6, 0x34, + 0xe7, 0xdc, 0xe3, 0xfd, 0xca, 0xfe, 0x23, 0x03, 0x6a, 0x61, 0x1a, 0x8d, + 0xbf, 0xc2, 0x52, 0x53, 0x67, 0x70, 0x65, 0x76, 0x58, 0xd0, 0x5e, 0xe6, + 0x81, 0x0d, 0x68, 0x97, 0x7c, 0x82, 0x15, 0xed, 0x2f, 0x61, 0x0e, 0xfa, + 0x45, 0xec, 0x93, 0xe6, 0x54, 0xf1, 0x68, 0x32, 0xf7, 0x09, 0x2e, 0x79, + 0x1b, 0x8f, 0x80, 0x68, 0x4d, 0x91, 0x63, 0x77, 0xb5, 0x83, 0xdc, 0xe2, + 0xfd, 0xe4, 0x0e, 0xc1, 0xa3, 0xba, 0x4a, 0x66, 0xea, 0x1c, 0xd6, 0xbc, + 0x93, 0x3a, 0x35, 0xa3, 0xe0, 0xc0, 0x25, 0x65, 0xf5, 0x5a, 0x4f, 0xec, + 0x7c, 0xb7, 0x19, 0xfd, 0x3b, 0xa9, 0xad, 0xb3, 0xc4, 0xba, 0xc6, 0x08, + 0x1f, 0x25, 0xb0, 0xfb, 0x5b, 0x4e, 0x1d, 0xa6, 0xd3, 0x3d, 0x9a, 0x79, + 0x00, 0x90, 0xd6, 0xf6, 0xf8, 0xac, 0xbf, 0xac, 0x76, 0x1a, 0xfa, 0x6f, + 0x4e, 0xa1, 0xbf, 0x4a, 0xcc, 0x9a, 0xdc, 0x47, 0x8e, 0xdd, 0xcf, 0xfe, + 0x09, 0x29, 0xce, 0xc8, 0x2d, 0x3d, 0x50, 0x56, 0x01, 0x26, 0xba, 0xf4, + 0x8e, 0xd3, 0xdc, 0xfd, 0xc9, 0x06, 0x00, 0x2b, 0x00, 0x6e, 0x20, 0x6e, + 0x1f, 0x13, 0x21, 0x03, 0x22, 0x68, 0xea, 0x72, 0x1a, 0xf7, 0x97, 0x97, + 0x0d, 0xfc, 0xc4, 0xfb, 0xa0, 0xfc, 0x15, 0xfa, 0xd9, 0x58, 0x73, 0x1c, + 0xff, 0x00, 0xa7, 0xe9, 0xb0, 0x3a, 0x7c, 0xa7, 0xff, 0x00, 0x24, 0x92, + 0x91, 0x63, 0x83, 0xfa, 0x67, 0x81, 0xf4, 0x24, 0x9f, 0x90, 0xd1, 0x54, + 0xaf, 0x4c, 0x77, 0x34, 0x08, 0xda, 0xe8, 0x07, 0xc8, 0x06, 0x8f, 0xe2, + 0xad, 0xd2, 0xf7, 0x8a, 0xb2, 0x9c, 0x74, 0x2f, 0x2e, 0xf6, 0xff, 0x00, + 0x54, 0xc0, 0xfb, 0xd0, 0x03, 0x6a, 0x75, 0x0d, 0x6c, 0xfb, 0x5e, 0xed, + 0xbf, 0x12, 0x48, 0x9f, 0xc8, 0x92, 0x9b, 0xe2, 0x8a, 0x8d, 0x16, 0x13, + 0xab, 0xb7, 0x86, 0x7c, 0xb6, 0xc4, 0x2c, 0xac, 0xd0, 0xdb, 0x4d, 0x4d, + 0x1f, 0x9f, 0x73, 0xc6, 0xbe, 0x00, 0xec, 0x5a, 0xb5, 0xb4, 0x33, 0x08, + 0x3d, 0x82, 0x77, 0x59, 0xb8, 0x0e, 0xe7, 0x58, 0xfc, 0x8b, 0x39, 0xd5, + 0x93, 0x9f, 0x45, 0x00, 0x00, 0x2b, 0x93, 0xf3, 0x9d, 0xc5, 0x25, 0x2a, + 0xf0, 0x2b, 0x75, 0xb6, 0x00, 0x0b, 0x86, 0xe7, 0x0d, 0x39, 0xda, 0xd3, + 0x1f, 0x8a, 0xb3, 0xd1, 0x5b, 0x27, 0x1d, 0xce, 0x10, 0xe1, 0x43, 0x1c, + 0x67, 0xc5, 0xda, 0xa0, 0xe5, 0xed, 0x73, 0xde, 0x23, 0xb3, 0xc4, 0xf1, + 0xa4, 0x41, 0x5a, 0x5d, 0x32, 0xa2, 0xcf, 0x44, 0x78, 0x51, 0x58, 0x8f, + 0xec, 0x84, 0x94, 0xe9, 0xe6, 0x01, 0xf6, 0x36, 0xb7, 0xc6, 0xc1, 0x3f, + 0x8a, 0xc2, 0xea, 0x0f, 0xb0, 0x61, 0xdc, 0xfa, 0xe0, 0xbc, 0x54, 0xed, + 0xb3, 0xa6, 0xa4, 0x80, 0xb6, 0x73, 0x1f, 0x35, 0xb1, 0xa3, 0xb3, 0xf5, + 0xf9, 0x02, 0xb1, 0xb3, 0xcb, 0x06, 0x35, 0xc2, 0xc9, 0xda, 0x5a, 0xd6, + 0x98, 0x3e, 0x2e, 0x49, 0x4e, 0x16, 0x37, 0x50, 0x23, 0xdb, 0xd4, 0x18, + 0xea, 0xe6, 0x36, 0xd8, 0xe0, 0x60, 0x7c, 0x5c, 0xcf, 0xe2, 0x15, 0xfa, + 0x6a, 0xdc, 0x0b, 0xf1, 0x6c, 0x6b, 0xda, 0x7b, 0x82, 0x09, 0xff, 0x00, + 0x38, 0x7f, 0x10, 0xa9, 0x96, 0x38, 0x0f, 0x63, 0xa7, 0xc8, 0xa9, 0xd7, + 0x8b, 0x53, 0x9a, 0x2c, 0x6d, 0x6e, 0xad, 0xf3, 0xb5, 0xd7, 0x52, 0x76, + 0x41, 0x3f, 0xd5, 0x30, 0x7e, 0xe4, 0x94, 0x9e, 0xc6, 0xd8, 0x09, 0x6b, + 0xf5, 0x81, 0xdc, 0x47, 0xe2, 0xa4, 0xc1, 0x55, 0x9f, 0xa3, 0x33, 0x5b, + 0x23, 0xb8, 0xdc, 0xd9, 0xe1, 0x46, 0xbb, 0x33, 0x18, 0x21, 0x8f, 0xaf, + 0x3a, 0xbe, 0xed, 0x74, 0x32, 0xc0, 0x3f, 0xac, 0x34, 0xfb, 0xd2, 0x17, + 0x60, 0xb8, 0xfa, 0x56, 0x7a, 0x98, 0x36, 0x1e, 0x1b, 0x67, 0xd0, 0x9f, + 0x8f, 0x09, 0x29, 0x0d, 0x9d, 0x29, 0xb5, 0x7e, 0x9e, 0xb7, 0x9a, 0x01, + 0xd0, 0x5f, 0x51, 0xf6, 0xff, 0x00, 0x68, 0x2e, 0x8f, 0xa4, 0x36, 0xda, + 0xb1, 0xe9, 0xaf, 0x22, 0xc1, 0x6b, 0xeb, 0x05, 0xce, 0xb2, 0x34, 0x33, + 0x2e, 0xd3, 0xe4, 0xb0, 0x8d, 0x16, 0x7a, 0x6e, 0x35, 0x91, 0x63, 0x0e, + 0x9b, 0x99, 0xa8, 0xf9, 0x82, 0xb7, 0x31, 0xdc, 0xc6, 0x36, 0xb6, 0xfd, + 0x02, 0x6b, 0x00, 0x7c, 0xab, 0x94, 0x94, 0x87, 0x3b, 0x77, 0xaf, 0x40, + 0xb0, 0x86, 0x55, 0x8f, 0x6d, 0x56, 0xee, 0xed, 0xaf, 0xa8, 0x1d, 0xbb, + 0xca, 0x0a, 0xa1, 0x95, 0x70, 0xaa, 0xf7, 0x96, 0xb4, 0xbd, 0xce, 0x2e, + 0x15, 0xb5, 0xa2, 0x5d, 0x04, 0x98, 0xd3, 0xe0, 0x16, 0x86, 0x63, 0xcd, + 0x55, 0xbf, 0x28, 0xc6, 0xd0, 0x0b, 0x00, 0x22, 0x4c, 0xbc, 0x06, 0x08, + 0xf8, 0x6e, 0x28, 0xbd, 0x2b, 0x1a, 0xac, 0x8e, 0xb1, 0x5d, 0xc0, 0xe9, + 0x8e, 0x4d, 0x8e, 0x83, 0xaf, 0xb5, 0xb1, 0xaf, 0xcc, 0xa4, 0xa6, 0xd7, + 0xd5, 0xbc, 0xd6, 0x62, 0xf4, 0xec, 0xdb, 0xf3, 0x09, 0xa9, 0x98, 0xf6, + 0x37, 0x73, 0x5c, 0x08, 0x73, 0x7f, 0x46, 0xd8, 0x11, 0xe7, 0x2a, 0xbf, + 0xda, 0x3f, 0x5a, 0xfb, 0x4c, 0xbf, 0xd2, 0xf5, 0xfd, 0x59, 0xef, 0x11, + 0xfd, 0xca, 0xe7, 0xd6, 0x5c, 0x6a, 0xeb, 0xe8, 0xd9, 0x16, 0x56, 0x75, + 0xcc, 0xb9, 0x96, 0x3d, 0xd1, 0x1d, 0x84, 0x7d, 0xc1, 0xa1, 0x65, 0xcb, + 0xfe, 0xcf, 0xbe, 0x34, 0x88, 0x8e, 0xdf, 0x46, 0x52, 0x52, 0x0b, 0x5b, + 0x18, 0xd9, 0x6e, 0x07, 0x47, 0x06, 0x18, 0x56, 0x31, 0xe2, 0xbf, 0xab, + 0xd9, 0x3b, 0x40, 0x1b, 0xd8, 0xef, 0xbc, 0x82, 0x9a, 0xb6, 0x8b, 0x69, + 0x73, 0x40, 0xd1, 0xed, 0x12, 0x7e, 0x21, 0x13, 0x35, 0x85, 0xbd, 0x0d, + 0xec, 0x6c, 0x34, 0xc0, 0x6e, 0x9e, 0x64, 0x36, 0x7f, 0x14, 0x94, 0xf3, + 0x34, 0x53, 0x73, 0x5b, 0x03, 0x5f, 0xea, 0x98, 0x3f, 0x31, 0xc2, 0x38, + 0x73, 0x83, 0xa4, 0xba, 0x1d, 0xac, 0x87, 0x0f, 0x11, 0xe2, 0xd4, 0x17, + 0x58, 0xea, 0x88, 0x0f, 0x81, 0xb8, 0xc6, 0xe3, 0x2d, 0x85, 0x6e, 0x9c, + 0x41, 0x73, 0x5d, 0x6b, 0x6c, 0xdb, 0x4b, 0x61, 0xa0, 0x93, 0x3b, 0x89, + 0x3d, 0xfe, 0x09, 0x29, 0x81, 0x2e, 0x35, 0xec, 0xd4, 0x6d, 0xd3, 0x4f, + 0x74, 0x1f, 0x15, 0x7f, 0x1f, 0x6b, 0x98, 0x18, 0x44, 0xe8, 0x3c, 0xb4, + 0x85, 0x52, 0xd8, 0xa0, 0x06, 0x02, 0x2c, 0x8f, 0xcf, 0x66, 0xb2, 0x3e, + 0x09, 0x99, 0x6b, 0x39, 0x16, 0x91, 0x61, 0x8d, 0x1d, 0x20, 0x04, 0x94, + 0x99, 0xf4, 0x16, 0x8d, 0xcc, 0x76, 0xd3, 0xcc, 0x72, 0x0c, 0xf6, 0x57, + 0xa9, 0x63, 0x9b, 0xd3, 0xab, 0x63, 0xb5, 0x2e, 0x73, 0x64, 0x0e, 0xc4, + 0x9d, 0xcb, 0x3d, 0xce, 0xc9, 0x00, 0x10, 0xf6, 0x90, 0x27, 0x48, 0x90, + 0x7e, 0xe5, 0x2c, 0xfe, 0xbd, 0x8d, 0x8b, 0x43, 0x31, 0xe9, 0x02, 0xec, + 0x81, 0x0e, 0x20, 0x7d, 0x16, 0xba, 0x22, 0x0f, 0xde, 0x92, 0x9d, 0x7a, + 0xf2, 0xb1, 0xf1, 0x1b, 0x66, 0x4e, 0x45, 0x8d, 0x63, 0x1d, 0xe3, 0xcf, + 0xdc, 0xb2, 0xf3, 0xbe, 0xb8, 0xe0, 0x87, 0x30, 0x51, 0x53, 0xae, 0x0c, + 0x73, 0x9c, 0x3f, 0x35, 0xa6, 0x7e, 0x2b, 0x93, 0xce, 0xea, 0x19, 0x19, + 0x0f, 0xdd, 0x7b, 0xf7, 0xbb, 0xf7, 0x7b, 0x0f, 0x90, 0x55, 0x3f, 0x4a, + 0xfe, 0x01, 0xf8, 0x04, 0x94, 0xf6, 0xd8, 0xbf, 0x5d, 0xa9, 0xb9, 0xde, + 0x8b, 0xb1, 0x0b, 0x0d, 0x84, 0x07, 0x38, 0x3b, 0x70, 0x1a, 0xf6, 0x08, + 0xb5, 0x75, 0x7e, 0x93, 0x91, 0x68, 0x15, 0x64, 0x7b, 0xe4, 0xe9, 0x63, + 0x76, 0x4c, 0x9f, 0x89, 0x0b, 0x82, 0x25, 0xed, 0x3a, 0xa2, 0xb6, 0x1c, + 0x24, 0x24, 0xa7, 0xd0, 0x28, 0x66, 0xf7, 0x67, 0x6b, 0x3e, 0xaf, 0xa5, + 0x53, 0x1c, 0x35, 0xd3, 0x6e, 0xe3, 0x07, 0xfb, 0x4a, 0xed, 0x2c, 0x35, + 0xd4, 0x2b, 0x6c, 0x90, 0xc1, 0xb4, 0x4f, 0x90, 0x85, 0xc1, 0xf4, 0xfe, + 0xad, 0x99, 0x85, 0x73, 0x5e, 0xc7, 0x97, 0x31, 0xba, 0x1a, 0xcf, 0xd1, + 0x23, 0xe0, 0xbb, 0xdc, 0x77, 0x8b, 0x2a, 0x65, 0xcc, 0x32, 0x1e, 0x01, + 0x11, 0xc7, 0xb8, 0x4a, 0x4a, 0x6e, 0xb8, 0xb8, 0x52, 0x05, 0x63, 0xde, + 0x58, 0x37, 0x47, 0xc9, 0x51, 0xc5, 0xae, 0xcd, 0xae, 0xf6, 0x96, 0x9b, + 0x88, 0x10, 0x7f, 0x34, 0xef, 0xda, 0xd1, 0x2a, 0xff, 0x00, 0xa6, 0x59, + 0x57, 0xa9, 0x27, 0xc2, 0x07, 0x1f, 0x30, 0x85, 0x49, 0xb2, 0xba, 0x58, + 0xd7, 0xc1, 0xb8, 0x41, 0x74, 0x71, 0x3a, 0x4f, 0x29, 0x29, 0x2b, 0x1a, + 0x6b, 0xc7, 0x7d, 0x5f, 0x48, 0xee, 0x7b, 0x4f, 0xc4, 0x80, 0xb2, 0x7e, + 0xb3, 0x1d, 0xdd, 0x47, 0xa3, 0x54, 0xe1, 0x15, 0xef, 0xb2, 0xc0, 0x07, + 0x83, 0x5a, 0xc6, 0x89, 0x1f, 0x35, 0xa3, 0x45, 0xee, 0x75, 0x95, 0xb5, + 0xdc, 0x59, 0x60, 0x79, 0xf1, 0xd4, 0xcc, 0x2c, 0xbf, 0xac, 0x16, 0x6e, + 0xfa, 0xd3, 0xd3, 0xe9, 0x1f, 0x43, 0x1e, 0x87, 0xbd, 0xc3, 0xfa, 0xce, + 0x8f, 0xfb, 0xea, 0x4a, 0x69, 0x3e, 0x93, 0xf6, 0xd7, 0x39, 0xe6, 0x01, + 0x7b, 0x9c, 0x35, 0xf2, 0x71, 0x84, 0x72, 0x0b, 0xec, 0xb1, 0xa0, 0xc0, + 0x0d, 0x0d, 0x07, 0xcc, 0x08, 0x43, 0x73, 0x3d, 0x5b, 0x03, 0xb9, 0x89, + 0x24, 0x1f, 0x13, 0xb7, 0x55, 0x60, 0x6d, 0x17, 0x3a, 0x47, 0x72, 0x42, + 0x4a, 0x61, 0x73, 0x76, 0xe2, 0x39, 0xce, 0xfc, 0xe2, 0x41, 0x83, 0x3a, + 0xc8, 0x41, 0xa6, 0xa9, 0xc7, 0x0e, 0x78, 0x87, 0x97, 0xc9, 0xef, 0x0e, + 0x0d, 0x2a, 0xc5, 0xc0, 0xbb, 0x14, 0xb6, 0x35, 0xdd, 0x33, 0xf1, 0x0a, + 0x54, 0xd5, 0xfa, 0x2a, 0xdb, 0x27, 0xbb, 0x88, 0xf1, 0x2e, 0x91, 0xaa, + 0x4a, 0x5e, 0xa8, 0x6b, 0xab, 0xa9, 0xda, 0xb5, 0xac, 0x9f, 0xfa, 0x31, + 0xfc, 0x15, 0x1a, 0x5c, 0x3f, 0x68, 0x17, 0xbb, 0xc1, 0xda, 0xf3, 0xa9, + 0x74, 0x08, 0xf9, 0x2d, 0x2c, 0x76, 0x0b, 0x3d, 0xc7, 0xe8, 0x00, 0x5a, + 0xd1, 0xf0, 0xd3, 0x5f, 0xf3, 0x96, 0x41, 0xa7, 0x21, 0xb5, 0xb3, 0xd2, + 0x2d, 0x16, 0x4e, 0xe2, 0xe7, 0x70, 0x5b, 0xb9, 0xc9, 0x29, 0x67, 0x17, + 0x59, 0x46, 0x43, 0x9c, 0xd2, 0xc7, 0x32, 0xb7, 0x00, 0x4f, 0x8b, 0xe4, + 0x48, 0xfb, 0xd7, 0x41, 0x43, 0x48, 0xb8, 0x48, 0xfa, 0x2c, 0x63, 0x7f, + 0xe8, 0xac, 0x6b, 0xd8, 0x45, 0x25, 0xa4, 0x1f, 0x73, 0xea, 0xa8, 0x1f, + 0xeb, 0x3c, 0x38, 0xfe, 0x45, 0xd0, 0x56, 0xc3, 0xf6, 0x87, 0xb7, 0xfa, + 0xbf, 0xf5, 0x21, 0x25, 0x35, 0x72, 0xec, 0x8b, 0x59, 0x54, 0x12, 0x1e, + 0x5e, 0xe2, 0x47, 0x03, 0x68, 0xd3, 0xf2, 0xac, 0xce, 0xa6, 0xf6, 0xd7, + 0x89, 0x6b, 0x9f, 0x3b, 0x66, 0xb1, 0x20, 0x1e, 0x67, 0x77, 0xe6, 0x82, + 0xb4, 0xf3, 0x1a, 0x5b, 0x90, 0xd0, 0x7b, 0xb4, 0x8f, 0xbc, 0xaa, 0x19, + 0x83, 0x75, 0x7e, 0x9e, 0xed, 0xae, 0x7d, 0x80, 0x89, 0xe0, 0xed, 0x6c, + 0xc2, 0x4a, 0x73, 0x31, 0x9b, 0x46, 0x53, 0x49, 0xa2, 0xcf, 0x7c, 0xea, + 0xd3, 0x0e, 0x1f, 0x7b, 0x4a, 0xb8, 0x2a, 0xc8, 0x6c, 0x4f, 0xa6, 0x1b, + 0xb4, 0xb1, 0xd2, 0x1d, 0x13, 0xe2, 0x42, 0xab, 0x6e, 0x0d, 0x72, 0x4d, + 0xd4, 0x43, 0xbf, 0x7d, 0xbf, 0xde, 0x35, 0x50, 0x1f, 0x6a, 0xae, 0x3d, + 0x3c, 0x87, 0x11, 0xd9, 0xb6, 0xfb, 0xc7, 0xc3, 0x5d, 0x7f, 0x14, 0x94, + 0x92, 0xfa, 0x9e, 0x23, 0xd4, 0x11, 0x12, 0x03, 0xd9, 0xdc, 0x8f, 0x12, + 0xa2, 0xfb, 0x6e, 0x75, 0x62, 0xa2, 0xe1, 0xa7, 0x67, 0x09, 0xd3, 0xee, + 0x4e, 0x3a, 0x8b, 0x9a, 0x00, 0xbe, 0x89, 0xf1, 0x75, 0x46, 0x7f, 0xe8, + 0xbf, 0xfb, 0xd4, 0x8d, 0xdd, 0x36, 0xe3, 0x0d, 0xb0, 0x31, 0xc7, 0x86, + 0xbc, 0x1a, 0xcc, 0xfc, 0x1d, 0xa7, 0xdc, 0x92, 0x9a, 0x9e, 0x9d, 0x4c, + 0x24, 0xd6, 0xf7, 0xe3, 0x3b, 0xbb, 0xaa, 0x20, 0xb0, 0xff, 0x00, 0x63, + 0xfd, 0x8b, 0xa1, 0x73, 0x4b, 0x71, 0xf1, 0x8d, 0xa4, 0x3d, 0xe2, 0xb2, + 0x1d, 0x60, 0x11, 0xf9, 0x87, 0x58, 0x0b, 0x35, 0xd8, 0x95, 0xbd, 0x9e, + 0xc7, 0xb4, 0xed, 0x3c, 0x46, 0xdd, 0x7e, 0x2b, 0x4e, 0xd6, 0x1d, 0xb8, + 0xed, 0xe4, 0x19, 0x24, 0x79, 0x40, 0x49, 0x48, 0x7a, 0xc3, 0x5d, 0x6b, + 0x2b, 0xc2, 0x66, 0xf1, 0x63, 0xd8, 0xeb, 0x61, 0xb1, 0x05, 0xad, 0x2d, + 0x69, 0x95, 0xa5, 0xf5, 0x36, 0x8a, 0xda, 0x32, 0x5e, 0xd9, 0xf6, 0x6c, + 0xac, 0x6e, 0xd4, 0x81, 0xa9, 0x22, 0x53, 0x3f, 0x1a, 0xab, 0xef, 0xfb, + 0x4b, 0xb5, 0xb2, 0xba, 0x9c, 0xc6, 0xf8, 0x09, 0x7b, 0xfb, 0x21, 0xf4, + 0x9c, 0x87, 0x74, 0xdb, 0x58, 0xc6, 0x8d, 0xec, 0xc8, 0xb4, 0x56, 0xf1, + 0x31, 0x05, 0xfa, 0x07, 0x77, 0xe1, 0x25, 0x3a, 0x5f, 0x5a, 0xb6, 0xfe, + 0xc8, 0x70, 0x3f, 0xe9, 0x19, 0x03, 0xe6, 0xb1, 0xbd, 0xde, 0x87, 0xa5, + 0x1a, 0xc4, 0x4c, 0xff, 0x00, 0x25, 0x6d, 0x7d, 0x68, 0xc6, 0x75, 0xdd, + 0x34, 0x3d, 0xa2, 0x4d, 0x36, 0x35, 0xf1, 0xda, 0x0f, 0xb0, 0xff, 0x00, + 0xd5, 0x2c, 0xff, 0x00, 0x4f, 0xf5, 0x5f, 0xa3, 0xa6, 0xee, 0x7c, 0xf6, + 0xc2, 0x4a, 0x68, 0xe0, 0x6f, 0x15, 0x37, 0x59, 0x6b, 0x99, 0x3a, 0xf6, + 0xdb, 0x21, 0x37, 0x53, 0xbd, 0xd6, 0x74, 0x8f, 0x58, 0x34, 0xd4, 0x5e, + 0x6a, 0x05, 0xa4, 0x89, 0x6c, 0x99, 0xfe, 0x08, 0x78, 0xd6, 0x7f, 0x36, + 0x1a, 0x20, 0x6d, 0xb1, 0x87, 0xfb, 0x2e, 0x3e, 0x08, 0xfd, 0x52, 0xbd, + 0xdd, 0x1a, 0xb6, 0x81, 0xb8, 0xd9, 0x6b, 0x79, 0x3d, 0x98, 0xd7, 0x24, + 0xa7, 0x16, 0xca, 0xac, 0xb1, 0xa1, 0xa4, 0x92, 0xd8, 0x98, 0x8e, 0xea, + 0x35, 0xb7, 0x60, 0xd8, 0xea, 0xda, 0xf0, 0x0c, 0x8d, 0x63, 0xf0, 0x56, + 0x18, 0x0b, 0x5a, 0x1a, 0x77, 0x57, 0xe3, 0x3e, 0x05, 0x4e, 0xaf, 0x00, + 0xe9, 0xf2, 0x29, 0x29, 0xaf, 0x70, 0xad, 0xcc, 0x25, 0x8c, 0x2d, 0x74, + 0x7d, 0x1e, 0x44, 0xf9, 0x20, 0x8c, 0x82, 0xc8, 0x65, 0xac, 0x04, 0x78, + 0xc2, 0xd4, 0x7b, 0x08, 0x04, 0xba, 0xb0, 0x60, 0x72, 0x10, 0x48, 0x60, + 0x01, 0xaf, 0x6e, 0xd0, 0x74, 0xe3, 0x43, 0xf3, 0x49, 0x4e, 0x7e, 0x56, + 0x4b, 0xe8, 0xc6, 0x17, 0x52, 0xf6, 0xb5, 0xce, 0x26, 0x1b, 0xf8, 0x10, + 0xd5, 0x87, 0x75, 0x8e, 0x2e, 0x75, 0x8e, 0xf6, 0x97, 0x19, 0x8e, 0x56, + 0xaf, 0x57, 0x64, 0x8a, 0x8c, 0xed, 0x00, 0xbb, 0xd8, 0x35, 0x00, 0xe9, + 0xaf, 0xcd, 0x64, 0xde, 0xd3, 0xe9, 0x12, 0x38, 0x9f, 0xe0, 0x92, 0x9a, + 0xd5, 0xb0, 0xd8, 0xff, 0x00, 0x12, 0x4a, 0xe9, 0x30, 0x99, 0xd2, 0xea, + 0xc7, 0x77, 0xab, 0x73, 0x7d, 0x56, 0x89, 0x73, 0x1a, 0xdd, 0xce, 0x8d, + 0x38, 0xec, 0xb0, 0x31, 0x2a, 0xb5, 0xf6, 0x01, 0x5b, 0x77, 0x38, 0x6b, + 0x1c, 0xae, 0x8b, 0x07, 0x0b, 0x14, 0x66, 0xe1, 0xda, 0xf8, 0x71, 0xb9, + 0xe6, 0xbb, 0x5b, 0xb4, 0x35, 0xbe, 0xef, 0x69, 0xda, 0x1a, 0x3c, 0xd2, + 0x53, 0x9b, 0x93, 0x56, 0x36, 0x40, 0x36, 0x63, 0x34, 0xb5, 0xb3, 0x00, + 0xbc, 0x80, 0x49, 0xf8, 0x4c, 0xac, 0xda, 0xa6, 0xbb, 0x5c, 0xd2, 0x22, + 0x3b, 0x15, 0xd8, 0x7e, 0xca, 0xc5, 0xa8, 0xbe, 0x87, 0xb5, 0xad, 0xba, + 0xa2, 0x43, 0x81, 0x1b, 0x4b, 0xda, 0x0f, 0xe3, 0x04, 0x2c, 0x7e, 0xa9, + 0x8b, 0x48, 0xbd, 0xae, 0xac, 0x1d, 0x84, 0x02, 0x7f, 0xac, 0x12, 0x53, + 0x9c, 0xe1, 0xef, 0x0e, 0xec, 0x0f, 0x6f, 0xbd, 0x76, 0xb8, 0xe7, 0xab, + 0xe3, 0xe3, 0x51, 0xf6, 0x7a, 0x2b, 0xcb, 0xc7, 0x0c, 0x61, 0x0c, 0xdc, + 0x6b, 0xb5, 0xb2, 0x26, 0x25, 0xde, 0xd2, 0xb9, 0x3a, 0xf1, 0xc5, 0xf7, + 0xd7, 0x53, 0x74, 0x0e, 0x70, 0x0e, 0x71, 0xed, 0x3c, 0x9f, 0x90, 0x5e, + 0x8d, 0x8d, 0xf6, 0x77, 0xb4, 0x7a, 0x0f, 0x6b, 0xeb, 0x64, 0x35, 0x9b, + 0x08, 0x3a, 0x01, 0x09, 0x29, 0x0e, 0x0f, 0x56, 0x19, 0x87, 0xec, 0x56, + 0xe3, 0x5f, 0x8b, 0x70, 0x93, 0xfa, 0x66, 0x7b, 0x4f, 0x73, 0xfa, 0x46, + 0xcb, 0x51, 0xe5, 0xce, 0x71, 0x9d, 0x01, 0x00, 0xfc, 0x80, 0x95, 0x69, + 0xe0, 0x31, 0x8c, 0x81, 0xa1, 0x79, 0x2e, 0xf9, 0x03, 0xcf, 0xc9, 0x57, + 0x7b, 0xce, 0xdf, 0x6f, 0x3b, 0x60, 0xfd, 0xdf, 0xed, 0x49, 0x4c, 0xb1, + 0x03, 0x5d, 0x99, 0x48, 0xfd, 0xc6, 0x92, 0x7e, 0x41, 0x60, 0x66, 0x9d, + 0xff, 0x00, 0x59, 0xaf, 0x71, 0x92, 0x69, 0xc4, 0x60, 0xf9, 0xb8, 0xb9, + 0xff, 0x00, 0xc5, 0x74, 0x38, 0xe0, 0x35, 0xce, 0xb4, 0x11, 0xbc, 0x07, + 0x81, 0xf0, 0x22, 0x17, 0x3f, 0x60, 0x16, 0xfd, 0x65, 0xea, 0x96, 0x03, + 0xa5, 0x6d, 0xa6, 0xad, 0x3c, 0x45, 0x43, 0xf8, 0xa4, 0xa4, 0x6d, 0x0e, + 0xfb, 0x43, 0x7b, 0x30, 0xd6, 0xcd, 0x7c, 0xcb, 0xff, 0x00, 0xd8, 0x8b, + 0x71, 0xda, 0xe2, 0x01, 0xd5, 0xc6, 0x01, 0xef, 0x25, 0x4b, 0x1d, 0xa2, + 0xcb, 0x1c, 0xe3, 0xae, 0xc3, 0x5b, 0x63, 0xc0, 0xb7, 0x71, 0x4c, 0xf0, + 0x0d, 0xa1, 0xee, 0x1c, 0x6b, 0xf7, 0x4a, 0x4a, 0x67, 0x94, 0x40, 0xa6, + 0x91, 0x3e, 0xd7, 0x38, 0x38, 0x9f, 0x20, 0x27, 0xf8, 0x29, 0x39, 0xb1, + 0x65, 0x60, 0x38, 0x83, 0xb4, 0x39, 0xc3, 0xc4, 0x43, 0xb6, 0x8f, 0xfa, + 0x49, 0xb2, 0x19, 0x38, 0xa1, 0xbd, 0x85, 0x70, 0xd1, 0xf8, 0x29, 0x43, + 0xdd, 0xb1, 0xe6, 0x78, 0x6b, 0x5d, 0xf1, 0x80, 0x92, 0x9b, 0x41, 0xcd, + 0xa7, 0xa7, 0xba, 0xd0, 0x01, 0x86, 0xbb, 0x9d, 0x24, 0xac, 0xfa, 0x01, + 0x1b, 0xbd, 0xb2, 0x45, 0x6c, 0xd0, 0xf6, 0x9e, 0x40, 0x5a, 0x5e, 0x96, + 0xfc, 0x50, 0xc7, 0xf7, 0xdc, 0xf8, 0xfb, 0xff, 0x00, 0x89, 0x55, 0x1a, + 0xc0, 0x5d, 0x61, 0x9f, 0xa6, 0xe0, 0x40, 0xfe, 0xa6, 0xbf, 0xc1, 0x25, + 0x35, 0x0b, 0x09, 0xb3, 0x0d, 0x9d, 0xaf, 0xca, 0x6b, 0xc0, 0xf2, 0x6b, + 0x5e, 0xe5, 0xbf, 0x51, 0x8c, 0xbb, 0x4f, 0x98, 0x8f, 0x88, 0x0b, 0x0c, + 0x34, 0x0e, 0xa7, 0xd2, 0x58, 0x38, 0x71, 0xb2, 0xc8, 0xf2, 0x0d, 0x60, + 0xff, 0x00, 0xbf, 0x2e, 0x82, 0x90, 0x05, 0xb7, 0x38, 0x8f, 0xce, 0x29, + 0x29, 0xa3, 0x9d, 0x22, 0xc6, 0xc8, 0xd4, 0x56, 0x07, 0xcc, 0xb8, 0x95, + 0x89, 0xd6, 0xad, 0xb2, 0x8a, 0xb1, 0xee, 0xa8, 0xb7, 0xd4, 0x16, 0x38, + 0x86, 0xbf, 0x50, 0xef, 0x69, 0x6f, 0x03, 0xe2, 0xb6, 0x73, 0x0f, 0xa9, + 0x7b, 0xe3, 0x50, 0x03, 0x40, 0x1f, 0x00, 0x56, 0x1f, 0x58, 0x63, 0x32, + 0xaa, 0xa5, 0x9e, 0xdf, 0xd1, 0xbd, 0xdb, 0x83, 0xbc, 0x48, 0x69, 0xd0, + 0xfc, 0xd2, 0x53, 0x52, 0x9e, 0xbc, 0xf1, 0xa5, 0xf8, 0xee, 0x23, 0xf3, + 0x9d, 0x51, 0x0f, 0xff, 0x00, 0xa2, 0xe8, 0x2a, 0xc3, 0x7a, 0xd7, 0x4d, + 0xb4, 0xed, 0x7b, 0xc3, 0x4f, 0x66, 0xda, 0xd2, 0xcf, 0xcb, 0xa7, 0xe2, + 0xb3, 0x2c, 0xc7, 0xc8, 0xa2, 0x36, 0x6e, 0xda, 0x3b, 0x38, 0x6f, 0x6a, + 0x8b, 0xee, 0x6b, 0xc6, 0xdb, 0xab, 0x05, 0xde, 0x22, 0x08, 0xfb, 0x9d, + 0xaa, 0x4a, 0x77, 0x03, 0x70, 0xef, 0xd5, 0x95, 0xb5, 0xc2, 0x34, 0x75, + 0x4e, 0x07, 0x5f, 0x94, 0xa0, 0xd9, 0x83, 0x59, 0xf6, 0x41, 0x83, 0xc6, + 0xe8, 0x3f, 0xdc, 0xb2, 0x6b, 0xc1, 0xc1, 0xb7, 0x6f, 0xa6, 0x7d, 0x3b, + 0x63, 0x5d, 0x84, 0x83, 0x2a, 0xc0, 0xc6, 0xea, 0x74, 0xeb, 0x8d, 0x95, + 0x69, 0x81, 0x30, 0xe3, 0xb8, 0x7d, 0xce, 0x94, 0x94, 0xda, 0x6f, 0x4f, + 0x75, 0x44, 0x1a, 0x5e, 0xfa, 0x5b, 0xf9, 0xee, 0xa9, 0xd1, 0xf3, 0xd8, + 0x64, 0x15, 0xb5, 0x63, 0x49, 0x7e, 0x1d, 0x6f, 0x71, 0x73, 0x98, 0xc0, + 0xd2, 0x4e, 0x84, 0xea, 0xd1, 0x30, 0x17, 0x3b, 0x5e, 0x47, 0x5c, 0xb2, + 0xe6, 0x50, 0x5b, 0x4d, 0xa5, 0xee, 0x0d, 0x1b, 0xeb, 0xd9, 0xa9, 0xf3, + 0x64, 0x2e, 0x9a, 0xca, 0xde, 0x72, 0x31, 0xab, 0x80, 0x5d, 0x4d, 0x63, + 0x73, 0xf8, 0x12, 0x06, 0xbc, 0xfc, 0x12, 0x53, 0x63, 0x06, 0xe6, 0x8c, + 0x2b, 0x2f, 0xbb, 0xd8, 0x36, 0x92, 0xe7, 0x73, 0x1e, 0xe7, 0x1f, 0xe2, + 0xa9, 0x65, 0x8d, 0xae, 0x6b, 0x40, 0xda, 0xd1, 0x7e, 0xd9, 0xef, 0xf4, + 0x55, 0xa7, 0x3a, 0xaa, 0x1b, 0x55, 0x1e, 0xb5, 0x6d, 0x69, 0x0c, 0x65, + 0xdb, 0x9d, 0xc0, 0xd8, 0x35, 0x1f, 0xda, 0x3a, 0xaa, 0x19, 0xf9, 0x18, + 0xcf, 0x2d, 0x77, 0xaa, 0xd9, 0x76, 0x41, 0xb1, 0xe1, 0x92, 0x61, 0xbe, + 0x9e, 0xd1, 0xdb, 0x59, 0x49, 0x4e, 0x86, 0x5f, 0x58, 0xb2, 0xdc, 0x66, + 0xe0, 0x96, 0x4b, 0x81, 0x68, 0x7d, 0xb3, 0x20, 0x80, 0x7d, 0xba, 0x78, + 0xe8, 0x8f, 0xbc, 0x7d, 0x97, 0x6e, 0xdf, 0xe5, 0xf1, 0xa7, 0x30, 0xb0, + 0xfe, 0xd9, 0x53, 0x2e, 0x6d, 0x83, 0x73, 0xc0, 0xd4, 0xe9, 0x12, 0x7b, + 0x6a, 0x7b, 0x00, 0xac, 0x7e, 0xdf, 0x67, 0xf4, 0x6f, 0x4b, 0x4f, 0xa3, + 0xb7, 0x78, 0x94, 0x94, 0xc3, 0x19, 0xad, 0x34, 0xb5, 0xc2, 0x0f, 0xbd, + 0xc3, 0x48, 0xe1, 0xce, 0x52, 0xfa, 0xc5, 0x94, 0xcc, 0x5c, 0x7c, 0x46, + 0xec, 0xde, 0xd2, 0xf7, 0x68, 0x3b, 0x06, 0x8f, 0x0f, 0x9a, 0x00, 0x65, + 0x8d, 0xe9, 0xcf, 0x69, 0x96, 0x3f, 0xd4, 0x99, 0x04, 0x8e, 0x1c, 0x0a, + 0x7e, 0xbf, 0x0e, 0xb6, 0x86, 0x47, 0xe6, 0x98, 0x1f, 0x18, 0x49, 0x48, + 0x6b, 0xea, 0x58, 0x16, 0x02, 0xdd, 0xfe, 0x99, 0xd2, 0x03, 0xc1, 0x03, + 0x4f, 0x3d, 0x42, 0xb2, 0x28, 0xaa, 0xc1, 0xbd, 0xbb, 0x5c, 0x06, 0xbb, + 0x9b, 0xac, 0x7c, 0xc1, 0x59, 0x86, 0x96, 0x11, 0x04, 0x02, 0x54, 0x46, + 0x30, 0xf7, 0x08, 0x22, 0x79, 0x2d, 0x30, 0x92, 0x9d, 0x63, 0x51, 0x03, + 0xda, 0x4f, 0xbb, 0xc7, 0x51, 0x0a, 0xad, 0xa2, 0xd0, 0x7e, 0x88, 0x7f, + 0x90, 0x31, 0xf9, 0x50, 0x2b, 0xb3, 0x32, 0xa6, 0x86, 0x57, 0x77, 0xb1, + 0xa0, 0x6d, 0x63, 0xda, 0x1c, 0xd8, 0xf0, 0xf1, 0xfc, 0x54, 0xfe, 0xdb, + 0x78, 0x8f, 0x5e, 0x96, 0xbf, 0xfe, 0x2c, 0xc1, 0xfb, 0x9d, 0xfd, 0xe9, + 0x29, 0xa5, 0xd4, 0x68, 0x7d, 0xd8, 0xa7, 0xd3, 0xac, 0x8b, 0x2b, 0x76, + 0xe2, 0x22, 0x09, 0x11, 0xee, 0xe1, 0x63, 0x92, 0x0d, 0x7a, 0xc1, 0x69, + 0xd2, 0x3b, 0x90, 0x3c, 0x17, 0x59, 0x45, 0xd4, 0xe4, 0x58, 0x05, 0x7b, + 0xab, 0x70, 0x93, 0x0f, 0x6c, 0x7c, 0xe7, 0x85, 0x47, 0xaf, 0x74, 0xac, + 0x57, 0x5c, 0xdb, 0x31, 0xc7, 0xa3, 0x65, 0x84, 0x6e, 0x0d, 0xd5, 0x8e, + 0x71, 0xef, 0xb7, 0xb7, 0xc9, 0x25, 0x3c, 0xde, 0x35, 0x9e, 0x8d, 0xd2, + 0xd7, 0x43, 0xbb, 0x78, 0xe8, 0xba, 0x4a, 0xf2, 0x31, 0x33, 0xf0, 0xda, + 0x2f, 0xb9, 0xd4, 0x5f, 0x4c, 0x6c, 0x7b, 0x34, 0x20, 0x77, 0xf8, 0xca, + 0xcd, 0xab, 0xea, 0xaf, 0x50, 0xbc, 0xbd, 0xd5, 0xdb, 0x54, 0xd6, 0xed, + 0xb0, 0x4b, 0x81, 0x27, 0xcb, 0x45, 0x4c, 0xdb, 0x6e, 0x3e, 0xb3, 0xb4, + 0xcc, 0x07, 0x78, 0x10, 0x92, 0x9d, 0xfa, 0x59, 0xe8, 0xb2, 0xcb, 0x1e, + 0xcb, 0x6e, 0x7b, 0xcb, 0x67, 0x22, 0xd6, 0xec, 0xd4, 0x71, 0xfc, 0xe1, + 0x04, 0xfc, 0x82, 0xa7, 0x97, 0x8d, 0x95, 0x9d, 0x94, 0xca, 0xf1, 0xd8, + 0x5c, 0x1a, 0x25, 0xcf, 0xe1, 0x80, 0x9f, 0x12, 0xb3, 0x19, 0x93, 0x65, + 0xb6, 0x0f, 0x5a, 0xeb, 0x2d, 0xdb, 0xf4, 0x46, 0xe2, 0x75, 0xf2, 0x95, + 0x7e, 0x8c, 0xce, 0xa1, 0xeb, 0x7d, 0x9f, 0x13, 0x20, 0xb5, 0xe6, 0x0b, + 0x69, 0x78, 0x0e, 0xac, 0xcf, 0x3c, 0xea, 0x0a, 0x4a, 0x74, 0xb1, 0xfa, + 0x3f, 0xd9, 0xd8, 0x76, 0xbc, 0x59, 0x73, 0xbe, 0x93, 0xc6, 0x9a, 0x78, + 0x05, 0x17, 0x62, 0x5c, 0xc7, 0xed, 0x69, 0x2c, 0x7f, 0x2d, 0x70, 0x90, + 0x5b, 0xf3, 0x51, 0x7d, 0xfd, 0x63, 0x1c, 0xec, 0xc8, 0xc3, 0x17, 0x0f, + 0xdf, 0xa1, 0xdf, 0xf7, 0xd7, 0x4a, 0x54, 0x75, 0xac, 0x4d, 0xf1, 0x65, + 0xae, 0xc7, 0xb3, 0xf7, 0x2e, 0x69, 0x6f, 0xe3, 0xa8, 0x49, 0x4d, 0xca, + 0xba, 0xa7, 0x58, 0xc7, 0x66, 0xd3, 0x69, 0xb5, 0xa2, 0x44, 0x58, 0x37, + 0x7d, 0xc7, 0x95, 0x62, 0x9f, 0xac, 0x2c, 0x3e, 0xdc, 0x8a, 0x0b, 0x3c, + 0x5f, 0x59, 0xdc, 0x39, 0x1f, 0x9a, 0x75, 0x40, 0x6e, 0x4d, 0x56, 0xea, + 0xe0, 0xdb, 0x1a, 0xf3, 0x0d, 0x7d, 0x66, 0x47, 0xde, 0xd9, 0x0a, 0x2e, + 0xc6, 0xc3, 0x71, 0x07, 0x79, 0x61, 0x3f, 0xbc, 0x20, 0x7d, 0xe9, 0x29, + 0xda, 0xc4, 0xea, 0x18, 0x39, 0x36, 0xbb, 0xd2, 0xbd, 0xbe, 0xed, 0x36, + 0xbb, 0xd8, 0xef, 0xb9, 0xcb, 0x23, 0xa6, 0x1f, 0x57, 0xaa, 0x75, 0x87, + 0x6a, 0x67, 0x24, 0xb6, 0x7e, 0x07, 0x68, 0xfc, 0x8a, 0xad, 0x98, 0x4c, + 0x63, 0x83, 0x5a, 0xfd, 0x5d, 0x25, 0xae, 0x1a, 0x8d, 0x3c, 0xd4, 0x18, + 0xfc, 0xcc, 0x6b, 0x37, 0xd1, 0x61, 0x6f, 0x04, 0x8e, 0xc4, 0xfe, 0x20, + 0xa4, 0xa7, 0x73, 0x1d, 0x82, 0xb2, 0xf0, 0x46, 0x8f, 0xb2, 0x7f, 0xe8, + 0xb8, 0x28, 0x10, 0xdd, 0x49, 0xee, 0x08, 0xd3, 0xee, 0x0b, 0x3e, 0xbe, + 0xb5, 0x7b, 0x00, 0x17, 0x57, 0xea, 0x41, 0x92, 0x40, 0xdb, 0xe1, 0xdc, + 0x48, 0x47, 0xc5, 0xea, 0x38, 0x76, 0xbd, 0xa1, 0xce, 0x35, 0x92, 0xe9, + 0x21, 0xda, 0x81, 0xc9, 0xed, 0x29, 0x29, 0xbf, 0x7e, 0xe1, 0xe9, 0x81, + 0xc1, 0x02, 0x47, 0x94, 0xa1, 0x38, 0xb9, 0xe2, 0xb6, 0x91, 0xb4, 0x3a, + 0xe2, 0x74, 0x3c, 0xec, 0x1d, 0xfe, 0x6a, 0xcb, 0x9a, 0x2e, 0x78, 0x7d, + 0x6e, 0x16, 0x37, 0x40, 0xdd, 0xa4, 0x1e, 0x07, 0x92, 0x46, 0x92, 0xd1, + 0x53, 0x8f, 0xb4, 0x34, 0xbd, 0xc7, 0x5f, 0x14, 0x94, 0xd8, 0x7c, 0x8c, + 0x32, 0xe6, 0x88, 0x7f, 0xa6, 0x7c, 0xf9, 0xf1, 0x54, 0x68, 0x63, 0x5f, + 0x5b, 0xec, 0x22, 0x7d, 0x3f, 0x52, 0x00, 0xe2, 0x60, 0x2b, 0xf7, 0xb6, + 0x30, 0xad, 0x60, 0x06, 0x5e, 0x58, 0xd8, 0xf2, 0xd1, 0xaa, 0xad, 0x15, + 0xc5, 0x26, 0x0c, 0x34, 0xfa, 0xa4, 0x8f, 0x12, 0xe7, 0xc7, 0xf0, 0x49, + 0x4d, 0x2a, 0x9e, 0xcb, 0x7e, 0xb3, 0xe1, 0xd3, 0x5c, 0x11, 0x8f, 0x8b, + 0xb8, 0x81, 0xd9, 0xcf, 0x70, 0xfe, 0x01, 0x6e, 0x54, 0xed, 0x6c, 0x02, + 0x22, 0x4f, 0x0b, 0x98, 0xfa, 0xbb, 0x16, 0x7d, 0x6f, 0xea, 0x11, 0x27, + 0xd3, 0x6e, 0xd1, 0x26, 0x7e, 0x86, 0xd6, 0x7f, 0x05, 0xd2, 0xd6, 0xd8, + 0xae, 0xc7, 0x44, 0x39, 0xdd, 0xfc, 0x52, 0x53, 0x4e, 0xf0, 0x5b, 0x73, + 0xda, 0x35, 0xd4, 0x7e, 0x0d, 0x58, 0xfd, 0x4d, 0x90, 0xea, 0xc1, 0x10, + 0x7d, 0xc5, 0xcd, 0x3a, 0x1f, 0xcd, 0x1f, 0xc1, 0x6c, 0x64, 0x1f, 0xd2, + 0x3c, 0xcf, 0x27, 0x5f, 0xb8, 0x05, 0xcf, 0xf5, 0xcb, 0xde, 0xcc, 0x9a, + 0x83, 0x83, 0x8b, 0x7d, 0x31, 0xfa, 0x48, 0xf5, 0x39, 0x73, 0xa7, 0x49, + 0x94, 0x94, 0x87, 0xdd, 0x5c, 0xea, 0xe6, 0x76, 0x90, 0x64, 0x47, 0x28, + 0x25, 0x8d, 0xbc, 0x90, 0x43, 0x6c, 0x1d, 0xcc, 0x41, 0x53, 0xc5, 0xbd, + 0x96, 0x38, 0x31, 0xd6, 0x01, 0xb8, 0xc4, 0x19, 0x69, 0xfb, 0x9c, 0x02, + 0xb9, 0x66, 0x36, 0x3e, 0xdf, 0xd0, 0x0f, 0x78, 0xe4, 0x4c, 0x9e, 0xe9, + 0x29, 0xcb, 0x75, 0x2c, 0x03, 0x69, 0x82, 0x06, 0x9b, 0x5d, 0xac, 0x7f, + 0x15, 0x37, 0xd9, 0x68, 0x60, 0x6b, 0x1e, 0xf6, 0x76, 0xd5, 0xdb, 0xda, + 0x07, 0x97, 0x71, 0xf2, 0x2a, 0xcb, 0x9a, 0x67, 0x65, 0x87, 0x5e, 0xe1, + 0xc0, 0x7e, 0x54, 0x2b, 0x2a, 0xee, 0xd6, 0xc7, 0xc1, 0x25, 0x26, 0xe9, + 0xd9, 0x99, 0x1f, 0x69, 0xa4, 0x16, 0x1b, 0xbd, 0xed, 0xf7, 0x31, 0xc1, + 0xdc, 0x1e, 0x76, 0xba, 0x1c, 0x8f, 0xd7, 0x7e, 0xd9, 0xfb, 0x67, 0x66, + 0x23, 0xbf, 0x32, 0x5d, 0xbb, 0xe8, 0x86, 0xc9, 0x1a, 0xfd, 0xe8, 0x3d, + 0x1e, 0x3f, 0x69, 0xd0, 0x1c, 0xd0, 0x4f, 0xbb, 0xdc, 0x39, 0x80, 0xd7, + 0x2b, 0x79, 0xd9, 0x17, 0xee, 0xb8, 0xb1, 0xb3, 0x67, 0xa9, 0x0d, 0x6c, + 0xf3, 0xb5, 0xd1, 0xcf, 0x9a, 0x4a, 0x68, 0x59, 0x85, 0xd4, 0x8f, 0xa9, + 0xbb, 0x60, 0xda, 0xe7, 0x06, 0xf2, 0x77, 0x6d, 0xe4, 0xeb, 0x1d, 0xf8, + 0x53, 0xa7, 0xa6, 0x5a, 0xfa, 0x9a, 0xf7, 0xdc, 0xed, 0x79, 0xd9, 0x02, + 0x3f, 0x29, 0x56, 0xb2, 0x9c, 0xf3, 0x53, 0x1b, 0xb4, 0x34, 0xc3, 0x8b, + 0x9a, 0x0c, 0xc1, 0xf5, 0x08, 0xfa, 0x5f, 0x24, 0x6c, 0x42, 0xea, 0xc8, + 0xac, 0x00, 0x2b, 0x6d, 0x6e, 0x73, 0xbc, 0xa7, 0x40, 0x52, 0x53, 0x41, + 0xbd, 0x35, 0x86, 0xd2, 0x1f, 0xbe, 0xc6, 0xed, 0x86, 0x87, 0x3d, 0xc4, + 0x4f, 0x8f, 0x65, 0x7f, 0xf6, 0x76, 0x27, 0xa7, 0x1e, 0x96, 0x3e, 0xdf, + 0x87, 0xbf, 0x74, 0x7d, 0x19, 0x95, 0x3c, 0x5f, 0x59, 0xf9, 0x6e, 0x68, + 0x0e, 0x75, 0x6d, 0xab, 0x7b, 0xc0, 0x1a, 0x09, 0x3c, 0xf9, 0x05, 0x3f, + 0xb3, 0x53, 0xea, 0xc4, 0xfe, 0x93, 0x99, 0x9e, 0xde, 0x3b, 0xbe, 0x09, + 0x29, 0xaf, 0x89, 0x90, 0x2d, 0xa6, 0xe0, 0x6c, 0xde, 0xdd, 0xd2, 0xdf, + 0x2d, 0xa8, 0x3d, 0x7b, 0x32, 0x96, 0xe6, 0x51, 0x5d, 0xaf, 0x2c, 0x79, + 0x61, 0x7f, 0x12, 0x21, 0xc6, 0x07, 0xfd, 0x4a, 0xaf, 0x8b, 0x55, 0xf8, + 0xf5, 0x9a, 0x9e, 0x1a, 0xcb, 0x5e, 0xdf, 0x73, 0x1b, 0xdb, 0x58, 0x9d, + 0x4c, 0xab, 0x5d, 0x47, 0xa6, 0x8c, 0xac, 0xca, 0xec, 0x30, 0xef, 0x4e, + 0x96, 0x31, 0xc1, 0xc0, 0x91, 0xa4, 0x9e, 0x5a, 0xe0, 0x7b, 0xa4, 0xa4, + 0x35, 0x7b, 0xc0, 0x73, 0x1e, 0x1e, 0x3b, 0x47, 0xfa, 0x94, 0x6f, 0x4e, + 0xdd, 0x3b, 0xc2, 0x2b, 0x3a, 0x76, 0x2b, 0x2b, 0xda, 0x2a, 0x0c, 0xb2, + 0x21, 0xae, 0x6b, 0x9d, 0xcf, 0xe5, 0x50, 0x76, 0x36, 0x5d, 0x6e, 0x86, + 0x3c, 0xb9, 0x83, 0xbe, 0x93, 0xf8, 0xa4, 0xa4, 0x52, 0x41, 0x22, 0x62, + 0x0f, 0x7f, 0x14, 0xcf, 0x77, 0x78, 0x07, 0xcd, 0x49, 0xee, 0xb9, 0xa3, + 0xdc, 0xcd, 0xc0, 0xf8, 0x8d, 0xbf, 0x91, 0x1f, 0xa5, 0xf4, 0xfb, 0x7a, + 0xad, 0xe2, 0xaa, 0xd8, 0xea, 0xea, 0x61, 0x1e, 0xad, 0x9d, 0x9a, 0x3f, + 0xbc, 0xa4, 0xa5, 0x74, 0xba, 0x32, 0x72, 0xf2, 0x36, 0x51, 0x5b, 0x9c, + 0x5a, 0x09, 0x26, 0x34, 0x1c, 0x72, 0xee, 0x16, 0xb6, 0x5f, 0xd5, 0xbb, + 0xee, 0x68, 0xba, 0xec, 0x86, 0xd4, 0xe6, 0x6a, 0xda, 0x9a, 0x37, 0x4f, + 0xc5, 0xc6, 0x21, 0x74, 0x54, 0x63, 0xd3, 0x8b, 0x8e, 0xda, 0x71, 0xdb, + 0xb6, 0xb6, 0x08, 0x81, 0xc9, 0x8e, 0x49, 0xf3, 0x41, 0xbd, 0xe6, 0x58, + 0x34, 0xd4, 0x9f, 0x99, 0x1a, 0x84, 0x94, 0xf3, 0x3d, 0x16, 0x92, 0xce, + 0xa2, 0x6a, 0x79, 0x3c, 0x38, 0x90, 0x4f, 0x07, 0x85, 0x95, 0xf5, 0x9b, + 0xea, 0xe5, 0xd8, 0x99, 0x6f, 0xb6, 0x9a, 0x9c, 0xfc, 0x2c, 0x82, 0x5f, + 0x2d, 0x12, 0x2a, 0x79, 0xfa, 0x40, 0xc7, 0x6e, 0xe1, 0x75, 0x59, 0x35, + 0x53, 0x8b, 0xd4, 0x86, 0x59, 0x70, 0x6d, 0x4c, 0x61, 0x75, 0xc2, 0x09, + 0x73, 0xa5, 0xa6, 0x03, 0x40, 0xe4, 0xc8, 0x5c, 0xd5, 0x9f, 0xb6, 0xba, + 0xce, 0x7f, 0xed, 0x17, 0x64, 0x9c, 0x56, 0x52, 0xe0, 0x70, 0xf1, 0xc1, + 0xd0, 0x32, 0x75, 0x91, 0xa4, 0xbb, 0xf7, 0x92, 0x53, 0xcb, 0x8c, 0x5f, + 0x43, 0x20, 0x40, 0x23, 0xc1, 0x6a, 0xf4, 0x6c, 0x0c, 0x9b, 0xf3, 0x1b, + 0x9a, 0xd6, 0x9f, 0x4a, 0xb7, 0x06, 0x97, 0x76, 0x2e, 0x9f, 0xa3, 0xfe, + 0x6c, 0x95, 0xd9, 0xd9, 0xf5, 0x6b, 0x0f, 0xa9, 0xd4, 0xcc, 0xa0, 0x3e, + 0xcb, 0x90, 0xed, 0x2e, 0x0c, 0x1e, 0xc2, 0x41, 0x87, 0xc3, 0x7b, 0x4f, + 0x64, 0x6e, 0xad, 0x55, 0x1d, 0x2f, 0xa6, 0xd7, 0x46, 0x1b, 0x1b, 0x58, + 0xa8, 0x3b, 0xd3, 0x07, 0x89, 0xd0, 0x6e, 0x77, 0xde, 0x92, 0x9c, 0xd6, + 0x52, 0xfb, 0x73, 0x85, 0x4f, 0x78, 0xa4, 0xd4, 0xd2, 0x5b, 0x23, 0xda, + 0xf0, 0xe1, 0x02, 0x4f, 0x68, 0x52, 0xb3, 0xa3, 0xe4, 0x1b, 0x98, 0x6f, + 0xc7, 0x65, 0xd8, 0xc4, 0x38, 0xbd, 0xfa, 0x3d, 0xbf, 0x47, 0xdb, 0xe7, + 0xca, 0x9e, 0x16, 0x55, 0x7d, 0x47, 0x32, 0xbb, 0x29, 0x7b, 0x4b, 0x68, + 0x69, 0x63, 0xeb, 0x03, 0x74, 0x97, 0x01, 0x04, 0x11, 0xaf, 0xde, 0xb6, + 0xeb, 0x21, 0x8e, 0xda, 0xdd, 0x00, 0x3a, 0x47, 0x60, 0xe1, 0x20, 0x24, + 0xa7, 0x8f, 0xcd, 0xfa, 0xbb, 0xd2, 0xbd, 0x56, 0x1c, 0x70, 0xec, 0x4b, + 0xac, 0xb0, 0x30, 0x1a, 0x9c, 0x5b, 0x06, 0x0b, 0x8f, 0xe4, 0x40, 0x7f, + 0x47, 0xea, 0xf5, 0x38, 0xb3, 0x1b, 0x35, 0xb7, 0xb7, 0xb3, 0x2f, 0x6c, + 0x9f, 0xf3, 0x86, 0xab, 0xac, 0xca, 0xc5, 0x1f, 0x6b, 0x61, 0x0d, 0x9a, + 0xdd, 0xba, 0xc7, 0x38, 0x76, 0x74, 0x6d, 0x0b, 0x3e, 0xba, 0xd9, 0xeb, + 0x6e, 0xe5, 0xee, 0xd2, 0x67, 0x48, 0x69, 0x3f, 0xed, 0x49, 0x4f, 0x30, + 0xef, 0xda, 0x15, 0xba, 0x72, 0x30, 0x5e, 0x0d, 0x3b, 0xb7, 0x59, 0x41, + 0xdc, 0xdf, 0x33, 0xb7, 0x44, 0xa8, 0xea, 0x98, 0x37, 0xc0, 0x6d, 0xcd, + 0x1e, 0x01, 0xfe, 0xdf, 0x97, 0xba, 0x3f, 0x2a, 0xe8, 0x6d, 0x1f, 0x67, + 0xe9, 0x7d, 0x40, 0x97, 0x17, 0x3a, 0xba, 0xae, 0x3b, 0x8f, 0xc1, 0xc5, + 0x61, 0x74, 0xfc, 0x2a, 0xc7, 0x45, 0xc6, 0x2e, 0xa9, 0x96, 0x6f, 0x0e, + 0x79, 0xdc, 0xd0, 0x79, 0x49, 0x49, 0x9f, 0x54, 0x6a, 0x1b, 0x20, 0xc1, + 0x1b, 0x75, 0x08, 0x6f, 0xa2, 0xb8, 0x25, 0xc3, 0xe1, 0xa7, 0x7f, 0x81, + 0x49, 0x9d, 0x1f, 0x17, 0x66, 0xfc, 0x7b, 0x2c, 0xc5, 0xb1, 0xbf, 0x4f, + 0xd2, 0x71, 0xd9, 0xba, 0x27, 0xe8, 0x9d, 0x14, 0x1b, 0x57, 0x59, 0xac, + 0x3a, 0x0d, 0x79, 0x4c, 0x12, 0x21, 0xc3, 0xd3, 0x7c, 0x01, 0x3f, 0x9b, + 0xa2, 0x4a, 0x60, 0xca, 0x6c, 0x6b, 0xb7, 0xd5, 0x6b, 0x9a, 0xee, 0xda, + 0xf0, 0xad, 0xb7, 0xac, 0x75, 0x26, 0x30, 0xd5, 0x65, 0x8d, 0xb9, 0x9f, + 0xca, 0x1a, 0xfc, 0x8a, 0xa7, 0x6e, 0x50, 0xa4, 0x81, 0x95, 0x8f, 0x6e, + 0x31, 0x3c, 0xb8, 0x8d, 0xec, 0xff, 0x00, 0x39, 0x9f, 0xdc, 0xa4, 0xc7, + 0xe3, 0x64, 0x82, 0xd6, 0xdc, 0xd2, 0x08, 0xf1, 0x1f, 0xef, 0x49, 0x4e, + 0xe3, 0x3e, 0xb2, 0x61, 0x58, 0xc3, 0x56, 0x4d, 0x4f, 0xa2, 0xcd, 0xc1, + 0xc5, 0xc3, 0xdc, 0xdd, 0x3e, 0xe2, 0xaf, 0x63, 0xdf, 0x8b, 0x91, 0x88, + 0x4e, 0x35, 0xad, 0xb4, 0x82, 0xd0, 0x5a, 0xd2, 0x37, 0x7d, 0x22, 0x4e, + 0x87, 0x58, 0x5c, 0xa3, 0x28, 0x2c, 0xa3, 0x6b, 0x98, 0x64, 0x68, 0x48, + 0x33, 0xc7, 0x05, 0x56, 0x34, 0xed, 0x20, 0xb0, 0x90, 0x46, 0xa1, 0xcd, + 0x24, 0x19, 0xf9, 0x24, 0xa7, 0x63, 0xea, 0x70, 0xf5, 0x3a, 0xef, 0x56, + 0xbf, 0xf3, 0x85, 0x8e, 0x13, 0xde, 0x0b, 0x9f, 0xfd, 0xcb, 0xa5, 0xa2, + 0xa7, 0x1a, 0xe0, 0x98, 0x6e, 0xe9, 0xf9, 0x4a, 0xc3, 0xfa, 0x97, 0x43, + 0x6b, 0x76, 0x7d, 0xe4, 0x43, 0xbd, 0xbb, 0x8f, 0x1a, 0xc1, 0x27, 0xf2, + 0xae, 0x93, 0x19, 0xa5, 0xd5, 0xb5, 0xa7, 0x82, 0x78, 0xf9, 0x24, 0xa7, + 0x27, 0x28, 0x8f, 0x55, 0xd1, 0xc4, 0x93, 0xf8, 0xac, 0x0e, 0xae, 0x1e, + 0xec, 0xcd, 0x08, 0x20, 0x56, 0xd0, 0x44, 0xc1, 0xee, 0x7e, 0x1d, 0xd6, + 0xed, 0xcd, 0x81, 0xf0, 0x1f, 0x94, 0xac, 0x0e, 0xa4, 0xe6, 0x8e, 0xa5, + 0x68, 0x04, 0x13, 0x0c, 0x00, 0x1d, 0x38, 0x68, 0x49, 0x4d, 0x33, 0xb3, + 0x6e, 0xcb, 0x75, 0x91, 0x10, 0xf6, 0x88, 0xfc, 0x53, 0xb6, 0x96, 0xb5, + 0xbb, 0xaa, 0x73, 0x9b, 0xe0, 0x58, 0xed, 0x3f, 0xcd, 0x7c, 0xab, 0x03, + 0x60, 0x6e, 0xe7, 0x34, 0x81, 0xe2, 0xd3, 0x3f, 0x93, 0xfb, 0x94, 0x36, + 0xd4, 0x7e, 0x81, 0x9f, 0x18, 0xf6, 0x99, 0xf9, 0x7f, 0x72, 0x4a, 0x51, + 0x7e, 0x5b, 0x04, 0x12, 0xdb, 0x81, 0xe2, 0x1d, 0xb1, 0xff, 0x00, 0x71, + 0x90, 0xa3, 0xf6, 0x9a, 0xd8, 0x5a, 0xcb, 0x9a, 0x6a, 0xd4, 0x6e, 0x2e, + 0x05, 0xa4, 0x0e, 0xe4, 0x1d, 0x5a, 0x53, 0x92, 0xe6, 0xd6, 0x46, 0xd0, + 0x67, 0x59, 0x23, 0xdc, 0x3e, 0x0e, 0x6f, 0xf7, 0x27, 0x0f, 0x63, 0x9a, + 0x1b, 0x64, 0xb0, 0x1e, 0x1c, 0xe1, 0xb9, 0xbf, 0x82, 0x4a, 0x6c, 0x74, + 0xaf, 0x77, 0x50, 0xc7, 0x73, 0x5e, 0x1e, 0xd7, 0x12, 0x38, 0xe4, 0x10, + 0x51, 0xb2, 0x5d, 0xb3, 0x32, 0xb2, 0xf0, 0x43, 0x7e, 0xd0, 0x01, 0xd3, + 0x99, 0x72, 0x17, 0x4a, 0xc3, 0xa7, 0xf6, 0xa5, 0x76, 0x57, 0x13, 0x53, + 0x4b, 0xc3, 0x9b, 0xa0, 0x27, 0xe8, 0xeb, 0x1a, 0x77, 0x56, 0xef, 0x2d, + 0xfb, 0x68, 0x7b, 0xc4, 0x35, 0xb7, 0x87, 0x6e, 0x3c, 0x40, 0x94, 0x94, + 0xac, 0x96, 0x36, 0xdb, 0x5a, 0xdd, 0x21, 0xed, 0x90, 0x3e, 0x2f, 0x79, + 0x94, 0x5c, 0x56, 0x35, 0xcf, 0xc8, 0x6b, 0x86, 0x81, 0x8c, 0x69, 0x9f, + 0x02, 0x64, 0xa0, 0x3c, 0x38, 0x7d, 0x9c, 0x91, 0xa9, 0xa5, 0x81, 0xc0, + 0xf8, 0x92, 0xff, 0x00, 0x05, 0x62, 0xa6, 0x34, 0x8b, 0xde, 0xc9, 0x74, + 0xbe, 0xae, 0x0c, 0x1d, 0x12, 0x52, 0x07, 0x5f, 0x95, 0x87, 0x9f, 0x68, + 0xdb, 0x14, 0x5b, 0x15, 0x48, 0x3f, 0x98, 0xdd, 0x5b, 0xf2, 0x56, 0xbd, + 0x46, 0x4e, 0xe9, 0xed, 0x33, 0xf3, 0x88, 0x45, 0xb2, 0x8f, 0x53, 0x25, + 0xd5, 0xbb, 0x52, 0xd0, 0xe2, 0x7e, 0x7d, 0xfe, 0x4b, 0x3f, 0xd2, 0x3e, + 0x9c, 0x49, 0x8d, 0xb1, 0xbb, 0xe5, 0xcf, 0xde, 0x92, 0x9b, 0x99, 0xd4, + 0xb5, 0x99, 0xc5, 0xc6, 0x1d, 0xb1, 0xfb, 0x40, 0x88, 0x31, 0x21, 0x52, + 0xcc, 0xea, 0x83, 0x1f, 0xab, 0x5a, 0xc2, 0xd3, 0xe9, 0xb7, 0x6b, 0x63, + 0xb4, 0xed, 0x13, 0xaa, 0xd8, 0xea, 0x75, 0x01, 0x65, 0xb6, 0xb4, 0xea, + 0x0e, 0xfd, 0x79, 0x10, 0x57, 0x31, 0x7d, 0xdf, 0xe5, 0x0c, 0x9d, 0xe7, + 0xdd, 0xea, 0x19, 0x9d, 0x79, 0xf2, 0x72, 0x4a, 0x77, 0x6b, 0xcd, 0xc5, + 0xbd, 0xb3, 0x20, 0xfc, 0x7b, 0x7d, 0xea, 0x39, 0x0d, 0xa3, 0xd2, 0x2f, + 0xf5, 0x5f, 0x50, 0xf1, 0x6c, 0xb8, 0x7d, 0xda, 0xac, 0x5f, 0x52, 0xa0, + 0x34, 0x00, 0x93, 0xe0, 0x76, 0x9f, 0xe2, 0x9c, 0xe4, 0xed, 0x10, 0x1c, + 0xe0, 0x3c, 0xf5, 0x11, 0xf2, 0x49, 0x4c, 0xed, 0xb7, 0x21, 0xd6, 0xfe, + 0xaf, 0x98, 0xc7, 0xb0, 0x0f, 0xa0, 0x5a, 0x47, 0xdf, 0xdd, 0x76, 0x9f, + 0x56, 0x69, 0x7d, 0x5d, 0x31, 0xaf, 0xb6, 0x3d, 0x5b, 0xdc, 0xeb, 0x0c, + 0x78, 0x7d, 0x16, 0xfe, 0x45, 0xe7, 0xd7, 0xe4, 0x96, 0x59, 0x2c, 0x6d, + 0x6e, 0x07, 0x4d, 0xc3, 0xe9, 0x0f, 0xbd, 0x7a, 0x1f, 0x4f, 0xdd, 0x46, + 0x1e, 0x3b, 0x1d, 0xa1, 0x6d, 0x6c, 0x04, 0x78, 0x68, 0x27, 0xf1, 0x49, + 0x4d, 0x9c, 0x5c, 0x80, 0x59, 0x7b, 0x2c, 0x3a, 0xd3, 0x65, 0x80, 0xff, + 0x00, 0x56, 0x77, 0x0f, 0xc0, 0xaa, 0xde, 0xab, 0x6f, 0x6d, 0x56, 0x57, + 0x21, 0x87, 0xdc, 0xd9, 0xe7, 0x52, 0x06, 0xbf, 0x7a, 0xa1, 0x76, 0x45, + 0x94, 0x75, 0x0b, 0x43, 0x0f, 0xf3, 0xa1, 0xb6, 0x34, 0x76, 0x25, 0xa4, + 0xb1, 0xc3, 0xee, 0x21, 0x3f, 0x44, 0xb4, 0xe4, 0xe3, 0xb4, 0x4c, 0x16, + 0xef, 0x61, 0x6f, 0xee, 0x96, 0xbc, 0xc8, 0xfc, 0x12, 0x53, 0x6f, 0x28, + 0xb5, 0xd7, 0x5e, 0x48, 0x90, 0xc6, 0x06, 0xb7, 0xc2, 0x40, 0x5c, 0xa5, + 0x78, 0xf5, 0x8a, 0x4b, 0x9d, 0x2f, 0xe7, 0x57, 0x19, 0xd3, 0xc8, 0x1f, + 0xbd, 0x6d, 0xe7, 0xde, 0x28, 0xe9, 0x76, 0xba, 0xbf, 0xe7, 0x2d, 0xfd, + 0x1b, 0x7f, 0xac, 0xed, 0x0f, 0xf7, 0xac, 0xc2, 0x5b, 0x48, 0xaf, 0x70, + 0xdb, 0x5c, 0x41, 0x74, 0x48, 0x1c, 0x41, 0x29, 0x29, 0xa8, 0x6a, 0xcb, + 0xa1, 0xc1, 0x96, 0x3a, 0xfc, 0x6d, 0xc0, 0x3e, 0xa6, 0xee, 0x78, 0x69, + 0x69, 0xee, 0x04, 0xa2, 0x9a, 0xcb, 0x9e, 0xe7, 0x5c, 0xe2, 0xf0, 0x35, + 0x25, 0xe7, 0x77, 0x6f, 0x39, 0x4f, 0x7d, 0x97, 0x1c, 0x9b, 0x6e, 0xbf, + 0x29, 0xd6, 0xd8, 0xfd, 0x41, 0x73, 0x78, 0x0d, 0xd2, 0x1a, 0x1b, 0x02, + 0x14, 0x1d, 0x91, 0x5d, 0x8e, 0x98, 0x7b, 0x40, 0x00, 0xbb, 0x70, 0x80, + 0x63, 0xba, 0x4a, 0x4d, 0x84, 0xc6, 0x62, 0x65, 0x57, 0x97, 0x50, 0xd8, + 0x43, 0x80, 0xb0, 0x0e, 0xec, 0x77, 0x20, 0xfc, 0x17, 0x5a, 0xc7, 0xb1, + 0xf6, 0x1d, 0xa4, 0x12, 0xe1, 0x1a, 0x78, 0xb7, 0x5f, 0xc8, 0x57, 0x26, + 0xf7, 0x81, 0x58, 0x24, 0x38, 0x6e, 0x8e, 0x7b, 0x48, 0x85, 0xa7, 0x88, + 0xf2, 0x2b, 0xa0, 0x50, 0x4b, 0x5c, 0xfa, 0xdc, 0x00, 0xf0, 0x73, 0x07, + 0x6f, 0x82, 0x4a, 0x6c, 0x64, 0xfa, 0xb9, 0x35, 0xe5, 0x7a, 0x56, 0x6c, + 0x7d, 0x76, 0x35, 0xc0, 0xf3, 0x0d, 0x68, 0x87, 0x01, 0xf1, 0x54, 0xb0, + 0xea, 0xf4, 0xa9, 0xa6, 0xa2, 0x64, 0x57, 0xcb, 0x8f, 0x3c, 0x72, 0xb4, + 0x3a, 0x1c, 0xdb, 0x88, 0xf7, 0x59, 0xa9, 0x7b, 0x9c, 0x5f, 0x3e, 0x7c, + 0xaa, 0x4f, 0xa1, 0xad, 0xea, 0x14, 0xb0, 0xbb, 0x6b, 0x49, 0x73, 0x3b, + 0xfb, 0x9f, 0xd8, 0x24, 0xa6, 0x8e, 0x7b, 0x6f, 0xc7, 0xfa, 0xbb, 0xd4, + 0x6c, 0xbe, 0x7d, 0x47, 0xd4, 0xe0, 0xe8, 0x32, 0xdf, 0xd2, 0x58, 0x00, + 0x8f, 0x93, 0x94, 0xba, 0x75, 0x2c, 0xfd, 0x97, 0x8a, 0x3b, 0x0a, 0x5a, + 0x08, 0xf3, 0xd1, 0x13, 0xeb, 0x75, 0x9b, 0x3e, 0xae, 0xe4, 0x57, 0xc7, + 0xa8, 0x69, 0x63, 0x7c, 0xcb, 0x9e, 0x1f, 0xf9, 0x1a, 0x96, 0x15, 0x71, + 0x45, 0x74, 0xc4, 0x90, 0xd0, 0xd0, 0x7c, 0x12, 0x52, 0x0e, 0x9a, 0xc1, + 0x19, 0x64, 0xea, 0x1f, 0x69, 0x86, 0xfe, 0xe8, 0xd5, 0xaa, 0xc6, 0x03, + 0x3d, 0x49, 0x7d, 0x9a, 0x01, 0xea, 0x71, 0xe0, 0xe7, 0x6d, 0x1f, 0x82, + 0x9e, 0x25, 0x4d, 0x65, 0x16, 0x16, 0x88, 0x2e, 0x25, 0xf3, 0xe3, 0xca, + 0x1f, 0x49, 0x65, 0xa4, 0xda, 0xd7, 0x38, 0x96, 0xb2, 0xaa, 0x9b, 0xf1, + 0x98, 0x24, 0xfd, 0xe9, 0x29, 0x2b, 0x8b, 0x2c, 0xa3, 0xd5, 0xb0, 0x6d, + 0x64, 0x49, 0xdd, 0xda, 0x0c, 0x6a, 0x81, 0x93, 0xd1, 0xba, 0x65, 0xf9, + 0x54, 0x9b, 0x71, 0xd9, 0x16, 0x4c, 0x90, 0x36, 0x92, 0x47, 0x69, 0x6a, + 0xbc, 0x1a, 0x4e, 0x0d, 0x9b, 0x99, 0xa7, 0xa8, 0xf6, 0x8f, 0xea, 0x87, + 0x8f, 0x72, 0x46, 0xaa, 0xf2, 0x8f, 0x4d, 0xb4, 0x4b, 0x46, 0xe3, 0x60, + 0x1d, 0xfe, 0x89, 0x22, 0x52, 0x53, 0x89, 0x99, 0xf5, 0x75, 0xd8, 0xb5, + 0x9b, 0x30, 0x72, 0xac, 0xaa, 0x5c, 0x40, 0xae, 0xcf, 0x7b, 0x60, 0x7c, + 0x75, 0x0b, 0x33, 0x2a, 0x8e, 0xa7, 0x85, 0x36, 0x65, 0xd3, 0xbd, 0x8c, + 0x12, 0xeb, 0x6b, 0x32, 0x23, 0xc6, 0x34, 0x2b, 0xb3, 0xca, 0xa8, 0xbe, + 0xea, 0x5b, 0x20, 0xd6, 0xe6, 0x03, 0xb7, 0xcd, 0xce, 0x04, 0x7e, 0x0b, + 0x33, 0xa9, 0xd8, 0x5f, 0xd3, 0xba, 0xe6, 0xe1, 0xa5, 0x26, 0xca, 0xeb, + 0x3e, 0x4d, 0x63, 0x7f, 0xbd, 0x25, 0x32, 0xfa, 0xa9, 0x78, 0xc8, 0xe9, + 0xd9, 0x56, 0xd6, 0x77, 0x0b, 0x1f, 0xa1, 0x22, 0x0e, 0x80, 0x05, 0xd4, + 0xd1, 0x4e, 0xda, 0x83, 0xc7, 0x20, 0x48, 0x1e, 0x70, 0xb9, 0x1f, 0xa8, + 0xf5, 0xb8, 0x74, 0x46, 0x91, 0xf9, 0xf6, 0x3b, 0xf2, 0xc2, 0xed, 0x18, + 0xd1, 0x5d, 0x11, 0xd8, 0x35, 0x25, 0x3c, 0xad, 0x6d, 0x78, 0xa4, 0x31, + 0xee, 0x97, 0x06, 0xb7, 0xdd, 0xe2, 0x56, 0x07, 0x55, 0xaa, 0xb7, 0x75, + 0x1c, 0x87, 0x32, 0x58, 0xfd, 0xfa, 0x96, 0x99, 0x04, 0x80, 0x3f, 0x34, + 0xc8, 0x5d, 0x28, 0x12, 0x76, 0x88, 0x23, 0x4e, 0x38, 0x8e, 0x4a, 0xc1, + 0xbd, 0xa2, 0xdc, 0xac, 0x8b, 0x01, 0x06, 0x6c, 0x7c, 0x02, 0x3c, 0xcf, + 0xcd, 0x25, 0x34, 0x6a, 0xcc, 0xba, 0xbd, 0x2c, 0xa9, 0x97, 0xd6, 0x74, + 0x76, 0x86, 0xb7, 0x47, 0x1d, 0xa5, 0xb3, 0xf2, 0x44, 0x19, 0x7d, 0x2d, + 0xc2, 0x2c, 0x0f, 0xc7, 0x71, 0xed, 0x63, 0x77, 0x37, 0xfc, 0xe6, 0xca, + 0x93, 0xea, 0xb2, 0xb6, 0xee, 0xf4, 0xa6, 0x39, 0x2c, 0x3a, 0xfd, 0xc7, + 0x54, 0x20, 0xfa, 0x1d, 0xed, 0x3e, 0xd2, 0x39, 0x0e, 0x6a, 0x4a, 0x6c, + 0x3d, 0xb5, 0xda, 0x03, 0x71, 0xec, 0x63, 0xf4, 0x11, 0xb0, 0xcf, 0xe1, + 0x28, 0x36, 0x36, 0xfa, 0xbd, 0xb6, 0x36, 0x4b, 0x7b, 0x8f, 0x04, 0x07, + 0xe1, 0xe3, 0x3b, 0xdc, 0x23, 0x77, 0xf2, 0x4c, 0x1f, 0xc1, 0x13, 0xd0, + 0xcb, 0x7c, 0x1a, 0xf2, 0x5d, 0x20, 0xcc, 0x58, 0x77, 0xff, 0x00, 0xd2, + 0xe5, 0x25, 0x3a, 0x3f, 0x57, 0xf6, 0xfd, 0xb2, 0xd2, 0x3e, 0x97, 0xa5, + 0xed, 0xd3, 0xf9, 0x4d, 0xee, 0x13, 0x67, 0x4b, 0x40, 0x04, 0xcc, 0xb8, + 0xb8, 0x8e, 0xdc, 0xa2, 0x74, 0x53, 0x96, 0x32, 0x9e, 0x72, 0x6b, 0x61, + 0x0c, 0x61, 0xfd, 0x2b, 0x0c, 0x6a, 0x4f, 0x04, 0x47, 0x97, 0x8a, 0x16, + 0x65, 0x81, 0xa1, 0xbb, 0x8e, 0xae, 0x9d, 0xb3, 0xdb, 0x9f, 0xef, 0x49, + 0x4d, 0xf1, 0xb4, 0x8a, 0x99, 0xb6, 0x4b, 0x2b, 0x61, 0x33, 0xe1, 0x12, + 0xa4, 0x48, 0x01, 0xa0, 0x37, 0xf4, 0x4e, 0x73, 0x5d, 0xbc, 0x48, 0x3e, + 0xdd, 0x63, 0x51, 0x0e, 0x94, 0xac, 0x63, 0x06, 0x61, 0x6b, 0xfe, 0x80, + 0xf4, 0x83, 0x87, 0x22, 0x1a, 0x1a, 0x0a, 0xb9, 0x95, 0x7e, 0x53, 0x72, + 0x6f, 0x6b, 0xa1, 0xf4, 0x33, 0x41, 0x8e, 0x46, 0x8e, 0x10, 0x0e, 0xb3, + 0xc4, 0xa4, 0xa4, 0x26, 0xe0, 0x6e, 0xb5, 0xfd, 0xdf, 0xed, 0x64, 0xf8, + 0x77, 0xfc, 0xaa, 0x1e, 0x8b, 0x36, 0xfa, 0x92, 0x26, 0x22, 0x3f, 0x3a, + 0x51, 0x1b, 0x8f, 0x5b, 0xa8, 0x75, 0xd7, 0x17, 0xb2, 0xb6, 0x90, 0xc6, + 0xb6, 0xbd, 0x5e, 0xe2, 0xef, 0x33, 0xe0, 0xa5, 0xf6, 0x01, 0x1f, 0x68, + 0xf5, 0x3f, 0x43, 0x13, 0xea, 0x7e, 0x74, 0xf1, 0xb7, 0x67, 0xef, 0x4f, + 0xc9, 0x25, 0x32, 0xce, 0x16, 0xe4, 0x63, 0xdf, 0x55, 0x6e, 0x0c, 0xb1, + 0xfb, 0xc7, 0xa9, 0xfb, 0xa0, 0x1e, 0x42, 0xe4, 0xb2, 0x2b, 0x79, 0x7d, + 0xdb, 0x46, 0xfb, 0x77, 0x10, 0xeb, 0xa6, 0x64, 0x8d, 0x26, 0x04, 0xae, + 0xc1, 0xde, 0xa6, 0xfb, 0x5a, 0xd8, 0xd1, 0xae, 0x82, 0x47, 0x72, 0xb9, + 0x26, 0x62, 0xb5, 0x85, 0xf6, 0x07, 0xcb, 0x9e, 0x4b, 0x9d, 0xac, 0x19, + 0x27, 0x58, 0x05, 0x25, 0x22, 0x6e, 0x83, 0x6b, 0xb4, 0x8e, 0xd0, 0xa4, + 0xd6, 0x17, 0x92, 0x77, 0x4f, 0x97, 0x82, 0x31, 0xb6, 0xe6, 0x88, 0x77, + 0xbc, 0x76, 0x04, 0x6e, 0xfc, 0xaa, 0xb5, 0x99, 0x01, 0x92, 0x36, 0x47, + 0xc2, 0x42, 0x4a, 0x4f, 0x81, 0x88, 0x32, 0xfa, 0xa6, 0x36, 0x3c, 0x02, + 0x1c, 0xf0, 0x5e, 0x3f, 0x92, 0xcf, 0x73, 0xbf, 0x22, 0xef, 0xae, 0x30, + 0xde, 0x3e, 0x4b, 0x92, 0xfa, 0x9c, 0xcf, 0x5f, 0xa9, 0x5d, 0x90, 0xe9, + 0x8a, 0x6a, 0x81, 0x3a, 0xea, 0xf3, 0x1f, 0x90, 0x2e, 0xb3, 0x23, 0x89, + 0x9d, 0x7c, 0x12, 0x53, 0x91, 0xd5, 0x1c, 0x19, 0xb3, 0x20, 0xe8, 0x5b, + 0x20, 0xfc, 0x1c, 0x16, 0x5f, 0xd5, 0x4b, 0xba, 0x96, 0xdc, 0xe7, 0xb0, + 0x6d, 0xc3, 0x6d, 0xc4, 0x8b, 0x8e, 0xa7, 0x77, 0xe7, 0x31, 0xbd, 0xfb, + 0x09, 0x2a, 0xef, 0x5c, 0xb4, 0x33, 0x0d, 0xfb, 0xf8, 0xda, 0x67, 0xe4, + 0x25, 0x4f, 0xa1, 0x52, 0xcc, 0x7f, 0xab, 0x61, 0xd6, 0x1f, 0xd1, 0xda, + 0xc0, 0xf7, 0x3b, 0xb4, 0xbf, 0xdd, 0xaf, 0xde, 0x92, 0x90, 0x64, 0x58, + 0xe7, 0xd3, 0x4b, 0x27, 0x7c, 0xfb, 0xe3, 0xf9, 0x4f, 0x00, 0x23, 0x3e, + 0xe1, 0x53, 0x0b, 0xf9, 0x03, 0x4d, 0xbc, 0x8e, 0x61, 0x54, 0xae, 0x8f, + 0xb3, 0xd8, 0xca, 0x83, 0xcd, 0x8d, 0x2f, 0x90, 0x49, 0x9d, 0xa2, 0x3e, + 0x88, 0x3e, 0x4a, 0xcd, 0xac, 0x96, 0xed, 0x3c, 0x10, 0x0f, 0xde, 0x65, + 0x25, 0x20, 0x75, 0x6f, 0x17, 0x57, 0x71, 0x6b, 0x1a, 0xc3, 0x06, 0x20, + 0x12, 0xef, 0x2d, 0x15, 0xde, 0xa5, 0x9f, 0x8b, 0x99, 0x55, 0x55, 0xd1, + 0x8e, 0xda, 0x5e, 0x5e, 0x1c, 0x5f, 0x02, 0x76, 0xb6, 0x5a, 0x46, 0x81, + 0x04, 0x8f, 0xd2, 0x57, 0x4b, 0x1a, 0x4e, 0xe0, 0x20, 0xc7, 0x78, 0x50, + 0xdc, 0x1c, 0x01, 0xa8, 0x49, 0x1b, 0x84, 0xc6, 0x9c, 0xeb, 0x09, 0x29, + 0x0e, 0x59, 0x7f, 0xa0, 0x64, 0x9e, 0x09, 0x3e, 0x1a, 0x10, 0x51, 0x01, + 0x9c, 0x07, 0x12, 0x48, 0xd8, 0xdb, 0x22, 0x3c, 0xcf, 0x8a, 0x86, 0x54, + 0x3d, 0xbb, 0x5d, 0xc9, 0x61, 0x04, 0x77, 0x4e, 0xc0, 0x3e, 0xc9, 0xb0, + 0x10, 0x7d, 0x42, 0x5b, 0xa1, 0xfe, 0x52, 0x4a, 0x7a, 0x2e, 0x94, 0xcf, + 0x4f, 0x0e, 0x8a, 0xff, 0x00, 0x38, 0x34, 0x6e, 0xf8, 0x9d, 0x4f, 0xe2, + 0x55, 0x0e, 0xa1, 0x14, 0xf5, 0x66, 0xd8, 0xf7, 0x38, 0x00, 0xf0, 0x58, + 0xd6, 0xfd, 0x19, 0x73, 0x67, 0x73, 0xa3, 0xc2, 0x0a, 0xbd, 0x4e, 0x46, + 0x2e, 0x2d, 0x62, 0xcc, 0x9b, 0x9b, 0x4b, 0x7b, 0x6f, 0x20, 0x05, 0x5f, + 0xa9, 0x1c, 0x6c, 0xab, 0x2b, 0xba, 0xa7, 0xb6, 0xec, 0x7b, 0x98, 0xe6, + 0x38, 0xb0, 0xc8, 0x31, 0xda, 0x47, 0x93, 0x92, 0x53, 0x8f, 0xf5, 0xad, + 0xf5, 0xdf, 0xd2, 0xf1, 0xe8, 0x71, 0x35, 0x87, 0x5e, 0xc2, 0xd7, 0x01, + 0x32, 0x5a, 0xd3, 0x00, 0xab, 0x74, 0x38, 0x31, 0xad, 0xd3, 0x4f, 0x6e, + 0xdf, 0x90, 0x0a, 0x9f, 0x5c, 0xae, 0xab, 0x31, 0xa8, 0xa1, 0xcc, 0x71, + 0x87, 0xee, 0xad, 0xed, 0xd4, 0x30, 0xb6, 0x36, 0xee, 0x57, 0xeb, 0x03, + 0x68, 0x67, 0x04, 0x13, 0x0e, 0xfc, 0xdd, 0x1a, 0x00, 0x49, 0x4c, 0x19, + 0x49, 0xae, 0x8a, 0x59, 0x24, 0x06, 0x83, 0xba, 0x3f, 0xaa, 0x7f, 0x8a, + 0x7e, 0x99, 0x2d, 0x6e, 0x66, 0xef, 0xdf, 0x01, 0xb1, 0xe0, 0xd6, 0xe8, + 0x89, 0x64, 0x0b, 0x5c, 0xc3, 0x00, 0x41, 0x0d, 0x1e, 0x3a, 0x6a, 0xa3, + 0x88, 0xd3, 0xea, 0x3d, 0x83, 0x87, 0x59, 0xcf, 0x94, 0x6a, 0x92, 0x9b, + 0x35, 0x38, 0xd9, 0x8b, 0x6c, 0xb6, 0x22, 0xe7, 0x30, 0x4f, 0x04, 0x0e, + 0xff, 0x00, 0x7a, 0x15, 0x17, 0x52, 0xfb, 0x3d, 0x3a, 0x9f, 0xb9, 0xd8, + 0xcc, 0x73, 0x5e, 0xdf, 0x38, 0x20, 0x8f, 0xc1, 0x59, 0x0d, 0x6b, 0x68, + 0x60, 0x1a, 0x82, 0xe2, 0x7f, 0x12, 0xab, 0xe1, 0xe3, 0x34, 0x65, 0x5b, + 0x74, 0x0d, 0xce, 0x6b, 0x49, 0x3f, 0x10, 0xe3, 0xff, 0x00, 0x7e, 0x49, + 0x49, 0x2e, 0xad, 0xd4, 0xe4, 0xe0, 0xd6, 0xc3, 0x2c, 0xa4, 0x16, 0x96, + 0x8e, 0xfb, 0x6b, 0x31, 0x2b, 0x37, 0xad, 0x69, 0xf5, 0x77, 0xaa, 0x58, + 0x63, 0x7b, 0xac, 0xb6, 0x63, 0xc1, 0xd6, 0x31, 0xa0, 0xfd, 0xc1, 0x6b, + 0x59, 0x58, 0x66, 0x73, 0x9c, 0x49, 0x21, 0xd6, 0xd8, 0xed, 0x4c, 0xc7, + 0xb5, 0x8d, 0xd1, 0x73, 0x5d, 0x5d, 0xb7, 0x55, 0xf5, 0x57, 0x32, 0xdb, + 0x5d, 0x2f, 0xbe, 0xe2, 0x23, 0xc9, 0xd6, 0x37, 0xff, 0x00, 0x22, 0x92, + 0x9d, 0x9f, 0xa9, 0x35, 0x86, 0xf4, 0x7c, 0x36, 0xf8, 0xb5, 0xce, 0xf9, + 0xb9, 0xc7, 0xfb, 0xd7, 0x4f, 0x71, 0x8a, 0x5e, 0x7c, 0x1a, 0x78, 0xf8, + 0x2c, 0x3f, 0xaa, 0x15, 0x16, 0xf4, 0xac, 0x50, 0x7f, 0x36, 0x96, 0x11, + 0xfd, 0xa1, 0x2b, 0x76, 0xc7, 0x06, 0xb1, 0xce, 0x3c, 0x01, 0x29, 0x29, + 0xe7, 0x2e, 0x78, 0x63, 0xbe, 0x8b, 0x8e, 0xd2, 0x01, 0x0d, 0x1a, 0xe8, + 0x7c, 0x17, 0x21, 0x67, 0x59, 0x6b, 0xed, 0x83, 0x4b, 0x9a, 0x24, 0xef, + 0x2e, 0x12, 0x64, 0x9e, 0xdb, 0x7f, 0xb9, 0x75, 0xd9, 0x2e, 0x6f, 0xa1, + 0x91, 0x60, 0xe4, 0x31, 0xef, 0xd7, 0x40, 0x48, 0x6c, 0xae, 0x31, 0xbd, + 0x4b, 0x12, 0xc0, 0xdf, 0xb6, 0x50, 0x71, 0xb7, 0x70, 0xe8, 0xdc, 0xc3, + 0xf0, 0x3c, 0xa4, 0xa7, 0x5f, 0x18, 0x57, 0x99, 0x54, 0xd1, 0x90, 0xc2, + 0xee, 0x0d, 0x65, 0xc0, 0x3b, 0xfc, 0xd7, 0x42, 0x0d, 0x98, 0x57, 0xd4, + 0xe7, 0x1b, 0x6b, 0x8a, 0xc3, 0x67, 0x74, 0x18, 0x24, 0x79, 0x89, 0x40, + 0xaf, 0xa7, 0x61, 0x65, 0x80, 0xec, 0x6b, 0x5b, 0x61, 0xf0, 0x69, 0x04, + 0xc7, 0xc0, 0xea, 0xa7, 0x5b, 0x3a, 0x8e, 0x20, 0x22, 0xab, 0xad, 0xad, + 0xbd, 0xc0, 0x32, 0xd2, 0x3f, 0xaa, 0xed, 0x3f, 0x04, 0x94, 0x86, 0xd6, + 0x51, 0xa9, 0x20, 0xb3, 0xf1, 0x0a, 0x2c, 0x05, 0x83, 0x7d, 0x6f, 0x96, + 0xfd, 0xff, 0x00, 0x95, 0x5c, 0x39, 0x99, 0xb0, 0x0d, 0xf5, 0xd7, 0x90, + 0xce, 0xf2, 0xd0, 0xc7, 0x7f, 0xd1, 0xfe, 0xe5, 0x5d, 0xd7, 0x62, 0x3a, + 0xc8, 0x7e, 0x3b, 0xa9, 0x6f, 0x3b, 0xda, 0x49, 0x8f, 0x8e, 0xd9, 0xfc, + 0x89, 0x29, 0xd4, 0xe8, 0x8f, 0x77, 0xa5, 0x95, 0x75, 0xcd, 0x0d, 0x0d, + 0xda, 0xd0, 0x46, 0x9d, 0x8f, 0x6f, 0x9a, 0xa1, 0xd4, 0x1a, 0xdf, 0x49, + 0xdb, 0xf8, 0x8d, 0xbf, 0xd5, 0x92, 0x35, 0x5a, 0x5d, 0x3e, 0xcc, 0x76, + 0xf4, 0xfc, 0x87, 0x57, 0x60, 0xb1, 0xa5, 0xed, 0x1a, 0x19, 0x82, 0x74, + 0xd7, 0xb8, 0x54, 0x73, 0x81, 0xf4, 0x1c, 0x26, 0x01, 0x2c, 0x03, 0xfb, + 0x56, 0x30, 0x24, 0xa7, 0x57, 0x25, 0xb6, 0x3f, 0xa8, 0x9a, 0x9a, 0x1a, + 0x5c, 0xe7, 0x9a, 0xda, 0x7b, 0x70, 0x39, 0x56, 0xf6, 0xe4, 0x31, 0xad, + 0x19, 0x58, 0xad, 0xb9, 0x95, 0xe8, 0x2d, 0x20, 0xbb, 0x6b, 0x47, 0x01, + 0xc5, 0xbc, 0xfc, 0xc2, 0x86, 0x3b, 0x5b, 0x6f, 0x54, 0x16, 0x81, 0xa0, + 0xc8, 0x70, 0xf3, 0xd0, 0x10, 0x23, 0xee, 0x46, 0x34, 0x00, 0xfb, 0x0e, + 0x3d, 0xaf, 0x8b, 0x1c, 0xe0, 0xe6, 0x10, 0x5a, 0x44, 0x9e, 0x43, 0x81, + 0x82, 0x92, 0x90, 0xd7, 0x65, 0x2f, 0xae, 0xcc, 0x73, 0x66, 0xd6, 0x97, + 0x07, 0x32, 0xc6, 0x8d, 0xc1, 0xa5, 0xa6, 0x00, 0x70, 0xf0, 0x20, 0x23, + 0x4e, 0x3f, 0xd9, 0xbe, 0xcf, 0xeb, 0xb2, 0x67, 0x7e, 0xed, 0x76, 0x6e, + 0x9e, 0x14, 0xef, 0x05, 0x95, 0x53, 0x0c, 0xa9, 0xe0, 0x57, 0x2e, 0x6d, + 0x9e, 0xd7, 0xc7, 0x8b, 0x4e, 0x8a, 0xa4, 0x33, 0x6c, 0xc7, 0xe7, 0xce, + 0xdd, 0xc6, 0x36, 0xcc, 0x6d, 0x98, 0x94, 0x94, 0x9a, 0xc7, 0x00, 0x2c, + 0x61, 0x96, 0xb8, 0xcc, 0x93, 0xf9, 0x57, 0x37, 0xe8, 0x4b, 0x40, 0x06, + 0x67, 0x8d, 0x67, 0x4f, 0x82, 0xe9, 0x32, 0x2c, 0x63, 0xb1, 0xb2, 0x1e, + 0xf8, 0x2e, 0x65, 0x6f, 0x21, 0xc3, 0xb7, 0xb4, 0xae, 0x57, 0x1a, 0xeb, + 0x9a, 0xc0, 0x3d, 0x8f, 0x1c, 0x0d, 0x4b, 0x4f, 0xe3, 0x29, 0x29, 0xb4, + 0x31, 0x03, 0x60, 0x8f, 0x69, 0xef, 0xcb, 0x79, 0xfc, 0x13, 0x8a, 0x2d, + 0x68, 0x24, 0xc9, 0xd3, 0xc0, 0x58, 0xdf, 0xc2, 0x10, 0x7e, 0xd9, 0x90, + 0x22, 0x58, 0xe8, 0x3c, 0xc4, 0x39, 0x19, 0x9d, 0x4b, 0xd3, 0x69, 0xf5, + 0x36, 0x90, 0x04, 0xeb, 0xed, 0x21, 0x25, 0x3a, 0x9d, 0x06, 0xcc, 0x4c, + 0x26, 0x5a, 0x6e, 0xdd, 0x6d, 0xf6, 0x10, 0x7d, 0x1a, 0x18, 0xe7, 0xc0, + 0x03, 0x4d, 0xd0, 0x20, 0x7c, 0x15, 0xcc, 0x9e, 0xa3, 0x9d, 0x61, 0xdd, + 0x4f, 0x4c, 0xc8, 0xf4, 0xbb, 0x48, 0x64, 0x9f, 0x96, 0xe9, 0x55, 0xba, + 0x4d, 0xc2, 0xb6, 0x6e, 0xd3, 0x60, 0x69, 0xb5, 0xd6, 0x46, 0x84, 0x38, + 0xf3, 0xf7, 0x05, 0xa7, 0xd3, 0xbe, 0xb3, 0xf4, 0x0c, 0xfb, 0x46, 0x3d, + 0x19, 0x8d, 0x37, 0x1e, 0x19, 0x60, 0x35, 0xee, 0xfe, 0xae, 0xf0, 0x25, + 0x25, 0x3c, 0xb7, 0x55, 0xfd, 0xb3, 0x97, 0x5b, 0xab, 0x7f, 0x4c, 0xb6, + 0xaa, 0xdf, 0xa0, 0x78, 0x3b, 0xe2, 0x74, 0xf7, 0x34, 0x6a, 0x16, 0xc6, + 0x3e, 0x39, 0xa7, 0xa5, 0xd5, 0x80, 0xe7, 0x86, 0x07, 0x06, 0x80, 0x1f, + 0xce, 0x9f, 0x48, 0x00, 0xb4, 0xbe, 0xb0, 0xf5, 0xba, 0xfa, 0x45, 0x0c, + 0x6d, 0x70, 0x72, 0xb2, 0x1d, 0xb2, 0x96, 0x1e, 0xc0, 0x7d, 0x27, 0x91, + 0xe0, 0xd5, 0xc9, 0x5b, 0x96, 0xcb, 0xae, 0x0f, 0xc8, 0xb2, 0x5c, 0xf3, + 0xab, 0xc9, 0x12, 0x92, 0x9b, 0xb9, 0x0f, 0xa2, 0x97, 0x58, 0x44, 0x35, + 0x8d, 0xdc, 0x18, 0xd6, 0xfd, 0xdc, 0x04, 0x36, 0xe4, 0xd8, 0x5a, 0x5a, + 0x4f, 0xa7, 0x73, 0xc0, 0x2c, 0x0f, 0x1e, 0xc2, 0x23, 0x41, 0xdd, 0x67, + 0xe4, 0xe5, 0x62, 0x56, 0xe2, 0xc2, 0xe9, 0x03, 0xe9, 0x38, 0x4a, 0x9b, + 0xf2, 0x71, 0xf2, 0x2a, 0x1e, 0x9b, 0x1d, 0x6d, 0x23, 0x96, 0xcf, 0xe9, + 0x1a, 0x7f, 0x79, 0xbd, 0xd2, 0x52, 0xd9, 0xfd, 0x63, 0x33, 0x12, 0xb1, + 0x53, 0xe9, 0x75, 0x0f, 0x26, 0x4b, 0xcf, 0xba, 0xb7, 0x47, 0x60, 0x51, + 0x2e, 0xea, 0x1d, 0x4d, 0xd5, 0x87, 0xfa, 0x34, 0xbb, 0xd4, 0x00, 0xb6, + 0xc6, 0x3c, 0x40, 0x8e, 0x7e, 0x97, 0x0b, 0x33, 0x2f, 0x2c, 0x64, 0xed, + 0xc7, 0xbb, 0x29, 0xf7, 0xe2, 0xd6, 0x47, 0xa6, 0xd2, 0xdd, 0xa5, 0xa4, + 0xe9, 0x27, 0xc7, 0x6a, 0x16, 0x55, 0x72, 0x43, 0x9a, 0xea, 0x5e, 0xc0, + 0x20, 0xec, 0xb1, 0xcd, 0x98, 0xef, 0xb3, 0xb4, 0xa4, 0xa7, 0x58, 0x65, + 0x65, 0x6d, 0x0f, 0xbc, 0xb0, 0xeb, 0x07, 0x69, 0x93, 0xa8, 0x57, 0xbe, + 0xae, 0x53, 0x84, 0xfb, 0xef, 0xc2, 0xb2, 0xc2, 0x3e, 0xd2, 0xff, 0x00, + 0x5a, 0x87, 0x03, 0xee, 0x6d, 0x80, 0x7b, 0x9b, 0xe0, 0x74, 0x12, 0xb9, + 0x37, 0x65, 0x57, 0x48, 0x1b, 0x6b, 0x0c, 0x71, 0xe4, 0xb6, 0x78, 0xf9, + 0xab, 0x7d, 0x33, 0xab, 0x57, 0x8b, 0xd5, 0x31, 0x32, 0x2c, 0x91, 0x45, + 0x76, 0x83, 0x61, 0x8d, 0x43, 0x4f, 0xb4, 0xf1, 0xf1, 0x49, 0x4f, 0x66, + 0x3e, 0xad, 0x3e, 0xbc, 0x8b, 0x1f, 0xf6, 0x97, 0x5e, 0x5e, 0x04, 0x39, + 0xe3, 0xde, 0x1b, 0xe1, 0xcc, 0x7e, 0x10, 0x93, 0x71, 0x28, 0xc6, 0x7b, + 0xab, 0xad, 0xae, 0xad, 0x92, 0x1c, 0xf6, 0x11, 0x0c, 0x73, 0x87, 0xe7, + 0x56, 0xe6, 0xfb, 0x75, 0x1c, 0xad, 0x07, 0xe7, 0xd6, 0xc7, 0x31, 0xc2, + 0x44, 0xf7, 0xed, 0xaa, 0xa5, 0x93, 0xd4, 0x06, 0x43, 0x88, 0xac, 0xc3, + 0x0b, 0x76, 0xba, 0x38, 0x24, 0x99, 0xd5, 0x25, 0x38, 0x9d, 0x6a, 0xf6, + 0x37, 0x3b, 0x16, 0x82, 0xf7, 0x07, 0x58, 0x0e, 0xd6, 0x37, 0x40, 0x44, + 0x8f, 0xa5, 0xf7, 0x2d, 0x4a, 0x65, 0xcf, 0x81, 0xc1, 0xdd, 0xf1, 0xe6, + 0x17, 0x3b, 0xd5, 0x88, 0x77, 0xd6, 0x3e, 0x9f, 0x59, 0x3f, 0x42, 0x96, + 0xc9, 0x3a, 0x89, 0x25, 0xf2, 0xba, 0x0c, 0x6b, 0x8b, 0x6c, 0xfa, 0x32, + 0xd0, 0xd7, 0x3b, 0x77, 0x81, 0x04, 0x24, 0xa4, 0xd7, 0x32, 0xb3, 0x90, + 0x1c, 0xe6, 0x87, 0x6d, 0xdd, 0xb5, 0xc7, 0x91, 0x3a, 0x4f, 0xdc, 0x89, + 0x58, 0x2d, 0xb4, 0x35, 0xbd, 0xc3, 0x8c, 0x8e, 0x44, 0xed, 0x0a, 0x0f, + 0x1b, 0x9c, 0x0f, 0x97, 0xf1, 0x47, 0xc6, 0x2d, 0x66, 0x4b, 0x9e, 0x47, + 0x15, 0xbb, 0xef, 0x33, 0xfd, 0xc9, 0x29, 0x28, 0x0e, 0x6e, 0x2d, 0x62, + 0x3d, 0xce, 0x12, 0x3f, 0x82, 0x1f, 0x4d, 0x2e, 0xb6, 0x97, 0xd8, 0xe1, + 0x16, 0x38, 0x06, 0x90, 0x35, 0x00, 0x8d, 0x20, 0x14, 0x5b, 0xc0, 0xfb, + 0x3d, 0x0f, 0x06, 0x3d, 0xa4, 0xff, 0x00, 0xd1, 0x25, 0x37, 0x47, 0xac, + 0xb2, 0xad, 0xa7, 0xdd, 0x0e, 0xd4, 0xf8, 0xf7, 0x49, 0x4a, 0xb9, 0xc7, + 0xed, 0x47, 0xd4, 0x89, 0x2e, 0xb2, 0x23, 0xc8, 0x85, 0xcf, 0x7d, 0x70, + 0x73, 0x4f, 0xd5, 0x6a, 0x3d, 0x3d, 0x5a, 0xeb, 0x1a, 0xe9, 0x1e, 0x07, + 0x72, 0xe8, 0x72, 0x1b, 0xb4, 0xee, 0x3a, 0x98, 0x20, 0x1e, 0xf2, 0x4e, + 0xab, 0x32, 0xec, 0x36, 0xe7, 0x62, 0xe3, 0x60, 0x64, 0x03, 0xb6, 0xd0, + 0xf0, 0x1a, 0x78, 0xdc, 0xd6, 0x3d, 0xe1, 0x25, 0x3b, 0x1f, 0x56, 0x18, + 0x1b, 0xd3, 0x59, 0xe4, 0xca, 0xdb, 0xf7, 0x30, 0x2d, 0x1c, 0xe3, 0x18, + 0xb6, 0x7c, 0x21, 0x55, 0xe8, 0x6c, 0xd9, 0x85, 0xb7, 0xb0, 0x74, 0x0f, + 0x90, 0x08, 0xfd, 0x45, 0xed, 0x6e, 0x3c, 0x11, 0x25, 0xc6, 0x1b, 0xe4, + 0x60, 0x99, 0xfc, 0x12, 0x53, 0x80, 0xf0, 0x1d, 0x85, 0x92, 0xd7, 0x7b, + 0x89, 0xa5, 0xf3, 0xf3, 0x07, 0xb2, 0xe2, 0xfa, 0xb5, 0x2e, 0x66, 0x26, + 0x25, 0x4e, 0xed, 0xbc, 0x8f, 0x87, 0xb5, 0x77, 0x38, 0xf6, 0x31, 0x81, + 0xee, 0x7f, 0x00, 0x09, 0xf8, 0x68, 0x3f, 0x8a, 0xc4, 0xfa, 0xd9, 0x8f, + 0x85, 0x8f, 0x7e, 0x1b, 0x68, 0x6e, 0xda, 0xdf, 0x5b, 0xdc, 0x7b, 0x8d, + 0x5c, 0x92, 0x9e, 0x28, 0xb0, 0xb0, 0xee, 0x69, 0x2d, 0x70, 0xe0, 0x8d, + 0x15, 0xca, 0x3a, 0xe7, 0x55, 0xc6, 0x6e, 0xd1, 0x77, 0xaa, 0xcf, 0xdd, + 0xb4, 0x6f, 0xfc, 0x4e, 0xaa, 0xd9, 0xc3, 0xa6, 0xc6, 0x92, 0xd2, 0x09, + 0xf2, 0xd1, 0x54, 0xb7, 0xa7, 0x10, 0x3d, 0xa7, 0xef, 0x49, 0x4d, 0xca, + 0x7e, 0xb2, 0xb8, 0xda, 0x06, 0x4e, 0x3b, 0x45, 0x7d, 0xcd, 0x53, 0x3f, + 0x18, 0x71, 0x32, 0xb4, 0x19, 0x9b, 0xd2, 0xaf, 0xd6, 0xab, 0x9b, 0x3d, + 0x98, 0xe9, 0x6b, 0xbf, 0xe9, 0x20, 0xe2, 0x74, 0x8a, 0x2b, 0xb2, 0x5e, + 0x03, 0x80, 0x1a, 0x93, 0xe6, 0xad, 0xe4, 0xe2, 0x57, 0x8f, 0x89, 0x56, + 0x5d, 0x75, 0xb6, 0xbc, 0x86, 0xbc, 0x8d, 0xd1, 0xa8, 0x10, 0x23, 0x84, + 0x94, 0xdf, 0xc2, 0x15, 0xbf, 0x12, 0xd6, 0x31, 0xcc, 0xf5, 0x0b, 0x81, + 0xdb, 0x20, 0x39, 0xc0, 0xc7, 0x03, 0xba, 0xa9, 0xd4, 0x9a, 0xdc, 0x6c, + 0x4a, 0xee, 0xbc, 0xec, 0x69, 0xb6, 0x9a, 0xe0, 0xf9, 0x58, 0x1e, 0x4f, + 0xdc, 0xd4, 0x6a, 0x06, 0x26, 0x5e, 0x29, 0xb3, 0x2e, 0xa6, 0xdd, 0xb5, + 0xbc, 0xbd, 0x80, 0x19, 0xf1, 0x0e, 0xe4, 0x2a, 0x59, 0xbd, 0x3b, 0x07, + 0x2a, 0xb6, 0xd0, 0xe3, 0x7d, 0x6c, 0xac, 0xfb, 0x1a, 0x2c, 0x2f, 0x63, + 0x4c, 0x72, 0x05, 0x92, 0x92, 0x9d, 0xd3, 0x8d, 0x6d, 0x36, 0x39, 0xe6, + 0x2c, 0x0e, 0x77, 0xa8, 0xc0, 0xc3, 0xee, 0x1b, 0x89, 0x83, 0xa7, 0xb8, + 0x48, 0x45, 0xc7, 0xb6, 0xcf, 0xa1, 0x43, 0xda, 0x5c, 0x35, 0xda, 0x4c, + 0xba, 0x7f, 0xaa, 0xed, 0x57, 0x3b, 0xd3, 0xf1, 0xf3, 0xfa, 0x76, 0x70, + 0xcc, 0xa3, 0x28, 0x67, 0xb0, 0xb7, 0xd3, 0x7d, 0x37, 0xb8, 0xd6, 0xe2, + 0xd0, 0x20, 0x0d, 0xde, 0xf1, 0xed, 0xec, 0xb4, 0x6e, 0xcd, 0xc1, 0xc9, + 0x63, 0x46, 0x5e, 0x2d, 0xb4, 0x39, 0xa2, 0x37, 0xb9, 0x9e, 0xab, 0x07, + 0xc1, 0xf5, 0x6e, 0x49, 0x4e, 0xc5, 0x8e, 0xb1, 0xcd, 0x63, 0x72, 0x6a, + 0x73, 0x9e, 0xd6, 0x86, 0xee, 0xa8, 0x83, 0x31, 0xe2, 0xc7, 0xff, 0x00, + 0x7a, 0x8f, 0xa6, 0x76, 0xef, 0x83, 0x1f, 0xd5, 0xf7, 0xed, 0x9f, 0xdc, + 0x9e, 0x7e, 0x6b, 0x3b, 0x06, 0xd1, 0x61, 0xdb, 0xd3, 0xfa, 0x8c, 0xed, + 0x7e, 0xd7, 0x34, 0xb8, 0x58, 0x00, 0x23, 0x8d, 0xb6, 0xca, 0xd9, 0xfb, + 0x26, 0x76, 0xef, 0xa7, 0x5e, 0xe8, 0xfa, 0x7e, 0x99, 0xe7, 0xfa, 0xbb, + 0xe2, 0x52, 0x53, 0x95, 0x64, 0x8c, 0x1c, 0xd7, 0x93, 0x27, 0xd3, 0x2d, + 0xd3, 0x40, 0x01, 0xff, 0x00, 0x7a, 0xc3, 0xaa, 0xb7, 0x6c, 0x07, 0xb0, + 0xe6, 0x20, 0xad, 0xce, 0xa3, 0x6b, 0x59, 0xd2, 0xec, 0x63, 0x7d, 0xa5, + 0xc5, 0xad, 0x3f, 0x0d, 0xc1, 0x64, 0x37, 0x7e, 0xcd, 0x76, 0x9d, 0x3b, + 0x8f, 0xe2, 0x92, 0x94, 0xe6, 0xd5, 0x1b, 0x41, 0x2d, 0x31, 0xa8, 0x32, + 0x15, 0x4c, 0x9c, 0x52, 0xd6, 0x8d, 0x86, 0x67, 0xc4, 0xca, 0x3e, 0xfd, + 0xae, 0x0c, 0x74, 0xb7, 0xc4, 0xb4, 0xca, 0x95, 0x8f, 0xae, 0xc6, 0x11, + 0x3e, 0xef, 0xe5, 0x8f, 0xe2, 0x12, 0x53, 0x0c, 0x0e, 0xbc, 0x70, 0xe8, + 0x38, 0x79, 0x03, 0xd8, 0x06, 0xd1, 0x63, 0x40, 0x24, 0x30, 0xf6, 0x8f, + 0x25, 0x89, 0xd4, 0x9b, 0x5f, 0xda, 0xdf, 0x6d, 0x4c, 0x2c, 0xc3, 0xb2, + 0x3d, 0x1b, 0x5c, 0x34, 0x30, 0x04, 0x8d, 0x38, 0x33, 0xd9, 0x5c, 0xca, + 0xc6, 0xad, 0xc4, 0x96, 0x90, 0x48, 0xe6, 0x0c, 0x7e, 0x55, 0x56, 0x9b, + 0x32, 0x31, 0x6c, 0xfd, 0x15, 0x8e, 0x6b, 0x4e, 0xae, 0x6c, 0xfb, 0x5c, + 0x07, 0x88, 0xe0, 0xa4, 0xa6, 0xa5, 0xf9, 0x96, 0xd8, 0x6b, 0x75, 0xb7, + 0xbe, 0xe3, 0x53, 0x76, 0x56, 0x5c, 0x49, 0xda, 0xd9, 0x9d, 0xa2, 0x55, + 0x86, 0x74, 0x9e, 0xa3, 0x97, 0x53, 0x6e, 0x63, 0x03, 0x43, 0xb5, 0x68, + 0x71, 0x3b, 0x88, 0xf1, 0x5d, 0x07, 0x45, 0xc2, 0x19, 0xfb, 0xae, 0xcc, + 0x0c, 0xdd, 0x5b, 0x5a, 0x47, 0xe8, 0xda, 0x35, 0x78, 0x99, 0x91, 0x1e, + 0x0a, 0xc3, 0xaf, 0xcb, 0xc8, 0xb5, 0xf8, 0xf8, 0x4f, 0x68, 0x01, 0xdb, + 0x6c, 0xc8, 0x68, 0xf6, 0x34, 0x0d, 0x36, 0xb2, 0x79, 0x3e, 0x3e, 0x09, + 0x29, 0xe7, 0xbf, 0xe6, 0xee, 0x6b, 0x2a, 0xde, 0x6d, 0xe2, 0x79, 0xd0, + 0x7e, 0x28, 0x07, 0x17, 0x32, 0x97, 0x82, 0xe7, 0x92, 0x4e, 0xa3, 0x6c, + 0xff, 0x00, 0x05, 0xda, 0x3a, 0x8a, 0x68, 0xc7, 0x9b, 0x3d, 0xe1, 0x82, + 0x06, 0xe3, 0x25, 0xe7, 0xb9, 0x25, 0x53, 0xab, 0x14, 0xd9, 0xba, 0xeb, + 0x07, 0xd2, 0xe3, 0xc0, 0x0f, 0x24, 0x94, 0xf3, 0x26, 0x97, 0x88, 0xdd, + 0x21, 0xc7, 0xb4, 0x19, 0x32, 0xaf, 0x60, 0xe2, 0x5b, 0x65, 0x7f, 0xa5, + 0x9d, 0x8f, 0xe1, 0xda, 0x17, 0x00, 0xd5, 0xaa, 0x70, 0xdb, 0x63, 0x9c, + 0xe7, 0x0d, 0x06, 0x80, 0xab, 0x4e, 0xae, 0xba, 0x9d, 0x5d, 0x4d, 0x10, + 0x5c, 0xd2, 0x1b, 0x23, 0x49, 0x02, 0x75, 0x49, 0x4f, 0x3f, 0x95, 0x8d, + 0x53, 0x73, 0xa8, 0x64, 0x17, 0xfb, 0x9a, 0x1e, 0x23, 0xb1, 0xff, 0x00, + 0x7a, 0xa3, 0x77, 0x4a, 0xca, 0x6e, 0x7e, 0x4e, 0x25, 0x0c, 0x2e, 0x14, + 0xbb, 0x40, 0xed, 0x0c, 0x1e, 0x21, 0x6e, 0xdc, 0xd1, 0xf6, 0xbd, 0xc6, + 0x00, 0x6b, 0x86, 0xbd, 0x84, 0x2b, 0xd9, 0x35, 0x46, 0x43, 0xad, 0x71, + 0x26, 0x5b, 0x24, 0xf7, 0x23, 0x54, 0x94, 0xe4, 0xf4, 0xcc, 0x9e, 0xb0, + 0x2a, 0xb3, 0x1b, 0x24, 0xb9, 0xcc, 0x03, 0xf4, 0x6e, 0x79, 0xd5, 0xa3, + 0xb8, 0x92, 0xb6, 0xf1, 0x19, 0xe9, 0x88, 0xfa, 0x4e, 0x77, 0xd2, 0x3e, + 0x1a, 0x05, 0x97, 0x59, 0xb2, 0xc7, 0xda, 0x41, 0xf6, 0x99, 0x03, 0xe6, + 0x76, 0xff, 0x00, 0x15, 0xab, 0x59, 0x2d, 0x21, 0x91, 0x26, 0x35, 0x29, + 0x29, 0xc3, 0xcc, 0x3e, 0xa7, 0xd6, 0xed, 0xbd, 0xaa, 0xad, 0x80, 0x47, + 0x80, 0x60, 0x77, 0xf1, 0x5d, 0x1d, 0x4d, 0x0c, 0xa4, 0x38, 0x6a, 0x08, + 0x89, 0xf8, 0x95, 0xcb, 0xd0, 0xe7, 0xdf, 0xf5, 0xa7, 0x39, 0xe3, 0x96, + 0x0b, 0x00, 0xf8, 0x32, 0x18, 0x3f, 0x22, 0xea, 0x28, 0xdc, 0x69, 0xd8, + 0x47, 0x04, 0x19, 0xfb, 0xd2, 0x52, 0x57, 0xce, 0xe2, 0x27, 0xb2, 0xb5, + 0x8a, 0x37, 0xba, 0xe0, 0x7b, 0xb0, 0x0f, 0xbf, 0x70, 0x55, 0x1e, 0xef, + 0xd2, 0x38, 0x1e, 0x21, 0x5b, 0xc1, 0x63, 0x9c, 0x5e, 0xe1, 0xcb, 0x4b, + 0x67, 0xe1, 0x0e, 0x49, 0x4c, 0x33, 0x2c, 0x3b, 0xeb, 0x6b, 0x67, 0x6e, + 0xd8, 0x6f, 0x84, 0xea, 0xd5, 0x6b, 0xa5, 0x8f, 0xd1, 0x8d, 0x34, 0x0f, + 0xec, 0x83, 0x9d, 0x5e, 0xcb, 0x28, 0x1f, 0x9a, 0xe3, 0x07, 0xe2, 0x0e, + 0xe5, 0x77, 0xa7, 0xd6, 0x2b, 0xa5, 0x8e, 0x76, 0x86, 0x64, 0x7c, 0x80, + 0x49, 0x4d, 0x5c, 0xab, 0x1c, 0xd7, 0x98, 0xe2, 0x49, 0x13, 0xc2, 0x03, + 0x08, 0x19, 0x98, 0x13, 0xa9, 0x06, 0xe2, 0x40, 0xf1, 0xd8, 0x1b, 0xfc, + 0x51, 0xf2, 0x43, 0x8e, 0x84, 0x73, 0x21, 0xa4, 0x7c, 0x4a, 0xab, 0xa9, + 0xeb, 0x15, 0x37, 0x82, 0xc6, 0x58, 0x7e, 0xf2, 0xd1, 0xfc, 0x12, 0x53, + 0xb5, 0xd2, 0xa3, 0xec, 0x82, 0x04, 0x0d, 0xce, 0x8f, 0xbd, 0x47, 0xab, + 0x6d, 0x14, 0x07, 0x11, 0x2f, 0x04, 0x86, 0x7c, 0x4e, 0x88, 0xbd, 0x39, + 0xa1, 0xb8, 0xad, 0x03, 0xc5, 0xdc, 0x7c, 0x4a, 0xa9, 0xd6, 0x6d, 0x83, + 0x53, 0x07, 0x33, 0xf2, 0x49, 0x4e, 0x6b, 0xda, 0xc1, 0x8d, 0x65, 0x8e, + 0x3a, 0x88, 0x0d, 0xf3, 0x3b, 0x9a, 0xd5, 0x83, 0xf5, 0x96, 0xe7, 0x7d, + 0xaf, 0x12, 0x1c, 0x40, 0x14, 0xea, 0x07, 0x1f, 0x48, 0xad, 0xdb, 0x5d, + 0x34, 0x6d, 0x06, 0x77, 0xb8, 0x03, 0x3e, 0x13, 0x2b, 0x98, 0xeb, 0xed, + 0x73, 0x72, 0xa9, 0x05, 0xdb, 0xb6, 0xd5, 0xdf, 0x98, 0x2f, 0x79, 0xe1, + 0x25, 0x30, 0xad, 0xd4, 0x3c, 0x0d, 0xed, 0x13, 0xe6, 0x23, 0xf1, 0x0a, + 0x2f, 0x65, 0x16, 0x1d, 0x95, 0x98, 0xd4, 0x73, 0xdf, 0x54, 0x13, 0x63, + 0x9c, 0xcf, 0x6b, 0x64, 0x78, 0xf3, 0x08, 0x34, 0x7a, 0x9f, 0x68, 0x60, + 0xe6, 0x5c, 0x23, 0x48, 0xee, 0x92, 0x9e, 0x91, 0xb4, 0x13, 0x6b, 0x60, + 0x48, 0x04, 0x48, 0xf1, 0x01, 0x5f, 0xea, 0x5d, 0x32, 0x8c, 0xda, 0x45, + 0x2f, 0x0d, 0x03, 0xdc, 0xe6, 0xb8, 0x68, 0xe0, 0x40, 0x42, 0xc7, 0x65, + 0x9e, 0xd3, 0xa4, 0xe8, 0xb4, 0xad, 0xda, 0xd0, 0x4f, 0x05, 0xac, 0x71, + 0x07, 0xf0, 0x49, 0x4f, 0x9f, 0x5f, 0x4f, 0x50, 0xe9, 0xc3, 0xd6, 0xab, + 0x21, 0xed, 0x66, 0xf2, 0xc0, 0x43, 0x88, 0xf1, 0xfe, 0xe4, 0xd5, 0x75, + 0xdc, 0xf1, 0xed, 0xb9, 0xb5, 0xdf, 0xe6, 0xf6, 0xc3, 0xbf, 0xce, 0x64, + 0x2b, 0xfd, 0x52, 0xc3, 0x6e, 0x3f, 0xa1, 0x1c, 0x5b, 0xbb, 0xf0, 0x3f, + 0xde, 0xb2, 0x5b, 0x48, 0x32, 0x0b, 0x60, 0x0e, 0x1c, 0x92, 0x9d, 0x3a, + 0x7a, 0xd6, 0x1b, 0xb5, 0xc8, 0xa6, 0xc6, 0x18, 0xfa, 0x4c, 0x21, 0xe2, + 0x7f, 0xe8, 0x95, 0x61, 0x9d, 0x47, 0x1d, 0xee, 0x1e, 0x85, 0xe2, 0x7f, + 0x75, 0xc7, 0x69, 0xfb, 0x9d, 0xb5, 0x62, 0xbb, 0x18, 0xf6, 0x98, 0x50, + 0x34, 0xbf, 0xb8, 0x04, 0x79, 0xa4, 0xa7, 0xa5, 0x73, 0xe9, 0xb9, 0xa0, + 0xe4, 0x54, 0xdb, 0x3b, 0x07, 0x90, 0x26, 0x7f, 0xac, 0x8d, 0xf6, 0x91, + 0xe9, 0x7a, 0x5f, 0x6b, 0xc8, 0xf4, 0xf8, 0xf4, 0xbd, 0x47, 0xed, 0xff, + 0x00, 0xaa, 0x9f, 0xc5, 0x72, 0xac, 0x75, 0x95, 0x6b, 0x5b, 0xdd, 0x59, + 0xee, 0x1a, 0x74, 0x44, 0xfd, 0xa1, 0x97, 0x1b, 0x7d, 0x5f, 0x3d, 0xdb, + 0x5b, 0xbb, 0xef, 0x84, 0x94, 0xf5, 0xdd, 0x61, 0xee, 0x6f, 0x4b, 0x0f, + 0x01, 0xce, 0x2e, 0xb1, 0xac, 0x01, 0x80, 0x39, 0xd1, 0xab, 0x8e, 0x87, + 0xe0, 0xb2, 0x46, 0xe7, 0x00, 0x63, 0x68, 0xd0, 0xed, 0x73, 0x0b, 0x0a, + 0xd4, 0xfa, 0xc2, 0xe8, 0xc5, 0xc4, 0xa4, 0x1e, 0x5e, 0x5d, 0x06, 0x3b, + 0x37, 0xfd, 0xab, 0x33, 0x6d, 0xdb, 0x5a, 0x20, 0x96, 0xb4, 0x4c, 0x73, + 0xfd, 0xe9, 0x29, 0x5b, 0x5d, 0x26, 0x64, 0x40, 0xd3, 0x53, 0x13, 0xf3, + 0x0e, 0x4d, 0xe9, 0xcb, 0x39, 0x04, 0x78, 0xe8, 0x48, 0x1f, 0x2d, 0xa8, + 0x8c, 0xae, 0xf1, 0xa3, 0x81, 0x20, 0xe9, 0xe3, 0x08, 0x77, 0x00, 0xcd, + 0xd2, 0xdd, 0x67, 0xda, 0x01, 0x8d, 0x12, 0x53, 0x52, 0xfa, 0x4c, 0x4f, + 0xf7, 0xff, 0x00, 0xb5, 0x56, 0x66, 0x23, 0x9f, 0x76, 0xd3, 0xfb, 0xae, + 0x27, 0xfc, 0xd2, 0xae, 0x17, 0x0b, 0x25, 0xaf, 0x69, 0xdb, 0xe7, 0x07, + 0x40, 0x9b, 0x0e, 0x91, 0xf6, 0xb9, 0x6f, 0x1b, 0x48, 0x3c, 0xf7, 0x49, + 0x4e, 0xd6, 0x3d, 0x26, 0xbc, 0x06, 0x63, 0xd4, 0xe2, 0x0d, 0xad, 0x02, + 0xd7, 0x71, 0xa3, 0x46, 0xd3, 0xfc, 0x51, 0xea, 0x63, 0x69, 0x2d, 0xaa, + 0xa0, 0xd0, 0x63, 0xfc, 0xd6, 0xf9, 0x0f, 0x34, 0x2b, 0x5d, 0x4f, 0xec, + 0xe2, 0xd7, 0x5d, 0xe9, 0x3d, 0xaf, 0x87, 0x99, 0x88, 0x61, 0xf7, 0x7e, + 0x28, 0x54, 0xe4, 0x63, 0x58, 0x3e, 0xcf, 0x89, 0xb8, 0xbe, 0xcf, 0xe7, + 0x2c, 0x68, 0x26, 0x3c, 0xb7, 0x78, 0xfe, 0x44, 0x94, 0xd8, 0x13, 0x9b, + 0x7f, 0xa6, 0xdf, 0xe6, 0xab, 0xe7, 0xc2, 0x51, 0xb3, 0x1a, 0xc6, 0x63, + 0x16, 0x18, 0x01, 0xda, 0x42, 0x95, 0x25, 0x8d, 0x6e, 0xca, 0xdb, 0xb4, + 0x33, 0x86, 0xca, 0x10, 0xdd, 0x6e, 0x44, 0x9e, 0x1b, 0xdb, 0xb2, 0x4a, + 0x64, 0xca, 0x08, 0x63, 0x75, 0xd4, 0x77, 0x55, 0x73, 0x69, 0xb6, 0xdc, + 0xb0, 0x46, 0x8d, 0x6d, 0x67, 0x69, 0x98, 0xf7, 0x48, 0xdd, 0xf8, 0x2d, + 0x1b, 0x49, 0x3a, 0x37, 0xc1, 0x52, 0xc9, 0x02, 0xc7, 0xd7, 0x49, 0x01, + 0xe6, 0x77, 0x44, 0xed, 0x3e, 0xdf, 0xf7, 0xa4, 0xa6, 0xad, 0xb5, 0x16, + 0xdd, 0x54, 0x8d, 0x5d, 0xb4, 0xfe, 0x2a, 0xd7, 0x58, 0x2e, 0xa9, 0xcc, + 0xb7, 0x74, 0x34, 0xb6, 0x08, 0xf3, 0x9e, 0x14, 0x72, 0x43, 0x7d, 0x7c, + 0x68, 0xee, 0xd3, 0xa7, 0xc0, 0xa3, 0x75, 0x71, 0xbf, 0x16, 0x07, 0x68, + 0xd1, 0x25, 0x38, 0x78, 0xd1, 0x07, 0x59, 0x82, 0x35, 0xf9, 0xf0, 0xb7, + 0x6a, 0x0d, 0x2f, 0x6b, 0x00, 0x82, 0x3b, 0x78, 0x2c, 0x4a, 0x49, 0xda, + 0xd0, 0x00, 0x2e, 0x2f, 0x6c, 0x98, 0xee, 0x1c, 0x49, 0x5b, 0x95, 0x39, + 0xc5, 0xe0, 0x71, 0x03, 0x52, 0x52, 0x53, 0xcb, 0x74, 0xab, 0x89, 0xea, + 0x39, 0xb9, 0x32, 0x21, 0xd6, 0x3c, 0x92, 0x79, 0x20, 0xb8, 0x98, 0x0b, + 0xab, 0xa6, 0xdd, 0xcd, 0x7c, 0x68, 0xd6, 0xb9, 0xad, 0x03, 0xe2, 0xd0, + 0xef, 0xe2, 0xb9, 0x0e, 0x82, 0x6a, 0x2e, 0xb5, 0xcf, 0x66, 0xf7, 0x59, + 0x61, 0x15, 0x9e, 0xcd, 0x77, 0x32, 0xba, 0xf6, 0x35, 0xbb, 0x48, 0x60, + 0x90, 0xdb, 0x61, 0xc0, 0x78, 0x80, 0xd6, 0x94, 0x94, 0xc6, 0xdb, 0x7f, + 0x58, 0x75, 0x7d, 0xf6, 0xee, 0x9f, 0x2d, 0xc1, 0xab, 0x4f, 0x06, 0xc0, + 0x1b, 0xb0, 0xf2, 0x76, 0xb6, 0x7f, 0x27, 0xe5, 0x59, 0xbb, 0x03, 0xee, + 0x73, 0xbb, 0xc0, 0x04, 0xf9, 0x02, 0x4a, 0xb9, 0x89, 0x53, 0xad, 0x97, + 0x4c, 0x06, 0xbd, 0x93, 0xdb, 0xce, 0x52, 0x53, 0x63, 0xa8, 0xb1, 0xce, + 0xbe, 0xa6, 0xb7, 0x57, 0x76, 0x9f, 0x15, 0x7b, 0x10, 0x6e, 0xa0, 0xeb, + 0x3a, 0x39, 0xb1, 0xf2, 0x54, 0x2f, 0x3f, 0xae, 0x81, 0xf9, 0xec, 0x68, + 0x3f, 0x74, 0xab, 0xd8, 0x01, 0xfe, 0x81, 0x2d, 0x12, 0x43, 0x9f, 0xcf, + 0x70, 0x52, 0x53, 0x5b, 0x24, 0xc3, 0xd8, 0xd0, 0x38, 0xdb, 0x20, 0x78, + 0xf2, 0xa9, 0xbe, 0x3f, 0x6e, 0x39, 0xff, 0x00, 0xf0, 0x7a, 0x7f, 0x68, + 0x93, 0xfc, 0x15, 0x9c, 0xe7, 0x58, 0xc7, 0xd1, 0xb4, 0x6d, 0xb0, 0xbd, + 0x85, 0xfb, 0xb5, 0xd0, 0xb8, 0x48, 0xfb, 0x95, 0x67, 0x82, 0x3a, 0xbb, + 0x87, 0x60, 0x18, 0xd1, 0xf2, 0x0e, 0x29, 0x29, 0xdd, 0xc2, 0xf6, 0xe2, + 0x34, 0x9d, 0x0f, 0xb8, 0x91, 0xf3, 0x2b, 0x27, 0xab, 0x3c, 0xfd, 0xa0, + 0x1f, 0x03, 0xa2, 0xbf, 0x4d, 0xe1, 0x98, 0x6d, 0x03, 0x57, 0x00, 0xed, + 0x3e, 0x24, 0xac, 0xce, 0xa7, 0xad, 0xe3, 0x59, 0x1b, 0x52, 0x53, 0x4b, + 0x32, 0xd3, 0x55, 0x14, 0x30, 0x0f, 0x77, 0xa8, 0x09, 0x70, 0xe2, 0x47, + 0x65, 0x8d, 0xd6, 0x2b, 0xae, 0xdc, 0xe0, 0xe7, 0x12, 0x26, 0xa6, 0x44, + 0x89, 0x1d, 0xd6, 0xb7, 0x50, 0x61, 0x34, 0xd0, 0x07, 0x67, 0x17, 0x9f, + 0x38, 0x69, 0x59, 0xd9, 0x41, 0x8e, 0xbc, 0x36, 0xc6, 0x90, 0x45, 0x75, + 0xc3, 0xbc, 0x25, 0xb3, 0xaa, 0x4a, 0x73, 0x1f, 0x8e, 0xc6, 0xea, 0xc7, + 0xcf, 0x6d, 0xb3, 0x07, 0xf0, 0x44, 0xc0, 0x63, 0x8e, 0x58, 0x0e, 0xdd, + 0xa0, 0x27, 0x58, 0x20, 0xc2, 0x39, 0x63, 0x41, 0xda, 0x0f, 0x3a, 0x82, + 0x40, 0x29, 0xb1, 0x6b, 0x8c, 0x96, 0x3a, 0x34, 0x27, 0xf1, 0x49, 0x4f, + 0x49, 0x82, 0xd6, 0x6f, 0xad, 0xa7, 0x92, 0xe8, 0x8f, 0x05, 0x63, 0x2f, + 0x22, 0xc6, 0x7b, 0x40, 0x0e, 0x69, 0xfa, 0x41, 0xc3, 0xf3, 0x48, 0x77, + 0x1f, 0x35, 0x57, 0x19, 0xc4, 0x3a, 0xa7, 0x18, 0x10, 0x65, 0x17, 0x22, + 0xc6, 0xb9, 0xe0, 0x8d, 0x67, 0x43, 0xf2, 0x94, 0x94, 0xf3, 0x3f, 0x58, + 0x18, 0xea, 0x6a, 0xae, 0xfa, 0x8c, 0x36, 0xdb, 0x0b, 0x1c, 0xcf, 0x1d, + 0xad, 0x0e, 0x59, 0x36, 0xec, 0x35, 0x35, 0xc1, 0xc0, 0x78, 0xb4, 0xad, + 0xaf, 0xac, 0x8f, 0x07, 0x07, 0x15, 0xbc, 0x93, 0x75, 0xae, 0x9e, 0xe0, + 0x00, 0xd0, 0xb0, 0xed, 0xda, 0xea, 0x9b, 0xc1, 0x70, 0x8d, 0x7f, 0x81, + 0x49, 0x4a, 0x69, 0x89, 0x77, 0x6e, 0xd0, 0x9d, 0xef, 0x03, 0x47, 0x6a, + 0xd3, 0xce, 0x9f, 0xdc, 0xa2, 0x08, 0x78, 0xd7, 0xda, 0x52, 0xb2, 0xad, + 0xfc, 0x1d, 0x42, 0x4a, 0x6c, 0x51, 0x8d, 0xf6, 0x86, 0xd8, 0xe6, 0x80, + 0x1b, 0x53, 0x77, 0x3a, 0x4f, 0x20, 0xf8, 0x20, 0xfa, 0x34, 0x6e, 0x8d, + 0x67, 0xc3, 0xba, 0x55, 0x35, 0xec, 0xd6, 0x75, 0x0a, 0x5e, 0xb0, 0xdd, + 0xbf, 0x6f, 0xba, 0x21, 0x25, 0x3d, 0x0f, 0xd6, 0x86, 0xdd, 0xf6, 0xbc, + 0x6f, 0x4c, 0x02, 0xc6, 0xd4, 0x64, 0x03, 0xc9, 0x9d, 0x56, 0x6b, 0x2c, + 0xb8, 0x11, 0xba, 0xa7, 0x37, 0x5e, 0xdc, 0x2d, 0x5e, 0xa8, 0xc0, 0xfc, + 0x9a, 0xea, 0x3c, 0x86, 0xe8, 0x09, 0xe3, 0x71, 0x95, 0x06, 0x63, 0xb2, + 0x3c, 0xcf, 0x79, 0x49, 0x4d, 0x56, 0xe7, 0x41, 0x87, 0x48, 0x1d, 0x89, + 0xd5, 0x42, 0xcc, 0xaa, 0x5d, 0x32, 0x07, 0x1a, 0x47, 0x9a, 0xb6, 0x71, + 0xdc, 0xe2, 0xed, 0xe4, 0x08, 0xe3, 0xc4, 0xa8, 0x3b, 0x11, 0xae, 0x11, + 0xb5, 0xa4, 0xf9, 0x81, 0x29, 0x29, 0xcd, 0x79, 0x63, 0xdc, 0x0c, 0x00, + 0x0f, 0x87, 0x0a, 0xc7, 0x4f, 0x6b, 0x4d, 0xee, 0x2c, 0x1a, 0x06, 0xcf, + 0xe2, 0x88, 0xec, 0x1a, 0xdd, 0xa3, 0x98, 0x01, 0xf1, 0x6c, 0x85, 0x67, + 0xa6, 0xe2, 0xb6, 0x97, 0xd8, 0x5b, 0x31, 0xa0, 0x20, 0xeb, 0xc6, 0xa9, + 0x29, 0x97, 0xd9, 0xd9, 0x6b, 0xae, 0x2f, 0x6b, 0x5c, 0xc6, 0x58, 0x0f, + 0xbb, 0x81, 0x02, 0x27, 0x5f, 0x8a, 0xbf, 0x8d, 0xe9, 0x16, 0x86, 0x56, + 0xf0, 0xd6, 0xf8, 0x35, 0xba, 0xaa, 0x74, 0xbe, 0xa7, 0xba, 0xd6, 0x3b, + 0xc4, 0x9d, 0x34, 0x9d, 0x55, 0xec, 0x59, 0x10, 0x18, 0x1a, 0xd1, 0xf8, + 0xa4, 0xa5, 0x5d, 0x58, 0xa5, 0x87, 0xd2, 0x9d, 0x79, 0x25, 0x2c, 0x7a, + 0xe1, 0xa5, 0xc0, 0xf3, 0xac, 0xa2, 0xda, 0xdf, 0x53, 0xc4, 0xce, 0x84, + 0x25, 0xb3, 0x60, 0x90, 0x23, 0xc8, 0xa4, 0xa6, 0x0e, 0x13, 0xc4, 0xca, + 0xce, 0xca, 0xb2, 0x33, 0x9a, 0xd2, 0x40, 0x15, 0xd4, 0x49, 0x3e, 0x6f, + 0x77, 0xf7, 0x35, 0x68, 0x17, 0x3b, 0x69, 0x77, 0x66, 0x8d, 0x57, 0x30, + 0xdc, 0x87, 0x65, 0xe6, 0xe4, 0x64, 0x3a, 0x7e, 0xce, 0xd7, 0x06, 0x8d, + 0xbf, 0x4a, 0xc2, 0x04, 0x06, 0x35, 0x25, 0x3b, 0x35, 0x7e, 0x97, 0x22, + 0xa2, 0x35, 0x15, 0xd6, 0x49, 0xd6, 0x7e, 0x93, 0xb4, 0xfc, 0x8a, 0xee, + 0x4d, 0x5e, 0xae, 0x3d, 0x8c, 0xfc, 0xe7, 0x30, 0x90, 0x7b, 0xc8, 0xd5, + 0x50, 0xe9, 0xd5, 0x3e, 0x86, 0x9b, 0x6f, 0x1e, 0xeb, 0x0c, 0x91, 0xd8, + 0x78, 0x34, 0x4f, 0x80, 0x5a, 0x01, 0xfb, 0x8b, 0x5e, 0xed, 0x37, 0x0d, + 0x5a, 0xdd, 0x4c, 0x04, 0x94, 0xe2, 0x62, 0x6d, 0xb3, 0xde, 0x34, 0xd4, + 0x49, 0x3a, 0x71, 0x12, 0x56, 0x91, 0x2d, 0x65, 0x36, 0x3c, 0xf6, 0x6b, + 0xdc, 0x7e, 0x4d, 0x2a, 0x96, 0x26, 0xda, 0xde, 0xea, 0xf6, 0x92, 0x1a, + 0x4c, 0xcf, 0xc4, 0xf6, 0x28, 0xd9, 0x85, 0xad, 0xc0, 0xca, 0x03, 0x57, + 0xfa, 0x36, 0x11, 0xfe, 0x69, 0x09, 0x29, 0xe7, 0xbe, 0xad, 0x5a, 0xc2, + 0x1f, 0x44, 0xc5, 0xa1, 0xc2, 0xd1, 0xe6, 0xd0, 0x0c, 0xfd, 0xcb, 0xb2, + 0x63, 0x62, 0x0f, 0x01, 0xf7, 0x49, 0x1d, 0xf5, 0x2b, 0x80, 0xe8, 0x04, + 0x8e, 0xa0, 0x1a, 0xd7, 0x16, 0x39, 0xec, 0x73, 0x5a, 0x40, 0x9f, 0x02, + 0x79, 0xf2, 0x0b, 0xd0, 0xdc, 0xf6, 0x83, 0x53, 0x3c, 0x5c, 0x7f, 0xe8, + 0x94, 0x94, 0x8e, 0xb6, 0x6e, 0x36, 0x90, 0xee, 0x06, 0x9f, 0x91, 0x5f, + 0xc1, 0x35, 0xb3, 0x1d, 0x9b, 0xbe, 0x93, 0xde, 0x01, 0x1d, 0xfb, 0x00, + 0xb3, 0xad, 0x70, 0x68, 0x7c, 0x7e, 0x74, 0xc0, 0x08, 0xd8, 0x6f, 0x78, + 0xba, 0x96, 0xfe, 0x68, 0x76, 0xa3, 0xc9, 0x25, 0x26, 0x73, 0xc5, 0xb9, + 0xf6, 0x39, 0xa6, 0x0e, 0xd0, 0x1a, 0x4e, 0x9a, 0x44, 0x4a, 0xd2, 0xc2, + 0xa9, 0xf5, 0xbe, 0x77, 0x1d, 0x82, 0xb7, 0x7b, 0x3b, 0x6e, 0xde, 0x75, + 0x59, 0x16, 0xfb, 0x7a, 0x85, 0xae, 0x69, 0xe0, 0x86, 0xc7, 0xc4, 0x85, + 0xb5, 0x87, 0xb5, 0xb4, 0xee, 0xe5, 0xc4, 0x10, 0x7f, 0xce, 0x27, 0xf8, + 0xa4, 0xa7, 0x37, 0xaa, 0xba, 0xb7, 0x5d, 0x8f, 0x6b, 0xc8, 0x6b, 0x5a, + 0xf1, 0xee, 0xf3, 0x32, 0xd1, 0xf9, 0x50, 0x1e, 0xef, 0xf2, 0xa1, 0x9e, + 0xef, 0x20, 0xfc, 0x81, 0x56, 0xb2, 0xdb, 0xea, 0xbd, 0xad, 0x89, 0x1b, + 0x83, 0x87, 0xe5, 0x54, 0x64, 0x33, 0xa8, 0xb4, 0xf8, 0xea, 0xe3, 0xe6, + 0xe1, 0xaa, 0x4a, 0x75, 0x58, 0xfd, 0xb4, 0xcf, 0x66, 0x81, 0x3e, 0x6b, + 0x3b, 0xa9, 0x3c, 0xb9, 0xc2, 0xc0, 0x00, 0x71, 0x04, 0x34, 0x1f, 0x33, + 0x0a, 0xe6, 0x66, 0x56, 0x37, 0x4f, 0xe9, 0xe7, 0x2a, 0xf3, 0x0c, 0x1b, + 0x74, 0x1a, 0xb8, 0x97, 0x76, 0x0b, 0x96, 0xb3, 0xeb, 0x05, 0xf9, 0x96, + 0x07, 0x57, 0x50, 0xaf, 0x1d, 0x9c, 0x13, 0xab, 0x8e, 0xb2, 0x25, 0x25, + 0x3a, 0x3d, 0x45, 0xe2, 0xb3, 0x43, 0x4e, 0xb2, 0x5c, 0xd2, 0x3f, 0xb2, + 0xa9, 0x65, 0xd7, 0x5b, 0xf2, 0xcb, 0xc8, 0xf7, 0x6d, 0x60, 0x90, 0x60, + 0x88, 0x68, 0xf0, 0x56, 0x3e, 0xd0, 0xcc, 0xd6, 0xb4, 0x97, 0x9d, 0xed, + 0xd4, 0x08, 0x04, 0x70, 0xa0, 0xec, 0x77, 0x3c, 0x8d, 0x66, 0xc6, 0x73, + 0xc1, 0x90, 0x92, 0x9a, 0x8e, 0xc7, 0xd8, 0x37, 0x35, 0xef, 0xf2, 0xe0, + 0x80, 0xa3, 0x8a, 0x2c, 0xfb, 0x5d, 0x63, 0x70, 0x73, 0x64, 0x9e, 0x20, + 0xcc, 0x29, 0xda, 0x2c, 0xa5, 0xbb, 0xee, 0x79, 0x15, 0xcf, 0x31, 0xa6, + 0xbf, 0x09, 0x4b, 0x1f, 0x6b, 0xb2, 0x2a, 0x2d, 0x32, 0xdd, 0x75, 0x1a, + 0x8e, 0x3c, 0x42, 0x4a, 0x76, 0xf1, 0xdb, 0xba, 0xc6, 0x83, 0xc0, 0x06, + 0x62, 0x12, 0xc9, 0x6b, 0x59, 0x68, 0xad, 0xa6, 0x09, 0x1b, 0x80, 0x3f, + 0xeb, 0xe6, 0xa7, 0x82, 0x07, 0xac, 0x5d, 0xb4, 0x18, 0x6f, 0x24, 0x79, + 0x84, 0xd9, 0x7e, 0x9b, 0xb3, 0x5a, 0x75, 0x10, 0xc3, 0x23, 0xe6, 0x12, + 0x53, 0x83, 0xf5, 0x8f, 0x15, 0xfe, 0x96, 0x14, 0x4b, 0x9a, 0x3d, 0x47, + 0x18, 0xf3, 0x23, 0x55, 0x8b, 0xe8, 0x1d, 0xa4, 0x1e, 0xde, 0x21, 0x74, + 0x1f, 0x5a, 0x1e, 0x43, 0xf0, 0x45, 0x33, 0xa5, 0x6f, 0x76, 0x87, 0x5d, + 0x48, 0x0b, 0x28, 0x5d, 0x77, 0x79, 0x23, 0xc0, 0x89, 0xfc, 0xb2, 0x92, + 0x9a, 0x46, 0x97, 0x33, 0x91, 0xa1, 0xe3, 0xc1, 0x2d, 0x5a, 0x38, 0x57, + 0x6c, 0xb5, 0xa5, 0xa5, 0xa5, 0xad, 0x23, 0xbc, 0x08, 0x3a, 0xa0, 0x96, + 0xd2, 0x5a, 0x76, 0xcf, 0xc8, 0xcf, 0xe5, 0x84, 0x94, 0x89, 0xaf, 0x23, + 0x9d, 0x7c, 0x8a, 0x96, 0xf6, 0x44, 0xec, 0xf9, 0xa4, 0xc6, 0x89, 0xe6, + 0x47, 0x79, 0x46, 0xf4, 0x59, 0xf4, 0xb6, 0x08, 0xe3, 0x6e, 0xf1, 0x09, + 0x29, 0xd1, 0xea, 0x39, 0xd5, 0xe4, 0x75, 0x37, 0xba, 0xa2, 0x76, 0xd6, + 0x03, 0x01, 0xec, 0x76, 0xf2, 0x42, 0x93, 0x2f, 0x04, 0x7d, 0x25, 0x5e, + 0xbc, 0x6b, 0xea, 0xbd, 0xcc, 0x7d, 0x0f, 0x20, 0xb8, 0xc1, 0xdb, 0xed, + 0x89, 0xf1, 0x0a, 0xe3, 0xaa, 0xda, 0x5a, 0xd3, 0x59, 0x69, 0x77, 0x88, + 0x20, 0xa4, 0xa5, 0x38, 0xbe, 0x00, 0xe5, 0x41, 0xce, 0xb0, 0x98, 0x7b, + 0x51, 0xeb, 0x80, 0x3b, 0x8d, 0xba, 0x47, 0x79, 0x4e, 0x43, 0x62, 0x05, + 0x85, 0xbe, 0x20, 0x84, 0x94, 0x80, 0xc9, 0xd4, 0x7d, 0xc5, 0x5e, 0xe9, + 0xad, 0x36, 0x57, 0x63, 0x9e, 0x03, 0x43, 0x64, 0x9f, 0x93, 0x55, 0x27, + 0xc3, 0x64, 0xee, 0x07, 0xc0, 0xa2, 0xe1, 0xd8, 0xef, 0x49, 0xcc, 0x99, + 0xdc, 0x1d, 0x3e, 0x1a, 0xc3, 0x52, 0x53, 0x57, 0x1a, 0xe6, 0xb6, 0xe7, + 0x97, 0x6a, 0x09, 0x26, 0x07, 0x31, 0x3f, 0xec, 0x5a, 0x43, 0x21, 0x80, + 0x0f, 0x46, 0x35, 0xfc, 0xd7, 0x0d, 0x42, 0xcb, 0xc1, 0x63, 0x41, 0x7e, + 0xfd, 0x5c, 0xe9, 0x01, 0xff, 0x00, 0xd5, 0xd6, 0x3f, 0x15, 0x71, 0xa7, + 0x79, 0xec, 0xf2, 0x0f, 0xb5, 0xc7, 0x94, 0x94, 0xde, 0xab, 0x79, 0x3b, + 0x9c, 0x20, 0xf0, 0x08, 0x32, 0x14, 0xde, 0xc7, 0x96, 0xc4, 0x93, 0xe2, + 0x65, 0x42, 0xa2, 0xeb, 0x58, 0x37, 0x37, 0x6f, 0xcc, 0x27, 0xb0, 0xb8, + 0x68, 0x4c, 0x0f, 0x88, 0x49, 0x4e, 0x7f, 0x5a, 0xcc, 0xfb, 0x26, 0x2b, + 0x69, 0xac, 0xfe, 0x9e, 0xff, 0x00, 0x65, 0x60, 0x19, 0x3a, 0xf7, 0xf9, + 0x26, 0xc2, 0xc1, 0xaa, 0x9a, 0xeb, 0x66, 0xd2, 0xd2, 0xc0, 0x00, 0x23, + 0xf1, 0x2b, 0x2f, 0xab, 0x1b, 0x07, 0x55, 0xc6, 0xc9, 0x0c, 0x36, 0x86, + 0x07, 0x6f, 0x13, 0xc3, 0x01, 0x1c, 0x2d, 0x8c, 0x5b, 0x30, 0xf2, 0x75, + 0xa6, 0xcf, 0x77, 0x3b, 0x1c, 0x61, 0xc9, 0x29, 0xb7, 0xe9, 0xd0, 0xd3, + 0x2e, 0xd4, 0x8e, 0x24, 0xca, 0x06, 0x69, 0x2d, 0xc5, 0x75, 0x95, 0x8d, + 0xcf, 0x00, 0xed, 0x04, 0xed, 0xfc, 0x88, 0x8d, 0x00, 0x11, 0x32, 0xab, + 0xf5, 0x27, 0x13, 0x4b, 0x88, 0x90, 0xc0, 0x23, 0xe3, 0x3a, 0x24, 0xa6, + 0xad, 0x36, 0x59, 0xe9, 0x3d, 0xe0, 0x02, 0xf6, 0x33, 0xda, 0xe2, 0x39, + 0x24, 0xf7, 0x51, 0xea, 0x0e, 0xb1, 0xdd, 0x2a, 0xfd, 0xc3, 0xde, 0x68, + 0x20, 0x86, 0xf7, 0x73, 0x8c, 0x42, 0x9e, 0x31, 0xda, 0xf2, 0xd8, 0xfd, + 0x18, 0x6c, 0x9f, 0x19, 0x1f, 0xee, 0x4b, 0x65, 0x79, 0x38, 0x45, 0x97, + 0x82, 0x1b, 0x68, 0x0d, 0x73, 0x64, 0x83, 0x13, 0xba, 0x24, 0x78, 0xc2, + 0x4a, 0x79, 0xbe, 0x89, 0x89, 0x6b, 0x7a, 0x8d, 0x5e, 0xa4, 0x32, 0x64, + 0x6d, 0xdc, 0x37, 0xea, 0x23, 0xe8, 0x8d, 0x42, 0xee, 0x40, 0x73, 0x6f, + 0xa8, 0x9e, 0x35, 0xe3, 0x50, 0xb9, 0xcc, 0x2a, 0xb0, 0x6a, 0xce, 0xc7, + 0x6e, 0x2b, 0x20, 0x35, 0xc4, 0xee, 0x8d, 0x49, 0x91, 0xc9, 0x26, 0x57, + 0x44, 0xe7, 0xb4, 0x5f, 0x5b, 0x24, 0x07, 0x6d, 0x2e, 0x03, 0xcb, 0x4e, + 0xc9, 0x29, 0x8d, 0xd2, 0xe0, 0xd0, 0x3c, 0x48, 0x47, 0xa4, 0x8a, 0xef, + 0x61, 0x1a, 0xea, 0xa9, 0x5a, 0xff, 0x00, 0x7b, 0x18, 0xd3, 0xa8, 0x78, + 0xdc, 0x3c, 0x37, 0x09, 0x56, 0xf7, 0x0f, 0x59, 0xa4, 0x73, 0x3a, 0xc7, + 0x12, 0x92, 0x99, 0x31, 0xe1, 0xf9, 0xaf, 0xe4, 0x07, 0x39, 0x90, 0x7e, + 0x30, 0x57, 0x41, 0x45, 0x61, 0xac, 0x9f, 0x12, 0x41, 0x1f, 0x35, 0xcd, + 0xe3, 0x92, 0x72, 0x6c, 0x3f, 0xcb, 0x64, 0xfc, 0x02, 0xe8, 0x31, 0x9c, + 0x6c, 0xc7, 0x0f, 0x69, 0x82, 0x0c, 0x9f, 0x31, 0xaa, 0x4a, 0x45, 0x7e, + 0xdf, 0x58, 0x03, 0x00, 0x6e, 0xd3, 0xe4, 0x16, 0x4d, 0x24, 0x3f, 0x3b, + 0x7f, 0xd2, 0x87, 0x3a, 0x01, 0xf8, 0x94, 0x77, 0xe4, 0x87, 0xe6, 0xb2, + 0x93, 0xa1, 0x2f, 0x24, 0x7c, 0x27, 0xfd, 0x8a, 0x9e, 0x3b, 0xcb, 0x33, + 0x59, 0x07, 0x4d, 0xe4, 0x13, 0x3a, 0x72, 0x7b, 0x24, 0xa4, 0xdf, 0x59, + 0x43, 0x5d, 0xd1, 0xa3, 0x8d, 0xb6, 0x56, 0x4e, 0x9d, 0x89, 0x8f, 0xe2, + 0xb9, 0xca, 0xa8, 0x63, 0x80, 0x07, 0x46, 0x37, 0x52, 0x38, 0x9f, 0x8a, + 0xe8, 0xfa, 0xf4, 0xdb, 0xd2, 0x72, 0x03, 0x47, 0xb8, 0xed, 0xda, 0x38, + 0xd4, 0x38, 0x2e, 0x7e, 0x8c, 0x2b, 0x5c, 0xc0, 0xec, 0x82, 0x1a, 0xc1, + 0xdb, 0x86, 0xfc, 0xc9, 0x49, 0x4d, 0x9a, 0xf2, 0x29, 0x60, 0x0d, 0xa8, + 0x6e, 0x23, 0xb3, 0x78, 0xfb, 0xd2, 0xbe, 0xbe, 0xa1, 0x92, 0xcf, 0xd0, + 0x57, 0xb1, 0xe0, 0x1d, 0xaf, 0x0f, 0x87, 0x09, 0xf3, 0x85, 0x4c, 0xf5, + 0x1e, 0x9d, 0x8e, 0xed, 0x95, 0x3b, 0xed, 0x36, 0x8d, 0x36, 0xd5, 0xc7, + 0xcd, 0xe7, 0x45, 0x4b, 0x3b, 0xaa, 0xf5, 0xe7, 0x30, 0xfa, 0x4d, 0x18, + 0xb4, 0x70, 0x4d, 0x64, 0x39, 0xd0, 0x7c, 0x5d, 0xcf, 0xdc, 0x92, 0x9d, + 0x5a, 0xf2, 0x4d, 0x4c, 0x15, 0x66, 0x06, 0x87, 0xfd, 0x17, 0x32, 0xc2, + 0x1a, 0xe9, 0xf0, 0xf3, 0x46, 0xaf, 0x1f, 0x19, 0x96, 0x07, 0x53, 0x41, + 0xa1, 0xda, 0xee, 0xf0, 0x2b, 0x1f, 0xa4, 0xf4, 0x5a, 0x2f, 0x65, 0x79, + 0xf9, 0x97, 0x3a, 0xe7, 0x3c, 0x97, 0x0a, 0x8f, 0x1e, 0xd3, 0x1e, 0xe3, + 0xc9, 0xe1, 0x6e, 0x12, 0x59, 0x63, 0x63, 0x51, 0xa9, 0x9f, 0x8a, 0x4a, + 0x74, 0xf0, 0x03, 0xbd, 0x47, 0xb1, 0xba, 0xcb, 0x47, 0xe5, 0x09, 0x65, + 0xd4, 0xef, 0xb4, 0x78, 0x3f, 0x69, 0x3f, 0x2f, 0x14, 0xdd, 0x2a, 0x0d, + 0x8e, 0x93, 0x1a, 0x68, 0x78, 0xee, 0x0a, 0x3e, 0x47, 0xbb, 0x28, 0xbe, + 0x37, 0x6d, 0x61, 0x04, 0x93, 0x1a, 0x12, 0x12, 0x53, 0xcd, 0x75, 0xa0, + 0xe7, 0xdb, 0x8e, 0xd7, 0x34, 0x9f, 0x4e, 0xb3, 0xa8, 0x3e, 0x2e, 0xff, + 0x00, 0x62, 0xa2, 0xc9, 0x71, 0x21, 0xa0, 0xb4, 0xb4, 0x72, 0x08, 0x2b, + 0x43, 0xeb, 0x0d, 0x4e, 0x76, 0x4e, 0x3b, 0xda, 0x40, 0x1e, 0x89, 0xf7, + 0x0d, 0x48, 0x3b, 0x8a, 0xcc, 0x65, 0x6f, 0x24, 0xbb, 0x68, 0xdc, 0x78, + 0x70, 0xd0, 0xfc, 0xe1, 0x25, 0x2f, 0x63, 0xc8, 0x78, 0xa8, 0x92, 0x43, + 0xf8, 0xd0, 0x14, 0x37, 0xd3, 0xb4, 0x9f, 0x1f, 0xba, 0x51, 0x9d, 0x69, + 0x6b, 0x46, 0xea, 0x9b, 0xa7, 0x0e, 0x20, 0x6b, 0xe7, 0xa7, 0xf7, 0x20, + 0xb2, 0x77, 0x4b, 0xef, 0x86, 0x38, 0x18, 0x04, 0x06, 0xc7, 0xdc, 0x0a, + 0x4a, 0x46, 0x18, 0x58, 0xed, 0x27, 0xc7, 0xef, 0x56, 0x61, 0xde, 0x97, + 0xa9, 0x0a, 0x74, 0xd0, 0xdb, 0x1a, 0x40, 0x7b, 0x4d, 0x80, 0xfb, 0x67, + 0xe8, 0x91, 0xfd, 0x6f, 0xf6, 0x2b, 0xbf, 0x66, 0x3f, 0x65, 0xf5, 0x36, + 0x8d, 0xfc, 0xec, 0x9d, 0x3d, 0x39, 0xe6, 0x7f, 0x14, 0x94, 0xd0, 0x6f, + 0x53, 0xea, 0xc2, 0x1d, 0xea, 0x87, 0x47, 0x78, 0x3f, 0xc4, 0x2b, 0x0c, + 0xeb, 0x7d, 0x63, 0x66, 0xe2, 0x01, 0x13, 0x04, 0xc2, 0x9d, 0x9f, 0x67, + 0x78, 0xd1, 0x92, 0x39, 0x1e, 0xd2, 0x00, 0xfc, 0x10, 0x9c, 0x71, 0x1b, + 0x24, 0x93, 0x1c, 0x00, 0xc9, 0x09, 0x29, 0x71, 0xd7, 0xb3, 0x0e, 0x8f, + 0xc7, 0x04, 0xf8, 0xc0, 0x48, 0xf5, 0x9d, 0xc7, 0x6b, 0xe8, 0x00, 0x8f, + 0x22, 0x9d, 0xb8, 0xd4, 0x58, 0x1a, 0x18, 0xf7, 0xb4, 0xf2, 0x4b, 0xa0, + 0xfd, 0xca, 0x26, 0xb6, 0x9d, 0x0d, 0xa4, 0xb4, 0x6b, 0x05, 0xb2, 0x04, + 0x24, 0xa6, 0x4e, 0xcd, 0xaa, 0xd1, 0x02, 0x93, 0xf2, 0x24, 0x2b, 0x58, + 0x30, 0x4f, 0xb2, 0x41, 0x88, 0x01, 0xc4, 0x15, 0x41, 0xd8, 0xfb, 0x89, + 0x8b, 0x1b, 0xa7, 0x00, 0x8d, 0xba, 0x27, 0xac, 0x5d, 0x47, 0xbd, 0xae, + 0x86, 0x8e, 0x44, 0xc8, 0x49, 0x4e, 0x8d, 0x14, 0x96, 0xbd, 0xcc, 0x22, + 0x60, 0x19, 0x31, 0xde, 0x13, 0xd4, 0x03, 0x8f, 0x01, 0x37, 0x4e, 0xbd, + 0xf7, 0x53, 0x68, 0x77, 0xd2, 0x6b, 0xc7, 0xf9, 0xae, 0x07, 0xf8, 0xa2, + 0x56, 0x20, 0x03, 0xdd, 0xda, 0x42, 0x4a, 0x6d, 0x81, 0xa0, 0x04, 0xc0, + 0x1f, 0x8a, 0x05, 0xef, 0x2c, 0x10, 0xd6, 0xea, 0x74, 0x6c, 0x6a, 0x51, + 0x87, 0xb5, 0xba, 0xc9, 0xf1, 0x08, 0x2e, 0xb2, 0xd6, 0x3c, 0xed, 0x68, + 0x2f, 0x77, 0x1d, 0xf6, 0x0f, 0x8a, 0x4a, 0x71, 0xaf, 0xaa, 0xdb, 0x7a, + 0xa8, 0xa6, 0x9b, 0x7d, 0x3c, 0x9a, 0x6a, 0x05, 0xcc, 0x30, 0x43, 0x83, + 0x8c, 0x90, 0x47, 0xdc, 0xaf, 0x55, 0x61, 0xab, 0x4c, 0xaa, 0x5a, 0xd8, + 0xd0, 0x5b, 0x58, 0x96, 0xfc, 0xc7, 0x21, 0x66, 0x63, 0xe2, 0x32, 0xde, + 0xa7, 0x79, 0x2e, 0x7b, 0x32, 0x2b, 0x74, 0xd5, 0x70, 0xd7, 0x76, 0x9a, + 0xeb, 0xe3, 0x2b, 0x76, 0xa2, 0xfb, 0x3d, 0xb6, 0x01, 0xea, 0x8e, 0x48, + 0xe1, 0xe3, 0xc4, 0x24, 0xa4, 0xed, 0x97, 0xb5, 0xae, 0x07, 0x70, 0x23, + 0x47, 0x37, 0x5d, 0x15, 0x6e, 0xa2, 0x03, 0x68, 0xd8, 0x7f, 0x38, 0xb4, + 0x7c, 0xa6, 0x55, 0xca, 0x6b, 0xae, 0xa6, 0xb9, 0xf5, 0x88, 0x9d, 0x5c, + 0x06, 0x80, 0xfc, 0x42, 0xa3, 0x98, 0x5d, 0x60, 0x63, 0xc8, 0xda, 0xc2, + 0xef, 0x6b, 0x4f, 0x3c, 0x14, 0x94, 0xd6, 0x26, 0xa6, 0x51, 0x6d, 0xee, + 0x90, 0x1a, 0xd2, 0x27, 0xc3, 0xdd, 0xb5, 0x0b, 0x27, 0x71, 0xc2, 0x7f, + 0xa7, 0x0d, 0x78, 0xb1, 0xa0, 0x17, 0x7b, 0x40, 0x82, 0x79, 0x3d, 0x82, + 0xb2, 0x40, 0x76, 0x24, 0x11, 0x3b, 0x80, 0x03, 0xe6, 0x65, 0x2b, 0x89, + 0xa9, 0x8c, 0x00, 0xc1, 0x73, 0x8c, 0x48, 0x06, 0x40, 0x04, 0x9e, 0x7c, + 0x12, 0x53, 0x95, 0xd3, 0x68, 0xf4, 0x3a, 0xa5, 0x34, 0xbd, 0xc4, 0x90, + 0x64, 0x49, 0x9f, 0x39, 0xf9, 0xae, 0x8d, 0xfe, 0x98, 0xcb, 0x0f, 0x71, + 0xf7, 0xb6, 0xa2, 0x78, 0xfc, 0xd9, 0x58, 0x78, 0xf7, 0x13, 0xd5, 0x2b, + 0xbb, 0x60, 0x7b, 0xdc, 0xdd, 0xc7, 0x69, 0x10, 0x4b, 0xb4, 0x90, 0xb6, + 0xdd, 0xf4, 0xb6, 0x39, 0xc5, 0xdf, 0xa3, 0xda, 0x67, 0x93, 0x07, 0xba, + 0x4a, 0x69, 0x65, 0x5a, 0x2b, 0x7d, 0x77, 0x7e, 0x6d, 0x8e, 0x61, 0x1f, + 0x08, 0xe5, 0x68, 0xe3, 0x56, 0x0b, 0xdc, 0x01, 0x97, 0x5b, 0xbd, 0xd1, + 0xe7, 0x1a, 0xaa, 0x19, 0x8c, 0x6b, 0x9f, 0x53, 0x40, 0x07, 0x69, 0xd0, + 0x78, 0x40, 0x85, 0x7f, 0xa5, 0x06, 0x8c, 0xd6, 0x39, 0xdc, 0xb5, 0xae, + 0x68, 0x3f, 0x14, 0x94, 0x8f, 0x04, 0xb5, 0x95, 0xd9, 0x2e, 0x32, 0x1b, + 0x1b, 0xbb, 0xf1, 0x12, 0xb4, 0xac, 0xb2, 0xda, 0xb1, 0xc3, 0x1a, 0xe8, + 0x73, 0x9b, 0x5b, 0x1c, 0xef, 0x22, 0x46, 0xef, 0xc1, 0x64, 0xe0, 0xb1, + 0xce, 0xc8, 0xbb, 0x77, 0xd0, 0x2e, 0x2c, 0x00, 0x71, 0xc0, 0x2b, 0x5d, + 0xd5, 0xb9, 0xac, 0x73, 0x9e, 0x64, 0x3c, 0xd4, 0x1a, 0x3c, 0x23, 0x76, + 0xbf, 0x8a, 0x4a, 0x68, 0x65, 0x39, 0xd5, 0xf5, 0x66, 0xec, 0x1e, 0xc0, + 0x1f, 0x0e, 0x3c, 0xc8, 0x12, 0x14, 0x71, 0xe9, 0xbd, 0xf7, 0x55, 0x60, + 0xa9, 0xc4, 0x07, 0x07, 0x39, 0xc5, 0xba, 0x46, 0xbd, 0xd6, 0xae, 0x0e, + 0x2d, 0x2d, 0x63, 0x5d, 0x6c, 0x5d, 0x73, 0x7e, 0x93, 0xcf, 0x8f, 0x1a, + 0x02, 0xa5, 0x99, 0x6e, 0xd2, 0xd0, 0x5f, 0xb5, 0x8e, 0x20, 0x10, 0x7c, + 0x0e, 0x92, 0x12, 0x53, 0xce, 0x7d, 0x6c, 0xea, 0x99, 0x98, 0x15, 0x54, + 0xca, 0x45, 0x7f, 0xa5, 0xfa, 0x3b, 0xa5, 0xce, 0x90, 0x35, 0x3b, 0x7e, + 0x8e, 0x8b, 0x98, 0x18, 0x9d, 0x5f, 0xa9, 0xd7, 0xf6, 0x8c, 0x87, 0xbe, + 0xf6, 0x34, 0xc6, 0xd9, 0x00, 0x0f, 0x96, 0x80, 0x2e, 0xa3, 0xeb, 0x4e, + 0x18, 0xc8, 0xc2, 0x7b, 0xeb, 0x22, 0xcb, 0x31, 0xf5, 0x04, 0x6b, 0xa0, + 0x21, 0xce, 0xfc, 0x02, 0xc7, 0xe9, 0x59, 0x4f, 0x9f, 0x41, 0xba, 0xb6, + 0xc8, 0xf6, 0x76, 0x3f, 0x14, 0x94, 0xd6, 0xaa, 0x86, 0x51, 0xbc, 0x1c, + 0x77, 0xd7, 0xe9, 0x8f, 0x71, 0x77, 0xb9, 0xa3, 0x8f, 0xce, 0x6f, 0xc5, + 0x2a, 0xee, 0xa3, 0x21, 0xde, 0x8b, 0x6c, 0x24, 0xbc, 0x10, 0xc6, 0xc1, + 0xe4, 0xf0, 0xba, 0x26, 0x66, 0x62, 0x32, 0x8c, 0x8c, 0x2c, 0xeb, 0x2b, + 0xa0, 0x86, 0x39, 0x8c, 0xab, 0x6e, 0xd3, 0xb9, 0xe4, 0x79, 0x44, 0x68, + 0xb2, 0x70, 0x83, 0xad, 0xca, 0x0c, 0x6b, 0x37, 0x9a, 0xa5, 0xc4, 0x73, + 0xb6, 0x3f, 0x73, 0xe2, 0x92, 0x9b, 0x8d, 0x2f, 0xc6, 0xa9, 0x94, 0xb5, + 0x8d, 0x73, 0x2b, 0x6c, 0x08, 0x91, 0xc2, 0x7a, 0x32, 0x1d, 0x65, 0x90, + 0xe6, 0x6d, 0x11, 0x3c, 0xc8, 0xe4, 0x21, 0x59, 0x90, 0x37, 0x11, 0xb4, + 0x82, 0x39, 0x6c, 0xc1, 0x4f, 0x55, 0x8d, 0x7b, 0x8b, 0x99, 0xc6, 0xd8, + 0x23, 0xce, 0x52, 0x53, 0xbb, 0xd3, 0x8f, 0xb8, 0x81, 0xac, 0x89, 0x28, + 0xd9, 0x4f, 0x2c, 0xb5, 0xdb, 0xa4, 0x7b, 0x38, 0xed, 0x25, 0x57, 0xe9, + 0x40, 0x3a, 0xc3, 0xb8, 0xc6, 0x9a, 0x28, 0xe5, 0x0b, 0x3e, 0xd0, 0xea, + 0x5d, 0xab, 0x1c, 0x04, 0x4f, 0x89, 0x2e, 0x26, 0x52, 0x53, 0x9d, 0xd4, + 0xc0, 0xb2, 0xfa, 0x9a, 0x5c, 0x25, 0xb5, 0x00, 0x46, 0x9e, 0x2e, 0x28, + 0x0c, 0xa8, 0x01, 0xa6, 0x9e, 0x44, 0x29, 0xf5, 0x7a, 0x2b, 0xfb, 0x78, + 0x05, 0xa3, 0x70, 0xad, 0xba, 0x9f, 0x29, 0x54, 0xfd, 0x00, 0x0c, 0xb5, + 0xce, 0x69, 0x3e, 0x04, 0xc0, 0x49, 0x49, 0x6f, 0xa9, 0xd1, 0x03, 0x50, + 0x50, 0x83, 0x1a, 0xd6, 0xc3, 0x9b, 0xc7, 0x3a, 0x76, 0x4a, 0x6f, 0x1a, + 0x1b, 0x5d, 0x1f, 0xca, 0xf7, 0x7e, 0x54, 0x85, 0xb7, 0x4c, 0x4b, 0x5c, + 0x3b, 0x88, 0x8f, 0xc8, 0x92, 0x92, 0xe2, 0x62, 0xb6, 0xdb, 0x07, 0xb7, + 0xd9, 0xcb, 0x8f, 0x83, 0x47, 0x3f, 0x7f, 0x0b, 0x5a, 0x34, 0xdf, 0xb4, + 0xfc, 0x23, 0x4d, 0xbc, 0x42, 0x86, 0x2d, 0x4e, 0x6d, 0x6d, 0x0e, 0x01, + 0xb6, 0x58, 0x03, 0x9f, 0x13, 0xa3, 0x47, 0xd1, 0x1f, 0xc5, 0x68, 0xed, + 0x6f, 0xa7, 0xe9, 0x69, 0xba, 0x26, 0x7b, 0xfc, 0x12, 0x53, 0x92, 0xf1, + 0x70, 0x6e, 0xc2, 0x74, 0x99, 0x07, 0x59, 0x92, 0xaa, 0xb9, 0x96, 0x3b, + 0x56, 0xbb, 0x74, 0x68, 0x20, 0xbb, 0x4f, 0xbd, 0x50, 0x75, 0xfd, 0x5f, + 0x24, 0x34, 0x3b, 0x3a, 0xdd, 0xac, 0xfa, 0x3b, 0x88, 0x9f, 0xe0, 0xa7, + 0x66, 0x35, 0xe6, 0xc1, 0x6d, 0xb9, 0x16, 0xbd, 0xe0, 0x40, 0x78, 0x71, + 0x6c, 0x7c, 0x1b, 0xc2, 0x4a, 0x6f, 0x53, 0x8f, 0x73, 0xdf, 0x04, 0x81, + 0xfd, 0x91, 0xba, 0x7e, 0x6a, 0x57, 0x52, 0x6b, 0xe4, 0x73, 0xf4, 0xa5, + 0xba, 0x4f, 0xc7, 0x45, 0x41, 0xb7, 0xe7, 0x54, 0x62, 0xab, 0xeb, 0x7f, + 0x7d, 0xb6, 0xb4, 0xbb, 0x8f, 0xbd, 0x19, 0xdd, 0x77, 0xa8, 0xd6, 0x76, + 0xdd, 0x81, 0x5b, 0xfb, 0x6f, 0xa9, 0xee, 0x60, 0x3f, 0x2d, 0x52, 0x53, + 0x27, 0xb4, 0x08, 0x3e, 0x90, 0x3d, 0x87, 0x6f, 0xe2, 0x83, 0x7d, 0xc2, + 0xaa, 0x1f, 0x6b, 0xda, 0xed, 0xad, 0x13, 0xb4, 0x12, 0x27, 0xe1, 0xb8, + 0x29, 0xd7, 0xd6, 0x5a, 0xe3, 0xbb, 0x2b, 0x0e, 0xe0, 0xdd, 0x48, 0x34, + 0xbf, 0x71, 0x1f, 0xe7, 0x14, 0x1e, 0xa7, 0xd6, 0x31, 0x72, 0xf0, 0x9f, + 0x8e, 0x2b, 0xb9, 0xae, 0x22, 0x01, 0xb2, 0xb6, 0xf3, 0x3d, 0xdc, 0xd3, + 0x29, 0x29, 0x3f, 0x41, 0xcb, 0x6d, 0xd6, 0xdc, 0x1a, 0xc7, 0xb3, 0x70, + 0x1a, 0x3a, 0x39, 0x98, 0xe7, 0xe6, 0xb4, 0x68, 0x2f, 0xf5, 0x08, 0x78, + 0x82, 0xc3, 0x0b, 0x9e, 0xe9, 0xef, 0xfb, 0x3d, 0x95, 0x3a, 0xb7, 0xd8, + 0x0b, 0xcb, 0x5a, 0x43, 0x49, 0x82, 0x27, 0x88, 0x27, 0xc5, 0x74, 0x5b, + 0xcb, 0xf2, 0x1c, 0x1c, 0xd8, 0x79, 0xd4, 0x37, 0xe3, 0xaa, 0x4a, 0x6c, + 0x03, 0x20, 0xc9, 0x86, 0x8e, 0xca, 0x37, 0x09, 0xae, 0x67, 0x68, 0x3d, + 0xd4, 0x8b, 0x1c, 0xd6, 0x11, 0x25, 0xc1, 0x07, 0x22, 0xd1, 0x4e, 0x13, + 0x9e, 0xf0, 0x77, 0x4f, 0xb5, 0xbd, 0xf5, 0x49, 0x4d, 0x2e, 0x99, 0x5f, + 0xab, 0x7e, 0x5b, 0x0c, 0x8f, 0x78, 0xf4, 0xdd, 0xe3, 0xb4, 0x6a, 0x15, + 0xc1, 0x41, 0x63, 0xb4, 0x73, 0xb7, 0x03, 0xa2, 0xab, 0xd2, 0xab, 0xb5, + 0xb4, 0x6e, 0x77, 0xd3, 0x73, 0xdc, 0xe9, 0x1d, 0x8f, 0x82, 0xd4, 0x3e, + 0xf1, 0x24, 0xc3, 0x87, 0x3e, 0x7e, 0x69, 0x29, 0x93, 0x6c, 0x02, 0xbf, + 0xd2, 0xf6, 0xd5, 0xd0, 0xb2, 0xba, 0x86, 0x6b, 0x9d, 0x9a, 0xc6, 0xed, + 0x3e, 0x93, 0x1b, 0x22, 0x78, 0x83, 0xe1, 0xe6, 0x56, 0x9d, 0x9b, 0x18, + 0xcd, 0x48, 0x83, 0xcc, 0xaa, 0x56, 0x74, 0x97, 0x65, 0x38, 0xb9, 0x99, + 0x0c, 0x2e, 0x30, 0x3d, 0x27, 0x02, 0x40, 0x03, 0xb6, 0x89, 0x29, 0x83, + 0xaf, 0xa7, 0x68, 0xac, 0x1f, 0x76, 0xe0, 0x00, 0x3a, 0x7d, 0x1f, 0x72, + 0x56, 0x4b, 0xea, 0x6d, 0x5a, 0x3a, 0xf7, 0xb5, 0xfe, 0x9e, 0xee, 0x03, + 0xc8, 0xd5, 0x45, 0xdd, 0x0f, 0xa8, 0x9b, 0xc5, 0xe5, 0xd5, 0x13, 0x04, + 0x16, 0xee, 0xfd, 0xed, 0x7f, 0x39, 0x49, 0x9d, 0x23, 0xa8, 0x7a, 0x8d, + 0x36, 0x02, 0xed, 0x83, 0x7b, 0x08, 0x21, 0xc5, 0xdf, 0xd5, 0xda, 0x52, + 0x53, 0x9f, 0xd2, 0xe9, 0x7d, 0x7d, 0x48, 0x33, 0xd3, 0x2c, 0x3b, 0x7d, + 0xe4, 0xf0, 0x5d, 0xcf, 0xb7, 0xc9, 0x6e, 0xd9, 0x4c, 0x66, 0x17, 0xe9, + 0xab, 0x00, 0xf9, 0x0d, 0xd2, 0xaa, 0x63, 0xd1, 0x73, 0x5d, 0x7e, 0x4b, + 0xa8, 0x3b, 0xab, 0x25, 0xa5, 0xad, 0x92, 0xf0, 0x47, 0xf2, 0x44, 0xf2, + 0xac, 0x7d, 0xb7, 0x71, 0x06, 0xca, 0xad, 0x69, 0x70, 0x8d, 0x58, 0x62, + 0x47, 0x9a, 0x4a, 0x47, 0x7d, 0x4d, 0x6b, 0xec, 0x11, 0x0e, 0x78, 0x2f, + 0x07, 0xc6, 0x76, 0x83, 0x0a, 0x58, 0xd5, 0xbd, 0x98, 0xc0, 0xb5, 0xc5, + 0xa6, 0xb0, 0x3d, 0xe3, 0x9d, 0x1c, 0x3c, 0x53, 0x66, 0x64, 0x35, 0xef, + 0x63, 0x6b, 0x69, 0x05, 0x82, 0x1e, 0xe2, 0x08, 0x81, 0xa6, 0x8a, 0x2e, + 0xcc, 0xa6, 0xba, 0xfd, 0x37, 0x3c, 0x6d, 0xdb, 0xae, 0xb1, 0xc1, 0xd7, + 0x94, 0x94, 0x92, 0x86, 0xda, 0xe1, 0x73, 0x98, 0x48, 0x77, 0xac, 0x08, + 0x23, 0xf7, 0x43, 0x80, 0x8f, 0xb9, 0x68, 0x75, 0x0c, 0x97, 0x34, 0x0a, + 0xd9, 0x24, 0x00, 0xd9, 0xd3, 0xc2, 0x7b, 0xac, 0xfc, 0x4c, 0x8a, 0xda, + 0xdd, 0xa1, 0xc2, 0x1e, 0x66, 0x64, 0x70, 0x8b, 0xd4, 0xb3, 0x03, 0x72, + 0x58, 0xd6, 0x43, 0xab, 0x76, 0xdd, 0xc4, 0x11, 0xce, 0x9a, 0xa4, 0xa6, + 0xed, 0x4e, 0xf4, 0xc0, 0x02, 0xcd, 0xa1, 0xfe, 0xea, 0xde, 0x46, 0xe6, + 0xbc, 0x1d, 0x60, 0xf9, 0x84, 0x3c, 0xe3, 0xa0, 0xde, 0x44, 0x3b, 0xb0, + 0x32, 0xd2, 0x0e, 0x92, 0xd9, 0xfc, 0x42, 0x26, 0x33, 0x18, 0x47, 0xa6, + 0x3d, 0xcc, 0x71, 0x1e, 0xc2, 0x3b, 0x9f, 0x0f, 0x34, 0x7c, 0xac, 0x46, + 0x3e, 0xbf, 0x4e, 0xdf, 0xd1, 0x9e, 0xc3, 0x8d, 0x47, 0x70, 0x92, 0x9e, + 0x6f, 0x1b, 0xa5, 0xe3, 0xe0, 0xe6, 0x0c, 0xac, 0x70, 0xed, 0x0e, 0xf7, + 0x51, 0xb8, 0xec, 0xb0, 0x38, 0x13, 0x04, 0x1f, 0xed, 0x05, 0x81, 0x98, + 0xc1, 0xd3, 0xf3, 0x8b, 0x58, 0x63, 0x1e, 0xdf, 0xd2, 0x63, 0xba, 0x7f, + 0x34, 0xfe, 0x61, 0x3f, 0xbc, 0xde, 0x0a, 0xeb, 0x2d, 0xd4, 0x19, 0x10, + 0xfa, 0x89, 0x0d, 0x3f, 0xf1, 0x67, 0x70, 0x43, 0xca, 0xe8, 0xb4, 0xf5, + 0x6c, 0x6c, 0xa6, 0x63, 0xd4, 0x1d, 0x92, 0xf6, 0x07, 0xd4, 0x74, 0x03, + 0xd4, 0x1a, 0x8d, 0x7b, 0x48, 0x49, 0x4f, 0x30, 0xfb, 0xd9, 0x98, 0xe1, + 0x4d, 0x3b, 0x8d, 0xee, 0x70, 0x32, 0xf0, 0x0e, 0xd3, 0x3c, 0xef, 0x07, + 0x8f, 0x92, 0xdb, 0xc7, 0xa1, 0xb8, 0x56, 0xd7, 0x45, 0xce, 0x22, 0xf7, + 0x16, 0xdc, 0xd7, 0x35, 0xa7, 0xdd, 0xa1, 0x04, 0x79, 0x46, 0xa1, 0x36, + 0x0f, 0x45, 0xc5, 0xe8, 0xf6, 0xd9, 0x45, 0xb6, 0xb3, 0x2f, 0xaa, 0x5a, + 0xc8, 0xf4, 0x2a, 0xd5, 0x95, 0x37, 0xc5, 0xee, 0xf8, 0xab, 0x96, 0xe1, + 0xb5, 0xf7, 0x35, 0xc1, 0xc3, 0x7e, 0x30, 0x21, 0xec, 0x1a, 0x34, 0x4b, + 0x7d, 0xc0, 0x79, 0x89, 0x49, 0x4d, 0xe7, 0x74, 0xfc, 0x6e, 0xa2, 0xd8, + 0xc8, 0x68, 0x6d, 0xa5, 0xb2, 0xdb, 0xdb, 0xa3, 0xc7, 0x87, 0xc7, 0xe6, + 0xb0, 0x5d, 0x87, 0x91, 0xd3, 0x72, 0x1f, 0x8d, 0x91, 0xf1, 0x63, 0xbb, + 0x3d, 0xa7, 0x87, 0x05, 0xb1, 0x83, 0x98, 0xd7, 0x32, 0x18, 0xed, 0x59, + 0x20, 0xeb, 0xc4, 0x7c, 0x55, 0xfd, 0xf8, 0x7d, 0x46, 0xb1, 0x5d, 0xa1, + 0x96, 0x16, 0x6a, 0x35, 0x04, 0xee, 0xe3, 0x91, 0xfc, 0x12, 0x53, 0x9d, + 0xd3, 0x2c, 0x0d, 0xb3, 0x71, 0xe0, 0x8f, 0xef, 0x50, 0xcc, 0xc8, 0x1f, + 0x6c, 0x79, 0x27, 0xda, 0xdd, 0xbf, 0x95, 0x5a, 0xa3, 0xa5, 0xe5, 0xe3, + 0x5a, 0x43, 0x9b, 0xba, 0xb9, 0x01, 0x84, 0x6b, 0x31, 0x31, 0x3e, 0x0b, + 0x2b, 0x3d, 0xe0, 0xdf, 0x90, 0x20, 0xef, 0x67, 0xd3, 0x69, 0xd0, 0x82, + 0x0a, 0x4a, 0x61, 0xd6, 0x25, 0xfd, 0x43, 0x70, 0x98, 0x35, 0xb2, 0x7e, + 0xed, 0x74, 0x55, 0x88, 0x80, 0x09, 0x06, 0x4f, 0x07, 0xb7, 0xdf, 0x28, + 0x99, 0x52, 0xec, 0x8d, 0xe6, 0x64, 0xb5, 0x9a, 0xfc, 0xbc, 0x54, 0x37, + 0x96, 0x82, 0xd6, 0x8e, 0x79, 0x49, 0x48, 0x1c, 0xf7, 0xee, 0xda, 0x3e, + 0x9c, 0x68, 0xd8, 0xd7, 0xf8, 0xab, 0x3d, 0x36, 0xa7, 0x64, 0x64, 0x80, + 0xf6, 0xfe, 0x8d, 0x83, 0x73, 0xcc, 0x47, 0x1d, 0xbe, 0x68, 0x0e, 0xa5, + 0x8e, 0x6e, 0xe2, 0x4f, 0xb7, 0x82, 0x34, 0x23, 0xe6, 0x65, 0x6f, 0xd0, + 0xcd, 0xb5, 0x34, 0x16, 0xc5, 0x97, 0x41, 0xb0, 0x0e, 0x62, 0x3d, 0xa0, + 0xa4, 0xa4, 0xd4, 0xb7, 0x79, 0x75, 0xa4, 0x18, 0x1c, 0x8f, 0x3e, 0xc1, + 0x07, 0xed, 0x23, 0xed, 0x3f, 0x68, 0xdd, 0xed, 0xd9, 0x1b, 0x63, 0x4d, + 0xb3, 0xf4, 0xbe, 0xfd, 0x51, 0x6d, 0xfd, 0x1d, 0x7e, 0x83, 0x9c, 0x75, + 0x83, 0x61, 0x1a, 0x6d, 0x6f, 0x70, 0x3c, 0xe1, 0x52, 0x87, 0x7f, 0x3f, + 0x1f, 0xa2, 0xdd, 0xb3, 0x6c, 0x69, 0xb5, 0x25, 0x38, 0xbe, 0xd6, 0xba, + 0x01, 0x71, 0x1d, 0xa4, 0x22, 0x0d, 0xe1, 0xbe, 0x63, 0x53, 0xac, 0xcf, + 0x92, 0xb7, 0x56, 0x3b, 0xd9, 0x05, 0xed, 0x6b, 0xb7, 0x76, 0x74, 0x8f, + 0xb9, 0x27, 0xd6, 0x4f, 0xd2, 0x63, 0x40, 0x9d, 0x40, 0x8e, 0xe9, 0x29, + 0xa5, 0xeb, 0x36, 0xc2, 0x03, 0x40, 0xac, 0xce, 0xb0, 0x3f, 0xb9, 0x10, + 0x5e, 0xe6, 0xe8, 0x08, 0x74, 0x70, 0x9c, 0xe3, 0xb0, 0x12, 0x76, 0xe8, + 0x39, 0x24, 0x7f, 0x71, 0x43, 0x2d, 0x2d, 0x1f, 0x44, 0xb9, 0xa0, 0x70, + 0x47, 0xf1, 0x49, 0x4c, 0x5f, 0x95, 0xb9, 0xd0, 0x06, 0xd2, 0xed, 0x34, + 0x42, 0xb3, 0x17, 0x73, 0x40, 0x7d, 0x6e, 0x23, 0xe9, 0x17, 0x4c, 0xfc, + 0x38, 0x45, 0x6e, 0xf0, 0xe0, 0xf6, 0x54, 0x40, 0xec, 0x67, 0x4f, 0xc8, + 0xa4, 0xd7, 0xda, 0xe7, 0x38, 0xbf, 0xd9, 0xa0, 0x97, 0xc9, 0x3f, 0x72, + 0x4a, 0x63, 0xd3, 0xab, 0x65, 0xdd, 0x5b, 0x12, 0x86, 0x86, 0x90, 0x6c, + 0x69, 0x8d, 0x67, 0xdb, 0xee, 0xfe, 0x0b, 0x77, 0x24, 0xb4, 0x75, 0x0b, + 0x1a, 0xd1, 0xee, 0x04, 0x03, 0xe5, 0xa2, 0xca, 0xe9, 0x99, 0x06, 0x8e, + 0xaf, 0x89, 0x69, 0x73, 0x1e, 0xd1, 0x60, 0x9d, 0x20, 0xfb, 0xbd, 0xb3, + 0xf8, 0xad, 0x9b, 0x71, 0x9e, 0x73, 0x9d, 0x68, 0x3a, 0x98, 0xfc, 0x89, + 0x29, 0x9e, 0x39, 0x7b, 0xdc, 0x7c, 0x07, 0x72, 0xb0, 0xba, 0xd6, 0x7d, + 0x99, 0x59, 0x7f, 0x63, 0xc1, 0x74, 0xed, 0x21, 0x86, 0xc1, 0xfb, 0xc7, + 0x4d, 0x16, 0xa7, 0x51, 0xbe, 0xc9, 0x1d, 0x3b, 0x0b, 0x4b, 0xec, 0xfe, + 0x7e, 0xcf, 0xdc, 0x6f, 0x97, 0x9a, 0xa3, 0x56, 0x26, 0x2e, 0x0d, 0xe1, + 0x8c, 0xf7, 0xbe, 0xbd, 0x6c, 0x1d, 0xc6, 0xed, 0x37, 0x14, 0x94, 0xbe, + 0x16, 0xcc, 0x6a, 0xfe, 0xc9, 0x8e, 0xfd, 0xfb, 0x35, 0xf7, 0x9d, 0x5c, + 0x7f, 0x38, 0xeb, 0xe2, 0x55, 0xb6, 0xb6, 0xe0, 0x65, 0xee, 0x83, 0x12, + 0x00, 0x45, 0x38, 0xf5, 0xbf, 0x6d, 0x80, 0x03, 0x1f, 0x45, 0xde, 0x1e, + 0x68, 0xbb, 0xf1, 0x71, 0xd8, 0x2c, 0xc9, 0xb0, 0x01, 0xda, 0x7b, 0x94, + 0x94, 0xc2, 0xb6, 0xd8, 0x58, 0xe7, 0xd9, 0x5e, 0xea, 0xc0, 0x24, 0xb9, + 0xc7, 0x88, 0x59, 0x54, 0xf5, 0xcc, 0x37, 0x90, 0xe7, 0x66, 0x31, 0xbb, + 0x49, 0x21, 0xa6, 0x40, 0xfb, 0x88, 0x57, 0xae, 0xeb, 0x58, 0xb6, 0xbc, + 0x63, 0xb4, 0xb8, 0x52, 0x75, 0xdc, 0x06, 0x84, 0x8f, 0x15, 0x41, 0xcf, + 0xa7, 0xd6, 0x35, 0xd6, 0x1a, 0xf0, 0x3b, 0xed, 0x07, 0xe5, 0x10, 0x92, + 0x9b, 0xed, 0xea, 0x59, 0x1f, 0xce, 0x62, 0xe4, 0xb1, 0xf5, 0x4f, 0xe6, + 0xbd, 0xae, 0x1f, 0x02, 0x0c, 0xc2, 0xb7, 0x8d, 0x92, 0xf7, 0x8d, 0xd2, + 0x1b, 0xa9, 0xf7, 0x83, 0xed, 0xfe, 0xcc, 0x2c, 0xb6, 0xd5, 0x4d, 0x84, + 0x87, 0x55, 0x5b, 0x83, 0x84, 0x1f, 0x68, 0xe0, 0xfc, 0x94, 0x9d, 0xd2, + 0xba, 0x5d, 0x92, 0xef, 0xb3, 0x06, 0xf8, 0xfa, 0x72, 0xdf, 0xba, 0x0a, + 0x4a, 0x6f, 0x0c, 0xeb, 0xf0, 0xec, 0x7d, 0xcc, 0x79, 0xb5, 0xb6, 0x11, + 0xb8, 0xb0, 0x13, 0xa8, 0xf1, 0x95, 0x7d, 0x99, 0xd7, 0x5a, 0xc3, 0x63, + 0x2d, 0x6c, 0x91, 0x0d, 0x6b, 0xc4, 0x6b, 0x3e, 0x0b, 0x04, 0x74, 0xcc, + 0x46, 0x34, 0xb5, 0x8c, 0xb5, 0xa7, 0x90, 0xe6, 0xda, 0xf0, 0x7f, 0xea, + 0x94, 0x5b, 0xd3, 0xa1, 0x9e, 0xcb, 0xf2, 0xab, 0x73, 0x78, 0x8b, 0xb7, + 0x0f, 0xb9, 0xcd, 0x29, 0x29, 0xda, 0xb7, 0xa8, 0x64, 0x56, 0x00, 0xbf, + 0x1c, 0x09, 0x3a, 0x9d, 0x81, 0xcd, 0x3e, 0x7a, 0x38, 0x2a, 0xd9, 0x19, + 0xdd, 0x36, 0xd6, 0xb7, 0xd7, 0xc6, 0x65, 0xa7, 0x56, 0xed, 0x7d, 0x51, + 0x00, 0xf8, 0x12, 0x7b, 0xac, 0xe0, 0x7a, 0xa3, 0x7d, 0x8c, 0xcf, 0x78, + 0x8e, 0xd6, 0xd6, 0xd7, 0x0f, 0xbd, 0xb0, 0x84, 0xfa, 0xfa, 0xd1, 0x3f, + 0xcf, 0xe3, 0xbd, 0xae, 0xd0, 0xb8, 0xb5, 0xc0, 0xf8, 0x78, 0xa4, 0xa7, + 0x4c, 0x5f, 0xd0, 0xdd, 0x01, 0xf8, 0xed, 0x67, 0x68, 0x87, 0x00, 0x3c, + 0xb4, 0x95, 0x5b, 0x2d, 0xf8, 0xd6, 0x7b, 0xb1, 0x98, 0xd6, 0xd6, 0x06, + 0x85, 0xa2, 0x01, 0x20, 0xf3, 0xd9, 0x67, 0xe6, 0x74, 0xee, 0xa5, 0x53, + 0x77, 0x7a, 0x95, 0x3f, 0xbc, 0x35, 0xce, 0x6f, 0x3f, 0xd6, 0x0a, 0xd6, + 0x0b, 0x2d, 0x18, 0x55, 0x9b, 0x63, 0x7b, 0x5a, 0x43, 0xc4, 0xce, 0x84, + 0x9e, 0xe9, 0x29, 0xe9, 0x7e, 0xae, 0xb8, 0x5e, 0xff, 0x00, 0x54, 0xea, + 0x1a, 0xdd, 0x3e, 0x27, 0x45, 0xbb, 0x6d, 0x4c, 0xba, 0xb3, 0x5d, 0x8d, + 0x0e, 0x07, 0x99, 0xfe, 0x0b, 0x92, 0xe8, 0x79, 0xb8, 0xd8, 0xb9, 0x95, + 0x62, 0xd8, 0xe8, 0x6d, 0xb5, 0x39, 0xe1, 0xee, 0x20, 0x00, 0x58, 0x77, + 0x1d, 0x7c, 0x81, 0x95, 0x57, 0xaa, 0x7d, 0x61, 0xcd, 0xcd, 0xc9, 0x78, + 0xc3, 0xb5, 0xcf, 0xc0, 0x06, 0x2b, 0x6d, 0x40, 0xb0, 0xbc, 0x47, 0x2e, + 0x3f, 0x48, 0xfe, 0x44, 0x94, 0xdc, 0xea, 0x78, 0xad, 0xc0, 0xcc, 0x79, + 0x7e, 0x63, 0x5f, 0x45, 0x91, 0xb2, 0x87, 0x10, 0x5f, 0x5e, 0x90, 0x67, + 0xbe, 0xaa, 0xa5, 0x59, 0x94, 0x0a, 0x5e, 0xc1, 0x91, 0xe9, 0x93, 0x59, + 0x03, 0x6c, 0xce, 0xe2, 0x08, 0x03, 0xda, 0x3e, 0xf5, 0x4d, 0xa0, 0x46, + 0xfb, 0x5a, 0x01, 0x3c, 0xcf, 0x28, 0x56, 0x75, 0x0c, 0x4a, 0x4c, 0x00, + 0x0b, 0x92, 0x52, 0x3e, 0x85, 0x8d, 0x97, 0x83, 0x6b, 0xb2, 0x76, 0x87, + 0x39, 0xec, 0xd8, 0x03, 0xa4, 0x89, 0x99, 0xdc, 0x7c, 0x55, 0xdd, 0xb6, + 0x54, 0x1e, 0x2c, 0xb4, 0x31, 0xb6, 0x39, 0xcf, 0x76, 0xba, 0x97, 0x3b, + 0x95, 0x8f, 0x95, 0xd7, 0xac, 0x92, 0xda, 0x8f, 0xc0, 0x35, 0x0f, 0x05, + 0x96, 0xe7, 0x5e, 0x6c, 0xce, 0xf5, 0x3e, 0xce, 0xd0, 0x48, 0x00, 0x90, + 0xe7, 0x38, 0xf1, 0x10, 0x92, 0x9d, 0xaa, 0xab, 0xa4, 0x02, 0x1a, 0xd1, + 0x13, 0xa9, 0xf3, 0x44, 0x7b, 0x74, 0x1b, 0x40, 0xda, 0xdd, 0x43, 0x86, + 0xa3, 0xf0, 0xd4, 0x2c, 0xbb, 0x7a, 0x6f, 0x51, 0x23, 0x6e, 0x03, 0xdf, + 0x5d, 0x7f, 0xf0, 0xae, 0x1c, 0x7f, 0x64, 0x2a, 0xdf, 0xb2, 0x7a, 0xde, + 0x25, 0x9f, 0x68, 0x17, 0xef, 0x78, 0xd4, 0xb4, 0x1d, 0x0a, 0x4a, 0x7a, + 0xae, 0x97, 0xd7, 0x9b, 0x8e, 0x1c, 0xcc, 0x97, 0x9f, 0x42, 0xb0, 0x77, + 0x3a, 0x64, 0xd7, 0xdf, 0xb7, 0xd2, 0x0a, 0x3d, 0x4b, 0x1a, 0xb7, 0xd8, + 0xfc, 0xfc, 0x17, 0x35, 0xf8, 0xd6, 0x30, 0x97, 0x3a, 0x41, 0x01, 0xc6, + 0x3b, 0xf9, 0xc2, 0xe7, 0xe9, 0x36, 0x8b, 0x3d, 0x7b, 0xf6, 0xd6, 0xe0, + 0x36, 0xec, 0x70, 0x04, 0x38, 0x11, 0x32, 0x36, 0x9f, 0xcd, 0x77, 0x0a, + 0xe3, 0x5f, 0x50, 0x1e, 0x93, 0x2c, 0x8b, 0x6d, 0x8f, 0x74, 0x6e, 0x00, + 0xf3, 0xf4, 0x7b, 0xa4, 0xa6, 0x56, 0x83, 0x7b, 0xc3, 0xda, 0x41, 0xdc, + 0xd6, 0x68, 0x08, 0xfd, 0xd1, 0xd9, 0x41, 0xd5, 0xdc, 0xd2, 0x00, 0x13, + 0xf2, 0xd5, 0x5b, 0x2e, 0xa1, 0xf0, 0x0b, 0x00, 0x77, 0x7e, 0x07, 0x68, + 0xd1, 0x0f, 0xec, 0xec, 0x16, 0x4f, 0xa8, 0x7d, 0x20, 0x34, 0x66, 0xde, + 0xfe, 0x33, 0x29, 0x29, 0x58, 0x34, 0x7a, 0xf9, 0x20, 0xbd, 0xbe, 0xca, + 0xe1, 0xcf, 0x24, 0x72, 0x7b, 0x05, 0xd0, 0x62, 0xd4, 0x1a, 0x2c, 0xc9, + 0xb0, 0x48, 0x83, 0x07, 0xe1, 0xe0, 0xa9, 0x52, 0xec, 0x2a, 0xf1, 0xdb, + 0x5b, 0x4b, 0x83, 0xf9, 0x79, 0xdb, 0xc9, 0x56, 0xf2, 0xba, 0xbe, 0x05, + 0x6d, 0xad, 0x95, 0xb5, 0xee, 0x6d, 0x43, 0x41, 0xb7, 0x93, 0xe2, 0x64, + 0xa4, 0xa6, 0xa6, 0x55, 0x26, 0xd7, 0xd7, 0x41, 0x07, 0x7d, 0xa6, 0x6c, + 0x8e, 0x5a, 0x0f, 0x23, 0xf8, 0x2a, 0x9f, 0x69, 0xa7, 0xf6, 0x9f, 0xd8, + 0x37, 0x7e, 0xad, 0x1e, 0x94, 0xf6, 0xf5, 0x26, 0x67, 0xef, 0xf6, 0xa8, + 0xe5, 0x75, 0x4b, 0x5a, 0xdb, 0xec, 0xc2, 0xaa, 0xcb, 0x32, 0xdc, 0xdd, + 0xb5, 0x07, 0x00, 0xd6, 0x89, 0xfc, 0xe9, 0x2e, 0xed, 0xca, 0xc4, 0xff, + 0x00, 0x28, 0xfa, 0x3e, 0x9f, 0xd8, 0xac, 0xf5, 0xe7, 0xe9, 0x7a, 0x8d, + 0xfb, 0xe6, 0x12, 0x53, 0x73, 0xfe, 0x7c, 0x74, 0xf7, 0x80, 0x1f, 0x84, + 0xf6, 0x78, 0x96, 0xbc, 0x1f, 0xca, 0x02, 0x8f, 0xfc, 0xea, 0xe8, 0x96, + 0x1f, 0xd2, 0x51, 0x6b, 0x47, 0x93, 0x5a, 0x4f, 0xfd, 0x52, 0xe3, 0x52, + 0x49, 0x4f, 0x5a, 0x7e, 0xb0, 0xf4, 0x22, 0x08, 0x15, 0xdc, 0x0c, 0xf3, + 0xb5, 0xb1, 0xf3, 0x1b, 0x93, 0xbb, 0xab, 0x74, 0x02, 0xe0, 0xf6, 0xde, + 0x5b, 0xb8, 0x4b, 0x99, 0xe9, 0x3b, 0x43, 0xe1, 0xae, 0x8b, 0x91, 0x49, + 0x25, 0x3d, 0x73, 0xfa, 0xcf, 0x48, 0xb1, 0xf2, 0x6d, 0xf6, 0x0d, 0x01, + 0x15, 0xb9, 0xae, 0xff, 0x00, 0xa2, 0xa4, 0xce, 0xa5, 0xd1, 0x5c, 0xdd, + 0xbe, 0xac, 0x92, 0x74, 0xdc, 0x1e, 0xd0, 0x0f, 0xdc, 0xb8, 0xf4, 0x92, + 0x53, 0xde, 0x9e, 0x9f, 0x8b, 0x94, 0x2a, 0x7d, 0x6e, 0x67, 0xe8, 0xdc, + 0xd7, 0x02, 0xc7, 0xb4, 0xf0, 0x41, 0x13, 0x0b, 0x43, 0xf6, 0x8b, 0x1b, + 0x90, 0x59, 0x25, 0xcf, 0x2f, 0x88, 0xf0, 0x12, 0xbc, 0xfb, 0xa4, 0x3c, + 0x57, 0xd5, 0x31, 0x1e, 0xef, 0xa2, 0x2e, 0xac, 0x9f, 0xf3, 0x82, 0xee, + 0x0d, 0x38, 0x55, 0x0b, 0x73, 0xde, 0xf2, 0x5a, 0xe9, 0x3b, 0x78, 0xfc, + 0x52, 0x53, 0x3b, 0xed, 0x6e, 0x0d, 0x36, 0x64, 0x81, 0xea, 0x65, 0xe4, + 0x38, 0x8a, 0x5b, 0xe2, 0xe3, 0xfc, 0x1a, 0xa9, 0xf4, 0xfc, 0x47, 0xd3, + 0xb9, 0xf7, 0xbb, 0x7e, 0x45, 0x87, 0x7d, 0xae, 0x3d, 0xdc, 0x7f, 0xb9, + 0x52, 0x67, 0x52, 0xca, 0xcf, 0xc9, 0x6b, 0xaa, 0xa4, 0x8a, 0xc4, 0x37, + 0xd5, 0x76, 0xa1, 0x95, 0x03, 0xee, 0x0d, 0xf3, 0x3e, 0x2b, 0x5b, 0x1c, + 0xef, 0xab, 0xd4, 0x70, 0x87, 0x12, 0x64, 0x79, 0xca, 0x4a, 0x65, 0xe8, + 0x17, 0xe8, 0xe2, 0x48, 0x23, 0x8e, 0x00, 0x52, 0x38, 0x55, 0x53, 0xad, + 0x97, 0x34, 0x54, 0x79, 0xaa, 0xcf, 0x70, 0x3f, 0x05, 0x30, 0xf0, 0x07, + 0xb4, 0x41, 0xf3, 0x51, 0x75, 0x0c, 0xb6, 0x1c, 0xf6, 0x87, 0x59, 0xc4, + 0x9e, 0xc9, 0x29, 0x76, 0x8e, 0x9c, 0x59, 0xea, 0x52, 0xd0, 0x08, 0x30, + 0xd8, 0x1c, 0x95, 0x59, 0xd8, 0xec, 0x04, 0xb8, 0x44, 0x93, 0x24, 0xc2, + 0xa3, 0xd7, 0x3a, 0xc3, 0xba, 0x55, 0x95, 0x53, 0x4b, 0x1a, 0xe7, 0x19, + 0x73, 0xc1, 0xd2, 0x3c, 0x3e, 0xf5, 0x45, 0x9f, 0x5d, 0x2f, 0xd4, 0x59, + 0x8e, 0x08, 0xed, 0x0e, 0x8f, 0xfb, 0xea, 0x4a, 0x77, 0x6b, 0x63, 0x58, + 0x41, 0xd6, 0x3c, 0x51, 0x8e, 0xa6, 0x5a, 0x77, 0x0e, 0xfe, 0x21, 0x60, + 0x8f, 0xae, 0xb5, 0xb8, 0xb0, 0x3b, 0x08, 0x34, 0x03, 0xee, 0x21, 0xf2, + 0x7e, 0x52, 0x02, 0x57, 0xfd, 0x71, 0xaf, 0xda, 0xdc, 0x6a, 0x48, 0x1c, + 0x39, 0xcf, 0x03, 0x70, 0x1e, 0x40, 0x3a, 0x12, 0x53, 0xd0, 0x4e, 0xa4, + 0x11, 0x13, 0xc1, 0x3c, 0x28, 0x10, 0x41, 0x3b, 0xbd, 0xf1, 0xe1, 0xa2, + 0xc2, 0xa7, 0xeb, 0x69, 0xdc, 0x1a, 0x58, 0x6d, 0xed, 0xb7, 0x60, 0x1b, + 0xbf, 0xcd, 0x2b, 0x77, 0x0f, 0x26, 0xdc, 0xd6, 0x87, 0x8c, 0x0c, 0x9a, + 0xe7, 0xbb, 0xd9, 0xb1, 0xbf, 0x27, 0x3b, 0x6c, 0xa4, 0xa4, 0x4f, 0x0d, + 0x23, 0xda, 0x3f, 0x8c, 0x20, 0xd8, 0x5a, 0xe6, 0x80, 0xe1, 0xc7, 0x87, + 0x0b, 0x54, 0x74, 0x9b, 0x6d, 0x70, 0xf7, 0x8a, 0xc7, 0xee, 0xfd, 0x37, + 0x4f, 0xc0, 0x69, 0xf8, 0xab, 0x95, 0x7d, 0x5a, 0xa0, 0xeb, 0x71, 0x73, + 0xa3, 0x58, 0x24, 0x0f, 0xc1, 0xbf, 0xde, 0x92, 0x9e, 0x4f, 0x39, 0xee, + 0x78, 0xf6, 0x3e, 0x64, 0x46, 0xde, 0xf2, 0x14, 0xba, 0x35, 0x3d, 0x66, + 0xdf, 0xd0, 0x0c, 0x3b, 0x5c, 0xc0, 0x7d, 0xb7, 0x16, 0x96, 0x33, 0x69, + 0xec, 0x4b, 0xa0, 0x2e, 0xee, 0x8c, 0x1e, 0x9b, 0x8a, 0x40, 0xae, 0x8a, + 0xc3, 0xa3, 0x9d, 0xb2, 0x47, 0xcc, 0xc9, 0x56, 0x03, 0x5e, 0xe6, 0xee, + 0x27, 0x70, 0xe0, 0x34, 0x7f, 0x04, 0x94, 0xf1, 0xd9, 0x1f, 0x54, 0xed, + 0xb9, 0xac, 0x7e, 0x55, 0xec, 0xa9, 0xe2, 0x40, 0xd1, 0xce, 0x3b, 0x1d, + 0xf4, 0x9b, 0x2d, 0x8e, 0x41, 0x58, 0x79, 0xdd, 0x17, 0xaa, 0xf4, 0x5a, + 0x85, 0xac, 0xbd, 0x99, 0x18, 0xd3, 0xb4, 0x3e, 0xb2, 0x41, 0x68, 0x3f, + 0x47, 0x78, 0x70, 0x10, 0xbb, 0x3e, 0xa0, 0xef, 0x57, 0x2a, 0xc1, 0x59, + 0xdc, 0xd6, 0xfb, 0x74, 0x31, 0xee, 0x01, 0x51, 0xcf, 0xc4, 0x39, 0x38, + 0x17, 0x63, 0x12, 0x5c, 0x4b, 0x48, 0x93, 0xa7, 0xbb, 0xf3, 0x7f, 0x14, + 0x94, 0xf3, 0x18, 0xed, 0x39, 0x2d, 0x1f, 0x68, 0x7b, 0x9e, 0x3b, 0xb4, + 0x1d, 0xa3, 0xfb, 0xd6, 0x96, 0x4b, 0xa1, 0xad, 0x6b, 0x80, 0xb1, 0xb0, + 0x06, 0xd7, 0x00, 0xed, 0x00, 0x8e, 0xeb, 0x03, 0x13, 0x21, 0xec, 0x79, + 0xad, 0xe0, 0x87, 0xb0, 0x96, 0xb8, 0x1e, 0x41, 0x1a, 0x15, 0xa4, 0xfb, + 0xc1, 0xae, 0x77, 0x6b, 0xdc, 0x1e, 0x52, 0x52, 0x7c, 0x6b, 0x3a, 0x25, + 0x2e, 0xd8, 0x36, 0xe3, 0xd8, 0x3e, 0x93, 0x5c, 0xdd, 0xdf, 0x71, 0x47, + 0xc8, 0xea, 0xb5, 0x55, 0x43, 0xac, 0xc6, 0x60, 0xb7, 0x67, 0xd2, 0xb3, + 0x40, 0xc6, 0x8f, 0x32, 0x4c, 0x2c, 0x37, 0x65, 0x74, 0xfa, 0x9f, 0x75, + 0xf9, 0x55, 0x0b, 0xee, 0x60, 0x68, 0xa5, 0x87, 0x82, 0x4c, 0xcf, 0xc9, + 0x66, 0xe5, 0xf5, 0x0c, 0x9c, 0xc8, 0xad, 0xf0, 0xca, 0x5a, 0x65, 0x94, + 0x56, 0x36, 0xb0, 0x1f, 0x18, 0xf1, 0xf3, 0x49, 0x4e, 0x9d, 0xdf, 0x59, + 0xb2, 0x1e, 0x21, 0xaf, 0x23, 0xc8, 0x34, 0x2a, 0x8e, 0xeb, 0x39, 0x16, + 0x3b, 0x57, 0x39, 0xde, 0x5c, 0x2a, 0x2c, 0xa6, 0x75, 0xfb, 0x91, 0xaa, + 0x63, 0x5a, 0xe3, 0x3a, 0x7b, 0x52, 0x53, 0x60, 0x65, 0x65, 0x39, 0xde, + 0xda, 0x89, 0x3e, 0x2e, 0x5b, 0x9d, 0x2f, 0xa7, 0x50, 0xe6, 0x33, 0x36, + 0xdb, 0x0d, 0x96, 0x7e, 0x75, 0x67, 0xda, 0x18, 0xef, 0xc6, 0x56, 0x7d, + 0x8e, 0x01, 0x81, 0xc3, 0x42, 0x4c, 0x7c, 0xd5, 0xbe, 0x99, 0x95, 0xe9, + 0xd8, 0x2b, 0x7f, 0xd0, 0xb3, 0xda, 0xe3, 0xe0, 0x7b, 0x14, 0x94, 0xea, + 0x39, 0x8c, 0xf5, 0xbd, 0xba, 0xd6, 0x78, 0x3d, 0xd2, 0xb5, 0xc2, 0xab, + 0x76, 0x10, 0x48, 0x89, 0x0e, 0x8e, 0xc9, 0xed, 0xc6, 0x73, 0x5d, 0x3a, + 0x88, 0x31, 0x12, 0xa2, 0xec, 0x67, 0x96, 0xc9, 0xd2, 0x3f, 0x3b, 0xfd, + 0xc5, 0x25, 0x25, 0x65, 0xcd, 0x23, 0x57, 0x41, 0xef, 0x23, 0x44, 0x0c, + 0xd6, 0xd8, 0x59, 0xfa, 0x1b, 0x5b, 0x32, 0x0c, 0x83, 0x3a, 0x28, 0x06, + 0xd8, 0xc7, 0x12, 0x21, 0xd1, 0xa7, 0x8a, 0x71, 0xbc, 0xb4, 0x96, 0xb0, + 0x10, 0x79, 0x69, 0x09, 0x29, 0x86, 0xe6, 0x82, 0x0b, 0x86, 0xed, 0x38, + 0x05, 0x13, 0xd4, 0xaf, 0x9d, 0xae, 0x98, 0x85, 0x5d, 0xcd, 0x2c, 0x74, + 0x96, 0x0d, 0xbd, 0x80, 0xd0, 0x8f, 0x98, 0x51, 0xf5, 0xb5, 0xfa, 0x2e, + 0x8f, 0x0f, 0x34, 0x94, 0xf1, 0xc9, 0x2b, 0x54, 0x61, 0x97, 0xd0, 0xfb, + 0xdf, 0xa0, 0x91, 0x5d, 0x43, 0xf7, 0x9e, 0x75, 0x3f, 0x26, 0xb7, 0x9f, + 0x92, 0x18, 0xc5, 0xb5, 0xce, 0xd9, 0x5b, 0x5c, 0xf7, 0xfe, 0xeb, 0x41, + 0x27, 0x4f, 0x20, 0x92, 0x90, 0xa4, 0xa6, 0x58, 0xf6, 0xb8, 0xd4, 0x59, + 0xef, 0x24, 0x08, 0x23, 0xdd, 0x3e, 0x08, 0xf8, 0xde, 0xad, 0x19, 0x4d, + 0xb5, 0x95, 0x38, 0x59, 0x8a, 0xe0, 0xfb, 0x43, 0x99, 0xea, 0x06, 0x6c, + 0x70, 0x04, 0xbd, 0x8e, 0x1d, 0x8f, 0x8a, 0x4a, 0x44, 0x29, 0x1f, 0x67, + 0x7d, 0xc5, 0xe0, 0x39, 0xaf, 0x6b, 0x05, 0x44, 0x1d, 0xc7, 0x70, 0x71, + 0x2e, 0xf0, 0xd2, 0x3f, 0x14, 0x43, 0x81, 0x7d, 0x75, 0xd8, 0xfc, 0x80, + 0x68, 0x73, 0x1a, 0x1c, 0xca, 0xed, 0x6b, 0x9a, 0xfb, 0x24, 0xfe, 0x60, + 0x8e, 0xc3, 0x52, 0xb7, 0x32, 0xad, 0xea, 0xb9, 0x9d, 0x36, 0xfc, 0xc6, + 0x58, 0xd7, 0xe2, 0xdb, 0x79, 0x39, 0x98, 0xec, 0x01, 0xb5, 0xef, 0xf6, + 0x6a, 0x46, 0xdf, 0x69, 0x71, 0x93, 0x32, 0x8f, 0xd5, 0x7a, 0xb5, 0x58, + 0xd6, 0x3e, 0xf6, 0xf4, 0x9f, 0xb3, 0x5a, 0xfa, 0x5d, 0x4e, 0x35, 0xbe, + 0xb1, 0x7d, 0x40, 0x58, 0x36, 0x9b, 0x2b, 0x6c, 0x6d, 0x77, 0xb4, 0x90, + 0x7e, 0x5c, 0x24, 0xa7, 0x96, 0xa5, 0xc5, 0x96, 0xb1, 0xe3, 0x96, 0xb8, + 0x1f, 0xb8, 0xae, 0xfd, 0xd8, 0x0d, 0xcd, 0xf4, 0xc5, 0xce, 0x03, 0x1a, + 0x91, 0xf4, 0x01, 0xfa, 0x4f, 0xef, 0x21, 0x70, 0x4c, 0xa2, 0xd8, 0xaa, + 0xc2, 0xd2, 0x2b, 0xb1, 0xe5, 0x8c, 0x77, 0x62, 0xe6, 0xed, 0xdc, 0x3e, + 0x5b, 0x82, 0xed, 0x2b, 0xc8, 0x32, 0x5f, 0x5b, 0xa5, 0xb2, 0x65, 0x25, + 0x36, 0xed, 0xf4, 0x40, 0x14, 0x63, 0xb4, 0x35, 0x8d, 0x82, 0x63, 0x85, + 0x1c, 0x62, 0x7d, 0x09, 0x1d, 0xdc, 0x67, 0xef, 0x53, 0x63, 0x1a, 0xdc, + 0x62, 0xe3, 0xf4, 0xdf, 0x24, 0x9f, 0x8a, 0x1f, 0x4f, 0x87, 0x50, 0x41, + 0x30, 0x5a, 0xe9, 0x84, 0x94, 0xd9, 0xad, 0xa5, 0xad, 0xde, 0xfe, 0x7b, + 0x21, 0xe5, 0x64, 0x7d, 0x9a, 0xa3, 0x71, 0x1a, 0x8e, 0x07, 0x9a, 0x30, + 0x63, 0xde, 0x24, 0x09, 0x83, 0xdf, 0xb2, 0xcc, 0xba, 0xd3, 0x99, 0x9d, + 0xe9, 0x0d, 0x68, 0xa3, 0x93, 0xd9, 0xd6, 0x14, 0x94, 0xf3, 0xfd, 0x79, + 0x97, 0x5f, 0x93, 0x53, 0x83, 0x5d, 0x65, 0xb6, 0x02, 0xe3, 0xb4, 0x12, + 0x75, 0x3c, 0x68, 0x83, 0x8f, 0xf5, 0x77, 0xaa, 0xdd, 0x0e, 0x75, 0x43, + 0x1d, 0x87, 0x4d, 0xf7, 0xb8, 0x56, 0x35, 0xf2, 0x3a, 0xfe, 0x0b, 0x76, + 0xbc, 0x9c, 0x8c, 0x5c, 0x8d, 0x18, 0xeb, 0x71, 0xce, 0xe2, 0xe6, 0x88, + 0x68, 0x6b, 0xbc, 0x64, 0xab, 0x56, 0xf5, 0x46, 0xd7, 0x58, 0x65, 0xbe, + 0x9d, 0x7a, 0x83, 0x0e, 0x70, 0xb4, 0x9f, 0xf3, 0x66, 0x3c, 0x52, 0x53, + 0x43, 0x07, 0xea, 0x66, 0x3d, 0xaf, 0x03, 0x23, 0xa8, 0x34, 0x91, 0x3b, + 0x99, 0x4b, 0x49, 0xe3, 0x9f, 0x73, 0xe3, 0xf2, 0x2e, 0x87, 0x0f, 0xea, + 0xb7, 0xd5, 0xfc, 0x68, 0x2d, 0xc4, 0xfb, 0x4b, 0x87, 0x2f, 0xbd, 0xce, + 0x20, 0xfc, 0x07, 0xb5, 0xa7, 0xee, 0x55, 0xa9, 0xcc, 0xbf, 0x26, 0x2d, + 0xc0, 0x73, 0x6c, 0x8d, 0x1e, 0xc1, 0x21, 0xdf, 0xd9, 0x0e, 0x08, 0xb4, + 0xf5, 0xc7, 0x51, 0x66, 0xcc, 0xea, 0x5c, 0xda, 0x8e, 0x8e, 0x0d, 0x91, + 0x63, 0x3c, 0xf6, 0x9e, 0x47, 0xc0, 0xa4, 0xa7, 0x6e, 0x9c, 0x4c, 0x56, + 0xd4, 0xe1, 0x8f, 0x5d, 0x78, 0xec, 0x07, 0x5f, 0x41, 0xad, 0xac, 0x8f, + 0x08, 0x2c, 0x0a, 0x2f, 0xba, 0xaa, 0xbf, 0x9e, 0xb4, 0xfa, 0x4d, 0x81, + 0x24, 0xeb, 0xf1, 0xd7, 0x55, 0x40, 0x59, 0x5b, 0x43, 0xaf, 0xc1, 0xb5, + 0xd7, 0x56, 0xe1, 0xb8, 0x10, 0xf7, 0x0f, 0xc0, 0xa3, 0x62, 0xf5, 0x1c, + 0x4e, 0xa6, 0xcf, 0xb3, 0x64, 0xb3, 0xd3, 0xc8, 0x66, 0x83, 0x81, 0xee, + 0xe0, 0xc1, 0xfe, 0x09, 0x29, 0xd2, 0x26, 0xb0, 0x37, 0x30, 0x38, 0xc4, + 0x90, 0x1b, 0xe3, 0xcf, 0x23, 0xc5, 0x5b, 0xa6, 0xc7, 0xdc, 0xd9, 0x68, + 0x35, 0x6b, 0x05, 0xae, 0x12, 0x56, 0x05, 0x95, 0x75, 0x3e, 0x94, 0x0b, + 0xb1, 0xf2, 0x5b, 0x65, 0x00, 0x49, 0x65, 0xd1, 0x0d, 0x9e, 0x35, 0x1c, + 0x2a, 0x35, 0xf5, 0xce, 0xa3, 0x55, 0x9f, 0x69, 0x7d, 0xbe, 0xa6, 0xd2, + 0x49, 0xaf, 0xb4, 0x78, 0x40, 0x49, 0x4f, 0x60, 0x5b, 0x53, 0x01, 0x71, + 0xd2, 0x35, 0x7b, 0xcf, 0x97, 0x3a, 0xae, 0x6f, 0x27, 0x0f, 0x3a, 0xec, + 0x87, 0x5f, 0x55, 0xee, 0x35, 0x92, 0x5c, 0xd7, 0x87, 0x1d, 0xcd, 0x8e, + 0xe1, 0xbc, 0x2b, 0x98, 0xfd, 0x4a, 0xae, 0xa5, 0x8c, 0x2c, 0xac, 0x12, + 0x06, 0x96, 0x55, 0xf9, 0xc0, 0xcf, 0x70, 0x16, 0x96, 0x35, 0x0d, 0xa6, + 0x82, 0xdd, 0xbc, 0x81, 0x3e, 0x69, 0x29, 0xe7, 0xab, 0xa7, 0x22, 0x8b, + 0x0b, 0x72, 0x88, 0x24, 0x90, 0xf6, 0x39, 0xb3, 0x06, 0x79, 0x9f, 0x34, + 0x7a, 0xec, 0x6d, 0xae, 0x71, 0x61, 0x83, 0x53, 0xcd, 0x76, 0x34, 0xf8, + 0x11, 0xcf, 0xc3, 0x55, 0x67, 0xa9, 0xdb, 0x89, 0x45, 0x47, 0x2c, 0x31, + 0xd2, 0x08, 0xf7, 0xb1, 0xa5, 0xdc, 0xfb, 0x75, 0xda, 0xb2, 0xb1, 0x9e, + 0xf6, 0x75, 0x4b, 0x83, 0x36, 0xbe, 0xbb, 0x98, 0x2d, 0x2e, 0x04, 0x01, + 0x0d, 0x31, 0x21, 0x25, 0x3c, 0xcf, 0x5d, 0xaf, 0xd1, 0xeb, 0x77, 0x96, + 0xb7, 0x69, 0x21, 0xae, 0x70, 0x88, 0xd4, 0x88, 0x2e, 0x54, 0x45, 0xdb, + 0x9c, 0x47, 0x98, 0x01, 0x69, 0xfd, 0x6d, 0x6b, 0x9b, 0xd4, 0x31, 0xed, + 0x3a, 0x7a, 0xb5, 0x10, 0x67, 0xf9, 0x2e, 0x3f, 0xc0, 0xac, 0x7a, 0xc3, + 0x89, 0xde, 0x01, 0xda, 0x09, 0x3f, 0xc1, 0x25, 0x35, 0xb2, 0xe4, 0xdb, + 0xf3, 0x85, 0x1a, 0xd8, 0x39, 0x3f, 0x25, 0x2c, 0xbd, 0x2d, 0x3e, 0x7f, + 0xc4, 0x28, 0xb5, 0xc1, 0x25, 0x26, 0x6b, 0xc3, 0x41, 0xf0, 0xec, 0xa3, + 0x59, 0x90, 0xef, 0x12, 0x43, 0x7f, 0x15, 0x17, 0x58, 0x22, 0x07, 0x2a, + 0x6c, 0xa6, 0xe6, 0x51, 0x5e, 0x4b, 0xab, 0x70, 0xa1, 0xee, 0x21, 0xb6, + 0xc1, 0xda, 0x5c, 0x3b, 0x4f, 0x8a, 0x4a, 0x6f, 0x58, 0xe9, 0xa9, 0xbf, + 0xd6, 0xd1, 0x4a, 0x82, 0x1c, 0xd3, 0x3e, 0x25, 0x57, 0x2e, 0x0e, 0xad, + 0x84, 0x71, 0x28, 0xd4, 0x3e, 0x00, 0x1d, 0x9d, 0x29, 0x29, 0xb5, 0x91, + 0xf5, 0x9b, 0x3a, 0xa7, 0xfa, 0x2e, 0xa6, 0xab, 0x43, 0x1a, 0x06, 0xf2, + 0x1c, 0x1c, 0x74, 0x81, 0x30, 0xe8, 0x54, 0xdb, 0xf5, 0xa3, 0xaa, 0x30, + 0xe8, 0x59, 0xe4, 0x0b, 0x41, 0x52, 0xb1, 0xae, 0xf4, 0x6f, 0x78, 0x30, + 0x1e, 0xd6, 0xb1, 0xc4, 0xf9, 0x3b, 0xfd, 0xab, 0x3e, 0xfa, 0x85, 0x55, + 0xd4, 0xeb, 0x23, 0xf4, 0x8d, 0xdc, 0x00, 0xe7, 0x9d, 0x25, 0x25, 0x3a, + 0x6d, 0xfa, 0xdf, 0xd4, 0x07, 0x34, 0xd0, 0xef, 0x19, 0x69, 0xd7, 0xee, + 0x72, 0x28, 0xfa, 0xe5, 0x92, 0x04, 0x1c, 0x2c, 0x71, 0xe6, 0x03, 0xc1, + 0xff, 0x00, 0xaa, 0x5c, 0xf9, 0xb1, 0xd1, 0xb4, 0x68, 0x3c, 0x16, 0xaf, + 0x4b, 0xe9, 0x47, 0x32, 0xb2, 0xeb, 0x75, 0x68, 0x32, 0xd0, 0x0f, 0xe0, + 0x7e, 0x29, 0x29, 0xb5, 0xff, 0x00, 0x3b, 0x1a, 0xf3, 0xfa, 0x5c, 0x36, + 0x8f, 0xea, 0x3c, 0xff, 0x00, 0xdf, 0x81, 0x52, 0xff, 0x00, 0x9c, 0xb8, + 0x71, 0xfc, 0xc3, 0xe7, 0xf7, 0x64, 0x42, 0xbf, 0x4f, 0xd5, 0x9e, 0x9d, + 0x65, 0x4d, 0x77, 0xa7, 0x2e, 0x7c, 0x43, 0x43, 0xc9, 0x3a, 0xf7, 0x00, + 0x2b, 0x1f, 0xf3, 0x1e, 0xad, 0xbe, 0xa7, 0xd9, 0xdd, 0x1f, 0xbb, 0xbf, + 0xdd, 0x1e, 0x3b, 0x79, 0x49, 0x4e, 0x0d, 0xed, 0x2c, 0x35, 0x32, 0xb1, + 0xba, 0xac, 0x61, 0x04, 0x81, 0xa1, 0x73, 0x8f, 0xbd, 0xc7, 0xe2, 0x74, + 0xfb, 0x91, 0xf1, 0x70, 0xf3, 0xd9, 0x75, 0xb9, 0x5d, 0x39, 0xce, 0xac, + 0xd6, 0xc3, 0x61, 0x2c, 0x7e, 0xd7, 0xed, 0xd3, 0x73, 0x47, 0x73, 0xca, + 0x26, 0x25, 0x4f, 0x6e, 0x2e, 0x53, 0x2e, 0x96, 0xee, 0xa8, 0x79, 0xfb, + 0x83, 0xd9, 0x1f, 0x09, 0x57, 0x30, 0xfa, 0x76, 0x55, 0x18, 0xed, 0xcc, + 0x17, 0xec, 0xf5, 0x77, 0x30, 0x55, 0x0f, 0x0e, 0x82, 0x36, 0x93, 0x31, + 0xb7, 0xf1, 0x49, 0x4d, 0x7c, 0x3f, 0xd9, 0x36, 0xe3, 0x33, 0x3f, 0xa8, + 0x5f, 0x65, 0x7d, 0x4a, 0xb2, 0xf7, 0xd0, 0xea, 0x5b, 0xfa, 0x4b, 0x1e, + 0x0e, 0xe6, 0xd9, 0x6d, 0x8f, 0xdc, 0x1c, 0x77, 0x70, 0x9b, 0x13, 0x12, + 0xe7, 0x10, 0xcc, 0x4c, 0xe7, 0xe2, 0xf5, 0xcc, 0x9b, 0xb7, 0x66, 0xb1, + 0xef, 0x65, 0x74, 0x96, 0x12, 0xe7, 0x6e, 0x0e, 0x07, 0xdd, 0x13, 0xab, + 0x75, 0xf8, 0x2b, 0xf5, 0x61, 0xd7, 0x8d, 0x7b, 0x2d, 0x2c, 0x66, 0x48, + 0x15, 0xc1, 0x6d, 0xa0, 0x39, 0xb2, 0x75, 0xd0, 0x2b, 0x63, 0x0f, 0xa5, + 0xb5, 0xb5, 0xe4, 0x64, 0x62, 0x37, 0x2b, 0x2f, 0x63, 0x9e, 0xe2, 0x3d, + 0xd5, 0x34, 0x34, 0xfa, 0x82, 0x18, 0xd8, 0x88, 0xef, 0x29, 0x29, 0xcf, + 0xa2, 0xac, 0xce, 0x8f, 0x99, 0x7f, 0x47, 0xfb, 0x53, 0x6e, 0xa8, 0x81, + 0x63, 0x85, 0x44, 0x8d, 0xc5, 0xc0, 0x13, 0x3c, 0xf3, 0xa4, 0x84, 0x3c, + 0xce, 0x91, 0x46, 0x51, 0x63, 0xec, 0x0d, 0x0d, 0xae, 0xb8, 0x6c, 0x38, + 0xb5, 0xa3, 0x59, 0xdb, 0xf1, 0x32, 0xac, 0x50, 0x08, 0x7d, 0x6f, 0x6e, + 0xb8, 0xec, 0x61, 0xf4, 0xdb, 0xb3, 0x63, 0x98, 0xe7, 0x99, 0x73, 0x4b, + 0xbf, 0x38, 0x0f, 0x12, 0x8d, 0x43, 0xf1, 0x9c, 0x4e, 0xe6, 0xc6, 0xc6, + 0xba, 0xce, 0xfb, 0x48, 0x6f, 0xb8, 0xfc, 0xd2, 0x53, 0x91, 0x67, 0x4c, + 0xe9, 0xb5, 0xfd, 0x9b, 0x63, 0x5c, 0xc7, 0xb5, 0xf2, 0xf1, 0xbb, 0xf3, + 0xa4, 0x6b, 0x07, 0xf3, 0x60, 0x05, 0x73, 0x1d, 0xcc, 0x6e, 0x58, 0x6b, + 0x9d, 0xba, 0xcb, 0x4b, 0x80, 0x68, 0xe1, 0xba, 0xf2, 0x7c, 0xd5, 0x5c, + 0x8b, 0x9f, 0x7b, 0xdb, 0xa1, 0xd8, 0x5c, 0xd2, 0x09, 0xf1, 0x06, 0x76, + 0x85, 0xa9, 0x8d, 0x45, 0x47, 0xaa, 0x48, 0xd0, 0x81, 0x24, 0xc4, 0x8d, + 0x00, 0xfb, 0x92, 0x53, 0x7a, 0xda, 0xc7, 0xa7, 0xb6, 0x3f, 0xdc, 0xb3, + 0x18, 0xdb, 0x18, 0xe2, 0x68, 0x13, 0x61, 0x90, 0x0f, 0xe6, 0x81, 0xdf, + 0xe6, 0xb4, 0x33, 0xb3, 0xb1, 0xe9, 0xd5, 0xcf, 0x0d, 0x59, 0xb8, 0x99, + 0x38, 0x8e, 0xbc, 0x8c, 0x7b, 0xf7, 0xbd, 0xd2, 0x45, 0x7c, 0x02, 0x7e, + 0x69, 0x29, 0x24, 0x67, 0xd9, 0x2c, 0x0f, 0x3a, 0xfd, 0x26, 0x81, 0x00, + 0x4f, 0x79, 0x50, 0xd1, 0x8d, 0x38, 0xd8, 0xce, 0x04, 0xd6, 0x43, 0x9f, + 0x67, 0x8b, 0xdd, 0xfd, 0xc1, 0x4a, 0xdc, 0xcf, 0x55, 0xa6, 0x97, 0xd8, + 0x68, 0x27, 0x42, 0x47, 0xe7, 0x79, 0x29, 0xd7, 0x55, 0x6c, 0xad, 0xbe, + 0x9c, 0x1d, 0x61, 0xc7, 0xb4, 0xc6, 0x89, 0x29, 0xe7, 0xba, 0x93, 0xf3, + 0x6a, 0xcd, 0xb7, 0xd2, 0x2e, 0x73, 0x04, 0x07, 0x37, 0x58, 0x9d, 0xba, + 0xf0, 0x83, 0x4e, 0x66, 0x28, 0x6c, 0x5d, 0x4e, 0xd2, 0x62, 0x5c, 0xcd, + 0x49, 0xf9, 0x76, 0x46, 0xea, 0x96, 0x3d, 0xd9, 0xd7, 0x34, 0x12, 0x1a, + 0x1d, 0x10, 0x0f, 0x82, 0xa6, 0xca, 0x1c, 0x1d, 0xc4, 0x83, 0xdf, 0xba, + 0x4a, 0x75, 0x71, 0xf2, 0x19, 0x43, 0xfd, 0x4c, 0x3b, 0xda, 0x2b, 0x7c, + 0xfb, 0x5c, 0x3d, 0xb3, 0xe6, 0x34, 0x32, 0xba, 0x4c, 0x4f, 0xac, 0x7d, + 0x3b, 0x2e, 0xb6, 0xd5, 0xd5, 0x1a, 0xcf, 0x56, 0x21, 0x8f, 0x68, 0x3b, + 0x5e, 0x23, 0x92, 0x0f, 0x75, 0xc9, 0xd4, 0xd7, 0x52, 0x41, 0xad, 0xad, + 0x7c, 0xe8, 0x74, 0xd7, 0x51, 0xdb, 0xcc, 0x29, 0xfa, 0x42, 0xe6, 0x11, + 0x61, 0x73, 0xc6, 0xa3, 0xdc, 0x22, 0x3f, 0x8a, 0x4a, 0x7a, 0x0c, 0xda, + 0xfa, 0x73, 0x1a, 0xe7, 0xe0, 0x5b, 0xef, 0x79, 0x10, 0xd6, 0x48, 0x1a, + 0x78, 0x8e, 0xcb, 0x2d, 0xcf, 0x8b, 0x7d, 0x6b, 0x1c, 0xe6, 0x3c, 0x9d, + 0x4c, 0x13, 0x31, 0xfb, 0xca, 0x9d, 0x58, 0x6c, 0xc6, 0xb5, 0xa5, 0xd6, + 0x96, 0x18, 0x96, 0xea, 0x74, 0x56, 0x8b, 0x9a, 0xff, 0x00, 0xa4, 0x01, + 0xed, 0xba, 0x42, 0x4a, 0x74, 0x5d, 0x7b, 0xec, 0xa8, 0x3b, 0xd4, 0x2f, + 0x27, 0x43, 0xa9, 0x3f, 0xf5, 0x4a, 0x1e, 0xd1, 0x53, 0x83, 0x8e, 0xd9, + 0x9e, 0x7b, 0xe9, 0xc4, 0xac, 0xf6, 0x9b, 0x6a, 0x7e, 0xd2, 0x3d, 0x84, + 0xc8, 0x31, 0xcc, 0x76, 0x56, 0x5f, 0x93, 0x51, 0x15, 0xb7, 0x6b, 0x89, + 0x82, 0xf2, 0xd7, 0x10, 0x23, 0xb1, 0x49, 0x49, 0xe9, 0xbf, 0x22, 0x87, + 0xb2, 0xdc, 0x72, 0xe6, 0x96, 0x6b, 0xa6, 0xbd, 0xb8, 0x3e, 0x4b, 0xa6, + 0x66, 0x56, 0x6e, 0x5d, 0x2c, 0xb5, 0xb7, 0x0a, 0xaa, 0x80, 0x43, 0x9a, + 0xd2, 0xe2, 0xef, 0x0f, 0x69, 0x5c, 0xd0, 0x63, 0x3d, 0x36, 0x5b, 0x6c, + 0x92, 0xe8, 0xfd, 0x15, 0x64, 0xed, 0x3e, 0x03, 0xdb, 0xac, 0xab, 0xfd, + 0x2f, 0xa8, 0x37, 0x04, 0x3a, 0xbb, 0xda, 0xfd, 0xa2, 0x7d, 0x36, 0x83, + 0x27, 0x6b, 0x8e, 0xe0, 0x20, 0xeb, 0xa2, 0x4a, 0x76, 0x72, 0xaf, 0xc7, + 0xc4, 0x69, 0xb1, 0xe7, 0xd5, 0x2f, 0xf6, 0xdb, 0x02, 0x37, 0x1f, 0x26, + 0x0d, 0x3e, 0x2b, 0x0a, 0x9b, 0xa9, 0xfb, 0x7b, 0xef, 0x65, 0x5e, 0x9d, + 0x55, 0x8f, 0x4c, 0x34, 0x12, 0x4d, 0x91, 0xa8, 0x2e, 0x0a, 0x7d, 0x4f, + 0x3d, 0xd7, 0x10, 0xe6, 0x8d, 0x8d, 0x75, 0x72, 0xc1, 0xc8, 0x91, 0xfe, + 0xf5, 0x53, 0xa7, 0xb1, 0xce, 0x21, 0xc4, 0x12, 0xe1, 0x04, 0x47, 0xef, + 0x39, 0x25, 0x34, 0x7e, 0xb6, 0xbf, 0x75, 0x98, 0x96, 0x3f, 0xda, 0xf2, + 0x2c, 0x22, 0x7c, 0x34, 0xfe, 0xe5, 0xcf, 0x32, 0xc2, 0xd3, 0xbd, 0xae, + 0x20, 0xce, 0x84, 0x18, 0x56, 0xfa, 0xfe, 0x6b, 0xf3, 0x3a, 0x8b, 0xde, + 0xdf, 0xe6, 0x6a, 0xfd, 0x15, 0x73, 0xc1, 0x6b, 0x0c, 0x38, 0xfc, 0xdc, + 0xab, 0xb4, 0x54, 0x43, 0x4d, 0x63, 0xf4, 0x6e, 0x3b, 0x49, 0xd4, 0xb9, + 0x84, 0xff, 0x00, 0xae, 0x89, 0x29, 0x06, 0x63, 0xa5, 0xe0, 0xf7, 0xee, + 0x50, 0x5a, 0x5c, 0x4c, 0x01, 0x24, 0xf0, 0x02, 0xb7, 0x97, 0x47, 0xa6, + 0x7d, 0x27, 0x6a, 0xf0, 0x49, 0x7b, 0x87, 0xe4, 0x6a, 0xb7, 0x83, 0x4d, + 0x21, 0xad, 0x38, 0xcd, 0x3e, 0xad, 0x8d, 0x9d, 0xef, 0xe4, 0x6b, 0x06, + 0x21, 0x25, 0x20, 0xa3, 0xa4, 0x65, 0xbd, 0x86, 0xcb, 0x5a, 0x6b, 0xaf, + 0xb9, 0x22, 0x5d, 0xa7, 0x83, 0x56, 0xae, 0x5d, 0x79, 0x0f, 0xe8, 0x03, + 0x18, 0x4f, 0xd9, 0xf1, 0x47, 0xab, 0x5e, 0x9b, 0x64, 0x87, 0x6b, 0xb8, + 0x1d, 0x67, 0xdc, 0x75, 0x4e, 0xcc, 0xcb, 0x9a, 0xe2, 0xc7, 0xd7, 0xb9, + 0xce, 0x10, 0xdd, 0xae, 0x30, 0x1c, 0x39, 0xfb, 0xd1, 0x32, 0x32, 0x9e, + 0xde, 0x99, 0x96, 0xc3, 0x4b, 0x86, 0xe6, 0x6d, 0x2e, 0x9e, 0xc6, 0x23, + 0x74, 0xff, 0x00, 0x04, 0x94, 0xe0, 0xd4, 0x7f, 0x46, 0xc1, 0xe2, 0x4a, + 0x2b, 0x6c, 0x2d, 0x0c, 0x33, 0xc7, 0xf7, 0xa1, 0x51, 0x55, 0x96, 0x16, + 0x35, 0x90, 0x23, 0x5d, 0xce, 0x21, 0xad, 0x12, 0x7b, 0x92, 0x8e, 0xf1, + 0x55, 0x6e, 0x0d, 0x6b, 0x85, 0xb3, 0x23, 0x4f, 0xa2, 0x00, 0xf0, 0xf1, + 0x49, 0x4d, 0xfe, 0x97, 0x7b, 0xbe, 0xd0, 0x2a, 0x0d, 0x6b, 0x85, 0xa7, + 0x63, 0x77, 0xc0, 0x6e, 0xe2, 0x7d, 0xa7, 0x55, 0xd2, 0xd9, 0xfe, 0x2e, + 0x9b, 0x99, 0x77, 0xda, 0x32, 0x72, 0x05, 0x1b, 0x80, 0x06, 0x9a, 0xdb, + 0xbc, 0x02, 0x3c, 0x1c, 0x5c, 0x3e, 0xe8, 0x5c, 0x96, 0x3d, 0x36, 0xe5, + 0xbd, 0xb4, 0x52, 0xc2, 0xfb, 0x5d, 0xf4, 0x23, 0x48, 0x3e, 0x67, 0xb2, + 0xef, 0x71, 0xfa, 0x97, 0x52, 0xa7, 0x05, 0x94, 0x65, 0x3c, 0x3b, 0x26, + 0x96, 0x01, 0x6b, 0xc7, 0x07, 0xb7, 0x87, 0x3e, 0x29, 0x29, 0xc7, 0xb3, + 0xfc, 0x57, 0xed, 0x70, 0x76, 0x3f, 0x50, 0x98, 0xed, 0x65, 0x7f, 0xc5, + 0xae, 0xfe, 0x0b, 0x67, 0xa7, 0xfd, 0x53, 0x7e, 0x2e, 0x30, 0xa5, 0xf6, + 0xb0, 0xbc, 0x10, 0x43, 0x9a, 0xd2, 0x22, 0x09, 0x31, 0xf0, 0x5a, 0xd8, + 0x96, 0x39, 0xf4, 0xb5, 0xe0, 0x82, 0x79, 0x99, 0xfb, 0x91, 0xc5, 0xfb, + 0x9b, 0x35, 0x89, 0x8f, 0x3d, 0x38, 0x49, 0x4e, 0x55, 0x7d, 0x06, 0xcc, + 0x7b, 0xea, 0xb1, 0x8d, 0x65, 0x8c, 0xa9, 0xc5, 0xfa, 0x9f, 0x71, 0x27, + 0x51, 0xe1, 0xa4, 0xa3, 0xfd, 0xa7, 0xa9, 0xfd, 0xaf, 0x67, 0xd9, 0x46, + 0xc8, 0x8d, 0xdb, 0x75, 0xe3, 0x9d, 0xfb, 0xb6, 0xf3, 0xd9, 0x5e, 0x65, + 0xbb, 0x9a, 0x0b, 0x84, 0x1f, 0x12, 0xa5, 0xea, 0x7e, 0x6e, 0xe1, 0x33, + 0x1c, 0x84, 0x94, 0xf1, 0x9d, 0x3b, 0x17, 0x15, 0xf7, 0x96, 0xe4, 0x35, + 0xd6, 0x53, 0x60, 0x0c, 0x73, 0x1b, 0xcf, 0xd2, 0x0e, 0x9d, 0x35, 0xd2, + 0x11, 0xb3, 0x2b, 0xb5, 0x96, 0x7d, 0x99, 0xd6, 0xbd, 0xf4, 0x55, 0xa5, + 0x6d, 0xd4, 0x06, 0x48, 0xfa, 0x30, 0x47, 0x2a, 0x2d, 0x75, 0xd8, 0x75, + 0xd8, 0xfa, 0xe1, 0xce, 0x91, 0xc1, 0x26, 0x39, 0xef, 0xca, 0x09, 0xcd, + 0xea, 0x36, 0x38, 0x32, 0xca, 0xab, 0xad, 0xe7, 0x53, 0x3b, 0xa4, 0x41, + 0xee, 0x49, 0x49, 0x4c, 0x77, 0x6c, 0x64, 0x07, 0x19, 0x12, 0x24, 0xf2, + 0x67, 0xc1, 0x4f, 0xd7, 0xb2, 0xba, 0xc3, 0xaa, 0x3b, 0x77, 0x98, 0x04, + 0x1f, 0x2d, 0x47, 0xc1, 0x43, 0xa8, 0x58, 0xc7, 0x37, 0xd6, 0xd0, 0x3b, + 0x41, 0x63, 0x46, 0x9a, 0x78, 0xa1, 0x62, 0x12, 0xcf, 0x71, 0x01, 0xce, + 0xf7, 0x45, 0x66, 0x48, 0xf6, 0xf0, 0x0a, 0x4a, 0x4f, 0x4d, 0x2d, 0xcb, + 0xb0, 0x63, 0x39, 0xed, 0x6e, 0xe1, 0xb9, 0xef, 0x26, 0x03, 0x5a, 0x35, + 0xe7, 0xcc, 0xa5, 0xeb, 0xe3, 0x97, 0x5d, 0x45, 0x92, 0xfb, 0x1b, 0x5e, + 0xd0, 0x4f, 0x3b, 0x67, 0xe7, 0xa2, 0x0e, 0x5d, 0xed, 0xa9, 0xe1, 0xf5, + 0x80, 0x5e, 0xf3, 0xf9, 0xda, 0x82, 0x4f, 0xd2, 0x6a, 0xa1, 0x56, 0x45, + 0xbe, 0x8b, 0x99, 0x25, 0x97, 0x6a, 0xeb, 0x4b, 0xb5, 0x26, 0x5c, 0x3d, + 0xa7, 0x9e, 0xc9, 0x29, 0x8d, 0x98, 0xd5, 0x8b, 0x18, 0x2b, 0x73, 0x5e, + 0xf0, 0x5b, 0xb7, 0xdc, 0x4b, 0xbd, 0xc6, 0x38, 0x2a, 0xe3, 0x6f, 0x26, + 0xeb, 0x1d, 0x25, 0x81, 0x84, 0x8d, 0xcc, 0x1a, 0xc8, 0xf0, 0xfb, 0x95, + 0x3c, 0x5a, 0x2b, 0xb6, 0xd7, 0x32, 0xc0, 0xed, 0xad, 0x79, 0x7b, 0x8b, + 0x98, 0x1d, 0x1c, 0xb4, 0x01, 0xb7, 0x95, 0xd1, 0x60, 0xf4, 0xcb, 0x18, + 0xc9, 0x36, 0x87, 0xd0, 0xd8, 0x35, 0xbf, 0x6b, 0x63, 0xce, 0x12, 0x53, + 0x93, 0x97, 0x75, 0x36, 0x5a, 0x7e, 0xd3, 0x88, 0xfa, 0xc1, 0xd4, 0x5c, + 0xe0, 0x0b, 0x1d, 0xdf, 0xf3, 0x50, 0x9f, 0xd3, 0x71, 0xac, 0x87, 0xb1, + 0xa5, 0x8e, 0x1a, 0x87, 0x56, 0x3f, 0x21, 0xd1, 0x74, 0x59, 0x3d, 0x32, + 0xca, 0x1a, 0x6d, 0xdf, 0xba, 0x87, 0x7d, 0x27, 0x36, 0x40, 0xf8, 0xc4, + 0xe9, 0xf1, 0x0b, 0x32, 0xe6, 0x1c, 0x4d, 0xce, 0x6b, 0xde, 0x69, 0x0c, + 0xf5, 0x1e, 0x40, 0x0e, 0x86, 0x8e, 0x79, 0x00, 0xa4, 0xa4, 0x23, 0x12, + 0xbb, 0x6a, 0x2c, 0xbd, 0xc6, 0xc7, 0xfe, 0x6d, 0x8f, 0x68, 0x07, 0xe6, + 0x42, 0x93, 0x18, 0x6a, 0xa1, 0x94, 0x81, 0xac, 0xb9, 0xc6, 0x7b, 0x91, + 0x10, 0x95, 0x39, 0xcf, 0xb3, 0x4c, 0x3b, 0xe9, 0xca, 0x3d, 0xe8, 0x78, + 0xf4, 0xae, 0xf1, 0x88, 0xd3, 0xf2, 0x22, 0x0c, 0xcc, 0x7b, 0x01, 0x17, + 0x32, 0xcc, 0x7b, 0x1a, 0x25, 0xa1, 0xed, 0x88, 0x77, 0x84, 0xf7, 0x94, + 0x94, 0xf3, 0x39, 0x4d, 0x16, 0x75, 0x4b, 0x9a, 0x1a, 0x03, 0x9d, 0x61, + 0x03, 0x58, 0x92, 0x63, 0xfb, 0xd0, 0xde, 0xc7, 0x6e, 0x78, 0x63, 0xa4, + 0x34, 0x90, 0x1d, 0xc4, 0xc1, 0x89, 0x57, 0x72, 0x71, 0x9a, 0xde, 0xa8, + 0x72, 0xed, 0x7b, 0x5f, 0x4b, 0xed, 0xde, 0xca, 0xda, 0x49, 0x74, 0xc4, + 0x89, 0xd2, 0x04, 0xc2, 0xcc, 0x7b, 0xaa, 0x34, 0x1b, 0x1c, 0x5e, 0xdc, + 0x92, 0xf9, 0x65, 0x42, 0x48, 0x82, 0x61, 0x25, 0x25, 0xa9, 0xd7, 0x82, + 0x03, 0x79, 0x1c, 0x03, 0xa1, 0x3f, 0x02, 0x8e, 0x2c, 0x3c, 0x96, 0x90, + 0x47, 0x32, 0x55, 0x13, 0xd4, 0x1f, 0xab, 0x4b, 0x0e, 0xe1, 0xc1, 0x1e, + 0x3f, 0x05, 0xbf, 0xf5, 0x6a, 0xa7, 0x64, 0x5b, 0x71, 0xcc, 0xc7, 0x23, + 0xf4, 0x60, 0xd6, 0x6c, 0x6c, 0x8e, 0x75, 0x20, 0x39, 0x25, 0x20, 0xf4, + 0x5b, 0x75, 0x56, 0x3e, 0xb0, 0x5e, 0x5a, 0x03, 0x9e, 0xdf, 0x29, 0x8d, + 0x13, 0x51, 0x5c, 0x98, 0xb6, 0x59, 0x5e, 0xd3, 0x04, 0x6a, 0x77, 0x76, + 0x0b, 0x7a, 0xcc, 0x2a, 0xb7, 0x6d, 0x65, 0x7e, 0x98, 0xfc, 0xed, 0x9e, + 0xd9, 0xed, 0xdb, 0xc9, 0x50, 0xbb, 0x13, 0x1d, 0xb7, 0xb0, 0x31, 0xa7, + 0x7b, 0xcc, 0x06, 0x13, 0xcc, 0x24, 0xa4, 0x47, 0x75, 0xb5, 0x87, 0x10, + 0x2c, 0xa8, 0x08, 0x73, 0x40, 0xd4, 0x0f, 0x81, 0xfc, 0xa8, 0x6e, 0xe9, + 0xf4, 0x17, 0x35, 0xdb, 0xac, 0x67, 0xb7, 0x4f, 0x77, 0x6e, 0x04, 0x02, + 0x9b, 0x1f, 0x36, 0x9a, 0x7a, 0x89, 0xa6, 0xfa, 0x2c, 0xaa, 0xd6, 0x87, + 0x35, 0xd5, 0x12, 0x4f, 0xbc, 0x69, 0xe5, 0x21, 0xd2, 0xaf, 0xdb, 0x9b, + 0x81, 0xea, 0x57, 0x65, 0x44, 0x8a, 0x9d, 0xa4, 0x39, 0xa7, 0xdb, 0xb7, + 0xda, 0x44, 0xf9, 0x24, 0xa6, 0x8b, 0x2b, 0xcf, 0xb0, 0x91, 0x4d, 0xd6, + 0x16, 0x8e, 0x37, 0x46, 0x9f, 0x82, 0xb9, 0x4e, 0x16, 0x61, 0x0c, 0xba, + 0xfb, 0x41, 0xb1, 0xba, 0x01, 0x1d, 0x87, 0x12, 0xad, 0xd3, 0xd4, 0xba, + 0x75, 0x56, 0x9f, 0x49, 0xc6, 0xcb, 0xa2, 0x5b, 0x53, 0x19, 0xba, 0x74, + 0x9f, 0xa2, 0x3c, 0x91, 0x4e, 0x4d, 0x16, 0x62, 0x3b, 0x22, 0xbb, 0x5b, + 0xea, 0x07, 0x6d, 0x18, 0xe4, 0x43, 0x88, 0x3a, 0x6e, 0x49, 0x48, 0xb2, + 0x71, 0x0b, 0x9d, 0x53, 0x7d, 0xa2, 0xbb, 0x1c, 0x58, 0x49, 0xec, 0xe3, + 0x13, 0xc7, 0x82, 0xb5, 0xf5, 0x83, 0x17, 0x1f, 0xa3, 0x74, 0xa3, 0x66, + 0x36, 0xe7, 0x38, 0x07, 0x35, 0xd6, 0x93, 0xcd, 0x96, 0x37, 0xda, 0x7e, + 0x32, 0xb2, 0xc6, 0x6c, 0x64, 0x34, 0x57, 0x07, 0x63, 0x5c, 0xe6, 0xeb, + 0xcb, 0xb5, 0xe3, 0xcf, 0x45, 0x23, 0x93, 0x67, 0x5f, 0xb6, 0x8c, 0x6e, + 0xa5, 0x73, 0xd8, 0xc7, 0x7d, 0x11, 0x1e, 0xc0, 0xf6, 0x8d, 0x0b, 0x9a, + 0xd8, 0xe7, 0xc5, 0x25, 0x3c, 0x70, 0xc6, 0xb2, 0xda, 0xb7, 0xb9, 0xd0, + 0xca, 0xc4, 0x01, 0xdd, 0xc4, 0x99, 0xd3, 0xef, 0x45, 0xa8, 0xb6, 0xb0, + 0xe3, 0x4b, 0xb7, 0x56, 0xd6, 0xc6, 0xba, 0x6f, 0x3f, 0x9d, 0xf3, 0x1d, + 0x97, 0x4c, 0xcf, 0xaa, 0x2d, 0xb4, 0xfa, 0x97, 0xb9, 0xd6, 0x58, 0x1c, + 0x40, 0x0d, 0x86, 0x32, 0x3f, 0x34, 0x36, 0x75, 0x84, 0x66, 0xfd, 0x50, + 0xaa, 0x36, 0x30, 0xba, 0xb7, 0xbc, 0xc8, 0x69, 0xda, 0xf0, 0x1c, 0x3b, + 0xf0, 0x3f, 0x2a, 0x4a, 0x79, 0xec, 0x7c, 0x37, 0xe6, 0xd5, 0x5b, 0xc8, + 0x86, 0x03, 0xb6, 0x4f, 0xd2, 0x21, 0xbe, 0x1f, 0x24, 0x5b, 0x0b, 0x7d, + 0x6f, 0x4e, 0xba, 0x9d, 0x50, 0xaf, 0x56, 0x83, 0xbb, 0xda, 0x7b, 0x8f, + 0x82, 0xe8, 0xdd, 0xf5, 0x5b, 0x3b, 0x1a, 0xad, 0xf4, 0xda, 0xcb, 0xb6, + 0x72, 0x08, 0xd8, 0xef, 0x81, 0x1a, 0x84, 0x21, 0x4e, 0x17, 0xba, 0xbc, + 0xc3, 0xb5, 0xda, 0x07, 0xcf, 0xb4, 0x83, 0xe0, 0x0f, 0x29, 0x29, 0xca, + 0x69, 0xc2, 0x00, 0x4b, 0x81, 0xb6, 0x01, 0x20, 0x12, 0xdf, 0x98, 0xd0, + 0x09, 0x43, 0xce, 0xaf, 0x1a, 0xca, 0x1c, 0xc6, 0x38, 0xb2, 0xc7, 0x0f, + 0x67, 0x32, 0x63, 0x58, 0x23, 0xc0, 0xa3, 0x66, 0x59, 0xd0, 0x1e, 0x1b, + 0x8f, 0x88, 0x2f, 0x37, 0xf0, 0xcb, 0x27, 0x73, 0x74, 0xe4, 0x41, 0xd5, + 0x41, 0xf8, 0xc1, 0x96, 0x36, 0xe7, 0x0d, 0xde, 0xa4, 0xb5, 0xb2, 0x60, + 0xed, 0xf2, 0x03, 0xc8, 0x24, 0xa7, 0x05, 0xad, 0x73, 0xab, 0x3e, 0xc2, + 0xe2, 0xcf, 0xa4, 0x75, 0x3b, 0x7e, 0x29, 0xf1, 0x68, 0xbb, 0x31, 0xe2, + 0xaa, 0x81, 0x00, 0x19, 0xdf, 0xe0, 0x16, 0xd5, 0x78, 0x35, 0x86, 0x34, + 0x09, 0x34, 0xbe, 0xc9, 0xb0, 0xb7, 0xe9, 0x11, 0xdf, 0x53, 0xe0, 0x60, + 0xab, 0xf8, 0x58, 0x37, 0x74, 0xe6, 0x96, 0x43, 0x0b, 0x4c, 0x3d, 0xaf, + 0x23, 0xdd, 0x07, 0xdb, 0xa0, 0x6c, 0x7c, 0x52, 0x52, 0x0e, 0x9f, 0x8e, + 0xdc, 0x0b, 0x5b, 0x4d, 0xdb, 0x9d, 0x49, 0x90, 0xdb, 0x3e, 0x8e, 0xc7, + 0x9d, 0x77, 0x69, 0xe5, 0xa6, 0xa8, 0xd9, 0xdd, 0x7f, 0x13, 0x69, 0xa2, + 0xbb, 0x1c, 0x32, 0x03, 0x36, 0xb9, 0xfa, 0x96, 0xb9, 0xdc, 0xff, 0x00, + 0xb1, 0x5d, 0xa7, 0x26, 0xbd, 0xc4, 0x5a, 0x19, 0x6b, 0x26, 0x08, 0x0d, + 0x3a, 0xca, 0x1e, 0x4f, 0x49, 0xc3, 0xbd, 0xed, 0xb3, 0x19, 0xa1, 0x8e, + 0x6f, 0xba, 0x07, 0x1e, 0xde, 0xe9, 0x29, 0xb3, 0xd2, 0xfe, 0xb6, 0xf4, + 0xbb, 0x18, 0x71, 0x2f, 0xdd, 0x89, 0x77, 0xd1, 0x1b, 0xe7, 0x6c, 0x8e, + 0x24, 0x8e, 0x3c, 0xd6, 0xbf, 0x4a, 0xcc, 0x36, 0xd3, 0x65, 0x5b, 0x9b, + 0xa3, 0xdc, 0x7d, 0x9e, 0xe8, 0x69, 0xd4, 0x42, 0xe2, 0x1f, 0xd0, 0x58, + 0x6e, 0xf5, 0x76, 0x93, 0x4b, 0x64, 0x38, 0x93, 0xb9, 0xee, 0x24, 0xe9, + 0xa7, 0x78, 0x41, 0x77, 0x4f, 0xc8, 0xc6, 0xbd, 0xbf, 0x64, 0xc8, 0x7d, + 0x42, 0x76, 0x87, 0x07, 0x39, 0xa4, 0x1e, 0x75, 0x84, 0x94, 0xfa, 0x16, + 0x45, 0xd9, 0x01, 0xee, 0x65, 0x56, 0x07, 0x87, 0x34, 0xb0, 0x87, 0x0d, + 0x41, 0x89, 0xe1, 0x0b, 0xf6, 0xc5, 0xbb, 0xbd, 0x1f, 0x4d, 0xb1, 0x1e, + 0x06, 0x27, 0xe8, 0x7e, 0x55, 0xc8, 0x9e, 0xa7, 0xd6, 0xb1, 0x0c, 0xb6, + 0xdf, 0x5d, 0xe1, 0xc4, 0x1d, 0xe3, 0xda, 0x64, 0x6b, 0x27, 0x9f, 0x35, + 0x6f, 0xfe, 0x73, 0x65, 0xfa, 0x3b, 0xbe, 0xca, 0xcf, 0xb5, 0x47, 0x3b, + 0x4f, 0xd1, 0xfb, 0x92, 0x53, 0x72, 0x9b, 0xed, 0x6d, 0x6f, 0x36, 0xc5, + 0x41, 0x93, 0x2e, 0x33, 0x05, 0xc2, 0x23, 0x9f, 0x14, 0xd1, 0x43, 0xab, + 0x37, 0xdc, 0xf2, 0x1e, 0x41, 0x00, 0x17, 0x6e, 0x07, 0x71, 0x9f, 0xa5, + 0xae, 0x88, 0x9d, 0x48, 0x19, 0xa0, 0x34, 0x16, 0xd6, 0xca, 0x99, 0x53, + 0xdf, 0x71, 0x02, 0x75, 0x3b, 0x9c, 0x5b, 0xe3, 0xa4, 0xac, 0xeb, 0x18, + 0xfc, 0x7b, 0x77, 0x7a, 0x66, 0xda, 0x6f, 0x71, 0x14, 0xb8, 0x49, 0x92, + 0x3b, 0x10, 0x08, 0x8d, 0x74, 0x49, 0x4d, 0x7c, 0x97, 0x9a, 0x32, 0x4d, + 0x77, 0xb7, 0xe9, 0x06, 0x80, 0x01, 0xf6, 0x6e, 0xfe, 0x21, 0x68, 0xbd, + 0xa6, 0xa7, 0xd3, 0x88, 0xdd, 0xa1, 0xd7, 0x01, 0x36, 0xf3, 0x1b, 0xb9, + 0x8f, 0x33, 0xc2, 0x7c, 0x5b, 0x3a, 0x60, 0x2f, 0xb7, 0x24, 0x16, 0x64, + 0xd4, 0x3f, 0x41, 0x53, 0x41, 0x3b, 0xb6, 0x0f, 0x13, 0xa7, 0xd2, 0xd1, + 0x07, 0x7d, 0x35, 0xd8, 0xc7, 0xbc, 0x38, 0x5b, 0x74, 0x10, 0x1c, 0x49, + 0x68, 0x70, 0xd4, 0xbd, 0xbd, 0xc3, 0x92, 0x53, 0x5d, 0x8d, 0xb5, 0xc7, + 0x24, 0x5f, 0xfc, 0xe3, 0x1d, 0x01, 0xa3, 0xb3, 0xda, 0x20, 0x9d, 0x15, + 0x6c, 0x67, 0xbb, 0x79, 0x60, 0x1b, 0x89, 0x07, 0x74, 0x91, 0xee, 0x3e, + 0x24, 0xab, 0x8e, 0xc5, 0x1e, 0x9b, 0xf2, 0x5a, 0x40, 0xd4, 0x7a, 0x4c, + 0x99, 0xdc, 0xf6, 0x39, 0xa5, 0xd2, 0x20, 0x69, 0xfd, 0xea, 0x23, 0xa3, + 0xe7, 0xd6, 0xeb, 0x2b, 0xa7, 0x1a, 0xcb, 0x1a, 0xf8, 0x71, 0x7b, 0x1a, + 0x35, 0x64, 0xee, 0xdb, 0xf2, 0x49, 0x4e, 0x7b, 0x9b, 0x9d, 0x56, 0x4d, + 0x97, 0x61, 0x99, 0xa4, 0x38, 0x0b, 0xab, 0x0e, 0xfc, 0xf6, 0xeb, 0x23, + 0xc9, 0x6f, 0x7d, 0x5e, 0xfa, 0xc4, 0xeb, 0xf3, 0x5b, 0x83, 0x92, 0xd0, + 0xca, 0xec, 0x3b, 0xe9, 0x74, 0x6d, 0xf7, 0x01, 0xf4, 0x4f, 0x64, 0x1a, + 0xba, 0x7d, 0x15, 0xd1, 0x95, 0x99, 0x8c, 0xe0, 0xe0, 0xc6, 0x35, 0xaf, + 0x6d, 0x8c, 0x2c, 0x7b, 0x0c, 0xc3, 0x86, 0xde, 0x1d, 0x33, 0xd9, 0x67, + 0xe4, 0x74, 0xfb, 0x5e, 0x68, 0x63, 0x1a, 0x68, 0xa6, 0x8f, 0xd2, 0x58, + 0xf3, 0xa6, 0xd0, 0x7e, 0x8f, 0xe0, 0x92, 0x9f, 0x44, 0xb3, 0x2b, 0x00, + 0x54, 0xe1, 0x69, 0x6f, 0xa2, 0x79, 0x71, 0x22, 0x09, 0x3d, 0xb5, 0x59, + 0x78, 0xf8, 0x75, 0xdf, 0x98, 0xf3, 0x5e, 0x3e, 0xda, 0xe9, 0x3a, 0x43, + 0xf7, 0x02, 0xdf, 0x36, 0x71, 0xaf, 0x82, 0xe1, 0xb3, 0x73, 0xb2, 0x28, + 0xcb, 0xbe, 0xb6, 0x9d, 0xf4, 0xbd, 0xbb, 0xc5, 0x4f, 0x12, 0xc0, 0x40, + 0x04, 0x44, 0xf1, 0xa8, 0xd1, 0x4b, 0x1b, 0xeb, 0x47, 0x55, 0x93, 0xb6, + 0xc2, 0xd7, 0x3b, 0x9d, 0xa0, 0x09, 0x8f, 0x82, 0x4a, 0x68, 0x75, 0x2c, + 0x6c, 0xeb, 0xba, 0xb6, 0x45, 0x99, 0x75, 0xdc, 0x2e, 0x7d, 0x8e, 0x26, + 0x5a, 0x77, 0x34, 0x4f, 0xb7, 0xe5, 0x0b, 0x42, 0x96, 0xf5, 0x2a, 0x30, + 0x89, 0xb8, 0x9c, 0x8a, 0xea, 0x25, 0xcd, 0x71, 0x92, 0xe6, 0x08, 0x03, + 0xbe, 0xb1, 0xae, 0xab, 0x4b, 0xa7, 0x75, 0xbc, 0x8c, 0xac, 0xca, 0x71, + 0xf3, 0x80, 0x7b, 0x5e, 0xed, 0xad, 0xb5, 0xc3, 0x51, 0xa4, 0xf2, 0xba, + 0x5b, 0x2a, 0xc1, 0x6d, 0x0e, 0x06, 0xea, 0xe1, 0xed, 0x20, 0x33, 0x82, + 0xe3, 0x07, 0xdb, 0xf3, 0x09, 0x29, 0xe4, 0xaa, 0xea, 0x0f, 0x38, 0xac, + 0xc7, 0xc7, 0x6c, 0x55, 0xc3, 0xde, 0x5a, 0x1c, 0xfd, 0x7e, 0x94, 0x11, + 0xc4, 0xaa, 0x14, 0xf4, 0xda, 0xb2, 0x1f, 0xfa, 0x32, 0xed, 0x1a, 0x03, + 0x1c, 0x5a, 0x4f, 0x3f, 0x3f, 0x15, 0xab, 0x4e, 0x0e, 0x3b, 0x1d, 0x5d, + 0xac, 0x71, 0x2c, 0x67, 0xb6, 0x26, 0x37, 0xb4, 0xfd, 0x15, 0x70, 0xd7, + 0x8b, 0x8f, 0xb8, 0x56, 0xdf, 0x4c, 0x9f, 0x7b, 0x3d, 0x30, 0x0b, 0x98, + 0xe9, 0x3b, 0x44, 0xbb, 0xf7, 0x7b, 0x24, 0xa6, 0xae, 0x17, 0x4f, 0xc3, + 0x6d, 0x2d, 0x7d, 0xf4, 0xd7, 0xf6, 0x86, 0x38, 0x8a, 0x89, 0x04, 0x1f, + 0x61, 0x31, 0xbd, 0xbf, 0x35, 0x7f, 0x07, 0x22, 0xaa, 0x0b, 0xde, 0x5c, + 0x03, 0xec, 0x71, 0x1b, 0x9c, 0x39, 0x68, 0xf0, 0x95, 0x5e, 0xd6, 0x0c, + 0x86, 0x36, 0xe7, 0x69, 0x77, 0xa8, 0x4d, 0xae, 0x3f, 0x48, 0x99, 0xf7, + 0x1f, 0x99, 0x09, 0x5e, 0xc9, 0x2f, 0xd8, 0x22, 0xa7, 0x38, 0x7d, 0x2e, + 0x5b, 0xe4, 0x92, 0x9b, 0x39, 0x19, 0xa3, 0x73, 0x41, 0x6f, 0xa9, 0x0e, + 0x91, 0xb7, 0x50, 0x47, 0x7e, 0x15, 0x19, 0x7b, 0xb3, 0xc5, 0x91, 0xe9, + 0xd7, 0x3b, 0x8e, 0xe1, 0x07, 0x4e, 0xea, 0x76, 0xd2, 0xe7, 0xd8, 0xd2, + 0xd7, 0xfb, 0x5f, 0x21, 0xa7, 0xb0, 0x23, 0x4e, 0xc9, 0xf2, 0x2a, 0x6b, + 0x81, 0x01, 0xbf, 0x9e, 0x09, 0x8d, 0x48, 0x9d, 0x1c, 0x39, 0xee, 0x92, + 0x9c, 0x6f, 0x52, 0xfe, 0xa1, 0x7e, 0x45, 0xf7, 0x7e, 0x88, 0xd6, 0x2c, + 0x8b, 0xc8, 0x92, 0x5e, 0xe7, 0x34, 0x72, 0x3b, 0x80, 0xac, 0xd0, 0xca, + 0x5f, 0x47, 0xa2, 0xf7, 0x80, 0x2e, 0x1b, 0x4b, 0xa3, 0x76, 0xd7, 0x91, + 0x3b, 0xe3, 0xc0, 0xeb, 0x2b, 0x42, 0xfa, 0xea, 0xf4, 0x8b, 0x58, 0xc0, + 0xf2, 0xe7, 0x90, 0xd0, 0x38, 0x86, 0x83, 0x1c, 0xfc, 0x54, 0x19, 0x82, + 0x5c, 0xcd, 0x3d, 0xba, 0x02, 0x36, 0x69, 0x2e, 0xee, 0x20, 0x78, 0x14, + 0x94, 0xe7, 0x3b, 0xa6, 0xe4, 0x55, 0x91, 0x5d, 0xd8, 0xcf, 0xf4, 0x8b, + 0x23, 0xd4, 0xba, 0x76, 0x10, 0x24, 0xd6, 0x59, 0xe7, 0xed, 0x46, 0xc8, + 0xa6, 0x96, 0xbe, 0x9c, 0x56, 0x38, 0x86, 0x54, 0x1c, 0xfa, 0xaf, 0x02, + 0x07, 0xb7, 0x58, 0x7b, 0x41, 0x3a, 0x38, 0x48, 0x47, 0xaa, 0x2d, 0xa8, + 0x82, 0x46, 0xf6, 0x18, 0x76, 0xbe, 0xd7, 0x06, 0x0f, 0x0f, 0x81, 0x85, + 0x67, 0x27, 0x23, 0x1b, 0xec, 0x8c, 0xc4, 0xf4, 0xd8, 0xc6, 0xec, 0x20, + 0xb9, 0xba, 0x9b, 0x1d, 0x1b, 0x4c, 0xbf, 0xb2, 0x4a, 0x69, 0x61, 0x61, + 0x93, 0x4b, 0xac, 0xae, 0xc0, 0xc0, 0x77, 0x6c, 0x07, 0xdc, 0x5a, 0x5c, + 0x0b, 0x5c, 0xe4, 0x5a, 0xc3, 0x71, 0xde, 0xc3, 0xea, 0x6f, 0x2c, 0x21, + 0xa0, 0x8d, 0x3e, 0x7a, 0xf7, 0x51, 0x0d, 0x7d, 0x4f, 0x60, 0x0e, 0x15, + 0xd4, 0xd1, 0xec, 0xf1, 0x73, 0x40, 0x31, 0x3e, 0x09, 0xc5, 0x76, 0xd9, + 0x89, 0x66, 0x4d, 0xcd, 0x2d, 0xad, 0xa4, 0x16, 0x90, 0x3d, 0xae, 0x83, + 0xba, 0x44, 0x79, 0x24, 0xa7, 0x7b, 0x1b, 0x38, 0x3a, 0xa1, 0xea, 0x11, + 0xb8, 0x7d, 0x31, 0xc3, 0xa4, 0x7d, 0xea, 0x56, 0x65, 0x07, 0x9d, 0x8f, + 0x30, 0x0f, 0xba, 0x7b, 0x1f, 0x05, 0x80, 0x0d, 0xa1, 0xdb, 0x34, 0x16, + 0xb7, 0x50, 0xf9, 0xe5, 0xae, 0xf8, 0x26, 0x7d, 0xce, 0x66, 0xca, 0x9e, + 0xff, 0x00, 0x7d, 0x9a, 0x86, 0xf3, 0xc6, 0xa9, 0x29, 0xd6, 0xc4, 0xea, + 0x4f, 0xab, 0xd6, 0xaa, 0xe3, 0x23, 0x79, 0x93, 0xcf, 0x90, 0x85, 0x9f, + 0xd6, 0x6b, 0x6e, 0x63, 0xeb, 0x0d, 0x0e, 0x16, 0x0f, 0xe6, 0xee, 0x1c, + 0xe8, 0x3f, 0x38, 0x26, 0x64, 0x7a, 0x6e, 0xb1, 0xd1, 0x2c, 0x96, 0x82, + 0x79, 0xf7, 0x70, 0x0a, 0x83, 0xdd, 0x6f, 0xe8, 0xdf, 0x5b, 0x1c, 0xe7, + 0x44, 0x6c, 0x92, 0x34, 0xf8, 0x7e, 0x44, 0x94, 0xd5, 0xa7, 0x05, 0xb4, + 0x34, 0x58, 0xc0, 0x1d, 0x60, 0x10, 0xe7, 0x0e, 0x1c, 0x49, 0xe4, 0x11, + 0xa2, 0x2d, 0xf4, 0x5e, 0xca, 0xc1, 0xf4, 0xcb, 0xa4, 0xc8, 0x6b, 0x49, + 0x24, 0x4e, 0xa3, 0xe4, 0xa6, 0x19, 0x75, 0x65, 0xfb, 0x6a, 0x3e, 0x98, + 0x1b, 0x83, 0xeb, 0x71, 0x04, 0x3b, 0xc3, 0xbc, 0xc2, 0xb1, 0x0e, 0xfe, + 0x73, 0x21, 0xf0, 0x74, 0x3e, 0x04, 0x77, 0x8f, 0xbd, 0x25, 0x35, 0xe9, + 0xfb, 0x50, 0xa5, 0xa0, 0x8d, 0xaf, 0x13, 0xfc, 0xe0, 0x12, 0x08, 0x3c, + 0x8f, 0x1f, 0x9a, 0xb3, 0x50, 0x7e, 0xaf, 0xb5, 0xd2, 0xf1, 0x23, 0xef, + 0x03, 0x95, 0x17, 0xe4, 0xd5, 0x90, 0xc1, 0xb2, 0x64, 0x10, 0x18, 0xfe, + 0x3e, 0x8f, 0x6d, 0x7c, 0x54, 0xe5, 0xa1, 0xee, 0x69, 0x00, 0x38, 0x09, + 0x26, 0x7c, 0xb4, 0x09, 0x29, 0xab, 0xf4, 0x4b, 0xb7, 0x3b, 0xdc, 0x1c, + 0x48, 0x1a, 0x46, 0xa2, 0x5c, 0x4f, 0xc1, 0x5b, 0xa6, 0xcc, 0x76, 0xc3, + 0xdb, 0x6b, 0x9f, 0xb8, 0x09, 0x6b, 0xc6, 0xd1, 0xa7, 0x2b, 0x3d, 0xec, + 0xbb, 0xd4, 0xd8, 0xea, 0xe7, 0x79, 0x86, 0x9d, 0x20, 0xf8, 0x6a, 0x11, + 0x5d, 0x56, 0xfd, 0x8f, 0xb0, 0x17, 0x3d, 0xa0, 0x00, 0xd6, 0xf7, 0x00, + 0x76, 0xd5, 0x25, 0x3a, 0x67, 0x1f, 0x0c, 0x3a, 0xcc, 0x8f, 0xd1, 0xd5, + 0x69, 0x6c, 0xbe, 0xd6, 0x38, 0xb1, 0xa4, 0x7f, 0x2d, 0xbf, 0x44, 0xac, + 0xfc, 0x8e, 0xad, 0xd3, 0x32, 0x1c, 0x2a, 0xc5, 0x05, 0xd6, 0x4f, 0xba, + 0xf6, 0x8d, 0xac, 0x26, 0x3e, 0x52, 0xaa, 0xdf, 0xd2, 0xe8, 0xb9, 0xc2, + 0xcb, 0xc5, 0x96, 0xb0, 0x0f, 0x63, 0x1a, 0xed, 0x04, 0x77, 0x81, 0xca, + 0x9e, 0x26, 0x0e, 0x2d, 0x7a, 0xd0, 0xc2, 0xe0, 0x24, 0xeb, 0xc0, 0xf3, + 0xed, 0xf9, 0x12, 0x53, 0x2a, 0xaf, 0xc3, 0x7b, 0xa1, 0xb3, 0xe9, 0x99, + 0x86, 0xf3, 0x04, 0xe8, 0x49, 0x4d, 0xf6, 0x3c, 0x6d, 0xdf, 0x4b, 0x4d, + 0xbb, 0x76, 0xce, 0xb3, 0xe2, 0xac, 0x0c, 0x4a, 0xac, 0x78, 0x76, 0xd0, + 0xd3, 0xa1, 0x30, 0x39, 0x27, 0x9e, 0x23, 0x45, 0x3f, 0x42, 0xbf, 0xb5, + 0x7a, 0x1b, 0x3f, 0x49, 0xbe, 0x36, 0xed, 0xf9, 0xee, 0xf1, 0xf3, 0x49, + 0x4f, 0x47, 0x95, 0xd1, 0xab, 0xcd, 0xa5, 0xa6, 0xe7, 0x38, 0xd8, 0xc7, + 0x39, 0xf6, 0x96, 0x89, 0x05, 0xda, 0x93, 0x1d, 0xfb, 0xc6, 0x8b, 0x2f, + 0xad, 0x11, 0x7b, 0xeb, 0xa2, 0xba, 0xec, 0x73, 0xc3, 0x61, 0xc4, 0x6a, + 0x58, 0x22, 0x37, 0x69, 0xe1, 0xe1, 0xf1, 0x50, 0xaf, 0xa9, 0xcd, 0x15, + 0x57, 0x66, 0x55, 0x96, 0x33, 0x40, 0x6b, 0x0c, 0x0d, 0x0f, 0xd6, 0x40, + 0x3e, 0x52, 0xb4, 0x71, 0xba, 0xa3, 0x9f, 0x5b, 0xc5, 0x6d, 0x63, 0x2d, + 0x0d, 0x60, 0xde, 0x20, 0x17, 0x07, 0x4f, 0x8f, 0x82, 0x4a, 0x71, 0xf0, + 0x7a, 0x70, 0xbb, 0x68, 0xb4, 0x06, 0x97, 0x87, 0x10, 0xfd, 0xdc, 0x1e, + 0xd3, 0x3c, 0x49, 0x4f, 0x6f, 0x4d, 0xcb, 0x7e, 0x63, 0x71, 0xed, 0xad, + 0xc0, 0x30, 0x7e, 0x8e, 0xb1, 0xab, 0x43, 0x41, 0x81, 0xa8, 0x93, 0xe6, + 0xb7, 0x69, 0xcb, 0xa4, 0x5b, 0x63, 0xdc, 0xd0, 0x5b, 0x0c, 0x61, 0xb0, + 0x34, 0x34, 0x13, 0x12, 0x0c, 0x77, 0xf0, 0x5a, 0x95, 0x58, 0xdb, 0x0e, + 0xf3, 0x0d, 0x76, 0xbb, 0x60, 0xcc, 0xb4, 0x24, 0xa7, 0x98, 0xb3, 0xa2, + 0xe4, 0x8b, 0x5b, 0x5d, 0x75, 0xd6, 0x58, 0xc6, 0xed, 0x2e, 0xb7, 0x87, + 0x1d, 0xd2, 0x40, 0x03, 0xc7, 0x52, 0x4f, 0xf7, 0x2d, 0x3b, 0xba, 0x45, + 0xb9, 0x55, 0xd7, 0x8e, 0xf7, 0x39, 0xb5, 0xd4, 0xd1, 0xab, 0x09, 0x6b, + 0x1f, 0xe2, 0x1c, 0xd9, 0x99, 0x1f, 0x18, 0x2b, 0x40, 0xd9, 0x4d, 0xa5, + 0x8f, 0xb0, 0xec, 0x01, 0xc4, 0x19, 0x30, 0x37, 0x04, 0x60, 0xe6, 0x87, + 0x18, 0xd3, 0x8d, 0xa0, 0x1e, 0x74, 0xf0, 0x49, 0x4e, 0x1d, 0x1d, 0x29, + 0xb8, 0x98, 0x4d, 0xc5, 0xdd, 0xbf, 0x19, 0x96, 0x39, 0xfb, 0x83, 0x7d, + 0xcf, 0x30, 0xd7, 0x6d, 0x8f, 0xeb, 0x02, 0xa8, 0xf5, 0x2c, 0x49, 0xbe, + 0xc6, 0x96, 0xee, 0xaa, 0x3e, 0x84, 0xc8, 0x68, 0x68, 0x92, 0x67, 0xc3, + 0x4d, 0x65, 0x6e, 0xe5, 0xef, 0xa0, 0xb9, 0xd2, 0x76, 0xde, 0x44, 0x78, + 0x31, 0xdf, 0xbd, 0xe5, 0xa2, 0xc6, 0xce, 0x7d, 0xcc, 0xde, 0xd6, 0xb4, + 0x9a, 0x1e, 0xd0, 0x41, 0xdb, 0x13, 0xb8, 0xfb, 0x99, 0xbb, 0x93, 0xaa, + 0x4a, 0x73, 0x6f, 0xf4, 0x20, 0x86, 0xd4, 0x2e, 0x6d, 0xad, 0x12, 0xed, + 0xb0, 0x1f, 0xc8, 0x1e, 0xde, 0x61, 0x65, 0xbf, 0x0e, 0xaa, 0xee, 0xfd, + 0x1d, 0x2d, 0xae, 0x04, 0x7a, 0x2c, 0x06, 0x1c, 0xef, 0xe5, 0x3f, 0x98, + 0xf2, 0x5b, 0xae, 0x02, 0xc7, 0xef, 0x73, 0x88, 0xac, 0x91, 0xb8, 0xf1, + 0x04, 0x0e, 0xff, 0x00, 0xc9, 0x51, 0xac, 0x8d, 0xe4, 0x44, 0x8d, 0xd3, + 0x5b, 0x40, 0xd0, 0x0d, 0x4f, 0x3f, 0x34, 0x94, 0xf3, 0xc7, 0xa6, 0xe6, + 0xb4, 0x3e, 0xe6, 0x13, 0xbb, 0x52, 0xc6, 0x0f, 0x6b, 0x98, 0xcf, 0x0d, + 0x78, 0x95, 0x6a, 0x9a, 0x72, 0x6c, 0x61, 0x01, 0xae, 0x63, 0x2a, 0x6b, + 0x4e, 0xe8, 0x71, 0x6b, 0x5e, 0x4f, 0x0e, 0x92, 0xb4, 0x0b, 0xa9, 0x1b, + 0x8b, 0x2b, 0x30, 0xd2, 0x47, 0xb9, 0xdb, 0xa4, 0xff, 0x00, 0x2f, 0xc0, + 0x29, 0xd1, 0x65, 0xc5, 0x96, 0xb1, 0xad, 0x1e, 0x9b, 0x88, 0x73, 0xa4, + 0x90, 0x64, 0x7b, 0xb5, 0xf1, 0x10, 0x92, 0x90, 0x1a, 0xab, 0x6b, 0x7f, + 0x47, 0xb9, 0x8d, 0xa8, 0x87, 0x16, 0x72, 0xd8, 0x77, 0xee, 0x9f, 0x25, + 0x17, 0x39, 0xb7, 0x0b, 0x0d, 0x95, 0x87, 0x59, 0xbd, 0xb3, 0xc8, 0x22, + 0x4f, 0x6d, 0x3c, 0xd5, 0xea, 0x9a, 0xc6, 0xb8, 0xb9, 0xee, 0x3e, 0xf7, + 0x34, 0xb4, 0x1d, 0x01, 0x04, 0x38, 0xb7, 0xef, 0xd7, 0x45, 0x2a, 0xaa, + 0xa3, 0x16, 0xf2, 0xf2, 0x43, 0xf7, 0x19, 0xd9, 0xac, 0x12, 0x4f, 0x6f, + 0x1d, 0x52, 0x52, 0x1c, 0x66, 0x59, 0x73, 0x43, 0x6c, 0x9a, 0xce, 0xdf, + 0x65, 0x64, 0x41, 0x68, 0x9d, 0xce, 0x71, 0xf3, 0x42, 0x73, 0xed, 0x61, + 0x0c, 0xf4, 0x9d, 0xea, 0x5a, 0xef, 0x4c, 0x41, 0xd3, 0x6b, 0x7f, 0x3b, + 0xe2, 0x55, 0xaf, 0xb4, 0x34, 0x5a, 0xeb, 0x20, 0x87, 0x9f, 0x6f, 0x88, + 0x20, 0x15, 0x2b, 0x3d, 0x37, 0x1f, 0x5f, 0x76, 0xd7, 0x07, 0x1f, 0xa5, + 0xc0, 0x23, 0x4d, 0x12, 0x53, 0x94, 0xe3, 0x92, 0xd7, 0x7a, 0x87, 0xf4, + 0x6c, 0x73, 0xdc, 0xd2, 0x62, 0x3d, 0xec, 0xd7, 0x83, 0xca, 0x95, 0xc1, + 0xfe, 0x93, 0xf2, 0x58, 0x1c, 0x6b, 0x23, 0x68, 0x6b, 0x48, 0xdc, 0x5e, + 0x4b, 0x46, 0xef, 0x2f, 0x15, 0xa7, 0x63, 0x5e, 0x1a, 0xc0, 0xda, 0xc5, + 0x81, 0x84, 0xb9, 0xb2, 0x27, 0xe9, 0x73, 0x0a, 0x36, 0x63, 0x30, 0xd6, + 0x3d, 0x59, 0x6e, 0xff, 0x00, 0x69, 0x60, 0xe2, 0x39, 0x93, 0xe0, 0x92, + 0x9c, 0xdd, 0xd6, 0x11, 0xa0, 0xd1, 0xba, 0xb4, 0x79, 0x91, 0xba, 0x0f, + 0xdc, 0xa6, 0x32, 0x76, 0x46, 0xe7, 0x86, 0xbc, 0x19, 0x0e, 0x3c, 0x38, + 0x73, 0xa2, 0xbb, 0xe8, 0xb5, 0x80, 0x16, 0xb8, 0x1a, 0x83, 0x48, 0x77, + 0xb4, 0x7c, 0xb8, 0xe7, 0x95, 0x46, 0xcc, 0x50, 0xfd, 0xb8, 0xf5, 0x86, + 0x4e, 0x8f, 0xde, 0x44, 0x10, 0x1a, 0x35, 0x89, 0x9f, 0x34, 0x94, 0xc4, + 0xd3, 0x4d, 0x95, 0xd9, 0x6b, 0x5c, 0x1a, 0xe1, 0xee, 0x80, 0xe8, 0x7b, + 0xe7, 0x9d, 0x36, 0xf3, 0xf3, 0x4c, 0x4d, 0x36, 0x8f, 0xa6, 0x1a, 0xe1, + 0xab, 0x9a, 0xed, 0x08, 0x03, 0x83, 0xaf, 0xf7, 0xa5, 0x90, 0xd0, 0xf0, + 0xda, 0x98, 0xe3, 0x59, 0xa7, 0x41, 0xb4, 0x06, 0xee, 0x6f, 0x67, 0x38, + 0xc6, 0xa7, 0xcd, 0x21, 0x8d, 0x76, 0xc6, 0xb5, 0x9b, 0x5b, 0x04, 0x90, + 0x09, 0xe6, 0x74, 0x21, 0xda, 0x71, 0x01, 0x25, 0x33, 0xaf, 0x06, 0xc9, + 0x04, 0xdc, 0xd7, 0x3c, 0xed, 0x6b, 0x4b, 0xb5, 0x26, 0x24, 0xed, 0x3a, + 0xf8, 0x70, 0x9f, 0x1e, 0xaf, 0x4a, 0xe7, 0xd2, 0xf7, 0x1f, 0x47, 0x77, + 0xa6, 0x0f, 0xd1, 0x2d, 0xdd, 0xa8, 0xdd, 0xdb, 0x6f, 0x64, 0xf8, 0xfd, + 0x38, 0xc3, 0xdd, 0x79, 0x96, 0x32, 0x5d, 0x00, 0x19, 0x2e, 0x3c, 0xc9, + 0x27, 0xc9, 0x4a, 0xca, 0xb3, 0x59, 0x04, 0x80, 0x18, 0xd3, 0xbd, 0xfb, + 0x88, 0x74, 0x34, 0x7d, 0x1f, 0x99, 0x49, 0x4c, 0xbe, 0xce, 0xea, 0xb6, + 0xfb, 0x36, 0x5a, 0xd3, 0xab, 0xbe, 0x97, 0xbb, 0x80, 0x7f, 0x09, 0x4c, + 0x6b, 0x6d, 0xba, 0x30, 0xb4, 0x31, 0xda, 0x02, 0x39, 0x1d, 0x88, 0x51, + 0x7d, 0xf7, 0x51, 0x6d, 0x4f, 0x73, 0xa6, 0xc2, 0x43, 0x5a, 0x00, 0x10, + 0x66, 0x7d, 0xce, 0x0d, 0xe6, 0x1a, 0xa3, 0x45, 0x85, 0x8c, 0x77, 0x1d, + 0xce, 0xd1, 0x1f, 0x9b, 0xac, 0x47, 0xc0, 0x24, 0xa6, 0xcd, 0x78, 0xf4, + 0x0a, 0x5b, 0x53, 0xdf, 0x15, 0x9b, 0x09, 0x25, 0xbd, 0xe3, 0xc8, 0xa1, + 0x9a, 0xda, 0xdf, 0x54, 0x87, 0x40, 0x1a, 0xb5, 0xb1, 0xdc, 0x79, 0xfc, + 0x12, 0x65, 0x4e, 0xb4, 0x35, 0x95, 0x01, 0xa4, 0xba, 0xce, 0x7b, 0x46, + 0xba, 0xa7, 0xb7, 0x0b, 0x2b, 0xd7, 0x6d, 0x6c, 0x2c, 0x7b, 0xac, 0x6e, + 0xe2, 0xe9, 0x86, 0xf6, 0xd3, 0xee, 0x49, 0x4c, 0x45, 0xa0, 0xb7, 0x6d, + 0x24, 0x8d, 0x7d, 0xcd, 0x12, 0x7e, 0x3c, 0xa8, 0x3e, 0xaf, 0x50, 0x7a, + 0x8e, 0xb2, 0x43, 0xb8, 0x00, 0xfb, 0x8e, 0xbf, 0x95, 0x17, 0x21, 0xaf, + 0xa8, 0x11, 0x5f, 0xbc, 0x00, 0x01, 0x0d, 0x12, 0x5b, 0x1c, 0xaa, 0xbe, + 0x9d, 0xce, 0xa8, 0xfa, 0x5b, 0x6c, 0x78, 0x3a, 0x8e, 0x00, 0x1e, 0x24, + 0xf6, 0x49, 0x4c, 0xd9, 0x56, 0x38, 0xb0, 0x1a, 0xac, 0x2d, 0xb5, 0xbe, + 0xef, 0x4d, 0xd3, 0x31, 0xc9, 0x52, 0x11, 0x61, 0x3f, 0xa4, 0xd8, 0x09, + 0x9d, 0xc2, 0x1d, 0xc0, 0x3f, 0xc5, 0x66, 0x51, 0x98, 0xda, 0xcb, 0xac, + 0x79, 0x76, 0x92, 0x03, 0x79, 0x2c, 0x77, 0x1c, 0xab, 0x61, 0xe4, 0xd0, + 0xe7, 0x43, 0x4f, 0xba, 0x4b, 0x64, 0x0d, 0x4f, 0x9a, 0x4a, 0x6d, 0xb6, + 0xcd, 0xa0, 0x30, 0xb8, 0x3f, 0x4d, 0x1d, 0x11, 0x3f, 0x30, 0xa0, 0x1e, + 0xd7, 0x11, 0xb8, 0x10, 0x3d, 0xa1, 0xcd, 0x76, 0x8e, 0xf2, 0xe1, 0x41, + 0xc2, 0xd2, 0xc1, 0x63, 0x01, 0x21, 0xe0, 0x07, 0x34, 0x6a, 0x3b, 0x7d, + 0xca, 0x5e, 0xbd, 0x6f, 0xb4, 0x6f, 0x1b, 0x62, 0x41, 0x03, 0x5d, 0x47, + 0x04, 0x1e, 0xe9, 0x29, 0x98, 0x36, 0x02, 0xe8, 0x04, 0x96, 0x88, 0x69, + 0x3e, 0x67, 0x8f, 0x92, 0x40, 0x5b, 0xbd, 0xde, 0x91, 0x12, 0x7f, 0x33, + 0xfe, 0x8f, 0xe2, 0xa7, 0x93, 0x94, 0xeb, 0x6e, 0x63, 0x3d, 0x47, 0x3d, + 0xb5, 0x8d, 0xad, 0x2e, 0xee, 0x06, 0x9e, 0x08, 0x4e, 0xa6, 0xaf, 0x6b, + 0xdb, 0x35, 0x6b, 0xab, 0x84, 0x00, 0x75, 0xf1, 0x3e, 0x29, 0x29, 0x20, + 0xb5, 0xd8, 0xed, 0xb2, 0xc8, 0xdd, 0xb4, 0x7b, 0x7c, 0x67, 0xf3, 0x81, + 0x94, 0x4f, 0xda, 0x79, 0x5b, 0x3d, 0x5f, 0x48, 0x6d, 0xdf, 0xbf, 0x7c, + 0x1f, 0x52, 0x63, 0x6c, 0x24, 0xd7, 0xd6, 0xe7, 0x83, 0x67, 0xb7, 0x78, + 0x21, 0xfe, 0x04, 0xf1, 0x3f, 0x35, 0x0f, 0x4d, 0xd3, 0xbb, 0xd4, 0xd2, + 0x63, 0x83, 0xb6, 0x3f, 0x72, 0x52, 0x53, 0x46, 0xa2, 0xfc, 0x7b, 0xcd, + 0xde, 0x9b, 0xfd, 0x17, 0xd8, 0x5e, 0xd6, 0xbb, 0xc1, 0xd3, 0x00, 0x7c, + 0x96, 0xcd, 0x0d, 0x16, 0x37, 0x75, 0x7b, 0x7d, 0x42, 0x48, 0x78, 0x32, + 0x5e, 0xe6, 0x83, 0xf4, 0x5a, 0x07, 0x81, 0x2a, 0x6d, 0xc3, 0xae, 0xa7, + 0xec, 0xbe, 0xed, 0xf7, 0x63, 0x92, 0xe6, 0x4f, 0xbb, 0xe9, 0xfb, 0x62, + 0x07, 0x3a, 0x2d, 0x4c, 0x3e, 0x9d, 0x5d, 0x33, 0x92, 0xd0, 0xe0, 0x43, + 0x48, 0xd8, 0xe1, 0x10, 0x1d, 0xe6, 0x39, 0x29, 0x29, 0x0e, 0x0e, 0x16, + 0x4d, 0x95, 0xbd, 0xf7, 0x35, 0xd5, 0xb5, 0x96, 0x43, 0x58, 0xed, 0x1c, + 0xe0, 0x04, 0x1d, 0x3e, 0xf5, 0xa2, 0x43, 0x28, 0x06, 0xca, 0x44, 0x16, + 0xbb, 0x6b, 0x84, 0x18, 0x6b, 0x3e, 0x96, 0xd6, 0x8f, 0xe2, 0x86, 0x32, + 0x28, 0xa5, 0xaf, 0x71, 0x7f, 0xa9, 0x63, 0xc3, 0x5b, 0xb7, 0x50, 0x41, + 0x1d, 0xbc, 0xb9, 0x4d, 0x57, 0x53, 0xc7, 0xaa, 0x97, 0xd2, 0x6d, 0x6b, + 0xee, 0x0d, 0x96, 0xed, 0x92, 0x4e, 0xe1, 0xde, 0x52, 0x52, 0x5c, 0xba, + 0x9a, 0xfa, 0x9d, 0x65, 0xad, 0x3e, 0x93, 0x08, 0x73, 0x2b, 0x68, 0x97, + 0x48, 0x33, 0xb9, 0x46, 0xd0, 0x2d, 0xc8, 0x6f, 0xd9, 0xdc, 0x65, 0xed, + 0x16, 0xb6, 0x34, 0x8d, 0xc3, 0x6c, 0xbb, 0xca, 0x14, 0xd9, 0xd4, 0x2a, + 0xaa, 0x9b, 0x1d, 0x69, 0x1b, 0x6a, 0x86, 0xb1, 0xcd, 0xe1, 0xda, 0x7f, + 0x7a, 0xac, 0x3a, 0xb8, 0x0d, 0x37, 0xed, 0x1a, 0x88, 0x66, 0xa2, 0x74, + 0xff, 0x00, 0x78, 0x49, 0x4d, 0x96, 0xd0, 0xeb, 0x05, 0x6d, 0xb9, 0xce, + 0xdf, 0x4e, 0xe2, 0xe0, 0x35, 0x6d, 0x8d, 0xe3, 0x59, 0xe1, 0x03, 0x23, + 0x0e, 0xec, 0x8a, 0x85, 0x76, 0x7b, 0x1b, 0xbf, 0x71, 0xe2, 0x43, 0x7b, + 0x41, 0x55, 0x99, 0xd6, 0x2c, 0xb9, 0xdb, 0xc4, 0x87, 0x7d, 0x18, 0x11, + 0x11, 0x3a, 0xca, 0x8d, 0xbd, 0x45, 0xf0, 0x19, 0xb7, 0x77, 0xb4, 0xb7, + 0x71, 0x32, 0x03, 0x5c, 0x62, 0x4a, 0x4a, 0x62, 0xee, 0x9e, 0xd6, 0x36, + 0xdb, 0x18, 0xcd, 0xc1, 0xa0, 0x16, 0x56, 0xf1, 0xee, 0x81, 0x23, 0xf1, + 0x54, 0x32, 0xf1, 0xed, 0x6d, 0xec, 0x03, 0xda, 0x08, 0x07, 0x6b, 0x62, + 0x1a, 0xd0, 0x04, 0xcf, 0x9e, 0xa8, 0xf6, 0xe7, 0xb8, 0x86, 0x5a, 0x4b, + 0x77, 0x31, 0xa0, 0x41, 0xd2, 0x4c, 0xc7, 0x74, 0x2c, 0x8c, 0x9a, 0xc5, + 0x95, 0xb8, 0x8d, 0xc5, 0xcd, 0x89, 0x77, 0xee, 0x81, 0xaa, 0x4a, 0x73, + 0xda, 0x6f, 0x73, 0x2d, 0x0c, 0x01, 0xc6, 0x5c, 0xd9, 0xe0, 0x4f, 0x9f, + 0xf6, 0x4a, 0x93, 0x26, 0xb0, 0xf0, 0xf0, 0x5a, 0xd7, 0x47, 0x79, 0x07, + 0xc9, 0x4e, 0xeb, 0xc3, 0x5e, 0xc0, 0xc6, 0x6d, 0x00, 0x88, 0x98, 0x83, + 0x2a, 0x25, 0xf4, 0xd8, 0x06, 0xd3, 0x2d, 0x67, 0x27, 0x98, 0x8f, 0x8f, + 0xc1, 0x25, 0x32, 0xa5, 0xe6, 0x1c, 0x01, 0x1e, 0x99, 0x6f, 0xb6, 0x7b, + 0x90, 0x63, 0x9f, 0x9a, 0xb0, 0xfa, 0x99, 0x6b, 0xeb, 0x7c, 0x81, 0xb1, + 0xa1, 0x8d, 0x06, 0x7b, 0x6a, 0xe2, 0x23, 0xee, 0x55, 0x0b, 0x1d, 0x6b, + 0x3d, 0x3a, 0xa1, 0xc0, 0xc9, 0x68, 0x70, 0x00, 0x41, 0x89, 0x45, 0xaf, + 0x30, 0xbe, 0xf6, 0xb2, 0x96, 0x19, 0xa8, 0x13, 0xaf, 0x63, 0xf4, 0xbe, + 0xe2, 0x52, 0x52, 0xee, 0x73, 0x45, 0x82, 0xb6, 0x6e, 0x6c, 0x99, 0x1d, + 0xc1, 0x1c, 0x19, 0x2a, 0x4c, 0xd8, 0xdd, 0xe4, 0x0d, 0xee, 0x1a, 0xb6, + 0x66, 0x20, 0x29, 0x66, 0x90, 0xc7, 0x6e, 0x63, 0x7d, 0x8f, 0x3b, 0xda, + 0x7c, 0x34, 0x9f, 0xf6, 0x2a, 0xcc, 0xca, 0x1b, 0xc6, 0xcd, 0xdb, 0x40, + 0x97, 0x00, 0x7e, 0x92, 0x4a, 0x6c, 0x9b, 0x9e, 0xf6, 0xed, 0x2e, 0x89, + 0x88, 0x20, 0x98, 0xd1, 0x02, 0xcc, 0xa2, 0xd6, 0x96, 0x09, 0x79, 0xdc, + 0x43, 0x7f, 0x38, 0x92, 0xdd, 0x1d, 0x08, 0xf5, 0x12, 0xc0, 0x4d, 0x92, + 0x7d, 0x47, 0xc3, 0x03, 0x04, 0x9d, 0xb1, 0xaf, 0xdc, 0xa1, 0x76, 0x35, + 0xe1, 0xae, 0x76, 0x2b, 0xbd, 0x5b, 0x18, 0x7d, 0xa0, 0x46, 0xf2, 0x0f, + 0x27, 0x5d, 0x7e, 0xe4, 0x94, 0xd6, 0xb6, 0xf2, 0x0b, 0x5b, 0x63, 0x03, + 0x24, 0x69, 0xaf, 0x24, 0xfb, 0x87, 0xb0, 0x6a, 0xac, 0x9b, 0x3d, 0x46, + 0x35, 0xec, 0xa9, 0x80, 0x8e, 0x2c, 0xdb, 0x05, 0xe7, 0x83, 0x3f, 0x25, + 0x5a, 0xab, 0x1c, 0xf7, 0xec, 0xb4, 0x3b, 0xd4, 0x68, 0xf7, 0x3b, 0x69, + 0x69, 0x23, 0xb9, 0x93, 0xdd, 0x58, 0x01, 0xec, 0xa3, 0xd5, 0xac, 0x6e, + 0x73, 0x9c, 0x5a, 0x2a, 0x3e, 0xd1, 0x1d, 0x8a, 0x4a, 0x64, 0xfa, 0xfd, + 0x9b, 0xf4, 0x0f, 0x68, 0x82, 0x0f, 0x6e, 0xff, 0x00, 0x24, 0x23, 0x65, + 0xcd, 0x05, 0xce, 0x82, 0xd7, 0xf8, 0x08, 0x2c, 0x31, 0xcf, 0x9a, 0x35, + 0x8d, 0xca, 0x65, 0x55, 0xbe, 0xbd, 0x3d, 0x68, 0x6b, 0xc0, 0xed, 0x1c, + 0xca, 0x05, 0xae, 0x8b, 0x18, 0xc6, 0x3b, 0x56, 0xc0, 0x23, 0x99, 0x9d, + 0x38, 0xf9, 0xa4, 0xa5, 0xbe, 0xd3, 0x67, 0xa1, 0xb4, 0x97, 0x3d, 0xaf, + 0x04, 0xed, 0x3a, 0x1f, 0xdd, 0x2a, 0x0e, 0x7b, 0xac, 0x16, 0x52, 0x1d, + 0xb7, 0x68, 0x6c, 0x8d, 0x7e, 0x88, 0x1f, 0x96, 0x51, 0x5e, 0xcb, 0x2e, + 0x73, 0xea, 0x75, 0xfb, 0x6c, 0x06, 0x5b, 0x02, 0x36, 0x34, 0x6a, 0x41, + 0x85, 0x1b, 0x2c, 0x11, 0x60, 0x6b, 0x43, 0x25, 0xda, 0x02, 0x3f, 0x70, + 0xef, 0xed, 0xf0, 0x49, 0x4a, 0x2d, 0x19, 0x00, 0x6f, 0x1a, 0xb0, 0x07, + 0x8e, 0xda, 0xc7, 0x8a, 0xac, 0xdc, 0x77, 0xee, 0x78, 0xb7, 0xd9, 0xb8, + 0xc9, 0x2d, 0x3d, 0xa2, 0x08, 0x9f, 0x3e, 0x11, 0xec, 0xf5, 0xcb, 0xdb, + 0x63, 0x58, 0x3d, 0x17, 0x34, 0x92, 0xd1, 0xcc, 0x8e, 0x27, 0xe5, 0xa2, + 0x58, 0xd8, 0xcd, 0x2f, 0x36, 0xb5, 0xe0, 0x31, 0xcd, 0xda, 0x6b, 0x00, + 0xc8, 0x04, 0xea, 0xe2, 0x92, 0x98, 0xe3, 0xe4, 0xe6, 0xe3, 0xd4, 0xf7, + 0x54, 0xea, 0xeb, 0x6b, 0xa4, 0xbd, 0xd6, 0x09, 0x3e, 0x71, 0x1e, 0x4a, + 0xad, 0xef, 0xc9, 0x78, 0x73, 0x49, 0x07, 0xd3, 0x1f, 0x47, 0x5d, 0xbb, + 0x7b, 0x80, 0x07, 0x82, 0x97, 0xa6, 0xd1, 0xba, 0x5d, 0x2f, 0x6c, 0x96, + 0x12, 0x26, 0x3f, 0x75, 0xd1, 0xf0, 0x4c, 0xea, 0x3d, 0x3a, 0xde, 0x43, + 0x9c, 0xeb, 0x8b, 0x58, 0xf6, 0x92, 0x77, 0x12, 0x39, 0x20, 0x24, 0xa6, + 0x14, 0x5e, 0x71, 0xdd, 0x5e, 0xcb, 0xcb, 0xac, 0x23, 0xda, 0xd6, 0xcc, + 0x09, 0xfd, 0xe0, 0x55, 0xa7, 0xe4, 0x63, 0xbe, 0xaf, 0xb4, 0x56, 0x7d, + 0x37, 0x3b, 0xda, 0xf3, 0xcb, 0x0c, 0xaa, 0x99, 0x94, 0xbb, 0x17, 0x1e, + 0xbc, 0x96, 0x01, 0xfa, 0x40, 0xe7, 0x00, 0x3e, 0x93, 0x4b, 0xa4, 0x12, + 0x47, 0x94, 0xa6, 0xb7, 0x14, 0xb6, 0xac, 0x6c, 0x6a, 0xdc, 0x25, 0xc3, + 0x7d, 0x86, 0x74, 0x97, 0x00, 0x92, 0x97, 0xa4, 0x31, 0xde, 0xa3, 0x48, + 0x6c, 0x17, 0x12, 0x1c, 0xc1, 0x3f, 0x12, 0x55, 0x82, 0xc0, 0x18, 0xd7, + 0x35, 0xad, 0x2d, 0x03, 0x4d, 0xba, 0x0d, 0x7b, 0xc6, 0xbc, 0x42, 0xa8, + 0xf2, 0xe0, 0x7e, 0xcf, 0x5c, 0xd6, 0xe3, 0xb8, 0x69, 0xc3, 0xa2, 0x55, + 0xf7, 0x56, 0xe2, 0xc2, 0xc8, 0x21, 0xac, 0x6b, 0x40, 0x20, 0xc1, 0x2e, + 0x23, 0x72, 0x4a, 0x62, 0xf7, 0x8a, 0xa0, 0xd2, 0x49, 0x7b, 0x62, 0x5a, + 0x3c, 0xc7, 0x21, 0x14, 0x0a, 0x9a, 0x5d, 0x7f, 0x0f, 0x2d, 0x98, 0x1f, + 0x9c, 0x4f, 0xd1, 0x54, 0xab, 0xb6, 0xd3, 0xea, 0x1b, 0x80, 0xd0, 0xb5, + 0x9a, 0x71, 0xa9, 0x30, 0xe0, 0x7b, 0xc2, 0x72, 0xeb, 0x1f, 0x61, 0x0d, + 0x74, 0x5a, 0xd2, 0x5a, 0xd6, 0x90, 0x79, 0x68, 0xf1, 0xee, 0x92, 0x93, + 0x17, 0x54, 0xe8, 0x69, 0x6c, 0xce, 0xa1, 0xc2, 0x0f, 0x3d, 0xf4, 0x4e, + 0x72, 0x1c, 0xd6, 0x86, 0xbb, 0x4d, 0xce, 0x00, 0x46, 0xba, 0x9d, 0x54, + 0x69, 0x76, 0x4b, 0xe9, 0xc9, 0x75, 0x54, 0x97, 0x1d, 0x90, 0xe6, 0x06, + 0xfd, 0x17, 0x03, 0xac, 0x13, 0xe2, 0x12, 0x38, 0x99, 0x0e, 0x6b, 0x2c, + 0x70, 0x35, 0x40, 0xdc, 0xf7, 0x10, 0x41, 0x0d, 0x02, 0x41, 0x8f, 0x14, + 0x94, 0xca, 0xd6, 0xbe, 0xeb, 0x9a, 0xca, 0xce, 0xdd, 0xc7, 0x70, 0x9f, + 0x01, 0xa9, 0xd1, 0x5c, 0xfb, 0x2b, 0xa3, 0xd4, 0x97, 0xee, 0xf5, 0x36, + 0xc6, 0xe1, 0x3f, 0x08, 0xe2, 0x23, 0x55, 0x41, 0xd6, 0xed, 0xa9, 0x8e, + 0x82, 0x2d, 0x6b, 0x24, 0xbb, 0x50, 0x65, 0xd2, 0x23, 0xca, 0x02, 0xb5, + 0xfb, 0x43, 0x23, 0xec, 0x71, 0x02, 0x3f, 0xd2, 0x40, 0xdd, 0xe1, 0x3b, + 0x92, 0x53, 0x6e, 0x97, 0xd4, 0x1c, 0xf0, 0xe2, 0x5c, 0xda, 0xa0, 0xbc, + 0x37, 0xc4, 0xc8, 0x04, 0x1f, 0x25, 0xa1, 0x89, 0xf6, 0xa6, 0xd3, 0x66, + 0xb2, 0x20, 0xec, 0x7b, 0x89, 0xfb, 0xfe, 0xe4, 0xdd, 0x33, 0x16, 0x97, + 0xcd, 0xb7, 0xb4, 0x06, 0x58, 0xc6, 0x90, 0xd9, 0x89, 0x78, 0x3e, 0x0a, + 0xdd, 0xd8, 0xb7, 0xdb, 0x43, 0xf1, 0xe8, 0x6e, 0xd2, 0xf3, 0x25, 0xe7, + 0x80, 0xd4, 0x94, 0xd5, 0xca, 0x6b, 0x9d, 0x8a, 0xdf, 0xd1, 0x37, 0xd4, + 0xdb, 0xb6, 0x5a, 0x23, 0x59, 0x8e, 0x54, 0x3d, 0x0f, 0x41, 0xd5, 0xd6, + 0x40, 0xb2, 0xcd, 0xbb, 0x83, 0x9c, 0x07, 0xb0, 0x3b, 0x48, 0x2e, 0xee, + 0x8f, 0x91, 0x97, 0x65, 0xb6, 0xbb, 0x1e, 0xc6, 0xfa, 0x0c, 0xc5, 0x6f, + 0xab, 0x61, 0x03, 0x50, 0xd0, 0x7b, 0x79, 0x95, 0x95, 0x58, 0x2e, 0x26, + 0xd7, 0xd8, 0x45, 0x05, 0xc1, 0xa1, 0xdc, 0xf3, 0xae, 0xbe, 0x1c, 0xa4, + 0xa4, 0xb7, 0x6f, 0xb4, 0xb8, 0x9f, 0x75, 0x4e, 0x68, 0x02, 0xb6, 0x88, + 0x3a, 0x14, 0xc7, 0x11, 0x95, 0x37, 0xd3, 0xb2, 0x05, 0x61, 0xba, 0x80, + 0x7d, 0xd3, 0x32, 0x63, 0xf2, 0x27, 0x65, 0x76, 0x17, 0x3a, 0xb6, 0xe8, + 0x26, 0x4b, 0xa7, 0x41, 0xe0, 0xa3, 0x7e, 0x3d, 0xc1, 0xc0, 0x83, 0xea, + 0x3d, 0xc7, 0x81, 0xed, 0x0d, 0x68, 0xe4, 0x92, 0x92, 0x96, 0xb2, 0xff, + 0x00, 0x46, 0xb0, 0x29, 0x68, 0x73, 0x5c, 0x5b, 0xa0, 0x3d, 0xb5, 0xe7, + 0xe0, 0x9e, 0xcb, 0x47, 0xb9, 0xbb, 0x8b, 0x5c, 0xc1, 0xb9, 0xd1, 0xa4, + 0x83, 0xee, 0x84, 0x13, 0x5b, 0xee, 0xb7, 0x16, 0xb8, 0x2e, 0x16, 0x1d, + 0x5d, 0x10, 0x3f, 0x3b, 0x5d, 0x7b, 0x23, 0xe2, 0x63, 0xbb, 0x63, 0x9e, + 0x40, 0x7d, 0x8d, 0x2e, 0xe0, 0xeb, 0x1c, 0xa4, 0xa6, 0xb5, 0x9b, 0x5a, + 0xe6, 0x87, 0x6a, 0xd7, 0xc3, 0xbc, 0x65, 0xc7, 0xb2, 0x95, 0xed, 0xa9, + 0xd6, 0xee, 0x79, 0x06, 0x00, 0x68, 0x1e, 0x00, 0x6a, 0x51, 0x1f, 0x59, + 0x93, 0xbc, 0x41, 0x69, 0x86, 0xcf, 0x62, 0x7b, 0x8f, 0x82, 0x86, 0x4d, + 0x21, 0xb6, 0x56, 0xd6, 0x3a, 0x03, 0x8c, 0xee, 0xef, 0xc2, 0x4a, 0x6a, + 0xd9, 0x4b, 0xa7, 0xd5, 0x63, 0xc0, 0x2e, 0x3b, 0x8e, 0xef, 0x76, 0x82, + 0x74, 0x8e, 0xc8, 0x55, 0x56, 0xe7, 0xd2, 0xea, 0xde, 0xf9, 0xb9, 0xd0, + 0x7d, 0xa3, 0xd8, 0x1a, 0xee, 0x42, 0xba, 0xfa, 0x6a, 0x6b, 0x4d, 0x6e, + 0x04, 0x39, 0xcd, 0x83, 0x0a, 0x43, 0x16, 0xe6, 0xe3, 0xb9, 0xc5, 0xe2, + 0xa9, 0x20, 0x8d, 0x38, 0x1d, 0xe7, 0xcd, 0x25, 0x35, 0xda, 0xeb, 0x1e, + 0x0d, 0x6c, 0xa2, 0x29, 0x87, 0x34, 0x97, 0x18, 0x27, 0x5f, 0xbf, 0x54, + 0x66, 0x1a, 0xe9, 0x0f, 0x14, 0x30, 0x17, 0x35, 0xa4, 0x13, 0xf3, 0x8e, + 0x53, 0x36, 0x9b, 0xc0, 0xdf, 0x63, 0x83, 0x1c, 0x47, 0xbc, 0x01, 0xed, + 0xf8, 0x8f, 0x92, 0x23, 0x1c, 0x03, 0x0b, 0x1a, 0x37, 0x34, 0x88, 0x73, + 0xcf, 0x09, 0x29, 0xac, 0x2c, 0xf5, 0xb1, 0x6c, 0x64, 0xfb, 0x80, 0xf6, + 0x1e, 0x7d, 0xa4, 0x8d, 0xdf, 0x72, 0x77, 0x86, 0x32, 0x8d, 0xef, 0x73, + 0x46, 0xdf, 0xdd, 0x11, 0xbc, 0x81, 0xd9, 0x31, 0x79, 0xf5, 0x18, 0xf2, + 0x03, 0x45, 0x6e, 0x70, 0xd9, 0xdc, 0xb3, 0xbf, 0xcc, 0xa8, 0xe4, 0xe2, + 0xde, 0x72, 0x0d, 0xd6, 0x9f, 0x61, 0x86, 0xd6, 0xd1, 0xab, 0x43, 0x47, + 0xd1, 0x3e, 0x49, 0x29, 0x2b, 0x72, 0x4d, 0xcc, 0x65, 0x5b, 0x76, 0x17, + 0x49, 0x27, 0x8d, 0xad, 0x07, 0xe9, 0xe9, 0xe6, 0x93, 0xde, 0xc7, 0xb5, + 0x8f, 0x02, 0x1d, 0xab, 0x2b, 0x69, 0x3a, 0xed, 0x1d, 0xcf, 0xc5, 0x49, + 0x83, 0x6b, 0xeb, 0xa3, 0x68, 0x2c, 0xb6, 0xb2, 0x09, 0x23, 0x57, 0x13, + 0xa9, 0xf9, 0x22, 0x0c, 0x16, 0x17, 0xd9, 0xac, 0xdc, 0xc8, 0x81, 0x32, + 0x0b, 0x7c, 0xa7, 0xe0, 0x92, 0x90, 0xfe, 0x99, 0xcc, 0x2f, 0x92, 0xeb, + 0x47, 0x0c, 0xe6, 0x4f, 0x89, 0x44, 0x6d, 0x81, 0xad, 0xaa, 0xd6, 0xd6, + 0xe7, 0x3e, 0x18, 0x5e, 0xd7, 0x73, 0xfa, 0x43, 0xcf, 0xc9, 0x5c, 0xa7, + 0x19, 0xa4, 0x3c, 0xb2, 0x1c, 0x1d, 0x0c, 0xf1, 0x2d, 0xfc, 0xe7, 0x6a, + 0x96, 0x5b, 0x19, 0x61, 0x22, 0xb0, 0x5a, 0xfa, 0xdc, 0x1a, 0x22, 0x48, + 0x3b, 0x78, 0x6f, 0xe2, 0x92, 0x91, 0x7a, 0xad, 0xbb, 0x1d, 0xed, 0x68, + 0x24, 0xd3, 0x23, 0x49, 0x92, 0x47, 0x82, 0xa7, 0x6d, 0x64, 0xdc, 0xdc, + 0x80, 0xdd, 0xc6, 0xb2, 0x03, 0x89, 0x1f, 0x48, 0x11, 0xed, 0xfc, 0x8a, + 0xc5, 0x4f, 0xb2, 0xa7, 0x7a, 0x9e, 0x9b, 0x87, 0xae, 0xe3, 0xea, 0x00, + 0xd3, 0xb5, 0x9a, 0x11, 0xba, 0x39, 0xd5, 0x4e, 0xf6, 0x90, 0xd3, 0x46, + 0xe3, 0x25, 0xc5, 0xe0, 0xc4, 0x81, 0xe4, 0x3c, 0x92, 0x52, 0x2a, 0x6a, + 0xad, 0xf4, 0x9b, 0x09, 0x35, 0x1d, 0xc3, 0x79, 0x74, 0xea, 0xdf, 0x05, + 0x27, 0xd2, 0xef, 0xb2, 0xd8, 0xd6, 0x1d, 0xed, 0x7d, 0x8d, 0x63, 0x60, + 0x09, 0xdb, 0x0e, 0xd7, 0xef, 0x42, 0x0f, 0xdd, 0x8a, 0xda, 0x49, 0x75, + 0x82, 0x4b, 0x1c, 0xf7, 0x72, 0x47, 0x70, 0x7c, 0x55, 0x8c, 0x77, 0x32, + 0xb6, 0x0a, 0x88, 0x86, 0xbd, 0xfb, 0x1a, 0xe6, 0xf6, 0xef, 0xc1, 0x49, + 0x4d, 0x61, 0x8f, 0x7d, 0xac, 0xae, 0xb6, 0x70, 0x0b, 0xb7, 0xbf, 0xc2, + 0x3f, 0x3b, 0xf0, 0x47, 0x75, 0x4c, 0xa0, 0x39, 0x95, 0x1d, 0xd7, 0x55, + 0x5b, 0x5e, 0xe2, 0x3c, 0x5d, 0x3e, 0xa0, 0xf9, 0x08, 0x56, 0x1c, 0x43, + 0x00, 0x68, 0x78, 0x24, 0x02, 0xd7, 0x11, 0x0e, 0x93, 0xbb, 0x53, 0xf8, + 0x26, 0xa6, 0x8f, 0x7f, 0xb7, 0xdc, 0xf9, 0x86, 0x09, 0xfa, 0x4e, 0xf3, + 0xf1, 0x49, 0x4e, 0x7d, 0xb5, 0xb2, 0xd6, 0xbb, 0x26, 0xb6, 0x90, 0xc1, + 0xad, 0x9b, 0x75, 0x73, 0x4f, 0x04, 0xc7, 0x82, 0x66, 0x57, 0x5d, 0x8e, + 0x70, 0xb1, 0xa7, 0x70, 0x04, 0x89, 0x3c, 0x03, 0x1a, 0x68, 0xae, 0xba, + 0x97, 0x62, 0x93, 0x76, 0x3c, 0x00, 0xf2, 0xe8, 0x67, 0x66, 0xbb, 0xf3, + 0x98, 0xe0, 0xaa, 0xda, 0xf6, 0x7a, 0x84, 0xbb, 0xf4, 0x76, 0x11, 0x2f, + 0x69, 0xec, 0x7c, 0x74, 0x49, 0x4d, 0x70, 0x1e, 0xd0, 0x60, 0xef, 0x78, + 0x27, 0x60, 0x8d, 0xd0, 0x01, 0xf3, 0xee, 0x9e, 0xf0, 0xd7, 0xb9, 0x96, + 0x53, 0x58, 0xf7, 0x68, 0xed, 0xbc, 0x0e, 0xff, 0x00, 0xea, 0x11, 0x5a, + 0x59, 0x5b, 0x58, 0xf7, 0xc8, 0x7e, 0xbb, 0xdd, 0xf2, 0xe6, 0x54, 0xd8, + 0x47, 0xa6, 0x19, 0x51, 0xd4, 0x8d, 0xe1, 0xc7, 0xe8, 0xcf, 0x91, 0x09, + 0x29, 0x05, 0x54, 0x3e, 0x86, 0xb9, 0xf3, 0xed, 0x2e, 0xd4, 0xbb, 0xe9, + 0x4b, 0x87, 0x65, 0x3b, 0x88, 0x7b, 0xcb, 0xb7, 0x13, 0x55, 0x70, 0x18, + 0x07, 0xd2, 0x93, 0xaf, 0x2a, 0x76, 0x43, 0xea, 0xb1, 0x84, 0x6e, 0x35, + 0xb9, 0xbb, 0xc8, 0xe3, 0x70, 0xf6, 0xe9, 0xf0, 0x08, 0x37, 0x90, 0x3d, + 0x46, 0xb0, 0x43, 0x5c, 0xe8, 0x2c, 0x3a, 0x4c, 0x7e, 0xe9, 0xec, 0x92, + 0x91, 0xdc, 0xf6, 0x34, 0xed, 0x6d, 0x45, 0xe0, 0x1d, 0xda, 0x71, 0xb8, + 0x77, 0x1f, 0xc5, 0x4a, 0x8b, 0x85, 0x43, 0x7b, 0x8e, 0xb2, 0x0b, 0x0c, + 0x72, 0x7c, 0x08, 0x4c, 0xe1, 0x15, 0xb9, 0xd5, 0xd8, 0xe6, 0x06, 0x88, + 0xd4, 0x6b, 0xa9, 0x8f, 0x9a, 0x23, 0x71, 0x9a, 0xea, 0x77, 0xb7, 0xda, + 0xe6, 0x38, 0x87, 0x81, 0xf9, 0xc4, 0x73, 0xf8, 0x24, 0xa4, 0x4d, 0xc8, + 0xb8, 0x9f, 0x4e, 0x9d, 0xed, 0x0e, 0x86, 0x92, 0x09, 0x6f, 0x6d, 0x77, + 0x78, 0xab, 0x57, 0xda, 0xeb, 0xdf, 0x4d, 0x76, 0xbc, 0x96, 0x54, 0x67, + 0x93, 0xac, 0x7c, 0x14, 0x1c, 0xd7, 0x35, 0xd3, 0x58, 0x05, 0xaf, 0xda, + 0x00, 0x3d, 0xa7, 0xc7, 0xe0, 0x82, 0xfa, 0xb2, 0x1c, 0x2d, 0x15, 0xb8, + 0xcc, 0x9d, 0xa0, 0x6b, 0x00, 0xe8, 0x92, 0x99, 0x5d, 0x45, 0x2e, 0x75, + 0x85, 0xe6, 0x43, 0xa4, 0x90, 0x0e, 0x92, 0x14, 0x37, 0xfe, 0xad, 0xb2, + 0x1b, 0x33, 0x11, 0xa4, 0x71, 0x1b, 0x53, 0x8a, 0x5d, 0x65, 0x62, 0x4f, + 0xd3, 0x69, 0x6b, 0x88, 0x22, 0x77, 0x37, 0x47, 0x15, 0x5f, 0xec, 0x83, + 0xfa, 0x3f, 0xa9, 0xae, 0xd9, 0x99, 0xf3, 0xe5, 0x25, 0x3f, 0xff, 0xd9 +}; +size_t demo_004_jpg_len = 27708; + +const uint8_t demo_005_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xef, 0xe5, 0x24, 0x2d, 0xc9, 0xc3, 0x92, 0x52, 0x44, + 0x94, 0x37, 0xa7, 0xdc, 0x92, 0x99, 0xa6, 0x4c, 0x0a, 0x74, 0x94, 0xba, + 0x1d, 0x97, 0x36, 0xbe, 0x79, 0x52, 0x7b, 0xc3, 0x18, 0x5c, 0x78, 0x0b, + 0x1f, 0x27, 0x25, 0xc0, 0x39, 0xc4, 0xeb, 0xa9, 0x27, 0xc9, 0x25, 0x2b, + 0x27, 0x31, 0x8d, 0x7e, 0xe3, 0xac, 0xac, 0xdc, 0xab, 0x2b, 0x75, 0xbb, + 0x5e, 0x60, 0x11, 0xf8, 0x2a, 0xb9, 0x59, 0x2e, 0x7d, 0x6f, 0x78, 0xec, + 0x44, 0x7c, 0x15, 0x7c, 0xdb, 0xbd, 0xb8, 0xf7, 0x03, 0xa3, 0x99, 0x1f, + 0x30, 0x61, 0x25, 0x36, 0x7e, 0xce, 0xd3, 0xfc, 0xdb, 0xb6, 0xbb, 0xcd, + 0x41, 0xd4, 0xd8, 0xd9, 0xf5, 0x29, 0x16, 0x78, 0xb9, 0xba, 0x1f, 0xbc, + 0x2c, 0xe7, 0x64, 0xda, 0x3d, 0x40, 0xd2, 0x43, 0x88, 0xe5, 0x56, 0x6f, + 0x51, 0xcb, 0x66, 0xad, 0x73, 0xa0, 0x72, 0x7b, 0x24, 0xa5, 0xb3, 0xf0, + 0xe8, 0xaa, 0xe3, 0x75, 0x60, 0xb7, 0x77, 0xd3, 0x04, 0x99, 0x95, 0x4d, + 0xc2, 0xbd, 0xbb, 0x89, 0x8d, 0xbd, 0xd5, 0xcb, 0x7a, 0xa5, 0xb6, 0xd4, + 0xfa, 0xae, 0x1e, 0xd3, 0xf9, 0xc0, 0x6a, 0x15, 0x3b, 0x2c, 0xa6, 0xa1, + 0xea, 0x4e, 0xe7, 0x01, 0xa3, 0xc8, 0x8d, 0xbf, 0xd4, 0x1f, 0xc5, 0x25, + 0x28, 0x5b, 0xe8, 0x10, 0xf0, 0xd2, 0xc8, 0xd5, 0xad, 0xe0, 0xfc, 0x5d, + 0xe1, 0xf0, 0x56, 0x19, 0x9f, 0x46, 0x4e, 0x3b, 0x9d, 0x31, 0x73, 0x38, + 0x6f, 0x92, 0xa1, 0x5d, 0x2f, 0xcd, 0x69, 0xb0, 0xcd, 0x55, 0x13, 0x00, + 0x89, 0x2e, 0x71, 0xf9, 0xaa, 0xc6, 0x91, 0x4e, 0x41, 0x60, 0x78, 0xda, + 0xc8, 0x8f, 0x19, 0x3e, 0x29, 0x29, 0xd0, 0x60, 0x00, 0x4f, 0x9c, 0xa7, + 0x78, 0x69, 0x77, 0xc7, 0x58, 0x51, 0x76, 0x46, 0x38, 0x12, 0xd7, 0x8d, + 0x62, 0x47, 0x82, 0x1f, 0xda, 0x28, 0x9f, 0xe7, 0x02, 0x4a, 0x5e, 0xc6, + 0x8d, 0x84, 0x2c, 0xfb, 0x6a, 0x63, 0xde, 0x49, 0xed, 0xa0, 0xf8, 0x05, + 0x6a, 0xcc, 0x9a, 0x1d, 0xa0, 0x78, 0xd1, 0x57, 0x2f, 0x69, 0x71, 0x82, + 0x35, 0x3f, 0x82, 0x4a, 0x67, 0xb1, 0xa1, 0xb0, 0x0c, 0x00, 0x9d, 0xcc, + 0x1f, 0x25, 0x03, 0x6b, 0x5b, 0x23, 0x77, 0x8a, 0x5e, 0xbd, 0x7e, 0x29, + 0x29, 0x20, 0x63, 0x46, 0x9c, 0xa8, 0xe4, 0xb4, 0x7a, 0x4c, 0x31, 0xdf, + 0x54, 0xc2, 0xe6, 0x9f, 0x15, 0x27, 0x10, 0xf6, 0x80, 0x67, 0x6f, 0x70, + 0x92, 0x90, 0x54, 0xca, 0x77, 0x02, 0x74, 0x2a, 0xed, 0x75, 0xd4, 0xe7, + 0xb6, 0x4c, 0x46, 0x8a, 0xad, 0x6f, 0xf4, 0x49, 0x96, 0x87, 0x03, 0xd8, + 0xa2, 0xee, 0x69, 0x7e, 0xe6, 0x02, 0x1b, 0xa6, 0xe6, 0x9e, 0xd2, 0x92, + 0x9d, 0x6e, 0x97, 0x8f, 0x5b, 0x4d, 0x8e, 0x02, 0x37, 0x0b, 0x1a, 0x7c, + 0xc4, 0x05, 0x3a, 0x2e, 0x65, 0x61, 0xa1, 0xbc, 0xa5, 0xd1, 0xc3, 0x8e, + 0xf8, 0x3c, 0x3b, 0xbf, 0x9b, 0x55, 0x50, 0x08, 0x7e, 0x9d, 0x89, 0xfb, + 0x82, 0x4a, 0x7a, 0x0c, 0x3e, 0xa0, 0x1b, 0x0e, 0x71, 0x00, 0x8e, 0x21, + 0x6e, 0xe1, 0xfd, 0x62, 0x60, 0x7e, 0xcb, 0x8e, 0xe6, 0x78, 0xf7, 0x5c, + 0x33, 0x6c, 0x25, 0xc0, 0x0f, 0x9a, 0xb1, 0x5d, 0x8e, 0xda, 0x75, 0xd7, + 0xb2, 0x4a, 0x7d, 0x3a, 0xbb, 0x19, 0x6b, 0x1b, 0x65, 0x67, 0x73, 0x1c, + 0x24, 0x10, 0xa6, 0xb9, 0x4f, 0xaa, 0x5d, 0x55, 0xce, 0x79, 0xc3, 0xb4, + 0xfb, 0x5f, 0xad, 0x7f, 0xd6, 0x03, 0x51, 0xf3, 0x5d, 0x5a, 0x4a, 0x52, + 0x49, 0x92, 0x94, 0x94, 0xba, 0x49, 0xa5, 0x29, 0x49, 0x4b, 0xa4, 0x9a, + 0x52, 0x94, 0x94, 0x81, 0x3a, 0x49, 0xd2, 0x52, 0xc9, 0xc2, 0x65, 0x36, + 0x80, 0x92, 0x97, 0x0a, 0x49, 0xa0, 0x27, 0x49, 0x4e, 0x76, 0x7e, 0x4c, + 0xdc, 0x31, 0xda, 0x7e, 0x88, 0xdd, 0x60, 0xf8, 0xf0, 0xb1, 0x3a, 0x8e, + 0x41, 0x66, 0x25, 0xce, 0xf1, 0xf6, 0xb7, 0xf8, 0xa6, 0x39, 0x5b, 0xfa, + 0x96, 0x75, 0xc4, 0xe8, 0xeb, 0x8d, 0x2c, 0xf8, 0x56, 0xdd, 0x55, 0x3e, + 0xac, 0xfd, 0xb8, 0x1b, 0x0e, 0xbe, 0xed, 0xc9, 0x29, 0xae, 0x1c, 0x4f, + 0x4f, 0xb1, 0xde, 0x23, 0xf0, 0x08, 0x4e, 0x3e, 0xa7, 0x4b, 0xc7, 0x77, + 0x81, 0x70, 0x3f, 0x27, 0x24, 0x2c, 0xff, 0x00, 0x25, 0x90, 0x3c, 0x76, + 0x9f, 0x9a, 0x6c, 0x70, 0x5f, 0xd2, 0xeb, 0x68, 0xfc, 0xdb, 0x5c, 0x0f, + 0xc3, 0x42, 0x92, 0x9a, 0xaf, 0x13, 0x68, 0x6c, 0xc6, 0xee, 0x49, 0xf3, + 0x56, 0x6d, 0xc7, 0xaa, 0xbc, 0x7a, 0x88, 0x13, 0x0f, 0x82, 0x7c, 0x67, + 0x45, 0x52, 0xd2, 0x06, 0x43, 0x5d, 0x33, 0xdd, 0x68, 0xe4, 0x3b, 0xd4, + 0xc6, 0x70, 0x6f, 0xe6, 0x89, 0x07, 0xe1, 0xaa, 0x4a, 0x4c, 0xec, 0x6c, + 0x7d, 0xec, 0x3b, 0x41, 0x0e, 0x86, 0xf1, 0xdf, 0xc5, 0x73, 0xfd, 0x6b, + 0x04, 0x51, 0x96, 0xca, 0x29, 0x23, 0xd3, 0xb5, 0xd2, 0xd6, 0x9d, 0x43, + 0x27, 0xe9, 0x42, 0xdf, 0xab, 0x20, 0x3f, 0x15, 0xb6, 0x81, 0xee, 0x6b, + 0x37, 0xfc, 0xc0, 0x58, 0x59, 0x56, 0xba, 0xc6, 0x3f, 0x22, 0xc2, 0x26, + 0x08, 0xac, 0x7c, 0x79, 0x29, 0x29, 0xcd, 0x7b, 0x4e, 0xfb, 0x1b, 0x4d, + 0x8f, 0x68, 0x68, 0x9d, 0x1c, 0x63, 0x98, 0x08, 0x2c, 0xad, 0xd5, 0xbf, + 0x5e, 0x4f, 0x33, 0xdd, 0x58, 0x00, 0xb5, 0xb6, 0x38, 0xfd, 0x27, 0x16, + 0x0f, 0xbf, 0xdd, 0x08, 0xae, 0x6e, 0xe6, 0xcc, 0x70, 0x92, 0x9a, 0xef, + 0xa9, 0xb2, 0x50, 0x4d, 0x60, 0x1f, 0xf6, 0xab, 0xa5, 0xa0, 0xc4, 0x20, + 0xd8, 0xcf, 0x74, 0x0f, 0x92, 0x4a, 0x6b, 0x0a, 0xc0, 0xf9, 0x79, 0x95, + 0x2b, 0x31, 0xdd, 0x5b, 0xda, 0x08, 0x12, 0x44, 0x8d, 0x7c, 0x54, 0xf5, + 0x12, 0x3b, 0xf7, 0x45, 0xbe, 0x3f, 0x42, 0xe1, 0xf9, 0xc0, 0xbb, 0xe1, + 0xf9, 0xa4, 0x7d, 0xe1, 0x25, 0x35, 0x0b, 0x08, 0x20, 0x91, 0xca, 0x90, + 0x6e, 0x9f, 0xec, 0x53, 0xb0, 0x6a, 0xd2, 0x74, 0x1c, 0x24, 0x35, 0x49, + 0x4a, 0x60, 0x3e, 0x28, 0x92, 0x7b, 0x28, 0xb4, 0x76, 0x0a, 0x70, 0x92, + 0x96, 0x89, 0x29, 0xeb, 0x71, 0x06, 0x4f, 0xc0, 0xa6, 0x4e, 0x47, 0xbb, + 0xe2, 0x92, 0x9d, 0x7e, 0x9a, 0x5c, 0x6d, 0x70, 0x6f, 0x12, 0xcf, 0xc0, + 0x20, 0x9f, 0xa4, 0xe2, 0x3c, 0x48, 0xfc, 0x51, 0xfa, 0x13, 0x66, 0xbb, + 0x6c, 0x77, 0x22, 0x3f, 0x22, 0xaf, 0x4c, 0x97, 0x13, 0xe1, 0xac, 0x7c, + 0x52, 0x52, 0x56, 0x30, 0xb4, 0x71, 0xee, 0x2a, 0x7b, 0x61, 0x8e, 0x3e, + 0x4a, 0x4d, 0x6e, 0xb2, 0x4a, 0x2d, 0xec, 0xdb, 0x8e, 0x5d, 0xd8, 0x8d, + 0x0a, 0x4a, 0x5b, 0xa7, 0xe4, 0xbb, 0x17, 0x22, 0xbb, 0x18, 0x75, 0x69, + 0x0e, 0x6f, 0x6d, 0x5b, 0xee, 0x85, 0xe9, 0x74, 0xda, 0xdb, 0xa9, 0x65, + 0xcc, 0xd5, 0xb6, 0x34, 0x39, 0xbf, 0x02, 0x25, 0x79, 0x53, 0x9d, 0xb4, + 0x32, 0xcf, 0xdd, 0x70, 0x3f, 0x25, 0xdf, 0x7d, 0x56, 0xcc, 0x17, 0xf4, + 0xff, 0x00, 0x40, 0x99, 0x7d, 0x0e, 0x20, 0x0f, 0xe4, 0x1d, 0x5a, 0x92, + 0x9d, 0xa4, 0xc9, 0xd4, 0x4a, 0x4a, 0x54, 0xa5, 0x29, 0x92, 0x49, 0x4c, + 0x93, 0x24, 0x92, 0x4a, 0x60, 0x12, 0x48, 0x05, 0x20, 0x12, 0x53, 0x14, + 0xe2, 0x53, 0xc0, 0x48, 0x04, 0x94, 0xc8, 0x27, 0x55, 0xf3, 0xb3, 0x29, + 0xc0, 0xc3, 0xb7, 0x32, 0xe0, 0x4d, 0x74, 0x89, 0x21, 0xa2, 0x5c, 0x7b, + 0x00, 0x07, 0xc5, 0x73, 0xd4, 0xe7, 0xf5, 0x5c, 0xf7, 0xfd, 0xb9, 0xc5, + 0xd8, 0x94, 0xb8, 0x45, 0x38, 0xe5, 0xc4, 0x3b, 0x6f, 0xef, 0x39, 0xa3, + 0x83, 0xf1, 0x49, 0x4e, 0x3b, 0x9c, 0x5a, 0xfb, 0x58, 0x09, 0x96, 0xd8, + 0xf9, 0xfe, 0xb5, 0x96, 0x12, 0x7f, 0xe8, 0x84, 0x3c, 0x9c, 0x8f, 0xb5, + 0x62, 0x82, 0x0c, 0xe8, 0x47, 0xdd, 0xa2, 0x0f, 0x57, 0x75, 0xd8, 0xcc, + 0xbf, 0x76, 0x8f, 0xb6, 0xe0, 0x64, 0xf7, 0x69, 0x0a, 0x95, 0xaf, 0x7d, + 0x34, 0xe3, 0xb7, 0xbb, 0xd8, 0x5d, 0xf7, 0xb8, 0x98, 0x49, 0x4d, 0x8a, + 0x1e, 0x4f, 0x4f, 0xb1, 0xbd, 0xda, 0x41, 0x3f, 0x91, 0x59, 0xe9, 0x8e, + 0x9e, 0x99, 0x74, 0x9d, 0x19, 0x61, 0x24, 0xf9, 0x10, 0x0a, 0xa9, 0x88, + 0xef, 0x52, 0x8b, 0x9e, 0xde, 0x1c, 0x36, 0x96, 0xf9, 0xca, 0x37, 0x48, + 0x2e, 0x38, 0xd9, 0xb4, 0x8e, 0x43, 0x99, 0xa7, 0xde, 0x12, 0x53, 0x5b, + 0x21, 0xdb, 0x9d, 0x31, 0x10, 0xee, 0x0f, 0x82, 0xbb, 0x45, 0x9b, 0x80, + 0x61, 0xe1, 0xc2, 0x08, 0x55, 0x32, 0x5a, 0x37, 0x10, 0x7e, 0x91, 0xd0, + 0x47, 0x92, 0x95, 0x05, 0xc1, 0x80, 0x8e, 0xc7, 0x53, 0xdd, 0x25, 0x36, + 0xb0, 0xb4, 0xaa, 0xcc, 0x77, 0x72, 0xc7, 0x16, 0xfc, 0x8a, 0xc7, 0xb9, + 0x8e, 0x36, 0xb7, 0x1d, 0xe3, 0x5d, 0x1b, 0xff, 0x00, 0x4a, 0x4f, 0xe0, + 0xb5, 0x58, 0x43, 0x73, 0x88, 0xe0, 0x5a, 0xcd, 0xdf, 0x36, 0xac, 0xbb, + 0x5c, 0xe7, 0xdd, 0x7d, 0xcd, 0xf7, 0x3b, 0xdc, 0x1b, 0x1e, 0x2e, 0x3b, + 0x47, 0xe0, 0x92, 0x9a, 0x8e, 0x33, 0x59, 0xb2, 0x34, 0x7d, 0xa4, 0x8f, + 0x83, 0x74, 0x08, 0xcd, 0x9d, 0xe4, 0x72, 0x0f, 0x64, 0x37, 0x01, 0xe8, + 0x35, 0x83, 0xfc, 0x18, 0x13, 0x1a, 0xea, 0x4c, 0xa2, 0x58, 0xcb, 0x18, + 0xe6, 0xbc, 0x88, 0x0e, 0x00, 0x13, 0x3a, 0x4f, 0x82, 0x4a, 0x60, 0x49, + 0x68, 0x93, 0xd8, 0xc2, 0x6b, 0x3d, 0xdf, 0x2d, 0x52, 0xb9, 0xa5, 0xae, + 0x88, 0xe4, 0xa7, 0x34, 0xda, 0x5a, 0x2c, 0x8d, 0x1d, 0xc7, 0x8c, 0x24, + 0xa4, 0x2f, 0x60, 0x3e, 0xe1, 0xa1, 0x50, 0x22, 0x39, 0xe5, 0x58, 0xda, + 0xe0, 0xe6, 0xcb, 0x75, 0x06, 0x35, 0x9f, 0xee, 0x4e, 0xec, 0x79, 0x27, + 0x78, 0x2d, 0x6c, 0xc4, 0xf2, 0x3f, 0x06, 0xa4, 0xa6, 0xb5, 0xba, 0xeb, + 0xe6, 0x0a, 0x60, 0x64, 0xc2, 0x3d, 0xe1, 0xcd, 0x60, 0x65, 0x63, 0xf4, + 0x64, 0x6e, 0x92, 0x20, 0xca, 0x13, 0x40, 0x89, 0x49, 0x4b, 0xb5, 0x3e, + 0x89, 0x43, 0x47, 0x8e, 0xa9, 0x01, 0x2e, 0x88, 0xfb, 0xd2, 0x52, 0xb4, + 0x94, 0x9d, 0x10, 0x0f, 0xc9, 0x23, 0xf0, 0x80, 0xa3, 0x61, 0xda, 0xdf, + 0x29, 0xd5, 0x25, 0x3b, 0x5d, 0x21, 0xe6, 0xbc, 0x3b, 0x8f, 0x89, 0xd3, + 0xee, 0x59, 0x6c, 0xc9, 0x35, 0x37, 0x65, 0x5a, 0xb8, 0x99, 0x7b, 0x8f, + 0xe4, 0x5a, 0x1d, 0x31, 0xa5, 0xd8, 0x6f, 0x8d, 0x46, 0xe7, 0x4f, 0xdc, + 0xb3, 0xa9, 0x6b, 0x37, 0x13, 0xc3, 0x5b, 0xca, 0x4a, 0x4e, 0x32, 0x72, + 0x03, 0x4b, 0xec, 0x74, 0x00, 0x11, 0x31, 0xae, 0x7b, 0xb1, 0xee, 0x6d, + 0x8e, 0x27, 0x78, 0x0e, 0xd7, 0xc6, 0x55, 0x0b, 0xf2, 0x0d, 0xa4, 0x35, + 0xba, 0x30, 0x7e, 0x2a, 0xe5, 0x00, 0xfa, 0x4f, 0x1f, 0xc9, 0x1f, 0xde, + 0x92, 0x93, 0x1f, 0x75, 0x2e, 0x6c, 0xea, 0x78, 0xfc, 0xab, 0xa4, 0xfa, + 0x9f, 0x97, 0xe9, 0xe7, 0xb2, 0x82, 0x74, 0xbd, 0x85, 0xbf, 0xda, 0x68, + 0xdd, 0xfc, 0x17, 0x30, 0xc7, 0xcd, 0x61, 0xfe, 0x1a, 0xfd, 0xca, 0xef, + 0x40, 0xcc, 0xf4, 0x7a, 0x95, 0x39, 0x2f, 0x1f, 0xa3, 0xa9, 0xdb, 0x9c, + 0x47, 0xee, 0x99, 0x04, 0x7c, 0x52, 0x53, 0xea, 0x29, 0x8a, 0xa9, 0x83, + 0xd5, 0xb0, 0xb3, 0xe4, 0x50, 0xff, 0x00, 0x78, 0xd4, 0xd6, 0xed, 0x1d, + 0x1e, 0x2a, 0xe1, 0x49, 0x4c, 0x12, 0x4e, 0x53, 0x24, 0xa5, 0x25, 0x29, + 0x92, 0x49, 0x4b, 0x02, 0xa4, 0xa0, 0x9c, 0x14, 0x94, 0xca, 0x14, 0x82, + 0x8a, 0x90, 0x49, 0x48, 0xf2, 0xa8, 0xfb, 0x4e, 0x35, 0xb4, 0x6e, 0x2d, + 0xf5, 0x1a, 0x5a, 0x1c, 0x39, 0x69, 0x3c, 0x11, 0xf0, 0x5c, 0xe5, 0x16, + 0x90, 0x1d, 0x4b, 0xd8, 0xf6, 0xba, 0x92, 0x58, 0x4b, 0xb5, 0x97, 0x37, + 0x42, 0x57, 0x50, 0xb9, 0xaf, 0xac, 0x57, 0xd5, 0x8b, 0x9f, 0x48, 0x02, + 0x5f, 0x90, 0x21, 0xcd, 0x1c, 0x83, 0xf4, 0x5a, 0xef, 0x9f, 0xf0, 0x49, + 0x4e, 0x6f, 0x52, 0xc7, 0x66, 0x55, 0x46, 0xbb, 0xc4, 0xb0, 0xfd, 0x12, + 0x3e, 0x90, 0xf3, 0x0b, 0x9b, 0xea, 0x61, 0xed, 0x2c, 0x07, 0x50, 0xd8, + 0x6b, 0x08, 0xd7, 0x40, 0x21, 0x74, 0x76, 0xdf, 0xb9, 0xa0, 0x82, 0x0b, + 0x0f, 0xe7, 0x0d, 0x65, 0x64, 0xe7, 0xd7, 0x5d, 0x8d, 0x73, 0x49, 0xd3, + 0xc7, 0xba, 0x4a, 0x6b, 0x74, 0xeb, 0xc5, 0x16, 0xba, 0x93, 0xf4, 0x5c, + 0xc9, 0x71, 0x3e, 0x3c, 0xab, 0xdd, 0x14, 0x1f, 0x5b, 0x2c, 0x91, 0xa3, + 0xc3, 0x5d, 0x1f, 0xda, 0x23, 0xf8, 0xac, 0x7a, 0xdc, 0x1b, 0x94, 0x37, + 0xe8, 0x03, 0x4c, 0xf9, 0xc0, 0x95, 0xa9, 0xf5, 0x7a, 0xff, 0x00, 0x56, + 0xec, 0x88, 0x33, 0x15, 0xe9, 0x3f, 0xd6, 0x49, 0x4c, 0x2e, 0xa2, 0xe7, + 0xde, 0xe0, 0xc1, 0x24, 0x19, 0x85, 0x62, 0xba, 0x0d, 0x6c, 0xb0, 0x59, + 0x0d, 0x2e, 0x6e, 0xe6, 0xb6, 0x7c, 0x10, 0xb2, 0x33, 0xee, 0xc7, 0xb4, + 0xfa, 0x71, 0xa9, 0xd4, 0xc7, 0x6f, 0x8a, 0x8e, 0x4d, 0x87, 0x7b, 0x4b, + 0xb5, 0x24, 0x73, 0xda, 0x0a, 0x4a, 0x5a, 0xc0, 0xf1, 0x5b, 0x1e, 0xff, + 0x00, 0x6d, 0x8d, 0x0e, 0x1f, 0x22, 0x35, 0xd4, 0x2a, 0x55, 0xe4, 0x3b, + 0x19, 0xb5, 0xbd, 0xac, 0x0f, 0x2f, 0x71, 0xdc, 0x27, 0x69, 0x86, 0x81, + 0x3b, 0x4f, 0x62, 0xac, 0xee, 0x71, 0xc1, 0x2d, 0x70, 0x1c, 0x12, 0xd7, + 0x02, 0x66, 0x07, 0xb4, 0x82, 0x0f, 0x98, 0x54, 0xee, 0x79, 0x6b, 0xd8, + 0xc0, 0xd9, 0x06, 0xa9, 0x81, 0xfc, 0xa7, 0x4a, 0x4a, 0x6c, 0x3f, 0x33, + 0xa7, 0x65, 0x07, 0x11, 0x61, 0xaa, 0xc7, 0x76, 0xb0, 0x41, 0xf9, 0xa3, + 0xb8, 0xe1, 0xfa, 0x41, 0x97, 0x64, 0x54, 0xd6, 0xc0, 0x92, 0x5c, 0xdf, + 0xc8, 0xb0, 0x72, 0xe9, 0x71, 0x8b, 0x36, 0xed, 0xdc, 0x78, 0x55, 0x6c, + 0xa9, 0xcd, 0x82, 0x7b, 0xa4, 0xa7, 0xa0, 0xc1, 0x6b, 0x59, 0x9b, 0xea, + 0xb1, 0xed, 0xbe, 0xaa, 0xa7, 0x6b, 0x9a, 0x67, 0x74, 0xb4, 0x80, 0x99, + 0xce, 0x68, 0x7d, 0x6c, 0x61, 0xfd, 0x23, 0x1d, 0xb4, 0x82, 0x79, 0x0e, + 0x12, 0x27, 0xee, 0x58, 0xb8, 0xd7, 0xba, 0x90, 0x40, 0xde, 0x3f, 0xe2, + 0xdd, 0xb6, 0x7e, 0x28, 0xb4, 0xe7, 0xd9, 0x41, 0x3f, 0x67, 0xa8, 0x7a, + 0x8e, 0xff, 0x00, 0x08, 0xf3, 0xb9, 0xc9, 0x29, 0xde, 0x35, 0xd9, 0x5d, + 0x53, 0x61, 0x04, 0x93, 0x33, 0xc0, 0x2a, 0xb6, 0xc7, 0x92, 0x75, 0x33, + 0x3a, 0xb8, 0x44, 0x42, 0xc1, 0xbe, 0xdc, 0xab, 0x9f, 0xbe, 0xe7, 0xb9, + 0xce, 0x3e, 0x25, 0x3b, 0x7d, 0x78, 0xdb, 0xbd, 0xdb, 0x7c, 0x25, 0x25, + 0x37, 0x6e, 0xbc, 0x1c, 0x81, 0x58, 0x32, 0xd6, 0x68, 0xe8, 0xd4, 0x49, + 0xfe, 0xe5, 0x16, 0x8e, 0x60, 0x69, 0xae, 0x88, 0x78, 0xd5, 0x7b, 0x8e, + 0x9a, 0xc0, 0x2a, 0xcd, 0x75, 0x82, 0xe2, 0x3b, 0xa4, 0xa6, 0x2e, 0x00, + 0x8f, 0x05, 0x08, 0x3b, 0x9b, 0xf1, 0x08, 0xef, 0xa8, 0xb1, 0xa2, 0x50, + 0xdc, 0x20, 0x8f, 0x22, 0x3f, 0x2a, 0x4a, 0x62, 0xf0, 0x47, 0x2a, 0x0f, + 0xd5, 0x8e, 0x1e, 0x48, 0xb6, 0x83, 0xa1, 0xf8, 0x21, 0x59, 0xf4, 0x5c, + 0x92, 0x9d, 0x9e, 0x88, 0x1a, 0x7a, 0x65, 0x87, 0xbe, 0xe7, 0xcf, 0xc8, + 0x05, 0x84, 0x5e, 0xe3, 0x5e, 0x87, 0x42, 0x75, 0x0b, 0xa0, 0xfa, 0xaf, + 0x43, 0xee, 0xe9, 0xb9, 0x40, 0xb4, 0xc7, 0xbb, 0xd3, 0x3d, 0x89, 0x2d, + 0x82, 0xb0, 0x32, 0x1a, 0xda, 0xc0, 0x60, 0x90, 0xf2, 0x75, 0x07, 0x4d, + 0x46, 0x89, 0x29, 0x8b, 0x04, 0xb8, 0x42, 0xd2, 0xa1, 0xc5, 0xac, 0x11, + 0xaf, 0x8a, 0xcb, 0x63, 0xcc, 0xc7, 0x1e, 0x4a, 0xe3, 0x1e, 0xe6, 0xb4, + 0x34, 0x6a, 0xe7, 0x7d, 0x10, 0x12, 0x52, 0x72, 0xe7, 0x3e, 0xd1, 0x4d, + 0x7c, 0x34, 0xc9, 0x3d, 0xa0, 0xf8, 0xab, 0x75, 0xb1, 0xb5, 0x01, 0x5b, + 0x74, 0x1c, 0xa1, 0xe2, 0xd2, 0xd6, 0x08, 0x1a, 0xb9, 0xc7, 0xdc, 0x7c, + 0xd1, 0x2f, 0xb9, 0xe7, 0xf4, 0x35, 0xc4, 0xfe, 0x7b, 0xfc, 0x3e, 0x09, + 0x29, 0x36, 0x2e, 0x7b, 0xf1, 0x33, 0x69, 0xb2, 0xb7, 0x7b, 0xeb, 0x78, + 0x20, 0x0f, 0x09, 0xd4, 0x7c, 0xd7, 0xa8, 0x83, 0x22, 0x7c, 0x57, 0x9d, + 0xfd, 0x55, 0xe9, 0x94, 0xe4, 0xf5, 0x66, 0x35, 0xe3, 0x7b, 0x28, 0x06, + 0xe7, 0x93, 0xf9, 0xc5, 0xa4, 0x6d, 0x1f, 0x79, 0x5e, 0x88, 0x52, 0x52, + 0xc5, 0x45, 0x3c, 0x94, 0x92, 0x53, 0x12, 0x99, 0x4d, 0x32, 0x4a, 0x46, + 0x9d, 0x32, 0x74, 0x94, 0xb8, 0x2a, 0x40, 0xa8, 0x29, 0x04, 0x94, 0x90, + 0x15, 0x95, 0xd6, 0xb1, 0x71, 0x5d, 0x65, 0x59, 0x2f, 0x60, 0x39, 0x0c, + 0x05, 0xac, 0x77, 0xf2, 0x56, 0xa0, 0x58, 0x1d, 0x53, 0x2b, 0xd4, 0xc8, + 0x70, 0x07, 0xda, 0xdf, 0x68, 0xf9, 0x24, 0xa7, 0x9b, 0xea, 0x20, 0x61, + 0xbe, 0xb6, 0x56, 0xdd, 0xb8, 0xee, 0x9d, 0x07, 0x01, 0xd3, 0x2a, 0x8d, + 0xa7, 0x70, 0x2f, 0xf0, 0x1e, 0xe5, 0xb7, 0x99, 0x5b, 0x2d, 0xa5, 0xcd, + 0x70, 0x04, 0x15, 0xce, 0xbf, 0x7d, 0x36, 0x1a, 0xce, 0xad, 0x3a, 0x0f, + 0x82, 0x4a, 0x6a, 0xe4, 0x41, 0xf7, 0x0f, 0xa4, 0x3f, 0x22, 0xb5, 0xf5, + 0x5d, 0xd1, 0x9b, 0x73, 0x3b, 0x1a, 0x88, 0xff, 0x00, 0xa4, 0xd5, 0x45, + 0xc4, 0xc1, 0x95, 0x6b, 0xea, 0xfb, 0xc5, 0x7d, 0x59, 0xa3, 0xb5, 0xac, + 0x73, 0x7e, 0x71, 0xbb, 0xf8, 0x24, 0xa6, 0xc6, 0x6d, 0x7b, 0x6e, 0x7b, + 0x4f, 0x2d, 0x33, 0xf7, 0xa7, 0x73, 0xbd, 0x6c, 0x61, 0xaf, 0xba, 0xa2, + 0x64, 0x77, 0x80, 0x11, 0xfa, 0xa4, 0x36, 0xf7, 0x4e, 0x92, 0x75, 0x54, + 0xeb, 0x6b, 0xb7, 0x0d, 0x63, 0x70, 0x23, 0xef, 0x05, 0x25, 0x31, 0xae, + 0xe6, 0xbb, 0x11, 0xd5, 0x8f, 0xa6, 0xc7, 0x1d, 0x7c, 0x9d, 0xaa, 0x13, + 0xf5, 0xea, 0x25, 0x91, 0x21, 0x8c, 0x0c, 0xfb, 0x82, 0x86, 0x35, 0x6f, + 0xdf, 0x53, 0x4f, 0xf8, 0x47, 0xc4, 0x7c, 0x00, 0xfe, 0xf5, 0x2a, 0x5c, + 0x1f, 0xd4, 0xde, 0xf8, 0xd0, 0x97, 0x7e, 0x44, 0x94, 0xd8, 0xbb, 0x1c, + 0x58, 0xe6, 0xb6, 0x78, 0x82, 0x55, 0x1c, 0xea, 0x58, 0xd7, 0x86, 0xb7, + 0x50, 0xb6, 0x3d, 0x3f, 0x79, 0x3e, 0x21, 0x66, 0xe7, 0x37, 0xf4, 0x92, + 0x38, 0x94, 0x94, 0xd3, 0x6d, 0x20, 0x36, 0x54, 0xab, 0xa4, 0x18, 0x31, + 0xa2, 0x36, 0xd8, 0x6e, 0x9d, 0xd4, 0xa8, 0x69, 0x0e, 0xf9, 0xca, 0x4a, + 0x56, 0x46, 0x18, 0x0d, 0x07, 0xef, 0x55, 0xc5, 0x7a, 0xc7, 0x75, 0xa7, + 0x7b, 0xda, 0xe2, 0xd6, 0x91, 0xcf, 0xe0, 0x83, 0x75, 0x2c, 0x35, 0x8b, + 0x18, 0x75, 0x1f, 0x24, 0x94, 0xd5, 0xac, 0x43, 0xb4, 0xe7, 0x6f, 0xf1, + 0x56, 0x6a, 0xa8, 0xb9, 0xc4, 0xf3, 0x3f, 0xc1, 0x57, 0xad, 0xbe, 0xe1, + 0xde, 0x66, 0x27, 0xe2, 0x16, 0x86, 0x18, 0x06, 0xc8, 0x03, 0x41, 0xa7, + 0x84, 0x4a, 0x4a, 0x6b, 0x58, 0x3f, 0x34, 0xf7, 0x43, 0xb5, 0x9b, 0x5a, + 0x3c, 0x64, 0x7e, 0x55, 0x69, 0xd5, 0x4d, 0x8e, 0x27, 0x81, 0xc2, 0x15, + 0xcc, 0x21, 0xc0, 0x1d, 0x75, 0x68, 0x1f, 0x7a, 0x4a, 0x41, 0x6c, 0x10, + 0x16, 0xb7, 0x4a, 0xfa, 0xb0, 0x73, 0xb1, 0xfe, 0xdb, 0x96, 0xf3, 0x55, + 0x04, 0x8d, 0x8c, 0x02, 0x5c, 0xe6, 0xf1, 0xb8, 0xf8, 0x05, 0x9d, 0x5b, + 0x2a, 0xb7, 0xa8, 0x63, 0x51, 0x74, 0xfa, 0x56, 0xd8, 0xd6, 0xbf, 0x6f, + 0x30, 0x4c, 0x2f, 0x48, 0xc7, 0xa9, 0x8d, 0x68, 0xaf, 0x68, 0xd9, 0x1b, + 0x36, 0x76, 0xdb, 0x10, 0x07, 0xdc, 0x92, 0x9c, 0xdc, 0x2e, 0x9c, 0xcc, + 0x6a, 0xfe, 0xcf, 0x00, 0x06, 0xfd, 0x10, 0xd1, 0x0d, 0x70, 0x1d, 0xd7, + 0x0b, 0xd7, 0xb1, 0x2c, 0xc5, 0xea, 0x57, 0x57, 0x7b, 0x76, 0x6f, 0x71, + 0x7d, 0x47, 0xb3, 0x9a, 0x4f, 0x21, 0x7a, 0x25, 0xd8, 0xe6, 0xbd, 0xb4, + 0x97, 0xbb, 0xd3, 0x79, 0xd1, 0xed, 0x30, 0x43, 0x5b, 0xa9, 0xd7, 0xc7, + 0xb2, 0xc7, 0xfa, 0xc5, 0x82, 0xfe, 0xa1, 0xd2, 0x2e, 0xb2, 0xc6, 0x83, + 0x91, 0x82, 0x7d, 0x4a, 0x6c, 0x03, 0x57, 0x57, 0xf9, 0xc1, 0xdf, 0x24, + 0x94, 0xf0, 0x76, 0x40, 0xb6, 0x47, 0x04, 0x02, 0xaf, 0x63, 0x36, 0x21, + 0xc4, 0x7b, 0x8f, 0x7f, 0x00, 0xa9, 0x1d, 0x5d, 0x59, 0xf2, 0x2a, 0xe5, + 0x4f, 0xe1, 0x25, 0x36, 0xf7, 0x6d, 0x88, 0x22, 0x4f, 0x1f, 0xde, 0x9d, + 0xd6, 0x32, 0xb6, 0xf3, 0xa9, 0xef, 0xde, 0x7c, 0x55, 0x37, 0xe4, 0x06, + 0xbb, 0x48, 0x27, 0xb0, 0xf8, 0x22, 0x52, 0x1d, 0x75, 0x9b, 0xdf, 0xcf, + 0x20, 0x0e, 0x12, 0x53, 0xe8, 0x5f, 0x53, 0x7a, 0x69, 0xc7, 0xc1, 0xfb, + 0x75, 0xa3, 0xf4, 0xb9, 0x40, 0x16, 0x83, 0xda, 0xb1, 0xf4, 0x7e, 0xfe, + 0x57, 0x44, 0xb0, 0xbe, 0xa8, 0x66, 0xfa, 0xfd, 0x33, 0xec, 0xee, 0x32, + 0xfc, 0x63, 0xb7, 0xfb, 0x2e, 0xd5, 0xab, 0x75, 0x25, 0x2c, 0x53, 0x27, + 0x29, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0x8d, 0x24, 0x92, 0x49, 0x4b, + 0xa7, 0x01, 0x32, 0x93, 0x52, 0x53, 0x0c, 0xab, 0x7d, 0x1c, 0x6b, 0x2c, + 0xf0, 0x1a, 0x7c, 0x4e, 0x81, 0x72, 0x77, 0x3e, 0x5d, 0x3d, 0x96, 0xff, + 0x00, 0x5b, 0xb8, 0x36, 0x86, 0x53, 0xde, 0xc3, 0x3f, 0x20, 0xb9, 0xcb, + 0x4c, 0x3a, 0x67, 0xe4, 0x92, 0x91, 0x64, 0x59, 0x0c, 0x58, 0x79, 0xa4, + 0x39, 0xc3, 0xf0, 0x5a, 0x19, 0x77, 0x76, 0x95, 0x93, 0x7b, 0xc3, 0x9e, + 0x4f, 0xdc, 0x92, 0x9a, 0x96, 0xce, 0xb3, 0xf1, 0x42, 0xae, 0xe7, 0xe3, + 0xdf, 0x5d, 0xec, 0xe6, 0xb7, 0x07, 0x7d, 0xc5, 0x12, 0xd7, 0x77, 0xf0, + 0x55, 0xde, 0x7d, 0xa0, 0x8d, 0x37, 0x24, 0xa7, 0xa4, 0xeb, 0x0f, 0x6b, + 0xde, 0xcb, 0x1a, 0x24, 0x3c, 0x07, 0x03, 0xda, 0x1c, 0x25, 0x57, 0x65, + 0x2e, 0xd2, 0xd9, 0x1a, 0x1d, 0x04, 0xf8, 0x26, 0xa6, 0xc1, 0x77, 0x4d, + 0xc4, 0x71, 0xd5, 0xed, 0x06, 0xb3, 0xfd, 0x93, 0xa7, 0xe0, 0x89, 0x4b, + 0x81, 0x9a, 0x9d, 0x1a, 0x19, 0x09, 0x29, 0x83, 0xea, 0x0c, 0xca, 0xa4, + 0x03, 0x21, 0xbb, 0xae, 0xd3, 0xb3, 0x5c, 0xd2, 0x07, 0xe4, 0x54, 0x30, + 0xb5, 0xc8, 0x2e, 0xf3, 0x2b, 0x46, 0xd9, 0x6d, 0x99, 0x0f, 0x8f, 0x68, + 0xa5, 0xac, 0x69, 0xf3, 0x3a, 0xc2, 0xa1, 0xd3, 0xe3, 0x79, 0x27, 0xb2, + 0x4a, 0x75, 0x5e, 0xed, 0xad, 0x1b, 0x74, 0x90, 0x66, 0x56, 0x7e, 0x53, + 0x41, 0xa8, 0x90, 0x3e, 0x6a, 0xed, 0xda, 0x86, 0x9f, 0x00, 0xe1, 0xa2, + 0x03, 0xab, 0x26, 0x92, 0x66, 0x4b, 0x86, 0x89, 0x29, 0xaa, 0xd8, 0x75, + 0x6d, 0x00, 0x70, 0x8b, 0x45, 0x47, 0x7c, 0x1e, 0xe8, 0x75, 0x80, 0x2b, + 0x1e, 0x45, 0x5e, 0xc6, 0x00, 0xeb, 0xe1, 0xa8, 0x49, 0x4d, 0x4b, 0x8b, + 0x9d, 0x61, 0x6f, 0x81, 0x81, 0x1e, 0x45, 0x4a, 0xdd, 0xa2, 0xbd, 0xb1, + 0x02, 0x0e, 0xbe, 0x32, 0x84, 0xe2, 0xe0, 0xf7, 0x92, 0x79, 0x30, 0x13, + 0xfd, 0x21, 0x13, 0x30, 0x34, 0x49, 0x4c, 0x71, 0xeb, 0x25, 0xcc, 0x6b, + 0xb9, 0x24, 0xfd, 0xc4, 0x68, 0xae, 0xe3, 0xd7, 0xe9, 0x65, 0x39, 0xb1, + 0xa1, 0x68, 0x70, 0xf3, 0xd5, 0x52, 0x65, 0x87, 0xd5, 0x25, 0xdc, 0xc8, + 0x3f, 0x8c, 0x7f, 0x15, 0x6f, 0x22, 0xc7, 0x7a, 0xd5, 0xb9, 0xbc, 0xb9, + 0x85, 0xbf, 0x71, 0x49, 0x4c, 0x9c, 0x48, 0x79, 0x27, 0x82, 0xab, 0x58, + 0x77, 0x5b, 0x58, 0x3f, 0xbe, 0x27, 0xe1, 0x28, 0x86, 0xc2, 0xea, 0xda, + 0x1c, 0x21, 0xdc, 0xa0, 0xbc, 0xc3, 0x81, 0x32, 0x0e, 0xe4, 0x94, 0xd6, + 0xb9, 0xe4, 0x64, 0x35, 0xf5, 0x9d, 0xaf, 0x69, 0x05, 0xae, 0x3d, 0x8c, + 0xae, 0xb3, 0x2b, 0xeb, 0x9e, 0x1d, 0x6d, 0x65, 0x3d, 0x34, 0xfd, 0xa7, + 0x22, 0x09, 0x7b, 0xde, 0xd2, 0xda, 0xd8, 0x00, 0xd7, 0xcc, 0xea, 0xb8, + 0xfc, 0xb1, 0x2f, 0x91, 0xf0, 0x56, 0xba, 0x07, 0x4d, 0xb3, 0x36, 0xec, + 0x9f, 0x4d, 0xbb, 0x9e, 0xd6, 0x06, 0x37, 0xb7, 0xb9, 0xe7, 0xfb, 0x82, + 0x4a, 0x7a, 0x9f, 0xab, 0xdd, 0x63, 0x37, 0xab, 0x30, 0x9c, 0x8c, 0xa6, + 0x82, 0xd3, 0xad, 0x3b, 0x5a, 0x37, 0x49, 0x8d, 0x17, 0x4a, 0xda, 0x18, + 0xf0, 0x5a, 0xed, 0x24, 0x41, 0x5c, 0xa6, 0x37, 0xd5, 0x40, 0xcc, 0x3a, + 0xea, 0x76, 0x58, 0xab, 0x29, 0x92, 0x77, 0x56, 0xd2, 0x40, 0x71, 0x33, + 0xa3, 0xa5, 0xa5, 0x3e, 0x2f, 0x54, 0xeb, 0x98, 0x79, 0x56, 0x62, 0xe4, + 0xe4, 0x36, 0xf7, 0x53, 0xa1, 0x0f, 0x00, 0x87, 0x08, 0x96, 0xb8, 0x6d, + 0x82, 0x92, 0x9c, 0x3f, 0xad, 0xb8, 0x58, 0xf8, 0x3d, 0x6a, 0xca, 0xf1, + 0xd9, 0xe9, 0xd4, 0x5a, 0xd7, 0x86, 0x81, 0x00, 0x17, 0x0d, 0x63, 0xe6, + 0x16, 0x58, 0x7c, 0x37, 0x45, 0xab, 0xf5, 0xaf, 0x2e, 0xfc, 0xcc, 0xba, + 0xec, 0xb5, 0xac, 0x91, 0x58, 0xdb, 0x6d, 0x44, 0x96, 0xbd, 0xb3, 0xaf, + 0xd2, 0xee, 0xd3, 0xca, 0xc6, 0x63, 0x83, 0xac, 0x81, 0xa8, 0x09, 0x29, + 0xb7, 0x46, 0x30, 0x70, 0xdc, 0xee, 0x55, 0xca, 0x98, 0x19, 0xc2, 0x0d, + 0x4e, 0x80, 0x00, 0xec, 0x8a, 0x1e, 0x4a, 0x4a, 0x7a, 0x0f, 0xaa, 0xf9, + 0xbf, 0x64, 0xea, 0x6c, 0x61, 0x31, 0x5d, 0xff, 0x00, 0xa3, 0x77, 0xc4, + 0xfd, 0x1f, 0xc5, 0x77, 0xab, 0xca, 0x2a, 0xb4, 0xb6, 0xc6, 0xbc, 0x18, + 0x20, 0x82, 0x0f, 0x98, 0x5e, 0x9f, 0x83, 0x92, 0x32, 0xf0, 0xe9, 0xc8, + 0x1f, 0xe1, 0x18, 0x09, 0xf8, 0xf7, 0xfc, 0x52, 0x52, 0x72, 0x99, 0x39, + 0x2a, 0x32, 0x92, 0x94, 0x92, 0x69, 0x4e, 0x92, 0x91, 0xa7, 0x4c, 0x9d, + 0x25, 0x2e, 0x14, 0xc0, 0x51, 0x09, 0xae, 0xb0, 0x53, 0x4b, 0xed, 0x3f, + 0x9a, 0x09, 0xf9, 0xa4, 0xa7, 0x07, 0xab, 0x5d, 0xea, 0xe6, 0x39, 0xa3, + 0x51, 0x58, 0xdb, 0xfd, 0xeb, 0x17, 0x29, 0xf1, 0x3e, 0x4a, 0xf3, 0xdc, + 0xf7, 0x17, 0xd8, 0x75, 0x73, 0x8c, 0x92, 0xb2, 0x3a, 0x85, 0xa4, 0x08, + 0x49, 0x4e, 0x76, 0x4d, 0xf2, 0x4a, 0xa0, 0xfb, 0x14, 0xf2, 0x6c, 0xd4, + 0xaa, 0x6e, 0x7c, 0xa4, 0xa6, 0xef, 0x4e, 0xe9, 0x79, 0xbd, 0x63, 0x25, + 0xd8, 0xb8, 0x6d, 0x0e, 0xb1, 0xac, 0x75, 0x87, 0x71, 0x81, 0x0d, 0xf3, + 0xf3, 0x3a, 0x05, 0x57, 0xa8, 0xf4, 0xfc, 0xee, 0x9c, 0xe6, 0xd3, 0x9b, + 0x43, 0xa8, 0x71, 0x12, 0xd0, 0xf1, 0xf4, 0x84, 0xf6, 0x8e, 0x57, 0xa4, + 0xfd, 0x4a, 0xe8, 0xdf, 0xb3, 0x7a, 0x60, 0xc8, 0xb9, 0xb1, 0x95, 0x99, + 0x0f, 0x7c, 0xf2, 0xd6, 0x7e, 0x63, 0x7f, 0x8a, 0xca, 0xff, 0x00, 0x19, + 0x78, 0x85, 0xd4, 0x61, 0x65, 0x81, 0xa3, 0x5c, 0xfa, 0x9c, 0x7f, 0xac, + 0x37, 0x37, 0xf2, 0x14, 0x94, 0xe0, 0xf4, 0xf6, 0x1f, 0xd9, 0x15, 0x3b, + 0xf9, 0x67, 0x5f, 0xeb, 0x7f, 0xb9, 0x0c, 0x87, 0x36, 0xdd, 0xfc, 0xf9, + 0xf8, 0xa3, 0xf4, 0xb2, 0x3f, 0x61, 0x6e, 0x70, 0x91, 0x53, 0xc8, 0x23, + 0xe7, 0xfe, 0xd4, 0x4f, 0x52, 0xb7, 0x53, 0xfd, 0x5d, 0x48, 0xe3, 0x8d, + 0x52, 0x53, 0x5f, 0x31, 0xc0, 0x51, 0x90, 0x41, 0xd6, 0xc7, 0xe9, 0xf0, + 0x68, 0x03, 0xf2, 0xaa, 0x98, 0x23, 0xe9, 0xf6, 0x80, 0xa5, 0xab, 0xba, + 0x7d, 0x27, 0xbb, 0xe5, 0xc4, 0xff, 0x00, 0x58, 0x95, 0x2c, 0x26, 0x0d, + 0xfb, 0x7b, 0x12, 0x3e, 0xe4, 0x94, 0xde, 0xbf, 0x46, 0x4c, 0x70, 0x78, + 0xf8, 0xa6, 0x73, 0x43, 0xa9, 0xdc, 0x07, 0x02, 0x14, 0xaf, 0x70, 0xf4, + 0x9c, 0x79, 0x3d, 0x82, 0x13, 0xde, 0x5b, 0x8d, 0x58, 0x7f, 0x24, 0x9d, + 0x3e, 0x26, 0x12, 0x53, 0x9d, 0xa8, 0x1b, 0x47, 0x8a, 0xd0, 0xc2, 0xd1, + 0xbb, 0x7b, 0x90, 0x40, 0x2a, 0x95, 0x4d, 0x2e, 0x07, 0x4d, 0x77, 0x42, + 0xb7, 0x56, 0xe6, 0x3d, 0x8e, 0x71, 0x0c, 0x11, 0x26, 0x7b, 0x4a, 0x4a, + 0x6b, 0x3c, 0xc6, 0xe6, 0xf7, 0x05, 0x35, 0x24, 0xbc, 0x47, 0x1e, 0x6a, + 0x77, 0x96, 0x07, 0x19, 0x24, 0x97, 0x46, 0xa1, 0xa6, 0x39, 0x8e, 0xe9, + 0x0d, 0x00, 0x6b, 0x58, 0xe3, 0xa9, 0x3a, 0xe9, 0xf9, 0x25, 0x25, 0x21, + 0x0d, 0xfa, 0x0e, 0x32, 0x24, 0x1f, 0xc1, 0x5c, 0xb7, 0x41, 0x53, 0x8e, + 0xb0, 0x1c, 0x00, 0x40, 0x7b, 0xda, 0x18, 0x03, 0x8b, 0x1a, 0x5a, 0x34, + 0x04, 0xeb, 0x3f, 0x7a, 0xb1, 0x95, 0x66, 0x31, 0xaa, 0xb6, 0xb2, 0xe6, + 0x17, 0xce, 0xa3, 0xb8, 0x91, 0xf1, 0x49, 0x4c, 0x36, 0xee, 0x6b, 0x0c, + 0xea, 0x75, 0x80, 0x87, 0x6c, 0x36, 0x7b, 0xed, 0x20, 0xfd, 0xc5, 0x18, + 0xdb, 0x53, 0x43, 0x5a, 0xeb, 0x5b, 0x2d, 0x11, 0xc8, 0x1f, 0x3e, 0x55, + 0x5b, 0x9f, 0x48, 0xdd, 0xb6, 0xc0, 0xe9, 0x33, 0xa6, 0xa9, 0x29, 0xad, + 0x68, 0x1b, 0xc8, 0x3e, 0x2b, 0xa4, 0xfa, 0xa8, 0xd3, 0x46, 0x33, 0xaf, + 0xdb, 0x3e, 0xb5, 0xae, 0xd2, 0x3e, 0x93, 0x2b, 0x68, 0x6f, 0xe5, 0x2b, + 0x9c, 0xba, 0x1e, 0x5a, 0xe6, 0x7b, 0x83, 0xa2, 0x00, 0xd4, 0xea, 0xbb, + 0x1c, 0x5c, 0x77, 0xe1, 0x74, 0xec, 0x19, 0xf6, 0xfa, 0x6d, 0x9b, 0x87, + 0x7f, 0x7c, 0x97, 0x4f, 0xc3, 0x72, 0x4a, 0x6f, 0xdf, 0x96, 0x5a, 0xe7, + 0x3b, 0xdb, 0xb4, 0x70, 0x49, 0x12, 0x3e, 0x45, 0x65, 0x75, 0x31, 0xe9, + 0x5f, 0x8d, 0x9a, 0xd7, 0x87, 0x59, 0x64, 0x83, 0xa4, 0x12, 0xd1, 0xf9, + 0xa7, 0xc5, 0x4b, 0x36, 0xec, 0x8a, 0x1e, 0x45, 0x94, 0x8b, 0x58, 0x4e, + 0x84, 0x3b, 0x9f, 0xca, 0xa9, 0xf5, 0x5c, 0x9c, 0x6a, 0x8e, 0x1e, 0x4d, + 0xde, 0xda, 0xd9, 0xbc, 0x81, 0xc9, 0x2e, 0x90, 0x20, 0x0f, 0x92, 0x4a, + 0x73, 0x3e, 0xb1, 0x8c, 0x86, 0x75, 0x52, 0xd3, 0x06, 0xb6, 0x86, 0xd9, + 0x50, 0xda, 0x00, 0xdb, 0x60, 0x07, 0x5f, 0x1d, 0x44, 0x2a, 0xdd, 0x63, + 0x0c, 0x62, 0x65, 0xb3, 0x22, 0x96, 0x6c, 0xc6, 0xce, 0xad, 0xb9, 0x34, + 0x01, 0xc3, 0x77, 0xfd, 0x36, 0x0f, 0xea, 0xba, 0x42, 0xb1, 0xd4, 0xba, + 0xa5, 0x7d, 0x53, 0x22, 0x9b, 0x1b, 0x5f, 0xa7, 0xb1, 0x86, 0xb9, 0x99, + 0x25, 0xa0, 0xee, 0x13, 0xf7, 0x95, 0xbf, 0xfb, 0x3b, 0xf6, 0xcf, 0xd4, + 0xb6, 0x1a, 0x86, 0xec, 0xae, 0x9a, 0xfb, 0x3d, 0x38, 0xe4, 0xb4, 0x1d, + 0xce, 0x6f, 0xcd, 0xa7, 0xf0, 0x49, 0x4f, 0x27, 0x55, 0x88, 0xcd, 0xb2, + 0x74, 0x54, 0x2b, 0x7c, 0x18, 0x2a, 0xdd, 0x7a, 0x94, 0x94, 0xd9, 0x61, + 0xee, 0xbb, 0xef, 0xa9, 0xd9, 0x62, 0xdc, 0x07, 0xe3, 0x93, 0xee, 0xa1, + 0xd2, 0x07, 0xf2, 0x5f, 0xaf, 0xe5, 0x95, 0xe7, 0xe2, 0x02, 0xe9, 0x3e, + 0xa8, 0x65, 0xfa, 0x1d, 0x49, 0x8c, 0x27, 0xdb, 0x90, 0xd3, 0x59, 0xf8, + 0xfd, 0x26, 0xfe, 0x44, 0x94, 0xf7, 0x4e, 0x2a, 0x1b, 0x91, 0x1c, 0x10, + 0xca, 0x4a, 0x58, 0x94, 0xb7, 0x14, 0x94, 0x7b, 0xa4, 0xa6, 0x69, 0x04, + 0x93, 0x84, 0x94, 0xc8, 0x2c, 0xfe, 0xb1, 0x71, 0xda, 0xcc, 0x66, 0xf2, + 0xff, 0x00, 0x73, 0xbe, 0x01, 0x68, 0x05, 0x85, 0x9f, 0x78, 0x76, 0x5d, + 0xa7, 0xc0, 0xed, 0x1f, 0x06, 0xa4, 0xa6, 0x96, 0x41, 0x8f, 0x68, 0xd6, + 0x07, 0x01, 0x63, 0xf5, 0x0c, 0x6b, 0xde, 0xd2, 0xe0, 0xcf, 0x86, 0xa1, + 0x6d, 0xe8, 0xe7, 0x78, 0x4f, 0x74, 0xef, 0xa4, 0x11, 0x25, 0x25, 0x3e, + 0x77, 0x92, 0x6c, 0xad, 0xe5, 0x96, 0x0d, 0xae, 0xf0, 0x2b, 0x63, 0xea, + 0x7f, 0x42, 0x3d, 0x5b, 0xa9, 0x0b, 0x2e, 0x6f, 0xea, 0x78, 0xb0, 0xfb, + 0xa7, 0x87, 0x1f, 0xcc, 0x67, 0xcf, 0xbf, 0x92, 0xd5, 0xcf, 0xe9, 0x34, + 0x64, 0x88, 0x7b, 0x41, 0xf0, 0x3d, 0xc7, 0xc0, 0xad, 0xbf, 0xaa, 0x1f, + 0x62, 0xc0, 0xc1, 0x76, 0x11, 0xb0, 0x36, 0xf7, 0x58, 0xe7, 0x9d, 0xda, + 0x17, 0x4c, 0x01, 0xaf, 0xc0, 0x24, 0xa7, 0xa4, 0x59, 0xbf, 0x58, 0x7a, + 0x68, 0xea, 0x9d, 0x26, 0xfc, 0x60, 0x26, 0xc0, 0x37, 0xd5, 0xfd, 0x76, + 0x6a, 0x3e, 0xfe, 0x16, 0x92, 0x74, 0x94, 0xf9, 0x7e, 0x03, 0x5b, 0x5f, + 0x4f, 0xcb, 0xc4, 0x70, 0x87, 0x02, 0x2c, 0x00, 0xf7, 0x1a, 0x03, 0xf9, + 0x16, 0x65, 0xd9, 0x21, 0xdb, 0xeb, 0x06, 0x03, 0x01, 0x3f, 0x3e, 0x3f, + 0x8a, 0xec, 0xfa, 0xff, 0x00, 0x45, 0x15, 0x5d, 0x65, 0xf8, 0xe2, 0x1e, + 0xe9, 0x7b, 0x47, 0x62, 0x1d, 0xf4, 0x9a, 0xb8, 0xc7, 0xe1, 0x57, 0x5e, + 0x25, 0x85, 0xcf, 0x8b, 0x7d, 0x52, 0xc3, 0x1a, 0xe8, 0x06, 0xe0, 0x92, + 0x9b, 0x0d, 0xa9, 0xa3, 0x13, 0x1c, 0x6b, 0x3b, 0x04, 0x8f, 0x8e, 0xa9, + 0xf0, 0xbd, 0xd9, 0x20, 0x68, 0x00, 0x28, 0xf7, 0x80, 0xca, 0xd8, 0xc1, + 0xcd, 0x61, 0xad, 0x3f, 0xe6, 0x84, 0x1a, 0x0b, 0x06, 0x48, 0x6b, 0x39, + 0x91, 0xc2, 0x4a, 0x6d, 0x39, 0xbf, 0xa2, 0xfa, 0x6d, 0x06, 0x1b, 0x2d, + 0x1f, 0x4b, 0x9e, 0xfa, 0x85, 0x52, 0xcb, 0xb1, 0x5b, 0xb5, 0xa6, 0xcd, + 0xef, 0x00, 0x9d, 0xac, 0x3b, 0xcc, 0xf3, 0xf9, 0xba, 0x7e, 0x29, 0xf2, + 0xb0, 0x6a, 0x7b, 0xcb, 0xbb, 0x97, 0x16, 0x98, 0xee, 0x3c, 0xd3, 0xb6, + 0xba, 0xeb, 0x60, 0x0d, 0x68, 0x1e, 0xc3, 0xaf, 0xc9, 0x25, 0x34, 0x8b, + 0xc9, 0x2e, 0x8a, 0x9d, 0x23, 0xb9, 0x20, 0x77, 0xf9, 0xa9, 0x54, 0x6c, + 0x2d, 0xde, 0xda, 0xda, 0x0b, 0x35, 0xdc, 0xe2, 0x4f, 0xe4, 0x84, 0x76, + 0x9d, 0xd6, 0x99, 0x04, 0x87, 0x35, 0x3b, 0x03, 0x45, 0x0e, 0x6c, 0x6a, + 0x47, 0xfb, 0x12, 0x53, 0x0b, 0xeb, 0xb0, 0x86, 0xd8, 0x6d, 0x25, 0xcf, + 0x03, 0x80, 0x07, 0x3f, 0x24, 0xff, 0x00, 0x64, 0xa8, 0x91, 0xbc, 0x97, + 0x38, 0x68, 0x77, 0x12, 0x64, 0xc7, 0xc5, 0x10, 0x02, 0xea, 0xd8, 0x4b, + 0x75, 0x02, 0x00, 0xf8, 0x26, 0xb1, 0xcf, 0xd8, 0x0f, 0x7d, 0xd1, 0x09, + 0x29, 0x8d, 0x83, 0x1e, 0xaa, 0x6a, 0x73, 0x58, 0x20, 0x3f, 0x51, 0x02, + 0x20, 0xa6, 0x25, 0x96, 0x0d, 0x5a, 0x24, 0xbe, 0x34, 0x00, 0x0d, 0x74, + 0x51, 0x7b, 0x43, 0xb1, 0x4f, 0x3a, 0x6a, 0x7c, 0xbb, 0x2b, 0x36, 0x51, + 0x5b, 0x6a, 0x2e, 0x61, 0xd7, 0xda, 0xe9, 0x3e, 0x23, 0x69, 0x49, 0x48, + 0x03, 0x2b, 0xd9, 0x21, 0xa0, 0x3a, 0x44, 0xe9, 0xe0, 0x9d, 0xce, 0x22, + 0xa0, 0x0b, 0x61, 0xb0, 0x42, 0x29, 0xd8, 0xfd, 0x2b, 0x3a, 0x40, 0x80, + 0xe1, 0x07, 0xf2, 0x94, 0x0b, 0xda, 0xf7, 0x33, 0x53, 0xa6, 0x9f, 0x72, + 0x4a, 0x47, 0x88, 0xfc, 0x4c, 0x2c, 0xd6, 0xdf, 0x73, 0x4f, 0xa2, 0xf0, + 0x43, 0x8b, 0x67, 0xda, 0x79, 0xdd, 0x01, 0x74, 0x7d, 0x47, 0xa9, 0x33, + 0x2b, 0x00, 0x8c, 0x07, 0xee, 0x16, 0x8d, 0x6c, 0x3a, 0x18, 0xe3, 0x4f, + 0x8a, 0xe6, 0x5e, 0x0b, 0xeb, 0x68, 0xd0, 0x89, 0x30, 0x81, 0x45, 0xf9, + 0x78, 0xaf, 0x2c, 0xa4, 0xcd, 0x64, 0xce, 0xc3, 0xc7, 0xc9, 0x25, 0x3d, + 0x17, 0x57, 0x37, 0x74, 0xce, 0x9d, 0x86, 0xea, 0xde, 0x66, 0xea, 0xda, + 0xd2, 0xd3, 0xaf, 0xb8, 0x37, 0xb4, 0xac, 0x5c, 0xd7, 0xbf, 0x2b, 0xa7, + 0xe3, 0xb4, 0xc9, 0xf4, 0x43, 0xb6, 0xcf, 0xee, 0x92, 0x0a, 0xea, 0x3e, + 0xbb, 0x53, 0x14, 0xf4, 0xf6, 0x44, 0x96, 0x03, 0x20, 0x7f, 0x54, 0x05, + 0xcd, 0x33, 0xdb, 0x8e, 0xe1, 0x1f, 0x42, 0x67, 0xe0, 0x44, 0xa4, 0xa7, + 0x3f, 0x1c, 0x86, 0xed, 0x27, 0x96, 0x91, 0xf8, 0xe8, 0xbd, 0x0b, 0xfc, + 0x5f, 0x58, 0x5d, 0x8b, 0x9b, 0x57, 0x66, 0x5a, 0xd7, 0x0f, 0xed, 0x36, + 0x0f, 0xfd, 0x4a, 0xf3, 0xfb, 0x03, 0x01, 0x21, 0x9a, 0xee, 0x20, 0x01, + 0xf3, 0x5e, 0xab, 0xf5, 0x4f, 0xa4, 0x3b, 0xa4, 0xf4, 0x8a, 0xeb, 0xb4, + 0x46, 0x4d, 0xc7, 0xd5, 0xbf, 0xc9, 0xce, 0xe1, 0xbf, 0xd9, 0x1a, 0x24, + 0xa7, 0x80, 0xfa, 0xe1, 0xd1, 0x8f, 0x49, 0xea, 0xcf, 0x35, 0x36, 0x31, + 0xb2, 0x26, 0xda, 0x7c, 0x04, 0xfd, 0x26, 0xfc, 0x8a, 0xcb, 0xa2, 0xce, + 0x17, 0xa5, 0x7d, 0x79, 0xe9, 0xcd, 0xcc, 0xe8, 0x56, 0x5c, 0x04, 0xdb, + 0x88, 0x45, 0xac, 0x3f, 0xc9, 0x98, 0x78, 0xfb, 0xb5, 0xf9, 0x2f, 0x31, + 0xa6, 0xbb, 0x1c, 0xf8, 0x68, 0x94, 0x94, 0xdf, 0x61, 0xdc, 0xaf, 0x62, + 0x3d, 0xf5, 0x39, 0xb6, 0xd6, 0x7d, 0xf5, 0x90, 0xf6, 0xfc, 0x5b, 0xaa, + 0x1e, 0x1e, 0x11, 0x8f, 0x79, 0xec, 0xad, 0xb3, 0x11, 0xcc, 0x74, 0xb7, + 0xdc, 0x3b, 0xf8, 0xa4, 0xa7, 0xd1, 0xb1, 0x72, 0x19, 0x95, 0x8b, 0x56, + 0x43, 0x3e, 0x8d, 0xac, 0x0e, 0x1f, 0x30, 0xa6, 0x42, 0xc2, 0xfa, 0xa5, + 0x96, 0x5d, 0x8d, 0x66, 0x13, 0x8e, 0xb4, 0x9d, 0xcc, 0x07, 0xf7, 0x5d, + 0xc8, 0xf9, 0x15, 0xbe, 0x42, 0x4a, 0x47, 0x09, 0xa1, 0x4c, 0xa6, 0x49, + 0x4a, 0x84, 0xe1, 0x32, 0x90, 0x49, 0x4a, 0x73, 0xb6, 0x31, 0xce, 0xfd, + 0xd0, 0x4f, 0xdc, 0xb9, 0x3c, 0x8b, 0x5c, 0x4c, 0x9f, 0xce, 0xd5, 0xcb, + 0xad, 0x73, 0x77, 0x34, 0xb4, 0xf7, 0x04, 0x7d, 0xeb, 0x81, 0xbb, 0x2d, + 0xed, 0xba, 0xca, 0x1f, 0xf4, 0xab, 0x3b, 0x1c, 0x3b, 0xcb, 0x4c, 0x14, + 0x94, 0xe8, 0xb3, 0x21, 0xa0, 0x80, 0x79, 0x3c, 0x9f, 0x04, 0x51, 0x7e, + 0xed, 0x01, 0x9d, 0x56, 0x37, 0xa9, 0xa8, 0x3d, 0x8a, 0xb1, 0x4d, 0xc7, + 0x77, 0x84, 0x68, 0x92, 0x9d, 0x3d, 0xad, 0x77, 0x3c, 0xf2, 0x55, 0x7b, + 0x30, 0xda, 0xe3, 0x00, 0xcc, 0xf6, 0xf8, 0xa9, 0x57, 0x60, 0x31, 0xa8, + 0x8e, 0xe8, 0xac, 0x7b, 0x5d, 0xfc, 0x12, 0x53, 0x3c, 0x2c, 0xcc, 0xfc, + 0x3f, 0x6e, 0xff, 0x00, 0x5a, 0xa1, 0xa7, 0xa6, 0xfd, 0x63, 0xe0, 0xee, + 0x56, 0x95, 0x7d, 0x6d, 0xa6, 0x3d, 0x5a, 0x1e, 0xdf, 0x36, 0xc3, 0x87, + 0xf0, 0x59, 0x86, 0xc0, 0x34, 0x01, 0x31, 0xb4, 0x9e, 0x07, 0xc1, 0x25, + 0x3a, 0x79, 0x79, 0xd8, 0x77, 0xd3, 0xa0, 0x76, 0xf6, 0xea, 0xd6, 0x96, + 0x9e, 0xfa, 0x10, 0xb8, 0xdc, 0xde, 0x85, 0x6b, 0x6d, 0x7f, 0xd9, 0x6a, + 0x36, 0xb5, 0xf6, 0x3a, 0xd9, 0xe0, 0x0d, 0xdc, 0x37, 0xe4, 0xb7, 0xc5, + 0x87, 0xb0, 0x92, 0xa6, 0xcb, 0x1c, 0x07, 0xbd, 0x25, 0x3c, 0xbd, 0xbd, + 0x33, 0xa8, 0x87, 0x5c, 0xf3, 0x49, 0xf7, 0x10, 0xe0, 0x4e, 0xbc, 0x7c, + 0x10, 0xb1, 0xba, 0x7e, 0x75, 0x99, 0x6d, 0xf4, 0xe8, 0x71, 0xf1, 0x71, + 0x10, 0x07, 0xcc, 0xae, 0xd2, 0xb0, 0xc7, 0xeb, 0xb4, 0x1f, 0x88, 0x4b, + 0x2a, 0xcb, 0x2a, 0x60, 0xf4, 0xc6, 0x9d, 0xca, 0x4a, 0x79, 0xeb, 0x3a, + 0x06, 0x77, 0xa6, 0xe7, 0xc3, 0x5c, 0xe3, 0x24, 0x34, 0x3b, 0xbf, 0xdc, + 0xb3, 0xee, 0xa2, 0xda, 0x2c, 0xdb, 0x75, 0x46, 0xb2, 0x1b, 0xb4, 0x69, + 0xa1, 0xf9, 0xae, 0xaf, 0x1b, 0x35, 0x96, 0xc8, 0x71, 0xd4, 0x72, 0x8f, + 0x6d, 0x78, 0xd6, 0xb2, 0x1f, 0xc9, 0xe0, 0x8e, 0x52, 0x53, 0xe7, 0xf6, + 0xb9, 0xc1, 0xad, 0x3c, 0x8d, 0x0c, 0xf8, 0x41, 0xd5, 0x4c, 0x07, 0x7a, + 0xd6, 0x0f, 0x3f, 0xcb, 0xfe, 0xd5, 0xd6, 0x66, 0x74, 0xfe, 0x9e, 0xf6, + 0x6d, 0x75, 0x6c, 0x79, 0x3e, 0x03, 0x63, 0xbf, 0xe8, 0xae, 0x7f, 0xaa, + 0x62, 0xb7, 0x00, 0xfa, 0xfb, 0x1e, 0xfa, 0x1f, 0xa6, 0xf6, 0x89, 0xda, + 0xe9, 0x90, 0x1d, 0x25, 0x25, 0x21, 0xc3, 0xa9, 0xcd, 0xa6, 0x1c, 0x40, + 0x3e, 0xa1, 0x69, 0x9f, 0x18, 0x42, 0xb2, 0xa2, 0x29, 0xe6, 0x4b, 0xb7, + 0x1f, 0x29, 0x6a, 0x76, 0x67, 0x96, 0xcf, 0xa3, 0x8a, 0xf7, 0x0d, 0xdb, + 0x86, 0xe2, 0xd6, 0x88, 0x32, 0x35, 0xfa, 0x5e, 0x2a, 0x57, 0xdb, 0xd4, + 0x5c, 0xd2, 0x0d, 0x75, 0x31, 0x8d, 0xf7, 0x6d, 0x3b, 0xdd, 0xcf, 0x9c, + 0x84, 0x94, 0x89, 0xcd, 0x27, 0x1d, 0xc0, 0x7e, 0x70, 0x68, 0x1a, 0x1e, + 0xe6, 0x0a, 0xd4, 0x66, 0x31, 0xbf, 0xa7, 0xd8, 0x47, 0xd2, 0x14, 0xcc, + 0x92, 0x34, 0xd2, 0x34, 0xf8, 0x42, 0xc9, 0xa5, 0xd9, 0xd6, 0x52, 0x48, + 0x6d, 0x40, 0x0d, 0x35, 0x97, 0x1e, 0x67, 0x89, 0x43, 0xaa, 0x9c, 0xe7, + 0x65, 0x35, 0x96, 0x64, 0x3a, 0xb6, 0xb8, 0x38, 0x43, 0x74, 0x68, 0x03, + 0xc0, 0x7c, 0xd2, 0x53, 0xa8, 0xec, 0x5a, 0xa9, 0x65, 0x56, 0x3f, 0x43, + 0x13, 0xf8, 0xaa, 0x36, 0x96, 0x7a, 0x46, 0x67, 0x70, 0x3a, 0x48, 0xed, + 0x28, 0xb6, 0x56, 0x5c, 0xc0, 0xca, 0xdf, 0x73, 0x83, 0x38, 0x2e, 0x22, + 0x3f, 0x22, 0x9d, 0x1d, 0x07, 0xaa, 0xe6, 0xd4, 0x6d, 0xa6, 0xc0, 0xca, + 0xfb, 0x3a, 0xd3, 0xa1, 0xf1, 0x8d, 0x09, 0x49, 0x49, 0xfe, 0xae, 0xf4, + 0x1f, 0xda, 0xcf, 0x75, 0x96, 0x97, 0x57, 0x89, 0x4c, 0x07, 0x16, 0xc6, + 0xe7, 0xbc, 0xeb, 0xb5, 0xa4, 0xf8, 0x0e, 0x4a, 0xd0, 0xc8, 0xfa, 0x9b, + 0x43, 0xf2, 0xfd, 0x3c, 0x5b, 0x8d, 0x7e, 0xe1, 0x2d, 0x77, 0xbe, 0x01, + 0xe4, 0xce, 0x8a, 0xcf, 0x41, 0x6e, 0x4f, 0x49, 0xe9, 0xcf, 0xc3, 0xb9, + 0xd5, 0xbe, 0xc7, 0x3d, 0xcf, 0xf5, 0x1b, 0x31, 0x0e, 0xf2, 0x80, 0xae, + 0x55, 0x90, 0x2b, 0x71, 0x78, 0x3b, 0x9e, 0x67, 0xdc, 0x47, 0x8f, 0x82, + 0x4a, 0x61, 0xf5, 0x8f, 0x0e, 0xbc, 0x9c, 0x8a, 0x37, 0x32, 0xcb, 0xab, + 0x0d, 0xd8, 0x0d, 0x6e, 0x6b, 0x4b, 0x7c, 0x5f, 0xee, 0x99, 0xd3, 0xb2, + 0xe4, 0x2e, 0xa7, 0xd2, 0xb7, 0x23, 0x1e, 0x77, 0xb1, 0xa4, 0xb7, 0x70, + 0xef, 0xb7, 0x49, 0xfc, 0x17, 0x61, 0x6e, 0x6b, 0x0c, 0xd6, 0x39, 0x76, + 0xae, 0x21, 0x67, 0x7e, 0xce, 0xc1, 0x0f, 0x75, 0xae, 0x0f, 0x7b, 0x9e, + 0x49, 0x71, 0x26, 0x39, 0xf8, 0x24, 0xa7, 0x0f, 0xea, 0x47, 0x4d, 0x39, + 0x5f, 0x58, 0xab, 0x16, 0xb4, 0x3e, 0xbc, 0x30, 0xeb, 0x9f, 0x3a, 0x8d, + 0xcd, 0xf6, 0xb3, 0xee, 0x73, 0xa5, 0x7a, 0xa9, 0x20, 0x09, 0x3a, 0x05, + 0xc3, 0x62, 0xdb, 0x4f, 0x4d, 0xbd, 0xf7, 0xe1, 0x30, 0x53, 0x6b, 0xc6, + 0xd7, 0x3b, 0x99, 0x1c, 0xeb, 0x28, 0x79, 0x5d, 0x4b, 0x23, 0x28, 0x93, + 0x75, 0x8e, 0xb0, 0x78, 0x13, 0x00, 0x7c, 0x00, 0xd1, 0x25, 0x3d, 0x0f, + 0xd6, 0x0e, 0xb1, 0x86, 0xcc, 0x4b, 0xb0, 0x99, 0xfa, 0x7b, 0x6f, 0x63, + 0xab, 0x73, 0x58, 0x44, 0x34, 0x38, 0x44, 0xb8, 0xae, 0x36, 0x8c, 0x16, + 0x34, 0xfd, 0x1d, 0xa3, 0xc0, 0x2b, 0x2c, 0xb6, 0x93, 0x20, 0x73, 0xe0, + 0x9a, 0xcb, 0xe2, 0x23, 0xe6, 0x92, 0x99, 0x86, 0x35, 0x81, 0x44, 0xd8, + 0xd1, 0x11, 0xc0, 0xfc, 0x15, 0x67, 0xde, 0xe9, 0x3e, 0x05, 0x01, 0xd7, + 0x1e, 0x7c, 0x12, 0x53, 0xd1, 0x74, 0x1c, 0xca, 0xf1, 0xfa, 0x95, 0x6f, + 0x26, 0x19, 0x77, 0xe8, 0xdf, 0xe4, 0x5d, 0xc7, 0xe2, 0xbb, 0x22, 0xbc, + 0xb2, 0xbc, 0x93, 0xbc, 0x00, 0x75, 0xdd, 0x01, 0x7a, 0x9b, 0x41, 0xd8, + 0x27, 0x98, 0x12, 0x92, 0x98, 0x95, 0x14, 0x9c, 0x60, 0xa8, 0xee, 0x49, + 0x4c, 0xd3, 0x84, 0xa3, 0xc1, 0x28, 0x29, 0x29, 0x90, 0x5c, 0x5f, 0xd7, + 0x4e, 0x98, 0xfc, 0x7c, 0x96, 0xf5, 0x5a, 0x1a, 0x7d, 0x2b, 0x21, 0xb9, + 0x11, 0xc3, 0x5e, 0x34, 0x0e, 0x3f, 0x15, 0xda, 0x04, 0x9e, 0xc6, 0x58, + 0xc2, 0xc7, 0xb4, 0x39, 0x8e, 0x10, 0xe6, 0xb8, 0x48, 0x20, 0xf6, 0x20, + 0xa4, 0xa7, 0xcb, 0x2a, 0xce, 0x0e, 0x20, 0x1d, 0x15, 0xca, 0xb2, 0x9a, + 0xe3, 0x06, 0x02, 0xe9, 0xfa, 0x87, 0xd4, 0x9e, 0x93, 0x92, 0x0b, 0xb1, + 0x41, 0xc3, 0xbb, 0xc5, 0x9e, 0xe6, 0x1f, 0x8b, 0x1c, 0x7f, 0x24, 0x2e, + 0x5b, 0xa9, 0x74, 0x0e, 0xaf, 0xd2, 0x66, 0xc7, 0xd7, 0xea, 0xd2, 0x3f, + 0xc3, 0xd5, 0x2e, 0x6f, 0xf6, 0x87, 0x21, 0x25, 0x37, 0x5b, 0x94, 0xd1, + 0xa4, 0xf6, 0x44, 0x66, 0x6b, 0x4c, 0x00, 0xb9, 0xc6, 0xe6, 0xbe, 0x22, + 0x51, 0x06, 0x7b, 0x9a, 0x04, 0x18, 0x49, 0x4f, 0x4c, 0xcc, 0x81, 0xdb, + 0x95, 0x31, 0x73, 0x9c, 0x17, 0x37, 0x5f, 0x52, 0x7c, 0xc9, 0x74, 0xf7, + 0xf8, 0x2b, 0xd8, 0xdd, 0x49, 0xa5, 0xc0, 0x4f, 0x3c, 0x04, 0x94, 0xec, + 0xb2, 0xd3, 0xe0, 0xa6, 0x2d, 0x00, 0x02, 0xf5, 0x5e, 0x8c, 0x86, 0xd8, + 0x76, 0xb2, 0x0b, 0xbb, 0xa9, 0xdc, 0x4c, 0xc1, 0x3a, 0x69, 0x29, 0x29, + 0xba, 0xdc, 0x9a, 0xea, 0x60, 0x2f, 0x70, 0x12, 0x7d, 0xb2, 0xa6, 0xf7, + 0x7a, 0xac, 0x86, 0xc1, 0xdd, 0xdf, 0x95, 0x99, 0xd4, 0x71, 0x2c, 0xc9, + 0xc7, 0xa9, 0xd5, 0x3a, 0x36, 0x69, 0x03, 0xba, 0xcf, 0xa3, 0xa9, 0x1e, + 0x9d, 0x68, 0x66, 0x46, 0xf0, 0xdf, 0x1e, 0xc9, 0x29, 0x2f, 0x52, 0xc6, + 0xea, 0x78, 0x4e, 0xfb, 0x4e, 0x23, 0x7d, 0x46, 0x72, 0xfa, 0xc7, 0x3a, + 0x78, 0x2a, 0xf8, 0xff, 0x00, 0x58, 0xa9, 0xba, 0x5a, 0xe2, 0x6a, 0xb4, + 0x68, 0xea, 0xdd, 0xa7, 0xe0, 0x56, 0xf5, 0x5d, 0x56, 0xbb, 0x6b, 0xde, + 0x08, 0x70, 0x3c, 0x01, 0xd9, 0x66, 0x75, 0x86, 0x74, 0xab, 0x9b, 0xbb, + 0x22, 0xa6, 0x39, 0xfd, 0x9e, 0xdd, 0x1d, 0x3f, 0x10, 0x92, 0x9c, 0xab, + 0x3a, 0x8b, 0xec, 0xb8, 0xbb, 0xd4, 0x3f, 0x4a, 0x47, 0xe4, 0x5a, 0x34, + 0xe7, 0xd6, 0xea, 0xcd, 0x77, 0x00, 0xe6, 0x3c, 0x43, 0x9a, 0x78, 0x20, + 0xac, 0x27, 0xf4, 0xb7, 0x6e, 0xdd, 0x8a, 0xf2, 0xe6, 0x9d, 0x76, 0xbb, + 0x9f, 0xbd, 0x05, 0xee, 0xc8, 0xa6, 0x45, 0xac, 0x76, 0xdf, 0x10, 0x34, + 0x49, 0x4e, 0xe5, 0x98, 0xd4, 0x09, 0x76, 0x39, 0x96, 0x1d, 0x36, 0x77, + 0x6c, 0x14, 0x1c, 0x90, 0x03, 0x08, 0x23, 0x42, 0x27, 0x4f, 0x05, 0x91, + 0x56, 0x53, 0xdc, 0xf1, 0x0f, 0x81, 0x3d, 0xbb, 0x2d, 0xfe, 0x95, 0xd4, + 0x6b, 0xae, 0xbb, 0x6c, 0x73, 0x59, 0x67, 0xa4, 0x5b, 0xef, 0xb1, 0xa1, + 0xcf, 0xe0, 0x93, 0x1d, 0xb4, 0x02, 0x52, 0x53, 0x47, 0x17, 0x17, 0x25, + 0xf8, 0xef, 0xb5, 0x95, 0x38, 0x56, 0xdd, 0x4b, 0xe0, 0xed, 0x03, 0xfa, + 0xc5, 0x68, 0x63, 0x74, 0x3c, 0x9c, 0x97, 0x51, 0x92, 0xc7, 0xd7, 0x5d, + 0x6c, 0xfa, 0x65, 0xee, 0xf7, 0x71, 0xd9, 0xa0, 0x14, 0x2c, 0xae, 0xb5, + 0x7f, 0x51, 0x68, 0xa0, 0x92, 0x1a, 0x08, 0x05, 0xa0, 0xc7, 0x0e, 0xdd, + 0xa0, 0xf3, 0x5b, 0x38, 0x97, 0x6d, 0xc3, 0x6e, 0xe1, 0xb6, 0xc7, 0x12, + 0x5d, 0xdc, 0x0f, 0x04, 0x94, 0xbb, 0xba, 0x46, 0x33, 0x5d, 0xbe, 0xdb, + 0xb7, 0xb4, 0x19, 0x2d, 0x0d, 0x80, 0xe1, 0xf1, 0x95, 0x0c, 0xbc, 0xe7, + 0x86, 0xfa, 0x78, 0xb5, 0xc8, 0x68, 0x81, 0x1a, 0x35, 0xa1, 0x0f, 0x2f, + 0x30, 0x31, 0x9e, 0xf3, 0x12, 0x3f, 0xd8, 0xb2, 0x2f, 0xeb, 0xed, 0xac, + 0x16, 0xd4, 0x26, 0x7d, 0xa0, 0x0f, 0x1f, 0x04, 0x94, 0xda, 0xc7, 0xab, + 0x2e, 0xfc, 0x80, 0xeb, 0x9f, 0xb4, 0x38, 0xfb, 0x59, 0x3a, 0x95, 0xa7, + 0x60, 0x6d, 0x60, 0x35, 0xc0, 0x13, 0x0a, 0x5d, 0x1f, 0xa6, 0xbf, 0x0e, + 0xa3, 0x99, 0x9c, 0xfd, 0xd9, 0x57, 0x34, 0x7e, 0x8f, 0xb5, 0x6d, 0xe7, + 0x6f, 0xc7, 0xc5, 0x3d, 0xf6, 0x54, 0xe7, 0x17, 0x00, 0x25, 0x25, 0x35, + 0x1c, 0x6b, 0x8d, 0xc0, 0x7d, 0x15, 0x5e, 0xcc, 0xb0, 0x0c, 0x77, 0xed, + 0xe0, 0x95, 0xf9, 0x20, 0x3c, 0xb4, 0x08, 0xf1, 0x54, 0x2d, 0x7e, 0xb3, + 0xd8, 0xf2, 0x12, 0x52, 0x3c, 0x8c, 0xbf, 0xd2, 0x15, 0x55, 0xd7, 0xbb, + 0x74, 0x8e, 0x3c, 0x14, 0x2f, 0x9f, 0x52, 0x50, 0x8d, 0xa0, 0x72, 0x92, + 0x9b, 0x21, 0xee, 0x9f, 0x08, 0xe5, 0x38, 0xc8, 0x23, 0x42, 0x74, 0x54, + 0x8d, 0xe7, 0xe4, 0x86, 0xeb, 0xd2, 0x53, 0x76, 0xcb, 0xc6, 0xb0, 0xab, + 0xba, 0xd9, 0x3a, 0x2a, 0xc6, 0xd3, 0xe2, 0xac, 0x60, 0x74, 0xee, 0xa3, + 0xd4, 0xad, 0xf4, 0xf0, 0x68, 0x75, 0xce, 0xee, 0x40, 0x86, 0x37, 0xfa, + 0xce, 0x3a, 0x04, 0x94, 0xde, 0xfa, 0xbf, 0x89, 0x67, 0x52, 0xeb, 0x38, + 0xf8, 0xec, 0x12, 0xc6, 0xb8, 0x59, 0x6b, 0xbb, 0x06, 0x33, 0x53, 0xfd, + 0xcb, 0xd5, 0x96, 0x37, 0xd5, 0x9f, 0xab, 0xd5, 0xf4, 0x4c, 0x42, 0x1e, + 0x45, 0x99, 0x97, 0x41, 0xbe, 0xd1, 0xc7, 0x93, 0x1b, 0xe4, 0x16, 0xc1, + 0x20, 0x24, 0xa6, 0x2f, 0x68, 0x43, 0xd8, 0x7e, 0x4a, 0x6e, 0x76, 0xa9, + 0xb7, 0x77, 0x49, 0x4c, 0xb7, 0x27, 0xe5, 0x34, 0x25, 0xc2, 0x4a, 0x5c, + 0x27, 0x95, 0x14, 0x92, 0x53, 0x34, 0x94, 0x66, 0x12, 0x94, 0x94, 0xe5, + 0xe7, 0xfd, 0x57, 0xe8, 0xb9, 0xe4, 0xbe, 0xdc, 0x71, 0x5d, 0xa7, 0xfc, + 0x25, 0x5f, 0xa3, 0x77, 0xe1, 0xa1, 0xf9, 0x85, 0x89, 0x91, 0xfe, 0x2f, + 0x2a, 0x71, 0xfd, 0x5f, 0x35, 0xcd, 0x1e, 0x16, 0x30, 0x3b, 0xf1, 0x69, + 0x6a, 0xec, 0x25, 0x3c, 0xa4, 0xa7, 0x83, 0x7f, 0xf8, 0xbe, 0xea, 0x2d, + 0xfe, 0x6b, 0x2a, 0x97, 0x7f, 0x58, 0x39, 0xbf, 0x93, 0x72, 0x1b, 0xbe, + 0xa4, 0xf5, 0xca, 0x86, 0xe6, 0x1a, 0x6c, 0x77, 0x83, 0x5e, 0x47, 0xfd, + 0x53, 0x42, 0xf4, 0x05, 0x0b, 0xef, 0xab, 0x1e, 0xa7, 0x5d, 0x6b, 0xb6, + 0xd6, 0xc1, 0x2e, 0x29, 0x29, 0xf3, 0x4c, 0x96, 0xe7, 0xf4, 0x0b, 0x6b, + 0xfd, 0xa0, 0xd1, 0x51, 0xb6, 0x4b, 0x3d, 0xc1, 0xd3, 0xb7, 0x9f, 0xa2, + 0x4f, 0x8a, 0x1d, 0xdd, 0x70, 0x5c, 0xe0, 0xef, 0x50, 0x01, 0xe4, 0x55, + 0xef, 0xac, 0x39, 0x6d, 0xeb, 0x99, 0x15, 0xde, 0xda, 0xe2, 0xaa, 0xe6, + 0xb6, 0x09, 0x92, 0x43, 0x7d, 0xd3, 0xf3, 0x58, 0xc3, 0xa3, 0x65, 0xde, + 0x0f, 0xa3, 0x8d, 0x63, 0xc6, 0xe0, 0xcf, 0x6b, 0x0f, 0x00, 0x49, 0x3c, + 0x24, 0xa7, 0x7e, 0xce, 0xa7, 0x75, 0x55, 0xe3, 0xbd, 0xba, 0xd5, 0x63, + 0x41, 0x3e, 0x12, 0xad, 0xd1, 0x7e, 0x0e, 0x6b, 0x4b, 0x6c, 0x63, 0x4f, + 0x62, 0xb3, 0x3e, 0xc9, 0x7e, 0x1e, 0x3e, 0x3d, 0x19, 0x95, 0xed, 0x66, + 0xd2, 0xd1, 0x24, 0x18, 0xd7, 0x4d, 0xd1, 0xdd, 0x40, 0x74, 0xc7, 0x87, + 0xfa, 0xf8, 0x17, 0x16, 0x38, 0x6b, 0xb4, 0xea, 0x0f, 0x94, 0x24, 0xa6, + 0xd6, 0x57, 0x47, 0x7e, 0x2c, 0xdf, 0xd3, 0x6c, 0x80, 0x35, 0x75, 0x0f, + 0x3e, 0xd3, 0xfd, 0x55, 0x85, 0x95, 0x9c, 0xeb, 0x2c, 0xdb, 0x67, 0xb1, + 0xe3, 0x90, 0x74, 0x5a, 0x36, 0xf5, 0x7c, 0xaa, 0x81, 0xaa, 0xe6, 0xec, + 0xb0, 0x69, 0x27, 0x83, 0xf0, 0x59, 0x0f, 0x22, 0xd7, 0x97, 0xd9, 0x04, + 0x92, 0x92, 0x9b, 0x15, 0x64, 0x91, 0xae, 0xef, 0xb8, 0xa4, 0xec, 0xb7, + 0x11, 0x13, 0x23, 0xef, 0x55, 0xac, 0xaa, 0xb7, 0x6b, 0x02, 0x50, 0xdb, + 0x43, 0x9e, 0xe0, 0x19, 0x27, 0x5e, 0x25, 0x25, 0x33, 0x7b, 0x6b, 0xb5, + 0xc4, 0x91, 0x04, 0x6a, 0x23, 0x43, 0x28, 0x95, 0x64, 0x3d, 0xd8, 0x96, + 0x63, 0x38, 0x0a, 0x43, 0x8c, 0x17, 0xb4, 0x41, 0x71, 0x69, 0x91, 0xba, + 0x15, 0xfe, 0x9f, 0x82, 0x59, 0x6b, 0xac, 0x76, 0xa4, 0xb5, 0xcc, 0x68, + 0x07, 0x8d, 0xdd, 0xe7, 0xc5, 0x0d, 0x98, 0x94, 0xf4, 0xcc, 0x86, 0xbb, + 0x23, 0x6b, 0xd8, 0xf0, 0x76, 0x9e, 0x7e, 0xf0, 0x92, 0x91, 0xe2, 0x57, + 0x75, 0xb6, 0xcd, 0x35, 0x17, 0x81, 0x1b, 0x9d, 0x13, 0x24, 0x2e, 0x8d, + 0xb5, 0xe7, 0xbe, 0xa6, 0xd5, 0x55, 0x20, 0x18, 0xf7, 0x17, 0xb8, 0x34, + 0x2c, 0x43, 0xd4, 0x2a, 0xaa, 0xcd, 0xd8, 0xae, 0xd8, 0xdf, 0x01, 0xa0, + 0x9f, 0x24, 0x87, 0x5b, 0xc8, 0x13, 0xba, 0xcf, 0xc5, 0x25, 0x3b, 0x2e, + 0xe8, 0xf5, 0x97, 0xb5, 0xd9, 0xf9, 0x3b, 0xf5, 0xd6, 0x9a, 0xf4, 0x04, + 0x78, 0x17, 0x1d, 0x55, 0x87, 0xf5, 0x1e, 0x95, 0x88, 0xc6, 0x56, 0xca, + 0x6b, 0x02, 0xb3, 0x35, 0xb4, 0x34, 0x1d, 0xa7, 0x8d, 0xc3, 0xcd, 0x72, + 0xd6, 0xf5, 0x27, 0x58, 0x49, 0x36, 0xeb, 0xf1, 0x55, 0x1d, 0x93, 0x2e, + 0x92, 0xed, 0xc7, 0xb2, 0x4a, 0x7a, 0x7c, 0xce, 0xbc, 0x1e, 0x0c, 0x70, + 0xb2, 0x2e, 0xeb, 0x16, 0x4f, 0xe8, 0xce, 0xab, 0x2f, 0x7d, 0xf6, 0x70, + 0xd8, 0x1f, 0x7a, 0x35, 0x74, 0x88, 0xf7, 0x24, 0xa6, 0xed, 0x19, 0x76, + 0x5a, 0x65, 0xe6, 0x4f, 0x74, 0xb2, 0x2c, 0x86, 0xce, 0xee, 0x12, 0xaf, + 0xd3, 0x63, 0x7d, 0xaa, 0x16, 0x63, 0x59, 0x92, 0xd2, 0x59, 0xdb, 0xe8, + 0x8f, 0x12, 0x92, 0x9a, 0xb6, 0x5a, 0xd0, 0xdd, 0xc4, 0xea, 0x78, 0x95, + 0x54, 0xd9, 0xb9, 0xd0, 0xd3, 0x24, 0xe8, 0x3e, 0x2a, 0x62, 0x8d, 0xce, + 0x97, 0x8d, 0x7c, 0xd2, 0xbf, 0x1c, 0x30, 0x6f, 0x68, 0x82, 0xdd, 0x47, + 0xcb, 0x54, 0x94, 0xd9, 0x6f, 0x42, 0xeb, 0x96, 0x46, 0xcc, 0x0c, 0x83, + 0xf1, 0xad, 0xc3, 0xf2, 0x85, 0x6a, 0x8f, 0xa9, 0x7f, 0x59, 0x32, 0x08, + 0xfd, 0x5b, 0xd2, 0x69, 0xef, 0x6b, 0xda, 0xdf, 0xc0, 0x12, 0x7f, 0x05, + 0xea, 0x58, 0xef, 0xf5, 0x28, 0xaa, 0xcf, 0xdf, 0x63, 0x5d, 0xf7, 0x89, + 0x53, 0x2e, 0x84, 0x94, 0xf1, 0xbd, 0x27, 0xfc, 0x5e, 0x63, 0xd4, 0x45, + 0xbd, 0x56, 0xef, 0xb4, 0x38, 0x7f, 0x80, 0xaa, 0x5b, 0x5f, 0xf6, 0x9d, + 0xf4, 0x8f, 0xe0, 0xba, 0xea, 0x29, 0xc7, 0xc5, 0xa9, 0xb4, 0xe3, 0xd6, + 0xda, 0xaa, 0x66, 0x8d, 0x63, 0x00, 0x68, 0x1f, 0x20, 0xa4, 0x5c, 0xa2, + 0x5c, 0x92, 0x99, 0x97, 0xa8, 0x17, 0x28, 0x92, 0x9a, 0x52, 0x52, 0x89, + 0x4d, 0x25, 0x32, 0x52, 0x92, 0x9b, 0x02, 0x0e, 0xa0, 0xc8, 0xf2, 0x49, + 0x79, 0xe7, 0xd4, 0x8e, 0xaf, 0x9a, 0x7a, 0x98, 0xc6, 0xb2, 0xd7, 0xd9, + 0x45, 0x80, 0xcb, 0x1c, 0x64, 0x07, 0x1e, 0xeb, 0xd1, 0x48, 0x49, 0x4c, + 0x12, 0x25, 0x3c, 0x26, 0x84, 0x94, 0xb1, 0x94, 0x84, 0xa7, 0x84, 0xa1, + 0x25, 0x28, 0x29, 0x4a, 0x8c, 0x27, 0x49, 0x4b, 0xca, 0xa2, 0xe7, 0x37, + 0x39, 0xcf, 0x63, 0xdb, 0xfa, 0x16, 0x12, 0xd8, 0x70, 0xe5, 0xc3, 0x9d, + 0x11, 0x73, 0x33, 0x1b, 0x89, 0x5e, 0xf2, 0xc7, 0x3c, 0xf6, 0x0d, 0x13, + 0xaf, 0x9a, 0xc8, 0xb3, 0xac, 0x5f, 0x8e, 0xd6, 0x59, 0x91, 0x53, 0xdc, + 0xec, 0x87, 0xc3, 0x19, 0x4b, 0x0b, 0x9c, 0x27, 0xe8, 0xcb, 0x46, 0xa9, + 0x29, 0xd5, 0xa7, 0x07, 0x1f, 0x1d, 0xa0, 0x52, 0xc6, 0xd6, 0xd1, 0xd8, + 0x00, 0x07, 0xe0, 0x13, 0x39, 0x8d, 0x79, 0x2c, 0x7d, 0xc4, 0xcc, 0x92, + 0xd6, 0x68, 0x00, 0x55, 0x6f, 0xb2, 0xd2, 0xc6, 0xfa, 0x8f, 0xf4, 0x9a, + 0x75, 0x2d, 0x3a, 0xbf, 0xee, 0x0a, 0x8d, 0xdd, 0x4a, 0xca, 0xd8, 0x59, + 0x8e, 0xd2, 0x27, 0x97, 0x9f, 0xa4, 0x52, 0x53, 0xa1, 0x7e, 0x27, 0x4f, + 0x7b, 0x0d, 0x56, 0xd4, 0x6d, 0x61, 0xe4, 0x38, 0xf2, 0xb1, 0x33, 0x7a, + 0x4e, 0x36, 0x2b, 0x4d, 0x98, 0x2f, 0x75, 0x5e, 0x35, 0xb9, 0xdb, 0x84, + 0x79, 0x77, 0x52, 0x63, 0xfa, 0x8e, 0x46, 0x90, 0xf7, 0x0f, 0x01, 0xa7, + 0xe2, 0xa1, 0x73, 0xb2, 0xa8, 0x3b, 0x1e, 0xc6, 0x35, 0xdc, 0xfb, 0x8c, + 0x94, 0x94, 0xf3, 0xbd, 0x4e, 0xeb, 0x4b, 0x36, 0x5b, 0x51, 0x99, 0x3e, + 0xe8, 0xd2, 0x3e, 0x2b, 0x30, 0x51, 0x53, 0x84, 0x90, 0xba, 0x5b, 0x7e, + 0xd1, 0x67, 0x61, 0x1e, 0x43, 0x45, 0x4a, 0xda, 0xac, 0x9f, 0xa3, 0xca, + 0x4a, 0x71, 0xbe, 0xce, 0xd7, 0x3a, 0x2b, 0x69, 0x27, 0xc7, 0xb2, 0xbd, + 0x55, 0x4d, 0x60, 0x99, 0xd4, 0x04, 0xee, 0x63, 0xc1, 0x20, 0x94, 0x3d, + 0xa6, 0x63, 0x90, 0x92, 0x9b, 0x95, 0x64, 0x6c, 0x6f, 0xb4, 0xf7, 0xe0, + 0x21, 0xe4, 0xba, 0xbc, 0x87, 0x37, 0x77, 0xd3, 0x6f, 0x0e, 0xfe, 0xf4, + 0x0d, 0x40, 0x13, 0xc7, 0x80, 0x53, 0x65, 0x37, 0x3f, 0x56, 0x36, 0x47, + 0xef, 0x1d, 0x12, 0x53, 0x4a, 0xca, 0xcd, 0x56, 0x12, 0x59, 0xa7, 0x6f, + 0x0f, 0x92, 0x4d, 0xaa, 0x97, 0x49, 0x3a, 0x6e, 0xd6, 0x0a, 0xd5, 0x18, + 0xa4, 0x88, 0xb8, 0x98, 0xee, 0x34, 0x54, 0x72, 0x9a, 0x28, 0xb3, 0xda, + 0xd9, 0xa4, 0xf0, 0x7c, 0x3e, 0x29, 0x29, 0xae, 0xea, 0xab, 0x1c, 0x37, + 0x54, 0xf3, 0x53, 0x39, 0x20, 0x26, 0x7b, 0x58, 0x47, 0x04, 0x05, 0x06, + 0xfa, 0x2d, 0xed, 0xaf, 0x96, 0xa9, 0x29, 0x27, 0xda, 0x58, 0x3e, 0x88, + 0x27, 0xe4, 0x97, 0xda, 0x5e, 0x78, 0x10, 0x86, 0x6c, 0xec, 0xd6, 0xfd, + 0xfa, 0x24, 0x3d, 0x7b, 0x08, 0x6b, 0x5b, 0x24, 0xf0, 0x06, 0xa5, 0x25, + 0x36, 0xb1, 0x5d, 0x61, 0x71, 0x24, 0x13, 0xa2, 0xe8, 0xb1, 0x71, 0xc3, + 0x6b, 0x60, 0xf0, 0x12, 0x4a, 0xc8, 0xc0, 0xc7, 0xb6, 0xa6, 0x87, 0x58, + 0x76, 0xb9, 0xce, 0x88, 0xfe, 0xaf, 0x65, 0xd0, 0xb4, 0x00, 0xc0, 0xde, + 0x34, 0x49, 0x4e, 0x37, 0x54, 0xc3, 0x6d, 0x76, 0xb7, 0x25, 0x8d, 0x8a, + 0xee, 0x24, 0x1f, 0x27, 0x8f, 0xef, 0x54, 0x6f, 0xaa, 0x58, 0xe6, 0x9f, + 0xf5, 0xec, 0xba, 0x3c, 0xba, 0x85, 0xb8, 0x37, 0x36, 0x35, 0x0d, 0xdc, + 0xd8, 0xec, 0xe6, 0xea, 0xb0, 0xdc, 0x03, 0xcc, 0x1e, 0xe2, 0x12, 0x53, + 0xe8, 0x3f, 0x57, 0xf2, 0x3e, 0xd1, 0xd1, 0x70, 0xec, 0xee, 0x2b, 0x0c, + 0x3f, 0x1a, 0xfd, 0x9f, 0xc1, 0x5a, 0xbe, 0xc7, 0x30, 0x12, 0x3b, 0x09, + 0x58, 0xdf, 0x52, 0xae, 0x36, 0xf4, 0x40, 0xc2, 0x67, 0xd1, 0xba, 0xc6, + 0x0f, 0x81, 0x3b, 0xc4, 0xff, 0x00, 0x9c, 0xb6, 0x32, 0x2b, 0x2e, 0x63, + 0xbe, 0x05, 0x25, 0x30, 0xaa, 0xd7, 0x3c, 0x02, 0x7b, 0x89, 0x53, 0x25, + 0x42, 0xaa, 0xb6, 0x34, 0x6b, 0xd9, 0x4e, 0x27, 0x82, 0x92, 0x96, 0x94, + 0xd2, 0xa5, 0xb5, 0x36, 0xd4, 0x94, 0xc6, 0x52, 0x4f, 0xb5, 0x28, 0x09, + 0x29, 0xf3, 0xef, 0xa8, 0xd9, 0x58, 0xd8, 0xbd, 0x58, 0x8b, 0xfd, 0x86, + 0xd6, 0x96, 0xb1, 0xc7, 0x80, 0x7c, 0xd7, 0x63, 0x97, 0xf5, 0xab, 0x0b, + 0x17, 0x3c, 0x62, 0xbe, 0x0d, 0x7d, 0xed, 0x04, 0x1d, 0x4f, 0x92, 0xf3, + 0xe3, 0xd1, 0x33, 0x9a, 0xe2, 0x77, 0x34, 0x0e, 0x46, 0xa9, 0xcf, 0x44, + 0xca, 0x78, 0x9d, 0xcd, 0x98, 0xee, 0x65, 0x25, 0x3e, 0xa3, 0x87, 0xd4, + 0xb0, 0xf3, 0x28, 0x17, 0xd5, 0x6b, 0x4b, 0x64, 0x8e, 0x47, 0x21, 0x1d, + 0xb7, 0x52, 0xff, 0x00, 0xa0, 0xf6, 0xba, 0x34, 0x30, 0x41, 0xd5, 0x79, + 0x4d, 0x3d, 0x17, 0x2d, 0x92, 0xd3, 0x76, 0xd6, 0x9d, 0x7d, 0xa4, 0xf2, + 0xac, 0x57, 0xd3, 0xb2, 0xaa, 0x05, 0xac, 0xc9, 0x73, 0x41, 0x32, 0x60, + 0x91, 0xa8, 0x49, 0x4f, 0xa7, 0x92, 0xdf, 0x10, 0xa3, 0x65, 0xd4, 0xd5, + 0x06, 0xc7, 0xb5, 0xa0, 0xf0, 0x49, 0x01, 0x79, 0xa8, 0x7f, 0x56, 0xa8, + 0xfa, 0x62, 0xd7, 0x5b, 0x53, 0xb5, 0x73, 0x9c, 0x49, 0x28, 0x8f, 0xfb, + 0x45, 0xb0, 0x6f, 0xb4, 0x90, 0xdf, 0xa2, 0x1d, 0x24, 0x04, 0x94, 0xfa, + 0x2f, 0xaf, 0x46, 0xff, 0x00, 0x4f, 0xd4, 0x6e, 0xfe, 0x76, 0xc8, 0x95, + 0x39, 0x6c, 0xc4, 0x89, 0xf0, 0x5e, 0x6a, 0xd0, 0x4d, 0xad, 0xb3, 0xd7, + 0x8b, 0x1b, 0xf4, 0x5c, 0x09, 0x0a, 0xce, 0x2e, 0x55, 0xf4, 0x65, 0xfd, + 0xa0, 0xe4, 0xb8, 0xba, 0x0b, 0x41, 0x07, 0x5f, 0xc5, 0x25, 0x3d, 0xe5, + 0x8f, 0x63, 0x49, 0x0e, 0x84, 0x1b, 0x32, 0x29, 0x06, 0x46, 0xae, 0x03, + 0x48, 0xf0, 0x59, 0xbd, 0x22, 0xc1, 0xd4, 0x30, 0x9c, 0x0d, 0x8e, 0x75, + 0xb5, 0x3c, 0x82, 0xf2, 0x75, 0x21, 0xde, 0xe0, 0xa1, 0x6f, 0x4d, 0x71, + 0x71, 0xf4, 0x2c, 0x76, 0xe1, 0xf9, 0xba, 0x88, 0x49, 0x4d, 0x86, 0xe6, + 0xd6, 0xe7, 0x90, 0xe6, 0x6a, 0x3b, 0x7f, 0xa8, 0x51, 0x76, 0x63, 0x27, + 0xf4, 0x74, 0x03, 0xfc, 0xa3, 0x00, 0x2c, 0xfb, 0x30, 0xf3, 0x98, 0x4e, + 0xae, 0x9f, 0x3f, 0xf6, 0x29, 0xd5, 0x66, 0x48, 0x68, 0x0e, 0xac, 0x1f, + 0x12, 0xd9, 0xd5, 0x25, 0x36, 0xaf, 0xca, 0xbc, 0x36, 0x65, 0xb5, 0x83, + 0xa7, 0x78, 0x27, 0xe4, 0xb3, 0x45, 0xf5, 0xdc, 0xe7, 0x30, 0xfb, 0xc9, + 0x3a, 0x97, 0x08, 0x02, 0x3e, 0x3d, 0xd5, 0xf7, 0x8f, 0x55, 0xbb, 0x48, + 0x21, 0xdd, 0x81, 0xf3, 0x40, 0x3d, 0x3e, 0x75, 0xf5, 0x1a, 0xc7, 0x4c, + 0xea, 0xe1, 0xf9, 0x12, 0x53, 0x4d, 0xd4, 0x50, 0x6c, 0x70, 0xa4, 0xec, + 0x2d, 0x12, 0x61, 0xdb, 0x41, 0x3f, 0x04, 0x2b, 0x2a, 0x2e, 0x26, 0x48, + 0x88, 0xef, 0xca, 0xbc, 0xec, 0x27, 0x34, 0xcb, 0x6d, 0x13, 0xc8, 0x20, + 0x02, 0x81, 0x66, 0x1b, 0x0b, 0xa6, 0xc7, 0xb9, 0xd1, 0xca, 0x4a, 0x73, + 0x5f, 0x45, 0x33, 0xef, 0x3f, 0x20, 0x86, 0x71, 0x2b, 0x2e, 0x25, 0xb2, + 0xe6, 0x1e, 0x3c, 0x95, 0xeb, 0x7d, 0x16, 0xcb, 0x58, 0xc2, 0xe3, 0xe2, + 0x4a, 0x88, 0xa9, 0xe6, 0x0e, 0xc7, 0x03, 0xda, 0x12, 0x52, 0x16, 0x63, + 0xd6, 0xdf, 0xcc, 0x1e, 0x5a, 0x6a, 0x9f, 0xd1, 0x2e, 0x78, 0x0c, 0x10, + 0x0f, 0x82, 0xb9, 0x4e, 0x1b, 0x9e, 0x65, 0xdc, 0x78, 0x2b, 0x81, 0x95, + 0x52, 0x09, 0x80, 0x23, 0x92, 0x92, 0x9c, 0xef, 0xb3, 0x0d, 0x9e, 0xe3, + 0xee, 0xec, 0xaa, 0x5d, 0x5b, 0x00, 0x33, 0x04, 0x79, 0xf0, 0xad, 0xe5, + 0x65, 0x07, 0x13, 0xb3, 0x4f, 0x3f, 0x15, 0x9e, 0x6b, 0xb2, 0xc2, 0x77, + 0x7d, 0xc9, 0x29, 0xcd, 0xbd, 0xb5, 0xee, 0x8a, 0x46, 0x9f, 0x82, 0x83, + 0x71, 0xad, 0x73, 0x80, 0x00, 0x01, 0xe2, 0xb5, 0xd9, 0x83, 0xae, 0x81, + 0x58, 0x18, 0x8c, 0x60, 0x92, 0x92, 0x9c, 0xa3, 0x83, 0x5d, 0x55, 0x17, + 0xdb, 0xee, 0x3d, 0x87, 0x02, 0x54, 0x7a, 0x3b, 0x5c, 0x33, 0xc0, 0x3d, + 0xc1, 0xda, 0xaf, 0x5e, 0xc3, 0x6b, 0xa0, 0x0d, 0x02, 0x8d, 0x74, 0x7a, + 0x57, 0x54, 0x5b, 0x1b, 0xf7, 0xb6, 0x27, 0xe3, 0x1f, 0xc5, 0x25, 0x37, + 0x8e, 0x3b, 0x9b, 0x6d, 0x54, 0xb8, 0x7b, 0x58, 0x34, 0x3e, 0x27, 0x92, + 0xad, 0xb7, 0x47, 0x49, 0x32, 0x40, 0xe0, 0x6a, 0x89, 0x65, 0x0c, 0x71, + 0x33, 0xa8, 0x69, 0xed, 0xd8, 0xfc, 0x53, 0x6c, 0xae, 0xa7, 0x01, 0xa0, + 0x27, 0x80, 0x12, 0x53, 0x0c, 0xbc, 0x86, 0xb3, 0x03, 0x21, 0xc1, 0xa5, + 0xb2, 0xc2, 0x00, 0xee, 0x49, 0xd1, 0x62, 0x06, 0xc0, 0x6b, 0x86, 0xb3, + 0xaf, 0xcd, 0x74, 0x4f, 0x6d, 0x57, 0x51, 0x7d, 0x66, 0x27, 0xd3, 0x33, + 0xf2, 0x12, 0x02, 0xe7, 0x98, 0x08, 0x68, 0x11, 0xd9, 0x25, 0x3d, 0x3f, + 0xd4, 0x76, 0x96, 0xe0, 0xe5, 0x08, 0x86, 0xfa, 0xe4, 0x83, 0xe2, 0x76, + 0x89, 0x5d, 0x0d, 0xa3, 0xd8, 0xef, 0x82, 0xe1, 0xb0, 0xf3, 0xf3, 0x70, + 0xe9, 0x34, 0xe2, 0xbf, 0x63, 0x5e, 0xe2, 0xf7, 0x1d, 0x39, 0xd0, 0x7f, + 0x04, 0xf7, 0xf5, 0x5e, 0xb3, 0x60, 0x73, 0x3d, 0x53, 0x0e, 0x1c, 0xc8, + 0x1a, 0xa4, 0xa7, 0xb7, 0x03, 0xd8, 0x3e, 0x0a, 0x0c, 0x81, 0x58, 0x93, + 0x1f, 0x15, 0xc3, 0x3f, 0x3f, 0xab, 0x58, 0xc0, 0xc3, 0x7b, 0xda, 0x07, + 0xee, 0x98, 0x28, 0x16, 0xdd, 0xd4, 0x2c, 0x60, 0x6d, 0x99, 0x16, 0x38, + 0x08, 0x81, 0xbb, 0xc3, 0xe0, 0x92, 0x9f, 0x42, 0xd3, 0xc4, 0x26, 0x96, + 0x93, 0x00, 0x82, 0x42, 0xf3, 0xdf, 0x57, 0x3d, 0xa0, 0xd7, 0xf6, 0x8b, + 0x08, 0x77, 0x23, 0x79, 0x53, 0xa7, 0x23, 0x3e, 0x99, 0x75, 0x76, 0xbe, + 0x78, 0x27, 0x77, 0x82, 0x4a, 0x7b, 0xf8, 0x4a, 0x17, 0x09, 0x66, 0x6f, + 0x55, 0x7b, 0x40, 0x37, 0xbe, 0x07, 0x70, 0xe8, 0x43, 0xfb, 0x4f, 0x54, + 0xdd, 0xfd, 0x22, 0xc9, 0x8f, 0xde, 0xd1, 0x25, 0x25, 0x65, 0xe2, 0xc6, + 0xee, 0x25, 0x28, 0x93, 0x31, 0xa2, 0xce, 0x68, 0xb3, 0xd4, 0xda, 0xc2, + 0xe8, 0x53, 0x77, 0xae, 0xe2, 0xea, 0xf7, 0x90, 0x07, 0x2e, 0x49, 0x4d, + 0xe2, 0xf1, 0x07, 0xb0, 0x4d, 0xea, 0xd5, 0x10, 0x4c, 0x95, 0x45, 0x95, + 0x5a, 0x5a, 0x37, 0xbf, 0x70, 0x9e, 0xca, 0x56, 0x52, 0x6b, 0x60, 0x33, + 0x27, 0xc0, 0x24, 0xa6, 0xe3, 0xdd, 0xa7, 0xb3, 0x48, 0x08, 0x1b, 0xec, + 0xb0, 0x06, 0xbb, 0x4e, 0xd2, 0x80, 0x7d, 0x42, 0xd9, 0x26, 0x0f, 0x61, + 0xe4, 0x9e, 0xb0, 0x48, 0xd2, 0x77, 0x1e, 0x07, 0x74, 0x94, 0xc8, 0xd4, + 0xc8, 0x2d, 0x07, 0x51, 0xe2, 0x83, 0x6b, 0x03, 0x00, 0x3b, 0xa7, 0xe1, + 0xc2, 0x9b, 0x66, 0x4b, 0x0b, 0x49, 0x1d, 0xdc, 0x54, 0xbd, 0x23, 0x1a, + 0xe8, 0x0a, 0x4a, 0x7b, 0x2f, 0xaa, 0xd8, 0x82, 0x9e, 0x8c, 0xcb, 0x39, + 0x75, 0xee, 0x75, 0x8e, 0x23, 0xc2, 0x76, 0x81, 0xf8, 0x2d, 0x27, 0x82, + 0xdf, 0xa2, 0x20, 0x9e, 0x4a, 0xcf, 0xfa, 0xa7, 0x70, 0xb3, 0xa4, 0x36, + 0x92, 0x65, 0xf4, 0x39, 0xcc, 0x77, 0xc1, 0xc7, 0x70, 0xfc, 0xaa, 0xfd, + 0xe7, 0xd1, 0x74, 0x7e, 0x69, 0xe1, 0x25, 0x31, 0x2f, 0x00, 0x43, 0xc7, + 0x1c, 0xf7, 0x40, 0x37, 0x52, 0xe2, 0x40, 0x6c, 0x0f, 0x08, 0x82, 0x9f, + 0xd7, 0x61, 0x24, 0x13, 0xaf, 0x65, 0x17, 0x33, 0x7b, 0x4e, 0x80, 0x83, + 0xe7, 0x21, 0x25, 0x20, 0xbd, 0xa1, 0xc7, 0xda, 0x3d, 0xa3, 0xf2, 0x2a, + 0x8f, 0xa9, 0xa5, 0xf1, 0xb3, 0x64, 0xf0, 0xac, 0xd9, 0x53, 0xb6, 0xfb, + 0x09, 0x1e, 0x52, 0x82, 0x69, 0xb4, 0x82, 0xfd, 0xc4, 0xc7, 0x24, 0xf0, + 0x92, 0x9a, 0xa6, 0xa6, 0xb4, 0x18, 0x71, 0x74, 0x21, 0x7a, 0x59, 0x47, + 0x51, 0x24, 0x1d, 0x4c, 0xca, 0xb8, 0xdb, 0x0d, 0x73, 0xba, 0x3c, 0x04, + 0x29, 0x0b, 0x2d, 0xb7, 0x46, 0x08, 0x49, 0x4d, 0x3a, 0xf1, 0x43, 0x06, + 0xeb, 0x8e, 0xbe, 0x08, 0xb5, 0xb5, 0xd6, 0x18, 0x60, 0xd8, 0xcf, 0xc4, + 0xab, 0xb5, 0xf4, 0xfb, 0x6d, 0x8f, 0x53, 0xe8, 0xfd, 0xc8, 0xce, 0xa6, + 0x9c, 0x61, 0x0e, 0x00, 0x1e, 0xc3, 0xc5, 0x25, 0x20, 0x6d, 0x4d, 0xaa, + 0xad, 0xc4, 0xe8, 0x3b, 0xac, 0x8b, 0xef, 0xb2, 0xe7, 0xb9, 0x8d, 0x1b, + 0x59, 0x3c, 0x77, 0x3f, 0x15, 0xa1, 0x7d, 0xc6, 0xd3, 0x1c, 0xf8, 0x00, + 0x85, 0x56, 0x3d, 0x60, 0x9b, 0x09, 0x81, 0xdc, 0x9f, 0xe0, 0x92, 0x9a, + 0x0c, 0xc3, 0x79, 0xd4, 0x8e, 0x11, 0xdb, 0x88, 0x1b, 0xac, 0x2b, 0x4f, + 0xbe, 0x96, 0x88, 0x69, 0xe3, 0xc0, 0x21, 0x3b, 0x21, 0xbc, 0x1d, 0x3c, + 0x25, 0x25, 0x31, 0x21, 0xac, 0x6f, 0x98, 0x55, 0x6c, 0x24, 0xc8, 0xed, + 0xe6, 0xa7, 0x6b, 0xb7, 0x1d, 0xad, 0x3a, 0x4f, 0x29, 0xea, 0x64, 0xe8, + 0xe1, 0x3f, 0xca, 0xec, 0x92, 0x90, 0x8a, 0xe3, 0x91, 0xf3, 0x08, 0x8c, + 0xc3, 0x73, 0xa1, 0xc0, 0x71, 0xa8, 0x91, 0xc1, 0x56, 0x58, 0xc6, 0x8e, + 0x44, 0xab, 0x75, 0x56, 0xe7, 0xc4, 0x7d, 0xc9, 0x29, 0xaa, 0x5b, 0x6d, + 0x16, 0x8c, 0x86, 0x7f, 0x35, 0x64, 0xef, 0xa8, 0xfe, 0x6b, 0x8f, 0xd2, + 0x2d, 0xf2, 0x3c, 0xc2, 0xb0, 0x5f, 0x8d, 0x90, 0x00, 0x90, 0xe7, 0x19, + 0x96, 0x9e, 0xd0, 0x91, 0xcb, 0xc5, 0xad, 0xe6, 0x93, 0x0f, 0x6d, 0x64, + 0xba, 0xd7, 0x9f, 0xa2, 0x0e, 0x9e, 0xd6, 0x8e, 0xea, 0x87, 0x50, 0xea, + 0x26, 0xf2, 0xca, 0xf1, 0xb1, 0xf6, 0x17, 0x3c, 0x06, 0xb8, 0xfb, 0x74, + 0x9d, 0x60, 0x37, 0x5e, 0x3c, 0x52, 0x52, 0xba, 0xb6, 0x4d, 0x78, 0x95, + 0x7d, 0x9d, 0x83, 0xf4, 0x96, 0x8e, 0xdd, 0x9a, 0x74, 0x2e, 0x59, 0x75, + 0x38, 0x16, 0x6d, 0x8d, 0x7b, 0x2b, 0x3d, 0x4b, 0x22, 0xab, 0xab, 0x6b, + 0x5c, 0xd0, 0x2d, 0xad, 0xdb, 0x5a, 0x34, 0xdc, 0xd6, 0xc6, 0xa0, 0xc2, + 0x06, 0x2b, 0x4e, 0xef, 0x8a, 0x4a, 0x59, 0xb6, 0xfb, 0x76, 0xcc, 0x47, + 0x64, 0xa7, 0x71, 0x1a, 0xeb, 0xda, 0x54, 0x6c, 0xc7, 0xb1, 0xb7, 0x17, + 0xb4, 0x1e, 0x4c, 0x8f, 0x25, 0x1f, 0x4e, 0xcb, 0x3d, 0xc1, 0x90, 0xde, + 0xc3, 0xb9, 0x49, 0x49, 0x0b, 0xbb, 0x12, 0x27, 0x84, 0xde, 0xa3, 0x5b, + 0xde, 0x4a, 0x61, 0x86, 0xfd, 0x81, 0xc4, 0x12, 0x3b, 0xf9, 0x27, 0x65, + 0x04, 0x89, 0x1c, 0x03, 0xca, 0x4a, 0x57, 0xaa, 0x09, 0x05, 0xa3, 0xe2, + 0x90, 0xb0, 0x82, 0x44, 0x44, 0xa4, 0x1a, 0xc0, 0x4c, 0x02, 0xf7, 0x4e, + 0xa0, 0x04, 0x4a, 0xaf, 0xa9, 0xae, 0xf7, 0xd7, 0x07, 0xc0, 0xea, 0x92, + 0x91, 0xeb, 0x03, 0x5e, 0x13, 0xee, 0x3e, 0x1a, 0x29, 0xda, 0xca, 0x9e, + 0xf9, 0x61, 0xf8, 0x88, 0x43, 0xf4, 0x1b, 0xbe, 0x37, 0x1f, 0x82, 0x4a, + 0x65, 0xbe, 0x98, 0x0e, 0xfa, 0x24, 0xe8, 0x41, 0xec, 0x14, 0x4d, 0xd5, + 0x02, 0x43, 0x48, 0x3a, 0x72, 0x02, 0x45, 0x8d, 0x0d, 0x93, 0x6b, 0x49, + 0x76, 0x84, 0x0e, 0xff, 0x00, 0x04, 0xd5, 0xb5, 0xa6, 0x5b, 0x1a, 0x0d, + 0x41, 0x29, 0x29, 0x25, 0x76, 0x34, 0x80, 0x41, 0x86, 0x9d, 0x36, 0xa7, + 0x75, 0x95, 0x30, 0x90, 0x1c, 0x64, 0xeb, 0x11, 0xc2, 0x8b, 0x5f, 0x5f, + 0xa8, 0x46, 0xc0, 0x5b, 0xda, 0x07, 0x74, 0xd1, 0x24, 0x97, 0xc0, 0x1f, + 0x8f, 0xc1, 0x25, 0x29, 0x8e, 0xac, 0x41, 0x04, 0x12, 0x78, 0x90, 0x91, + 0xb4, 0xba, 0x76, 0xeb, 0x07, 0xb0, 0xee, 0xa4, 0xef, 0x48, 0x37, 0x68, + 0x24, 0xb6, 0x65, 0xa6, 0x27, 0xe4, 0x93, 0x2d, 0x20, 0x03, 0x41, 0x97, + 0x0f, 0xa4, 0x38, 0x3a, 0xa4, 0xa5, 0xbd, 0xaf, 0x3c, 0xed, 0x74, 0x6b, + 0xa7, 0x05, 0x41, 0xce, 0xad, 0xc0, 0xea, 0xe2, 0x74, 0xd5, 0x18, 0xb8, + 0x35, 0x8e, 0x75, 0xad, 0x9f, 0x1d, 0xa3, 0x5d, 0x50, 0x9d, 0x76, 0x3b, + 0x84, 0x06, 0x16, 0x0e, 0xce, 0x77, 0x74, 0x94, 0xed, 0xfd, 0x53, 0xb4, + 0xb7, 0x2b, 0x22, 0xb6, 0x13, 0xb7, 0xd3, 0x0e, 0x77, 0xc5, 0xa6, 0x3f, + 0x8a, 0xea, 0x1c, 0x6a, 0xbd, 0x9b, 0x5d, 0xee, 0x07, 0xba, 0xe7, 0xbe, + 0xa7, 0x54, 0xc2, 0x32, 0xed, 0x10, 0x4f, 0xb5, 0x9e, 0x71, 0xa9, 0x5b, + 0x36, 0x57, 0x58, 0x74, 0xbc, 0x9a, 0xde, 0x78, 0x7b, 0x74, 0x07, 0xe2, + 0x38, 0x49, 0x4d, 0x4c, 0xac, 0x3b, 0xeb, 0x97, 0x57, 0xfa, 0x46, 0x8e, + 0x3c, 0x55, 0x3a, 0xf2, 0xaf, 0xad, 0xc5, 0xae, 0x90, 0x16, 0xc0, 0x6e, + 0x44, 0x4b, 0x5e, 0xcb, 0x5b, 0xda, 0x4c, 0x1f, 0xe2, 0x85, 0x66, 0x37, + 0xac, 0x21, 0xf5, 0x00, 0x7c, 0x41, 0x07, 0x94, 0x94, 0xd6, 0xaa, 0xe6, + 0x58, 0x41, 0x74, 0x13, 0xdb, 0x5f, 0xe0, 0x8a, 0xe0, 0xd2, 0xcd, 0xba, + 0x00, 0xee, 0xea, 0xb5, 0xbd, 0x3e, 0xda, 0xbd, 0xcd, 0xd0, 0x0f, 0x82, + 0x54, 0x0b, 0x04, 0x9b, 0x66, 0x1a, 0x26, 0x75, 0xe1, 0x25, 0x36, 0x2b, + 0xc2, 0xc6, 0x80, 0x4c, 0xb8, 0x8d, 0x41, 0x84, 0x61, 0x66, 0x25, 0x0d, + 0x93, 0x1f, 0x25, 0x83, 0x97, 0xd6, 0x99, 0x5f, 0xb2, 0x96, 0x92, 0x78, + 0xd0, 0x1e, 0x56, 0x6b, 0xf2, 0x7a, 0x85, 0xf2, 0x1b, 0x22, 0x4e, 0x92, + 0x92, 0x9e, 0x97, 0x27, 0xac, 0xb1, 0xa2, 0x2b, 0x1f, 0x79, 0xd1, 0x64, + 0xdf, 0xd4, 0x1b, 0x63, 0xa5, 0xce, 0xd7, 0xcc, 0xe8, 0xa9, 0x57, 0xd3, + 0x32, 0x2d, 0x6c, 0xdd, 0x63, 0x8f, 0xe0, 0xa6, 0x3a, 0x4b, 0x07, 0x0d, + 0x2e, 0x3e, 0x29, 0x29, 0x93, 0xba, 0x83, 0x58, 0x0f, 0xb9, 0xa9, 0x8f, + 0x54, 0xad, 0xc4, 0x6e, 0x71, 0x71, 0x1f, 0x9a, 0xd1, 0xa2, 0x2d, 0x7d, + 0x35, 0x80, 0x89, 0x6e, 0xbe, 0x6a, 0xdd, 0x38, 0x14, 0x36, 0x77, 0x34, + 0x02, 0x7b, 0x24, 0xa6, 0x9d, 0x59, 0xed, 0xb6, 0x01, 0xac, 0xc7, 0x68, + 0x0a, 0x76, 0x0b, 0xad, 0xd2, 0xb1, 0xb5, 0xbe, 0x25, 0x1e, 0xc6, 0x53, + 0xf4, 0x6a, 0x61, 0x7b, 0xbb, 0x06, 0xe8, 0x14, 0x2a, 0xc3, 0xba, 0x66, + 0xd3, 0xe9, 0xb3, 0xc2, 0x75, 0x49, 0x4c, 0x6a, 0xa3, 0x58, 0x2d, 0xde, + 0xf1, 0xfe, 0xba, 0xab, 0x62, 0x88, 0xf7, 0x3f, 0x42, 0x0e, 0x80, 0x70, + 0x90, 0xb6, 0xaa, 0x86, 0xca, 0x46, 0xbe, 0x30, 0xa3, 0x6d, 0xbb, 0x75, + 0x7b, 0x83, 0x7c, 0x5c, 0x52, 0x53, 0x37, 0x3c, 0x34, 0x80, 0xd1, 0x24, + 0xa1, 0xdb, 0x91, 0xe9, 0x30, 0xc7, 0xd3, 0x32, 0x02, 0xc8, 0xcd, 0xfa, + 0xc5, 0xd3, 0x71, 0xcb, 0x98, 0xd7, 0x7a, 0xf6, 0x0e, 0x7d, 0x3d, 0x40, + 0x3f, 0x15, 0x0c, 0x1b, 0xb2, 0x3a, 0x98, 0xf5, 0x63, 0xd3, 0xaa, 0x62, + 0x3b, 0x94, 0x94, 0xb9, 0xca, 0xad, 0x99, 0x16, 0x31, 0x87, 0xd6, 0xbe, + 0xc7, 0x49, 0x6f, 0x66, 0x98, 0xe3, 0x49, 0x46, 0x27, 0xec, 0x74, 0xbb, + 0x2e, 0xd3, 0xbf, 0x26, 0x08, 0xad, 0xae, 0xd1, 0x81, 0xc7, 0x4e, 0x39, + 0xd1, 0x06, 0xac, 0x26, 0xd5, 0x97, 0x96, 0xc1, 0xed, 0x71, 0x70, 0x82, + 0x39, 0x82, 0xd6, 0xca, 0x97, 0x52, 0xc6, 0xf4, 0xfa, 0x63, 0x48, 0xff, + 0x00, 0x07, 0x60, 0xd3, 0xfa, 0xc0, 0xa4, 0xa7, 0x3a, 0x91, 0x6d, 0xb6, + 0x9b, 0x2c, 0xd5, 0xee, 0x24, 0xb8, 0xf9, 0x95, 0x7b, 0x1a, 0x03, 0xc4, + 0xf3, 0x23, 0xf1, 0x55, 0x70, 0x89, 0x26, 0x1d, 0xdf, 0x88, 0x57, 0x19, + 0x5b, 0x41, 0x0e, 0x93, 0xc8, 0x94, 0x94, 0xcf, 0x2e, 0xf7, 0xd5, 0x7b, + 0x9a, 0xd2, 0x09, 0x1a, 0x80, 0x7c, 0xf5, 0x55, 0xd9, 0x97, 0x6d, 0x6e, + 0x26, 0xd6, 0x80, 0xd3, 0xfb, 0xba, 0xc2, 0xb7, 0x92, 0xca, 0xc5, 0x9e, + 0xa3, 0x80, 0x73, 0x8b, 0x46, 0xbf, 0x0d, 0x15, 0x3d, 0xfb, 0x9c, 0x7d, + 0x9a, 0x44, 0x00, 0x08, 0x94, 0x94, 0x94, 0xe7, 0x87, 0x32, 0x18, 0xed, + 0x3b, 0xe9, 0xa2, 0x05, 0x79, 0x2f, 0x65, 0xdb, 0x3f, 0xc1, 0x1d, 0x40, + 0x03, 0xba, 0x08, 0x6d, 0xcf, 0x25, 0x8c, 0xab, 0xd3, 0x60, 0x3a, 0x92, + 0x64, 0xb9, 0x15, 0xaf, 0x2c, 0x7f, 0xbc, 0x6e, 0xda, 0x22, 0x3f, 0x86, + 0x89, 0x29, 0x27, 0xda, 0xda, 0x09, 0xdb, 0x00, 0x70, 0x7b, 0x6a, 0x88, + 0x5c, 0xd7, 0xb5, 0xae, 0x3a, 0x1f, 0x35, 0x55, 0xdf, 0xa7, 0x78, 0x0d, + 0xa8, 0x87, 0x0e, 0x24, 0x40, 0x29, 0x3f, 0x7d, 0x83, 0x61, 0xf6, 0x39, + 0xa7, 0xb2, 0x4a, 0x4e, 0xe6, 0x1d, 0x43, 0x4f, 0xb8, 0xf7, 0x52, 0xf4, + 0xab, 0x8f, 0x4b, 0x7f, 0xe9, 0x38, 0xde, 0xab, 0xcb, 0xeb, 0xac, 0xbc, + 0xba, 0x1a, 0x34, 0x24, 0xf3, 0x25, 0x47, 0x69, 0x9f, 0xa6, 0x37, 0x73, + 0x3d, 0xd2, 0x53, 0x32, 0xd6, 0x31, 0xd2, 0xd3, 0x3b, 0x75, 0xdd, 0x1f, + 0x91, 0x16, 0x8b, 0x45, 0x9e, 0xd8, 0xee, 0x48, 0x31, 0x08, 0x6e, 0xc3, + 0x0f, 0x87, 0x36, 0xe9, 0x2d, 0xd0, 0x80, 0x54, 0xeb, 0xc6, 0x82, 0xd0, + 0x1e, 0xe3, 0xb7, 0x93, 0x29, 0x29, 0x8b, 0x8e, 0xe7, 0x9d, 0x62, 0xc6, + 0xf3, 0xae, 0x8a, 0x26, 0xa0, 0xf0, 0xe7, 0x4c, 0xba, 0x23, 0x6c, 0xa2, + 0x59, 0x56, 0xa5, 0xc5, 0xb2, 0x26, 0x5a, 0x48, 0x53, 0x0d, 0x7b, 0x40, + 0x2d, 0x66, 0xe7, 0x38, 0x41, 0x9d, 0x12, 0x52, 0x20, 0x1c, 0x2b, 0x00, + 0x6b, 0xae, 0xb0, 0x35, 0x43, 0x7d, 0x4d, 0xae, 0x20, 0x99, 0x71, 0x98, + 0x03, 0x50, 0x3c, 0xca, 0xb3, 0xf6, 0x7b, 0x9c, 0x59, 0x67, 0x94, 0x00, + 0xde, 0x24, 0x2a, 0xce, 0xaa, 0xf6, 0xbe, 0x09, 0x75, 0x85, 0xd2, 0x40, + 0x8d, 0x07, 0xc5, 0x25, 0x25, 0x0d, 0x73, 0x9e, 0xd0, 0xeb, 0x46, 0xd1, + 0xae, 0xd0, 0x61, 0x4d, 0xff, 0x00, 0x67, 0x24, 0x86, 0xb0, 0x49, 0x80, + 0x86, 0x03, 0x18, 0x5a, 0x5e, 0xc0, 0x6c, 0x22, 0x09, 0xe0, 0x22, 0xb9, + 0xb6, 0xb9, 0xe5, 0xd5, 0xb5, 0xad, 0x68, 0x00, 0x69, 0xca, 0x4a, 0x74, + 0x7e, 0xac, 0xe6, 0xb7, 0x17, 0xaa, 0x7d, 0x90, 0x90, 0x1b, 0x78, 0xda, + 0xe1, 0xe0, 0xe1, 0xab, 0x7f, 0xb9, 0x75, 0xf7, 0x56, 0xcb, 0x5a, 0x5a, + 0x7e, 0xee, 0xe3, 0xcd, 0x79, 0xe3, 0xaa, 0xad, 0xc5, 0xdb, 0x88, 0x36, + 0x01, 0x27, 0xe3, 0xdb, 0x85, 0xd0, 0x74, 0xae, 0xb5, 0x99, 0x63, 0x0b, + 0x2f, 0xfd, 0x35, 0x95, 0x33, 0x70, 0x78, 0x10, 0x48, 0x11, 0xa1, 0xf1, + 0x49, 0x4e, 0xbb, 0xe8, 0xcc, 0xa1, 0xc5, 0xd5, 0x90, 0xf6, 0xf6, 0x04, + 0x28, 0x8c, 0xab, 0x9b, 0xfd, 0x26, 0x8d, 0x3f, 0x7a, 0xb3, 0xaf, 0xcc, + 0x21, 0x62, 0xfd, 0x64, 0xc6, 0xb5, 0xae, 0xf5, 0xd8, 0xfa, 0x76, 0x9d, + 0xbb, 0x88, 0x96, 0xcf, 0xc4, 0x29, 0xd9, 0xd4, 0x2b, 0xbb, 0xfa, 0x35, + 0xf4, 0xba, 0x79, 0x0e, 0x70, 0x05, 0x25, 0x33, 0x39, 0x58, 0x8e, 0x30, + 0x6b, 0x2e, 0x91, 0xf9, 0xdd, 0x90, 0xf2, 0x1b, 0x8f, 0x65, 0x6f, 0x15, + 0xbd, 0xd5, 0xb9, 0xe2, 0x25, 0xba, 0xc0, 0xf8, 0x02, 0xab, 0xdb, 0x5b, + 0x6c, 0xac, 0xd9, 0x90, 0xea, 0xe9, 0x68, 0x30, 0x1c, 0xc2, 0x1c, 0x0c, + 0xfc, 0x0a, 0xce, 0xb6, 0xa6, 0x83, 0x14, 0xe4, 0xc8, 0xf1, 0xe1, 0x25, + 0x2c, 0x31, 0xd9, 0x59, 0x6d, 0x54, 0xb1, 0xf6, 0x80, 0xe2, 0x5c, 0xf7, + 0x88, 0x24, 0x9f, 0xbd, 0x5a, 0x66, 0x39, 0x6e, 0xae, 0x66, 0xdd, 0x7b, + 0xac, 0xdb, 0x2d, 0xbe, 0xb2, 0x00, 0xc8, 0x92, 0x7f, 0x74, 0xcf, 0xe4, + 0x28, 0x6f, 0xb2, 0xf7, 0x7d, 0x3b, 0x9c, 0x7c, 0xc9, 0x80, 0x92, 0x9d, + 0x87, 0xbd, 0xb5, 0xc8, 0x73, 0x80, 0x6f, 0x72, 0x99, 0xb9, 0x98, 0x00, + 0x6b, 0x68, 0x71, 0xf0, 0x03, 0xfb, 0x96, 0x2d, 0x95, 0xe2, 0xb1, 0xa5, + 0xd7, 0x5e, 0xc9, 0x99, 0x97, 0x58, 0x27, 0xf2, 0xa0, 0x36, 0xfc, 0x27, + 0x58, 0x2a, 0xa6, 0xd7, 0x5a, 0xe3, 0xf9, 0xb5, 0x07, 0x3b, 0xf1, 0x88, + 0x49, 0x4f, 0x40, 0x7a, 0x86, 0x1b, 0x4c, 0x80, 0x49, 0x3c, 0x71, 0x2a, + 0x0e, 0xea, 0x35, 0x39, 0xb2, 0xca, 0x8e, 0xbc, 0x6e, 0x27, 0x55, 0x90, + 0xc7, 0x16, 0xb7, 0x6b, 0x31, 0xdc, 0x5d, 0x3a, 0x97, 0x39, 0xa3, 0xf1, + 0xd5, 0x33, 0xf2, 0xf2, 0x29, 0x6f, 0xa6, 0xda, 0xda, 0x4f, 0x9b, 0x89, + 0x77, 0xe0, 0x12, 0x53, 0x72, 0xce, 0xb1, 0xe9, 0xba, 0x08, 0x65, 0x4d, + 0x3c, 0x16, 0x91, 0xdb, 0x94, 0x1b, 0x73, 0xda, 0x5a, 0x5f, 0x6d, 0xbe, + 0x95, 0x23, 0x5d, 0xef, 0x31, 0x3f, 0x09, 0xd5, 0x64, 0xf5, 0x0b, 0x6f, + 0x66, 0x3b, 0xaf, 0xb9, 0xc1, 0xbb, 0x44, 0xb5, 0x8d, 0x68, 0x89, 0xe0, + 0x73, 0x2b, 0x9d, 0xae, 0xf7, 0x64, 0xda, 0x3d, 0x77, 0x97, 0x3c, 0xe8, + 0x1c, 0xe3, 0x29, 0x29, 0xea, 0x6c, 0xeb, 0xf5, 0x6c, 0x73, 0x70, 0x6b, + 0x36, 0x96, 0xf3, 0x63, 0xa4, 0x03, 0xe7, 0x1c, 0xac, 0x2c, 0xee, 0xa3, + 0xd4, 0x2c, 0xbf, 0xf5, 0xa7, 0xb9, 0xd5, 0x96, 0xcb, 0x6b, 0x1c, 0x4f, + 0x6f, 0xc5, 0x6c, 0xf4, 0x5c, 0x26, 0xfa, 0xbb, 0x1e, 0x3d, 0xb6, 0x02, + 0x10, 0xba, 0xb6, 0x13, 0x69, 0xba, 0x87, 0x11, 0xad, 0x6f, 0x73, 0x5d, + 0xe0, 0x1a, 0x04, 0xc9, 0x49, 0x4e, 0x1d, 0x58, 0x6e, 0x68, 0xdc, 0xff, + 0x00, 0xa6, 0xee, 0x47, 0x82, 0xee, 0xba, 0x0e, 0x30, 0xaf, 0xa7, 0xd2, + 0x38, 0x91, 0xbb, 0xef, 0xd5, 0x71, 0xb6, 0xd8, 0x72, 0x32, 0xeb, 0xa6, + 0x82, 0x0b, 0x5a, 0x43, 0xde, 0xe1, 0xa8, 0x80, 0xbb, 0xfe, 0x96, 0xd0, + 0x30, 0x68, 0x3f, 0xc8, 0x02, 0x07, 0x96, 0x89, 0x29, 0xac, 0x5a, 0x3e, + 0xdf, 0x93, 0xa6, 0xb0, 0xc3, 0xff, 0x00, 0x45, 0x0b, 0xa9, 0x00, 0xee, + 0x97, 0x6c, 0xf6, 0x2d, 0x3f, 0x71, 0x08, 0x8e, 0x33, 0xd4, 0x72, 0x9a, + 0x39, 0xda, 0xc1, 0xff, 0x00, 0x45, 0x2c, 0xa6, 0x17, 0xf4, 0xfb, 0xd9, + 0xdc, 0xb0, 0x9f, 0xbb, 0x54, 0x94, 0xf3, 0xd5, 0xd8, 0x41, 0x6e, 0xde, + 0x66, 0x15, 0xfa, 0x5d, 0xbd, 0xae, 0x31, 0x13, 0xc8, 0x54, 0x6a, 0x20, + 0x19, 0x63, 0x64, 0x8e, 0xe8, 0xb8, 0x97, 0x3d, 0xce, 0x33, 0xa2, 0x4a, + 0x6e, 0xe5, 0xb9, 0x95, 0x35, 0x8e, 0x78, 0x04, 0x6c, 0x32, 0xee, 0x20, + 0x4a, 0xa4, 0xcc, 0xba, 0x0c, 0x06, 0x58, 0xd7, 0x30, 0x8d, 0x04, 0x41, + 0x95, 0x63, 0x30, 0x17, 0x3c, 0xb6, 0x64, 0xb1, 0xa0, 0x01, 0xf1, 0x12, + 0xb3, 0x9d, 0x4d, 0x0f, 0x32, 0x43, 0x59, 0xb4, 0xc8, 0x31, 0xac, 0x94, + 0x94, 0xd9, 0xae, 0xd7, 0xb9, 0xbb, 0xea, 0x7b, 0x41, 0xe0, 0x92, 0x3b, + 0x28, 0x82, 0xd6, 0x3d, 0xcf, 0x99, 0x27, 0x9f, 0x8f, 0x92, 0x83, 0x5b, + 0x5b, 0x19, 0x15, 0xea, 0x41, 0xd7, 0xc9, 0x38, 0xfb, 0x45, 0x6d, 0xdc, + 0x35, 0x71, 0xe2, 0x7c, 0x12, 0x53, 0x68, 0xd9, 0x90, 0xfa, 0xa5, 0xa4, + 0x79, 0xc9, 0xd4, 0x21, 0x6c, 0xa8, 0x7e, 0x6c, 0x3a, 0x35, 0x32, 0x93, + 0x9d, 0x79, 0x31, 0x2d, 0x68, 0x89, 0x3f, 0x14, 0x0b, 0x0e, 0xfd, 0xdb, + 0x5f, 0xc1, 0x83, 0x23, 0x59, 0x49, 0x49, 0xcb, 0x58, 0x40, 0x01, 0xb3, + 0x5f, 0xe7, 0x03, 0xae, 0xa8, 0x73, 0x56, 0xe8, 0xd8, 0xdf, 0x1f, 0x92, + 0x85, 0x55, 0xdc, 0xe9, 0xf4, 0xc8, 0x20, 0x68, 0x77, 0x77, 0x44, 0xd6, + 0x7d, 0x2d, 0xad, 0x98, 0x8d, 0xdd, 0xa7, 0xe2, 0x92, 0x92, 0xbe, 0x97, + 0x56, 0xcd, 0xad, 0xe1, 0xdf, 0x8f, 0xcd, 0x2a, 0xb0, 0xae, 0x6b, 0x37, + 0x87, 0x41, 0x91, 0xa1, 0x28, 0x6c, 0xc9, 0xde, 0x77, 0x43, 0x60, 0x6a, + 0xd9, 0x28, 0x55, 0xe6, 0x5d, 0xfe, 0x14, 0x87, 0x17, 0x92, 0x36, 0xcc, + 0xec, 0xf0, 0x29, 0x29, 0xb6, 0xef, 0xb4, 0xfb, 0xa2, 0xdd, 0xbb, 0x46, + 0x80, 0x8d, 0xcd, 0x27, 0xe2, 0xa5, 0x5d, 0xd6, 0x9a, 0xbe, 0xce, 0xd0, + 0x1d, 0x6d, 0xa0, 0x83, 0x3f, 0x45, 0x52, 0x76, 0x46, 0x45, 0x5a, 0x38, + 0x3e, 0xf8, 0xe1, 0xa2, 0x06, 0xa8, 0x6d, 0xbf, 0x27, 0x73, 0x77, 0xb6, + 0x1e, 0xef, 0x70, 0x8d, 0x00, 0xf8, 0xa4, 0xa7, 0x41, 0xd7, 0x8a, 0xd8, + 0x2a, 0xde, 0x03, 0xdb, 0xed, 0x70, 0x93, 0xa4, 0xa1, 0x0b, 0xb2, 0x5b, + 0x78, 0x61, 0x6b, 0x63, 0x8d, 0xcd, 0x71, 0x2a, 0xbb, 0x32, 0x9f, 0xb5, + 0xc0, 0x35, 0xaf, 0x23, 0x57, 0x36, 0x07, 0x3e, 0x28, 0xb5, 0xde, 0xfb, + 0xab, 0xf5, 0x05, 0x62, 0x01, 0xda, 0xe7, 0x13, 0xb3, 0xee, 0x05, 0x25, + 0x36, 0x1f, 0x58, 0x00, 0xbf, 0x63, 0x88, 0x7e, 0x82, 0x4c, 0xa1, 0x7a, + 0x37, 0x9b, 0x58, 0x77, 0x11, 0x8e, 0x20, 0x73, 0xaf, 0xcd, 0x4e, 0xa7, + 0x59, 0xeb, 0x0d, 0x65, 0xb5, 0x92, 0x43, 0x66, 0x04, 0xf9, 0xf8, 0xa0, + 0xbf, 0x31, 0xfb, 0xde, 0xed, 0xcd, 0xac, 0x03, 0xf4, 0x39, 0x25, 0xde, + 0x01, 0x25, 0x2d, 0x63, 0x0d, 0x2e, 0x7c, 0x35, 0xde, 0xef, 0xce, 0x02, + 0x7d, 0xab, 0x53, 0xea, 0x9b, 0x6e, 0x77, 0x54, 0x78, 0xb1, 0xc5, 0xd5, + 0xbe, 0x9b, 0x01, 0x69, 0xed, 0xc2, 0xc9, 0xaf, 0x34, 0xed, 0x39, 0x16, + 0x1d, 0xac, 0xfc, 0xd1, 0x12, 0x4f, 0x8e, 0x8b, 0x7f, 0xea, 0x83, 0xdb, + 0x6e, 0x56, 0x4e, 0x44, 0x47, 0xd0, 0xae, 0x7f, 0xaf, 0x2e, 0xff, 0x00, + 0xbe, 0xa4, 0xa7, 0x53, 0x0f, 0x12, 0xb3, 0x65, 0xf8, 0xef, 0x12, 0xd7, + 0x8d, 0xcd, 0x3e, 0x6d, 0xd0, 0xfe, 0x05, 0x50, 0xcb, 0xe8, 0xd5, 0xb6, + 0xc2, 0xe0, 0xdf, 0x81, 0x5a, 0xb5, 0x9d, 0x99, 0x26, 0x3b, 0x3b, 0x5f, + 0x87, 0x75, 0x72, 0xd6, 0x07, 0x0f, 0x1f, 0x8a, 0x4a, 0x79, 0xa3, 0xd3, + 0xea, 0xb1, 0x81, 0xae, 0x67, 0x02, 0x10, 0x7f, 0x62, 0xe2, 0x93, 0xc6, + 0xab, 0xa4, 0x7e, 0x2b, 0x7b, 0x69, 0x2a, 0xb5, 0x98, 0xc5, 0xae, 0x04, + 0x72, 0x92, 0x9c, 0x41, 0xd1, 0x31, 0x87, 0xe6, 0x7f, 0x05, 0x37, 0x74, + 0x9c, 0x3a, 0x5b, 0xea, 0x58, 0xc1, 0xb7, 0xb4, 0xea, 0x49, 0xf2, 0x5a, + 0x96, 0x9a, 0xeb, 0x61, 0x75, 0x9f, 0xd9, 0x1d, 0xc9, 0x54, 0x45, 0x37, + 0xe6, 0xd9, 0x02, 0x20, 0x71, 0xe0, 0xd0, 0x92, 0x9c, 0xdf, 0xd9, 0xed, + 0xca, 0xb8, 0x35, 0x95, 0x01, 0xfb, 0xad, 0x03, 0x40, 0x3c, 0x4a, 0xb8, + 0x28, 0xc6, 0xc5, 0xaf, 0xd1, 0xc6, 0x1e, 0xe3, 0xfc, 0xe5, 0xbe, 0x3f, + 0xc9, 0x6f, 0x92, 0xb6, 0xed, 0x94, 0xb3, 0xd0, 0xa3, 0x59, 0xd2, 0xcb, + 0x3b, 0xbb, 0xe0, 0x99, 0xb5, 0x57, 0x5d, 0x65, 0xc4, 0x71, 0xaa, 0x4a, + 0x6a, 0xd8, 0xd2, 0xc6, 0x48, 0xd3, 0xc0, 0xf0, 0xa9, 0xb1, 0xa0, 0x97, + 0x58, 0xfd, 0x63, 0xc3, 0x55, 0x62, 0xef, 0x57, 0x2a, 0xdf, 0x4d, 0x93, + 0xb7, 0x92, 0x4a, 0xa3, 0xd5, 0xb3, 0x2a, 0xe9, 0xd8, 0xfb, 0x1a, 0x77, + 0x59, 0xc3, 0x47, 0x89, 0xfe, 0xe0, 0x92, 0x9c, 0x3f, 0xac, 0x39, 0x7b, + 0xed, 0x18, 0xe3, 0xe8, 0xc4, 0xbb, 0xe3, 0xd9, 0x66, 0x9c, 0x47, 0xb5, + 0x9e, 0xab, 0x3f, 0x49, 0x49, 0xfc, 0xf6, 0xf6, 0xf8, 0xf8, 0x2b, 0xf6, + 0x74, 0xf7, 0x5f, 0x53, 0x6e, 0x0e, 0xfd, 0x60, 0x8d, 0xce, 0x27, 0x87, + 0x13, 0xaa, 0xaf, 0x86, 0x73, 0x31, 0xb2, 0x45, 0x55, 0xb7, 0xf4, 0x96, + 0x1d, 0xbe, 0x9b, 0x84, 0x87, 0x4f, 0x88, 0x49, 0x4e, 0xdf, 0xd5, 0xeb, + 0x33, 0x6c, 0x22, 0xc7, 0x3f, 0xf4, 0x14, 0x68, 0xd0, 0x40, 0x97, 0x3b, + 0xe3, 0xe4, 0xae, 0xfd, 0x6c, 0x01, 0xcd, 0xa9, 0xa0, 0xc3, 0x2f, 0x73, + 0x03, 0x88, 0xf0, 0x25, 0x59, 0xc5, 0xc6, 0x66, 0x3e, 0x3b, 0x6a, 0x63, + 0x03, 0x63, 0x90, 0x38, 0xdc, 0x75, 0x2a, 0x8f, 0xd6, 0x36, 0x3b, 0x27, + 0x0a, 0x96, 0xb7, 0xe9, 0x37, 0xdb, 0xe5, 0xed, 0x3c, 0xfd, 0xc5, 0x25, + 0x3c, 0xd5, 0x0e, 0xb1, 0xae, 0x7e, 0x2e, 0x38, 0xf7, 0x58, 0xe2, 0x1d, + 0x67, 0x7d, 0x81, 0x7a, 0x27, 0x47, 0x7f, 0xea, 0xde, 0x9c, 0xce, 0xc0, + 0x0b, 0x7e, 0x04, 0x2f, 0x3f, 0xac, 0x88, 0x38, 0xb8, 0x63, 0x73, 0x9e, + 0x3f, 0x4b, 0x77, 0x72, 0x07, 0x31, 0xe0, 0xd5, 0xd8, 0xf4, 0x5c, 0x87, + 0x0a, 0xb1, 0x6c, 0x76, 0x81, 0xcd, 0x0d, 0x77, 0xe4, 0x49, 0x4d, 0x81, + 0x3f, 0xb5, 0xf2, 0xc7, 0x95, 0x7f, 0xf5, 0x0a, 0xcb, 0xd8, 0x4d, 0x45, + 0x83, 0xf3, 0xda, 0x47, 0xe0, 0xa9, 0xb5, 0xe7, 0xf6, 0xf6, 0x4b, 0x3b, + 0x16, 0x56, 0x7e, 0xe0, 0xb5, 0x2a, 0x68, 0x30, 0x92, 0x9e, 0x45, 0xa7, + 0x65, 0x6f, 0x26, 0x1a, 0x1a, 0xd5, 0x57, 0x1f, 0x31, 0x8d, 0x74, 0xb0, + 0x12, 0x7c, 0xfc, 0xd1, 0xed, 0x60, 0x07, 0x25, 0xa4, 0xe8, 0xc7, 0x38, + 0x47, 0x90, 0x30, 0xa9, 0xe3, 0x35, 0xbe, 0xa0, 0x68, 0x9e, 0x65, 0x25, + 0x3b, 0x4f, 0xa8, 0xda, 0xe6, 0xd9, 0xba, 0x0b, 0x80, 0xdd, 0x1c, 0xf0, + 0x96, 0x4e, 0x36, 0x38, 0xc7, 0x03, 0x74, 0x58, 0xc3, 0xaf, 0x79, 0x28, + 0x2e, 0xb7, 0xd3, 0xc8, 0x20, 0x34, 0x9d, 0x00, 0x3a, 0x12, 0x24, 0x04, + 0x1b, 0xb2, 0x5e, 0xe7, 0xcd, 0x75, 0x17, 0x10, 0x64, 0x89, 0xd7, 0xf1, + 0x49, 0x49, 0x76, 0xd1, 0x58, 0x12, 0xd7, 0x3b, 0xbb, 0xe3, 0x48, 0x4f, + 0x48, 0xc2, 0xb5, 0xc6, 0x0d, 0xad, 0x11, 0x2e, 0x6b, 0x87, 0x1e, 0x4a, + 0x2c, 0xb7, 0x25, 0xe1, 0xed, 0x7d, 0x5e, 0x9e, 0x93, 0xe2, 0x93, 0x2c, + 0xbe, 0x1a, 0x5f, 0x59, 0x2d, 0x3a, 0x36, 0x3c, 0x4f, 0x72, 0x92, 0x97, + 0xb6, 0x9c, 0x6b, 0x9c, 0x58, 0xdd, 0xcc, 0x9e, 0x65, 0x2f, 0xb3, 0xe3, + 0x30, 0x80, 0x1f, 0xb8, 0x1d, 0x76, 0xce, 0x93, 0xe6, 0x88, 0xd1, 0xb6, + 0xf1, 0x5b, 0x5a, 0x25, 0xe3, 0xdf, 0x05, 0x0f, 0x2e, 0xb6, 0xb1, 0xa1, + 0xae, 0xa7, 0x70, 0x6f, 0xd1, 0x2c, 0x30, 0xe9, 0x29, 0x29, 0x9d, 0x8e, + 0xc7, 0x63, 0x5a, 0x24, 0x7a, 0x87, 0xe9, 0x00, 0x74, 0xf9, 0x26, 0xd9, + 0x57, 0x1b, 0x46, 0xde, 0x66, 0x4c, 0xfd, 0xc8, 0x63, 0x1a, 0xd7, 0x34, + 0x0a, 0xaa, 0xda, 0xf8, 0xd2, 0x75, 0x31, 0xf1, 0x53, 0xdd, 0x66, 0xde, + 0x47, 0xab, 0x11, 0x12, 0x26, 0x78, 0x49, 0x4d, 0x37, 0xe3, 0xf4, 0xfb, + 0xc8, 0x77, 0xac, 0xea, 0xea, 0x60, 0x8d, 0xd5, 0x6a, 0x27, 0xcd, 0x3b, + 0x6a, 0xae, 0xaa, 0x80, 0xc6, 0xfd, 0x2b, 0xdc, 0x48, 0xf5, 0x63, 0x90, + 0x3c, 0x91, 0xea, 0xa3, 0x25, 0xad, 0xd8, 0x4d, 0x7e, 0x99, 0xd4, 0xb5, + 0xb1, 0xc8, 0x4e, 0xeb, 0x4b, 0x5c, 0x1a, 0xe2, 0xc6, 0x6d, 0x33, 0xbb, + 0x41, 0xc7, 0x69, 0x49, 0x49, 0x43, 0x4d, 0xb8, 0xa2, 0xcb, 0xda, 0xda, + 0x9a, 0xcd, 0x5c, 0xfe, 0x1c, 0xe8, 0xf2, 0x43, 0xae, 0xfe, 0x9c, 0xda, + 0xb7, 0x16, 0x97, 0x76, 0x93, 0xd8, 0x9e, 0x15, 0x77, 0x5f, 0x91, 0x91, + 0x60, 0x6b, 0x06, 0xea, 0x86, 0x92, 0xdd, 0x47, 0xf5, 0x94, 0x5a, 0xdb, + 0x3d, 0x71, 0xa0, 0x7d, 0x00, 0x6b, 0x20, 0x6a, 0xe4, 0x94, 0xda, 0x06, + 0x97, 0xc6, 0xc0, 0xd6, 0x38, 0xe9, 0xb1, 0xa2, 0x49, 0xf3, 0xd1, 0x49, + 0x94, 0xb6, 0xb7, 0x97, 0x59, 0x58, 0x86, 0xeb, 0x3f, 0x0e, 0xfa, 0xa0, + 0x07, 0xde, 0xe7, 0xb8, 0x8d, 0xb5, 0x57, 0x58, 0xf6, 0x35, 0xa3, 0xdc, + 0x4f, 0x89, 0x52, 0xfb, 0x23, 0x8b, 0x45, 0x8f, 0xbb, 0x78, 0xbf, 0x8e, + 0xd1, 0xb7, 0xb1, 0x09, 0x29, 0xb7, 0x73, 0x69, 0xb0, 0x17, 0xd5, 0x0d, + 0xb1, 0xf1, 0x0d, 0x06, 0x46, 0xaa, 0xb1, 0xc5, 0x6b, 0xfd, 0xf7, 0x89, + 0xb2, 0x76, 0xc3, 0x4e, 0x93, 0xf2, 0x43, 0x65, 0x4e, 0xc6, 0x7b, 0x9e, + 0x6c, 0x60, 0x6c, 0x6b, 0x03, 0xb8, 0xf8, 0xa9, 0xfa, 0x8f, 0xb1, 0xcc, + 0x77, 0xd1, 0x04, 0x48, 0x7c, 0xe8, 0x7c, 0x04, 0x24, 0xa6, 0x39, 0xcd, + 0xb9, 0xb9, 0x0c, 0xae, 0xb6, 0x56, 0x3d, 0x20, 0x27, 0xb9, 0x92, 0xba, + 0xcf, 0xab, 0x8d, 0xdb, 0x87, 0x4d, 0x90, 0x01, 0xba, 0xf7, 0x38, 0xc4, + 0x70, 0xc6, 0xc2, 0xe5, 0x9e, 0x69, 0x73, 0xdc, 0xdd, 0xfb, 0xde, 0x1b, + 0xab, 0x8f, 0xb4, 0x40, 0x5d, 0x87, 0x4c, 0xa9, 0xb4, 0x53, 0xd3, 0xa9, + 0x6f, 0xe6, 0xd2, 0xeb, 0x0f, 0xc5, 0xe0, 0xbb, 0xf8, 0xa4, 0xa4, 0xb9, + 0x30, 0xcc, 0xbf, 0x09, 0x2a, 0xe0, 0x74, 0xb7, 0xc4, 0x2a, 0xbd, 0x46, + 0x05, 0xac, 0x7f, 0x1c, 0x27, 0x7d, 0xfe, 0x9d, 0x01, 0xcd, 0x82, 0xe3, + 0xdb, 0xc1, 0x25, 0x36, 0x4b, 0xda, 0x04, 0xbc, 0x80, 0x3c, 0x4a, 0xaf, + 0x76, 0x65, 0x30, 0x43, 0x06, 0xe3, 0xe2, 0x74, 0x0b, 0x38, 0xba, 0xeb, + 0xdf, 0x22, 0x5e, 0x7f, 0x00, 0xac, 0x35, 0xd4, 0x63, 0x69, 0x6f, 0xe9, + 0x2e, 0xfd, 0xcd, 0x20, 0x24, 0xa6, 0x23, 0x0d, 0xf9, 0x0f, 0x2f, 0x79, + 0xf6, 0xf7, 0x71, 0xe3, 0xe4, 0x9a, 0xdb, 0x1a, 0xd6, 0xfa, 0x18, 0xfe, + 0xd6, 0x7e, 0x73, 0xbb, 0xb9, 0x4a, 0xdc, 0x9b, 0xad, 0x6e, 0xa4, 0x6d, + 0x1f, 0x9a, 0x38, 0x43, 0x0d, 0xfc, 0xe7, 0x1e, 0x7c, 0x52, 0x53, 0x06, + 0xd6, 0x39, 0xfb, 0x95, 0x7c, 0xbb, 0x0b, 0xe2, 0x9a, 0xf5, 0x27, 0x98, + 0x56, 0x6d, 0x2d, 0x0d, 0xd7, 0xbe, 0x83, 0xcd, 0x66, 0x75, 0x1e, 0xa3, + 0x8f, 0xd2, 0xaa, 0xdd, 0x01, 0xf9, 0x56, 0x03, 0xb1, 0xa4, 0xcc, 0x7f, + 0xb1, 0x25, 0x27, 0xb5, 0xd4, 0xe0, 0xd0, 0x5d, 0x63, 0xc0, 0x71, 0xfd, + 0xe2, 0x04, 0x95, 0xc3, 0xf5, 0x0f, 0xb5, 0x64, 0xfa, 0xb9, 0x97, 0xe8, + 0x43, 0xf6, 0x86, 0xf6, 0x0d, 0xf2, 0xf2, 0x52, 0xcb, 0x76, 0x67, 0x50, + 0x16, 0xe6, 0x58, 0xe1, 0x66, 0xcf, 0xa4, 0x27, 0x51, 0xf0, 0x6f, 0x82, + 0x3f, 0x4a, 0x61, 0xb7, 0x0c, 0xb5, 0xfe, 0xe6, 0x97, 0x38, 0x06, 0x9d, + 0x74, 0x49, 0x48, 0xba, 0x67, 0x50, 0x68, 0xdb, 0x8f, 0x79, 0x81, 0xc3, + 0x1e, 0x7f, 0x21, 0x5b, 0xf4, 0x63, 0xd5, 0x65, 0xb5, 0x5e, 0x44, 0xba, + 0x99, 0xda, 0x47, 0x98, 0x85, 0xce, 0xf5, 0x0e, 0x99, 0xf6, 0x72, 0xc7, + 0xd2, 0x77, 0x36, 0xc7, 0x6d, 0x0c, 0xee, 0x09, 0xf0, 0x5d, 0x3f, 0x4a, + 0xc3, 0xfb, 0x36, 0x33, 0x29, 0x02, 0x5c, 0x07, 0xbc, 0xff, 0x00, 0x28, + 0xea, 0x52, 0x53, 0x68, 0x93, 0xb4, 0xf6, 0xf0, 0x59, 0x3d, 0x50, 0x97, + 0x62, 0x3d, 0xa3, 0xb6, 0xf8, 0xf9, 0xb5, 0x6c, 0xe4, 0xd7, 0xb2, 0xb2, + 0x67, 0xc1, 0x64, 0x65, 0xc1, 0xa0, 0xb7, 0xb8, 0x2d, 0x73, 0x87, 0x93, + 0xa4, 0x24, 0xa7, 0x0b, 0x02, 0xe6, 0x1a, 0x86, 0x2d, 0x4c, 0x22, 0xeb, + 0xdd, 0xb2, 0xcb, 0x3f, 0x92, 0x4f, 0x6f, 0x92, 0xea, 0x1b, 0x65, 0x2c, + 0x1e, 0x85, 0x4f, 0x05, 0xd5, 0x34, 0x7b, 0x5b, 0xf9, 0xa0, 0x70, 0xb9, + 0xcd, 0xf8, 0x98, 0x45, 0xed, 0xa0, 0x39, 0xd9, 0x4e, 0x04, 0x07, 0x1e, + 0x18, 0x0f, 0x82, 0xbf, 0xd3, 0x2f, 0xc4, 0xab, 0x6e, 0x35, 0x41, 0xd6, + 0xe4, 0x5b, 0x26, 0xdb, 0x47, 0xd1, 0x6c, 0x09, 0x8f, 0x82, 0x4a, 0x75, + 0xa9, 0x76, 0xee, 0xb9, 0xbf, 0xfd, 0x25, 0x6d, 0xfc, 0x80, 0xad, 0xfa, + 0xc6, 0xa4, 0x05, 0xcd, 0x63, 0x38, 0x8e, 0xa2, 0xc7, 0x77, 0x00, 0x0f, + 0xbb, 0x45, 0xd2, 0xb3, 0x89, 0xef, 0xd9, 0x25, 0x3c, 0x9f, 0x51, 0xac, + 0xb6, 0xec, 0xc1, 0xc0, 0x16, 0x7f, 0xd5, 0x6a, 0xb3, 0xf0, 0xea, 0xac, + 0xdd, 0x30, 0x49, 0x9d, 0x16, 0xcf, 0x5d, 0x69, 0x16, 0x5f, 0xc0, 0x0e, + 0xd8, 0xe9, 0xf9, 0x47, 0xf0, 0x59, 0x5d, 0x39, 0xd0, 0xf7, 0x39, 0xd0, + 0x00, 0x04, 0xc9, 0xd2, 0x20, 0x24, 0xa6, 0xd5, 0xf9, 0xfe, 0x8c, 0xb9, + 0xad, 0x91, 0x27, 0x64, 0x7e, 0x71, 0x1e, 0x29, 0xac, 0xcd, 0x66, 0xc1, + 0x63, 0xe8, 0x8b, 0x0e, 0xa1, 0xc4, 0x68, 0xa9, 0xd8, 0x5e, 0x68, 0x63, + 0xaa, 0xad, 0xf7, 0x6c, 0x24, 0xcb, 0x4f, 0xb6, 0x3e, 0x08, 0x42, 0xfb, + 0x32, 0x1f, 0xdd, 0xee, 0x69, 0x97, 0x37, 0x80, 0x07, 0x80, 0x09, 0x29, + 0xd2, 0x36, 0x34, 0x8d, 0xfb, 0xc8, 0xb0, 0x8f, 0x71, 0x02, 0x74, 0x28, + 0x76, 0x66, 0x57, 0x8e, 0x5a, 0xd6, 0x6e, 0x7f, 0xef, 0x35, 0xc7, 0x43, + 0x2a, 0x0c, 0xac, 0xb4, 0x68, 0xe8, 0x73, 0xe4, 0x41, 0xe4, 0x7c, 0x02, + 0x9d, 0xa1, 0x9b, 0x43, 0x1a, 0x24, 0x7e, 0xf3, 0x9b, 0x1f, 0x7a, 0x4a, + 0x47, 0x5d, 0xb6, 0x32, 0xf0, 0xfa, 0xbd, 0x8d, 0x76, 0xac, 0x27, 0xc3, + 0xba, 0x9e, 0xda, 0xdc, 0x0b, 0x9c, 0xf3, 0xa9, 0x3b, 0x9c, 0xe9, 0x12, + 0x67, 0x48, 0x84, 0x3c, 0xac, 0x77, 0xbd, 0xad, 0x63, 0x1d, 0x2e, 0x77, + 0xd1, 0xdb, 0xf9, 0x14, 0x5c, 0xcb, 0x4b, 0x5b, 0x5b, 0xcc, 0x3c, 0x0d, + 0x4b, 0x78, 0x1e, 0x49, 0x29, 0x2d, 0xb9, 0x38, 0xfb, 0x1d, 0xea, 0x39, + 0xe6, 0x48, 0x04, 0xd7, 0x21, 0x03, 0xd1, 0xc4, 0xf4, 0xf6, 0xee, 0x7c, + 0x73, 0x13, 0xac, 0x4f, 0x8a, 0x0f, 0xa3, 0x73, 0xc1, 0x6e, 0xed, 0xc1, + 0xc7, 0x40, 0x3c, 0x54, 0xff, 0x00, 0x66, 0xf5, 0x1d, 0xbc, 0xb2, 0x7c, + 0x27, 0x58, 0xf8, 0x24, 0xa6, 0x15, 0x59, 0x8b, 0x5d, 0xa3, 0x75, 0xda, + 0x8f, 0x10, 0x47, 0xc9, 0x5a, 0xab, 0x1d, 0x97, 0x3c, 0xd9, 0x6d, 0x43, + 0xd2, 0x99, 0x6b, 0x77, 0x4e, 0x9e, 0x61, 0x0a, 0x9b, 0xaa, 0x73, 0xf6, + 0x7a, 0x62, 0xcd, 0xdf, 0x9b, 0x12, 0x7f, 0x22, 0xb0, 0xda, 0xd8, 0xf6, + 0x16, 0xbe, 0xd3, 0x5e, 0xe9, 0x96, 0x86, 0xc0, 0xfe, 0xaa, 0x4a, 0x48, + 0x00, 0x2c, 0xf5, 0x2b, 0x25, 0xa1, 0xb2, 0x1a, 0xc6, 0x90, 0x0e, 0xdf, + 0x12, 0x10, 0xeb, 0x7b, 0x9a, 0xe3, 0xb2, 0xbb, 0x1c, 0x40, 0x2e, 0xde, + 0x07, 0xe7, 0x78, 0xa5, 0x91, 0x46, 0x55, 0x0c, 0x16, 0x63, 0x06, 0x8a, + 0xc7, 0xb5, 0x8d, 0x1e, 0xe7, 0xc9, 0xee, 0x54, 0x58, 0x72, 0x2b, 0x9a, + 0xb4, 0x87, 0x37, 0xdd, 0x2e, 0x3f, 0x34, 0x94, 0xb0, 0xb7, 0x21, 0xee, + 0x69, 0x7f, 0xb2, 0xaf, 0xa4, 0x4b, 0xb4, 0x3b, 0xb8, 0x12, 0x99, 0xcd, + 0x7b, 0xdc, 0xd0, 0x1c, 0xd7, 0x96, 0xea, 0x48, 0x9d, 0x20, 0xa5, 0x8f, + 0x9a, 0xd7, 0xb8, 0x39, 0xf4, 0x30, 0x37, 0x74, 0x6e, 0xd7, 0x48, 0xfd, + 0xd5, 0x3f, 0x5d, 0x85, 0xee, 0x36, 0x80, 0x76, 0x09, 0xe3, 0xe9, 0x4a, + 0x4a, 0x5a, 0xec, 0x67, 0x64, 0x31, 0x8d, 0x0c, 0x6f, 0xa4, 0x64, 0xbe, + 0x5c, 0x77, 0x7d, 0xc8, 0x3f, 0x68, 0xae, 0xc7, 0x37, 0x1a, 0xb6, 0x8d, + 0xb5, 0xf2, 0xe9, 0xec, 0x15, 0xaa, 0xae, 0x2f, 0x05, 0xef, 0x73, 0x58, + 0xd7, 0x38, 0x0f, 0x4c, 0xea, 0x00, 0xf8, 0x0d, 0x75, 0x52, 0xd9, 0x87, + 0x5b, 0x8e, 0xca, 0x81, 0x0f, 0x92, 0xe0, 0x04, 0x70, 0x52, 0x53, 0x56, + 0xb3, 0x5d, 0xd7, 0x36, 0xba, 0xd8, 0x2d, 0x73, 0x9c, 0xd6, 0x0d, 0xdc, + 0xcb, 0x8c, 0x2f, 0x41, 0xb9, 0xfe, 0x9e, 0x61, 0x73, 0x44, 0x8a, 0x6b, + 0xda, 0x07, 0xca, 0x17, 0x1f, 0xd1, 0x71, 0xeb, 0xc9, 0xeb, 0xb8, 0x84, + 0x37, 0x6e, 0xc7, 0x07, 0x39, 0xb3, 0xd9, 0x80, 0xbb, 0xf8, 0x2e, 0xbb, + 0x7b, 0x0d, 0xf9, 0x0f, 0x7b, 0x77, 0x34, 0x48, 0x8f, 0x18, 0x09, 0x29, + 0xcf, 0xea, 0x15, 0x5f, 0x95, 0x88, 0xcc, 0x96, 0x34, 0xc1, 0x01, 0xc0, + 0xcf, 0x82, 0x9f, 0x4e, 0xc7, 0xc8, 0x7b, 0x1a, 0xeb, 0x1b, 0xb5, 0x8d, + 0xe7, 0x71, 0x89, 0x08, 0x4e, 0xb3, 0xd6, 0xe9, 0x4c, 0xf4, 0x8b, 0x9a, + 0xc6, 0x87, 0xb4, 0x36, 0x78, 0x87, 0x15, 0x57, 0x07, 0x22, 0xd7, 0x8d, + 0xaf, 0x79, 0x70, 0x06, 0x35, 0x29, 0x29, 0xd3, 0xc8, 0xc8, 0xb0, 0x0d, + 0xb4, 0x8f, 0x4d, 0x83, 0xb0, 0xe7, 0xef, 0x54, 0xc6, 0xae, 0xdc, 0x48, + 0x99, 0xd4, 0xa5, 0x9b, 0x9b, 0x8d, 0x8b, 0x53, 0x5d, 0x7b, 0xf6, 0xce, + 0x81, 0xa3, 0x52, 0x48, 0x5c, 0xe6, 0x4f, 0x5f, 0xcc, 0xf5, 0xe2, 0xa6, + 0x8a, 0x98, 0xc7, 0x49, 0x69, 0xd7, 0x74, 0x7e, 0xf1, 0xf0, 0x3e, 0x49, + 0x29, 0xd2, 0xea, 0x1d, 0x70, 0xd2, 0xdb, 0x2b, 0xc1, 0x2d, 0xb2, 0xda, + 0xf5, 0xb1, 0xc3, 0x50, 0xc6, 0xf0, 0x48, 0xf1, 0x84, 0x4e, 0x81, 0xd5, + 0x3e, 0xd3, 0x8a, 0xea, 0xee, 0x7e, 0xeb, 0xea, 0x71, 0x24, 0xbb, 0x59, + 0x6b, 0x8c, 0xcf, 0xde, 0xb0, 0xec, 0xbe, 0x9a, 0xb3, 0x59, 0x9f, 0x48, + 0xfd, 0x0d, 0xba, 0xba, 0xbf, 0xdd, 0x9d, 0x2c, 0x61, 0xfb, 0xe5, 0x3d, + 0x61, 0xdd, 0x2b, 0xaa, 0x32, 0xc6, 0x92, 0x31, 0x6d, 0x82, 0x0f, 0x8d, + 0x6f, 0xfe, 0xe4, 0x94, 0xeb, 0x67, 0xfd, 0x61, 0xa2, 0x8b, 0xcd, 0x7b, + 0x4d, 0xae, 0x6e, 0x9a, 0x68, 0xd6, 0xff, 0x00, 0xb5, 0x63, 0x75, 0x0c, + 0xcc, 0x3e, 0xa6, 0x0b, 0xb6, 0x9a, 0x72, 0xc0, 0x1b, 0x09, 0x32, 0x1e, + 0x3f, 0x74, 0x9e, 0xca, 0x35, 0xe3, 0xd5, 0x91, 0xd5, 0x9f, 0x46, 0x44, + 0x80, 0xe7, 0xbe, 0x40, 0xd0, 0x92, 0x24, 0x8d, 0x50, 0xfa, 0x9f, 0x46, + 0x38, 0xf3, 0x6e, 0x39, 0x2e, 0x60, 0xe5, 0x87, 0x52, 0x07, 0x8f, 0x9a, + 0x4a, 0x73, 0x5b, 0x75, 0x94, 0x1b, 0x1a, 0x34, 0xde, 0xd2, 0xc7, 0x34, + 0xff, 0x00, 0xaf, 0x64, 0x36, 0xfa, 0xd5, 0x10, 0xe6, 0xee, 0x61, 0xe4, + 0x11, 0x21, 0x4f, 0x6b, 0xaf, 0xe3, 0x5b, 0x00, 0xff, 0x00, 0x38, 0x0f, + 0xe2, 0x15, 0xee, 0x95, 0x6e, 0x53, 0xec, 0x6e, 0x35, 0x70, 0xea, 0x81, + 0xdc, 0xed, 0xc2, 0x61, 0xbd, 0xf9, 0x49, 0x4d, 0xae, 0x87, 0x55, 0xf9, + 0x36, 0x9c, 0xab, 0xde, 0xe7, 0xb6, 0xaf, 0x65, 0x7b, 0xb5, 0xd4, 0xf2, + 0x7e, 0x4b, 0xac, 0xc6, 0x60, 0x65, 0x5b, 0x8f, 0x27, 0x85, 0x43, 0x16, + 0x96, 0x88, 0x6b, 0x00, 0x68, 0x9e, 0x00, 0x80, 0xb5, 0x0c, 0x34, 0x01, + 0xf7, 0x24, 0xa4, 0x37, 0x33, 0xd5, 0x70, 0x61, 0x30, 0xd8, 0xdc, 0xf3, + 0xe0, 0xd0, 0xb2, 0x8d, 0x47, 0x21, 0xd9, 0x36, 0xb7, 0xf3, 0xe4, 0x34, + 0x79, 0x37, 0x85, 0xa5, 0x9f, 0x67, 0xd9, 0xb1, 0xdd, 0x59, 0x93, 0x75, + 0xc2, 0x5d, 0xdb, 0x6b, 0x3b, 0x05, 0x52, 0x81, 0xb2, 0xa6, 0x34, 0xfc, + 0x4f, 0xcd, 0x25, 0x3c, 0xe6, 0x7b, 0x1a, 0x1c, 0xd1, 0x5d, 0x73, 0x6d, + 0xa2, 0x5c, 0xef, 0xe4, 0xb7, 0x48, 0x1f, 0x12, 0xb6, 0x7a, 0x7e, 0x0b, + 0x30, 0x6a, 0xda, 0xe1, 0x39, 0x0f, 0x13, 0x63, 0xa3, 0x41, 0xfc, 0x91, + 0xf0, 0x52, 0x66, 0x0b, 0x9f, 0x99, 0x55, 0x6d, 0x6f, 0xb2, 0xab, 0x37, + 0x3a, 0x7c, 0x00, 0x96, 0xfe, 0x30, 0xaf, 0xe4, 0xb0, 0xb2, 0x7c, 0x00, + 0xd1, 0x25, 0x34, 0x2a, 0x8f, 0xb6, 0x8f, 0x3d, 0x17, 0x4f, 0x56, 0xad, + 0x07, 0xc4, 0x68, 0xb9, 0x5a, 0x9d, 0x39, 0x6d, 0xf8, 0x80, 0xba, 0x9a, + 0x38, 0x02, 0x60, 0x8f, 0xf7, 0xa4, 0xa7, 0x07, 0xeb, 0x23, 0x40, 0x79, + 0xfe, 0x55, 0x5f, 0x8b, 0x5d, 0xfe, 0xd5, 0x81, 0x8b, 0x3e, 0x95, 0xae, + 0x6b, 0x43, 0xa4, 0x6d, 0x87, 0x18, 0x10, 0xed, 0x0c, 0xae, 0x9b, 0xeb, + 0x1b, 0x03, 0x99, 0x59, 0x3d, 0xdb, 0x63, 0x3e, 0xf1, 0x21, 0x73, 0x58, + 0xd6, 0xfa, 0x58, 0xc4, 0x00, 0xd7, 0x3e, 0xc3, 0x2d, 0xdd, 0xc0, 0x0d, + 0xf8, 0xfc, 0x52, 0x52, 0xcf, 0xcf, 0xb2, 0x86, 0x8a, 0x43, 0x00, 0x68, + 0x3a, 0x01, 0x24, 0x2b, 0x38, 0x57, 0x1c, 0x97, 0x38, 0xd8, 0x45, 0x3f, + 0x9c, 0x21, 0xb3, 0xb9, 0x0d, 0x97, 0xe5, 0x3e, 0x04, 0x37, 0xb9, 0x2e, + 0x30, 0x7e, 0x69, 0x1a, 0xd9, 0x73, 0x23, 0x71, 0x61, 0x6e, 0xbb, 0xc0, + 0x82, 0x7e, 0x09, 0x29, 0x7b, 0x3a, 0x83, 0x31, 0xf2, 0x83, 0x8d, 0x61, + 0xcd, 0x27, 0x61, 0xb7, 0xe3, 0xe0, 0x12, 0x6e, 0x65, 0x4e, 0xdc, 0xe7, + 0xbd, 0xdb, 0x4e, 0xac, 0x69, 0x12, 0xd9, 0xed, 0x24, 0x21, 0x37, 0x1e, + 0xef, 0x4c, 0x54, 0x40, 0x0c, 0x7c, 0xb8, 0x58, 0xf3, 0xc4, 0x15, 0x76, + 0x86, 0x06, 0xd4, 0x00, 0x6b, 0x36, 0x6a, 0x1e, 0x48, 0x3a, 0xcf, 0x82, + 0x4a, 0x6a, 0x97, 0xd6, 0xe6, 0xb3, 0xde, 0x6a, 0x71, 0x24, 0x39, 0xcd, + 0x32, 0x40, 0x45, 0x36, 0x63, 0x0a, 0x5c, 0xda, 0x81, 0xdb, 0x30, 0xd2, + 0x64, 0x93, 0xa7, 0x27, 0xc1, 0x56, 0xb7, 0x13, 0x1d, 0x80, 0x8a, 0xc1, + 0x7b, 0xac, 0x74, 0x01, 0xfb, 0xa0, 0x23, 0xd9, 0x56, 0xda, 0x48, 0xac, + 0x86, 0xf1, 0xbb, 0x52, 0x3e, 0xe4, 0x94, 0xb1, 0x60, 0xba, 0xa6, 0x39, + 0xaf, 0x97, 0xd6, 0x64, 0x46, 0x9a, 0xfc, 0xd1, 0x25, 0xdc, 0xc7, 0xe9, + 0x23, 0xe8, 0x4a, 0x58, 0xf4, 0x54, 0x0b, 0xde, 0xf6, 0xee, 0x88, 0xd8, + 0x4e, 0x9a, 0x21, 0xfa, 0x57, 0xfd, 0xa7, 0xd5, 0xf4, 0x84, 0x47, 0xd2, + 0x9d, 0x76, 0xf8, 0xa4, 0xa5, 0xdf, 0x97, 0x79, 0x61, 0x76, 0x3e, 0xda, + 0xc1, 0xd4, 0x0e, 0xe4, 0x21, 0xbe, 0xbb, 0xbd, 0x09, 0xc5, 0x8b, 0x5f, + 0xae, 0xf6, 0x07, 0x02, 0x47, 0x72, 0xb5, 0xc6, 0x56, 0x35, 0xc1, 0xd4, + 0x5b, 0x4b, 0x05, 0x3b, 0x0b, 0xb7, 0x6d, 0x10, 0x00, 0xf0, 0x70, 0xe0, + 0xca, 0xc3, 0xa6, 0xe6, 0xb6, 0xed, 0xb5, 0x17, 0x36, 0xc2, 0xe8, 0x68, + 0x02, 0x79, 0xf1, 0x29, 0x29, 0x2d, 0x6e, 0xcd, 0xac, 0xb1, 0xb6, 0x6c, + 0xad, 0xbc, 0x90, 0xe7, 0x4b, 0x84, 0xf9, 0x26, 0x75, 0x57, 0xd9, 0xef, + 0xf5, 0x03, 0x9a, 0xe2, 0x01, 0x6b, 0x81, 0xd0, 0x79, 0x29, 0x65, 0xfe, + 0x8e, 0xc3, 0xea, 0x89, 0xba, 0x40, 0x3b, 0xa1, 0xd2, 0x87, 0x53, 0x03, + 0xdb, 0xb4, 0x1d, 0xa4, 0x13, 0xa0, 0xd0, 0x0f, 0x0e, 0x12, 0x53, 0x64, + 0xf4, 0xc6, 0x56, 0x06, 0xeb, 0x1c, 0xf7, 0xbb, 0xdc, 0xd6, 0x81, 0x11, + 0xdf, 0x54, 0x7f, 0x4a, 0x97, 0xda, 0xd0, 0xc6, 0xcd, 0x84, 0x0d, 0xdb, + 0xb8, 0x07, 0xbe, 0x8a, 0x8e, 0x45, 0xcd, 0x64, 0x17, 0x5a, 0xe0, 0xf2, + 0x35, 0x33, 0xf9, 0xc3, 0xc1, 0x43, 0xed, 0x7e, 0xb9, 0x63, 0x6a, 0x69, + 0xf5, 0xb9, 0x24, 0x77, 0xf3, 0x49, 0x4d, 0xd0, 0xe0, 0xeb, 0x5c, 0x1c, + 0xd8, 0x73, 0x5d, 0x0d, 0x33, 0xed, 0x31, 0xe5, 0x08, 0x47, 0xd5, 0x16, + 0xb9, 0xf9, 0x2f, 0x64, 0xff, 0x00, 0x83, 0x0c, 0x3d, 0xbc, 0x51, 0x4d, + 0x39, 0x4f, 0x1b, 0xc8, 0x9d, 0xc2, 0x1c, 0xe6, 0x9f, 0xce, 0x23, 0xf3, + 0x82, 0xaf, 0x6b, 0x6e, 0x71, 0x65, 0x66, 0xbd, 0x9b, 0x04, 0x07, 0x1f, + 0xa4, 0x7e, 0x69, 0x29, 0xe8, 0xfe, 0xab, 0x57, 0x59, 0xea, 0x56, 0xb9, + 0x8e, 0x93, 0x55, 0x44, 0x96, 0xe9, 0xf9, 0xc4, 0x36, 0x65, 0x6b, 0xb4, + 0x86, 0xd1, 0x6d, 0x8f, 0x20, 0x02, 0x5c, 0x49, 0x26, 0x02, 0xcc, 0xfa, + 0x99, 0x8d, 0x6d, 0x38, 0x79, 0xd9, 0x57, 0x19, 0x7b, 0xdc, 0x2b, 0x1f, + 0x06, 0x34, 0xbb, 0xf8, 0xab, 0x1d, 0x58, 0x7f, 0x91, 0x6d, 0x07, 0xbb, + 0x49, 0xfc, 0x52, 0x52, 0x0e, 0x90, 0xe6, 0xdd, 0xd3, 0xad, 0x60, 0x32, + 0x19, 0x75, 0x8d, 0x04, 0x6b, 0xa1, 0x82, 0xaa, 0xe3, 0xfb, 0x2f, 0x7d, + 0x67, 0xb1, 0x41, 0xfa, 0x97, 0x6b, 0x7e, 0xc5, 0x97, 0x59, 0x3f, 0x46, + 0xc0, 0xed, 0x7b, 0x03, 0x21, 0x3e, 0x66, 0x4d, 0x15, 0x75, 0x3f, 0x4d, + 0xb6, 0x0f, 0x50, 0xcc, 0xb4, 0x1f, 0xca, 0x92, 0x99, 0x75, 0xec, 0x53, + 0x7e, 0x2b, 0x6f, 0xaf, 0x57, 0x55, 0xf4, 0xa3, 0xf7, 0x4f, 0x7f, 0xbd, + 0x61, 0xd7, 0x48, 0xc8, 0x60, 0xa9, 0xd0, 0x2f, 0x6e, 0x94, 0x93, 0xf9, + 0xc3, 0xfd, 0x19, 0x3f, 0x93, 0xee, 0x5b, 0x96, 0xf5, 0x5a, 0x0b, 0x5e, + 0xca, 0x1d, 0xbe, 0xea, 0xce, 0xe7, 0xb2, 0x0e, 0xac, 0x69, 0xf7, 0xb7, + 0xee, 0x54, 0x3a, 0xbe, 0x07, 0xd9, 0xb6, 0xdf, 0x4e, 0xb8, 0xd6, 0x6a, + 0xd3, 0xa9, 0xda, 0x4e, 0xba, 0xff, 0x00, 0x04, 0x94, 0xe4, 0x16, 0xb9, + 0xae, 0x21, 0xda, 0x11, 0x20, 0x83, 0xa7, 0x92, 0xd0, 0xb5, 0xf5, 0xe5, + 0xf4, 0x76, 0xb4, 0x02, 0x6f, 0xc4, 0x74, 0x7f, 0xd6, 0xce, 0xa9, 0x9a, + 0x2b, 0xea, 0x35, 0x80, 0x7d, 0xb9, 0xcd, 0x1a, 0x13, 0x00, 0x5c, 0x3c, + 0xff, 0x00, 0x95, 0xf9, 0x55, 0x7a, 0x32, 0x2e, 0xc1, 0xb9, 0xc3, 0x6c, + 0xb5, 0xd2, 0xcb, 0xab, 0x77, 0x71, 0xdc, 0x7c, 0x52, 0x52, 0x0c, 0x97, + 0x3d, 0xde, 0x9e, 0x65, 0x52, 0x1f, 0x5e, 0xd6, 0xd8, 0xff, 0x00, 0x07, + 0xb7, 0xe8, 0xbb, 0xe6, 0x15, 0xba, 0xba, 0xd5, 0x4f, 0x00, 0x64, 0x4d, + 0x6f, 0x8e, 0x79, 0x69, 0x54, 0x99, 0x65, 0x74, 0x64, 0x92, 0x1d, 0xbf, + 0x1e, 0xcf, 0x6b, 0xc1, 0xfd, 0xd3, 0xe2, 0x3c, 0x95, 0xab, 0xfa, 0x2b, + 0x1e, 0x77, 0x53, 0x66, 0xd6, 0x9e, 0x01, 0xd4, 0x7c, 0x8a, 0x4a, 0x69, + 0x07, 0xd7, 0x67, 0x53, 0x63, 0xb1, 0xf4, 0x69, 0x78, 0x8d, 0x23, 0xe2, + 0x56, 0xee, 0x1e, 0x1d, 0x58, 0xc5, 0xe5, 0x9a, 0x9b, 0x1c, 0x5c, 0xe7, + 0x1f, 0xc8, 0xab, 0x60, 0xf4, 0x9a, 0xf1, 0xdc, 0x6d, 0xb1, 0xdb, 0xec, + 0xed, 0xa4, 0x06, 0xad, 0x6a, 0x2b, 0x2f, 0x20, 0x0d, 0x21, 0x25, 0x37, + 0x31, 0x2b, 0x8f, 0x71, 0xe7, 0x80, 0xae, 0xd2, 0xd6, 0x37, 0x75, 0xf6, + 0xff, 0x00, 0x37, 0x50, 0x92, 0x3c, 0x4f, 0x60, 0x83, 0x5d, 0x7a, 0x34, + 0x37, 0x52, 0x74, 0x1f, 0x15, 0x3c, 0xe7, 0x01, 0x5b, 0x71, 0xab, 0x12, + 0x18, 0x7d, 0xdf, 0xca, 0x7a, 0x4a, 0x73, 0x6f, 0x7b, 0xb2, 0xb2, 0x5d, + 0x65, 0x9c, 0x4e, 0xe7, 0x47, 0xe0, 0x13, 0x6e, 0xfd, 0x28, 0x69, 0x1e, + 0x73, 0xe7, 0x2a, 0xd3, 0xa8, 0x6d, 0x2c, 0x21, 0xd1, 0x23, 0x57, 0x7c, + 0x55, 0x30, 0x2c, 0x7b, 0xc1, 0x68, 0xef, 0xcf, 0x92, 0x4a, 0x74, 0x2b, + 0xaf, 0x6e, 0x43, 0x9d, 0xfb, 0xed, 0x69, 0xfb, 0xb4, 0x55, 0xf3, 0xcf, + 0xb4, 0xc7, 0x75, 0x7b, 0x6c, 0x54, 0xc7, 0x8e, 0x5d, 0x20, 0xfc, 0x96, + 0x7e, 0x70, 0x22, 0xad, 0x79, 0x94, 0x94, 0xe7, 0xd0, 0xdf, 0xd6, 0x19, + 0xfd, 0x65, 0xd4, 0x54, 0x62, 0x3c, 0xc0, 0x3f, 0x72, 0xe6, 0x6a, 0xd2, + 0xc6, 0x9f, 0x07, 0x05, 0xd1, 0xb4, 0xfb, 0x6b, 0x23, 0xe1, 0xf7, 0xa4, + 0xa7, 0x3f, 0xaf, 0xb7, 0x76, 0x3b, 0x1d, 0xfb, 0xb6, 0x37, 0xf1, 0x05, + 0xab, 0x9a, 0xad, 0xee, 0xc7, 0x06, 0xbb, 0x29, 0x69, 0xa8, 0x43, 0x0b, + 0x8c, 0x13, 0xae, 0xa4, 0xfc, 0x02, 0xea, 0x3a, 0xd6, 0xb8, 0x97, 0x7f, + 0x24, 0x35, 0xdf, 0x73, 0x82, 0xe4, 0x72, 0xb0, 0xae, 0xbb, 0x3b, 0xda, + 0xed, 0xa2, 0xcf, 0xa0, 0x0f, 0x60, 0x44, 0xca, 0x4a, 0x48, 0xee, 0xa3, + 0xd3, 0xea, 0x63, 0x99, 0x53, 0x44, 0x92, 0x06, 0xf8, 0x30, 0x55, 0xa7, + 0xbf, 0x17, 0x40, 0x1d, 0xb5, 0xc0, 0x03, 0xbc, 0x0d, 0x63, 0xcd, 0x66, + 0xb7, 0xa0, 0xda, 0x04, 0xd5, 0x70, 0x75, 0xb3, 0xaf, 0xb7, 0x41, 0xf7, + 0xab, 0x43, 0x07, 0x33, 0x0e, 0xbd, 0x8e, 0xac, 0xbc, 0xbb, 0xe9, 0xb9, + 0xbd, 0xe7, 0xcf, 0xc1, 0x25, 0x28, 0xe5, 0x52, 0x2d, 0xf5, 0x83, 0x4b, + 0x98, 0x46, 0xd9, 0xe7, 0x8e, 0xf0, 0x94, 0xd5, 0x65, 0x5e, 0xeb, 0x77, + 0x3f, 0x42, 0xd0, 0x35, 0xe7, 0xcf, 0xb2, 0x6b, 0x71, 0x5f, 0x7d, 0x2d, + 0xb5, 0x8e, 0x6b, 0x48, 0x90, 0x58, 0x79, 0x93, 0xe0, 0xa3, 0x8b, 0xd3, + 0x4d, 0x6e, 0x69, 0x69, 0x3b, 0x9d, 0xa6, 0x84, 0x01, 0xf8, 0xa4, 0xa4, + 0x59, 0x47, 0xa8, 0x63, 0x37, 0xf4, 0x5f, 0x40, 0x8d, 0x08, 0xec, 0x4f, + 0x2a, 0x58, 0xce, 0xb2, 0xd0, 0xe0, 0xe1, 0xdb, 0x5f, 0x97, 0x75, 0x6f, + 0xa8, 0x60, 0xe5, 0xd7, 0x0d, 0xb2, 0xc6, 0x96, 0xbf, 0xde, 0x03, 0x49, + 0x30, 0xab, 0x62, 0xbd, 0x95, 0xbd, 0xda, 0x92, 0x5e, 0x22, 0x09, 0xfc, + 0xa9, 0x29, 0x0d, 0xf6, 0x5f, 0x43, 0xf6, 0xd7, 0x63, 0x9e, 0xc7, 0x0d, + 0x01, 0x88, 0x27, 0xc9, 0x4b, 0xed, 0x7d, 0x43, 0xd2, 0x9f, 0x48, 0xcc, + 0x46, 0xdf, 0x2e, 0x13, 0x13, 0x6e, 0xe0, 0x48, 0x6b, 0xc3, 0x49, 0x27, + 0x48, 0xdb, 0xf7, 0x26, 0xdc, 0xff, 0x00, 0x5f, 0xd2, 0xf5, 0xbd, 0xb1, + 0xe1, 0xac, 0xf3, 0xca, 0x4a, 0x6c, 0x64, 0x8c, 0x81, 0x4f, 0xa2, 0x38, + 0x74, 0x77, 0xd3, 0x6f, 0x8a, 0x25, 0x19, 0x18, 0xd5, 0x10, 0x39, 0x78, + 0x1d, 0xa7, 0xb0, 0xe5, 0x12, 0xac, 0x5c, 0xe0, 0xe7, 0x7a, 0x95, 0xb9, + 0xef, 0x7b, 0x46, 0xda, 0x98, 0x37, 0x1f, 0x9c, 0xe8, 0x10, 0x6c, 0xbb, + 0x29, 0xcf, 0x75, 0x0c, 0xa0, 0xb1, 0xec, 0x3b, 0x2c, 0xb1, 0xe0, 0x6d, + 0x68, 0x1e, 0x04, 0x77, 0x29, 0x29, 0x76, 0xba, 0xb9, 0x36, 0x64, 0x1d, + 0xe0, 0xf0, 0x7e, 0x89, 0x3f, 0x00, 0xa3, 0x45, 0xd8, 0x86, 0xb7, 0x6c, + 0xad, 0xcd, 0x7b, 0x4c, 0x32, 0x64, 0xf7, 0xee, 0xa5, 0x8f, 0x7d, 0x05, + 0xcc, 0xc6, 0x73, 0x1c, 0xfb, 0xaa, 0x10, 0xcd, 0xde, 0xdd, 0x46, 0xba, + 0xad, 0x46, 0x65, 0x74, 0xe7, 0x50, 0x7e, 0xdb, 0x4d, 0x6c, 0xb8, 0x6a, + 0xd6, 0xb0, 0x9d, 0xce, 0xf0, 0x82, 0x39, 0x29, 0x29, 0xcb, 0x65, 0xb8, + 0xee, 0x7b, 0xcd, 0xd8, 0xde, 0xa5, 0x60, 0xfd, 0x22, 0x36, 0x9e, 0x14, + 0xb1, 0xea, 0x69, 0xaa, 0xcc, 0x8a, 0x0d, 0x20, 0x72, 0x24, 0x9f, 0x6b, + 0x7c, 0x37, 0x0e, 0x0a, 0xb3, 0x95, 0x83, 0x4b, 0x0d, 0x61, 0xb6, 0xee, + 0xad, 0xe0, 0xb8, 0xb5, 0xc6, 0x4b, 0x0f, 0x84, 0xaa, 0xf5, 0x3f, 0x05, + 0x96, 0x8a, 0x5c, 0xdd, 0xcc, 0x98, 0x0d, 0x61, 0xf6, 0x93, 0xfc, 0xa0, + 0x34, 0x49, 0x4b, 0x53, 0x8d, 0x8e, 0xfa, 0x4b, 0xdd, 0x9f, 0x6d, 0x64, + 0x6b, 0xbb, 0x6c, 0xb7, 0xf8, 0x22, 0xe2, 0xbb, 0x01, 0xb4, 0x6e, 0x7b, + 0x9f, 0x93, 0x6f, 0x6b, 0x08, 0x20, 0x9f, 0x1d, 0x0a, 0xa1, 0x93, 0xd4, + 0x05, 0xf6, 0xb9, 0x9b, 0x21, 0xbb, 0x88, 0x68, 0x1e, 0x03, 0x41, 0x01, + 0x14, 0xda, 0xf6, 0x44, 0xd7, 0x1b, 0x9a, 0x76, 0x8d, 0xc2, 0x4e, 0x91, + 0x11, 0x3a, 0x24, 0xa7, 0xba, 0xe9, 0x4c, 0x6d, 0x3d, 0x0d, 0xa5, 0xa6, + 0x45, 0xa5, 0xef, 0x9f, 0x89, 0xda, 0x3f, 0x22, 0x07, 0x57, 0x20, 0xf4, + 0xcb, 0x58, 0xd2, 0x09, 0x6b, 0x08, 0x20, 0x78, 0x8d, 0x55, 0xd6, 0xd5, + 0xf6, 0x6e, 0x99, 0x89, 0x8f, 0xc6, 0xca, 0xeb, 0x69, 0x1e, 0x60, 0x6e, + 0x3f, 0x8a, 0xc3, 0xdf, 0x5d, 0xb8, 0x99, 0xd6, 0x54, 0x66, 0xbb, 0x1e, + 0xe2, 0xd9, 0xd0, 0x83, 0xb4, 0x13, 0x3f, 0x04, 0x94, 0xf3, 0x9f, 0x57, + 0xa6, 0xdb, 0xb3, 0x70, 0xb7, 0xec, 0x6d, 0xd0, 0x49, 0xf2, 0xdc, 0xad, + 0xfd, 0x64, 0xe9, 0x96, 0xe1, 0x0a, 0x73, 0x6b, 0x26, 0xc7, 0x53, 0x0d, + 0xb5, 0xf1, 0x13, 0x07, 0xda, 0x48, 0xf8, 0x68, 0x56, 0x4f, 0x4a, 0xb7, + 0xd0, 0xeb, 0x7b, 0x4f, 0x16, 0x87, 0x33, 0xe6, 0x46, 0x9f, 0x8a, 0xde, + 0x68, 0xea, 0x59, 0xa2, 0xef, 0xb4, 0x35, 0xd6, 0x62, 0xe4, 0x34, 0xb5, + 0xce, 0x3a, 0x35, 0xa4, 0x70, 0x5b, 0x3f, 0xc1, 0x25, 0x39, 0xf8, 0x96, + 0xb3, 0xf6, 0xc5, 0x57, 0x37, 0xf9, 0xbc, 0x81, 0xbb, 0xe4, 0xf6, 0x90, + 0x7f, 0x15, 0xd3, 0xc5, 0x36, 0x62, 0x8a, 0xa0, 0x3a, 0xad, 0xb1, 0xb7, + 0x91, 0xb7, 0xb7, 0xc9, 0x70, 0xf8, 0x6e, 0x7d, 0x19, 0xd4, 0xd3, 0x76, + 0xa2, 0xab, 0x36, 0x41, 0xf0, 0x25, 0x75, 0x5d, 0x47, 0xd4, 0xa7, 0x15, + 0x97, 0xe3, 0x0d, 0xaf, 0xc7, 0xd7, 0x68, 0x1a, 0x6c, 0x3a, 0x10, 0x42, + 0x4a, 0x71, 0xfa, 0x97, 0x4d, 0x38, 0xae, 0x37, 0x50, 0x49, 0xa6, 0x66, + 0x47, 0xe6, 0x1e, 0xca, 0xae, 0x56, 0x50, 0xc8, 0xa9, 0x8e, 0xb3, 0xfa, + 0x43, 0x3d, 0xae, 0x7f, 0x6b, 0x07, 0x69, 0xfe, 0x50, 0x5d, 0x26, 0x36, + 0x4d, 0x59, 0x98, 0xe2, 0xd0, 0xdf, 0xa5, 0x2d, 0x7b, 0x4f, 0x8f, 0x04, + 0x2c, 0x6e, 0xa7, 0xd1, 0xdc, 0xc9, 0xbb, 0x10, 0x12, 0xce, 0x5d, 0x57, + 0x24, 0x79, 0xb5, 0x25, 0x38, 0xdb, 0x43, 0xa4, 0x90, 0xb7, 0xba, 0x35, + 0xc2, 0xea, 0x1d, 0x43, 0xa0, 0xbe, 0x9f, 0x1e, 0xec, 0xec, 0x7e, 0x4b, + 0x09, 0x8e, 0x60, 0xb1, 0xa2, 0xc0, 0x4b, 0x3f, 0x3a, 0x39, 0x8f, 0x25, + 0x6d, 0xf5, 0xe4, 0xf4, 0xac, 0x96, 0x64, 0x0f, 0x75, 0x33, 0xf4, 0xc7, + 0x0e, 0x69, 0xec, 0x52, 0x53, 0xd0, 0x36, 0x92, 0xe3, 0x03, 0xe4, 0x55, + 0xcc, 0x7a, 0xf6, 0xb4, 0x03, 0xf3, 0x21, 0x56, 0xc7, 0x78, 0xba, 0x2c, + 0x67, 0xd1, 0x78, 0x05, 0xa4, 0xf8, 0x2d, 0x3c, 0x4a, 0x7d, 0x57, 0x6d, + 0x98, 0x6b, 0x7d, 0xcf, 0x71, 0xe0, 0x00, 0x92, 0x93, 0xd3, 0x15, 0x52, + 0xec, 0x83, 0xcf, 0xd1, 0xa4, 0x79, 0xf7, 0x72, 0x86, 0x35, 0x0e, 0x33, + 0x7b, 0xc7, 0xb4, 0x4e, 0xcf, 0x89, 0xee, 0xa7, 0x07, 0x2b, 0x20, 0x31, + 0x9a, 0x31, 0x9a, 0x0f, 0x00, 0xd1, 0xdd, 0x58, 0xc9, 0x86, 0x8f, 0x49, + 0x9a, 0x35, 0xa0, 0x08, 0x49, 0x4e, 0x6e, 0x43, 0x41, 0x24, 0x9d, 0x7c, + 0x50, 0xaa, 0x80, 0x7f, 0x20, 0x4f, 0x71, 0x71, 0xf6, 0x8f, 0xbd, 0x3e, + 0x3d, 0x50, 0x44, 0xf3, 0xdd, 0x25, 0x37, 0x83, 0x49, 0xc6, 0x6b, 0xff, + 0x00, 0x94, 0x7f, 0x22, 0xca, 0xea, 0x6f, 0x0c, 0xa5, 0xcf, 0x76, 0x8d, + 0x6e, 0xa7, 0xe0, 0xb7, 0x5e, 0xd8, 0xc1, 0xf8, 0x10, 0x7e, 0x5c, 0x2e, + 0x3b, 0xad, 0x75, 0x1f, 0x5d, 0xb9, 0x78, 0xcc, 0x6c, 0x0a, 0x5b, 0xab, + 0x89, 0xd4, 0x90, 0xe0, 0x1c, 0x92, 0x99, 0xd1, 0x60, 0x76, 0xd7, 0x8d, + 0x03, 0xa0, 0x89, 0xf3, 0x5d, 0x31, 0x04, 0x62, 0x35, 0xe3, 0xb6, 0xa3, + 0xe5, 0xaa, 0xe5, 0xe8, 0x6e, 0xd6, 0xb0, 0x7e, 0x6c, 0x37, 0xf2, 0x2e, + 0xaa, 0xa3, 0x38, 0x2c, 0x9f, 0x04, 0x94, 0xd6, 0xea, 0x2c, 0x36, 0xe3, + 0xdc, 0xd8, 0x90, 0xea, 0xdd, 0xf9, 0x25, 0x73, 0xcc, 0x73, 0x45, 0x15, + 0xda, 0xe7, 0x35, 0xa1, 0xed, 0x0d, 0xd4, 0x80, 0x74, 0xd3, 0x92, 0xba, + 0x6b, 0x3d, 0xd5, 0x34, 0x98, 0xe3, 0x69, 0xf9, 0x68, 0xb8, 0xdb, 0x6d, + 0x66, 0x39, 0x65, 0x4f, 0xd8, 0xe7, 0x07, 0xbd, 0xad, 0x6b, 0xc1, 0x77, + 0x0e, 0xfc, 0xd0, 0x3b, 0xea, 0x92, 0x9b, 0xb7, 0x64, 0xd0, 0x32, 0x1c, + 0x6b, 0x3e, 0xa5, 0xb5, 0x80, 0x1e, 0xd1, 0xa3, 0x4f, 0xcf, 0xba, 0xb2, + 0x7a, 0xd5, 0x43, 0xa7, 0x97, 0xd9, 0x49, 0x19, 0x40, 0x90, 0xe6, 0x88, + 0xd0, 0xf6, 0xe5, 0x64, 0xfa, 0x2e, 0xac, 0x7d, 0x9d, 0xcf, 0xdb, 0x63, + 0xe0, 0x17, 0xba, 0x38, 0x71, 0xee, 0x7c, 0x91, 0x1f, 0x87, 0x91, 0x8e, + 0xe3, 0x55, 0xc4, 0x0a, 0x1d, 0xa3, 0x5e, 0x1c, 0x4e, 0xe9, 0xef, 0x09, + 0x29, 0x13, 0xd8, 0x2d, 0xa1, 0xb6, 0x0c, 0x8f, 0x46, 0xe2, 0x74, 0x90, + 0x36, 0xc7, 0x79, 0x45, 0x66, 0x55, 0x58, 0x38, 0xe5, 0xaf, 0xad, 0xb9, + 0x40, 0x7b, 0x85, 0xa7, 0xda, 0x0b, 0xbc, 0x00, 0x50, 0xfb, 0x01, 0xbe, + 0xcd, 0xa5, 0xa5, 0xcc, 0x6f, 0xb5, 0xa7, 0x74, 0x48, 0x51, 0xfb, 0x05, + 0x8e, 0xb9, 0xf5, 0x35, 0xc5, 0xb4, 0xeb, 0xb0, 0x86, 0xc9, 0x1f, 0x32, + 0x92, 0x98, 0xbf, 0xa9, 0xf5, 0x57, 0x3d, 0xaf, 0x7d, 0x55, 0xb5, 0xf0, + 0x36, 0x4f, 0x1b, 0x4e, 0xa1, 0x3b, 0x2a, 0xb5, 0xa1, 0xcf, 0x21, 0xb2, + 0x79, 0x27, 0x43, 0x27, 0xc0, 0x78, 0x22, 0xd9, 0x8e, 0x19, 0x8d, 0x5b, + 0x6e, 0x9b, 0x1f, 0x50, 0x8f, 0x6b, 0x9a, 0x1d, 0x04, 0xe9, 0x21, 0x35, + 0x58, 0xc5, 0xcc, 0x0f, 0xd4, 0x54, 0xc2, 0x35, 0x26, 0x4b, 0x8f, 0xfb, + 0x12, 0x53, 0x9e, 0xf2, 0xfd, 0xc5, 0xb7, 0x36, 0x00, 0x99, 0x20, 0xf2, + 0x89, 0xf6, 0x27, 0x7d, 0x93, 0xd5, 0xf4, 0xce, 0xf9, 0xdd, 0xe9, 0xf6, + 0xd9, 0xfb, 0xd2, 0xb4, 0x2e, 0x68, 0xb2, 0x6e, 0xbb, 0xe8, 0xb1, 0xc1, + 0xa1, 0xa5, 0xba, 0x40, 0x1f, 0xba, 0x14, 0xe0, 0x6f, 0xf5, 0x3e, 0xd3, + 0xf9, 0xbc, 0x40, 0x9d, 0xbf, 0xbb, 0xb5, 0x25, 0x34, 0x72, 0xf3, 0x72, + 0x68, 0x16, 0x32, 0x5d, 0x6d, 0xb6, 0xb6, 0x2c, 0xb0, 0x38, 0x90, 0x00, + 0xd4, 0xed, 0xda, 0xab, 0xe3, 0xdd, 0x92, 0x58, 0xec, 0x61, 0x53, 0xde, + 0xc3, 0x0f, 0x22, 0x76, 0xe9, 0xcc, 0x83, 0xe2, 0x99, 0xac, 0x75, 0x95, + 0xb4, 0x80, 0xe6, 0x12, 0x48, 0xdf, 0xa8, 0xf6, 0xab, 0x38, 0xd8, 0xf6, + 0x5e, 0xf1, 0x4b, 0x1c, 0x5b, 0x60, 0x9f, 0x52, 0xe7, 0xea, 0xc0, 0xcf, + 0x39, 0x49, 0x4d, 0xc2, 0xf6, 0xbe, 0x1f, 0x45, 0x01, 0xb7, 0x30, 0x09, + 0xb1, 0xfa, 0xaa, 0x96, 0x7d, 0xa0, 0x5f, 0xeb, 0x07, 0x56, 0xc6, 0xb4, + 0x4f, 0xb9, 0xbb, 0xb6, 0x9f, 0xe4, 0x84, 0x66, 0xe3, 0x5c, 0xda, 0x43, + 0x3d, 0x60, 0x6a, 0x92, 0xd6, 0xde, 0xd0, 0x5a, 0x0c, 0x6a, 0x43, 0xb9, + 0x40, 0xae, 0xaa, 0x45, 0xee, 0x36, 0xe5, 0x8d, 0xae, 0x88, 0x0d, 0x1b, + 0x81, 0x29, 0x29, 0x93, 0xb2, 0x1f, 0x90, 0xcf, 0x4a, 0xc7, 0xbf, 0x22, + 0xa3, 0xa9, 0x76, 0x8c, 0x0d, 0x8f, 0x00, 0x10, 0x06, 0x1f, 0xd9, 0xde, + 0x2c, 0xa1, 0xae, 0x12, 0x25, 0xbb, 0x9c, 0x1c, 0x04, 0xf9, 0x05, 0x26, + 0x3a, 0x9c, 0x6b, 0x1c, 0xe3, 0x6b, 0x6c, 0x24, 0x96, 0xee, 0xf0, 0x9e, + 0xd1, 0xd9, 0x1d, 0xf8, 0x02, 0xeb, 0x43, 0x5b, 0x94, 0xc6, 0x70, 0x0b, + 0xf8, 0x6b, 0x8f, 0x83, 0xa7, 0x84, 0x94, 0x86, 0x8a, 0x3f, 0x45, 0x04, + 0x43, 0x67, 0x71, 0x13, 0xac, 0x93, 0xe2, 0x51, 0x31, 0xab, 0xdd, 0x93, + 0x4e, 0x38, 0xa4, 0x39, 0xd6, 0x3d, 0xad, 0x0e, 0xe3, 0xe9, 0xb8, 0x08, + 0x31, 0xe0, 0xa0, 0x30, 0x5c, 0xcc, 0x8f, 0x4e, 0xcb, 0x19, 0x73, 0x5a, + 0x3d, 0xde, 0x93, 0xa4, 0x47, 0x98, 0x5a, 0x1f, 0x57, 0xb0, 0x2d, 0xbb, + 0xeb, 0x06, 0x1b, 0x9a, 0xf9, 0xa2, 0x97, 0x1b, 0x08, 0x83, 0x1e, 0xc6, + 0x93, 0xa7, 0xcd, 0x25, 0x3d, 0xc6, 0x7d, 0x8c, 0x65, 0x8d, 0x0e, 0x20, + 0x31, 0x92, 0x49, 0x3c, 0x00, 0x34, 0x58, 0xb5, 0xe1, 0x1c, 0x7c, 0x2c, + 0xd6, 0x48, 0x2d, 0xfd, 0x35, 0x8d, 0x3e, 0x4e, 0x00, 0x35, 0x5a, 0xeb, + 0x43, 0xd6, 0xdd, 0x44, 0xed, 0xf5, 0x9c, 0xca, 0x67, 0xc3, 0x71, 0x93, + 0xf8, 0x2a, 0xd4, 0x53, 0x7e, 0x37, 0x43, 0xb2, 0xab, 0xdd, 0xbe, 0xc7, + 0x17, 0xb0, 0x38, 0x99, 0x96, 0x89, 0x29, 0x29, 0xe1, 0xb2, 0x8f, 0xd9, + 0xba, 0x8e, 0x26, 0x48, 0x1a, 0x4b, 0x5c, 0x7e, 0x2d, 0x7a, 0xee, 0x30, + 0xc9, 0xfb, 0x3d, 0xf4, 0x7f, 0xa1, 0xb1, 0xc5, 0xbf, 0xd5, 0x7f, 0xbd, + 0xbf, 0x95, 0x71, 0x9d, 0x62, 0xb9, 0xc7, 0xa2, 0xc1, 0xc3, 0x1c, 0xe6, + 0xfd, 0xfa, 0xad, 0xc7, 0xb7, 0x37, 0x2e, 0xaa, 0xfe, 0xcc, 0x1c, 0x7d, + 0x7a, 0x6b, 0x36, 0xed, 0xd0, 0x1d, 0xa3, 0x6f, 0xb8, 0xa4, 0xa7, 0x2b, + 0xac, 0xe3, 0x86, 0xe4, 0x37, 0x2e, 0x92, 0x20, 0x3c, 0x6e, 0x8d, 0x41, + 0x82, 0xba, 0x8a, 0x47, 0xa8, 0x0b, 0x1d, 0xa8, 0xb1, 0xa4, 0x10, 0x7c, + 0x08, 0x5c, 0xdf, 0x53, 0xae, 0xcc, 0x1e, 0x9e, 0xdc, 0x7b, 0x80, 0xde, + 0xe2, 0x40, 0x2d, 0xd4, 0x0d, 0x67, 0x53, 0xe2, 0xb7, 0xfa, 0x7b, 0xcb, + 0xea, 0xa9, 0xdc, 0x93, 0x58, 0x27, 0xe2, 0x40, 0x49, 0x4e, 0x7f, 0x43, + 0xa6, 0xca, 0x5b, 0x92, 0xc7, 0x83, 0x0d, 0xb3, 0x6f, 0x94, 0xb7, 0x42, + 0xaf, 0x9f, 0xb8, 0x2b, 0x2f, 0x68, 0x68, 0x0e, 0x00, 0x6e, 0x23, 0x5e, + 0xd2, 0x50, 0x1e, 0xe2, 0x49, 0x11, 0xa0, 0x11, 0x09, 0x29, 0xca, 0xea, + 0x1d, 0x22, 0x9c, 0x9f, 0x7d, 0x71, 0x5d, 0xc7, 0xb8, 0x1e, 0xd7, 0x7c, + 0x53, 0xe1, 0x32, 0xc7, 0xe3, 0xb7, 0x1f, 0x29, 0x9f, 0xcd, 0x1d, 0x8e, + 0x69, 0xd4, 0x38, 0x0e, 0x23, 0xc4, 0x2b, 0xee, 0x1d, 0xa0, 0x7f, 0x72, + 0x55, 0xd6, 0xe7, 0xbc, 0x36, 0xb0, 0x5c, 0xf3, 0xc0, 0x09, 0x29, 0x9e, + 0x16, 0x38, 0x60, 0x6e, 0x3d, 0x0d, 0x30, 0x3e, 0x88, 0xec, 0x04, 0xcf, + 0x7e, 0xcb, 0x4a, 0xeb, 0x1b, 0x53, 0x06, 0x35, 0x47, 0x76, 0xbf, 0xa5, + 0x7f, 0x8b, 0xbc, 0x10, 0x5a, 0x46, 0x2d, 0x7e, 0x95, 0x6e, 0x9b, 0x9d, + 0xf4, 0xde, 0x3b, 0x0f, 0x00, 0xad, 0xf4, 0xfc, 0x76, 0x98, 0xb9, 0xe3, + 0x40, 0x7d, 0x83, 0xc7, 0xcd, 0x25, 0x36, 0xf1, 0x28, 0xf4, 0x6a, 0xd7, + 0x47, 0xbb, 0x53, 0xe5, 0xe4, 0xab, 0x64, 0xbc, 0x4b, 0xbc, 0x79, 0x9e, + 0xea, 0xf3, 0xdc, 0x40, 0xf3, 0x59, 0x59, 0x2e, 0x1b, 0x88, 0xf8, 0x24, + 0xa6, 0xb3, 0x8b, 0x64, 0xc0, 0x8d, 0x54, 0xea, 0x22, 0x65, 0x0c, 0x99, + 0x33, 0xe2, 0x8d, 0x43, 0x7d, 0xc3, 0xbc, 0xa4, 0xa7, 0x58, 0xb2, 0x70, + 0x9c, 0x3f, 0x91, 0x23, 0xe5, 0xaa, 0xf3, 0xae, 0xbf, 0xbe, 0x9e, 0xa5, + 0x70, 0x60, 0x9f, 0xb4, 0xb4, 0x00, 0xdf, 0x1d, 0xd0, 0x0c, 0x7c, 0xc2, + 0xf4, 0xa6, 0x8f, 0xd0, 0x86, 0x78, 0x88, 0x3f, 0x72, 0xe0, 0xfe, 0xb1, + 0xba, 0xf1, 0x65, 0x35, 0xd2, 0x3d, 0xee, 0x79, 0x69, 0x20, 0x6a, 0x23, + 0xcf, 0xb7, 0x9a, 0x4a, 0x5b, 0x05, 0xe0, 0xd2, 0xd0, 0x79, 0x6f, 0xb4, + 0xfc, 0xb4, 0x5d, 0x66, 0x3f, 0xbb, 0x05, 0x9a, 0xf6, 0x5c, 0x57, 0x4d, + 0xb0, 0x97, 0xd9, 0x5b, 0xb8, 0x9d, 0xcb, 0xb3, 0xc3, 0x76, 0xec, 0x06, + 0xf9, 0x24, 0xa4, 0x6c, 0x24, 0xb4, 0x8e, 0xc0, 0xfe, 0x55, 0xc9, 0xf5, + 0x1a, 0x1a, 0xdc, 0xcb, 0x36, 0xc9, 0xb5, 0x84, 0xbc, 0x38, 0x18, 0xda, + 0xd7, 0x0d, 0x57, 0x59, 0x43, 0xbd, 0x8e, 0x69, 0x3c, 0xc8, 0xfb, 0xb5, + 0x5c, 0xd7, 0x5b, 0xa4, 0x9c, 0xf6, 0xbc, 0x1d, 0xad, 0x7b, 0x76, 0xbb, + 0xcf, 0x59, 0xfe, 0x29, 0x29, 0xa4, 0xd6, 0x7a, 0xe1, 0xd6, 0x35, 0xa1, + 0x8e, 0x70, 0x01, 0xcf, 0x76, 0xba, 0x37, 0xc1, 0x5b, 0xc5, 0xf4, 0x65, + 0xac, 0xca, 0x23, 0x26, 0xe6, 0x91, 0x1a, 0x98, 0x03, 0xe6, 0x7b, 0x26, + 0x66, 0x2d, 0x35, 0x88, 0xd2, 0xc8, 0x6c, 0xb4, 0x87, 0x69, 0x27, 0xc9, + 0x05, 0x95, 0xd6, 0xc7, 0x6e, 0x93, 0xbc, 0x13, 0xb9, 0xce, 0xf1, 0xf9, + 0xa4, 0xa6, 0xe5, 0x99, 0x0d, 0x60, 0x7d, 0x95, 0x63, 0x7b, 0x77, 0x10, + 0xf7, 0xb9, 0xd2, 0xe8, 0xfe, 0x43, 0x7c, 0x52, 0x6e, 0x4b, 0x9f, 0x58, + 0x2d, 0x86, 0xee, 0xd6, 0xa6, 0x07, 0x7b, 0x83, 0x7f, 0x95, 0xe0, 0x55, + 0x1e, 0xa0, 0x2e, 0x75, 0xed, 0x63, 0x5a, 0x5b, 0x61, 0xd5, 0xef, 0x9f, + 0x6c, 0x78, 0xe9, 0xa2, 0xa0, 0xeb, 0xb2, 0x85, 0x81, 0x8c, 0x97, 0x46, + 0x8e, 0x2e, 0x11, 0xa7, 0x8c, 0x24, 0xa6, 0xf6, 0x55, 0xb8, 0x75, 0x66, + 0x59, 0x79, 0x02, 0xd7, 0xba, 0x20, 0x49, 0xf8, 0x70, 0xa5, 0x5e, 0x5b, + 0xbd, 0x5f, 0x68, 0x74, 0x32, 0x08, 0xd7, 0xda, 0x7f, 0xd8, 0xa9, 0xbe, + 0x90, 0xf6, 0xb4, 0x90, 0xe0, 0x34, 0xdd, 0x6e, 0x92, 0x7c, 0x9a, 0x15, + 0xba, 0xf1, 0xd8, 0x2d, 0x2f, 0x7d, 0xaf, 0xfb, 0x3d, 0x60, 0x6d, 0xad, + 0xda, 0x7b, 0xbc, 0xe3, 0x94, 0x94, 0xcc, 0x5b, 0x93, 0xbc, 0x9f, 0x40, + 0xd8, 0x5f, 0x2e, 0xdd, 0x5e, 0xe0, 0x64, 0xf2, 0x61, 0x57, 0xfd, 0x97, + 0x91, 0xea, 0x7a, 0x9e, 0xa8, 0x9f, 0xa5, 0x1f, 0x9f, 0x1f, 0xde, 0xa7, + 0x6d, 0xfd, 0x48, 0xda, 0xc3, 0x8e, 0xe0, 0xda, 0xc9, 0xe5, 0xe4, 0x4f, + 0x9b, 0xa1, 0x1a, 0x68, 0xf4, 0xe7, 0x7b, 0xbd, 0x69, 0xdd, 0xf4, 0x87, + 0x3f, 0x14, 0x94, 0xbd, 0x81, 0xad, 0xa8, 0x12, 0x43, 0xac, 0x23, 0x6b, + 0x5b, 0xdb, 0x4e, 0x7e, 0x0a, 0xcf, 0xab, 0x45, 0x14, 0x55, 0x8e, 0xdb, + 0x85, 0xef, 0xb0, 0x4f, 0xa4, 0xcd, 0x5c, 0x49, 0xf1, 0x25, 0x54, 0xaa, + 0xa2, 0x1a, 0xdc, 0x8b, 0x1f, 0x5b, 0x1d, 0xba, 0x0f, 0xab, 0xdd, 0x91, + 0xc8, 0xf8, 0xa2, 0xd1, 0x8b, 0x8c, 0xf7, 0xba, 0xfb, 0x32, 0x98, 0xdc, + 0x6a, 0xc6, 0xd7, 0x59, 0x5e, 0x9a, 0x9f, 0xcd, 0x09, 0x29, 0x07, 0x51, + 0x77, 0x50, 0x8a, 0xf1, 0x45, 0x5e, 0x96, 0x2f, 0x0f, 0x87, 0xb4, 0x97, + 0x13, 0xfd, 0x55, 0x45, 0xd5, 0x55, 0xe9, 0xb1, 0xad, 0xb1, 0x86, 0xc0, + 0xf0, 0x1d, 0x49, 0x8f, 0x53, 0x4e, 0x7e, 0x88, 0x5b, 0x98, 0xbf, 0xb2, + 0xfd, 0x59, 0x37, 0x7a, 0xa5, 0xb3, 0xe9, 0x3c, 0x8d, 0x47, 0xc4, 0x19, + 0x0a, 0x93, 0x7a, 0x7b, 0xeb, 0xcd, 0xb6, 0xeb, 0x36, 0x32, 0xa7, 0x13, + 0xb5, 0xda, 0x6f, 0x20, 0xfe, 0xf4, 0x68, 0x12, 0x52, 0x1a, 0xeb, 0xc7, + 0xb2, 0xd2, 0x4e, 0x18, 0x24, 0xe8, 0xd2, 0x0c, 0x31, 0x80, 0x7e, 0x77, + 0x92, 0xb2, 0x72, 0xb1, 0xc5, 0xbe, 0x9b, 0xda, 0xd7, 0x30, 0x0d, 0x9b, + 0x44, 0xee, 0x69, 0x1f, 0x9e, 0x20, 0x6b, 0xf3, 0x56, 0x32, 0x7a, 0x6f, + 0x50, 0x6e, 0x1b, 0x47, 0x4f, 0x73, 0x5b, 0x4b, 0x89, 0x36, 0x69, 0x03, + 0xe0, 0xe9, 0xd5, 0x64, 0x86, 0x5f, 0x89, 0x67, 0xa7, 0x7b, 0xf5, 0x1f, + 0x4c, 0xb7, 0x59, 0xd7, 0x90, 0x92, 0x9b, 0xed, 0xae, 0xbc, 0x50, 0x6f, + 0xa1, 0xb3, 0x51, 0x3a, 0x58, 0x79, 0xf8, 0x2d, 0xaf, 0xa9, 0xcd, 0x16, + 0x65, 0xdf, 0x7e, 0xc7, 0xb5, 0xec, 0xad, 0xdb, 0xde, 0xf2, 0x60, 0x9b, + 0x1c, 0x36, 0xc3, 0x7e, 0x01, 0x72, 0xc2, 0xf0, 0xc9, 0x75, 0xcf, 0x2f, + 0x0d, 0x74, 0x34, 0x68, 0x41, 0x03, 0x5d, 0x57, 0x69, 0xf5, 0x4a, 0xec, + 0x7b, 0x3a, 0x66, 0x56, 0x5d, 0x2c, 0xd8, 0x0b, 0xf6, 0x4f, 0x33, 0xb1, + 0xb3, 0xcf, 0xf6, 0x92, 0x52, 0x3e, 0xb0, 0xe1, 0x90, 0x5d, 0x8a, 0xd7, + 0x6c, 0xc8, 0xb8, 0xb9, 0xf4, 0x3a, 0x60, 0x6e, 0xa8, 0x82, 0x35, 0xf3, + 0x4f, 0x43, 0xb2, 0x2c, 0xe9, 0x78, 0x15, 0x65, 0x69, 0x73, 0xf7, 0xfa, + 0x80, 0xe8, 0x75, 0x71, 0x68, 0xfc, 0x16, 0x6f, 0x59, 0xb1, 0xb9, 0x37, + 0xb3, 0x06, 0x81, 0xfa, 0xe3, 0x48, 0x7b, 0x6c, 0xe0, 0x01, 0xb4, 0xb8, + 0x89, 0xe5, 0x5f, 0x65, 0x97, 0x1a, 0x30, 0x3d, 0x69, 0xf5, 0x5a, 0xc6, + 0x07, 0xcf, 0x8c, 0xca, 0x4a, 0x79, 0xac, 0xfa, 0x4b, 0xb0, 0xad, 0x63, + 0x87, 0xba, 0xbb, 0x1c, 0xd8, 0xef, 0x20, 0x0f, 0xee, 0x5d, 0x1f, 0xd5, + 0x9b, 0x5b, 0x67, 0x45, 0xa4, 0xf7, 0x6c, 0xb5, 0xdf, 0x23, 0xa7, 0xe0, + 0xa8, 0xf5, 0x7c, 0x53, 0x59, 0xc8, 0x70, 0xfa, 0x36, 0xbc, 0x3c, 0x78, + 0x4e, 0xd2, 0x0f, 0xe2, 0x9f, 0xea, 0xab, 0xec, 0xc6, 0xc6, 0x7e, 0x3d, + 0xed, 0xda, 0x1e, 0xff, 0x00, 0xd1, 0x92, 0x44, 0x13, 0x06, 0x63, 0xee, + 0x49, 0x4d, 0x9e, 0xa7, 0x45, 0x77, 0x02, 0xd7, 0xb0, 0x38, 0x4f, 0x04, + 0x48, 0x4d, 0x86, 0xe3, 0xba, 0x3c, 0x87, 0xe0, 0xac, 0xe5, 0xb4, 0x1d, + 0xde, 0x67, 0x45, 0x47, 0x18, 0xed, 0xb4, 0x81, 0xf2, 0x49, 0x4e, 0x8f, + 0x2d, 0x20, 0xe8, 0xaa, 0xbf, 0x42, 0x67, 0x9f, 0x15, 0x66, 0xb7, 0x4c, + 0xcf, 0xde, 0xa4, 0xec, 0x17, 0x58, 0x0b, 0xde, 0xef, 0x4e, 0xa1, 0xcb, + 0x8f, 0x7f, 0x82, 0x4a, 0x73, 0xda, 0xc7, 0x5c, 0xf0, 0xc6, 0x6b, 0xe2, + 0x7b, 0x0f, 0x32, 0xac, 0xba, 0xfa, 0xb1, 0x5a, 0xea, 0x71, 0xce, 0xeb, + 0x4e, 0x8f, 0xb7, 0xc3, 0xc9, 0xa8, 0x77, 0xe4, 0x30, 0x37, 0xd2, 0xc7, + 0x6e, 0xd6, 0xf7, 0x77, 0x77, 0x25, 0x87, 0x88, 0xeb, 0x48, 0x7b, 0xf4, + 0xab, 0x9f, 0x37, 0x7c, 0x12, 0x52, 0x7e, 0x9f, 0x8a, 0xeb, 0xdc, 0x1c, + 0xed, 0x2b, 0x1f, 0x4b, 0x9f, 0x71, 0xf0, 0x5b, 0xad, 0x6b, 0x5b, 0x00, + 0x69, 0x03, 0x40, 0x81, 0x40, 0x6b, 0x18, 0xd6, 0xb4, 0x6d, 0x03, 0x88, + 0x08, 0xde, 0x63, 0xb2, 0x4a, 0x63, 0x73, 0x84, 0x13, 0xe0, 0xb3, 0x6f, + 0x20, 0xbd, 0xdf, 0x82, 0xbd, 0x90, 0xef, 0x61, 0x8d, 0x4a, 0xcc, 0xb1, + 0xd2, 0x60, 0x88, 0x49, 0x48, 0x9c, 0x4c, 0x8f, 0x82, 0xb5, 0x8e, 0x49, + 0x2d, 0x11, 0xdd, 0x55, 0xe4, 0x85, 0x73, 0x14, 0x7e, 0x91, 0xbe, 0x1d, + 0x92, 0x53, 0xae, 0xc1, 0xec, 0xd7, 0xb2, 0xe2, 0xfe, 0xb4, 0xb6, 0xfa, + 0xdd, 0x63, 0xb1, 0xe7, 0x7e, 0xf0, 0xe1, 0x1c, 0xed, 0x77, 0x2b, 0xb4, + 0x1a, 0x36, 0x17, 0x27, 0xf5, 0xac, 0x96, 0x56, 0xe7, 0x34, 0x6a, 0xe6, + 0x11, 0xf3, 0x06, 0x3f, 0x8a, 0x4a, 0x79, 0xce, 0x9a, 0xe2, 0x32, 0x9b, + 0xaf, 0xd2, 0x04, 0x2e, 0xe7, 0x00, 0x7e, 0xa3, 0xf0, 0x5e, 0x79, 0xd3, + 0xec, 0x86, 0x54, 0xfe, 0xec, 0x30, 0x7e, 0x45, 0x7a, 0x27, 0x4d, 0xf7, + 0x60, 0xe9, 0xdf, 0xfb, 0x92, 0x52, 0x2a, 0x74, 0x36, 0x48, 0xd0, 0x10, + 0x67, 0xc7, 0xc5, 0x60, 0x7d, 0x62, 0xc9, 0x7e, 0x1b, 0x85, 0xcd, 0x01, + 0xc2, 0x40, 0x2d, 0x77, 0x1a, 0xf9, 0xad, 0xd6, 0xc9, 0x7b, 0x98, 0x3b, + 0x82, 0x35, 0xf8, 0x2c, 0x9e, 0xb9, 0x8a, 0xcc, 0xcc, 0x57, 0x35, 0xe7, + 0x6e, 0x81, 0xdb, 0xb9, 0x8d, 0xba, 0xa4, 0xa7, 0x9e, 0xb3, 0xae, 0x35, + 0xc1, 0xa6, 0xb6, 0x34, 0x38, 0x89, 0x2c, 0x6b, 0x78, 0x3f, 0xd6, 0x52, + 0xa7, 0xed, 0x37, 0x3d, 0x84, 0xb4, 0xd8, 0xf3, 0xab, 0x1a, 0xed, 0x79, + 0xe7, 0x55, 0x59, 0x9d, 0x38, 0x3a, 0x5e, 0xc2, 0x5e, 0xc6, 0x38, 0x41, + 0x02, 0x34, 0xf9, 0x2d, 0x1e, 0x9e, 0xdb, 0x29, 0xb9, 0xc7, 0x73, 0xb6, + 0x1d, 0x76, 0x6e, 0x83, 0x3e, 0x09, 0x29, 0x3e, 0x36, 0x46, 0x05, 0x36, + 0x39, 0xf9, 0xd4, 0xbc, 0xed, 0x80, 0x41, 0x24, 0x89, 0x02, 0x47, 0xc9, + 0x4f, 0x3b, 0xeb, 0x0e, 0x15, 0xf4, 0xd8, 0xcc, 0x4c, 0x77, 0x58, 0x5c, + 0x00, 0x2e, 0x02, 0x36, 0x9e, 0xc2, 0x42, 0xa3, 0xd4, 0x32, 0xee, 0xdc, + 0xe6, 0xb9, 0xa4, 0x30, 0x8e, 0x20, 0x11, 0x3d, 0xa5, 0x46, 0x8c, 0x8b, + 0x71, 0xaf, 0x65, 0x78, 0xdb, 0x3d, 0x6b, 0x21, 0xce, 0xdb, 0xc1, 0xf9, + 0x0e, 0x12, 0x52, 0xe2, 0xdc, 0xcb, 0xf1, 0xdc, 0xca, 0x65, 0xb6, 0xc3, + 0x5f, 0x66, 0x85, 0xa5, 0xbb, 0x7b, 0xca, 0x07, 0xdb, 0x72, 0x72, 0xae, + 0x66, 0x33, 0xac, 0x63, 0x9b, 0x59, 0x86, 0xc0, 0x80, 0x5d, 0x1c, 0x92, + 0x39, 0x56, 0xf3, 0x3a, 0xbe, 0x7d, 0x6c, 0x76, 0x95, 0x12, 0xe3, 0x0f, + 0xf4, 0xe1, 0xce, 0x00, 0x76, 0x84, 0x1c, 0x6d, 0xef, 0xc9, 0x65, 0xad, + 0x6b, 0x68, 0x65, 0x84, 0x6e, 0x04, 0x82, 0x1a, 0xd3, 0xcb, 0xb4, 0x49, + 0x4a, 0x2c, 0xb2, 0x87, 0x8d, 0xd7, 0xef, 0xb2, 0xe6, 0x10, 0x59, 0xb2, + 0x43, 0x47, 0x94, 0xa0, 0x7d, 0x83, 0x33, 0x6f, 0xaf, 0xb7, 0xf4, 0x7c, + 0x6e, 0xef, 0x3f, 0x05, 0x7f, 0x26, 0xec, 0x96, 0xfa, 0x8f, 0xc5, 0x2c, + 0xb1, 0xb2, 0x43, 0x1f, 0xa0, 0x74, 0x1f, 0x19, 0x55, 0xfe, 0xdb, 0x9d, + 0x1e, 0x9e, 0xf1, 0xbb, 0xd3, 0x89, 0xd7, 0x7e, 0xe8, 0xfb, 0x92, 0x53, + 0x5d, 0xb8, 0xfd, 0x47, 0x26, 0x4b, 0xd8, 0x4b, 0xc8, 0xd0, 0xb5, 0x9b, + 0x88, 0x1e, 0x32, 0xad, 0xd6, 0xfa, 0x2a, 0xc4, 0x18, 0x45, 0xa3, 0xd3, + 0x0f, 0x0e, 0x24, 0x89, 0x7b, 0x9f, 0xf9, 0x11, 0x31, 0x05, 0xf5, 0xb9, + 0xde, 0x85, 0x82, 0xaa, 0x5c, 0x36, 0x58, 0x77, 0x10, 0xe3, 0x3e, 0x48, + 0xa7, 0x01, 0xee, 0x78, 0xda, 0x4b, 0xd9, 0x5e, 0x8d, 0x6e, 0x84, 0xc9, + 0xe4, 0xa4, 0xa6, 0xbb, 0x72, 0x05, 0x54, 0xe4, 0xbe, 0xc6, 0x0f, 0x53, + 0x46, 0x30, 0x4c, 0x01, 0xdb, 0x48, 0xe5, 0x36, 0x25, 0xb9, 0x16, 0xb1, + 0xcc, 0xca, 0xfa, 0x2d, 0x06, 0x5e, 0x64, 0x6f, 0x1e, 0x03, 0x45, 0x74, + 0xf4, 0xfa, 0x6a, 0xaa, 0x1a, 0x3d, 0x5b, 0x01, 0x04, 0xbc, 0x8d, 0x01, + 0xe7, 0xfd, 0x61, 0x06, 0xfc, 0x6b, 0x6f, 0x25, 0xb7, 0x59, 0xea, 0x39, + 0xc4, 0x6e, 0x63, 0x4c, 0x12, 0x3b, 0x7c, 0x02, 0x4a, 0x40, 0xde, 0xa9, + 0xd4, 0x09, 0x18, 0xb4, 0x5a, 0xda, 0xeb, 0x20, 0xb4, 0x86, 0x8d, 0xc7, + 0x6f, 0x3c, 0xbb, 0xc9, 0x57, 0x37, 0xd8, 0xfb, 0x0b, 0x2c, 0xad, 0xd0, + 0x3d, 0x81, 0xc6, 0x23, 0x5f, 0xe5, 0x79, 0xab, 0x78, 0xfd, 0x3e, 0xa7, + 0xd8, 0x5c, 0xea, 0xf6, 0x3d, 0xba, 0x02, 0x64, 0x08, 0x1e, 0x6a, 0xdb, + 0x71, 0x5b, 0x63, 0x41, 0x70, 0x0e, 0x6b, 0x0c, 0xfb, 0x4c, 0xeb, 0xf0, + 0x49, 0x4e, 0x43, 0xb0, 0x37, 0x34, 0x8d, 0x6b, 0x60, 0xd5, 0xc4, 0x90, + 0x4e, 0xab, 0xbb, 0xe8, 0x58, 0xec, 0xc2, 0xfa, 0xb1, 0x43, 0x18, 0x08, + 0xf5, 0x4b, 0x9e, 0x67, 0x93, 0xb9, 0xdc, 0xfd, 0xc1, 0x73, 0x76, 0xf4, + 0xfc, 0x1c, 0x86, 0x17, 0xdc, 0x5c, 0xd3, 0xc6, 0xa4, 0x81, 0xf8, 0x2e, + 0xbf, 0x22, 0xa1, 0x8d, 0xd3, 0xf1, 0x31, 0x40, 0xfa, 0x2c, 0x6b, 0x7f, + 0xcd, 0x68, 0x49, 0x4e, 0x17, 0x58, 0xa5, 0xcc, 0xc5, 0x67, 0x51, 0xc3, + 0x60, 0x39, 0x35, 0xbc, 0x97, 0xb9, 0xa2, 0x49, 0x6c, 0x6d, 0x33, 0xf0, + 0xf0, 0x45, 0xf5, 0x09, 0xab, 0x08, 0xb8, 0xcb, 0xf6, 0x56, 0x5e, 0x7c, + 0xe0, 0x12, 0xb3, 0xb3, 0xf2, 0xae, 0xe8, 0xec, 0xbf, 0x15, 0x85, 0xce, + 0x17, 0xfe, 0x9a, 0x8b, 0x0f, 0xe6, 0xb9, 0xc7, 0xdc, 0x0a, 0xd8, 0xb8, + 0xe1, 0x39, 0x95, 0x3e, 0xc7, 0xbf, 0xd4, 0x73, 0x18, 0x5d, 0x03, 0x49, + 0x20, 0x13, 0x12, 0x92, 0x91, 0xf5, 0x71, 0xba, 0xb7, 0x0f, 0x02, 0xab, + 0x74, 0xba, 0x99, 0x7d, 0x62, 0xb7, 0x82, 0x76, 0xb8, 0x39, 0xb0, 0x60, + 0x82, 0xd3, 0x2b, 0x5b, 0x38, 0xf4, 0xe7, 0x31, 0xe0, 0xb1, 0xee, 0x31, + 0xcf, 0xcb, 0xe2, 0xa9, 0x74, 0x8b, 0xb0, 0xab, 0xb1, 0xc6, 0xb6, 0xbf, + 0x78, 0x3e, 0xd9, 0xe0, 0x14, 0x94, 0xdc, 0xbb, 0x0e, 0xfb, 0x44, 0xb5, + 0x86, 0x3c, 0xf4, 0x54, 0x9b, 0x80, 0xea, 0xf2, 0x01, 0xb2, 0xc6, 0x56, + 0x3b, 0xeb, 0x2a, 0xf6, 0x4e, 0x55, 0xef, 0x06, 0x5e, 0x47, 0xc3, 0x41, + 0xf8, 0x2c, 0x9b, 0x18, 0xe7, 0x5a, 0x0b, 0x1a, 0x5c, 0x4f, 0xcd, 0x25, + 0x3a, 0xb5, 0x9c, 0x2a, 0x06, 0xed, 0xc6, 0xe7, 0x73, 0x1f, 0x9a, 0xa1, + 0x99, 0x7b, 0xef, 0xe7, 0x8e, 0xcc, 0x1c, 0x21, 0x63, 0x61, 0x64, 0xd8, + 0x01, 0x70, 0xd8, 0x3c, 0x5d, 0xa7, 0xe0, 0xb5, 0x68, 0xc4, 0x65, 0x2c, + 0xfd, 0xe7, 0xc7, 0xd2, 0x3f, 0xc1, 0x25, 0x39, 0x38, 0xf8, 0x3f, 0x9d, + 0x70, 0xe3, 0x86, 0x7f, 0x7a, 0xd0, 0x60, 0x1a, 0x0f, 0x92, 0x89, 0x23, + 0x79, 0x00, 0x6a, 0x34, 0x4f, 0x5c, 0x92, 0x92, 0x9b, 0x55, 0xc4, 0x4f, + 0xe4, 0x52, 0x74, 0xce, 0x9c, 0x79, 0xa5, 0x5f, 0xd1, 0x07, 0x84, 0x8e, + 0xae, 0x49, 0x48, 0x2e, 0x3e, 0xd8, 0x8d, 0x7b, 0xac, 0xcb, 0x49, 0xdd, + 0xf0, 0x5a, 0x36, 0x43, 0x2b, 0xf1, 0x3a, 0xf3, 0xf1, 0x59, 0xd6, 0x72, + 0x49, 0xf9, 0x24, 0xa6, 0x2d, 0x3a, 0x8d, 0x15, 0xec, 0x36, 0x93, 0x60, + 0x21, 0x51, 0x6f, 0x32, 0xb4, 0xb0, 0x5b, 0x3a, 0x94, 0x94, 0xe8, 0x47, + 0xb3, 0x45, 0xcb, 0x7d, 0x6d, 0x3b, 0x31, 0x5c, 0xf8, 0x92, 0xdd, 0xc4, + 0x7c, 0xc7, 0xfb, 0x17, 0x50, 0x67, 0x6c, 0x05, 0xcb, 0xfd, 0x6b, 0x3b, + 0x70, 0x2d, 0x79, 0x13, 0xb0, 0x83, 0xf7, 0xe8, 0x92, 0x9e, 0x2f, 0x0e, + 0xb7, 0x56, 0xd2, 0x1c, 0x7d, 0xcf, 0xf7, 0x06, 0x78, 0x79, 0xaf, 0x46, + 0xe8, 0x6e, 0xf5, 0x3a, 0x6d, 0x6e, 0xe6, 0x40, 0x9f, 0xb9, 0x79, 0x9e, + 0x21, 0xb2, 0xdc, 0x93, 0x61, 0x3c, 0x0d, 0x7e, 0x7a, 0x42, 0xf4, 0x4f, + 0xab, 0x0f, 0xdf, 0xd3, 0x0b, 0x7b, 0xb1, 0xc4, 0x7d, 0xfa, 0xa4, 0xa4, + 0xcd, 0xf6, 0xe5, 0x11, 0xe3, 0xa2, 0xa3, 0x96, 0xd9, 0x63, 0x99, 0xe4, + 0x46, 0xaa, 0xe5, 0x87, 0x6e, 0x48, 0xf3, 0x3f, 0xc5, 0x03, 0x25, 0x9f, + 0xa4, 0x23, 0x89, 0x49, 0x4f, 0x39, 0x7e, 0x6e, 0x43, 0x28, 0xfb, 0x16, + 0x2d, 0x61, 0xd5, 0x6a, 0xfb, 0x6d, 0x88, 0xe3, 0xf3, 0x41, 0x3e, 0x6a, + 0xbe, 0x26, 0x51, 0xba, 0xc6, 0xb1, 0xa1, 0xa1, 0xcf, 0x9f, 0x6b, 0x08, + 0xdf, 0xa7, 0x27, 0x71, 0x44, 0xca, 0xba, 0xea, 0x6e, 0xc8, 0xa2, 0xb8, + 0xd5, 0xc0, 0x6a, 0xdd, 0xda, 0x73, 0xc1, 0x41, 0x75, 0x45, 0xf7, 0x40, + 0xac, 0x57, 0x63, 0x8c, 0x92, 0xdf, 0x6b, 0x7e, 0x49, 0x29, 0x2f, 0xa6, + 0xe3, 0x64, 0xdc, 0x0d, 0x6d, 0x27, 0x69, 0x69, 0x13, 0xa0, 0xef, 0x23, + 0x94, 0x5c, 0x66, 0x62, 0xba, 0xd7, 0x58, 0xca, 0x3d, 0x2f, 0xcd, 0x69, + 0x27, 0xdc, 0x63, 0xc3, 0xc2, 0x54, 0x19, 0x8f, 0x92, 0xe7, 0x37, 0xd6, + 0x25, 0xb1, 0xa6, 0xbc, 0x01, 0xd8, 0x23, 0xfd, 0x8e, 0xdb, 0x5c, 0x43, + 0x49, 0x01, 0xbd, 0x80, 0xd0, 0x13, 0xf9, 0xc1, 0xc9, 0x29, 0x13, 0xaf, + 0xc6, 0x79, 0xb6, 0x8c, 0x7a, 0xeb, 0x0e, 0xac, 0x97, 0x1d, 0x36, 0xb9, + 0xda, 0x76, 0x27, 0xe9, 0x21, 0xd7, 0x7d, 0x0c, 0xad, 0xcf, 0x75, 0x63, + 0x7b, 0x81, 0x0e, 0xde, 0x60, 0x91, 0xfc, 0x9f, 0x0d, 0x51, 0x22, 0x8f, + 0x5c, 0xd7, 0x61, 0x25, 0xcc, 0x69, 0x07, 0x6f, 0xd1, 0x98, 0x8e, 0x53, + 0x5b, 0xd3, 0x71, 0xcb, 0x2a, 0x0f, 0x73, 0x89, 0x8d, 0xcd, 0xd7, 0x5d, + 0x7c, 0x49, 0x49, 0x4d, 0x6c, 0xd7, 0xef, 0x6d, 0x78, 0xec, 0xad, 0xcd, + 0x68, 0x1b, 0xe7, 0xdb, 0x00, 0x9f, 0x34, 0x0f, 0xb4, 0x5d, 0x1b, 0x61, + 0xbb, 0x62, 0x27, 0x5d, 0xf3, 0xe3, 0xb9, 0x5b, 0x38, 0x95, 0x32, 0xc3, + 0x6b, 0x05, 0x96, 0x6d, 0xd0, 0x87, 0xba, 0x44, 0x0f, 0x90, 0x94, 0xfe, + 0xb1, 0x98, 0xf4, 0x0c, 0x4c, 0xc4, 0x18, 0x49, 0x4c, 0xab, 0xad, 0xa5, + 0xec, 0x7d, 0x50, 0x31, 0xfb, 0xbb, 0xf3, 0x9c, 0x7b, 0xc0, 0x2a, 0xe3, + 0x2b, 0x6b, 0x9c, 0x5b, 0xbc, 0xb0, 0x10, 0x1c, 0xe0, 0xd3, 0x24, 0xc7, + 0x67, 0x25, 0x8f, 0xd3, 0x1c, 0xd7, 0xb9, 0xd7, 0x59, 0xb9, 0xcf, 0x00, + 0x11, 0x31, 0xf2, 0x84, 0x4b, 0xb1, 0xdd, 0x8c, 0x77, 0xd6, 0x37, 0x39, + 0xe2, 0x01, 0xf1, 0xfb, 0x92, 0x52, 0x62, 0xda, 0xa3, 0x77, 0xa9, 0xb0, + 0x46, 0x91, 0xc9, 0x8e, 0xca, 0xaf, 0xa4, 0xfa, 0xa6, 0xda, 0x9c, 0xda, + 0xe0, 0xcb, 0xec, 0x71, 0xed, 0x3e, 0x2a, 0x2d, 0x19, 0x3b, 0xff, 0x00, + 0x4b, 0x05, 0xce, 0xfa, 0x00, 0x02, 0x40, 0x1d, 0xe1, 0x4e, 0xe6, 0x3b, + 0xec, 0xcf, 0x7e, 0xc0, 0xf6, 0xb4, 0xc4, 0x3b, 0xb1, 0xec, 0x92, 0x90, + 0xd9, 0x75, 0x6e, 0xc8, 0xdd, 0x4b, 0xbd, 0x49, 0x1a, 0x44, 0xf2, 0x7b, + 0xeb, 0xa2, 0x2d, 0x6e, 0x70, 0x63, 0xc6, 0xe9, 0xba, 0x62, 0x47, 0xb5, + 0xa3, 0xe1, 0x1c, 0xa0, 0x52, 0xdd, 0xcf, 0x16, 0x39, 0xad, 0x1e, 0x90, + 0xd5, 0xad, 0x98, 0x93, 0xda, 0x3b, 0xa6, 0x79, 0xbd, 0x84, 0x39, 0xa7, + 0xf4, 0x87, 0xfc, 0x1b, 0x75, 0xda, 0x3c, 0xd2, 0x53, 0x62, 0xb6, 0xe4, + 0x65, 0xf5, 0x0c, 0x4c, 0x5a, 0x64, 0xd6, 0xfb, 0x58, 0x2d, 0x9e, 0x5c, + 0xd0, 0x44, 0x98, 0xf0, 0x5d, 0x6f, 0x5f, 0xc9, 0x66, 0x39, 0x75, 0xae, + 0x04, 0xb2, 0x86, 0x49, 0x03, 0x99, 0x71, 0xec, 0xb0, 0xfe, 0xa7, 0xd1, + 0xeb, 0xf5, 0x71, 0x71, 0xe2, 0xa6, 0x39, 0xfa, 0x49, 0x13, 0xf4, 0x63, + 0x71, 0xf8, 0xad, 0x8e, 0xad, 0x91, 0x8a, 0xcb, 0x1e, 0xec, 0xa8, 0xf4, + 0xad, 0x7f, 0xa7, 0xa8, 0x91, 0xe1, 0xaa, 0x4a, 0x71, 0x3e, 0xb0, 0xd4, + 0xfc, 0xfc, 0x5c, 0x43, 0x8e, 0xdd, 0xec, 0x71, 0x6b, 0x8b, 0xbb, 0x86, + 0xbb, 0x4f, 0xf7, 0xad, 0x3c, 0xbe, 0x95, 0x95, 0xa0, 0x6b, 0x44, 0x08, + 0x03, 0x5e, 0xc0, 0x40, 0x55, 0x71, 0x1f, 0x6d, 0x79, 0xa7, 0x07, 0x64, + 0xd2, 0x25, 0xd4, 0x3f, 0xc1, 0x80, 0xe9, 0xf1, 0x5d, 0x4e, 0x43, 0x04, + 0xa4, 0xa7, 0x22, 0xfe, 0x97, 0x90, 0xe1, 0x32, 0xd1, 0x20, 0x77, 0x3f, + 0xdc, 0xb3, 0xb0, 0x3a, 0x5d, 0xed, 0xc8, 0x70, 0xdc, 0xd8, 0x9e, 0x75, + 0x5d, 0x4b, 0xd9, 0xb9, 0xad, 0xf8, 0x05, 0x4a, 0x8a, 0xf6, 0xe4, 0x9f, + 0x89, 0x49, 0x4c, 0x9b, 0x85, 0x43, 0x1a, 0x0b, 0x9b, 0xb9, 0xdd, 0xc9, + 0xd7, 0x54, 0x1b, 0x18, 0x01, 0x88, 0x02, 0x3b, 0x0d, 0x16, 0x9b, 0x98, + 0x08, 0x8f, 0xc1, 0x56, 0xb9, 0x83, 0xfb, 0x92, 0x53, 0x5a, 0x9e, 0xf1, + 0xdb, 0xb2, 0xb4, 0x41, 0xda, 0x86, 0xca, 0xf5, 0xf8, 0xab, 0x5b, 0x7d, + 0xa7, 0xc9, 0x25, 0x39, 0xcf, 0xae, 0x09, 0xff, 0x00, 0x5e, 0x52, 0xad, + 0x92, 0xe1, 0xf8, 0xab, 0x0f, 0x68, 0x2e, 0xd4, 0x41, 0xf0, 0x53, 0xae, + 0xb1, 0xdd, 0x25, 0x29, 0xac, 0x21, 0xa1, 0x40, 0x80, 0x01, 0x9e, 0x15, + 0xa8, 0x80, 0x3c, 0xd0, 0x5f, 0xc1, 0xf3, 0x49, 0x4d, 0x1b, 0xfe, 0x81, + 0xd3, 0x4e, 0x02, 0xce, 0x7b, 0x4c, 0xe9, 0xc7, 0x75, 0xa7, 0x96, 0x24, + 0x06, 0x8e, 0xff, 0x00, 0xc1, 0x50, 0x78, 0x33, 0xf0, 0x49, 0x4c, 0x2b, + 0x6e, 0xbf, 0xdc, 0xb5, 0x30, 0xd8, 0x76, 0xcf, 0x0b, 0x92, 0xea, 0xbf, + 0x59, 0x31, 0xf1, 0xaa, 0x7d, 0x58, 0x4f, 0xdf, 0x95, 0x30, 0x1e, 0x04, + 0xb1, 0xbe, 0x3a, 0xf7, 0x2b, 0xac, 0xe8, 0x96, 0xfd, 0xa3, 0xa6, 0xe2, + 0xde, 0xe3, 0x26, 0xda, 0xda, 0xe2, 0x7c, 0x49, 0x1a, 0xa4, 0xa6, 0xdb, + 0x81, 0x8f, 0x05, 0xcb, 0xfd, 0x6f, 0x00, 0x74, 0xcc, 0x82, 0xef, 0x01, + 0xff, 0x00, 0x54, 0x17, 0x58, 0xf6, 0x88, 0x5c, 0x97, 0xd7, 0x72, 0x47, + 0x4c, 0xb0, 0x0e, 0x5c, 0xe6, 0x01, 0xfe, 0x72, 0x4a, 0x78, 0x36, 0x5a, + 0xe6, 0xd4, 0x29, 0xa7, 0x5b, 0x2c, 0x3e, 0xe2, 0x3f, 0x20, 0x5d, 0xff, + 0x00, 0xd5, 0x27, 0x91, 0x55, 0xb5, 0xbb, 0x42, 0x40, 0x74, 0x76, 0x91, + 0xa1, 0x5c, 0x1e, 0xf1, 0x88, 0xcd, 0x8c, 0x13, 0x92, 0xe1, 0xee, 0x77, + 0x3b, 0x67, 0xb0, 0xf3, 0x5d, 0x5f, 0xd5, 0x1c, 0x92, 0x31, 0xd9, 0x63, + 0xcc, 0x96, 0xbc, 0xb1, 0xe4, 0xf8, 0x79, 0xfc, 0x8a, 0x4a, 0x76, 0xf2, + 0xa5, 0x99, 0x2d, 0x3d, 0xa5, 0x3e, 0x63, 0x46, 0x8f, 0xf3, 0xe5, 0x13, + 0x2d, 0xbf, 0xa7, 0x93, 0xc1, 0xfc, 0x53, 0xe5, 0x30, 0x7a, 0x21, 0xc3, + 0xb8, 0x94, 0x94, 0xf3, 0xb9, 0xfe, 0x8d, 0x2e, 0x7b, 0xde, 0xd2, 0x0b, + 0xc7, 0xba, 0xc0, 0x95, 0x06, 0x8b, 0xda, 0xd0, 0xc3, 0xf4, 0x4f, 0xd2, + 0x7e, 0x87, 0xe4, 0xad, 0xe7, 0x51, 0xea, 0xd2, 0xd8, 0x8d, 0x4c, 0x12, + 0x56, 0x4d, 0x98, 0xcf, 0x63, 0x76, 0xd0, 0xe1, 0x0d, 0x9d, 0xc5, 0xdb, + 0xb5, 0x27, 0xc9, 0x25, 0x25, 0xea, 0x74, 0x1d, 0x1b, 0x5b, 0x8c, 0x11, + 0xa1, 0xe5, 0xa0, 0xa8, 0x57, 0x93, 0x76, 0x15, 0x6c, 0xaa, 0xc6, 0x9b, + 0x47, 0x62, 0x0a, 0x58, 0xd8, 0xaf, 0xaa, 0xa7, 0x3e, 0xe7, 0x3a, 0xca, + 0x9f, 0xae, 0xd7, 0x7e, 0x71, 0xf2, 0x09, 0x99, 0x98, 0x5d, 0x61, 0x6f, + 0xa5, 0xee, 0xaa, 0x00, 0x1e, 0x44, 0x4c, 0xc9, 0x49, 0x4d, 0xe6, 0xfa, + 0x76, 0xb3, 0xd5, 0xa8, 0x6d, 0x70, 0xfc, 0xd2, 0x20, 0x93, 0x1a, 0xaa, + 0x95, 0xd3, 0xeb, 0xda, 0x2c, 0xb1, 0xf6, 0x32, 0xce, 0x00, 0x9f, 0x6f, + 0xe4, 0xd1, 0x49, 0xf9, 0xe5, 0xec, 0x01, 0xaf, 0x0d, 0x78, 0x30, 0x5c, + 0x47, 0x0a, 0x54, 0xbb, 0x63, 0xb7, 0x18, 0x71, 0x26, 0x75, 0xe3, 0xe4, + 0x12, 0x53, 0x69, 0xaf, 0xa8, 0x45, 0x0e, 0x92, 0xef, 0xcc, 0x91, 0xed, + 0x3f, 0x35, 0x1f, 0x7f, 0xd0, 0x86, 0xcf, 0x8f, 0x68, 0x89, 0xe1, 0x41, + 0x9b, 0x8d, 0x8e, 0xbb, 0x74, 0xd7, 0x1e, 0xd0, 0x67, 0xf2, 0x20, 0xfa, + 0xef, 0xf5, 0x3d, 0x5d, 0xa2, 0x66, 0x7e, 0x89, 0xfb, 0xbe, 0xe4, 0x94, + 0xff, 0x00, 0xff, 0xd9 +}; +size_t demo_005_jpg_len = 20176; + +const uint8_t demo_006_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xef, 0xd2, 0x51, 0x92, 0x53, 0x84, 0x94, 0xba, 0x75, + 0x14, 0xe9, 0x29, 0x74, 0x93, 0x4a, 0x52, 0x92, 0x97, 0x49, 0x32, 0x49, + 0x29, 0x74, 0x93, 0x26, 0x25, 0x25, 0x2e, 0x9d, 0x44, 0x14, 0xe9, 0x29, + 0x49, 0xd2, 0x4c, 0x92, 0x94, 0x92, 0x4a, 0x24, 0xa4, 0xa6, 0x49, 0x4a, + 0x86, 0xe4, 0xb7, 0x14, 0x94, 0xcd, 0x25, 0x0d, 0xc9, 0xe5, 0x25, 0x32, + 0x49, 0x46, 0x4a, 0x52, 0x92, 0x99, 0x24, 0xa1, 0xb9, 0x29, 0x49, 0x4c, + 0xd2, 0x50, 0x2e, 0x29, 0x6e, 0x49, 0x4c, 0xe5, 0x29, 0x50, 0xdc, 0x98, + 0x99, 0x49, 0x4c, 0xf7, 0x04, 0xb7, 0x84, 0x22, 0xa3, 0x25, 0x25, 0x26, + 0xde, 0x12, 0xde, 0x10, 0x24, 0xa7, 0x98, 0x49, 0x49, 0xb7, 0x84, 0xb7, + 0x84, 0x0d, 0xc5, 0x2d, 0xe5, 0x25, 0x27, 0xde, 0x97, 0xa8, 0x15, 0x70, + 0xe2, 0x52, 0x2e, 0x49, 0x4d, 0x8f, 0x50, 0x26, 0xf5, 0x02, 0x04, 0xa5, + 0xb8, 0xa4, 0xa4, 0xe0, 0xa7, 0xee, 0xa2, 0x01, 0x4f, 0xaa, 0x4a, 0x66, + 0x92, 0x60, 0x4a, 0x62, 0x52, 0x52, 0xa5, 0x38, 0x2a, 0x24, 0xa7, 0x6a, + 0x4a, 0x64, 0x92, 0x49, 0x24, 0xa5, 0x26, 0x22, 0x53, 0xa4, 0x92, 0x90, + 0xe4, 0xe4, 0xe3, 0xe1, 0xe3, 0xbf, 0x27, 0x25, 0xe2, 0xba, 0x6b, 0x12, + 0xf7, 0x9e, 0xdd, 0xbb, 0x2e, 0x43, 0x3f, 0xfc, 0x60, 0x5b, 0x5e, 0x55, + 0x94, 0xe1, 0xe1, 0xb6, 0xcc, 0x76, 0x98, 0x6d, 0xcf, 0x7b, 0x9a, 0x5c, + 0x3c, 0x43, 0x43, 0x74, 0x5b, 0xff, 0x00, 0x5a, 0x85, 0x7f, 0xb0, 0x72, + 0x8b, 0xc6, 0xe0, 0xd0, 0xd2, 0x04, 0x91, 0xae, 0xe6, 0x81, 0xc2, 0xf3, + 0xa6, 0x53, 0x0d, 0x24, 0xfd, 0x22, 0x23, 0x6f, 0x6d, 0x52, 0x53, 0x7e, + 0xaf, 0xad, 0x5f, 0x59, 0xe9, 0xaf, 0x65, 0x39, 0x0d, 0xba, 0xb6, 0x4e, + 0xc3, 0x73, 0x5a, 0xeb, 0x0b, 0x49, 0xd3, 0x73, 0xbb, 0x95, 0x2a, 0xfe, + 0xbc, 0x7d, 0x63, 0xa4, 0x87, 0x5e, 0x6b, 0xb1, 0xad, 0x32, 0xe6, 0xba, + 0xb0, 0xd2, 0x47, 0x84, 0xb6, 0x16, 0x53, 0xab, 0xb6, 0x91, 0xfb, 0xc1, + 0xdc, 0xb7, 0xc1, 0x35, 0x76, 0xc8, 0xdb, 0x63, 0x77, 0x57, 0xe0, 0x79, + 0x49, 0x4f, 0x55, 0x57, 0xf8, 0xc6, 0x17, 0x3e, 0xa6, 0x33, 0x14, 0x30, + 0xff, 0x00, 0x85, 0xdc, 0xe9, 0x9f, 0x26, 0x71, 0x1f, 0x35, 0xd7, 0xe2, + 0x65, 0x51, 0x9b, 0x8b, 0x5e, 0x56, 0x3b, 0xb7, 0x55, 0x68, 0x96, 0x9f, + 0xca, 0x0f, 0x98, 0x2b, 0xc7, 0x72, 0x70, 0xa9, 0x2e, 0xdf, 0x8c, 0xfd, + 0x8e, 0x1a, 0x86, 0x9f, 0xef, 0x5d, 0x47, 0xd4, 0x2e, 0xb9, 0x6d, 0x19, + 0x6e, 0xe9, 0x39, 0x9a, 0x33, 0x20, 0x97, 0x52, 0xe3, 0xc7, 0xa9, 0xdc, + 0x0f, 0xeb, 0x04, 0x94, 0xf7, 0xa7, 0x44, 0xd2, 0xa6, 0xe0, 0x86, 0x52, + 0x52, 0xe9, 0xc1, 0x51, 0x49, 0x25, 0x33, 0xdc, 0x9a, 0x54, 0x40, 0x4e, + 0x02, 0x4a, 0x51, 0x29, 0x25, 0xa2, 0x52, 0x92, 0x94, 0x98, 0x94, 0x89, + 0x51, 0x94, 0x94, 0xbc, 0xa5, 0x2a, 0x32, 0x94, 0xa4, 0xa6, 0x60, 0xa5, + 0x00, 0xa8, 0x02, 0x9f, 0x72, 0x4a, 0x5c, 0x85, 0x10, 0x09, 0xee, 0x9c, + 0x94, 0x92, 0x52, 0xe1, 0x80, 0xf2, 0x54, 0xbd, 0x06, 0xa4, 0xc1, 0xac, + 0x94, 0x42, 0xe0, 0x38, 0x49, 0x4d, 0x77, 0xd4, 0x5b, 0xa8, 0x4c, 0x02, + 0xb0, 0x4a, 0x81, 0x00, 0xa4, 0xa4, 0x25, 0xa4, 0x26, 0x44, 0x32, 0xa3, + 0x1f, 0x7a, 0x4a, 0x6c, 0x04, 0xe0, 0x26, 0x09, 0xe5, 0x25, 0x2e, 0xa2, + 0x53, 0xca, 0x62, 0x52, 0x52, 0xd1, 0xaa, 0x90, 0x50, 0x94, 0xb7, 0x24, + 0xa4, 0x89, 0xa5, 0x47, 0x72, 0x79, 0x49, 0x4c, 0xa5, 0x25, 0x09, 0xd5, + 0x65, 0x7d, 0x65, 0xea, 0xb9, 0x5d, 0x27, 0x0e, 0xbc, 0xac, 0x70, 0xd2, + 0x3d, 0x40, 0xdb, 0x0b, 0x81, 0x20, 0x02, 0x0c, 0x71, 0xe2, 0x52, 0x52, + 0x4f, 0xac, 0xc0, 0x1e, 0x87, 0x94, 0x0f, 0x83, 0x48, 0xf8, 0x87, 0xb5, + 0x79, 0xc0, 0xbb, 0x6b, 0xc9, 0x03, 0x53, 0xac, 0xf9, 0x2d, 0x8c, 0xcf, + 0xaf, 0x2e, 0xea, 0x38, 0x76, 0x61, 0xdf, 0x43, 0x18, 0x1e, 0x47, 0xbe, + 0xb7, 0xeb, 0xa1, 0x07, 0x87, 0x7c, 0x16, 0x43, 0x7a, 0x97, 0x4f, 0x6c, + 0x87, 0xb0, 0xb5, 0xbd, 0x8e, 0xdd, 0xee, 0xfc, 0xa9, 0x29, 0x15, 0x82, + 0xd7, 0x89, 0xd7, 0x69, 0xe3, 0xe0, 0x83, 0xb5, 0xed, 0x69, 0x31, 0xa1, + 0xee, 0x55, 0xab, 0xba, 0xde, 0x03, 0x49, 0x34, 0xd7, 0x63, 0xcf, 0xf2, + 0xa1, 0x83, 0xf8, 0xaa, 0x16, 0xf5, 0x66, 0x3f, 0xdb, 0xe8, 0x80, 0xde, + 0xf2, 0xe2, 0x7f, 0x22, 0x4a, 0x62, 0xe0, 0xe7, 0x48, 0x08, 0x4d, 0xb2, + 0xfa, 0x2d, 0x6d, 0xac, 0x25, 0xae, 0x61, 0x05, 0xae, 0x1d, 0x88, 0xe1, + 0x19, 0xbd, 0x4a, 0x90, 0xdd, 0xa2, 0xb6, 0x8f, 0x3d, 0x7f, 0xbd, 0x0e, + 0xcc, 0xb6, 0x3f, 0x96, 0xb4, 0xf9, 0x6b, 0xfd, 0xe9, 0x29, 0xf6, 0x4e, + 0x95, 0x9a, 0x3a, 0x87, 0x4c, 0xc6, 0xcc, 0x1a, 0xfa, 0xd5, 0xb5, 0xce, + 0xfe, 0xb4, 0x43, 0xbf, 0x15, 0x60, 0xb4, 0xaf, 0x33, 0xe8, 0x3f, 0x5e, + 0x6f, 0xe9, 0x18, 0xad, 0xc2, 0x76, 0x33, 0x6f, 0xc7, 0x61, 0x25, 0xb0, + 0xf2, 0xd7, 0x80, 0xe3, 0x24, 0x09, 0x04, 0x2e, 0xc3, 0xa2, 0xfd, 0x73, + 0xe9, 0x1d, 0x62, 0xd6, 0xe3, 0x33, 0x7e, 0x3e, 0x53, 0xfe, 0x8d, 0x56, + 0x8f, 0xa5, 0x1a, 0xfb, 0x5c, 0xd9, 0x05, 0x25, 0x3b, 0x27, 0x44, 0xd2, + 0x88, 0xe6, 0x28, 0x6d, 0x29, 0x29, 0x60, 0x53, 0xee, 0x4d, 0xb4, 0xa7, + 0x8d, 0x12, 0x52, 0xd2, 0x9a, 0x52, 0x4c, 0x92, 0x94, 0x4a, 0x69, 0x4f, + 0x0a, 0x29, 0x29, 0x49, 0x24, 0x99, 0x25, 0x2f, 0x2a, 0x40, 0x4a, 0x82, + 0x9b, 0x4a, 0x4a, 0x5f, 0x69, 0x52, 0x0d, 0xd1, 0x29, 0x4c, 0x5c, 0x7b, + 0x24, 0xa5, 0x11, 0x1d, 0xd2, 0x05, 0x36, 0xa5, 0x34, 0xa4, 0xa6, 0x73, + 0x29, 0xa0, 0x85, 0x10, 0xee, 0xc9, 0xc9, 0x49, 0x4b, 0xea, 0x9f, 0x48, + 0x95, 0x19, 0x4d, 0x29, 0x29, 0x34, 0x27, 0x51, 0x05, 0x29, 0x49, 0x4b, + 0x92, 0x98, 0x94, 0xc4, 0xa6, 0x29, 0x29, 0x69, 0x4a, 0x53, 0x4a, 0x64, + 0x94, 0xbc, 0xa7, 0xde, 0xa0, 0x92, 0x4a, 0x48, 0x0e, 0xa9, 0xef, 0xc7, + 0xa3, 0x2b, 0x1d, 0xf8, 0xf9, 0x0c, 0x16, 0x53, 0x68, 0xda, 0xf6, 0x1e, + 0x08, 0x2a, 0x00, 0xc2, 0x9b, 0x5c, 0x52, 0x53, 0xc0, 0x75, 0xdf, 0xf1, + 0x79, 0x91, 0x51, 0x76, 0x47, 0x4c, 0xb5, 0xaf, 0xa5, 0xa0, 0xb9, 0xd5, + 0xd8, 0x61, 0xed, 0x68, 0xd4, 0xc1, 0xe1, 0xd0, 0x3e, 0x0b, 0x95, 0x77, + 0x4d, 0x7d, 0x7b, 0x89, 0x71, 0x31, 0xa0, 0x5e, 0xbd, 0xd7, 0x72, 0x46, + 0x3f, 0x4a, 0xbd, 0xd3, 0xab, 0xdb, 0xe9, 0xb7, 0xe2, 0xed, 0x3f, 0x22, + 0xf3, 0x8b, 0x06, 0xfd, 0x00, 0xe5, 0x25, 0x3c, 0xf0, 0xc7, 0xb5, 0xd6, + 0x0a, 0xc0, 0x3b, 0x8a, 0xb4, 0xde, 0x92, 0xfd, 0x0b, 0xdd, 0xb6, 0x7b, + 0xf2, 0xb7, 0x29, 0xe9, 0xcc, 0xac, 0x7d, 0xa9, 0xef, 0x1a, 0x92, 0x03, + 0x7c, 0x41, 0x48, 0x34, 0x5d, 0x64, 0x70, 0x07, 0x10, 0x92, 0x9c, 0x9f, + 0xd8, 0xdb, 0x40, 0x74, 0x97, 0x0f, 0x14, 0x5b, 0xba, 0x55, 0x15, 0xe2, + 0x0b, 0x5c, 0x0e, 0xf3, 0x20, 0x46, 0xba, 0xc7, 0x75, 0xab, 0x60, 0xb2, + 0x90, 0x18, 0xe0, 0x87, 0x9a, 0x28, 0x38, 0xec, 0x97, 0xea, 0x4c, 0x40, + 0x31, 0xaa, 0x4a, 0x79, 0x8b, 0xab, 0x75, 0x56, 0x9a, 0xc4, 0xcb, 0x62, + 0x7e, 0x2b, 0xa5, 0xfa, 0x93, 0xd0, 0x73, 0xf3, 0x7a, 0x9d, 0x1d, 0x41, + 0xad, 0xf4, 0xf0, 0xf1, 0xac, 0x0e, 0x7d, 0x84, 0x8d, 0x5c, 0xcd, 0x76, + 0x81, 0xca, 0xa7, 0x60, 0xac, 0xd0, 0xec, 0x66, 0x52, 0x1d, 0x93, 0x7b, + 0xb7, 0xb6, 0xd9, 0xf7, 0x00, 0x06, 0xa0, 0x83, 0xd9, 0x77, 0xbf, 0x51, + 0xba, 0x3b, 0xfa, 0x6f, 0x48, 0xf5, 0x6e, 0x91, 0x7e, 0x69, 0x16, 0xb9, + 0xbf, 0xba, 0xc8, 0xf6, 0x0f, 0x8c, 0x6b, 0xf3, 0x49, 0x4f, 0x46, 0x54, + 0x61, 0x27, 0x14, 0xc0, 0xa4, 0xa5, 0xe0, 0x21, 0xbb, 0x52, 0x88, 0x4a, + 0x1f, 0x74, 0x94, 0xc4, 0x85, 0x15, 0x32, 0xa2, 0x92, 0x94, 0x98, 0xea, + 0x9d, 0x32, 0x4a, 0x59, 0x24, 0xe9, 0x92, 0x52, 0xca, 0x40, 0xf8, 0x26, + 0x29, 0x24, 0xa5, 0xe6, 0x53, 0x84, 0xc1, 0x3c, 0xa4, 0xa5, 0xca, 0x89, + 0x4a, 0x53, 0x4a, 0x4a, 0x52, 0x79, 0x4c, 0x96, 0xa9, 0x29, 0x90, 0x29, + 0x48, 0x50, 0x94, 0xa5, 0x25, 0x26, 0x4a, 0x54, 0x65, 0x3c, 0xa4, 0xa6, + 0x5a, 0x26, 0x29, 0x92, 0x49, 0x4b, 0x15, 0x12, 0xa4, 0x9a, 0x12, 0x53, + 0x14, 0x94, 0xc3, 0x53, 0xfa, 0x7a, 0x24, 0xa6, 0x0a, 0x5b, 0x9a, 0xc0, + 0x5e, 0xf3, 0xb5, 0xad, 0xd4, 0x93, 0xd9, 0x0a, 0xdb, 0xea, 0xa4, 0x02, + 0xf7, 0x72, 0x76, 0x81, 0xdc, 0x9f, 0x00, 0x15, 0x5c, 0x8a, 0x3a, 0x86, + 0x70, 0xd8, 0x03, 0x71, 0xf1, 0xf9, 0xfd, 0x24, 0x97, 0x9f, 0x8b, 0x5b, + 0xfc, 0x4a, 0x4a, 0x73, 0x7a, 0xc6, 0x78, 0xce, 0x21, 0x8d, 0x11, 0x8e, + 0xc9, 0x89, 0xe5, 0xc7, 0xc5, 0x73, 0x57, 0xb5, 0x94, 0x35, 0xd0, 0x41, + 0x20, 0xc8, 0xf8, 0x2e, 0xbe, 0xcf, 0xab, 0xd6, 0x38, 0x0d, 0xb7, 0x87, + 0x8e, 0xed, 0xd9, 0xb7, 0x48, 0xed, 0xee, 0xf1, 0x5c, 0x9f, 0xd6, 0x7e, + 0x95, 0x99, 0xd3, 0xdc, 0xdb, 0xcf, 0xba, 0xa7, 0x48, 0x7c, 0x72, 0xdf, + 0x02, 0x7e, 0x29, 0x29, 0xc6, 0xb7, 0x31, 0xee, 0x78, 0x64, 0x9d, 0x80, + 0xab, 0xfd, 0x33, 0x22, 0xba, 0xac, 0x75, 0xb6, 0x7b, 0xb6, 0x8f, 0x68, + 0xf1, 0x2b, 0x05, 0xd6, 0xfb, 0x89, 0x45, 0x66, 0x64, 0x34, 0xc7, 0x82, + 0x4a, 0x76, 0xb2, 0xb3, 0x9b, 0x7b, 0x9c, 0x4b, 0x83, 0x67, 0xb9, 0x55, + 0x32, 0xeb, 0xdd, 0x43, 0xed, 0xa2, 0xed, 0x86, 0xa6, 0x17, 0x38, 0x0d, + 0x77, 0x00, 0xaa, 0x32, 0xd2, 0xd8, 0x3b, 0x77, 0xcf, 0x32, 0x27, 0x55, + 0x1e, 0xa2, 0xf9, 0x2c, 0x63, 0x07, 0xa6, 0x1c, 0xc9, 0x7b, 0x40, 0x8d, + 0x7e, 0x23, 0xb2, 0x4a, 0x74, 0xba, 0x4d, 0x55, 0x3f, 0xa8, 0xe0, 0x5b, + 0x92, 0x05, 0x8d, 0x2e, 0xac, 0x92, 0x7b, 0x87, 0x3b, 0x83, 0xf7, 0xaf, + 0x5a, 0xe0, 0x2f, 0x1e, 0xc2, 0xb1, 0xcd, 0xc6, 0xc5, 0xb3, 0xbd, 0x6e, + 0x22, 0x7f, 0xaa, 0xed, 0xc1, 0x7a, 0xf3, 0x5e, 0x1f, 0x53, 0x5e, 0x38, + 0x70, 0x0e, 0x1f, 0x31, 0x29, 0x29, 0x8b, 0x8e, 0xa9, 0x4a, 0x89, 0x29, + 0x4a, 0x4a, 0x65, 0x29, 0xa5, 0x34, 0xa6, 0x25, 0x25, 0x2e, 0x99, 0x32, + 0x49, 0x29, 0x49, 0x93, 0xa6, 0x49, 0x4a, 0x4d, 0x29, 0x24, 0x92, 0x94, + 0x92, 0x78, 0x49, 0x25, 0x2c, 0x92, 0x74, 0xa1, 0x25, 0x2c, 0x99, 0x49, + 0x28, 0x49, 0x4c, 0x52, 0x4f, 0x09, 0x24, 0xa5, 0xa1, 0x34, 0x29, 0x24, + 0x92, 0x99, 0xa4, 0x9a, 0x52, 0x05, 0x25, 0x32, 0x4e, 0xa3, 0x29, 0x4a, + 0x4a, 0x51, 0x49, 0x34, 0xa7, 0x49, 0x4a, 0x05, 0x07, 0x3f, 0x30, 0xe2, + 0x62, 0xba, 0xd6, 0xb7, 0x7d, 0xa6, 0x19, 0x4d, 0x63, 0x97, 0xd8, 0xed, + 0x1a, 0x11, 0x90, 0x6e, 0x0d, 0x73, 0x98, 0xf7, 0x09, 0x75, 0x73, 0xb2, + 0x7b, 0x13, 0xa1, 0x29, 0x29, 0xad, 0x85, 0x8f, 0xf6, 0x56, 0x8b, 0x32, + 0x0f, 0xab, 0x96, 0xe9, 0x2e, 0x71, 0xd7, 0x69, 0x76, 0xae, 0x0d, 0x56, + 0x7d, 0x77, 0x14, 0x22, 0xe0, 0x4c, 0x95, 0x12, 0xf0, 0x12, 0x52, 0x71, + 0x68, 0x08, 0x59, 0xd8, 0xd4, 0xf5, 0x2c, 0x47, 0xe3, 0xd9, 0xa1, 0x70, + 0x21, 0xae, 0xe6, 0x0a, 0x0b, 0xad, 0x00, 0x49, 0x2a, 0xb7, 0xda, 0xf6, + 0xba, 0x67, 0xe0, 0x3c, 0x92, 0x53, 0xe6, 0xf9, 0x9d, 0x13, 0x3e, 0x9e, + 0xb2, 0x7a, 0x55, 0x75, 0x39, 0xd6, 0xd8, 0xfd, 0xb4, 0x02, 0x3e, 0x9b, + 0x4f, 0x0e, 0x9e, 0x22, 0x17, 0x61, 0x4f, 0xf8, 0xb1, 0xc7, 0xfb, 0x19, + 0x17, 0xe6, 0xbf, 0xed, 0xa5, 0xba, 0x16, 0x01, 0xe9, 0x35, 0xde, 0x1b, + 0x4f, 0xb9, 0xc3, 0xe6, 0x16, 0x9b, 0xb3, 0xa8, 0xaf, 0x32, 0xac, 0x97, + 0xd6, 0x1e, 0xfc, 0x72, 0xed, 0x8e, 0x03, 0xdc, 0x1a, 0xe1, 0x0e, 0x00, + 0xfc, 0x17, 0x4a, 0xc7, 0x07, 0xb5, 0xaf, 0x69, 0x96, 0xb8, 0x02, 0x0f, + 0x91, 0xd5, 0x25, 0x3e, 0x63, 0xd5, 0xfe, 0xac, 0xd9, 0xf5, 0x79, 0xd5, + 0x01, 0x94, 0x32, 0x1b, 0x78, 0x21, 0xad, 0xdb, 0xb4, 0x82, 0x22, 0x4f, + 0x27, 0xc5, 0x63, 0x75, 0x06, 0x01, 0x79, 0xfe, 0x48, 0x03, 0xe7, 0x01, + 0x7a, 0x8f, 0x5e, 0xe9, 0xb8, 0x1d, 0x43, 0xd3, 0x39, 0x13, 0xbe, 0xaf, + 0xa2, 0xe6, 0x98, 0x22, 0x75, 0xf8, 0x2f, 0x3c, 0xeb, 0xfd, 0x2a, 0xec, + 0x3b, 0x8d, 0x8d, 0x77, 0xad, 0x49, 0x24, 0xef, 0x02, 0x0b, 0x7f, 0xac, + 0x12, 0x52, 0x56, 0xe3, 0x06, 0xfd, 0x5e, 0xc3, 0xc8, 0x8f, 0xa5, 0x75, + 0xcd, 0x27, 0xe0, 0x5b, 0x0b, 0xd1, 0xba, 0x3d, 0xfe, 0xbf, 0x47, 0xc4, + 0xb7, 0x92, 0x6a, 0x68, 0x3f, 0x16, 0xfb, 0x7f, 0x82, 0xe3, 0xc6, 0x30, + 0x77, 0xd4, 0x5c, 0x5b, 0x3b, 0xb2, 0xe7, 0x38, 0xff, 0x00, 0x69, 0xce, + 0x6a, 0xe8, 0x7e, 0xa6, 0xdb, 0xea, 0xf4, 0x36, 0x30, 0x9d, 0x6a, 0xb1, + 0xec, 0xf9, 0x4e, 0xef, 0xe2, 0x92, 0x9d, 0x72, 0x53, 0x4a, 0x93, 0x9a, + 0xa2, 0x42, 0x4a, 0x5a, 0x52, 0x94, 0xa1, 0x38, 0x69, 0x49, 0x4a, 0x4a, + 0x53, 0xed, 0x25, 0x3f, 0xa6, 0x92, 0x98, 0xa4, 0xa4, 0x18, 0x9f, 0xd3, + 0x49, 0x48, 0xd3, 0x29, 0x96, 0x15, 0x12, 0x08, 0xe5, 0x25, 0x29, 0x28, + 0x4e, 0x92, 0x4a, 0x52, 0x49, 0x93, 0xa4, 0xa5, 0x8a, 0x64, 0xe9, 0x24, + 0xa5, 0x92, 0x49, 0x28, 0x94, 0x94, 0xb2, 0x4a, 0x5b, 0x0c, 0x48, 0x4d, + 0x07, 0xc1, 0x25, 0x2d, 0x29, 0x4a, 0x64, 0xbc, 0xd2, 0x53, 0x29, 0x4a, + 0x53, 0x27, 0x09, 0x29, 0x74, 0x81, 0x49, 0x3a, 0x4a, 0x58, 0x95, 0x5a, + 0xc7, 0xcc, 0xa3, 0xd9, 0xf4, 0x55, 0x57, 0x38, 0x14, 0x94, 0xc0, 0x38, + 0x13, 0x07, 0x8e, 0xe5, 0x01, 0xce, 0x75, 0xf5, 0x3c, 0xd6, 0x4b, 0x01, + 0x3b, 0x6b, 0x70, 0xe7, 0xcc, 0xea, 0x9b, 0x22, 0xcd, 0xb5, 0xd9, 0x06, + 0x0c, 0x47, 0xdf, 0xa2, 0xa9, 0xd5, 0x33, 0xbe, 0xc7, 0xd3, 0x1d, 0x65, + 0x62, 0x1c, 0x40, 0xaa, 0x9f, 0xeb, 0x3b, 0x49, 0xf9, 0x0d, 0x52, 0x53, + 0x26, 0x75, 0x0c, 0x3b, 0xee, 0xbb, 0x11, 0x8f, 0x26, 0xea, 0x7e, 0x99, + 0x23, 0xda, 0x48, 0xd1, 0xdb, 0x4f, 0x92, 0x15, 0xaf, 0xec, 0x3e, 0x88, + 0xee, 0x56, 0x3f, 0x44, 0xa2, 0xc7, 0xe6, 0xed, 0xd4, 0x9d, 0x86, 0x5d, + 0xcf, 0x82, 0xdb, 0x7d, 0x13, 0x0d, 0x26, 0x24, 0x13, 0xe7, 0xa2, 0x4a, + 0x6a, 0x5e, 0xc3, 0xba, 0xb7, 0x70, 0x01, 0x04, 0xc7, 0x71, 0xc1, 0x0b, + 0xa3, 0xfa, 0xbd, 0x69, 0x38, 0x1e, 0x83, 0x9c, 0x0b, 0xb1, 0x9c, 0x6b, + 0xfe, 0xc8, 0xd5, 0x9f, 0x82, 0xc0, 0x7d, 0x64, 0xd0, 0x1d, 0x3a, 0x83, + 0x1f, 0x25, 0x4b, 0x13, 0xab, 0xdd, 0x81, 0xd7, 0xfd, 0x19, 0x9a, 0x2f, + 0xad, 0xa6, 0xde, 0xe0, 0x72, 0xd0, 0x61, 0x25, 0x3d, 0x3e, 0x75, 0xde, + 0xff, 0x00, 0xd2, 0x44, 0x38, 0xed, 0x0e, 0x00, 0x81, 0xfd, 0x57, 0x4f, + 0xe0, 0xb9, 0x4c, 0xfb, 0xda, 0x32, 0x0b, 0x0c, 0xba, 0xa3, 0xa7, 0x98, + 0xf2, 0xf3, 0x5d, 0x0f, 0x51, 0x6b, 0x9d, 0x4b, 0x9e, 0x60, 0xb7, 0x87, + 0xb4, 0x68, 0xd7, 0x8f, 0x21, 0x3c, 0x85, 0xcb, 0x64, 0x3b, 0x75, 0x8e, + 0x61, 0xfe, 0x71, 0x9e, 0xe0, 0x4f, 0xe7, 0x33, 0xf7, 0xbf, 0xbd, 0x25, + 0x3a, 0x6d, 0xcf, 0xad, 0xbd, 0x0e, 0xee, 0x94, 0xea, 0xc3, 0x6b, 0xda, + 0x5d, 0x8f, 0x63, 0x66, 0x37, 0x6e, 0xdf, 0x0e, 0x0a, 0xe7, 0xd4, 0x1b, + 0x7f, 0x57, 0xcb, 0xc7, 0x3c, 0xb5, 0xed, 0x78, 0x1f, 0x10, 0x47, 0xf0, + 0x54, 0x3a, 0x1e, 0x0d, 0x9d, 0x41, 0xee, 0xa1, 0xe2, 0x19, 0x5b, 0x5c, + 0x5e, 0x47, 0x81, 0x1e, 0xd1, 0xf3, 0x2a, 0x7f, 0x52, 0x1d, 0xe9, 0xf5, + 0x5b, 0x98, 0x4f, 0xf3, 0x95, 0x10, 0x47, 0x9b, 0x48, 0x3f, 0xde, 0x92, + 0x9e, 0xd5, 0xc1, 0x40, 0x84, 0x57, 0x28, 0x24, 0xa6, 0x21, 0xaa, 0x60, + 0x00, 0x14, 0x65, 0x4a, 0x52, 0x52, 0xe2, 0x13, 0x73, 0xf0, 0x4c, 0xa4, + 0x12, 0x52, 0xa0, 0x04, 0xda, 0xa9, 0x24, 0x52, 0x53, 0x04, 0xa2, 0x74, + 0x48, 0x94, 0x9a, 0x75, 0xd1, 0x25, 0x2d, 0xe9, 0x28, 0x96, 0x10, 0x8d, + 0x29, 0x8c, 0x24, 0xa4, 0x29, 0x94, 0xdc, 0x14, 0x52, 0x52, 0xca, 0x4d, + 0x6c, 0xa6, 0x53, 0x60, 0x10, 0x92, 0x96, 0x73, 0x34, 0xf3, 0x4c, 0x2b, + 0x70, 0x12, 0xa7, 0x2a, 0x40, 0xa4, 0xa6, 0x03, 0x40, 0x9f, 0x45, 0x23, + 0xaa, 0x68, 0x49, 0x4d, 0x72, 0x21, 0x32, 0x22, 0x6d, 0xa1, 0x25, 0x30, + 0x09, 0xd4, 0xb6, 0x84, 0xb6, 0x84, 0x94, 0xc6, 0x53, 0xca, 0x96, 0xd0, + 0x9b, 0x6a, 0x4a, 0x47, 0x69, 0xf6, 0x15, 0x9c, 0xeb, 0x08, 0x30, 0xb4, + 0x32, 0x04, 0x31, 0x66, 0xda, 0x35, 0x49, 0x48, 0x2e, 0x3e, 0xa3, 0x1e, + 0xc9, 0xd1, 0xc3, 0xb7, 0x20, 0xf2, 0xb3, 0xba, 0xf5, 0x39, 0x79, 0x19, + 0x38, 0xf8, 0xd5, 0x54, 0x5d, 0x45, 0x2d, 0x2e, 0x24, 0x44, 0x6f, 0x77, + 0xf7, 0x05, 0x78, 0x56, 0x4e, 0x43, 0x63, 0xc7, 0x5f, 0x82, 0x33, 0xe8, + 0xac, 0x9f, 0x50, 0xe8, 0x27, 0x93, 0xcb, 0x8a, 0x4a, 0x43, 0xd1, 0xf0, + 0xec, 0xc2, 0xc5, 0xb6, 0xdb, 0xe0, 0x3d, 0xda, 0x86, 0x83, 0x3b, 0x47, + 0xc7, 0xcd, 0x20, 0xe2, 0x59, 0x65, 0x87, 0xb3, 0x43, 0x47, 0xcd, 0x1f, + 0x29, 0xfb, 0x31, 0xb6, 0x8e, 0x5e, 0x60, 0x0f, 0x82, 0x09, 0xf6, 0xe2, + 0xed, 0xee, 0x4a, 0x4a, 0x47, 0x3f, 0xaa, 0x3f, 0xef, 0xfb, 0x96, 0x0e, + 0x60, 0x6d, 0x7d, 0x67, 0xa7, 0x64, 0x3c, 0xec, 0x65, 0x92, 0xc7, 0x98, + 0xd3, 0x43, 0x31, 0xf8, 0xae, 0x83, 0x6c, 0xe3, 0xbc, 0x7f, 0x24, 0xfe, + 0x45, 0xcd, 0x7d, 0x62, 0x70, 0x38, 0x98, 0xb6, 0x34, 0xfb, 0xab, 0xb2, + 0x01, 0xf2, 0x2d, 0x49, 0x4e, 0xce, 0x7b, 0x45, 0x39, 0xfb, 0x5b, 0x7e, + 0xe0, 0xe6, 0x7a, 0x95, 0xd4, 0xef, 0x0f, 0x06, 0x15, 0x93, 0xd4, 0xdc, + 0xd0, 0x6b, 0xc8, 0xac, 0x6d, 0x73, 0x1c, 0x24, 0x79, 0x1f, 0xa4, 0x16, + 0x8e, 0x55, 0x6c, 0xbf, 0x03, 0x1e, 0xf2, 0xd9, 0x75, 0x7a, 0xcc, 0xea, + 0xd6, 0xbc, 0x02, 0x08, 0xf9, 0xaa, 0x0d, 0xc7, 0xbf, 0x39, 0xec, 0xa2, + 0xb1, 0xbe, 0xd7, 0x39, 0xac, 0x8f, 0x19, 0xee, 0x52, 0x53, 0xd9, 0x7d, + 0x55, 0xc2, 0x66, 0x3f, 0x4c, 0x6d, 0xe0, 0xcb, 0xf2, 0x8e, 0xf7, 0x79, + 0x01, 0xed, 0x6b, 0x57, 0x3b, 0xd2, 0x3f, 0x53, 0xfa, 0xd4, 0xfa, 0xb8, + 0x02, 0xfb, 0x2b, 0x8f, 0x27, 0x6e, 0x8f, 0xca, 0xbb, 0x6c, 0x5a, 0x1b, + 0x8d, 0x8f, 0x56, 0x3b, 0x3e, 0x8d, 0x4d, 0x0d, 0x1f, 0x20, 0xb8, 0x6e, + 0xb0, 0x7e, 0xc5, 0xf5, 0xb9, 0xef, 0x1a, 0x07, 0x3e, 0xab, 0x87, 0xcc, + 0x09, 0xfc, 0x42, 0x4a, 0x7b, 0xd7, 0x21, 0x92, 0xa6, 0xed, 0x75, 0x50, + 0xee, 0x92, 0x94, 0x01, 0x2a, 0x41, 0xa9, 0xda, 0xa4, 0x92, 0x98, 0x10, + 0x46, 0xa9, 0x02, 0xa7, 0x1a, 0x21, 0xb8, 0x42, 0x4a, 0x65, 0x2a, 0x25, + 0xca, 0x24, 0xa6, 0x94, 0x94, 0xc8, 0x94, 0xc0, 0xc1, 0x51, 0x94, 0x92, + 0x52, 0x4d, 0xc9, 0x12, 0xa0, 0x13, 0xa4, 0xa6, 0x50, 0xa2, 0x42, 0x7d, + 0xc9, 0x8b, 0xa5, 0x25, 0x2a, 0x12, 0x12, 0x9a, 0x4a, 0x74, 0x94, 0xba, + 0x52, 0x61, 0x31, 0xd5, 0x21, 0xe0, 0x92, 0x99, 0x07, 0x12, 0x13, 0x77, + 0x52, 0x10, 0x14, 0x76, 0xea, 0x92, 0x98, 0x24, 0x94, 0x25, 0x09, 0x29, + 0x49, 0x27, 0x01, 0x3e, 0xd4, 0x94, 0xb2, 0x4a, 0x5a, 0x04, 0xd1, 0xdc, + 0x24, 0xa4, 0x19, 0x3f, 0x40, 0xac, 0xbb, 0x3d, 0xcc, 0x91, 0xc8, 0xfe, + 0x0b, 0x57, 0x20, 0x4b, 0x0a, 0xcb, 0x88, 0x7b, 0x98, 0x7b, 0xea, 0x3e, + 0x69, 0x29, 0xac, 0x2c, 0x6b, 0x6e, 0x6d, 0x87, 0xe8, 0xb7, 0x52, 0x3b, + 0x9f, 0x2f, 0x9a, 0x21, 0xb1, 0xdb, 0xf7, 0xdf, 0xfc, 0xe9, 0xfa, 0x15, + 0x0e, 0x18, 0x15, 0x70, 0x62, 0xf6, 0x09, 0xda, 0x5a, 0xee, 0x4e, 0xab, + 0x42, 0x9c, 0x7a, 0xd8, 0x7d, 0x47, 0xfd, 0x37, 0x6b, 0xaf, 0x30, 0x92, + 0x9a, 0x99, 0x6e, 0x9b, 0xab, 0xab, 0xf7, 0x1b, 0x27, 0xe2, 0x54, 0x2c, + 0x32, 0xc8, 0x1c, 0x02, 0xa2, 0xe7, 0xfa, 0x97, 0x59, 0x69, 0xfc, 0xe2, + 0x61, 0x23, 0xf4, 0x7e, 0x25, 0x25, 0x33, 0x1f, 0xcd, 0x1f, 0x02, 0x0f, + 0xe4, 0x5c, 0x9f, 0xd6, 0x07, 0xfe, 0xab, 0x5b, 0x7f, 0x96, 0x3f, 0x22, + 0xeb, 0x9b, 0xf4, 0x3e, 0x4b, 0x8c, 0xeb, 0xee, 0x7d, 0xad, 0xa9, 0xa4, + 0x06, 0xc3, 0xc6, 0x92, 0x92, 0x9d, 0xf6, 0x0b, 0x1d, 0xd3, 0xf1, 0x29, + 0xaf, 0xe9, 0x5c, 0xc1, 0x56, 0x9e, 0x6d, 0x04, 0x7e, 0x21, 0x74, 0x1f, + 0x57, 0xba, 0x0b, 0xba, 0x6e, 0xfc, 0x8c, 0x92, 0x0e, 0x45, 0x82, 0x03, + 0x41, 0x90, 0xc1, 0xdf, 0x5f, 0x12, 0xa1, 0xf5, 0x6b, 0x06, 0xb3, 0x8c, + 0xdb, 0xad, 0x68, 0x73, 0xaa, 0x86, 0xd3, 0x3a, 0x86, 0xc0, 0x12, 0x42, + 0xdd, 0x71, 0x49, 0x4b, 0x82, 0xb8, 0x5f, 0xaf, 0x75, 0x9a, 0xba, 0xbe, + 0x2e, 0x43, 0x74, 0xf5, 0x29, 0x82, 0x7c, 0xd8, 0xe3, 0xff, 0x00, 0x92, + 0x5d, 0xc0, 0x2b, 0x96, 0xfa, 0xff, 0x00, 0x4c, 0xe3, 0x61, 0x64, 0x47, + 0xd0, 0xb1, 0xcc, 0x27, 0xfa, 0xed, 0x9f, 0xfb, 0xea, 0x4a, 0x7a, 0x4c, + 0x3b, 0x7d, 0x7c, 0x2c, 0x7b, 0x86, 0xbb, 0xeb, 0x63, 0xa7, 0xe2, 0x02, + 0x22, 0xcf, 0xfa, 0xb3, 0x77, 0xad, 0xd0, 0xf1, 0x89, 0xe5, 0xa0, 0xb0, + 0xff, 0x00, 0x64, 0x95, 0xa5, 0x1a, 0xa4, 0xa4, 0x57, 0x5c, 0xda, 0x2b, + 0xde, 0x79, 0x3a, 0x34, 0x78, 0x95, 0x97, 0x7f, 0x51, 0xbe, 0x41, 0x75, + 0xbb, 0x3b, 0xed, 0x6e, 0x8a, 0x7d, 0x5a, 0xf2, 0x2e, 0x6d, 0x60, 0xfd, + 0x11, 0xaf, 0x6d, 0x4f, 0xe0, 0xb0, 0x32, 0x1e, 0x66, 0x27, 0x8f, 0x34, + 0x94, 0xeb, 0x7e, 0xdf, 0xb2, 0xb3, 0xa3, 0xc3, 0x80, 0xe7, 0x76, 0xbf, + 0x74, 0x42, 0xd1, 0xc1, 0xea, 0xb4, 0x67, 0x7b, 0x07, 0xb2, 0xd8, 0x9d, + 0xbd, 0x9d, 0x1c, 0xc2, 0xe2, 0x6e, 0x16, 0x13, 0x22, 0x49, 0xf0, 0xd5, + 0x5a, 0xe8, 0xb6, 0x39, 0xbd, 0x53, 0x17, 0x69, 0xd4, 0xd8, 0x01, 0x8f, + 0x03, 0xa1, 0xed, 0xe0, 0x92, 0x9e, 0xd9, 0xc0, 0xa8, 0x23, 0xb9, 0x88, + 0x65, 0xa9, 0x29, 0x82, 0x70, 0x42, 0x72, 0x13, 0x42, 0x4a, 0x54, 0xa4, + 0x0a, 0x50, 0x94, 0x24, 0xa5, 0x4a, 0x49, 0x41, 0x4c, 0x92, 0x99, 0x27, + 0x51, 0x49, 0x25, 0x32, 0x4b, 0x40, 0x99, 0x32, 0x4a, 0x5e, 0x53, 0xee, + 0x51, 0x49, 0x25, 0x2e, 0x92, 0x64, 0x92, 0x53, 0x30, 0x9e, 0x54, 0x25, + 0x29, 0x49, 0x4c, 0xb9, 0x49, 0x46, 0x52, 0xd5, 0x25, 0x23, 0xc8, 0x7b, + 0x59, 0x5c, 0xb8, 0xc6, 0xa0, 0x7d, 0xe6, 0x16, 0x56, 0x40, 0xda, 0xed, + 0xdd, 0xda, 0x7f, 0x05, 0x67, 0xad, 0x63, 0xbe, 0xcc, 0x41, 0x65, 0x2d, + 0x9b, 0x69, 0x7b, 0x6c, 0x1a, 0xc7, 0xd1, 0xec, 0xab, 0x64, 0x3a, 0x1d, + 0xee, 0xee, 0x92, 0x9c, 0xfc, 0xc9, 0xae, 0xcf, 0x50, 0x76, 0x21, 0xc3, + 0xc0, 0xf7, 0x57, 0x45, 0xaf, 0xf4, 0x49, 0x27, 0x73, 0x8b, 0x01, 0x71, + 0xfe, 0x53, 0x95, 0x6b, 0x98, 0x5f, 0x59, 0x67, 0x71, 0xc7, 0xc1, 0x59, + 0x0f, 0x63, 0x70, 0x59, 0x69, 0xd3, 0x7c, 0x0d, 0xa7, 0xb6, 0xdd, 0x12, + 0x53, 0x55, 0xad, 0xda, 0x35, 0xe4, 0xa7, 0x7e, 0x80, 0x0e, 0xe9, 0x52, + 0x1d, 0x75, 0xde, 0x43, 0x55, 0x2b, 0x75, 0xb3, 0x4e, 0x02, 0x4a, 0x48, + 0xdf, 0xa3, 0x0b, 0x85, 0xeb, 0x8e, 0x75, 0xb9, 0xb5, 0x54, 0x01, 0x89, + 0xd0, 0x0e, 0x4b, 0x89, 0x85, 0xde, 0x56, 0xdf, 0x1f, 0x05, 0xc0, 0xf5, + 0x77, 0x13, 0x9c, 0x48, 0x70, 0x69, 0xab, 0x51, 0x33, 0x24, 0xcc, 0xe9, + 0x09, 0x29, 0xf4, 0xef, 0xab, 0x74, 0xdb, 0x4f, 0x48, 0xa5, 0x97, 0x1d, + 0xd6, 0x0f, 0xa4, 0xef, 0x12, 0x34, 0x5a, 0x0e, 0x54, 0xfa, 0x0d, 0xc3, + 0x23, 0xa5, 0x53, 0x78, 0xe2, 0xc1, 0xb8, 0x7c, 0xc2, 0xb8, 0xe4, 0x94, + 0xb0, 0x58, 0xdf, 0x5c, 0xa8, 0x37, 0x74, 0x1b, 0x1c, 0x39, 0xa5, 0xec, + 0x7f, 0xe3, 0xb7, 0xfe, 0xfc, 0xb6, 0x42, 0xad, 0xd6, 0x6a, 0xf5, 0xfa, + 0x3e, 0x65, 0x71, 0x33, 0x53, 0x88, 0x1f, 0xd5, 0x1b, 0xbf, 0x82, 0x4a, + 0x72, 0x7e, 0xa5, 0x65, 0x30, 0x74, 0x9b, 0x19, 0x63, 0x83, 0x45, 0x76, + 0x4e, 0xbe, 0x0e, 0x01, 0x6c, 0x59, 0x9f, 0x5b, 0x67, 0x63, 0x49, 0xf3, + 0x77, 0xb4, 0x2e, 0x3b, 0xea, 0xb5, 0x8e, 0x1e, 0xbb, 0x00, 0x71, 0x00, + 0x07, 0x10, 0xd0, 0x49, 0x03, 0xc6, 0x07, 0xc5, 0x6f, 0x7a, 0xcd, 0x7c, + 0x6c, 0x1b, 0x92, 0x52, 0x3c, 0xa3, 0xeb, 0x58, 0xeb, 0x5a, 0xe8, 0x7b, + 0x8c, 0xeb, 0xc7, 0x87, 0xc1, 0x65, 0xe4, 0xd7, 0x76, 0xe2, 0xed, 0x84, + 0xb7, 0xb9, 0x1a, 0xfe, 0x49, 0x5b, 0x24, 0x9e, 0xe2, 0x38, 0x98, 0x08, + 0x45, 0x81, 0xc7, 0x51, 0x23, 0x90, 0x7c, 0xc2, 0x4a, 0x79, 0xe7, 0xb9, + 0xb1, 0xe1, 0xe6, 0x79, 0x94, 0x6c, 0x2a, 0xf6, 0xe7, 0xd4, 0x2c, 0x9a, + 0xdc, 0x1c, 0x26, 0x66, 0x46, 0x8b, 0x6e, 0xdc, 0x13, 0x64, 0x16, 0xd8, + 0xe0, 0x5b, 0x04, 0x1e, 0x47, 0xe3, 0x2a, 0xb5, 0xfd, 0x3e, 0x1c, 0x5d, + 0xef, 0xad, 0xe4, 0xe8, 0xed, 0xa0, 0x8d, 0x7c, 0xf5, 0xd3, 0xcd, 0x25, + 0x37, 0xc5, 0x99, 0x0c, 0xd5, 0x97, 0x3d, 0xbd, 0xfe, 0x94, 0x89, 0xf8, + 0x19, 0x57, 0x70, 0x73, 0x2c, 0xbd, 0xc6, 0xab, 0x80, 0xde, 0x06, 0xe6, + 0xbc, 0x69, 0xb8, 0x77, 0x91, 0xe2, 0xb9, 0xcb, 0x7a, 0x86, 0x17, 0x4c, + 0x11, 0x93, 0x96, 0xd2, 0x7f, 0xd1, 0x30, 0xfa, 0x8f, 0x3f, 0xe6, 0xf0, + 0xb6, 0x3a, 0x2f, 0x52, 0xe8, 0xd9, 0x36, 0x4d, 0x19, 0x95, 0xd9, 0x7b, + 0x84, 0x0a, 0xf5, 0x61, 0x00, 0xf8, 0x07, 0x80, 0x49, 0x49, 0x4e, 0xb1, + 0x0a, 0x30, 0x8c, 0x5a, 0xa0, 0x5a, 0x52, 0x53, 0x08, 0x4f, 0x09, 0xd3, + 0x24, 0xa5, 0xd3, 0x68, 0x94, 0xa6, 0x49, 0x4a, 0x84, 0xf1, 0x09, 0x4a, + 0x52, 0x92, 0x95, 0x05, 0x36, 0xa9, 0xc1, 0xd1, 0x3a, 0x4a, 0x60, 0x53, + 0x22, 0x26, 0xdb, 0xaa, 0x4a, 0x62, 0x92, 0x49, 0x24, 0xa5, 0xd2, 0x4c, + 0x92, 0x4a, 0x5d, 0x20, 0x92, 0x41, 0x25, 0x21, 0xce, 0xfe, 0x87, 0x6f, + 0x9b, 0x60, 0x7c, 0x4e, 0x81, 0x53, 0x75, 0x2d, 0xbe, 0xbe, 0x7d, 0xc3, + 0x43, 0xf1, 0x47, 0xeb, 0x06, 0xc6, 0x74, 0xeb, 0x5e, 0xc9, 0xdc, 0xd8, + 0x20, 0x01, 0x32, 0x67, 0x82, 0xab, 0x55, 0x97, 0x82, 0x05, 0x75, 0x32, + 0xf1, 0xf6, 0x82, 0xc0, 0xf2, 0xc3, 0xa1, 0x23, 0x49, 0x10, 0x92, 0x9a, + 0xcf, 0xc7, 0x7b, 0x48, 0x69, 0xe6, 0x61, 0xa7, 0xc4, 0x78, 0x28, 0xdd, + 0x83, 0xbc, 0x87, 0x39, 0xc7, 0x68, 0xd1, 0x95, 0x8f, 0x05, 0x78, 0xdf, + 0x4d, 0xbc, 0x1f, 0x73, 0x4c, 0xc1, 0xe7, 0x45, 0x9d, 0x76, 0x76, 0x5b, + 0xee, 0x2d, 0xa6, 0xb3, 0xa6, 0x80, 0xa4, 0xa4, 0x9b, 0x59, 0x89, 0x51, + 0x04, 0xfe, 0x9a, 0xcf, 0xcd, 0xf0, 0x08, 0x0d, 0x92, 0xed, 0x79, 0xee, + 0xa7, 0xe9, 0x0c, 0x76, 0x1c, 0x8c, 0xb7, 0x4d, 0xce, 0xfa, 0x0c, 0x28, + 0x55, 0x17, 0x18, 0x3d, 0xdd, 0xa9, 0x49, 0x4d, 0x96, 0x7d, 0x28, 0xd5, + 0x71, 0x79, 0xb8, 0x0d, 0xcf, 0xeb, 0x2d, 0xc5, 0x2e, 0x35, 0xfb, 0x1c, + 0xe7, 0x38, 0x09, 0x30, 0x0a, 0xec, 0xaa, 0x71, 0xdd, 0x3a, 0x72, 0xb9, + 0xac, 0x36, 0x97, 0xfd, 0x65, 0xc9, 0xd3, 0x56, 0x30, 0x37, 0xe6, 0xe7, + 0x24, 0xa7, 0x77, 0xea, 0x8e, 0x6e, 0x66, 0x06, 0x63, 0xfe, 0xae, 0xe7, + 0x99, 0x0d, 0x67, 0xab, 0x84, 0xf2, 0x20, 0xba, 0xb3, 0xaa, 0xea, 0xdc, + 0xb9, 0xef, 0xac, 0xf8, 0xa7, 0x11, 0xdd, 0x3b, 0xae, 0x52, 0x3d, 0xdd, + 0x35, 0xed, 0x65, 0xe0, 0x72, 0x68, 0x7c, 0x34, 0xfd, 0xc5, 0x6f, 0xb2, + 0xea, 0xef, 0xa9, 0x97, 0x54, 0xed, 0xd5, 0xd8, 0xd0, 0xe6, 0x3b, 0xc4, + 0x11, 0x21, 0x25, 0x2e, 0x9d, 0xcc, 0x16, 0x54, 0xfa, 0xcf, 0x0f, 0x69, + 0x69, 0xf9, 0x88, 0x51, 0x95, 0x36, 0x14, 0x94, 0xf0, 0xbf, 0x54, 0x5e, + 0x68, 0xeb, 0x9e, 0x89, 0xd3, 0x78, 0x7b, 0x0f, 0xc4, 0x7f, 0xe7, 0x2b, + 0xb7, 0xbf, 0x1b, 0x1a, 0xef, 0xe7, 0x6a, 0x6b, 0xfc, 0xc8, 0x13, 0xf7, + 0xae, 0x12, 0xa3, 0xf6, 0x3f, 0xad, 0x64, 0x70, 0x1b, 0x94, 0x47, 0xc9, + 0xce, 0xfe, 0xe7, 0x2e, 0xfd, 0xe5, 0x25, 0x34, 0xad, 0xe9, 0x18, 0x76, + 0xd6, 0xf6, 0x30, 0x3a, 0xa7, 0xbd, 0xa5, 0xad, 0xb1, 0xaf, 0x77, 0xb4, + 0xf6, 0x20, 0x13, 0x1a, 0x2f, 0x30, 0xce, 0xea, 0x7f, 0x5a, 0x3a, 0x6e, + 0x4b, 0xb1, 0x72, 0xef, 0xba, 0xb7, 0xb4, 0x90, 0xdd, 0xcd, 0x03, 0x7c, + 0x69, 0xb9, 0xba, 0x6a, 0x0a, 0xf5, 0x90, 0xe5, 0x22, 0xca, 0xac, 0x2d, + 0x2f, 0x63, 0x5e, 0x58, 0x65, 0xa5, 0xc0, 0x18, 0x3e, 0x52, 0x92, 0x9f, + 0x2b, 0xb9, 0x9f, 0x5c, 0xc7, 0x4d, 0xfd, 0xa7, 0x7d, 0x97, 0xd7, 0x86, + 0x34, 0x24, 0x9d, 0x8e, 0x0d, 0xec, 0xe2, 0xcd, 0x0e, 0xdf, 0x35, 0x8c, + 0xeb, 0xf3, 0x2f, 0x33, 0x75, 0xf6, 0x59, 0xfd, 0x67, 0x93, 0xf9, 0x4a, + 0xf4, 0x9f, 0xf1, 0x85, 0x79, 0x67, 0x44, 0x65, 0x00, 0x90, 0x2f, 0xb9, + 0xa1, 0xdf, 0xd5, 0x60, 0x2f, 0xfc, 0xa0, 0x2f, 0x3c, 0xaa, 0xa9, 0x03, + 0xc1, 0x25, 0x22, 0x65, 0x5d, 0xbf, 0x14, 0x66, 0xd6, 0xe6, 0x10, 0x44, + 0x82, 0x35, 0x04, 0x78, 0xa3, 0x0a, 0xc0, 0x45, 0x6b, 0x7d, 0xb0, 0x52, + 0x53, 0xad, 0xd2, 0xfe, 0xb4, 0xf5, 0x3c, 0x28, 0x76, 0xf7, 0x64, 0x56, + 0xcf, 0xe7, 0x31, 0xde, 0x64, 0x16, 0xf8, 0xb0, 0x9d, 0x41, 0x5d, 0xbf, + 0x4a, 0xeb, 0xdd, 0x3b, 0xab, 0xb0, 0x7d, 0x9d, 0xf1, 0x6c, 0x49, 0xa5, + 0xda, 0x3c, 0x79, 0x8f, 0x10, 0xbc, 0xcd, 0xad, 0xda, 0x64, 0x68, 0x46, + 0xb2, 0xab, 0xbe, 0xdb, 0xb1, 0x72, 0xc3, 0xe9, 0x71, 0xad, 0xc0, 0xfa, + 0x95, 0xb9, 0xa6, 0x08, 0x3d, 0xe2, 0x12, 0x53, 0xec, 0x6e, 0x62, 0x19, + 0x0b, 0x8d, 0xe8, 0x7f, 0x5f, 0x1c, 0x0b, 0x71, 0xfa, 0xb0, 0xdc, 0xde, + 0x06, 0x4b, 0x46, 0xa3, 0xfa, 0xed, 0x1c, 0xfc, 0x97, 0x6b, 0x5d, 0x94, + 0xe4, 0x54, 0xdb, 0xa9, 0x78, 0xb2, 0xb7, 0x89, 0x6b, 0xda, 0x64, 0x10, + 0x92, 0x91, 0xc2, 0x4a, 0x45, 0xb0, 0xa2, 0x92, 0x96, 0x49, 0x4a, 0x13, + 0xc2, 0x4a, 0x62, 0x94, 0xa7, 0x21, 0x34, 0x24, 0xa5, 0x4a, 0x52, 0x9a, + 0x12, 0x49, 0x4a, 0x49, 0x34, 0xa4, 0x92, 0x97, 0x49, 0x24, 0x92, 0x52, + 0xea, 0x4d, 0x0a, 0x21, 0x0f, 0x32, 0xff, 0x00, 0xb3, 0x61, 0x5f, 0x90, + 0x0c, 0x1a, 0xeb, 0x73, 0x9a, 0x62, 0x7d, 0xd1, 0xed, 0xd3, 0xbe, 0xa9, + 0x29, 0xc9, 0xeb, 0x19, 0x37, 0xe6, 0x5a, 0xfe, 0x9f, 0x59, 0x34, 0x62, + 0xd4, 0xe6, 0x9b, 0xef, 0x04, 0xb5, 0xef, 0x8f, 0x76, 0xc6, 0x7c, 0xcf, + 0x2b, 0x97, 0xb0, 0x65, 0xdd, 0x75, 0x99, 0x4c, 0x02, 0xca, 0xc7, 0xe8, + 0xf5, 0x97, 0x3e, 0x1a, 0x79, 0x1a, 0x83, 0x0b, 0x63, 0x75, 0xcd, 0xa2, + 0x9a, 0xf2, 0xac, 0x36, 0x5e, 0x5a, 0x5d, 0x75, 0x87, 0x92, 0xe8, 0x97, + 0x7e, 0x25, 0x50, 0xb3, 0x1a, 0xbf, 0x45, 0xee, 0xc7, 0x26, 0xb7, 0x36, + 0x1c, 0x20, 0xf2, 0x3b, 0xa4, 0xa6, 0xa6, 0xec, 0xfa, 0xcf, 0xab, 0x8f, + 0x64, 0xf7, 0xda, 0x5c, 0x4f, 0xe0, 0xf1, 0xfc, 0x56, 0xc7, 0x49, 0xea, + 0x99, 0x99, 0x18, 0xee, 0x7d, 0x9b, 0x69, 0x7d, 0x0e, 0x8b, 0x5a, 0x47, + 0x2d, 0x89, 0xdc, 0x35, 0x2b, 0x3b, 0x6d, 0xbb, 0x3f, 0x48, 0x45, 0x9d, + 0xc1, 0x3e, 0xd7, 0x7d, 0xe8, 0x7d, 0x2e, 0xca, 0x5f, 0xd4, 0x2d, 0xc7, + 0xc9, 0xdd, 0x4b, 0x6c, 0xac, 0x86, 0x39, 0xc7, 0x70, 0xdc, 0x0a, 0x4a, + 0x74, 0x98, 0xfb, 0x32, 0x5c, 0x2e, 0xb4, 0x97, 0x3a, 0xc3, 0xed, 0x1e, + 0x01, 0x5c, 0x6b, 0x7d, 0xce, 0xda, 0x34, 0x68, 0xda, 0x10, 0x69, 0x76, + 0x3b, 0x5f, 0xb6, 0xb9, 0x79, 0x60, 0xda, 0xd9, 0x10, 0x20, 0x77, 0x56, + 0x41, 0x76, 0xd8, 0x90, 0x01, 0xfb, 0x92, 0x53, 0x0a, 0xdb, 0x06, 0x09, + 0x93, 0xe0, 0x35, 0x59, 0xfd, 0x37, 0x01, 0xcc, 0xfa, 0xcf, 0x92, 0xe3, + 0xf4, 0x2d, 0x35, 0x3d, 0xba, 0xcf, 0xb6, 0x09, 0x23, 0xef, 0x6a, 0xd4, + 0x6b, 0x63, 0x40, 0x89, 0x43, 0x5e, 0xcc, 0xec, 0x6b, 0x1a, 0xcd, 0xc1, + 0xce, 0x35, 0xbe, 0x4c, 0x10, 0xd7, 0x0f, 0xa5, 0xe7, 0x05, 0x25, 0x3a, + 0x9d, 0x53, 0x0f, 0xf6, 0x8f, 0x4e, 0xbf, 0x0b, 0x7f, 0xa7, 0xeb, 0xb7, + 0x6e, 0xf8, 0x98, 0xd6, 0x78, 0x53, 0xc6, 0xc7, 0x66, 0x2e, 0x2d, 0x38, + 0xb5, 0xc9, 0x65, 0x2c, 0x6d, 0x6d, 0x27, 0x98, 0x68, 0x84, 0x65, 0x12, + 0x92, 0x94, 0xa6, 0xd4, 0x35, 0x36, 0xa4, 0xa7, 0x84, 0xfa, 0xca, 0xcf, + 0xb3, 0xfd, 0x62, 0xb2, 0xc1, 0xa6, 0xef, 0x4e, 0xc1, 0xf1, 0x80, 0x3f, + 0x82, 0xef, 0x03, 0x83, 0xd8, 0xd7, 0x8e, 0x1c, 0x01, 0xfb, 0xc4, 0xae, + 0x3b, 0xeb, 0xbd, 0x7b, 0x3a, 0x86, 0x3d, 0xa0, 0x7d, 0x3a, 0xa0, 0x9f, + 0x36, 0xbb, 0xfd, 0xab, 0xa8, 0xe9, 0x56, 0xfa, 0xdd, 0x2f, 0x16, 0xce, + 0x66, 0xa6, 0x83, 0xf2, 0x1b, 0x7f, 0x82, 0x4a, 0x4c, 0x54, 0xd8, 0x54, + 0x0a, 0x9b, 0x39, 0x49, 0x4f, 0x1b, 0xfe, 0x31, 0x32, 0x25, 0xd8, 0x78, + 0x9b, 0x84, 0x00, 0xeb, 0x5c, 0xd8, 0xef, 0xf4, 0x5a, 0x67, 0xef, 0x5c, + 0x95, 0x50, 0x42, 0xdd, 0xff, 0x00, 0x18, 0x61, 0xed, 0xeb, 0x74, 0x13, + 0xf4, 0x5f, 0x8e, 0xdd, 0xbf, 0x10, 0xe7, 0x82, 0xb0, 0xea, 0x6c, 0x80, + 0x92, 0x93, 0x34, 0x0e, 0xff, 0x00, 0x7a, 0x8b, 0x5e, 0x1f, 0x0e, 0x02, + 0x07, 0x65, 0x00, 0xf2, 0xc7, 0x16, 0x1e, 0x1d, 0x25, 0xa5, 0x45, 0xa6, + 0x18, 0x3c, 0x52, 0x53, 0x60, 0x38, 0x48, 0x6c, 0xcc, 0xf2, 0x81, 0x9b, + 0x56, 0xfa, 0x1b, 0x60, 0xfa, 0x55, 0x98, 0x3f, 0x02, 0xa4, 0xd8, 0x10, + 0x3b, 0x9e, 0xe8, 0xd5, 0x80, 0xff, 0x00, 0x52, 0xa3, 0xc3, 0xc2, 0x4a, + 0x72, 0x76, 0x8e, 0x65, 0x6d, 0xfd, 0x5d, 0xfa, 0xcf, 0x95, 0xd1, 0x6e, + 0x0c, 0x24, 0xdb, 0x84, 0xe3, 0x36, 0xd3, 0xe1, 0xe2, 0xe6, 0x78, 0x1f, + 0xca, 0xb2, 0xbd, 0x32, 0x67, 0x76, 0x84, 0x72, 0x84, 0xf0, 0x1b, 0xc1, + 0xd4, 0x24, 0xa7, 0xda, 0xea, 0xba, 0xac, 0x9a, 0x19, 0x91, 0x43, 0x83, + 0xea, 0xb5, 0xa1, 0xec, 0x70, 0xe0, 0xb5, 0xc2, 0x41, 0x51, 0x21, 0x73, + 0x5f, 0xe2, 0xf3, 0x39, 0xd9, 0x1d, 0x26, 0xec, 0x37, 0x99, 0xfb, 0x1d, + 0x90, 0xc9, 0xec, 0xcb, 0x06, 0xf0, 0x3e, 0x46, 0x57, 0x4e, 0xe1, 0x05, + 0x25, 0x2d, 0x10, 0x94, 0xa6, 0x49, 0x25, 0x2f, 0x2a, 0x25, 0x29, 0x48, + 0xa4, 0xa5, 0x24, 0x92, 0x49, 0x29, 0x8a, 0x49, 0x93, 0xa4, 0xa5, 0x27, + 0x4c, 0x9c, 0x24, 0xa5, 0xc2, 0xce, 0xeb, 0x99, 0xcc, 0xc7, 0xa8, 0x54, + 0x78, 0x8d, 0xef, 0x81, 0x27, 0x9f, 0x68, 0x81, 0xe2, 0x56, 0x9b, 0x02, + 0xe6, 0x3a, 0xce, 0x49, 0x75, 0x97, 0x3d, 0x80, 0x39, 0xce, 0x78, 0xad, + 0xb2, 0x24, 0x47, 0x09, 0x29, 0xa3, 0xf6, 0xba, 0xae, 0x78, 0xf7, 0x82, + 0xe8, 0x20, 0x35, 0xc0, 0xb1, 0xda, 0xf3, 0xa3, 0xa1, 0x2b, 0x0b, 0x5a, + 0xdd, 0x83, 0xda, 0xc0, 0x34, 0x94, 0x53, 0xd5, 0xb1, 0x76, 0x59, 0x8f, + 0x95, 0x88, 0xcb, 0x69, 0x1a, 0x6e, 0x02, 0x1d, 0xba, 0x20, 0xb9, 0xae, + 0x33, 0xaa, 0xca, 0xa7, 0x32, 0xaa, 0xf7, 0xb5, 0xa5, 0xcf, 0x61, 0xd1, + 0xad, 0x07, 0x51, 0xf1, 0x07, 0x44, 0x94, 0xd8, 0xb2, 0x96, 0x8a, 0xcb, + 0xb7, 0x6e, 0x68, 0x88, 0x50, 0x03, 0xd1, 0x6d, 0x57, 0x96, 0x86, 0xb0, + 0x38, 0x13, 0xdc, 0xba, 0x0a, 0x2d, 0x6f, 0x0e, 0xa7, 0x75, 0xac, 0x86, + 0x03, 0x31, 0xc0, 0x3e, 0x65, 0x57, 0xcd, 0x6d, 0xb7, 0xbd, 0xbb, 0xac, + 0x0d, 0xad, 0xba, 0xb4, 0x0e, 0x07, 0x60, 0x92, 0x9d, 0xa1, 0xf4, 0x43, + 0x9b, 0x1e, 0xef, 0x74, 0x8f, 0x3d, 0x55, 0x8a, 0x8e, 0xe1, 0x1d, 0xc2, + 0xe7, 0x6d, 0xea, 0xd9, 0x18, 0x58, 0xf5, 0x51, 0x53, 0x05, 0xaf, 0x68, + 0x23, 0xd4, 0xb0, 0x9e, 0x07, 0x1a, 0x0e, 0x56, 0x7b, 0xfa, 0xf7, 0x58, + 0x74, 0xc5, 0xa2, 0xa0, 0x7f, 0xd1, 0xb4, 0x03, 0xf7, 0x99, 0x29, 0x29, + 0xed, 0xb6, 0xdb, 0x12, 0x5e, 0x58, 0xc1, 0xcb, 0x89, 0x0d, 0x0b, 0x2b, + 0x37, 0xeb, 0x5e, 0x07, 0x4e, 0x24, 0x62, 0x7e, 0xb9, 0x92, 0xcd, 0x4c, + 0x1f, 0x60, 0x83, 0xdd, 0xdd, 0xfe, 0x4b, 0x94, 0xb2, 0xdc, 0x9c, 0x83, + 0xbb, 0x22, 0xd7, 0xdb, 0xfd, 0x77, 0x17, 0x7e, 0x09, 0x51, 0x81, 0xf6, + 0xbe, 0xa7, 0x8b, 0x82, 0xc3, 0xb7, 0xed, 0x56, 0x31, 0xa6, 0x3b, 0x36, + 0x65, 0xc7, 0xee, 0x49, 0x4f, 0xad, 0x51, 0x73, 0x32, 0x71, 0xaa, 0xc9, + 0x60, 0x21, 0x97, 0x31, 0xb6, 0x34, 0x1e, 0x40, 0x70, 0x9d, 0x53, 0x95, + 0x3d, 0x8d, 0xae, 0xb6, 0xd6, 0xc1, 0x0c, 0x60, 0x0d, 0x68, 0xf0, 0x00, + 0x40, 0x43, 0x29, 0x29, 0x4a, 0x4d, 0x51, 0x52, 0x6a, 0x4a, 0x79, 0xaf, + 0xaf, 0x55, 0x4e, 0x36, 0x25, 0xc0, 0x7d, 0x17, 0xb9, 0x87, 0xfb, 0x40, + 0x1f, 0xe0, 0xb4, 0x3e, 0xaa, 0x5d, 0xea, 0xf4, 0x4a, 0xc1, 0x32, 0x6b, + 0x73, 0x99, 0xf8, 0xee, 0xfe, 0x28, 0x7f, 0x5c, 0xaa, 0x2f, 0xe8, 0x6e, + 0x78, 0xe6, 0xab, 0x18, 0xff, 0x00, 0xc7, 0x6f, 0xf1, 0x55, 0x7e, 0xa3, + 0x5b, 0xbb, 0x0b, 0x22, 0xa3, 0xf9, 0xaf, 0x6b, 0x87, 0xf6, 0x84, 0x7f, + 0x04, 0x94, 0xf4, 0x45, 0x3b, 0x0e, 0xa9, 0x3b, 0x94, 0xc1, 0x25, 0x3c, + 0xa7, 0xf8, 0xc5, 0xc1, 0x75, 0x98, 0xd8, 0x9d, 0x41, 0x82, 0x45, 0x0e, + 0x35, 0x5a, 0x7c, 0x1b, 0x64, 0x16, 0x9f, 0xbd, 0xbf, 0x8a, 0xe3, 0x69, + 0x72, 0xf5, 0x4e, 0xbb, 0x8b, 0xf6, 0xde, 0x89, 0x9b, 0x8f, 0x30, 0x5d, + 0x53, 0x8b, 0x4f, 0x9b, 0x3d, 0xe3, 0xf1, 0x0b, 0xc9, 0xa8, 0x76, 0x89, + 0x29, 0x2d, 0xed, 0x24, 0x07, 0x0e, 0x5b, 0xaf, 0xc9, 0x35, 0x47, 0x70, + 0x12, 0x51, 0x58, 0x41, 0xd1, 0xdc, 0x1e, 0xe8, 0x00, 0xba, 0xa2, 0xe6, + 0x11, 0x07, 0xb7, 0xc1, 0x25, 0x26, 0x99, 0xb0, 0x22, 0x31, 0xd0, 0xf6, + 0xb8, 0x72, 0x0e, 0xa1, 0x06, 0xb0, 0x5a, 0x0d, 0x8e, 0xd4, 0xf0, 0xd1, + 0xe6, 0xa7, 0x5b, 0x76, 0x02, 0xf7, 0x7d, 0xe9, 0x29, 0x16, 0x75, 0x45, + 0x97, 0x97, 0xb6, 0x76, 0x59, 0xa8, 0x3d, 0xa7, 0xb8, 0x55, 0x1e, 0x74, + 0xd7, 0x45, 0xd7, 0x7d, 0x5a, 0x66, 0x2e, 0x73, 0xaf, 0xe9, 0x59, 0xad, + 0x0f, 0xab, 0x31, 0x84, 0xd4, 0x4f, 0xe6, 0xd8, 0xc1, 0x2d, 0x73, 0x4f, + 0x67, 0x41, 0x2b, 0x98, 0xcf, 0xc1, 0xea, 0x38, 0x03, 0x6e, 0x5e, 0x25, + 0x95, 0x41, 0x20, 0x5a, 0xf6, 0x96, 0x87, 0x76, 0xf8, 0x76, 0x49, 0x4f, + 0x51, 0xfe, 0x2d, 0x33, 0x76, 0xe7, 0x66, 0xe1, 0x46, 0x96, 0xd6, 0xdb, + 0x43, 0xbb, 0xcd, 0x67, 0x6c, 0x7f, 0xd3, 0x5d, 0xf3, 0xc2, 0xe1, 0x7f, + 0xc5, 0x8e, 0x1b, 0x4b, 0xb3, 0xb3, 0x9e, 0xdf, 0xd2, 0x0d, 0x95, 0x31, + 0xdf, 0xc9, 0x32, 0xe7, 0x7e, 0x40, 0xbb, 0x8c, 0x9b, 0xea, 0xa1, 0x86, + 0xcb, 0x5c, 0x1a, 0x02, 0x4a, 0x59, 0x32, 0xcf, 0xe9, 0x9d, 0x61, 0xbd, + 0x4a, 0xeb, 0xd9, 0x55, 0x67, 0xd1, 0xa6, 0x22, 0xef, 0xcd, 0x73, 0x89, + 0xfa, 0x21, 0x68, 0x24, 0xa5, 0x24, 0x99, 0x24, 0x94, 0xa4, 0xe9, 0x92, + 0x49, 0x4b, 0x76, 0x4c, 0x0c, 0xa8, 0x9b, 0xa9, 0x23, 0x6e, 0xf1, 0x3f, + 0x14, 0x98, 0xfa, 0xe3, 0xe9, 0x08, 0x49, 0x4c, 0xd3, 0x85, 0x10, 0xf6, + 0x13, 0xf4, 0x82, 0x96, 0xe6, 0x78, 0x84, 0x94, 0xcc, 0x68, 0x09, 0xf0, + 0x04, 0xae, 0x33, 0x2a, 0xc2, 0x69, 0xdf, 0xba, 0x09, 0x79, 0x31, 0xde, + 0x40, 0xf1, 0xec, 0xbb, 0x36, 0x59, 0x59, 0x1c, 0x88, 0x3a, 0x2e, 0x23, + 0xa9, 0xdb, 0x5e, 0x1f, 0xa9, 0x55, 0x8c, 0x0f, 0x2d, 0xb5, 0xdb, 0x09, + 0x71, 0x11, 0x1a, 0x70, 0x39, 0x49, 0x4e, 0x7d, 0x8f, 0xc8, 0xb4, 0x6a, + 0xdd, 0xad, 0x6f, 0x10, 0x9e, 0xac, 0x3a, 0x9c, 0x43, 0xcc, 0x47, 0x73, + 0xdd, 0x26, 0xe5, 0x97, 0xb7, 0x51, 0x0d, 0xf0, 0x52, 0xa9, 0xc4, 0xbb, + 0x6b, 0x78, 0x72, 0x4a, 0x6e, 0x3e, 0xe6, 0x7a, 0x6f, 0x80, 0x03, 0x22, + 0x1d, 0x2b, 0x26, 0xb7, 0x06, 0x17, 0xd6, 0xf2, 0x00, 0x66, 0xac, 0x93, + 0xda, 0x78, 0x56, 0x6f, 0x7e, 0xca, 0xcd, 0x7e, 0xd0, 0x4f, 0x24, 0xea, + 0xa9, 0x38, 0x87, 0x16, 0x8b, 0x9a, 0x1c, 0x38, 0xdc, 0xc4, 0x94, 0x8f, + 0x34, 0xfa, 0x95, 0x92, 0xc7, 0x10, 0xe6, 0x90, 0xe8, 0x07, 0x48, 0x1e, + 0x28, 0x61, 0xa1, 0xcd, 0x0e, 0xf1, 0xe7, 0xe2, 0x8d, 0x90, 0xc6, 0x7a, + 0x60, 0xd6, 0xe9, 0x67, 0xe7, 0x78, 0xc7, 0x64, 0x0a, 0x2d, 0x69, 0xb8, + 0xd6, 0x7e, 0x8b, 0xc4, 0x37, 0xfa, 0xc1, 0x25, 0x28, 0x8d, 0xa7, 0xc9, + 0x6e, 0x7d, 0x4b, 0xc5, 0x66, 0x47, 0x5d, 0xae, 0xf7, 0xea, 0x71, 0xaa, + 0x7b, 0x9b, 0x3e, 0x2e, 0x86, 0x83, 0xf8, 0x95, 0x8f, 0x73, 0x63, 0x80, + 0xac, 0x74, 0x4c, 0xe3, 0x83, 0xd5, 0x71, 0x72, 0x09, 0x2d, 0x68, 0xb0, + 0x36, 0xc2, 0x3f, 0x71, 0xde, 0xd7, 0x7e, 0x54, 0x94, 0xfa, 0x8d, 0x88, + 0x45, 0x4a, 0xfb, 0x36, 0x34, 0xb8, 0x89, 0x85, 0x00, 0xe0, 0xf6, 0x87, + 0x0e, 0xfa, 0xa4, 0xa5, 0xd3, 0x8e, 0x50, 0xdc, 0xed, 0x01, 0x53, 0x6c, + 0xe8, 0x92, 0x9a, 0x9d, 0x7e, 0xaf, 0x5b, 0xa2, 0x66, 0x30, 0x6a, 0x45, + 0x65, 0xc3, 0xfb, 0x3e, 0xef, 0xe0, 0xb9, 0xcf, 0xa8, 0x97, 0x01, 0x93, + 0x7d, 0x33, 0xf4, 0xeb, 0x91, 0xf1, 0x69, 0xff, 0x00, 0x6a, 0xeb, 0xee, + 0xac, 0x5d, 0x8f, 0x6d, 0x5d, 0x9e, 0xc7, 0x37, 0xef, 0x04, 0x2e, 0x0b, + 0xea, 0x7d, 0x86, 0x9e, 0xb2, 0xc6, 0x3b, 0xf3, 0xb7, 0x30, 0xfc, 0xc1, + 0xfe, 0x29, 0x29, 0xef, 0x9c, 0x13, 0x04, 0x47, 0x05, 0x08, 0x49, 0x4c, + 0xc3, 0x43, 0xd8, 0x58, 0xed, 0x43, 0x81, 0x07, 0xe0, 0x57, 0x8d, 0x59, + 0x5b, 0xa8, 0xc9, 0xb6, 0x87, 0x68, 0x6b, 0x7b, 0x98, 0x47, 0xf5, 0x49, + 0x6f, 0xf0, 0x5e, 0xcc, 0xc5, 0xe5, 0xdf, 0x5b, 0x31, 0x7e, 0xcb, 0xf5, + 0x8f, 0x2d, 0xad, 0xfa, 0x36, 0xed, 0xb8, 0x47, 0x6f, 0x50, 0x49, 0xfc, + 0x65, 0x25, 0x39, 0xed, 0x3a, 0x26, 0xb4, 0xb7, 0x7b, 0x1c, 0xe3, 0x12, + 0x23, 0xee, 0x48, 0x03, 0x12, 0x14, 0x6c, 0x7b, 0x40, 0x6e, 0xee, 0xce, + 0x12, 0x92, 0x99, 0x9b, 0x5e, 0x08, 0x0d, 0x64, 0x8f, 0xcd, 0x95, 0x2d, + 0xaf, 0x74, 0x17, 0x9d, 0x4f, 0x0d, 0x1c, 0x27, 0xaf, 0xd3, 0x2e, 0xfa, + 0x72, 0x4f, 0x87, 0x31, 0xe6, 0x8a, 0x0b, 0x78, 0x60, 0xd7, 0xc4, 0xa4, + 0xa6, 0x78, 0x97, 0x59, 0x8f, 0x90, 0xcb, 0x69, 0x30, 0xfa, 0x5c, 0x1c, + 0xd3, 0xfc, 0xa1, 0xaa, 0xec, 0xfe, 0xb4, 0x65, 0xe3, 0xf5, 0x0f, 0xab, + 0x12, 0xd8, 0x2f, 0xca, 0x0c, 0x75, 0x6d, 0xee, 0x1c, 0xd2, 0x09, 0xfb, + 0xa2, 0x17, 0x17, 0x5d, 0x71, 0xdf, 0xfd, 0xe8, 0x99, 0x59, 0x19, 0x15, + 0x62, 0x93, 0x5b, 0x89, 0x14, 0x82, 0x7d, 0x32, 0x24, 0x10, 0xee, 0x4f, + 0xc9, 0x25, 0x37, 0xfe, 0xa7, 0xf5, 0x5f, 0xd9, 0x2d, 0xca, 0x6d, 0xa3, + 0x73, 0x2c, 0x6b, 0x48, 0x03, 0xf7, 0xda, 0x74, 0xfc, 0xab, 0xa2, 0x67, + 0x4e, 0xcf, 0xeb, 0x4f, 0xf5, 0xfa, 0x91, 0x76, 0x3e, 0x19, 0xd5, 0xb4, + 0x0d, 0x2c, 0xb0, 0x7f, 0x2b, 0xf7, 0x47, 0xe2, 0xb1, 0xfe, 0xa4, 0xf4, + 0xbc, 0x9c, 0xac, 0x86, 0xf5, 0x37, 0x39, 0xa3, 0x0e, 0xaf, 0xcd, 0x20, + 0x3b, 0xd4, 0xb0, 0x83, 0xc7, 0x86, 0xd9, 0x1a, 0xae, 0xe9, 0xc5, 0x25, + 0x20, 0xaa, 0x9a, 0x71, 0xea, 0x6d, 0x34, 0x30, 0x57, 0x53, 0x04, 0x35, + 0x8d, 0x10, 0x02, 0x92, 0x72, 0x9a, 0x12, 0x52, 0xc9, 0x27, 0x84, 0xa1, + 0x25, 0x2c, 0x96, 0xa9, 0x42, 0x50, 0x92, 0x9e, 0x69, 0x85, 0xee, 0x69, + 0x24, 0xea, 0x0c, 0x00, 0x9c, 0x5b, 0x71, 0xfc, 0xed, 0x02, 0x08, 0x0f, + 0xda, 0xef, 0x74, 0x89, 0xdc, 0x7e, 0x6a, 0x42, 0xd0, 0x60, 0x12, 0x08, + 0xfc, 0xdf, 0x32, 0x92, 0x93, 0x1b, 0x6e, 0x06, 0x01, 0xe7, 0xba, 0x46, + 0xdc, 0x96, 0x80, 0xe7, 0x3a, 0x27, 0xe8, 0xa0, 0xba, 0xe2, 0x60, 0x11, + 0x2f, 0xdc, 0x24, 0x79, 0x29, 0xdb, 0x68, 0x22, 0x5c, 0x22, 0x34, 0x1e, + 0x69, 0x29, 0x2b, 0x2d, 0xc8, 0xd3, 0x59, 0x5c, 0xf6, 0x6d, 0xd8, 0xd9, + 0x3d, 0x4e, 0xff, 0x00, 0x59, 0xe7, 0x7d, 0x2e, 0x83, 0x59, 0xd3, 0xe6, + 0xb7, 0x19, 0x6c, 0x49, 0xe1, 0xcd, 0x3b, 0x8a, 0xe7, 0x3e, 0xb5, 0xf4, + 0xbb, 0x7d, 0x46, 0xf5, 0x6c, 0x6d, 0x0b, 0xa0, 0x5c, 0x07, 0x20, 0xf6, + 0x72, 0x4a, 0x44, 0x72, 0x31, 0x6c, 0xb8, 0x6e, 0x7e, 0xda, 0xc6, 0x81, + 0xb1, 0xa2, 0xb7, 0x6e, 0xda, 0x19, 0xbe, 0x97, 0x87, 0x33, 0xb1, 0x3f, + 0xc1, 0x60, 0x63, 0xdd, 0xea, 0xb4, 0x38, 0xe8, 0xf0, 0x61, 0xc3, 0xf8, + 0xad, 0x4c, 0xfb, 0x59, 0x4b, 0x19, 0x8e, 0xcd, 0x37, 0x34, 0x38, 0xf7, + 0x82, 0x42, 0x4a, 0x6a, 0x3f, 0x28, 0xd8, 0x5c, 0xe7, 0xfc, 0x14, 0xb1, + 0x8b, 0x89, 0xf6, 0xcc, 0x1e, 0x15, 0x46, 0x30, 0xd8, 0xed, 0xad, 0x92, + 0xd1, 0xa9, 0x57, 0xf0, 0x5c, 0x19, 0x6e, 0xc9, 0xf7, 0x7e, 0x6c, 0xa4, + 0xa4, 0x56, 0x19, 0xaf, 0xd0, 0xa1, 0xa4, 0x3a, 0x7f, 0x48, 0xe7, 0x3a, + 0x43, 0x88, 0xe3, 0x6e, 0x9a, 0x72, 0xaa, 0xba, 0x9c, 0x86, 0x7b, 0x8c, + 0x37, 0x6e, 0xa0, 0xf9, 0xab, 0x8e, 0xd5, 0xff, 0x00, 0x46, 0x0f, 0x8b, + 0x54, 0x2d, 0x2e, 0x2d, 0xe6, 0x7f, 0x04, 0x94, 0xd9, 0x61, 0xf5, 0xa8, + 0x16, 0x68, 0x64, 0x6b, 0xf1, 0x1c, 0xaa, 0xae, 0x02, 0x4e, 0xba, 0xa7, + 0xc4, 0x16, 0xba, 0x87, 0xb1, 0x9c, 0x07, 0x1d, 0x52, 0x14, 0xb9, 0xa0, + 0x93, 0xf4, 0x92, 0x53, 0xdc, 0xf4, 0xee, 0xaf, 0x6e, 0x67, 0x4e, 0xa1, + 0xcf, 0xf7, 0x38, 0x34, 0x35, 0xc7, 0xf9, 0x4d, 0xd3, 0x55, 0x61, 0xbd, + 0x55, 0xf5, 0x82, 0x36, 0xc8, 0x03, 0x45, 0xcc, 0xfd, 0x5b, 0xca, 0x3f, + 0xa4, 0xc4, 0x3d, 0xce, 0xf6, 0xff, 0x00, 0x15, 0xb6, 0xe0, 0x24, 0xcc, + 0x24, 0xa6, 0xd7, 0xed, 0x57, 0xec, 0xf7, 0x34, 0x40, 0x29, 0xdb, 0xd5, + 0xec, 0x24, 0xef, 0x6c, 0x56, 0x74, 0x11, 0xca, 0xa0, 0xd7, 0xb7, 0xd4, + 0x73, 0x49, 0x80, 0x3b, 0x1e, 0x11, 0x09, 0x61, 0xf7, 0x11, 0x06, 0x62, + 0x3b, 0x4a, 0x4a, 0x74, 0xcf, 0x55, 0x7d, 0x64, 0x48, 0x0e, 0x61, 0xd4, + 0x1f, 0x25, 0xc5, 0xe1, 0x58, 0x71, 0xba, 0xeb, 0x9e, 0xdd, 0x36, 0x5d, + 0xb8, 0x0f, 0x2d, 0xd2, 0xba, 0x26, 0x81, 0x3b, 0x3b, 0x3b, 0xb1, 0xf1, + 0x5c, 0xff, 0x00, 0x50, 0x67, 0xd9, 0xfa, 0xcb, 0x88, 0xe1, 0xd0, 0xef, + 0xc1, 0x25, 0x3d, 0x81, 0xeb, 0x62, 0x49, 0x23, 0x43, 0xa0, 0x85, 0x06, + 0xf5, 0xa0, 0xc6, 0xc3, 0x86, 0xe3, 0x3d, 0xfc, 0x15, 0x0d, 0x8c, 0x2d, + 0x0e, 0x1c, 0x18, 0x30, 0xa2, 0xfa, 0xc1, 0x23, 0x69, 0x13, 0xe0, 0x92, + 0x9d, 0x8a, 0xba, 0xed, 0x04, 0xc1, 0x69, 0x0b, 0x81, 0xfa, 0xdb, 0x94, + 0x32, 0xfe, 0xb0, 0xdc, 0xf6, 0x03, 0xb4, 0x32, 0xb6, 0x8f, 0x80, 0x6c, + 0xfe, 0x52, 0xba, 0x96, 0xd7, 0x26, 0x36, 0xc9, 0x98, 0x5c, 0xb7, 0xd6, + 0x3c, 0x6c, 0x8a, 0xba, 0xc8, 0xb0, 0x34, 0x8a, 0x2f, 0xac, 0x1f, 0x53, + 0x80, 0x0b, 0x44, 0x38, 0x6e, 0xf9, 0x24, 0xa6, 0x80, 0x78, 0x15, 0x81, + 0xc4, 0x05, 0x5e, 0x43, 0x9f, 0xae, 0xbd, 0xe1, 0x47, 0xd5, 0xd0, 0x91, + 0xc0, 0xe1, 0x13, 0x11, 0xb2, 0x4b, 0x8f, 0x27, 0x8d, 0x12, 0x52, 0x76, + 0x8d, 0xac, 0xd4, 0x06, 0x34, 0xf6, 0xee, 0x54, 0x83, 0xbb, 0x06, 0xfd, + 0xea, 0x65, 0xa0, 0x6b, 0x1e, 0xef, 0xde, 0x3c, 0xa1, 0x9e, 0x52, 0x52, + 0x46, 0xda, 0x42, 0x27, 0xae, 0x74, 0x7f, 0x87, 0x3f, 0x15, 0x58, 0xf9, + 0xe8, 0x86, 0xf7, 0xc5, 0x6f, 0x09, 0x29, 0xf4, 0xee, 0x9d, 0xd7, 0x31, + 0x2d, 0xc0, 0xa2, 0xc0, 0xd0, 0xc2, 0xe6, 0x0d, 0xcc, 0x68, 0x01, 0xa1, + 0xc3, 0x43, 0x00, 0x22, 0x3b, 0xad, 0x63, 0x69, 0xe2, 0xb9, 0x0f, 0xab, + 0x2f, 0xf5, 0xb0, 0xac, 0xae, 0x25, 0xd5, 0xbf, 0x4f, 0x83, 0x87, 0xfb, + 0x16, 0x99, 0xa9, 0xfa, 0xee, 0x68, 0x81, 0xc1, 0x25, 0x25, 0x3a, 0x39, + 0x99, 0xe6, 0xd7, 0x6f, 0xa6, 0xc0, 0xd0, 0x04, 0x06, 0x93, 0xa2, 0x15, + 0x39, 0xd9, 0x4c, 0x01, 0xdb, 0x9a, 0xe7, 0x0e, 0x5b, 0x3a, 0x42, 0xaa, + 0x28, 0xdd, 0xb7, 0x8f, 0x18, 0x51, 0x0c, 0x73, 0x5a, 0x4c, 0x41, 0x27, + 0xf0, 0x49, 0x4e, 0xf9, 0xea, 0x58, 0xa2, 0xa0, 0xed, 0xe0, 0xbe, 0x38, + 0xf3, 0x54, 0xb2, 0x3a, 0x95, 0xf6, 0x33, 0x6d, 0x5e, 0xc3, 0x3c, 0xac, + 0xcf, 0x4d, 0xc0, 0x7c, 0x78, 0x09, 0x8b, 0x6d, 0x1a, 0x9e, 0x3e, 0x3d, + 0xd2, 0x53, 0xbf, 0x8d, 0x9f, 0x5b, 0xab, 0x68, 0xb8, 0xed, 0x7f, 0x05, + 0x13, 0xed, 0x98, 0xff, 0x00, 0xbe, 0x39, 0x5c, 0xef, 0xe9, 0x63, 0x40, + 0x64, 0xa5, 0x36, 0x47, 0x92, 0x4a, 0x43, 0xb5, 0xe1, 0x81, 0xee, 0x2d, + 0xdc, 0x35, 0x06, 0x79, 0xf1, 0xf8, 0xa1, 0x1b, 0xaf, 0xb2, 0xd0, 0xfa, + 0x99, 0x2c, 0x67, 0x0f, 0xef, 0xf7, 0x79, 0x27, 0xfb, 0x1b, 0xdc, 0xca, + 0xdc, 0x2e, 0x6b, 0xf6, 0xce, 0xf0, 0x24, 0x40, 0xed, 0x28, 0x79, 0x85, + 0xcc, 0x7b, 0x3d, 0x01, 0xb0, 0x10, 0x1c, 0xe3, 0x3a, 0x6e, 0xee, 0x7c, + 0x82, 0x4a, 0x53, 0xb2, 0x2f, 0x32, 0xc1, 0xf4, 0x5c, 0x63, 0x77, 0xe7, + 0x49, 0x5a, 0x0d, 0xa8, 0x86, 0x34, 0xda, 0x36, 0xb8, 0x0d, 0x03, 0x8e, + 0xa5, 0x55, 0xa3, 0x24, 0xb5, 0xbe, 0xa9, 0x6f, 0xa8, 0x40, 0xd5, 0xe0, + 0x68, 0x0f, 0x8c, 0x29, 0x93, 0x63, 0xed, 0xdf, 0xb8, 0xba, 0x44, 0xe8, + 0x64, 0xff, 0x00, 0x72, 0x4a, 0x64, 0x03, 0xd9, 0xbc, 0x9d, 0x1a, 0xfd, + 0x09, 0x45, 0xba, 0x9a, 0xef, 0xc2, 0x7e, 0x33, 0x8c, 0x7a, 0x8d, 0x3a, + 0x9e, 0xd1, 0xc4, 0x7c, 0xd4, 0x58, 0xe6, 0x8b, 0x4b, 0x1c, 0x41, 0x3c, + 0x41, 0xd3, 0x58, 0x9e, 0x13, 0x39, 0xd0, 0xe2, 0x6c, 0x2d, 0x0d, 0x70, + 0x81, 0xde, 0x25, 0x25, 0x3c, 0x55, 0x38, 0x77, 0x53, 0xd4, 0x9d, 0x87, + 0x73, 0x60, 0xba, 0x5a, 0x47, 0xe2, 0x0a, 0x9e, 0x5b, 0xc3, 0xb2, 0x5e, + 0xd0, 0x77, 0x06, 0xfb, 0x41, 0xf2, 0x6e, 0x92, 0xba, 0x4f, 0xac, 0x6c, + 0xc7, 0xa2, 0x9a, 0xfa, 0x8b, 0xa0, 0x64, 0xd6, 0x0d, 0x74, 0x6d, 0xe1, + 0xc1, 0xc2, 0x35, 0xf8, 0x2e, 0x52, 0x80, 0x6c, 0x3b, 0x8a, 0x4a, 0x6d, + 0xe0, 0x38, 0x56, 0x4d, 0x4f, 0x10, 0x2c, 0xe1, 0xc8, 0x82, 0x97, 0x36, + 0xe0, 0x5a, 0x67, 0x69, 0xfb, 0x94, 0x1d, 0x54, 0xd6, 0x40, 0xe5, 0xba, + 0x8f, 0x82, 0xb5, 0x82, 0xe8, 0x61, 0xdc, 0x37, 0x6b, 0x06, 0x52, 0x53, + 0x17, 0xb7, 0x6e, 0xad, 0xee, 0x24, 0x15, 0x56, 0xe2, 0xd2, 0xc3, 0x26, + 0x1d, 0xd8, 0xf8, 0xab, 0xf9, 0x0f, 0xaa, 0xcf, 0x63, 0x06, 0xd6, 0xb3, + 0x40, 0xc1, 0xe0, 0xb3, 0xb2, 0x5b, 0xb5, 0xfb, 0x35, 0xf9, 0xa4, 0xa4, + 0x9d, 0x2a, 0xd2, 0xd3, 0x6d, 0x71, 0xba, 0x20, 0x91, 0xf1, 0xd1, 0x1b, + 0x2a, 0xb3, 0x0d, 0xdf, 0x3e, 0xee, 0xde, 0x4a, 0x96, 0x15, 0xa6, 0x8e, + 0xa5, 0x51, 0x03, 0x73, 0x1e, 0x76, 0x39, 0xa3, 0x49, 0x05, 0x68, 0x75, + 0x2c, 0xda, 0x85, 0xa1, 0xac, 0x6f, 0xb4, 0x71, 0x29, 0x29, 0x16, 0x2d, + 0x8f, 0xc7, 0xb9, 0xb6, 0xb4, 0x99, 0x61, 0x1a, 0xf9, 0x2e, 0xab, 0xd5, + 0xae, 0xd6, 0x56, 0x5a, 0x74, 0xb4, 0x6e, 0x07, 0xc0, 0x2e, 0x2f, 0xed, + 0x6c, 0x0e, 0x80, 0xd5, 0xd5, 0x74, 0x22, 0xeb, 0x7a, 0x45, 0x77, 0x3c, + 0x68, 0xd7, 0xbe, 0x09, 0xe3, 0x42, 0x92, 0x92, 0x99, 0x36, 0x48, 0xf9, + 0xff, 0x00, 0x04, 0x72, 0xf0, 0x76, 0x4c, 0x92, 0x5a, 0x26, 0x3c, 0x65, + 0x46, 0xd7, 0xb0, 0x7d, 0x16, 0xc1, 0x3a, 0xee, 0xf3, 0x45, 0xad, 0xad, + 0x71, 0xdc, 0x40, 0xf3, 0xf8, 0x47, 0x29, 0x29, 0x15, 0x96, 0x39, 0x80, + 0x1d, 0x5c, 0xe0, 0xe1, 0xb7, 0xcc, 0x15, 0x9b, 0xd7, 0xc3, 0x5b, 0x9b, + 0x8d, 0x68, 0x00, 0x07, 0xb2, 0x34, 0xf2, 0x3f, 0xed, 0x5a, 0xb7, 0xb5, + 0x84, 0xb3, 0x69, 0xd0, 0x12, 0x4b, 0x8e, 0x9c, 0xf0, 0x16, 0x67, 0x5f, + 0x67, 0xe8, 0x31, 0xed, 0x1a, 0xec, 0x71, 0x68, 0x3e, 0x5c, 0xa4, 0xa7, + 0x4b, 0x1d, 0xcc, 0xb3, 0x1d, 0x92, 0x48, 0x25, 0xb1, 0x3f, 0x82, 0x30, + 0x01, 0xa3, 0x6d, 0x9f, 0x4e, 0x34, 0xff, 0x00, 0x7a, 0xa7, 0xd3, 0x6c, + 0xac, 0xd0, 0xc9, 0x6f, 0x32, 0x39, 0xe1, 0x1d, 0xfe, 0xa5, 0x6d, 0x0f, + 0x07, 0xd4, 0xab, 0x70, 0xd4, 0xe8, 0xe1, 0xe4, 0x92, 0x99, 0xd4, 0xe6, + 0x92, 0xe0, 0x5d, 0xb5, 0xc0, 0xf2, 0xb3, 0x7e, 0xb8, 0x3c, 0x8e, 0x9c, + 0xd6, 0xb9, 0xbb, 0xd8, 0xe7, 0x02, 0xed, 0xbe, 0x31, 0xa1, 0x5a, 0x5b, + 0xab, 0x1b, 0x8c, 0x8f, 0x77, 0x04, 0xf3, 0xf1, 0x59, 0xdd, 0x59, 0xfe, + 0xb3, 0xc6, 0x2b, 0xda, 0x76, 0xba, 0xbd, 0xce, 0x77, 0xe6, 0xf8, 0x72, + 0x92, 0x9e, 0x26, 0xa6, 0x9b, 0x9d, 0x03, 0x46, 0x8f, 0xc1, 0x69, 0x50, + 0xc1, 0x58, 0xef, 0x03, 0x85, 0x52, 0xad, 0xb8, 0xf7, 0xdd, 0x5b, 0xf9, + 0x6b, 0xa0, 0x0f, 0x9a, 0xbc, 0x01, 0x0d, 0x25, 0xda, 0x92, 0x65, 0x25, + 0x30, 0xb1, 0xee, 0x27, 0xc1, 0x44, 0x72, 0x9e, 0xcd, 0x0c, 0x70, 0x7b, + 0xa6, 0x98, 0xd5, 0x25, 0x2b, 0x42, 0x7e, 0x08, 0x36, 0xfd, 0x03, 0xe6, + 0x42, 0x26, 0xa0, 0x13, 0xe3, 0xa4, 0xa8, 0x5a, 0x62, 0xb8, 0x1c, 0x94, + 0x94, 0xf4, 0x1f, 0x52, 0x1c, 0xc3, 0x66, 0x65, 0x6e, 0xe4, 0xb1, 0x8e, + 0x03, 0xca, 0x48, 0x3f, 0x95, 0x74, 0x8e, 0x6b, 0x5c, 0x27, 0xe6, 0x02, + 0xe4, 0xfe, 0xa4, 0x41, 0xcd, 0xcb, 0x1b, 0xa1, 0xc6, 0xa1, 0xb4, 0x1e, + 0xf0, 0xf0, 0xba, 0x87, 0x58, 0xda, 0xec, 0x73, 0x59, 0xc4, 0x7e, 0x54, + 0x94, 0xa6, 0x3a, 0x48, 0x11, 0x1a, 0x10, 0x9f, 0x68, 0x23, 0x42, 0x06, + 0xe1, 0xa9, 0xf3, 0x94, 0x9c, 0x0b, 0x62, 0xd8, 0x89, 0xd0, 0x8e, 0x07, + 0x1c, 0xa1, 0x17, 0x9b, 0x37, 0x56, 0xd0, 0x26, 0xb0, 0x1c, 0x4f, 0xcf, + 0x44, 0x94, 0xbd, 0x2d, 0x65, 0xa4, 0xee, 0x10, 0xe6, 0xe8, 0x04, 0xe9, + 0xa7, 0x74, 0x47, 0x54, 0xd7, 0x02, 0x64, 0x76, 0x82, 0x84, 0xe9, 0x6f, + 0xe9, 0x2b, 0xd2, 0x62, 0x7c, 0x20, 0xe8, 0xac, 0x3c, 0xd7, 0x53, 0x0f, + 0x72, 0x07, 0xb8, 0xf9, 0x91, 0xc2, 0x4a, 0x46, 0x6b, 0x2c, 0x61, 0xee, + 0x4e, 0x80, 0xa8, 0xfa, 0x2c, 0x99, 0x8f, 0x6f, 0x87, 0x9a, 0x60, 0x4b, + 0x9b, 0xc9, 0xf1, 0x9f, 0x25, 0x3d, 0xc7, 0x74, 0xc7, 0x94, 0xf9, 0xf2, + 0x92, 0x9c, 0xeb, 0x45, 0x4d, 0x3b, 0x00, 0x21, 0xe0, 0x35, 0xae, 0x03, + 0x56, 0x3b, 0x5d, 0x54, 0x2d, 0xdd, 0x4e, 0x4e, 0xfb, 0x7e, 0x84, 0x97, + 0x12, 0x46, 0xed, 0x38, 0x01, 0x4a, 0xbc, 0xb7, 0x58, 0xe0, 0x2e, 0xf4, + 0xeb, 0x2d, 0xd0, 0x13, 0xab, 0x5c, 0x3c, 0x7c, 0x93, 0x0a, 0xaf, 0x75, + 0xd5, 0xda, 0xdb, 0x77, 0x31, 0xb2, 0x08, 0x1e, 0xe6, 0x93, 0xdc, 0xba, + 0x7c, 0x12, 0x52, 0xff, 0x00, 0x6d, 0xa6, 0xca, 0xbd, 0x16, 0x56, 0xe7, + 0x35, 0xcf, 0x1a, 0x1f, 0x66, 0xd2, 0x7b, 0x95, 0x66, 0xba, 0x6a, 0x71, + 0x0d, 0xb1, 0xdb, 0x43, 0x24, 0x35, 0x83, 0x49, 0x1c, 0xca, 0x19, 0xb6, + 0xab, 0x18, 0x1f, 0x59, 0x6d, 0x8f, 0x60, 0x24, 0xb7, 0xe8, 0x99, 0x1c, + 0xfc, 0xca, 0x1d, 0xb6, 0x5b, 0x68, 0xda, 0xd6, 0x92, 0xd2, 0x0b, 0x9a, + 0x09, 0xd4, 0x69, 0xf9, 0xde, 0x41, 0x25, 0x27, 0x67, 0xa2, 0xe0, 0x0d, + 0x63, 0x70, 0x20, 0xba, 0x4f, 0xc7, 0x90, 0x93, 0x6a, 0x16, 0x89, 0x70, + 0x16, 0x07, 0x0f, 0x6f, 0xe6, 0x81, 0x0a, 0xb5, 0x83, 0x26, 0x96, 0x39, + 0xa3, 0x63, 0x6c, 0x74, 0x16, 0x3b, 0xb1, 0x68, 0xd4, 0xc0, 0xec, 0x51, + 0xad, 0xbb, 0x2d, 0x8c, 0x6b, 0x76, 0x81, 0x75, 0xa3, 0xf4, 0x63, 0xc3, + 0x8d, 0x52, 0x53, 0xcd, 0xfd, 0x69, 0xba, 0xcb, 0x73, 0xeb, 0xc4, 0x03, + 0x6b, 0x2a, 0x60, 0x25, 0xa3, 0xf7, 0x9d, 0xfe, 0xc4, 0x0c, 0x4a, 0x36, + 0x33, 0xe2, 0xb4, 0x3a, 0xff, 0x00, 0x4c, 0xcb, 0xa7, 0x2a, 0xbc, 0xac, + 0x97, 0x35, 0xce, 0xb8, 0x00, 0xe8, 0x3a, 0xca, 0x1b, 0x69, 0x2c, 0xdb, + 0xd8, 0x10, 0x92, 0x9a, 0xcf, 0xf5, 0x2b, 0x78, 0x23, 0xbf, 0x05, 0x59, + 0xb0, 0xb6, 0x9a, 0x7d, 0x40, 0xdd, 0xb6, 0x38, 0x41, 0xf0, 0x3e, 0x68, + 0xf6, 0x63, 0x80, 0xd0, 0xe7, 0x1d, 0x06, 0xab, 0x1f, 0x37, 0x38, 0x5f, + 0x7f, 0xb2, 0x43, 0x04, 0x00, 0xce, 0x75, 0x1a, 0x68, 0x92, 0x92, 0xd6, + 0xf2, 0x0c, 0x9f, 0xcd, 0xd4, 0x94, 0x07, 0x39, 0xd6, 0x58, 0x6c, 0x3a, + 0x84, 0x52, 0x0e, 0xd2, 0x06, 0xbb, 0xb9, 0x4d, 0x64, 0x35, 0xbe, 0xd1, + 0xed, 0x23, 0x8f, 0x04, 0x94, 0xcb, 0x0f, 0x05, 0xef, 0xb5, 0x99, 0xb7, + 0x45, 0x78, 0xac, 0x32, 0x1e, 0x4c, 0x17, 0xb8, 0x7e, 0x6b, 0x47, 0x3c, + 0xa1, 0x66, 0x3d, 0xb6, 0xe4, 0x12, 0x0e, 0x93, 0x2a, 0xbb, 0xec, 0xbb, + 0x60, 0x61, 0x74, 0xb4, 0x70, 0x3c, 0x15, 0xae, 0x9d, 0xd2, 0xf2, 0xfa, + 0x85, 0x77, 0x1c, 0x77, 0x31, 0xbe, 0x90, 0x04, 0x87, 0x93, 0xb9, 0xd2, + 0x63, 0x4d, 0x12, 0x53, 0x45, 0xe7, 0xfe, 0x91, 0x80, 0xbb, 0x3e, 0x89, + 0x60, 0xa7, 0xa5, 0xe3, 0xd2, 0xf9, 0x12, 0x0b, 0xc0, 0x8f, 0xde, 0x24, + 0x85, 0x97, 0xd3, 0x3e, 0xab, 0xbd, 0xf6, 0x36, 0xec, 0xff, 0x00, 0x75, + 0x4d, 0xe2, 0xaa, 0xa7, 0xdc, 0xe1, 0xd9, 0xce, 0x3f, 0xc1, 0x6e, 0xde, + 0xf3, 0x49, 0x14, 0x31, 0x8c, 0xac, 0xb0, 0x69, 0xde, 0x1a, 0x34, 0x49, + 0x4c, 0xc1, 0x99, 0x03, 0xb4, 0xea, 0x3b, 0x03, 0xc2, 0x6c, 0xad, 0xb5, + 0x56, 0xc6, 0x07, 0xcd, 0x8e, 0xd6, 0xc1, 0x1f, 0x31, 0xaa, 0x6a, 0x45, + 0x36, 0x57, 0xea, 0x13, 0xbc, 0x49, 0x1f, 0xa3, 0x33, 0x2e, 0xe6, 0x20, + 0xa9, 0xfe, 0x8b, 0x20, 0x0b, 0x2c, 0x63, 0xd8, 0xc1, 0xfa, 0x23, 0x04, + 0x17, 0x82, 0x38, 0x2e, 0x04, 0x78, 0x24, 0xa6, 0x15, 0xe5, 0xb9, 0xef, + 0x0d, 0x20, 0x16, 0x7d, 0x1e, 0x3b, 0x76, 0x55, 0xfa, 0xb5, 0x2e, 0x3d, + 0x30, 0x3c, 0x7d, 0x02, 0xf9, 0x13, 0xe5, 0xa2, 0xb4, 0xea, 0xe9, 0xa1, + 0xed, 0xf4, 0x2c, 0x36, 0x36, 0x60, 0x87, 0x08, 0x73, 0x49, 0xf1, 0x4d, + 0x98, 0x4d, 0x9d, 0x32, 0xda, 0xdd, 0x02, 0x09, 0x70, 0x03, 0xc4, 0x72, + 0x92, 0x9a, 0xbd, 0x2a, 0xc7, 0x3b, 0x1f, 0x6e, 0xdd, 0xc0, 0x1d, 0x44, + 0xc7, 0x2a, 0xe6, 0x4d, 0xae, 0x65, 0x6f, 0xa5, 0xce, 0x86, 0x91, 0x2e, + 0x23, 0x9d, 0xd1, 0xc7, 0xcd, 0x67, 0xfd, 0x5f, 0x0f, 0xb5, 0xce, 0xa4, + 0x10, 0xd2, 0x44, 0x82, 0x75, 0xe3, 0xc9, 0x5f, 0xcd, 0xaf, 0x13, 0x04, + 0x7a, 0x99, 0xaf, 0x37, 0xd8, 0x5d, 0x35, 0x63, 0x8e, 0x5c, 0x7b, 0x6e, + 0x03, 0xf2, 0x24, 0xa5, 0x63, 0xb3, 0x1e, 0xba, 0x1d, 0x9b, 0x94, 0xef, + 0x4a, 0x90, 0x21, 0xa0, 0xfe, 0x77, 0x98, 0x95, 0x9b, 0x9f, 0x9d, 0xd4, + 0xb3, 0xa8, 0xb2, 0xec, 0x4a, 0xfd, 0x3c, 0x1a, 0x9a, 0x76, 0x57, 0xfe, + 0x12, 0xe1, 0xc6, 0xe6, 0x8e, 0x48, 0x1e, 0x28, 0xcf, 0xa6, 0xfc, 0xf7, + 0x0c, 0x8c, 0xf3, 0x0e, 0xe7, 0x1f, 0x17, 0xf3, 0x1a, 0x07, 0x05, 0xfd, + 0xa7, 0xc0, 0x70, 0xad, 0xb4, 0xc3, 0xfd, 0x47, 0xfd, 0x20, 0x20, 0xb5, + 0xb0, 0x3b, 0xf6, 0x49, 0x4f, 0x3b, 0xd3, 0xbe, 0xaf, 0x01, 0x85, 0x6e, + 0x76, 0x6c, 0x9c, 0x8b, 0x19, 0xbe, 0x86, 0x49, 0x1b, 0x35, 0xe5, 0xfe, + 0x7e, 0x48, 0x76, 0xb1, 0xb5, 0xb7, 0xde, 0xf0, 0xd0, 0x38, 0xe0, 0x7e, + 0x57, 0x2e, 0xa5, 0xfb, 0x5f, 0x85, 0x9b, 0x4d, 0xde, 0xfa, 0xcd, 0x65, + 0xcd, 0x2e, 0x11, 0x0e, 0x02, 0x57, 0x1a, 0x6a, 0xae, 0xcb, 0xaa, 0x60, + 0x60, 0x24, 0xbd, 0xa3, 0xc7, 0x44, 0x94, 0xb6, 0xfa, 0x41, 0x99, 0xdf, + 0xf3, 0x03, 0xfb, 0xd2, 0xf5, 0x5a, 0x08, 0xd3, 0x9e, 0x03, 0x44, 0xfe, + 0x25, 0x17, 0x39, 0x86, 0xac, 0x9f, 0xb3, 0x10, 0x1b, 0xe9, 0x12, 0xd2, + 0xd0, 0x23, 0x82, 0x86, 0x00, 0xdc, 0x5d, 0xd9, 0x80, 0x47, 0xc4, 0x84, + 0x94, 0xd8, 0xe9, 0x58, 0xe7, 0xa8, 0x75, 0x01, 0x53, 0x80, 0x15, 0xb1, + 0xae, 0x7b, 0x87, 0x26, 0x1b, 0xfe, 0xf5, 0x53, 0xa8, 0x96, 0x0b, 0xac, + 0x0c, 0xd1, 0x81, 0xee, 0x0d, 0x1e, 0x40, 0x98, 0x5a, 0x7f, 0x56, 0xdc, + 0x2b, 0xbb, 0x2e, 0xe7, 0x7d, 0x16, 0x63, 0xbf, 0x77, 0xf6, 0x8b, 0x40, + 0x58, 0xb9, 0x04, 0xba, 0x09, 0xe4, 0x82, 0x4f, 0xc4, 0xa4, 0xa7, 0x5f, + 0xea, 0x73, 0x6c, 0xfd, 0xa3, 0x63, 0xeb, 0x89, 0x6d, 0x4e, 0x24, 0x13, + 0x13, 0xab, 0x57, 0x5c, 0xf6, 0xd6, 0x5e, 0x5e, 0xc7, 0x48, 0x76, 0x84, + 0x1d, 0x1a, 0x0a, 0xe4, 0xfe, 0xa6, 0x06, 0x1e, 0xa0, 0xf6, 0x3f, 0x87, + 0xd6, 0xe8, 0x9f, 0xe4, 0xc3, 0x97, 0x55, 0x68, 0x63, 0x4d, 0x9e, 0x99, + 0x9a, 0xac, 0x24, 0xc3, 0x88, 0x10, 0x07, 0x7f, 0xbd, 0x25, 0x2c, 0xd7, + 0xdc, 0xe0, 0x6a, 0xb0, 0x43, 0x5e, 0x09, 0x6b, 0xa6, 0x75, 0x1f, 0xde, + 0x86, 0x48, 0x6c, 0x6c, 0xd4, 0xfd, 0x13, 0xe3, 0x24, 0xf0, 0xa0, 0x09, + 0xaf, 0x6b, 0xcb, 0xe4, 0x4c, 0x96, 0x90, 0x64, 0xc2, 0x8d, 0xed, 0x35, + 0xda, 0x1f, 0xac, 0xb8, 0xee, 0x82, 0x7f, 0x7b, 0xe8, 0x94, 0x94, 0x91, + 0xce, 0x69, 0xdc, 0xfd, 0x61, 0xd2, 0x36, 0x1f, 0xcd, 0x8d, 0x11, 0x1e, + 0xfd, 0xc3, 0xda, 0x0c, 0x40, 0x55, 0x7d, 0xd5, 0xb5, 0xe5, 0xd2, 0x0c, + 0x10, 0x1c, 0x78, 0x98, 0x47, 0x73, 0x76, 0xd4, 0x2b, 0x06, 0x4b, 0xd8, + 0x1d, 0x3d, 0xa4, 0xa4, 0xa6, 0x20, 0xbc, 0xc1, 0x69, 0xdb, 0xce, 0xa7, + 0xbe, 0xaa, 0xcc, 0x9f, 0x4f, 0x6c, 0x0d, 0xf1, 0x1d, 0xbc, 0x15, 0x60, + 0x1a, 0xda, 0x9a, 0xe2, 0x48, 0x73, 0x44, 0x78, 0xfb, 0x89, 0xd1, 0x3f, + 0xae, 0xcd, 0x91, 0xdb, 0x64, 0xef, 0xef, 0xf1, 0x49, 0x4e, 0x73, 0x1c, + 0xc6, 0x1d, 0x8f, 0x68, 0xb0, 0xb8, 0xcb, 0x5c, 0x7b, 0x0f, 0x04, 0xee, + 0xba, 0xa6, 0xee, 0x64, 0x86, 0x97, 0x68, 0xe2, 0xc2, 0x3e, 0x8f, 0x86, + 0xa8, 0xac, 0xab, 0xd4, 0x25, 0xcf, 0x60, 0x70, 0x32, 0x47, 0x6f, 0x9c, + 0x09, 0x53, 0xcd, 0x7e, 0x26, 0xd6, 0x3f, 0x1c, 0x30, 0x35, 0xa3, 0x6e, + 0xd7, 0x68, 0xe2, 0xef, 0xde, 0x29, 0x29, 0xa9, 0x51, 0xde, 0x1c, 0xda, + 0x4c, 0x56, 0x0f, 0xd2, 0x9f, 0xc4, 0x22, 0xdb, 0xf6, 0xaa, 0x30, 0x6c, + 0xb1, 0xac, 0x0e, 0x6b, 0xa6, 0x5c, 0x44, 0x92, 0x09, 0xee, 0xa3, 0x8f, + 0x4b, 0xf7, 0x3e, 0xca, 0x43, 0x76, 0xb2, 0x36, 0xb9, 0xa0, 0x7e, 0x00, + 0xab, 0x59, 0x4f, 0xc8, 0xb6, 0xb7, 0xd5, 0x6b, 0xb6, 0x31, 0xec, 0x04, + 0x34, 0x46, 0x84, 0x4f, 0x33, 0xdc, 0xf2, 0x92, 0x9c, 0x86, 0x1b, 0x8d, + 0x6d, 0x7b, 0x65, 0xad, 0xb7, 0x80, 0x34, 0x03, 0xc8, 0x4a, 0xd5, 0xe9, + 0x76, 0xe4, 0x59, 0x95, 0x5d, 0x79, 0x1a, 0x50, 0xc7, 0x13, 0x5b, 0x88, + 0xfa, 0x4e, 0x8e, 0xee, 0xee, 0xb3, 0x0d, 0x0f, 0x66, 0x25, 0x6e, 0x7c, + 0xcd, 0x6e, 0xf6, 0x34, 0x98, 0x03, 0xc6, 0x7e, 0x2a, 0xd7, 0x4e, 0xca, + 0xb4, 0xbc, 0x02, 0xe2, 0xfa, 0xec, 0xd1, 0xa1, 0x80, 0x7b, 0x5c, 0xde, + 0xc4, 0x76, 0x49, 0x4c, 0xfe, 0xb4, 0xbb, 0xd4, 0xca, 0xa8, 0xb4, 0xcb, + 0x5a, 0xe2, 0x15, 0x17, 0x1f, 0x7b, 0x1b, 0x13, 0x2a, 0xe7, 0x52, 0xaa, + 0xcb, 0x71, 0x9d, 0x7c, 0x7b, 0x58, 0x46, 0xa7, 0x99, 0x9f, 0xf6, 0xaa, + 0x34, 0xd6, 0xe7, 0xe5, 0x56, 0x3b, 0x40, 0x24, 0x24, 0xa6, 0x5d, 0x5a, + 0xd1, 0x56, 0x11, 0x3a, 0xee, 0x77, 0xb4, 0x7c, 0xd7, 0x38, 0xd6, 0xb5, + 0xa2, 0x79, 0x2b, 0x73, 0xad, 0x3f, 0x7d, 0xa7, 0x14, 0x68, 0xd1, 0xaf, + 0xdc, 0xb1, 0x1f, 0x59, 0xad, 0xdb, 0x4f, 0x29, 0x29, 0xd1, 0x6b, 0x3d, + 0x6a, 0x05, 0x90, 0x03, 0x8f, 0xb4, 0x8f, 0x82, 0x0b, 0x9c, 0x43, 0x4b, + 0x1d, 0xa8, 0xed, 0xe4, 0xa7, 0x83, 0x70, 0x68, 0x2c, 0x7c, 0x8e, 0xf2, + 0x3c, 0x21, 0x33, 0xc0, 0x24, 0xcf, 0xc8, 0xa4, 0xa6, 0xab, 0xc6, 0x8b, + 0x5f, 0xea, 0xae, 0x49, 0xa3, 0x2d, 0xc0, 0x18, 0xde, 0xc3, 0xcf, 0x06, + 0x08, 0x3a, 0xac, 0xb7, 0x36, 0x26, 0x35, 0x1e, 0x08, 0xdd, 0x2b, 0x20, + 0x62, 0xe6, 0xd3, 0x69, 0xfa, 0x25, 0xc5, 0x8f, 0x1e, 0x2d, 0x78, 0xda, + 0x7f, 0x2a, 0x4a, 0x7b, 0x43, 0x6b, 0x43, 0x5f, 0xb5, 0xe2, 0xb6, 0x6e, + 0xde, 0xd3, 0xc8, 0x69, 0xfc, 0xe6, 0xfc, 0xd5, 0x3a, 0x9d, 0x55, 0xc5, + 0xf6, 0x17, 0x6d, 0x63, 0x81, 0xda, 0xe7, 0x49, 0x33, 0xc2, 0x9b, 0x71, + 0x4d, 0x6d, 0xf6, 0x6d, 0x34, 0x9d, 0x00, 0x26, 0x0b, 0xbe, 0x01, 0x11, + 0xce, 0x2c, 0x6e, 0xd6, 0x30, 0x38, 0xb8, 0x6c, 0x66, 0x83, 0x57, 0x0e, + 0xff, 0x00, 0x20, 0x52, 0x53, 0x1a, 0x9f, 0xe8, 0xe3, 0x3b, 0x6e, 0x8e, + 0x2d, 0xed, 0xa9, 0xdd, 0xc9, 0x84, 0xf8, 0xf6, 0x5a, 0xe6, 0xbc, 0x5e, + 0x08, 0xb1, 0xec, 0x05, 0xba, 0x46, 0xa3, 0x51, 0xbb, 0xce, 0x11, 0x59, + 0x8d, 0x65, 0x2d, 0x6e, 0xf6, 0xb4, 0x96, 0x6b, 0x24, 0xeb, 0xf1, 0x51, + 0xa9, 0xcd, 0x65, 0xae, 0x78, 0x6b, 0x88, 0x26, 0x79, 0xf0, 0x09, 0x29, + 0x16, 0x45, 0x4c, 0xb0, 0x35, 0xf5, 0x58, 0x3d, 0x56, 0x8d, 0x7f, 0x96, + 0x3c, 0x11, 0x70, 0xb1, 0x4e, 0x55, 0x57, 0x06, 0xb4, 0xef, 0x0d, 0xda, + 0x1a, 0x7b, 0x18, 0xf7, 0x13, 0xe0, 0xad, 0xfd, 0x90, 0xde, 0x4b, 0x8b, + 0x83, 0x28, 0x1e, 0xe1, 0x63, 0xb9, 0x6c, 0xf2, 0xd0, 0x55, 0x5c, 0x8e, + 0xa7, 0x5b, 0x5a, 0xec, 0x2e, 0x99, 0x0c, 0x68, 0x3f, 0xa5, 0xbd, 0xdd, + 0xfc, 0xcf, 0x8a, 0x4a, 0x71, 0x7a, 0x4d, 0xd7, 0xe3, 0xe4, 0xbd, 0xd4, + 0x09, 0xb5, 0xa1, 0xcd, 0x68, 0xec, 0x4c, 0x2d, 0x2f, 0xb1, 0x3d, 0xb5, + 0xbb, 0x35, 0xe4, 0xdf, 0x96, 0x44, 0x59, 0x27, 0xe8, 0x6e, 0xec, 0xcf, + 0x0f, 0x05, 0x97, 0x57, 0xea, 0xfd, 0x45, 0xec, 0xdc, 0x09, 0x0e, 0xd1, + 0xc3, 0x50, 0x44, 0xae, 0x81, 0x96, 0x56, 0x5c, 0xed, 0x3d, 0x37, 0x91, + 0xb4, 0xf2, 0x34, 0xf2, 0x1c, 0x24, 0xa4, 0x2d, 0xc0, 0xba, 0xf7, 0xb1, + 0xd6, 0x11, 0x4b, 0x4b, 0x36, 0xec, 0x27, 0xdc, 0xe8, 0x11, 0x21, 0xa1, + 0x4b, 0x22, 0x8a, 0x6b, 0x26, 0xe0, 0xd7, 0x48, 0x20, 0x4d, 0x87, 0x6b, + 0x1c, 0x47, 0x6f, 0x6c, 0x94, 0xa6, 0xe6, 0xed, 0x60, 0x24, 0xb9, 0xa6, + 0x09, 0x00, 0x9f, 0x70, 0x52, 0x22, 0xfa, 0xde, 0x5c, 0x5f, 0xb8, 0x91, + 0x30, 0x24, 0x82, 0x7c, 0x40, 0x49, 0x4a, 0xbe, 0xc1, 0x66, 0x0e, 0x51, + 0xb6, 0xa3, 0x55, 0x95, 0xd4, 0xe0, 0x35, 0x90, 0x44, 0x69, 0xaf, 0x75, + 0xc7, 0xe2, 0xbb, 0x6e, 0x7d, 0x0e, 0x3f, 0xe9, 0x18, 0x07, 0x99, 0x26, + 0x02, 0xec, 0xfa, 0x85, 0xd6, 0x0e, 0x8b, 0x79, 0xb0, 0xc6, 0xf0, 0x01, + 0x69, 0x1e, 0xe0, 0x4e, 0x9f, 0x8a, 0xe4, 0xab, 0xb2, 0x8a, 0x31, 0xac, + 0x7b, 0xe0, 0xde, 0xcb, 0x6a, 0xb5, 0xb3, 0xc8, 0x65, 0x67, 0x73, 0xa3, + 0xe3, 0xa0, 0x49, 0x4d, 0xdf, 0xae, 0x18, 0xec, 0xa7, 0xaa, 0x56, 0x58, + 0xd8, 0x36, 0xd6, 0xd7, 0x58, 0x7b, 0x6e, 0xd4, 0x48, 0xf9, 0x0d, 0x56, + 0x3c, 0x03, 0x51, 0x3e, 0x2b, 0xa3, 0xfa, 0xdb, 0x65, 0x19, 0x57, 0x60, + 0x1a, 0x2c, 0x6d, 0x8f, 0x14, 0xbc, 0xbc, 0x34, 0x83, 0xb5, 0xbb, 0x81, + 0x6e, 0xef, 0x0e, 0x4a, 0xe7, 0xe8, 0x6b, 0x2c, 0xf6, 0x35, 0xda, 0x34, + 0xed, 0x24, 0x24, 0xa4, 0x98, 0x0e, 0x0c, 0xc5, 0xea, 0x0f, 0x3f, 0xe8, + 0x03, 0x00, 0xf3, 0x75, 0x8c, 0x0b, 0x3e, 0xff, 0x00, 0xa1, 0x59, 0x1c, + 0x19, 0x08, 0xc1, 0xda, 0x58, 0xd9, 0x20, 0x09, 0xd3, 0xc6, 0x3c, 0x50, + 0x0e, 0xb4, 0xb3, 0xf9, 0x2e, 0x3f, 0x88, 0x49, 0x4d, 0x8e, 0x89, 0x73, + 0xaa, 0xea, 0x78, 0x9a, 0xe8, 0xe7, 0x96, 0x11, 0xfd, 0x6f, 0x62, 0xee, + 0x32, 0x2a, 0x79, 0x7b, 0x1a, 0x40, 0xda, 0xc6, 0xc1, 0x77, 0x1d, 0xf7, + 0x1d, 0x17, 0x9d, 0x54, 0xe2, 0xcb, 0xe9, 0x78, 0xe5, 0xaf, 0x9f, 0xb8, + 0x82, 0xbd, 0x10, 0x5e, 0xc7, 0xd8, 0x0b, 0x61, 0xc0, 0x91, 0xe4, 0x27, + 0xb0, 0x9f, 0x04, 0x94, 0x8e, 0xc3, 0xea, 0x38, 0xee, 0xd3, 0x49, 0x69, + 0x1d, 0xa1, 0x42, 0xcf, 0x73, 0x4b, 0x89, 0x2e, 0xf6, 0xe8, 0x7c, 0xc4, + 0x01, 0x28, 0x8e, 0x66, 0x45, 0x9f, 0xcd, 0xbc, 0xbf, 0x73, 0xa7, 0x75, + 0x50, 0x60, 0x0f, 0x82, 0x10, 0xa2, 0xdb, 0x04, 0x6e, 0xf4, 0xb5, 0x24, + 0x93, 0xfb, 0xa7, 0xc7, 0xcd, 0x25, 0x32, 0x65, 0x80, 0xb9, 0x8e, 0x70, + 0x36, 0x12, 0x44, 0x82, 0x38, 0x52, 0xb1, 0xaf, 0x16, 0x87, 0xee, 0x9d, + 0xbc, 0x02, 0x75, 0xd7, 0xe0, 0x95, 0x86, 0xca, 0x4f, 0xa5, 0x58, 0x0e, + 0xdd, 0x11, 0xae, 0xae, 0x1f, 0xc1, 0x0d, 0xa7, 0xde, 0xe0, 0xe0, 0x49, + 0x70, 0xf6, 0xf9, 0x0f, 0x19, 0x29, 0x29, 0x9e, 0x44, 0x4c, 0x38, 0x86, + 0x03, 0xfc, 0xd9, 0x9f, 0x71, 0x9e, 0xc7, 0xb4, 0x79, 0xa8, 0xc9, 0xf4, + 0xe7, 0x6f, 0xba, 0x36, 0x70, 0x37, 0x47, 0x1c, 0xf1, 0x0a, 0x37, 0xbe, + 0xaf, 0x58, 0x56, 0xff, 0x00, 0x73, 0x62, 0x41, 0x91, 0x12, 0x3e, 0x0a, + 0x3f, 0x68, 0xab, 0x77, 0xad, 0xfc, 0x9d, 0xbb, 0xfb, 0xed, 0xfc, 0x89, + 0x29, 0xcf, 0x0e, 0x34, 0x07, 0x30, 0x58, 0x5c, 0xf2, 0x25, 0xed, 0x32, + 0x34, 0x0a, 0x37, 0x82, 0xea, 0xeb, 0xba, 0xa7, 0x07, 0xd5, 0x3b, 0x9a, + 0x62, 0x49, 0x3d, 0xd9, 0x03, 0x5d, 0xc1, 0x5d, 0x38, 0x35, 0xe4, 0x34, + 0xd9, 0x63, 0xb5, 0x74, 0xb4, 0x10, 0x4c, 0xc7, 0x90, 0x46, 0xc7, 0xc7, + 0x66, 0x35, 0x46, 0xb6, 0x12, 0x47, 0x66, 0x9d, 0x37, 0x1f, 0x1d, 0x12, + 0x53, 0x59, 0x95, 0xd8, 0xc3, 0x5b, 0xb6, 0xb9, 0x92, 0x64, 0x34, 0x88, + 0x89, 0xf0, 0xf2, 0x45, 0xb3, 0x26, 0x92, 0xe1, 0x5b, 0x4d, 0x87, 0x25, + 0xda, 0x38, 0x01, 0xed, 0x03, 0xfb, 0xd4, 0xac, 0xb2, 0xad, 0xed, 0x0e, + 0x1b, 0x9e, 0x3b, 0x3f, 0x5e, 0x74, 0xd2, 0x44, 0x24, 0xe7, 0xe3, 0x34, + 0x16, 0xc9, 0x16, 0xb4, 0x80, 0x4b, 0x41, 0x80, 0x0f, 0x3a, 0x84, 0x94, + 0xcb, 0x1b, 0xa5, 0xd5, 0xf6, 0x5f, 0xd6, 0x2c, 0x01, 0xa5, 0xf3, 0xef, + 0x27, 0xda, 0x4f, 0x1a, 0xfe, 0x28, 0xc2, 0xec, 0x6a, 0x1d, 0x65, 0x55, + 0x56, 0x5c, 0x1a, 0x0b, 0x0b, 0xeb, 0x80, 0x04, 0x08, 0x9f, 0x3f, 0x8a, + 0xae, 0x6e, 0x37, 0xb5, 0x95, 0x59, 0xf4, 0x18, 0xe3, 0xe9, 0x81, 0xa6, + 0xa0, 0x72, 0xe8, 0x51, 0xad, 0xe3, 0x76, 0xc2, 0x1c, 0xfd, 0x9a, 0x03, + 0xda, 0x3f, 0x3b, 0xe4, 0x12, 0x52, 0x89, 0x75, 0x94, 0x58, 0xc7, 0xd8, + 0x03, 0x00, 0x90, 0xcf, 0xde, 0x25, 0x2c, 0x7a, 0x80, 0x70, 0xb4, 0x8f, + 0xa2, 0xd2, 0x54, 0xf6, 0xd6, 0x68, 0x2e, 0x93, 0x2d, 0x74, 0x6d, 0x6f, + 0xba, 0x07, 0x3b, 0xa1, 0x3e, 0x6d, 0x8d, 0xa7, 0x1a, 0xc2, 0x74, 0x90, + 0x03, 0x7e, 0xe9, 0x49, 0x4f, 0x29, 0x9d, 0x6d, 0xb6, 0x65, 0xbe, 0xc3, + 0x30, 0x09, 0x83, 0xe0, 0x8b, 0xb1, 0xb9, 0x0c, 0x87, 0x0d, 0xaf, 0x6f, + 0x7e, 0xe8, 0x21, 0xfb, 0x9e, 0xfe, 0xf3, 0xca, 0x23, 0x45, 0xad, 0xb0, + 0x7f, 0xa3, 0xfc, 0xc7, 0x78, 0x7f, 0x25, 0x25, 0x32, 0xf4, 0xcb, 0x5d, + 0xa1, 0x04, 0x91, 0xaf, 0x99, 0x43, 0x20, 0x9f, 0x6f, 0xdd, 0xfd, 0xc8, + 0x96, 0xbb, 0x6f, 0xb5, 0xdf, 0x44, 0x9d, 0x3e, 0x29, 0x31, 0x8f, 0xdc, + 0x4b, 0x86, 0xe0, 0xed, 0x64, 0x24, 0xa6, 0xb1, 0xd1, 0xd1, 0x12, 0x7c, + 0x94, 0x6e, 0x04, 0x30, 0x38, 0x68, 0x41, 0xe7, 0xbc, 0xab, 0x96, 0x52, + 0x09, 0x93, 0xed, 0x3c, 0xee, 0x55, 0x33, 0x5c, 0xd6, 0x56, 0xe0, 0xd8, + 0x70, 0x1c, 0x91, 0xe2, 0x92, 0x9e, 0xb7, 0x0b, 0x2e, 0x9c, 0x8e, 0x90, + 0xdc, 0xb6, 0xc1, 0x70, 0x10, 0xe6, 0x9e, 0x7d, 0x40, 0x76, 0xb8, 0x7c, + 0x15, 0x8c, 0x17, 0x93, 0x6d, 0x77, 0x3b, 0xb0, 0xdc, 0x1a, 0x38, 0x24, + 0x98, 0x3f, 0x82, 0xcf, 0xe9, 0x98, 0x95, 0x33, 0x1b, 0x0b, 0x0e, 0x8d, + 0x5a, 0x6b, 0x17, 0xdc, 0x75, 0x32, 0xe7, 0xb6, 0x63, 0x45, 0xa6, 0x31, + 0xef, 0x6b, 0xa0, 0x02, 0xe1, 0xfb, 0x82, 0x41, 0x1f, 0x7c, 0x14, 0x94, + 0x8f, 0x21, 0xde, 0x9e, 0x4b, 0xe9, 0x23, 0xde, 0xc7, 0x7e, 0x8a, 0x7b, + 0xb4, 0xea, 0x1d, 0xf7, 0x15, 0x66, 0xae, 0x9f, 0x4d, 0x4c, 0x19, 0xb9, + 0xee, 0x73, 0x03, 0x35, 0x65, 0x64, 0xed, 0xfc, 0x15, 0x8c, 0x8b, 0xb1, + 0xb0, 0x99, 0x5d, 0xb9, 0x20, 0x3f, 0x21, 0x8d, 0x86, 0x56, 0x35, 0x83, + 0xdb, 0xe3, 0x1c, 0x2c, 0xbb, 0x2c, 0xca, 0xc8, 0xbd, 0xb9, 0x19, 0xae, + 0x6b, 0x6a, 0x91, 0xb2, 0xb7, 0x1f, 0x1e, 0x34, 0xee, 0x92, 0x99, 0xe4, + 0xe5, 0xdf, 0xd4, 0x48, 0x00, 0xfa, 0x18, 0x40, 0xc3, 0x00, 0x07, 0xdc, + 0x7e, 0x48, 0x75, 0xe3, 0xdd, 0x8f, 0xec, 0xa5, 0xf5, 0xcb, 0xe6, 0x40, + 0x68, 0x3a, 0x1e, 0xde, 0xed, 0x55, 0xc7, 0x17, 0x11, 0xb5, 0xd5, 0x6d, + 0xdb, 0xc3, 0x62, 0x34, 0x27, 0xb1, 0xe1, 0x0f, 0x29, 0xef, 0xc6, 0xa5, + 0xae, 0xac, 0x1d, 0xcf, 0x73, 0x58, 0xc6, 0x7f, 0x29, 0xc7, 0xbc, 0x78, + 0x0d, 0x52, 0x53, 0x83, 0x99, 0x57, 0xa5, 0x9e, 0x1a, 0x74, 0x88, 0xfe, + 0xee, 0x56, 0xf0, 0xb1, 0xd6, 0xfa, 0x75, 0x96, 0xb0, 0x6e, 0x60, 0x32, + 0x64, 0xee, 0x1f, 0x0f, 0x15, 0x93, 0xd6, 0xea, 0xa9, 0x99, 0x14, 0x3e, + 0xbd, 0x5a, 0x1a, 0x1a, 0x75, 0x26, 0x5c, 0x39, 0x5a, 0x18, 0x6c, 0x2e, + 0xa5, 0x8f, 0xdd, 0xb1, 0xf3, 0x02, 0x44, 0xb4, 0xf9, 0x42, 0x4a, 0x49, + 0x7b, 0xdd, 0x58, 0xde, 0x6e, 0x6b, 0x6a, 0x68, 0xdd, 0xb5, 0xad, 0x71, + 0xdd, 0xdb, 0x53, 0x2a, 0xad, 0xfd, 0x42, 0xa7, 0xda, 0xda, 0x05, 0xc4, + 0x56, 0xd1, 0x25, 0x9d, 0xa4, 0xf7, 0x3f, 0x04, 0x6b, 0x6c, 0x71, 0xa9, + 0xcc, 0x7b, 0x43, 0x6c, 0x04, 0xb7, 0x60, 0x11, 0x01, 0xc3, 0x6c, 0x22, + 0x57, 0x40, 0x0f, 0x0d, 0x7b, 0x5a, 0x01, 0x9d, 0xd0, 0x3c, 0x3c, 0xdd, + 0x33, 0x29, 0x29, 0xc7, 0xea, 0x9d, 0x42, 0x7a, 0x7d, 0x35, 0xd3, 0x91, + 0xea, 0x35, 0xd6, 0x80, 0xf2, 0x1a, 0x5b, 0x30, 0x74, 0x99, 0xe7, 0x95, + 0x8b, 0x96, 0x43, 0xa9, 0x6c, 0xfd, 0x27, 0x12, 0x27, 0xc6, 0x0c, 0x2d, + 0xaf, 0xad, 0x2d, 0xd3, 0x1d, 0xa0, 0xc9, 0x2e, 0xdc, 0x20, 0x40, 0xd0, + 0x8d, 0x17, 0x3b, 0x98, 0x5d, 0xea, 0xd2, 0xce, 0xc2, 0x5d, 0x1f, 0xda, + 0x25, 0x25, 0x27, 0xa9, 0xa6, 0xa6, 0xe4, 0x11, 0xed, 0x21, 0x8c, 0x03, + 0xe6, 0x54, 0x70, 0x89, 0x6b, 0xc1, 0x07, 0x93, 0xaf, 0xde, 0x8e, 0xe6, + 0xfb, 0x2c, 0x23, 0x59, 0x0c, 0xd3, 0xe6, 0xe4, 0x1c, 0x66, 0x9f, 0x59, + 0xa3, 0xb4, 0x9e, 0x7e, 0x49, 0x29, 0x19, 0x2e, 0xf5, 0xad, 0x00, 0x13, + 0x01, 0xc4, 0xc7, 0x61, 0xe2, 0x50, 0xec, 0x65, 0xb8, 0xf5, 0x86, 0xda, + 0xd2, 0xcd, 0xe1, 0xb6, 0x30, 0x1e, 0xed, 0x26, 0x01, 0x57, 0x2a, 0x19, + 0x98, 0x7d, 0x41, 0x99, 0x8d, 0x6b, 0x9b, 0x4d, 0x86, 0x0b, 0xda, 0x37, + 0x82, 0xd7, 0x1f, 0x73, 0x5c, 0xd1, 0x3f, 0x71, 0x47, 0xcb, 0x16, 0xf5, + 0x6c, 0x77, 0xba, 0xa6, 0xb9, 0xb6, 0x9b, 0x77, 0x34, 0x58, 0x03, 0x43, + 0x9a, 0xf2, 0x2b, 0x63, 0x43, 0x9d, 0xc0, 0x6e, 0xa4, 0x0f, 0x3f, 0x24, + 0x94, 0xe1, 0x17, 0xea, 0x0f, 0x83, 0x97, 0x7f, 0x8a, 0xc3, 0x66, 0x3d, + 0x19, 0x21, 0xf1, 0x5e, 0xd0, 0x4c, 0xe8, 0x24, 0x40, 0x85, 0xcd, 0x8f, + 0xa9, 0x3d, 0x5c, 0x50, 0x6c, 0xb5, 0xf5, 0x56, 0xe2, 0x46, 0xc6, 0x17, + 0x6e, 0x2e, 0xec, 0xef, 0xa2, 0x0f, 0x0b, 0xa6, 0xc7, 0x6d, 0xb8, 0xd8, + 0x74, 0x62, 0x3e, 0x1e, 0x2b, 0x6b, 0x5b, 0x71, 0x6f, 0x12, 0x3b, 0xa4, + 0xa4, 0xc1, 0xb7, 0x57, 0xfa, 0x66, 0xbf, 0x61, 0xe4, 0x1d, 0x34, 0x9f, + 0xea, 0xf2, 0x96, 0xe7, 0x58, 0xc0, 0xfb, 0x09, 0x1b, 0xa4, 0x1d, 0x0b, + 0x5a, 0x4f, 0x64, 0xed, 0x35, 0x3a, 0xe1, 0x59, 0xee, 0x48, 0x13, 0xa8, + 0x24, 0x7f, 0xb1, 0x0a, 0xf6, 0xfa, 0x36, 0x3a, 0xa7, 0x92, 0x76, 0x9d, + 0xcd, 0xda, 0x0e, 0xa0, 0xea, 0xd2, 0x12, 0x52, 0x37, 0x31, 0xc5, 0xe1, + 0xac, 0x97, 0x86, 0x70, 0xe1, 0xc0, 0xff, 0x00, 0x5f, 0x34, 0x8c, 0xde, + 0xdd, 0x81, 0xc0, 0x35, 0xaf, 0xd4, 0xc1, 0x24, 0x1d, 0x47, 0xdc, 0x4a, + 0x25, 0x56, 0x33, 0xd3, 0x71, 0x63, 0x65, 0xaf, 0x70, 0x6e, 0x9e, 0x3c, + 0x98, 0x01, 0x49, 0x98, 0xe6, 0x80, 0xd7, 0x6d, 0xdd, 0xbc, 0x9d, 0xe7, + 0x82, 0x27, 0x5f, 0x77, 0x82, 0x4a, 0x42, 0xea, 0x1b, 0xef, 0x69, 0x76, + 0xcd, 0x8d, 0x05, 0xae, 0x03, 0x9d, 0x64, 0xe9, 0xfd, 0xc8, 0x1b, 0x3f, + 0x41, 0x30, 0x36, 0x44, 0xee, 0x8f, 0x6c, 0xf3, 0x2a, 0xed, 0xc2, 0xb6, + 0x17, 0x34, 0xb7, 0xd4, 0x79, 0xfa, 0x24, 0x70, 0x1b, 0xde, 0x55, 0x7f, + 0xfb, 0x41, 0xe9, 0xce, 0xb3, 0xbb, 0x6c, 0xeb, 0xfb, 0xbf, 0x91, 0x25, + 0x25, 0xa2, 0xbb, 0x7d, 0x31, 0x65, 0xc5, 0xb5, 0x9e, 0x5e, 0x79, 0x23, + 0xb1, 0x00, 0x7c, 0x54, 0x5d, 0x97, 0x59, 0xb5, 0xa5, 0x8e, 0x63, 0x6a, + 0x61, 0xf7, 0x6f, 0x31, 0xa1, 0x45, 0xc8, 0xa9, 0xd6, 0x64, 0xef, 0x7b, + 0x4b, 0x45, 0x82, 0x01, 0x27, 0x9d, 0x3c, 0x3c, 0x7f, 0x2a, 0x83, 0x7a, + 0x7e, 0x3d, 0xc1, 0xb5, 0xb5, 0xcc, 0x66, 0x9b, 0x49, 0x71, 0x05, 0xb2, + 0x3f, 0x7b, 0xcd, 0x25, 0x2e, 0xeb, 0x2a, 0xc8, 0x6e, 0xda, 0xc0, 0x78, + 0x1a, 0xb9, 0xcc, 0xf8, 0xca, 0x03, 0x6d, 0xaa, 0xe7, 0x3c, 0xb8, 0x43, + 0x9a, 0x21, 0xa6, 0x08, 0x04, 0xf6, 0x32, 0x79, 0xd1, 0x5c, 0xf4, 0x7e, + 0xca, 0x7d, 0x36, 0x31, 0xa0, 0x00, 0x04, 0xf0, 0x08, 0x1e, 0x1a, 0x6a, + 0xa3, 0x63, 0x39, 0x35, 0xb0, 0x35, 0xc0, 0x48, 0x8e, 0xde, 0x5a, 0x24, + 0xa6, 0xb5, 0xce, 0xd9, 0xac, 0x41, 0xfc, 0xe0, 0x47, 0x10, 0x79, 0xf9, + 0x85, 0x02, 0xeb, 0x7d, 0x57, 0xd5, 0x59, 0x2d, 0x61, 0x83, 0xbc, 0xf6, + 0x9e, 0xc8, 0xed, 0xf5, 0x9a, 0xf8, 0x73, 0xb7, 0x7a, 0x82, 0x1c, 0xd6, + 0xea, 0x7c, 0x65, 0x43, 0x2a, 0x5a, 0x03, 0xdc, 0x07, 0xb7, 0xda, 0x4c, + 0x89, 0x8f, 0x1d, 0x12, 0x53, 0x3a, 0xe9, 0x64, 0xb9, 0xa1, 0xd0, 0x46, + 0xa5, 0xcd, 0xee, 0x55, 0x2f, 0xac, 0x97, 0x86, 0x54, 0xd1, 0x31, 0xa4, + 0x47, 0x8a, 0xd2, 0xc0, 0xdf, 0x4b, 0xbd, 0x51, 0x32, 0x20, 0x31, 0xc3, + 0x8e, 0x35, 0x05, 0x73, 0x3d, 0x6a, 0xd7, 0x65, 0x67, 0xb8, 0x7e, 0x6b, + 0x34, 0x49, 0x4d, 0x2c, 0x66, 0x17, 0xc9, 0xed, 0xdd, 0x5e, 0x66, 0xd6, + 0xe8, 0x46, 0xe6, 0xbf, 0x48, 0xf0, 0x28, 0x74, 0x32, 0x00, 0x03, 0xb7, + 0x64, 0x61, 0xed, 0x70, 0x91, 0xa7, 0x8a, 0x4a, 0x6b, 0x58, 0x2b, 0xdd, + 0xb1, 0xee, 0x2f, 0x6c, 0xe8, 0x47, 0x2a, 0x21, 0xcf, 0xa9, 0xc0, 0x13, + 0xb9, 0x9f, 0x9a, 0xe4, 0xae, 0x20, 0x5e, 0xf7, 0xe8, 0x5a, 0x4e, 0xbe, + 0x12, 0x51, 0x19, 0xb0, 0x38, 0x35, 0xe6, 0x5a, 0xe4, 0x94, 0xb3, 0xdc, + 0x2d, 0xd5, 0xc4, 0x82, 0x55, 0x4c, 0xb6, 0x45, 0x65, 0xb3, 0x22, 0x79, + 0x56, 0x33, 0xc3, 0x31, 0xc9, 0x7d, 0x04, 0xb9, 0x80, 0xfc, 0xb8, 0x54, + 0x1f, 0x6b, 0xad, 0x61, 0x2e, 0x1d, 0xf8, 0x1a, 0x24, 0xa7, 0xb7, 0xfa, + 0xb1, 0x40, 0xc9, 0xe9, 0xb5, 0x39, 0xac, 0x0e, 0xf6, 0x80, 0x6d, 0xfd, + 0xd2, 0x34, 0xfc, 0x16, 0x96, 0x56, 0x7d, 0x38, 0x73, 0x4e, 0x2f, 0xe9, + 0xb2, 0x9d, 0xa1, 0x24, 0xf0, 0xb2, 0xfa, 0x7e, 0x4b, 0xf1, 0x7a, 0x4e, + 0x3f, 0x4c, 0xc2, 0xf6, 0x96, 0x32, 0x6f, 0xb8, 0xf0, 0x1c, 0xff, 0x00, + 0x73, 0xbf, 0x12, 0xa7, 0x4d, 0x58, 0x95, 0x4c, 0x38, 0xe4, 0x38, 0x9f, + 0x76, 0xe0, 0x41, 0x31, 0xaf, 0x23, 0x54, 0x94, 0xc6, 0x8a, 0x5d, 0x75, + 0x8f, 0xb3, 0x25, 0xc1, 0xf7, 0xb0, 0x0b, 0x43, 0xbb, 0x34, 0x0e, 0xc3, + 0xe4, 0xe9, 0x47, 0xc9, 0xc5, 0x65, 0xd8, 0xf5, 0x3e, 0xd0, 0xd7, 0x5b, + 0x5c, 0x8d, 0xb2, 0x40, 0x03, 0x96, 0xed, 0x8e, 0xc9, 0x57, 0x5b, 0x67, + 0xed, 0x01, 0xae, 0xad, 0x80, 0x11, 0x0f, 0x32, 0xe3, 0xbb, 0xf3, 0x3c, + 0xf9, 0x4c, 0xc6, 0x52, 0xd7, 0x1a, 0x72, 0x1e, 0xe6, 0x5c, 0xf1, 0x31, + 0xb4, 0xba, 0x07, 0xf2, 0x9d, 0xb8, 0x13, 0xf2, 0xd1, 0x25, 0x32, 0x37, + 0xd8, 0x5b, 0x58, 0x6b, 0x3f, 0x47, 0x01, 0xa4, 0x30, 0x69, 0x1c, 0xce, + 0xa8, 0x4f, 0xb1, 0xd6, 0xe5, 0x07, 0x72, 0xea, 0x5a, 0x3d, 0x36, 0x73, + 0xab, 0xb9, 0x3f, 0x72, 0x36, 0x23, 0xa9, 0x6d, 0x56, 0xb8, 0xb9, 0xcf, + 0xac, 0x98, 0x25, 0xed, 0x2c, 0xe0, 0xfc, 0x75, 0xd1, 0x0f, 0x23, 0x15, + 0xf5, 0x56, 0x5d, 0x45, 0xa3, 0xd3, 0x71, 0xdf, 0x75, 0xa0, 0x03, 0x63, + 0x8c, 0xfb, 0x18, 0xdf, 0xdd, 0x09, 0x29, 0xcf, 0xeb, 0x35, 0x16, 0xd3, + 0x4d, 0xc5, 0xa5, 0xb0, 0xf7, 0x07, 0x03, 0xc8, 0x27, 0xc9, 0x5c, 0xe9, + 0x84, 0xbf, 0x1e, 0x5a, 0x41, 0x2d, 0x23, 0xcc, 0x81, 0xcc, 0x80, 0xaa, + 0x75, 0x5a, 0x2f, 0xfb, 0x1b, 0xaf, 0x92, 0xea, 0x5d, 0x04, 0xb9, 0xc6, + 0x61, 0xe1, 0xdb, 0x48, 0xf2, 0x42, 0xe9, 0x85, 0xd6, 0xb1, 0xc6, 0xbb, + 0x3d, 0x37, 0xd7, 0x0e, 0x63, 0xa6, 0x1b, 0xfd, 0xa4, 0x94, 0xde, 0xbd, + 0xb6, 0xdb, 0x65, 0x6d, 0x23, 0x73, 0x8d, 0x83, 0x6c, 0x48, 0xdc, 0x06, + 0xa6, 0x27, 0xe0, 0xae, 0xe3, 0xbe, 0x80, 0xe8, 0xb9, 0xe1, 0xef, 0x69, + 0xd1, 0x8d, 0xd7, 0xdd, 0xe0, 0x4f, 0xe5, 0x55, 0x1f, 0x63, 0x08, 0xa5, + 0xc3, 0x5b, 0x5b, 0x67, 0xbd, 0xc3, 0xe8, 0xf0, 0x5b, 0xfc, 0x54, 0xed, + 0x0c, 0xc5, 0xae, 0xb7, 0x31, 0xae, 0x36, 0x58, 0x00, 0xda, 0xd8, 0x27, + 0x68, 0x3a, 0xc0, 0xed, 0x29, 0x29, 0xc6, 0xfa, 0xe1, 0x7b, 0x9f, 0x6e, + 0x2b, 0x8e, 0x83, 0xe9, 0x31, 0xa3, 0x40, 0x06, 0xe8, 0xed, 0xf0, 0x59, + 0x59, 0xd5, 0x7a, 0x91, 0x93, 0x58, 0x97, 0x30, 0x06, 0xda, 0xdf, 0x0f, + 0x02, 0xae, 0x7d, 0x6b, 0xb5, 0xcf, 0xc9, 0xa1, 0xc4, 0x6d, 0x68, 0x60, + 0xda, 0xcf, 0xdc, 0x00, 0x9f, 0x6c, 0xac, 0xd7, 0x66, 0x1c, 0x6c, 0xc6, + 0xbd, 0xda, 0xd4, 0xf0, 0x1b, 0x63, 0x7c, 0x5a, 0x42, 0x4a, 0x6c, 0x6f, + 0x02, 0x9b, 0x1c, 0xd3, 0xf4, 0x8b, 0x67, 0x9e, 0xca, 0xbd, 0x4f, 0x8b, + 0x98, 0x4f, 0x73, 0x28, 0xf9, 0x75, 0xd7, 0x8d, 0x5b, 0x9b, 0xa0, 0xa9, + 0xf0, 0xe6, 0x3a, 0x7e, 0x93, 0x4f, 0xf7, 0x29, 0x63, 0x60, 0x63, 0x67, + 0xdd, 0x8f, 0x47, 0x4d, 0xca, 0x16, 0x5e, 0xe0, 0x4d, 0x8d, 0xb4, 0x7a, + 0x7b, 0x60, 0xcf, 0xb4, 0x1f, 0x01, 0xe6, 0x92, 0x9a, 0x87, 0x2b, 0x23, + 0x13, 0x30, 0xd9, 0x8e, 0xf3, 0x5b, 0x9c, 0x20, 0x96, 0x98, 0x31, 0x3c, + 0x4f, 0xc9, 0x6c, 0x74, 0x3f, 0x43, 0x2c, 0xd6, 0xcc, 0x96, 0x8c, 0x50, + 0xfb, 0x4d, 0xd4, 0x06, 0x38, 0x97, 0xd9, 0xb4, 0x87, 0x9d, 0x1f, 0x3e, + 0xd0, 0x47, 0x2b, 0x17, 0xab, 0x57, 0x6f, 0xed, 0x67, 0xe1, 0xb0, 0x43, + 0xeb, 0x70, 0xa8, 0x6a, 0x20, 0xc7, 0x79, 0xfc, 0x55, 0x8f, 0xab, 0x6c, + 0x65, 0x7d, 0x53, 0x12, 0xd7, 0x12, 0xf7, 0x3b, 0xd5, 0x96, 0x0d, 0x21, + 0xad, 0x6c, 0x34, 0xcf, 0x99, 0x94, 0x94, 0xf7, 0x4e, 0xca, 0x14, 0xb8, + 0x35, 0xa4, 0x38, 0x19, 0x15, 0xb4, 0x68, 0x67, 0x93, 0xca, 0x0e, 0xea, + 0x8b, 0x1c, 0x4e, 0xe0, 0xe3, 0xc9, 0xd0, 0x73, 0xc6, 0x88, 0x39, 0x16, + 0x52, 0xeb, 0x18, 0x29, 0x6e, 0xf7, 0xb7, 0xdc, 0x4c, 0xc3, 0x5b, 0x07, + 0xcf, 0x95, 0x6d, 0xdb, 0xae, 0xd8, 0xe6, 0x08, 0x6d, 0x60, 0xc8, 0xec, + 0x7b, 0xfd, 0x27, 0x76, 0x94, 0x94, 0xd7, 0xf5, 0x6b, 0x6b, 0x6c, 0x73, + 0x98, 0xe0, 0x60, 0xc3, 0xe4, 0x44, 0x11, 0x07, 0xe6, 0xab, 0x37, 0x2a, + 0xc7, 0x34, 0x5c, 0xd9, 0x69, 0x64, 0x32, 0xc7, 0x7e, 0x70, 0x69, 0x9d, + 0x84, 0x1f, 0xc1, 0x58, 0xac, 0x1a, 0x9c, 0x34, 0x75, 0xb2, 0x26, 0x59, + 0x0e, 0x69, 0x2e, 0xd0, 0x0e, 0xc8, 0x2d, 0xba, 0x6f, 0xf4, 0xdd, 0xb5, + 0xb5, 0x5c, 0x0b, 0x7d, 0x38, 0x69, 0x25, 0xdc, 0xb4, 0xbb, 0x98, 0xf0, + 0x09, 0x29, 0x88, 0x0e, 0x1b, 0x0c, 0x3a, 0x47, 0xb9, 0xed, 0x20, 0xcc, + 0xf2, 0x23, 0xe2, 0xa5, 0x65, 0xa4, 0x07, 0x86, 0xf1, 0x12, 0x47, 0x12, + 0x5a, 0x67, 0x52, 0x7c, 0x93, 0x91, 0x61, 0xa1, 0xcc, 0x20, 0x1d, 0xed, + 0xf6, 0x3d, 0xa6, 0x5c, 0x40, 0xf1, 0xf9, 0xa1, 0x5d, 0x61, 0x6b, 0x03, + 0x27, 0xe9, 0xb4, 0xb8, 0x88, 0x3a, 0xe9, 0x1f, 0x79, 0x49, 0x49, 0xdb, + 0x69, 0x15, 0x6d, 0x69, 0x06, 0x23, 0x47, 0x6b, 0x00, 0xfd, 0xe8, 0x51, + 0x5f, 0xa9, 0xf2, 0xdb, 0xba, 0x74, 0xe6, 0x67, 0x6f, 0xc7, 0xcd, 0x57, + 0xf5, 0x9e, 0xf6, 0xb4, 0x35, 0xde, 0x9b, 0x44, 0x4b, 0x08, 0x03, 0x41, + 0xc3, 0xa4, 0x95, 0x1f, 0x4e, 0xbd, 0x9e, 0xb4, 0x37, 0x6f, 0xd3, 0x8f, + 0x51, 0xb1, 0xbe, 0x78, 0xfe, 0x29, 0x29, 0xb6, 0xfc, 0x9b, 0x6d, 0x6b, + 0x9a, 0xdb, 0x0b, 0x9c, 0xc0, 0x37, 0x30, 0x1f, 0x70, 0x03, 0x4d, 0xdc, + 0x29, 0xd9, 0x53, 0x1a, 0xd1, 0x6b, 0x5e, 0x62, 0xcf, 0xa5, 0x02, 0x46, + 0x9d, 0x88, 0xf1, 0x54, 0x71, 0xad, 0xc9, 0x79, 0x7b, 0x6b, 0x04, 0xd4, + 0xe2, 0x0e, 0xe7, 0x08, 0x0e, 0xdb, 0xa1, 0x25, 0x1a, 0xaa, 0xec, 0xad, + 0xed, 0x6d, 0xa7, 0xd4, 0x93, 0xab, 0xdc, 0xed, 0x07, 0x10, 0x12, 0x53, + 0x77, 0xd5, 0x67, 0xa0, 0x29, 0x63, 0xdc, 0xf8, 0x3b, 0xab, 0x83, 0xab, + 0x4f, 0x98, 0x53, 0xf5, 0x6d, 0x67, 0xe9, 0x00, 0x35, 0xf6, 0x3a, 0xf2, + 0x7e, 0x05, 0x26, 0x54, 0xd6, 0xb0, 0x16, 0xb8, 0x4f, 0x3e, 0x33, 0xf0, + 0x55, 0xac, 0xba, 0x8a, 0x2e, 0x7b, 0x2f, 0x2f, 0xb5, 0xe7, 0x68, 0x69, + 0x07, 0x6b, 0x1b, 0xb8, 0x76, 0x03, 0xc1, 0x25, 0x30, 0xb1, 0xd9, 0x16, + 0x82, 0xf9, 0x23, 0x71, 0x30, 0xd0, 0x35, 0x81, 0xa4, 0x08, 0xec, 0x4a, + 0x4f, 0xac, 0xbb, 0xd8, 0xe2, 0x2b, 0x2f, 0x1c, 0x9f, 0x15, 0x7e, 0x8c, + 0xb6, 0xec, 0x15, 0xec, 0x1b, 0x5b, 0xa8, 0xb1, 0xba, 0x82, 0xa3, 0xd4, + 0x31, 0xec, 0xbd, 0xd5, 0x9a, 0x1c, 0x03, 0x22, 0x5c, 0xd2, 0x4e, 0xa7, + 0xe0, 0x92, 0x9a, 0x14, 0x3d, 0xf5, 0xfe, 0x7b, 0x9c, 0x00, 0x26, 0x4f, + 0x80, 0x05, 0x63, 0x6d, 0x2f, 0xb1, 0xef, 0x8e, 0x4f, 0x7d, 0x56, 0xfd, + 0xa2, 0xca, 0x58, 0x5b, 0x73, 0x77, 0x34, 0x36, 0x1a, 0x06, 0x86, 0x3c, + 0x95, 0x4f, 0xb2, 0x35, 0xb5, 0x1b, 0xa8, 0x3e, 0xad, 0x6d, 0xd5, 0xc3, + 0xf3, 0xdb, 0xf1, 0x09, 0x29, 0xa8, 0xda, 0x9b, 0x58, 0xdc, 0xed, 0x3c, + 0x50, 0x6d, 0x0e, 0x70, 0x20, 0x70, 0x89, 0x63, 0xdd, 0x6b, 0xa0, 0x0f, + 0x69, 0x51, 0x79, 0x2c, 0x01, 0xb6, 0x83, 0xb5, 0xd3, 0x04, 0x79, 0x24, + 0xa7, 0x3d, 0xe7, 0x63, 0x8b, 0x4e, 0xa3, 0xc9, 0x35, 0x5f, 0x48, 0x4f, + 0x27, 0xee, 0x09, 0xed, 0x6b, 0x9b, 0x36, 0x48, 0x3f, 0xba, 0x3b, 0xa1, + 0x32, 0xc2, 0xfb, 0xb7, 0x0f, 0xa4, 0x7b, 0x1e, 0x12, 0x53, 0x6e, 0xd7, + 0x4d, 0x1b, 0x39, 0x04, 0x1d, 0xc1, 0x67, 0x55, 0x57, 0xb9, 0xac, 0x9f, + 0x6b, 0x9e, 0x01, 0x3e, 0x53, 0x0a, 0xe6, 0x4d, 0xb6, 0x30, 0xb2, 0x6b, + 0xf6, 0x38, 0x46, 0xe6, 0xeb, 0x0a, 0xb6, 0x21, 0x73, 0xf2, 0x2a, 0xac, + 0x09, 0x2e, 0x78, 0x81, 0xf3, 0x49, 0x4f, 0x75, 0x53, 0x05, 0x75, 0xfb, + 0x18, 0x3d, 0x10, 0x0b, 0x7d, 0x46, 0xf2, 0xd2, 0x34, 0xf0, 0x50, 0x0e, + 0xab, 0xd4, 0x26, 0xed, 0xbe, 0xd1, 0x0d, 0x0c, 0x8f, 0x7c, 0x0d, 0xc5, + 0x49, 0xf9, 0xe2, 0xfb, 0x4b, 0x6d, 0x6d, 0x81, 0xd0, 0x08, 0x81, 0xed, + 0x90, 0x74, 0x81, 0xd9, 0x08, 0x63, 0x36, 0xfb, 0xf5, 0x20, 0x47, 0x2d, + 0xed, 0xb4, 0xf6, 0xd0, 0xa4, 0xa6, 0x15, 0x64, 0x55, 0x92, 0xf7, 0x0b, + 0xc1, 0xd8, 0x47, 0xb0, 0x1e, 0xdf, 0x08, 0x3a, 0x22, 0x39, 0xd5, 0x5b, + 0x6d, 0x4c, 0x2e, 0x73, 0x5f, 0x58, 0x20, 0xb8, 0xc9, 0xf6, 0x91, 0x23, + 0x9d, 0x64, 0x76, 0x50, 0xb0, 0xe3, 0xe2, 0x5e, 0xed, 0xa0, 0x06, 0xb2, + 0x77, 0x01, 0x2f, 0xd4, 0xe8, 0x34, 0xe5, 0x35, 0x99, 0x8c, 0x6b, 0x1c, + 0xfd, 0xb2, 0xe6, 0xc3, 0xac, 0x1c, 0x12, 0x07, 0x07, 0x48, 0xd3, 0x54, + 0x94, 0x8a, 0xcb, 0x4b, 0xad, 0x6d, 0x5a, 0xec, 0x1c, 0x03, 0x27, 0xe1, + 0xb8, 0x7c, 0x11, 0xdd, 0x63, 0xeb, 0xb0, 0x3c, 0x10, 0xda, 0xf7, 0x86, + 0x5a, 0xc6, 0xb7, 0x7e, 0xe1, 0xc6, 0xdf, 0x87, 0x9a, 0xad, 0x7f, 0x51, + 0x65, 0xc2, 0x8b, 0xb6, 0xb1, 0xa5, 0xc1, 0xbb, 0x75, 0xe0, 0x8d, 0xda, + 0x4f, 0x8a, 0x88, 0xc8, 0x7d, 0xcc, 0x71, 0xd8, 0xda, 0x2a, 0x73, 0x9a, + 0x1a, 0x7e, 0x94, 0xbb, 0x5d, 0x36, 0xe9, 0xca, 0x4a, 0x6c, 0xf5, 0x4b, + 0x01, 0xc5, 0xbe, 0x9f, 0xb4, 0x82, 0x4b, 0x5c, 0xe1, 0x49, 0x10, 0x5e, + 0x3d, 0xae, 0x10, 0x4e, 0x9a, 0x19, 0x58, 0xfd, 0x1e, 0xc3, 0x2e, 0x63, + 0x40, 0x97, 0x0e, 0x09, 0x22, 0x63, 0xb6, 0x9f, 0x05, 0xb8, 0x31, 0x31, + 0xf2, 0xab, 0x7d, 0x05, 0xc6, 0xac, 0x80, 0x21, 0xa3, 0x69, 0x00, 0xc0, + 0xd0, 0x49, 0x27, 0x4d, 0x57, 0x39, 0xd2, 0x1d, 0xe9, 0xe5, 0x37, 0x76, + 0xa5, 0xaf, 0x20, 0xf6, 0x49, 0x4e, 0xdd, 0xb9, 0x14, 0x51, 0x4b, 0x4b, + 0x2b, 0xe5, 0xcc, 0x73, 0xd8, 0xe1, 0xb0, 0xcb, 0x4e, 0xa0, 0xb6, 0x15, + 0xcf, 0xe7, 0xeb, 0x19, 0x75, 0x5b, 0x01, 0xc4, 0xee, 0x6d, 0xa5, 0xad, + 0x89, 0x1a, 0x0e, 0x3b, 0x76, 0x55, 0xac, 0x21, 0x8c, 0x24, 0x7a, 0x55, + 0x97, 0x98, 0x73, 0xac, 0x7e, 0xe3, 0x07, 0xc0, 0x9f, 0xa4, 0x49, 0xf0, + 0x42, 0xc7, 0x7e, 0x45, 0x4d, 0x73, 0x9e, 0x6b, 0xba, 0x93, 0xa3, 0x2b, + 0xd9, 0x20, 0x1f, 0x37, 0x24, 0xa6, 0xcf, 0xa9, 0x60, 0xca, 0x0e, 0x2d, + 0x16, 0x3e, 0xd6, 0x8a, 0xdc, 0xd8, 0x1b, 0x4b, 0x84, 0x91, 0xaf, 0xc1, + 0x3d, 0x78, 0xf8, 0x4e, 0xca, 0xde, 0x31, 0x58, 0xcc, 0x90, 0x61, 0xee, + 0x2d, 0x0f, 0x20, 0xf3, 0xdc, 0x68, 0x3e, 0x48, 0x4e, 0x35, 0xbe, 0xa0, + 0xf7, 0x49, 0x73, 0x08, 0x73, 0x9b, 0x5c, 0x80, 0xd6, 0xfe, 0x29, 0x85, + 0xc2, 0xab, 0x8d, 0xae, 0x70, 0xd6, 0x03, 0x5e, 0xe7, 0x3e, 0x4b, 0x62, + 0x5a, 0x06, 0xe8, 0x1c, 0x1e, 0xc9, 0x29, 0xc1, 0xbe, 0x86, 0xe4, 0xdf, + 0x99, 0xd2, 0xc9, 0x8c, 0x8c, 0x6b, 0x5d, 0x6e, 0x29, 0x20, 0x7d, 0x12, + 0x77, 0x6d, 0xf0, 0xee, 0x81, 0xf5, 0x7f, 0x2b, 0x7f, 0x5d, 0xa0, 0x5d, + 0x8f, 0x50, 0xb5, 0xa4, 0xc3, 0x98, 0xdd, 0x85, 0xa5, 0x8d, 0x77, 0xe6, + 0xb2, 0x1b, 0xf8, 0x28, 0xf5, 0xfb, 0xdd, 0x8d, 0xd6, 0x99, 0x99, 0x41, + 0x87, 0x6d, 0x63, 0xa7, 0x89, 0x89, 0x69, 0xfc, 0x8b, 0x47, 0x13, 0x19, + 0xb9, 0x1d, 0x53, 0x13, 0xab, 0xe0, 0xc6, 0xc7, 0x93, 0xeb, 0x0f, 0xdc, + 0x7e, 0xd2, 0x26, 0x12, 0x52, 0x5f, 0xac, 0xc1, 0xf8, 0x79, 0xb6, 0x75, + 0x0a, 0x9c, 0x1a, 0xd7, 0x54, 0xc0, 0xc0, 0xc6, 0x00, 0x4d, 0x8e, 0xf6, + 0x3b, 0xf4, 0x80, 0x69, 0xc2, 0x17, 0xd5, 0xeb, 0x9e, 0xfc, 0xca, 0xdb, + 0x65, 0x8f, 0x04, 0x62, 0xba, 0xc1, 0x4c, 0xc9, 0x7b, 0x89, 0x8d, 0xce, + 0x3f, 0x03, 0x31, 0xf0, 0x5a, 0x1d, 0x58, 0xbb, 0x2a, 0xfc, 0x5c, 0x2b, + 0xed, 0x14, 0x8b, 0x8b, 0xd9, 0x63, 0xa2, 0x43, 0xda, 0xc8, 0x76, 0xc7, + 0x0f, 0x30, 0x34, 0xf3, 0x85, 0x8f, 0xf5, 0x65, 0xf4, 0x5f, 0xd6, 0x72, + 0x9f, 0x5d, 0x6e, 0xd8, 0xea, 0xdc, 0x6a, 0x6b, 0x9d, 0xee, 0x00, 0x39, + 0xbf, 0x9c, 0x04, 0x24, 0xa7, 0xa4, 0x0d, 0x75, 0x8c, 0x05, 0xa2, 0x36, + 0x4e, 0xd2, 0xe1, 0x12, 0x0f, 0xfb, 0x41, 0x52, 0x6b, 0x7d, 0x36, 0x06, + 0x18, 0x7c, 0x9d, 0xae, 0x68, 0xd5, 0xce, 0x9e, 0xd2, 0x79, 0x0a, 0xcb, + 0x6c, 0xaa, 0xf1, 0x5d, 0x6f, 0x27, 0xe8, 0x17, 0x0f, 0x09, 0xe7, 0x5f, + 0x14, 0x11, 0x5b, 0x45, 0xc0, 0x35, 0xc3, 0x51, 0xb8, 0x69, 0x0d, 0x00, + 0x89, 0x11, 0x01, 0x25, 0x35, 0x33, 0x2f, 0xb9, 0x96, 0xb6, 0xb6, 0x81, + 0xb5, 0xad, 0x1b, 0xaa, 0x10, 0x37, 0x38, 0x9f, 0xcf, 0x70, 0xf0, 0x1d, + 0x92, 0xf4, 0x9e, 0xf6, 0x8b, 0x5b, 0x5e, 0xf6, 0x02, 0x26, 0xa8, 0x68, + 0x35, 0x7f, 0x24, 0xed, 0xd7, 0xe6, 0x8d, 0x6e, 0x23, 0x72, 0x58, 0xd7, + 0xd8, 0xd8, 0x70, 0x20, 0x3c, 0xfd, 0x12, 0xde, 0xfa, 0x47, 0x3a, 0x23, + 0xd5, 0x48, 0xad, 0xaf, 0x7d, 0x36, 0x10, 0xca, 0xc0, 0xdf, 0x59, 0x00, + 0xb5, 0xdb, 0xbb, 0x4f, 0x74, 0x94, 0x91, 0xbb, 0x3d, 0x72, 0x6c, 0xac, + 0x6f, 0x60, 0x0e, 0xae, 0xc6, 0x9d, 0xc6, 0x08, 0x98, 0x25, 0x57, 0xbb, + 0x1b, 0xd6, 0xc9, 0x2f, 0xae, 0x1a, 0xee, 0x4b, 0x89, 0x82, 0x1a, 0xe1, + 0xf9, 0xb2, 0xa6, 0x2c, 0xfd, 0x11, 0x71, 0x69, 0x63, 0xa9, 0x2e, 0xf4, + 0xda, 0x3b, 0xb0, 0xeb, 0xb0, 0xfc, 0x0a, 0x8e, 0x4d, 0x6f, 0x37, 0x3a, + 0x96, 0x8d, 0x5c, 0xcf, 0x69, 0x71, 0x80, 0x23, 0x50, 0x49, 0x49, 0x4d, + 0x5f, 0xb1, 0xd4, 0xf2, 0x32, 0x32, 0x71, 0x40, 0xb4, 0x98, 0x7b, 0xe9, + 0x78, 0xf7, 0x83, 0xfb, 0xc0, 0x80, 0x0f, 0xc8, 0x2b, 0x1f, 0x63, 0x7f, + 0xd9, 0xf6, 0xef, 0xa3, 0xd3, 0xf5, 0x37, 0x7a, 0x5e, 0x99, 0x9d, 0x9f, + 0xd6, 0xe6, 0x50, 0x6a, 0x65, 0xf6, 0x36, 0xbf, 0xb5, 0x5a, 0x0b, 0xd8, + 0xf2, 0xe6, 0x58, 0xc3, 0xed, 0xda, 0x34, 0x21, 0xdf, 0x14, 0x3f, 0xb4, + 0x64, 0x6e, 0xf5, 0xf7, 0x9d, 0x9b, 0xfe, 0x94, 0x7b, 0x66, 0x66, 0x25, + 0x25, 0x35, 0xf3, 0x1c, 0x2b, 0x6b, 0x1a, 0x1e, 0xd3, 0x50, 0x6c, 0xfb, + 0x35, 0x93, 0xde, 0x50, 0xdb, 0x95, 0x6b, 0x6b, 0x34, 0x5b, 0xfa, 0x3a, + 0xdf, 0x07, 0xd3, 0x20, 0x12, 0x7c, 0xf8, 0x2a, 0xaf, 0x53, 0xc8, 0xc4, + 0x65, 0x85, 0xb8, 0xa4, 0xbe, 0xf6, 0x9d, 0xd6, 0xb4, 0xf1, 0x59, 0xfa, + 0x3a, 0xf8, 0x92, 0x7e, 0xe4, 0x3c, 0x02, 0xdb, 0x2d, 0x0f, 0xb1, 0xa4, + 0xba, 0xad, 0x43, 0x7b, 0x12, 0x22, 0x1b, 0x0d, 0x1e, 0x29, 0x29, 0xdb, + 0x65, 0xb9, 0x77, 0x58, 0xda, 0xa8, 0x6f, 0xe8, 0x59, 0xa7, 0xa8, 0xc0, + 0x5b, 0x22, 0x3c, 0x75, 0x4a, 0xdb, 0x45, 0x21, 0xf7, 0xe5, 0x56, 0xdf, + 0x54, 0xb8, 0xb6, 0xba, 0x8f, 0x27, 0x6e, 0x9b, 0x9d, 0xa7, 0x0a, 0x15, + 0x5b, 0x97, 0x53, 0x9d, 0xe9, 0x17, 0x1a, 0x9e, 0x0b, 0x84, 0x70, 0x0c, + 0xf1, 0xee, 0xf3, 0xf0, 0x42, 0x2e, 0xbb, 0x26, 0x99, 0xbc, 0x17, 0xdd, + 0x43, 0xdc, 0xd7, 0x33, 0x4f, 0x88, 0x49, 0x4d, 0x8c, 0x1b, 0x89, 0x68, + 0x71, 0x10, 0xd8, 0xda, 0x7b, 0x36, 0x15, 0xb6, 0x39, 0xec, 0x24, 0xef, + 0x3e, 0x4c, 0x02, 0x00, 0x54, 0x71, 0x9e, 0x20, 0xd4, 0x5e, 0xd6, 0x9e, + 0x43, 0x75, 0x89, 0xf0, 0x05, 0xca, 0xfd, 0x2e, 0x04, 0x83, 0x67, 0xb8, + 0x79, 0x10, 0x35, 0xf9, 0xa4, 0xa4, 0x59, 0x65, 0xce, 0xac, 0x3a, 0xcd, + 0x49, 0x99, 0x59, 0xbe, 0xad, 0x95, 0xd8, 0x2c, 0xa8, 0xec, 0x73, 0x7b, + 0x8f, 0xe2, 0xb5, 0x73, 0x62, 0xc6, 0xc3, 0x1a, 0xe6, 0xb4, 0x4e, 0xd9, + 0xee, 0x07, 0x70, 0xb1, 0xad, 0xb0, 0x00, 0xe0, 0x39, 0x09, 0x29, 0xb4, + 0xd1, 0x5e, 0x5f, 0xe9, 0x2a, 0x68, 0x66, 0x46, 0xbb, 0xea, 0x1c, 0x3f, + 0xcd, 0xbf, 0xdc, 0xa9, 0xe6, 0x38, 0x7a, 0x6d, 0x6f, 0xd0, 0x20, 0xf0, + 0xab, 0xb2, 0xf7, 0x36, 0x1e, 0xd7, 0x6d, 0x70, 0x32, 0x08, 0xe4, 0x42, + 0xd3, 0xc7, 0xb3, 0x17, 0xae, 0xb0, 0xd1, 0x61, 0x6d, 0x1d, 0x4c, 0x0f, + 0xd1, 0xbf, 0xf3, 0x6d, 0x8f, 0x1f, 0x34, 0x94, 0xe1, 0x5a, 0xc6, 0xf3, + 0x33, 0xac, 0x42, 0x03, 0x98, 0x58, 0xf9, 0xed, 0xd8, 0xa3, 0xe5, 0xd1, + 0x91, 0x89, 0x69, 0xa7, 0x25, 0xa5, 0x97, 0x36, 0x77, 0x34, 0xff, 0x00, + 0x05, 0x57, 0x1b, 0x20, 0x96, 0xbe, 0xb3, 0xa8, 0x3e, 0xe0, 0x3c, 0xc2, + 0x4a, 0x4c, 0xe7, 0x10, 0xcb, 0x09, 0x33, 0x30, 0x15, 0xbf, 0xaa, 0xd8, + 0xf5, 0xdb, 0xd5, 0xc5, 0xb6, 0x98, 0x65, 0x0d, 0x2e, 0x02, 0x26, 0x5e, + 0x7d, 0xad, 0x1f, 0x8a, 0xa3, 0x74, 0x1a, 0xc3, 0xab, 0x92, 0xcf, 0xce, + 0x1d, 0xdb, 0xf1, 0x5d, 0x0f, 0xd5, 0xec, 0x53, 0x8d, 0x8c, 0xcb, 0x8b, + 0x0b, 0xac, 0xb4, 0xfa, 0x85, 0xbc, 0x0d, 0x9c, 0x37, 0x54, 0x94, 0xec, + 0xe5, 0x65, 0x32, 0xbc, 0x93, 0x4b, 0x9a, 0xd1, 0x58, 0x63, 0x5c, 0xf7, + 0x9e, 0x46, 0xe2, 0x43, 0x47, 0xe0, 0xa8, 0x66, 0xb9, 0xd8, 0xd6, 0x01, + 0x57, 0xb5, 0xcf, 0xd4, 0x39, 0xa3, 0x5f, 0x1e, 0x38, 0x57, 0x1d, 0x4b, + 0x6d, 0xca, 0xb6, 0xe7, 0x99, 0x0f, 0xae, 0x76, 0xc7, 0x61, 0x22, 0x15, + 0x57, 0x63, 0xb5, 0xf2, 0xc0, 0xf2, 0xdd, 0xad, 0x86, 0x92, 0x74, 0xd7, + 0x5f, 0xf6, 0x24, 0xa6, 0xb9, 0xc9, 0xae, 0xc0, 0x47, 0xa6, 0x19, 0x63, + 0x01, 0x73, 0x9d, 0xb4, 0xc9, 0x20, 0x49, 0xf6, 0x85, 0x51, 0x8d, 0x65, + 0x9a, 0xbd, 0xb6, 0x17, 0x9a, 0xdd, 0x5b, 0x5a, 0xd9, 0x00, 0x87, 0x70, + 0x01, 0xfe, 0x4a, 0xb0, 0xfc, 0x7b, 0x59, 0x67, 0xb4, 0xfb, 0x6c, 0x6e, + 0xcd, 0x3f, 0xd7, 0xba, 0xbb, 0x46, 0x36, 0x5e, 0xdf, 0xa2, 0xd6, 0x59, + 0x5b, 0x40, 0x6b, 0xdd, 0xa1, 0x03, 0xf3, 0xa0, 0x84, 0x94, 0xe6, 0xb7, + 0x11, 0xb5, 0x52, 0x1d, 0x46, 0xe8, 0xac, 0x41, 0x69, 0xfa, 0x4d, 0x27, + 0x9e, 0x7b, 0xa1, 0xd5, 0xf6, 0x8a, 0x99, 0x60, 0xb2, 0xa2, 0x5c, 0xf1, + 0xb6, 0xa6, 0x93, 0x26, 0x4e, 0x9b, 0x9c, 0x7b, 0x7c, 0x42, 0xda, 0xfb, + 0x3d, 0x15, 0xbb, 0xd4, 0xb9, 0xc4, 0xbd, 0xda, 0x39, 0xd2, 0x48, 0xd5, + 0x40, 0xd9, 0x83, 0x93, 0x60, 0xa0, 0x50, 0xf7, 0x33, 0x69, 0x97, 0x97, + 0xc0, 0xd3, 0xc8, 0x6b, 0xaf, 0x8a, 0x4a, 0x68, 0xe1, 0x88, 0xdf, 0x49, + 0xc8, 0xd8, 0xf7, 0x90, 0xe1, 0x70, 0x1b, 0xcb, 0x74, 0x8f, 0x29, 0x82, + 0x16, 0x5d, 0x6d, 0xf4, 0x3a, 0xad, 0xd5, 0xee, 0x0e, 0xd9, 0x64, 0x87, + 0x0e, 0x1c, 0x26, 0x41, 0x1f, 0x15, 0xb8, 0xdc, 0x7c, 0x66, 0xd8, 0x5b, + 0x8f, 0x8c, 0x1a, 0x1b, 0xf4, 0x8b, 0x9d, 0xa3, 0x40, 0xe3, 0x55, 0x85, + 0xd5, 0x5a, 0x68, 0xea, 0xef, 0x9d, 0x37, 0xb5, 0xaf, 0xd3, 0xcc, 0x24, + 0xa7, 0x6b, 0x27, 0x0f, 0x6b, 0x8e, 0x43, 0x2d, 0x7b, 0xb1, 0xee, 0x7e, + 0xdd, 0xae, 0xd4, 0xd4, 0xe3, 0xa9, 0x69, 0xfe, 0x4c, 0x6a, 0x0a, 0xaf, + 0x9b, 0x8b, 0x63, 0x4b, 0x4d, 0x4e, 0x2d, 0x2e, 0x31, 0x5b, 0xc4, 0xb0, + 0xb8, 0x01, 0x20, 0xee, 0x6f, 0x75, 0x79, 0xae, 0xdd, 0x8a, 0x5c, 0x1c, + 0x3d, 0x3b, 0x58, 0xd6, 0x5d, 0x5c, 0x9d, 0x5a, 0xe1, 0xa1, 0xf2, 0x20, + 0xa2, 0xe0, 0x74, 0xe0, 0x40, 0xad, 0xad, 0x65, 0x6c, 0xac, 0x92, 0xc9, + 0x3b, 0x84, 0x9f, 0x29, 0xd7, 0xc9, 0x25, 0x20, 0xc5, 0xcb, 0xc9, 0xc7, + 0xb8, 0x51, 0x90, 0x3d, 0x7c, 0x8a, 0xbd, 0xaf, 0x74, 0x82, 0xe8, 0x70, + 0x9d, 0xae, 0x3c, 0x39, 0x1a, 0xde, 0x95, 0x4d, 0xcd, 0x07, 0x10, 0x3a, + 0xaa, 0xc1, 0xdc, 0x6a, 0x24, 0x96, 0x35, 0xd3, 0x3a, 0x4f, 0x1c, 0x98, + 0x51, 0x3d, 0x14, 0x6c, 0xba, 0xc2, 0xf6, 0xba, 0x1e, 0x5f, 0x71, 0x0e, + 0xdc, 0x63, 0xe9, 0x06, 0x8d, 0x34, 0x27, 0xcd, 0x58, 0xc1, 0xa7, 0x19, + 0xf1, 0x6b, 0x9c, 0x58, 0x4f, 0xe6, 0xc9, 0x80, 0x3f, 0x32, 0x7c, 0x4c, + 0xf8, 0x94, 0x94, 0xf2, 0x3f, 0x58, 0x6a, 0x7e, 0x56, 0x5d, 0x6c, 0x0d, + 0x6e, 0x38, 0xa9, 0x81, 0x8e, 0x7d, 0x8e, 0x21, 0xa4, 0x97, 0x12, 0xdf, + 0x71, 0x1d, 0xd1, 0x7a, 0x0d, 0xd5, 0x74, 0xdc, 0xbf, 0xb1, 0xdf, 0x6b, + 0x8b, 0xee, 0x20, 0x06, 0x01, 0xec, 0xdc, 0xee, 0x36, 0xbb, 0xb8, 0xf3, + 0xfb, 0x97, 0x43, 0xd5, 0xfe, 0xab, 0x57, 0x99, 0x7b, 0x6f, 0x75, 0x96, + 0x1b, 0x20, 0x7a, 0x91, 0xee, 0xdc, 0x07, 0xdc, 0x04, 0xf9, 0x2c, 0xca, + 0x7e, 0xae, 0xdd, 0x0e, 0xc6, 0xcb, 0x75, 0x6d, 0x65, 0x76, 0x13, 0x89, + 0x7b, 0x74, 0xb5, 0x84, 0x19, 0xf8, 0x16, 0xf8, 0x83, 0xf1, 0x49, 0x49, + 0x7a, 0xbd, 0x8d, 0xfb, 0x45, 0x2d, 0x6e, 0xcb, 0x1e, 0xe6, 0x3b, 0xda, + 0xe7, 0x43, 0xda, 0xe1, 0x05, 0x8e, 0x6c, 0xf8, 0x44, 0x18, 0xf1, 0x58, + 0x9d, 0x19, 0xd9, 0x18, 0x9d, 0x66, 0x5a, 0x07, 0xa6, 0xf3, 0xe9, 0xfb, + 0x80, 0xd5, 0x8f, 0x82, 0xdf, 0x87, 0x65, 0xd0, 0xdf, 0x85, 0x5b, 0xb6, + 0xb7, 0x30, 0x36, 0xd2, 0xc2, 0x5c, 0xc2, 0x0e, 0xe7, 0x34, 0x78, 0x12, + 0xdd, 0x27, 0xc5, 0x1d, 0xa2, 0xb7, 0x57, 0x58, 0x65, 0x6d, 0x63, 0x04, + 0x32, 0x62, 0x4c, 0xb7, 0xe8, 0xea, 0x3c, 0x92, 0x53, 0x65, 0xf8, 0xd8, + 0xb5, 0x1a, 0x32, 0x5d, 0x6b, 0x81, 0x71, 0xda, 0xf6, 0x81, 0x20, 0x16, + 0xea, 0x14, 0x9d, 0x91, 0x83, 0x8f, 0x68, 0xaf, 0xd4, 0x22, 0xc6, 0xe9, + 0x5e, 0xe1, 0xba, 0x41, 0x13, 0xc3, 0x4e, 0xba, 0x14, 0x1c, 0x9a, 0x72, + 0x4e, 0x2c, 0xb3, 0x6d, 0x81, 0xf6, 0x89, 0xa8, 0xbb, 0x69, 0x2c, 0x8d, + 0x7e, 0x29, 0x66, 0x57, 0x8e, 0x5b, 0x55, 0x8e, 0x70, 0x16, 0x38, 0x6c, + 0x0c, 0xfd, 0xd2, 0xc3, 0x0e, 0xd0, 0x76, 0xe0, 0x24, 0xa6, 0xc5, 0xde, + 0x93, 0x71, 0xec, 0x78, 0xba, 0x1b, 0xf4, 0x8b, 0x9b, 0x21, 0xf2, 0x3b, + 0x00, 0x7e, 0x0a, 0x0c, 0x68, 0xb3, 0x18, 0x0d, 0xfe, 0x9b, 0x1a, 0x0d, + 0xaf, 0x71, 0x3a, 0x96, 0x47, 0xb0, 0x7c, 0x4c, 0xa0, 0xda, 0xd7, 0xfa, + 0x66, 0xb6, 0x33, 0x79, 0xb3, 0xe8, 0xf8, 0xb4, 0x46, 0xd9, 0x3f, 0x08, + 0x43, 0xab, 0xed, 0x2e, 0xa1, 0x86, 0xb6, 0xba, 0xc6, 0x35, 0x8d, 0xda, + 0xdd, 0xa4, 0x8d, 0x3c, 0xc2, 0x4a, 0x42, 0xcb, 0x6f, 0x81, 0xb7, 0x7b, + 0x1e, 0xd7, 0xee, 0x69, 0x22, 0x0b, 0x8f, 0xf2, 0x7e, 0xf5, 0x6a, 0xfb, + 0x9c, 0xff, 0x00, 0x46, 0xcb, 0x60, 0x11, 0xa3, 0x8c, 0xc8, 0x20, 0x19, + 0x43, 0x75, 0xb6, 0x3d, 0x8d, 0x1b, 0x03, 0xec, 0x2e, 0x87, 0x38, 0xc6, + 0xd9, 0xe4, 0xeb, 0x3a, 0x9f, 0x20, 0xa5, 0x69, 0x61, 0xa5, 0x9b, 0x87, + 0xb8, 0x13, 0xb9, 0xbe, 0x71, 0x3c, 0x76, 0x49, 0x4b, 0xd7, 0x8a, 0x5c, + 0xe7, 0x97, 0x57, 0xe9, 0x56, 0x40, 0xdc, 0xf6, 0xb8, 0x12, 0xe6, 0xf1, + 0x01, 0xb2, 0x3e, 0xe0, 0x9f, 0xec, 0x59, 0x11, 0x3e, 0xa5, 0x7f, 0x64, + 0x8d, 0xde, 0xbf, 0x79, 0xe3, 0x6e, 0xc8, 0xe5, 0x2a, 0xeb, 0x70, 0x7e, + 0xe1, 0x24, 0x96, 0x81, 0xce, 0x9e, 0x33, 0x07, 0xe2, 0x9f, 0xd6, 0x1e, + 0xb7, 0xa1, 0x0e, 0xf5, 0xb8, 0xd9, 0x3e, 0xcf, 0xf3, 0xbc, 0x61, 0x25, + 0x39, 0x97, 0xe3, 0xde, 0xdb, 0x5f, 0x91, 0xd3, 0xa4, 0xf0, 0x59, 0x6b, + 0x9c, 0x0f, 0xb5, 0xda, 0x90, 0x59, 0x12, 0x7c, 0x51, 0x6a, 0xa3, 0x25, + 0xff, 0x00, 0xa7, 0xb5, 0xf6, 0x54, 0x49, 0xda, 0x6d, 0xb0, 0x80, 0xf8, + 0x89, 0x30, 0x1b, 0xc0, 0xd5, 0x4e, 0xec, 0x7b, 0xb7, 0xee, 0x05, 0xe7, + 0x1d, 0xc7, 0x70, 0xc7, 0x86, 0xb5, 0xe1, 0xbc, 0x31, 0xb1, 0xd9, 0x13, + 0x31, 0xd6, 0x1d, 0x96, 0x07, 0x16, 0xd5, 0x51, 0x0d, 0x32, 0x3f, 0x34, + 0x08, 0x9d, 0x7b, 0x93, 0xdd, 0x25, 0x36, 0x2c, 0x16, 0x1c, 0x02, 0x6a, + 0x7b, 0x8b, 0xc1, 0x1e, 0x99, 0x77, 0x2e, 0xf3, 0xf7, 0x78, 0xac, 0x91, + 0x91, 0x96, 0xcb, 0x5f, 0x4d, 0x75, 0xfa, 0x8f, 0xb7, 0xdc, 0xe7, 0x8e, + 0xd0, 0x3d, 0xda, 0xf6, 0x1a, 0x23, 0xdd, 0xd4, 0xf1, 0x0b, 0xe1, 0xf7, + 0x58, 0x1c, 0x38, 0x6b, 0x84, 0x83, 0x1e, 0x60, 0x84, 0xd5, 0x57, 0x87, + 0x6d, 0x64, 0xb5, 0x96, 0x99, 0x1f, 0x42, 0x61, 0xa6, 0x75, 0xd4, 0xb4, + 0xc9, 0xe5, 0x25, 0x29, 0xd6, 0x17, 0x06, 0xba, 0xe6, 0x0a, 0x9f, 0xba, + 0x24, 0x10, 0x5a, 0xe0, 0x39, 0x2d, 0x78, 0xd1, 0x5c, 0x98, 0x26, 0x35, + 0x6b, 0xc6, 0xe6, 0x19, 0xd0, 0xaa, 0x95, 0x62, 0xd8, 0xfd, 0xde, 0xe0, + 0xc6, 0x09, 0x86, 0x86, 0x1d, 0x23, 0x8d, 0x35, 0x3c, 0x79, 0xa3, 0x32, + 0x92, 0xda, 0xb7, 0xc9, 0x3f, 0xba, 0x75, 0x29, 0x29, 0xb0, 0xc3, 0xa3, + 0x59, 0xb8, 0x3c, 0x8e, 0x40, 0x20, 0x80, 0x4f, 0x3c, 0x2c, 0x5b, 0x9a, + 0xd6, 0x64, 0x5a, 0xc7, 0x0f, 0xce, 0x2b, 0x61, 0xd6, 0xb2, 0x6b, 0x2d, + 0x10, 0xed, 0xa6, 0x7e, 0x23, 0x55, 0x93, 0xd5, 0x88, 0x17, 0xb2, 0xf6, + 0x36, 0x45, 0xa2, 0x67, 0xcf, 0xba, 0x4a, 0x68, 0xd8, 0xdd, 0x8e, 0x20, + 0x70, 0xab, 0xee, 0xf4, 0xec, 0x6b, 0xaa, 0x25, 0xb6, 0x34, 0x82, 0x1c, + 0x3b, 0x10, 0x8f, 0xb4, 0x39, 0xdb, 0x9f, 0x21, 0xb3, 0x24, 0x28, 0x43, + 0x4d, 0x90, 0x06, 0x80, 0x49, 0xf9, 0xa4, 0xa7, 0xa0, 0xa2, 0xcc, 0x6f, + 0xad, 0x38, 0x5f, 0x67, 0xba, 0x2a, 0xea, 0xf8, 0xed, 0xf6, 0x3f, 0x8f, + 0x50, 0x2e, 0x2e, 0xd6, 0x5d, 0x83, 0x98, 0xea, 0xaf, 0x69, 0x65, 0x95, + 0x3a, 0x1e, 0xc3, 0xe4, 0xaf, 0x55, 0x75, 0xb8, 0xb9, 0x63, 0x26, 0x82, + 0x58, 0xfa, 0xcc, 0xb4, 0x8f, 0xc8, 0xba, 0x0e, 0xb1, 0x83, 0x8f, 0xf5, + 0x97, 0xa5, 0xb7, 0xac, 0x62, 0x34, 0x0c, 0xec, 0x71, 0x19, 0x35, 0x8e, + 0x5c, 0x07, 0x3f, 0x77, 0x64, 0x94, 0xf3, 0x75, 0x97, 0xd5, 0xd4, 0xd9, + 0x5d, 0x63, 0x73, 0x2d, 0x2d, 0x6b, 0x58, 0x78, 0x73, 0x5f, 0xdb, 0xf1, + 0x5d, 0xf1, 0x65, 0x74, 0x50, 0x21, 0xa1, 0xad, 0xa9, 0xa1, 0xb1, 0xe4, + 0x34, 0x5c, 0x97, 0x49, 0xa5, 0xb9, 0xae, 0xe9, 0x79, 0x4d, 0x12, 0xfc, + 0x6b, 0x9d, 0x4d, 0xdf, 0xd5, 0x00, 0xd9, 0x59, 0x2b, 0xb5, 0x6d, 0x4d, + 0x2d, 0x75, 0xb9, 0x4e, 0x8a, 0x48, 0xfa, 0x3d, 0xdc, 0x92, 0x9c, 0x8f, + 0x5d, 0xd6, 0xdc, 0xd0, 0xc6, 0x97, 0xbe, 0x36, 0x6a, 0x3c, 0xe7, 0xfd, + 0x4a, 0xba, 0xe3, 0x5d, 0x2d, 0x6f, 0xac, 0x5a, 0xc2, 0x00, 0xdc, 0xd3, + 0xa9, 0xf2, 0x08, 0x39, 0x39, 0x50, 0xe2, 0xcc, 0x7a, 0xc6, 0x3d, 0x7e, + 0x20, 0x7b, 0x88, 0xf3, 0x28, 0x45, 0xd4, 0xb9, 0xbb, 0x80, 0x16, 0x40, + 0xf7, 0x4f, 0x62, 0x92, 0x9b, 0x02, 0xea, 0x1d, 0x36, 0x07, 0x41, 0x27, + 0xb8, 0x4c, 0xeb, 0x60, 0xb9, 0xf5, 0x38, 0x3d, 0xc6, 0x04, 0x97, 0x47, + 0xe0, 0x55, 0x5b, 0x6a, 0x24, 0x7b, 0xa3, 0x67, 0x21, 0xbe, 0x3f, 0x14, + 0xa9, 0x6d, 0x4e, 0x2e, 0xa9, 0xcd, 0x0e, 0x64, 0xcc, 0x73, 0xa8, 0x49, + 0x4c, 0xad, 0x75, 0x4c, 0x25, 0xf7, 0xb1, 0xd2, 0x5e, 0x1a, 0x66, 0x43, + 0x4c, 0xf7, 0x1b, 0x8c, 0x21, 0x5a, 0xfa, 0x9b, 0x94, 0x1a, 0xc7, 0xfb, + 0x5f, 0xf4, 0x58, 0x0c, 0xb6, 0x4f, 0x8e, 0x9c, 0xf8, 0x22, 0x5d, 0x91, + 0x66, 0x3b, 0x18, 0xd6, 0xbb, 0x60, 0x98, 0x7f, 0x04, 0x1d, 0xc7, 0x4f, + 0x69, 0x9f, 0x82, 0x85, 0x19, 0xd8, 0x17, 0xdc, 0xea, 0x2c, 0xc7, 0x6b, + 0x2c, 0x78, 0xd9, 0xea, 0x56, 0xe0, 0xd7, 0x11, 0xf0, 0xf9, 0xf6, 0x49, + 0x4d, 0xb7, 0xe3, 0xd1, 0xe8, 0x45, 0xe7, 0x51, 0x05, 0x90, 0x76, 0xcf, + 0x97, 0x9a, 0xc2, 0xeb, 0x83, 0x12, 0x9c, 0x9c, 0x7b, 0xed, 0xa8, 0xd8, + 0x6d, 0x64, 0x06, 0x87, 0x96, 0x86, 0xc1, 0xe0, 0xf7, 0x5b, 0xec, 0xc3, + 0x0c, 0xa0, 0xb3, 0x1a, 0xd1, 0x94, 0xf6, 0xba, 0x5c, 0x1d, 0x1b, 0x9a, + 0xde, 0x7c, 0xf5, 0xf8, 0x2c, 0x1f, 0xac, 0xd8, 0xd7, 0x33, 0x12, 0x8c, + 0x87, 0xf2, 0xc7, 0x9a, 0xe2, 0x20, 0xed, 0xe4, 0x49, 0x49, 0x4e, 0x8e, + 0x2e, 0x4d, 0x6f, 0xc1, 0x0f, 0xf4, 0x99, 0xb2, 0x03, 0x4b, 0x20, 0xb8, + 0x81, 0x3a, 0x73, 0xca, 0xb5, 0x56, 0x46, 0x23, 0xdb, 0xe9, 0x10, 0x58, + 0xd2, 0x25, 0xa0, 0x1d, 0xba, 0xf7, 0x73, 0x0f, 0x61, 0xe6, 0xb3, 0xbe, + 0xae, 0x38, 0x3f, 0x11, 0xc1, 0xee, 0x3f, 0x48, 0x37, 0x68, 0x12, 0x35, + 0x92, 0x09, 0xf0, 0x57, 0x4b, 0x59, 0x8b, 0xea, 0x71, 0x68, 0x74, 0x10, + 0xc2, 0x08, 0x00, 0xbb, 0x5d, 0xad, 0x89, 0x3c, 0x14, 0x94, 0xc4, 0x74, + 0xfa, 0x83, 0xec, 0x76, 0x3e, 0x45, 0x85, 0xf7, 0x49, 0x79, 0x73, 0xa0, + 0xb8, 0x4c, 0x9d, 0xc2, 0x20, 0xf9, 0x7e, 0x55, 0x2c, 0x76, 0x54, 0x1a, + 0xef, 0x56, 0xe7, 0xba, 0xca, 0x37, 0x3d, 0xed, 0x32, 0xd2, 0x5a, 0xed, + 0x79, 0x11, 0x20, 0x21, 0x9b, 0xaa, 0x82, 0xe7, 0x17, 0x55, 0xb8, 0x8d, + 0x5d, 0xb5, 0x81, 0xb2, 0x3e, 0x8f, 0x78, 0x06, 0x13, 0x63, 0x64, 0xdc, + 0xfd, 0x2f, 0x64, 0x96, 0xfe, 0x8d, 0xe1, 0xe3, 0x56, 0xb1, 0xc7, 0x40, + 0x09, 0xe4, 0x49, 0x49, 0x4c, 0xe9, 0xcd, 0xb8, 0xb5, 0xed, 0x63, 0x9b, + 0x6d, 0x1e, 0xe6, 0x96, 0xd9, 0x0e, 0x88, 0xec, 0x40, 0x87, 0x04, 0x1f, + 0xb7, 0x59, 0xea, 0xb1, 0xaf, 0xa8, 0xd4, 0x6c, 0x24, 0x39, 0xad, 0xed, + 0x02, 0x37, 0xbf, 0x9f, 0xc1, 0x1b, 0xf6, 0x5b, 0x58, 0x1f, 0x60, 0x02, + 0x6c, 0x20, 0xc4, 0x40, 0x2d, 0x6f, 0x79, 0x72, 0x67, 0x30, 0x17, 0x01, + 0x74, 0xb5, 0xcd, 0xe4, 0x9d, 0x34, 0xf1, 0x09, 0x29, 0x6b, 0x6d, 0x67, + 0xda, 0x1d, 0x43, 0x5e, 0xd0, 0xf2, 0x01, 0x63, 0x1c, 0xe3, 0xb9, 0xf0, + 0x21, 0xd1, 0xdb, 0xfb, 0xd1, 0x69, 0x7d, 0x62, 0xb7, 0x31, 0xcd, 0x1b, + 0xa4, 0x11, 0xa6, 0xba, 0x2a, 0xbf, 0xa1, 0xdd, 0x0f, 0xac, 0x38, 0x87, + 0xc3, 0x1e, 0x47, 0xb8, 0x4f, 0x87, 0xe2, 0x8d, 0x5d, 0x1b, 0x5a, 0x5c, + 0xc1, 0xee, 0x26, 0x4b, 0xc7, 0xe7, 0x3b, 0xb9, 0x49, 0x49, 0x99, 0x73, + 0x9f, 0x0e, 0x2d, 0x77, 0xab, 0xc8, 0x3d, 0x9a, 0x11, 0x08, 0x6f, 0xd9, + 0x1e, 0xf2, 0xf6, 0xbd, 0xf5, 0x3b, 0x78, 0x0c, 0x92, 0x5a, 0x5c, 0x23, + 0x4d, 0x23, 0x95, 0x96, 0xfb, 0x1c, 0x32, 0xc9, 0xb5, 0xed, 0x6d, 0x71, + 0x2d, 0x69, 0x9e, 0x4c, 0x09, 0xd3, 0x95, 0x6a, 0x90, 0x1e, 0x2c, 0x0e, + 0x33, 0xea, 0x54, 0x5a, 0xd6, 0x10, 0x4b, 0x4b, 0x9a, 0x77, 0x8e, 0x38, + 0xd0, 0x14, 0x94, 0x84, 0xe7, 0xd8, 0xdc, 0xf1, 0x55, 0x75, 0x7a, 0x0c, + 0x2d, 0x1b, 0xb2, 0x6c, 0xfd, 0x2b, 0xb6, 0xf7, 0xdb, 0x32, 0xd1, 0xe6, + 0x85, 0x73, 0x8e, 0x65, 0x85, 0x86, 0xfb, 0x9e, 0x64, 0x87, 0xba, 0xe2, + 0x59, 0x5f, 0x83, 0x03, 0x23, 0x68, 0xf3, 0x43, 0xb3, 0xa6, 0xe6, 0xdd, + 0x91, 0x55, 0xcd, 0xb4, 0x36, 0x59, 0xfa, 0x46, 0x98, 0x2e, 0x0e, 0x06, + 0x24, 0x37, 0xfa, 0xa1, 0x5c, 0xa7, 0x1e, 0x83, 0x68, 0xad, 0xbe, 0xa9, + 0x0d, 0x06, 0x64, 0x87, 0x82, 0x5b, 0xc7, 0xc1, 0x25, 0x22, 0x65, 0x14, + 0xe3, 0xb6, 0x86, 0xe4, 0x3f, 0xd4, 0x2f, 0x70, 0x0c, 0xf4, 0x64, 0x6a, + 0x1d, 0x3b, 0x9f, 0xae, 0x9e, 0x05, 0x58, 0xc7, 0x2e, 0xfb, 0x3b, 0x2f, + 0x70, 0x10, 0xeb, 0x4b, 0xf6, 0xf9, 0x4f, 0x09, 0xf2, 0x3a, 0x3b, 0x58, + 0xf1, 0x7e, 0xe1, 0xe8, 0x81, 0x15, 0x36, 0x0c, 0xb3, 0xdc, 0x1d, 0x04, + 0xfc, 0x94, 0x89, 0x9c, 0x70, 0xf6, 0x3a, 0x65, 0xc2, 0x07, 0xee, 0xc0, + 0xe0, 0x0f, 0x04, 0x94, 0xcb, 0xa8, 0x3c, 0xb7, 0x2c, 0xd1, 0x57, 0xd0, + 0x6b, 0x1a, 0xe0, 0xf3, 0x33, 0x07, 0x83, 0xe7, 0x3a, 0x25, 0xf6, 0x5c, + 0xbf, 0xb0, 0x7d, 0xb3, 0x6b, 0x38, 0x98, 0x9f, 0xce, 0xdd, 0x1f, 0x4a, + 0x7c, 0x35, 0x49, 0xb6, 0xdd, 0x91, 0x8e, 0x06, 0x45, 0x63, 0x65, 0x7b, + 0xa1, 0xd2, 0x01, 0x6b, 0x98, 0x34, 0xdc, 0xe3, 0xc0, 0x12, 0x83, 0xe8, + 0xe4, 0xfa, 0x1e, 0x97, 0xac, 0xdf, 0x42, 0x3d, 0x6d, 0xb2, 0x3c, 0x3f, + 0xbf, 0x44, 0x94, 0x8e, 0xbc, 0x83, 0x5e, 0x45, 0xc2, 0xda, 0xc3, 0x2b, + 0xac, 0x82, 0x1c, 0xd2, 0x1c, 0x49, 0x3a, 0x30, 0x13, 0x3c, 0xfc, 0x94, + 0x9d, 0x57, 0xda, 0x31, 0x9d, 0x12, 0xc6, 0xb6, 0x1c, 0x20, 0xeb, 0xbb, + 0xc1, 0x49, 0xd4, 0xf4, 0xfa, 0x6b, 0x71, 0xb5, 0xfe, 0x9b, 0x43, 0xa4, + 0x30, 0xcb, 0x9c, 0xf7, 0x9e, 0x7b, 0xfe, 0x6f, 0x0a, 0xb3, 0x2f, 0xf4, + 0x2b, 0xb5, 0x8e, 0x21, 0xe5, 0xc6, 0x0b, 0xc0, 0x3b, 0x40, 0xd4, 0x8e, + 0x12, 0x53, 0x7f, 0x0b, 0x17, 0xa7, 0x8a, 0x4b, 0xae, 0xa5, 0xb6, 0x64, + 0xb4, 0xfe, 0x92, 0xc9, 0x9f, 0xa3, 0xa8, 0x04, 0x15, 0x58, 0x64, 0x8b, + 0xf2, 0xde, 0x31, 0xe8, 0x05, 0x84, 0x81, 0x63, 0x9b, 0xa3, 0xfe, 0xf8, + 0x3a, 0x7c, 0x12, 0xa5, 0xd6, 0xdb, 0x63, 0x9f, 0xba, 0x28, 0x78, 0x02, + 0x40, 0x22, 0x63, 0x93, 0x04, 0x29, 0x5b, 0x61, 0xc7, 0x86, 0x62, 0x09, + 0x73, 0xcc, 0x3e, 0x1b, 0xba, 0x27, 0xb9, 0xe1, 0x25, 0x36, 0xf7, 0x52, + 0x5c, 0xc0, 0x5b, 0xba, 0x4c, 0x06, 0x92, 0x41, 0x31, 0xe4, 0x9c, 0xd4, + 0x3d, 0x27, 0x58, 0xe1, 0xa9, 0x30, 0xd6, 0x08, 0x01, 0xa3, 0xb0, 0x0a, + 0xb6, 0x6e, 0x55, 0x58, 0x0d, 0xa9, 0xa5, 0xcd, 0x7e, 0x4d, 0xae, 0x1e, + 0xa8, 0x60, 0x32, 0x1a, 0xe1, 0xb6, 0x62, 0x78, 0x94, 0x27, 0x64, 0x7a, + 0xcd, 0x70, 0xac, 0xec, 0x78, 0xfd, 0xef, 0xcc, 0x81, 0x20, 0xc3, 0xd2, + 0x52, 0x46, 0xd7, 0xf4, 0x83, 0xb4, 0x73, 0x3b, 0x79, 0x1d, 0x16, 0x75, + 0xe3, 0xd6, 0xe9, 0x62, 0xc0, 0x7f, 0x99, 0xb4, 0xb4, 0xf9, 0x02, 0xaf, + 0xb3, 0x73, 0x1e, 0x03, 0xed, 0x16, 0xb8, 0x8d, 0x5c, 0x04, 0x48, 0x23, + 0x42, 0xb3, 0xb0, 0x01, 0xb4, 0xe6, 0x62, 0x13, 0xf4, 0x9a, 0x5c, 0x07, + 0x9b, 0x4a, 0x4a, 0x73, 0x9c, 0x77, 0x09, 0xec, 0xa6, 0xd6, 0xc9, 0x9e, + 0x22, 0x0c, 0xf6, 0xe1, 0x43, 0x7c, 0x36, 0x23, 0xdc, 0x3b, 0xf0, 0xad, + 0x62, 0x60, 0x66, 0xe6, 0xee, 0x6d, 0x15, 0x17, 0x07, 0x00, 0x03, 0x8e, + 0x8d, 0xfb, 0xca, 0x4a, 0x71, 0xed, 0x79, 0x32, 0xef, 0x12, 0xb6, 0x3e, + 0xab, 0x65, 0x66, 0x63, 0x67, 0xb4, 0xd2, 0xc3, 0x65, 0x4f, 0x1b, 0x6f, + 0x60, 0xe3, 0x69, 0xef, 0xf2, 0x56, 0xbf, 0x61, 0xf4, 0x7e, 0x96, 0xcf, + 0x5b, 0xad, 0xe5, 0x0b, 0x6d, 0x1a, 0xb7, 0x12, 0x83, 0x24, 0xfc, 0x48, + 0x59, 0x5d, 0x5b, 0xeb, 0x0d, 0x8e, 0x68, 0xc7, 0xe9, 0xb5, 0x0c, 0x0c, + 0x62, 0x38, 0x67, 0xd3, 0x23, 0xf9, 0x4e, 0x49, 0x4f, 0x5b, 0x87, 0xd3, + 0x30, 0x3a, 0x5e, 0x76, 0x45, 0x94, 0xee, 0x79, 0xcb, 0x26, 0xd6, 0x57, + 0x1f, 0xa3, 0x64, 0x78, 0x79, 0xea, 0xa7, 0x91, 0x94, 0xfb, 0x6c, 0xda, + 0xee, 0x46, 0x9b, 0x47, 0x65, 0x9d, 0xf5, 0x3b, 0x2e, 0xcc, 0xce, 0x9a, + 0xfc, 0x6c, 0x97, 0x6e, 0x34, 0xba, 0x2a, 0x79, 0x3e, 0xe2, 0x0e, 0xb1, + 0xf2, 0x56, 0x32, 0x3f, 0x41, 0x7b, 0xaa, 0xe7, 0x69, 0x27, 0x6b, 0x74, + 0x3f, 0xee, 0x09, 0x29, 0x7c, 0xbb, 0x47, 0xd9, 0xc3, 0x36, 0x90, 0xe3, + 0xf9, 0xdd, 0xa3, 0xc1, 0x63, 0xfd, 0xa1, 0xcd, 0xb4, 0xd4, 0x6c, 0xf6, + 0x3b, 0x50, 0x79, 0xd7, 0xb2, 0xd1, 0x19, 0x16, 0xee, 0xd8, 0x6a, 0x26, + 0x79, 0x70, 0x97, 0x4c, 0xf1, 0xa2, 0xab, 0x76, 0x25, 0x75, 0x97, 0xdb, + 0x61, 0x63, 0x18, 0x35, 0xdd, 0x60, 0x24, 0x36, 0x78, 0xd1, 0x25, 0x3a, + 0x78, 0x95, 0x0c, 0xdc, 0x47, 0xb2, 0x7f, 0x4b, 0x5f, 0xb9, 0xa0, 0x1f, + 0xa4, 0xd3, 0xe2, 0xa8, 0x53, 0x7d, 0x6c, 0x73, 0x8c, 0xf7, 0xd8, 0xdd, + 0xaf, 0x03, 0xdc, 0x3b, 0x3a, 0x44, 0xab, 0xbd, 0x36, 0xbb, 0x2a, 0xca, + 0x6d, 0xed, 0xb3, 0xf4, 0x67, 0xbb, 0x47, 0xb5, 0xcd, 0xe2, 0x13, 0x75, + 0x8e, 0x98, 0xe6, 0xda, 0x72, 0xf1, 0xda, 0x3d, 0x32, 0x37, 0x10, 0x39, + 0xdc, 0x4e, 0xb0, 0x0e, 0x9d, 0xd2, 0x53, 0x5f, 0x26, 0xb7, 0x13, 0xea, + 0x00, 0x0f, 0xab, 0x00, 0xb8, 0xbc, 0x00, 0x0f, 0xf1, 0xfb, 0xd4, 0x19, + 0x5b, 0x2a, 0xdd, 0x66, 0x45, 0x72, 0xd0, 0x09, 0xb2, 0x34, 0x2e, 0x68, + 0xec, 0x07, 0x99, 0x53, 0xae, 0xa1, 0x75, 0x76, 0x52, 0xf3, 0xb8, 0x08, + 0x87, 0x34, 0xeb, 0x20, 0x79, 0x01, 0x09, 0x56, 0xd7, 0xd7, 0x57, 0xd9, + 0xde, 0xd3, 0xf6, 0x76, 0x09, 0xdc, 0x40, 0xe7, 0xb4, 0x34, 0x6a, 0x75, + 0x49, 0x4c, 0xe9, 0xb0, 0x97, 0x9b, 0x29, 0x63, 0x69, 0xae, 0x40, 0x63, + 0x1a, 0x1c, 0xc2, 0x23, 0xe4, 0x3e, 0x6a, 0xf6, 0x5d, 0xd8, 0x59, 0x38, + 0xfe, 0x8f, 0x52, 0x60, 0x75, 0x4e, 0xd6, 0x41, 0x92, 0xd2, 0x0c, 0x6e, + 0xd1, 0x51, 0xc2, 0xaf, 0xd2, 0x7c, 0x5a, 0x5c, 0xf2, 0xf7, 0x6e, 0x36, + 0x58, 0x34, 0x24, 0xf8, 0x41, 0x31, 0xa2, 0x1e, 0x79, 0x26, 0x80, 0xca, + 0x84, 0xda, 0xe6, 0x96, 0x90, 0x08, 0x27, 0x53, 0xe0, 0x21, 0x25, 0x2f, + 0x8d, 0xd3, 0x2d, 0xe9, 0x17, 0xbd, 0xf5, 0xd8, 0x5f, 0x8a, 0x46, 0xea, + 0x9e, 0x3f, 0xef, 0xfd, 0xa3, 0xcd, 0x3e, 0x4e, 0xdc, 0x96, 0xbd, 0xcc, + 0x7f, 0xa3, 0x6d, 0x90, 0x0c, 0x1d, 0xf0, 0xdf, 0x6c, 0xfc, 0x9d, 0x27, + 0xcd, 0x37, 0x41, 0xea, 0x6d, 0x7e, 0x39, 0xc5, 0xc8, 0x1a, 0x34, 0x96, + 0xc3, 0xb8, 0x8f, 0x9a, 0x36, 0x56, 0x17, 0xd9, 0xfd, 0xf5, 0x01, 0xf6, + 0x62, 0x64, 0x90, 0x60, 0xb4, 0x7e, 0x70, 0xfe, 0xe4, 0x94, 0xd3, 0xa1, + 0xed, 0x0d, 0x6b, 0xec, 0x64, 0xb1, 0xc4, 0x34, 0x07, 0x6a, 0x20, 0x0f, + 0x7b, 0xa3, 0xcb, 0x84, 0x6b, 0xdc, 0x5e, 0xe1, 0x53, 0x1e, 0x41, 0x20, + 0x6d, 0xd8, 0x20, 0x6c, 0xe3, 0xfd, 0xca, 0xb5, 0x99, 0x53, 0x6d, 0x75, + 0xb9, 0xc4, 0x07, 0x4f, 0xf3, 0x70, 0x5b, 0xee, 0x27, 0x9d, 0x35, 0xd7, + 0x55, 0x6f, 0x02, 0x81, 0x60, 0x7b, 0x85, 0x25, 0xb6, 0x31, 0xc4, 0x81, + 0xc4, 0x99, 0x8f, 0x3f, 0x0d, 0x12, 0x53, 0x62, 0xa7, 0x56, 0xeb, 0x1b, + 0x73, 0xcb, 0xf6, 0x35, 0xb1, 0xa3, 0xb4, 0x25, 0x9a, 0x6d, 0x8e, 0x3b, + 0x27, 0x7d, 0x98, 0xa5, 0xdf, 0xa4, 0x00, 0x3e, 0xc7, 0x7e, 0x74, 0x8d, + 0x47, 0x1f, 0x04, 0x28, 0x73, 0x85, 0xd4, 0x3d, 0xa1, 0x9e, 0x90, 0x90, + 0xd1, 0xa0, 0xd7, 0x90, 0x48, 0x55, 0x6d, 0xca, 0x65, 0x6d, 0x0e, 0xdd, + 0x2d, 0x63, 0x37, 0x58, 0x20, 0x39, 0x84, 0x89, 0x2e, 0x20, 0x91, 0xf0, + 0x00, 0x24, 0xa6, 0xe6, 0x45, 0x6f, 0x63, 0x2d, 0xb6, 0x0f, 0xaa, 0xc6, + 0x13, 0x58, 0x6e, 0xba, 0x4f, 0xdc, 0x50, 0xeb, 0xcd, 0x2d, 0xc2, 0xaa, + 0xf6, 0x80, 0xd8, 0x8d, 0xa3, 0xce, 0x7b, 0xf2, 0xa9, 0x60, 0xf5, 0x0b, + 0x60, 0x1c, 0x89, 0x34, 0x5a, 0x47, 0xa4, 0x01, 0x92, 0x0f, 0x25, 0xcc, + 0x3d, 0x80, 0x95, 0xa7, 0x97, 0x8c, 0xdc, 0x8a, 0x1c, 0x03, 0x88, 0x2d, + 0x1b, 0xbd, 0xb0, 0x0b, 0x80, 0x1e, 0xe2, 0x92, 0x9a, 0xb7, 0xbd, 0xbe, + 0xb5, 0xc0, 0x34, 0x3e, 0xca, 0x49, 0xf6, 0x98, 0xe1, 0xda, 0x82, 0x3e, + 0x45, 0x0f, 0x13, 0xa9, 0xd0, 0xfc, 0x90, 0xe1, 0x0c, 0x66, 0x81, 0x8d, + 0x3c, 0xba, 0x3d, 0xb1, 0xf7, 0x27, 0xbe, 0xcc, 0x6d, 0x98, 0xf9, 0xad, + 0xc8, 0x0c, 0x63, 0xda, 0x18, 0xe3, 0x63, 0x60, 0xb8, 0xd6, 0x3d, 0x3f, + 0x77, 0x81, 0xd0, 0x2a, 0x17, 0x9f, 0xb2, 0xb8, 0x9a, 0x03, 0x1c, 0xcb, + 0xcc, 0xb5, 0xf3, 0xc9, 0x3f, 0x9a, 0x92, 0x9b, 0x39, 0xb9, 0x42, 0x9b, + 0xc3, 0x2a, 0xac, 0xd6, 0x43, 0x77, 0x56, 0xee, 0x77, 0x3b, 0x8e, 0x54, + 0xb1, 0xee, 0x37, 0xfe, 0x9d, 0xee, 0x0d, 0xb0, 0x18, 0x12, 0x60, 0xee, + 0xed, 0xdf, 0x5e, 0x11, 0x33, 0x5b, 0x51, 0x0c, 0xb9, 0xd2, 0xd2, 0x1a, + 0xc3, 0xb8, 0x72, 0x01, 0x13, 0x1f, 0x8a, 0xa7, 0x75, 0x85, 0x84, 0x31, + 0xec, 0xda, 0xd3, 0x0f, 0x6b, 0x5a, 0x41, 0xdd, 0xb4, 0xc1, 0x3a, 0x7e, + 0x29, 0x29, 0xd4, 0xce, 0xea, 0x0c, 0xaa, 0xb7, 0xb7, 0xd4, 0x3b, 0xcf, + 0x31, 0xf9, 0xd0, 0x20, 0xee, 0x9d, 0x00, 0xfe, 0x2a, 0x1d, 0x3e, 0xc1, + 0x77, 0x4f, 0x93, 0x22, 0xc0, 0xf2, 0x1f, 0x3c, 0xc8, 0x59, 0x79, 0x4e, + 0xb2, 0xdc, 0xa6, 0x31, 0xe0, 0x59, 0x50, 0x06, 0xc9, 0x20, 0x7b, 0x83, + 0x74, 0x04, 0x1f, 0x1e, 0xcb, 0x47, 0xa7, 0xe4, 0x0b, 0xb1, 0x67, 0x67, + 0xa6, 0xe2, 0xe3, 0xb8, 0x6b, 0xf9, 0x4f, 0x29, 0x29, 0x63, 0x95, 0x4d, + 0x96, 0xba, 0xa2, 0x4b, 0x40, 0x1b, 0xac, 0x2d, 0x88, 0x3b, 0x3b, 0x1f, + 0x25, 0x67, 0xd7, 0xc8, 0xdf, 0xb2, 0x1b, 0xeb, 0xc6, 0xcf, 0x4f, 0xfe, + 0x0a, 0x37, 0x6c, 0xf0, 0xdd, 0x0b, 0x2f, 0x18, 0xd2, 0xc7, 0xe4, 0x55, + 0x59, 0x36, 0xde, 0xe7, 0xee, 0x77, 0xa7, 0x06, 0x24, 0xe8, 0xd6, 0xee, + 0x22, 0x75, 0xee, 0xb4, 0x3f, 0x66, 0x9f, 0x4f, 0xd2, 0xf5, 0x1b, 0xf6, + 0x88, 0xdd, 0xb6, 0x7f, 0x4b, 0xe9, 0x73, 0xb3, 0x74, 0xf3, 0x29, 0x29, + 0xb2, 0xea, 0x29, 0xb3, 0x65, 0x6e, 0x6b, 0x6c, 0x70, 0x6c, 0x82, 0xee, + 0x34, 0xe7, 0x5f, 0x15, 0x45, 0xd9, 0x8d, 0x66, 0x51, 0xa5, 0xb5, 0x07, + 0xb8, 0x59, 0xe9, 0x1e, 0xda, 0xc0, 0x3f, 0x70, 0x95, 0x13, 0xd5, 0x5d, + 0x9c, 0xdf, 0x44, 0x51, 0xe8, 0xd2, 0xcf, 0xe6, 0xcc, 0xfb, 0x89, 0x55, + 0x73, 0x30, 0xb1, 0xdb, 0x8f, 0x8f, 0x96, 0xf2, 0xe1, 0x95, 0x75, 0x9e, + 0xf2, 0xd8, 0x03, 0x70, 0x1a, 0x02, 0x47, 0xdd, 0x3f, 0x7a, 0x4a, 0x75, + 0x3a, 0x8e, 0x6b, 0xb1, 0xaf, 0xa3, 0x1a, 0xaa, 0xe5, 0xcf, 0x69, 0x73, + 0x9c, 0x41, 0x86, 0xf6, 0x1f, 0xed, 0x55, 0xaa, 0xea, 0x1b, 0x98, 0x2d, + 0xa5, 0xed, 0x24, 0x92, 0xd7, 0x16, 0xf1, 0xb8, 0x7d, 0xca, 0x9d, 0x5d, + 0x27, 0x25, 0xb5, 0xbd, 0xd9, 0x77, 0xba, 0xba, 0x1c, 0xe2, 0x1e, 0xdb, + 0x8b, 0xac, 0x99, 0x9f, 0xa0, 0x36, 0xc8, 0x74, 0x77, 0x94, 0x4a, 0xef, + 0xc3, 0x6b, 0xfd, 0x3c, 0x6a, 0x59, 0xea, 0x82, 0xd0, 0xd2, 0xe2, 0x41, + 0x76, 0xc2, 0x35, 0xdc, 0xf1, 0xaf, 0x9c, 0xa4, 0xa6, 0xc7, 0x4d, 0x18, + 0x58, 0xf7, 0x3e, 0xcb, 0xd9, 0x65, 0xec, 0xc8, 0x70, 0x16, 0x39, 0xce, + 0xd1, 0xae, 0x07, 0x99, 0xe4, 0x00, 0xa3, 0x94, 0xce, 0x8d, 0x87, 0xd4, + 0x85, 0x78, 0xcc, 0x78, 0x7d, 0xbb, 0x9a, 0xe3, 0xb8, 0x90, 0xd9, 0x83, + 0xee, 0x99, 0x27, 0xc9, 0x42, 0xec, 0x0b, 0x9b, 0x95, 0x7e, 0x50, 0xbd, + 0xce, 0xae, 0xd2, 0x1c, 0xda, 0x81, 0x12, 0xe7, 0x81, 0x04, 0x9d, 0x04, + 0x34, 0x4e, 0x81, 0x12, 0xea, 0x9b, 0x91, 0x59, 0x61, 0x6f, 0xa6, 0xe7, + 0x37, 0x61, 0xb4, 0x90, 0x1c, 0xe6, 0x8f, 0xf8, 0x4e, 0xc1, 0x25, 0x27, + 0xd8, 0x2a, 0xc7, 0x3b, 0x5c, 0x5e, 0xe2, 0xe1, 0x13, 0xa8, 0x68, 0xd0, + 0xf3, 0xe6, 0xab, 0x61, 0x74, 0xec, 0xaa, 0xb3, 0xbe, 0xd2, 0xc0, 0x1e, + 0xcb, 0x0f, 0xba, 0x0e, 0xa1, 0xa7, 0x99, 0x56, 0xdd, 0x65, 0x95, 0x07, + 0x51, 0x8a, 0x0b, 0x0d, 0x0d, 0x60, 0x0e, 0x71, 0xdc, 0x5c, 0x0b, 0x41, + 0x92, 0x78, 0x3a, 0xa1, 0xe4, 0x65, 0x5f, 0x55, 0x55, 0x3c, 0xb4, 0x3d, + 0x8e, 0x27, 0xd5, 0x6f, 0xd1, 0x2e, 0x3f, 0x10, 0x92, 0x9a, 0x59, 0x38, + 0xf8, 0x78, 0x39, 0x0f, 0x7b, 0xa7, 0x21, 0xc4, 0xcb, 0x58, 0x07, 0xb0, + 0x7c, 0x4a, 0xa9, 0x97, 0xd5, 0xfa, 0x96, 0x43, 0x4d, 0x62, 0xc3, 0x5b, + 0x38, 0x15, 0x33, 0xda, 0x23, 0xc3, 0x45, 0xd7, 0x63, 0x5b, 0xd3, 0x72, + 0x71, 0x98, 0xd3, 0x5b, 0x59, 0xea, 0x0d, 0x1a, 0xe5, 0x9b, 0xd5, 0x7e, + 0xac, 0xd7, 0x6b, 0x0d, 0x98, 0x44, 0xb1, 0xfa, 0x1d, 0xa7, 0x8d, 0x3c, + 0x12, 0x53, 0xc7, 0xb8, 0x58, 0xe7, 0x06, 0xd6, 0xd2, 0xf7, 0x38, 0xeb, + 0xa1, 0x25, 0x56, 0xbc, 0x17, 0x5a, 0x7c, 0xa0, 0x0f, 0x92, 0xd7, 0xbb, + 0x07, 0x24, 0x9b, 0x2b, 0x76, 0xfa, 0xae, 0xd3, 0xd7, 0x63, 0x7d, 0xbb, + 0x98, 0x0c, 0xee, 0x1f, 0xc5, 0x67, 0xbf, 0x1a, 0xc6, 0xd8, 0x5a, 0xe0, + 0x49, 0x9e, 0x52, 0x53, 0xd2, 0x7d, 0x5f, 0xbb, 0x13, 0x16, 0x9c, 0x56, + 0x1a, 0xdc, 0x72, 0x0e, 0xfb, 0x1d, 0x68, 0xe1, 0xbb, 0xbe, 0x8b, 0x4f, + 0xc6, 0x16, 0xfe, 0x6d, 0x7f, 0x68, 0xa5, 0x99, 0x54, 0x38, 0x89, 0x1e, + 0xe0, 0x39, 0x2d, 0xf0, 0x55, 0x19, 0xd3, 0x0b, 0xa9, 0xa6, 0xda, 0x00, + 0x60, 0xa2, 0xa6, 0x31, 0xf6, 0x68, 0xed, 0xcd, 0x68, 0xf7, 0x40, 0xf0, + 0x0e, 0x2b, 0x53, 0x05, 0x84, 0x97, 0x53, 0x32, 0xc2, 0xd0, 0xea, 0xc1, + 0x32, 0x67, 0xbf, 0xc8, 0xa4, 0xa7, 0x1a, 0x96, 0xec, 0x7b, 0xea, 0x6d, + 0xbe, 0x93, 0xc0, 0x6c, 0x70, 0xe3, 0xb4, 0xfe, 0x08, 0x87, 0xf4, 0x8e, + 0x2c, 0xb8, 0xcc, 0xf2, 0xed, 0x0c, 0xc7, 0x70, 0x11, 0xb3, 0x28, 0x38, + 0xf9, 0x4d, 0x7e, 0xd6, 0xb8, 0xd9, 0xed, 0x69, 0x76, 0x81, 0xbf, 0x1d, + 0xa3, 0xb4, 0x28, 0x32, 0x9c, 0xbb, 0xa6, 0xcd, 0xec, 0x2c, 0xac, 0x10, + 0x5a, 0xdd, 0x65, 0xc3, 0xb8, 0x3d, 0xbe, 0x69, 0x29, 0x8d, 0xce, 0xc6, + 0xa3, 0x5c, 0x73, 0x63, 0x5a, 0xef, 0x76, 0xc8, 0xd5, 0xce, 0x1a, 0x6d, + 0x03, 0x85, 0xa3, 0x8d, 0xe9, 0xe4, 0x62, 0xfa, 0x0e, 0x92, 0x1c, 0x35, + 0x0e, 0x10, 0x7e, 0x0b, 0x3d, 0xb5, 0xff, 0x00, 0x86, 0xd8, 0x0b, 0xa3, + 0x69, 0x71, 0xfb, 0xcf, 0x70, 0x8b, 0x8c, 0xeb, 0xc5, 0xaf, 0x7b, 0x5a, + 0x0d, 0x0c, 0xfe, 0x6c, 0x37, 0xbc, 0x8d, 0x52, 0x53, 0x5a, 0xca, 0x2d, + 0xa6, 0xff, 0x00, 0x44, 0x45, 0x75, 0xb7, 0x50, 0x09, 0x00, 0x38, 0xbb, + 0x4f, 0xfb, 0xea, 0x70, 0xc6, 0x39, 0xe4, 0x3d, 0xce, 0x6b, 0x9a, 0x0b, + 0xc6, 0xd8, 0x12, 0x00, 0xfa, 0x3a, 0xf2, 0xb5, 0xad, 0xa5, 0x99, 0xb4, + 0x36, 0xc0, 0x40, 0x80, 0x7d, 0xd0, 0xb3, 0x9f, 0x53, 0x9e, 0xc9, 0xc7, + 0x21, 0xdb, 0x5d, 0xed, 0x71, 0xf0, 0xe0, 0xa4, 0xa6, 0x9b, 0xb1, 0x69, + 0x7c, 0x5a, 0x5b, 0x0d, 0x64, 0xba, 0x5f, 0x3e, 0xd2, 0x4e, 0x90, 0x3c, + 0x50, 0x9f, 0x46, 0x16, 0x5d, 0x87, 0x21, 0x86, 0xc6, 0x38, 0x38, 0x13, + 0x63, 0x0b, 0xf6, 0x3c, 0x0e, 0xd0, 0xfd, 0x3e, 0xe5, 0x69, 0xe2, 0xef, + 0x50, 0xbe, 0xcd, 0xa5, 0xae, 0x30, 0xed, 0xd3, 0x11, 0x1e, 0x03, 0xc9, + 0x58, 0xc7, 0xc0, 0x69, 0x60, 0x76, 0x33, 0x5d, 0x66, 0xbf, 0x48, 0x9d, + 0x8d, 0x03, 0xc0, 0x78, 0xe8, 0x92, 0x9c, 0x76, 0xd1, 0x53, 0x6c, 0x15, + 0x97, 0x39, 0xd6, 0x38, 0x82, 0xc2, 0x18, 0x4e, 0xa4, 0xf9, 0x79, 0xad, + 0x9a, 0xb2, 0x28, 0x7d, 0x67, 0x1a, 0xd0, 0x66, 0xc0, 0x61, 0xa7, 0x49, + 0xec, 0x79, 0x54, 0x1d, 0x5e, 0x55, 0x1d, 0x41, 0x99, 0xa5, 0xae, 0xad, + 0xad, 0x26, 0xb7, 0x33, 0xc4, 0x90, 0x76, 0xba, 0x15, 0xab, 0xdb, 0x55, + 0xdb, 0x5d, 0x6d, 0x3b, 0x1d, 0x51, 0x05, 0x8f, 0x69, 0x00, 0xfc, 0x48, + 0x07, 0xcd, 0x25, 0x35, 0xc6, 0x13, 0xaa, 0x16, 0xb5, 0x8e, 0x68, 0x93, + 0x38, 0xda, 0x7b, 0x80, 0x1e, 0x24, 0xa2, 0xe1, 0xe3, 0xdc, 0xeb, 0x6c, + 0xb2, 0xf3, 0x0c, 0x60, 0x6c, 0x36, 0x7e, 0x9b, 0x88, 0xf1, 0x9f, 0x15, + 0x6f, 0xec, 0xa3, 0x2b, 0x18, 0x02, 0x7d, 0xcc, 0x32, 0xd7, 0x8e, 0xc4, + 0x7f, 0x7a, 0x0e, 0xcb, 0x6c, 0x00, 0x37, 0xf4, 0x6f, 0x61, 0x2d, 0x20, + 0x89, 0xe7, 0x82, 0x92, 0x90, 0x35, 0xec, 0xad, 0xe1, 0xde, 0xa0, 0x73, + 0x49, 0x8b, 0x09, 0xf6, 0xc8, 0xe0, 0xc0, 0x3f, 0xc5, 0x43, 0x27, 0x1e, + 0x8a, 0x5e, 0xe6, 0x7a, 0x7b, 0x9a, 0xe2, 0x1a, 0x4b, 0x39, 0x13, 0xfb, + 0xc0, 0xe9, 0x08, 0x19, 0x19, 0x77, 0x57, 0x68, 0x06, 0xb6, 0xe4, 0x54, + 0x44, 0xee, 0x80, 0x00, 0xec, 0x79, 0xd5, 0x5f, 0xfd, 0x1d, 0xb8, 0xe2, + 0xfb, 0x98, 0x6b, 0x73, 0xda, 0x03, 0x81, 0xd0, 0x88, 0xe0, 0x14, 0x94, + 0xd6, 0xaf, 0x1d, 0xae, 0x73, 0x58, 0xd0, 0xd7, 0x36, 0x99, 0x01, 0xed, + 0xd3, 0x68, 0x3a, 0xc6, 0x8a, 0xcb, 0x5e, 0xf6, 0x3d, 0xce, 0x24, 0x34, + 0x01, 0x2c, 0x24, 0xfe, 0x72, 0x1d, 0x78, 0x42, 0xb1, 0x66, 0x45, 0x64, + 0x9b, 0x2c, 0x86, 0x82, 0xdf, 0x69, 0x03, 0x4d, 0x3b, 0xcc, 0x21, 0xe4, + 0x8b, 0x59, 0xb8, 0x02, 0x76, 0x90, 0x41, 0x31, 0x00, 0x71, 0xac, 0xa4, + 0xa4, 0xdd, 0x43, 0x01, 0xf9, 0x9d, 0x36, 0xc1, 0x56, 0xdd, 0xe2, 0xdf, + 0x51, 0x95, 0xc4, 0x01, 0xba, 0x03, 0xc7, 0x9c, 0xc2, 0xa1, 0x67, 0x4e, + 0x0d, 0x67, 0xd8, 0xb2, 0x36, 0x02, 0xdd, 0x03, 0x5a, 0x67, 0x6b, 0x9b, + 0xdc, 0x2d, 0x4c, 0x13, 0xbc, 0xb1, 0xa1, 0xe6, 0x76, 0x11, 0x13, 0x20, + 0xc0, 0x9f, 0xbd, 0x36, 0x4e, 0xe6, 0xef, 0xb9, 0xb4, 0xef, 0x7b, 0x8b, + 0x5a, 0xdd, 0xbf, 0x49, 0xda, 0x1f, 0x04, 0x94, 0xd5, 0xaf, 0x0a, 0xd6, + 0x63, 0xd6, 0xcb, 0xc8, 0x70, 0x2c, 0xdb, 0x24, 0xfd, 0x22, 0xd7, 0x3a, + 0x34, 0xf8, 0x10, 0xa6, 0xec, 0x36, 0xe6, 0x52, 0xea, 0x0b, 0x5a, 0xdb, + 0xeb, 0x1b, 0xeb, 0xb0, 0x48, 0xd2, 0x61, 0xc0, 0xc7, 0x90, 0x44, 0x66, + 0xe0, 0xdd, 0xb6, 0x02, 0x76, 0x82, 0x43, 0x41, 0x1d, 0xd1, 0xb1, 0xb7, + 0x1b, 0x6a, 0xb0, 0x48, 0x6e, 0xbb, 0x99, 0xe7, 0x10, 0x67, 0xc5, 0x25, + 0x39, 0x9f, 0x64, 0x60, 0x64, 0x1f, 0x63, 0x40, 0xec, 0x75, 0x11, 0xe1, + 0x3f, 0x8a, 0xb5, 0x8b, 0x41, 0x7b, 0xc6, 0x33, 0x64, 0x38, 0x09, 0x71, + 0x3a, 0xea, 0x44, 0xa4, 0xfa, 0x2d, 0x75, 0xb6, 0x92, 0xcd, 0xc1, 0xae, + 0x3c, 0x93, 0xab, 0x1b, 0xfe, 0xba, 0x2b, 0xdd, 0x19, 0x95, 0x9b, 0xaf, + 0xbc, 0xb9, 0xe3, 0x69, 0xf7, 0xba, 0xc8, 0x0d, 0xe3, 0xf3, 0x48, 0x03, + 0x4e, 0xc9, 0x29, 0x05, 0x55, 0x55, 0xd3, 0xe9, 0x37, 0x5e, 0x1a, 0xdb, + 0x9d, 0x21, 0xa6, 0x07, 0xb5, 0xb3, 0x32, 0x4c, 0x2a, 0xde, 0x9b, 0xfd, + 0x3f, 0xb5, 0x6e, 0x3f, 0x68, 0xdb, 0x3c, 0x7b, 0x63, 0xc7, 0x77, 0x0a, + 0xce, 0x75, 0x39, 0x36, 0x5a, 0x73, 0x2d, 0x60, 0x76, 0x3e, 0xe0, 0x1a, + 0x1a, 0x43, 0xdb, 0xb4, 0x7d, 0x13, 0xa7, 0x6f, 0x10, 0xab, 0x6e, 0x7e, + 0xef, 0x52, 0x35, 0xdd, 0xf4, 0x34, 0xfa, 0x3e, 0x30, 0x92, 0x9f, 0xff, + 0xd9 +}; +size_t demo_006_jpg_len = 18553; + +const uint8_t demo_007_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xa1, 0xfb, 0x68, 0xb1, 0xdb, 0x69, 0xad, 0xce, 0xdc, + 0xcd, 0x01, 0xdb, 0xb8, 0x11, 0xae, 0x9e, 0xee, 0x15, 0x4c, 0x9e, 0xad, + 0x99, 0x7d, 0x82, 0xd2, 0xd8, 0x24, 0xc3, 0x3d, 0x82, 0x74, 0xfd, 0xed, + 0x83, 0x70, 0x95, 0x96, 0x1a, 0xf3, 0x69, 0x2c, 0x06, 0xa6, 0x83, 0x0f, + 0x77, 0x3b, 0x49, 0x3e, 0x2d, 0x82, 0x8c, 0xe7, 0xec, 0x23, 0x65, 0xc5, + 0xd6, 0x48, 0x0e, 0x0c, 0x2f, 0x0d, 0x22, 0x20, 0xc9, 0x71, 0x49, 0x4d, + 0xd3, 0x98, 0xfa, 0x0f, 0xe9, 0x5c, 0x3d, 0x37, 0x0f, 0x1b, 0x03, 0x43, + 0x86, 0xbe, 0x33, 0xdf, 0xc5, 0x48, 0x66, 0x9b, 0x1c, 0x5e, 0xfb, 0x58, + 0xe8, 0xfa, 0x0d, 0xdc, 0xf6, 0xb4, 0x03, 0xf0, 0x79, 0x3d, 0xbb, 0xac, + 0xeb, 0x9e, 0x1c, 0xdd, 0xc0, 0x38, 0x35, 0xa0, 0x43, 0x8c, 0xf7, 0x3a, + 0xfb, 0x91, 0xb1, 0x6a, 0x7d, 0xf3, 0x65, 0xf6, 0x34, 0x32, 0xb1, 0x00, + 0x58, 0x06, 0xd3, 0xdb, 0xda, 0x63, 0x94, 0x94, 0xea, 0xee, 0xba, 0x9b, + 0x2c, 0x73, 0x9d, 0x5e, 0xd7, 0x00, 0xe7, 0x08, 0x31, 0xba, 0x03, 0x5b, + 0xf4, 0xdc, 0x01, 0x46, 0x66, 0x44, 0x3f, 0x66, 0x55, 0x95, 0xb4, 0x86, + 0x82, 0x5b, 0xa0, 0x71, 0x1d, 0xb7, 0x4b, 0x9d, 0xaf, 0x92, 0xe7, 0xdc, + 0xc6, 0x9b, 0x1b, 0xb1, 0xac, 0x76, 0xa4, 0xb9, 0xdd, 0xbf, 0x1d, 0x15, + 0xa6, 0x59, 0x5b, 0xea, 0x6d, 0x75, 0xd2, 0xc6, 0xdb, 0xbc, 0x12, 0xef, + 0x16, 0xf0, 0x44, 0xc7, 0x74, 0x94, 0xee, 0x3f, 0x2f, 0x0a, 0xc6, 0x8d, + 0xcf, 0x20, 0x1f, 0xa5, 0x0e, 0x83, 0x1f, 0x87, 0xe4, 0x4a, 0x9b, 0xab, + 0xd8, 0x76, 0x38, 0xdc, 0xd2, 0x67, 0x52, 0x26, 0x39, 0xd6, 0x7b, 0x2a, + 0x2c, 0xcb, 0x61, 0x2e, 0xde, 0xd1, 0x53, 0x18, 0xcd, 0xa4, 0x30, 0x7b, + 0x43, 0xb8, 0x0e, 0xf0, 0x9f, 0x25, 0x3a, 0xb0, 0x45, 0x96, 0x31, 0xb5, + 0x7b, 0xec, 0x6b, 0x65, 0xed, 0x63, 0xa0, 0x30, 0x9f, 0xde, 0x3d, 0xb9, + 0x49, 0x4d, 0xe7, 0xde, 0xd0, 0x43, 0x72, 0x69, 0x0d, 0xf5, 0x0c, 0x54, + 0x09, 0x16, 0x07, 0x0f, 0x80, 0x04, 0x28, 0x58, 0x19, 0x55, 0x65, 0xf1, + 0xb1, 0xd3, 0xee, 0x23, 0x46, 0x9f, 0x32, 0x20, 0x70, 0x9a, 0xbe, 0x9b, + 0x98, 0xf6, 0x96, 0x32, 0xd0, 0xd7, 0xc0, 0x97, 0x19, 0xdb, 0xfe, 0x6c, + 0x29, 0xd7, 0xd2, 0xf2, 0x9a, 0xdd, 0xee, 0x9d, 0xed, 0xfa, 0x60, 0x18, + 0x91, 0xcc, 0xc8, 0x29, 0x29, 0x4e, 0xcb, 0xc5, 0xf6, 0x31, 0xfe, 0xe7, + 0x9f, 0x6c, 0x08, 0x74, 0x83, 0xae, 0x9d, 0xbb, 0x2b, 0x0e, 0x0e, 0x6d, + 0x47, 0xd3, 0x1b, 0x01, 0xd0, 0x6e, 0x23, 0x40, 0x78, 0x6e, 0x85, 0x52, + 0xb6, 0xbb, 0x09, 0xb4, 0x53, 0x4b, 0xda, 0xf2, 0x00, 0xb0, 0x1d, 0xc4, + 0x7f, 0x9d, 0x0e, 0xfc, 0x10, 0x98, 0x33, 0x0d, 0x7e, 0x9f, 0xa6, 0xe3, + 0x4b, 0xe0, 0x0d, 0xc0, 0x96, 0xf8, 0x6d, 0xe4, 0x7e, 0x54, 0x94, 0xde, + 0x7d, 0x8d, 0xac, 0x45, 0x85, 0x8e, 0x0c, 0x80, 0xf6, 0x92, 0x03, 0x9a, + 0x0f, 0x30, 0x35, 0x25, 0x57, 0x7e, 0x75, 0x96, 0x38, 0x9a, 0x36, 0xd6, + 0xd7, 0xc6, 0xd0, 0x41, 0x69, 0xe7, 0x53, 0xb9, 0x3d, 0x7d, 0x2b, 0x2f, + 0x6f, 0xac, 0xcd, 0x8c, 0x3b, 0x44, 0x6e, 0x60, 0x0e, 0x31, 0xa1, 0xd0, + 0xf1, 0xe4, 0x83, 0x6e, 0x37, 0x51, 0xa5, 0xdb, 0xe0, 0xd9, 0xe9, 0xcb, + 0xab, 0xda, 0x00, 0xd2, 0x3d, 0xda, 0x30, 0x24, 0xa5, 0x1b, 0x6e, 0xde, + 0xda, 0x6b, 0xa9, 0xae, 0xb0, 0xc9, 0x99, 0xd1, 0xde, 0x3a, 0x80, 0x7f, + 0x14, 0xff, 0x00, 0x6a, 0x7b, 0x24, 0x5d, 0x4b, 0x58, 0x1b, 0xf4, 0xde, + 0xd7, 0x38, 0xc7, 0x9e, 0x8d, 0xf2, 0xf1, 0x42, 0x66, 0x26, 0x43, 0xeb, + 0xf5, 0x2b, 0xa3, 0x7d, 0xac, 0x21, 0xe7, 0x73, 0x5c, 0x6c, 0xe6, 0x74, + 0x23, 0xc9, 0x58, 0x19, 0xa6, 0xd7, 0x7e, 0x91, 0xb6, 0x0d, 0x48, 0x15, + 0x39, 0xa1, 0xce, 0x12, 0x34, 0x2d, 0x03, 0x53, 0xaa, 0x4a, 0x4e, 0xcb, + 0xf1, 0x89, 0x21, 0xf5, 0x16, 0x6d, 0x00, 0x9b, 0x5c, 0xd2, 0xf2, 0xd9, + 0xee, 0xd7, 0x68, 0xaa, 0x64, 0x64, 0x56, 0x2f, 0x7d, 0x55, 0x3f, 0xd6, + 0x22, 0x20, 0x37, 0xda, 0xe0, 0x3e, 0x6e, 0xe5, 0x56, 0x76, 0x1d, 0xe6, + 0xd7, 0x3a, 0xbb, 0xb6, 0x89, 0x3b, 0x89, 0x76, 0xcd, 0x41, 0xd5, 0xb1, + 0xaf, 0xe4, 0x57, 0xb1, 0xf1, 0xb3, 0xd9, 0x31, 0x5e, 0xd0, 0x4e, 0xef, + 0xb4, 0x9a, 0xc3, 0xde, 0x24, 0x0d, 0x5a, 0x23, 0xb1, 0x1d, 0xd2, 0x52, + 0x26, 0x87, 0xdf, 0x67, 0xa4, 0xc6, 0x58, 0xf2, 0x35, 0x0d, 0x63, 0x37, + 0x91, 0xfd, 0x62, 0xe7, 0x46, 0x9f, 0x04, 0x8e, 0x51, 0xa4, 0x43, 0xa8, + 0x75, 0x85, 0xa4, 0xb4, 0x92, 0x76, 0xc7, 0x6d, 0x76, 0x87, 0x04, 0x61, + 0x8a, 0xf2, 0xc3, 0x7e, 0x63, 0xdc, 0xeb, 0xdc, 0xe8, 0x69, 0x61, 0x1b, + 0x88, 0x1a, 0x08, 0xad, 0xbb, 0x3c, 0xf5, 0x21, 0x18, 0x61, 0xdb, 0x75, + 0xad, 0x15, 0xbd, 0xdf, 0x67, 0x6e, 0xad, 0x61, 0x9a, 0xcc, 0xe9, 0xa3, + 0xb6, 0x89, 0x2d, 0xf8, 0xa4, 0xa4, 0x03, 0x25, 0xce, 0x3b, 0x4d, 0x1b, + 0x1a, 0xfd, 0x0c, 0x3f, 0xb3, 0xc7, 0x98, 0x85, 0x4e, 0xbc, 0xfa, 0x9b, + 0x68, 0x65, 0x61, 0xcc, 0xad, 0x87, 0x61, 0x36, 0xcc, 0xfb, 0x78, 0xf7, + 0x1d, 0x0f, 0x8e, 0x8b, 0x55, 0xd8, 0x0c, 0x32, 0x32, 0xb7, 0x58, 0xd6, + 0x92, 0xe0, 0x43, 0xdc, 0x5c, 0xc1, 0x11, 0xd8, 0x05, 0x9f, 0x93, 0x82, + 0xe0, 0xea, 0x43, 0x6b, 0xb8, 0xd7, 0xa8, 0xac, 0x90, 0xe2, 0x19, 0x27, + 0xcc, 0x98, 0x9f, 0x82, 0x4a, 0x5e, 0xbc, 0x96, 0xdd, 0xb1, 0xce, 0x0e, + 0x05, 0xee, 0x24, 0x17, 0x0e, 0xdf, 0x07, 0x3b, 0x44, 0xbd, 0x66, 0x07, + 0x91, 0x6b, 0xc3, 0x2b, 0x7c, 0x90, 0x5c, 0x09, 0xda, 0x40, 0x81, 0x1b, + 0x67, 0x9f, 0x04, 0x5a, 0x2b, 0xfd, 0x9c, 0xf7, 0xb5, 0xf0, 0xf3, 0x66, + 0xd2, 0xfb, 0xab, 0x25, 0xcd, 0x82, 0x74, 0x6e, 0xbb, 0x87, 0xcd, 0x57, + 0xca, 0x65, 0x64, 0x06, 0x63, 0x56, 0xe7, 0x0f, 0x50, 0xd8, 0xe7, 0x90, + 0x49, 0x61, 0x6e, 0xbe, 0xdf, 0xa3, 0x22, 0x25, 0x25, 0x32, 0xab, 0x38, + 0x3e, 0xba, 0xe9, 0x2f, 0x10, 0xed, 0x3d, 0xfb, 0x76, 0xb6, 0x3b, 0x6e, + 0xfe, 0xf0, 0x88, 0xec, 0xab, 0xd8, 0xdf, 0x6b, 0x5d, 0x6b, 0x1b, 0xc3, + 0x61, 0xda, 0x9f, 0x10, 0x1a, 0xd2, 0x10, 0xee, 0xa7, 0x36, 0x97, 0x56, + 0xea, 0xc0, 0xd9, 0x5b, 0x88, 0x0e, 0x69, 0x20, 0x39, 0xae, 0xd3, 0x73, + 0xc3, 0x7f, 0xbd, 0x4f, 0x65, 0xce, 0x78, 0x04, 0x38, 0x00, 0x76, 0x17, + 0x49, 0x8d, 0x47, 0xe6, 0x9e, 0xe5, 0x25, 0x35, 0xdf, 0x60, 0x33, 0x5b, + 0x8e, 0xf2, 0x06, 0xa1, 0xf5, 0xbf, 0x73, 0x4f, 0x31, 0x24, 0xeb, 0x3f, + 0x05, 0x3a, 0x32, 0xd9, 0xe9, 0xed, 0xda, 0x7d, 0x52, 0x36, 0xb4, 0x19, + 0x76, 0xdf, 0x28, 0x02, 0x74, 0xf3, 0x2a, 0x02, 0x9c, 0xd1, 0xea, 0x3d, + 0x8d, 0x0f, 0x68, 0x76, 0xc0, 0x1e, 0x26, 0xc6, 0x96, 0xc7, 0xd1, 0x6c, + 0x80, 0xa7, 0x75, 0x0c, 0xa9, 0xc1, 0xb7, 0xda, 0xe7, 0x97, 0x44, 0x56, + 0xe6, 0x1a, 0xf7, 0x3b, 0xb6, 0xac, 0x31, 0x32, 0x92, 0x9b, 0x15, 0x3f, + 0x12, 0x96, 0xb5, 0xcf, 0x05, 0xd6, 0x46, 0xd1, 0x63, 0x9c, 0x5a, 0x35, + 0xd4, 0x89, 0x23, 0x99, 0xf2, 0x42, 0xc8, 0x17, 0x5b, 0x36, 0x56, 0x3d, + 0x30, 0xdf, 0xa3, 0xf4, 0x8c, 0x47, 0xe2, 0x65, 0x3c, 0xb8, 0x7e, 0x8d, + 0xd5, 0xd9, 0x8d, 0x6b, 0xf5, 0x70, 0x76, 0xad, 0x7c, 0x0f, 0xcd, 0x70, + 0x97, 0x7c, 0x92, 0x73, 0xb1, 0x59, 0x6b, 0x5a, 0xe7, 0x1a, 0xec, 0x8d, + 0xef, 0xb5, 0xae, 0x36, 0x43, 0x47, 0x33, 0x5c, 0x1e, 0x7c, 0x12, 0x52, + 0x3a, 0xac, 0xb0, 0x56, 0x1b, 0x75, 0x85, 0x8d, 0x0e, 0x21, 0xde, 0xcf, + 0xa4, 0xe1, 0xaf, 0x2e, 0xf0, 0x47, 0xaf, 0xd7, 0x2d, 0x16, 0x6f, 0x71, + 0x1c, 0x40, 0x70, 0x20, 0x09, 0xe6, 0x34, 0x4f, 0x56, 0x07, 0x51, 0xc9, + 0x79, 0xdc, 0x3d, 0x3a, 0xa4, 0xb7, 0xd4, 0x7c, 0x7a, 0x9b, 0x48, 0x1f, + 0x74, 0x85, 0x79, 0x9d, 0x1f, 0x02, 0xaa, 0x99, 0x49, 0x69, 0x7c, 0x19, + 0x73, 0xc9, 0x26, 0x4f, 0xdf, 0xc2, 0x4a, 0x72, 0x6c, 0x2e, 0x66, 0xd7, + 0xb5, 0xc5, 0x8f, 0xe2, 0xdd, 0x8f, 0xd5, 0xc7, 0xc5, 0xcd, 0x93, 0xf9, + 0x11, 0x18, 0x1c, 0xd3, 0xbf, 0xd6, 0xdc, 0x1c, 0x01, 0x92, 0xe2, 0xe6, + 0x80, 0x7c, 0xa4, 0x15, 0x7e, 0xfe, 0x8b, 0xba, 0xc2, 0x6b, 0xb9, 0xd5, + 0xb0, 0x83, 0xbc, 0x3b, 0xdf, 0xfe, 0x69, 0x3c, 0x2a, 0x56, 0x51, 0x93, + 0x55, 0xbe, 0x8b, 0xd8, 0x1f, 0x40, 0x68, 0x3b, 0xdc, 0xf2, 0x1b, 0xde, + 0x3d, 0xb0, 0x75, 0xd3, 0xba, 0x4a, 0x66, 0xe6, 0xda, 0x58, 0x5c, 0xd6, + 0x0d, 0xc1, 0xa3, 0x97, 0x16, 0x83, 0xe2, 0xb2, 0x9f, 0x63, 0x1f, 0x77, + 0xa7, 0x5b, 0x83, 0x6c, 0x0e, 0x22, 0x1c, 0xed, 0xee, 0x88, 0xe5, 0xbf, + 0x47, 0xef, 0x57, 0x2c, 0xea, 0x36, 0x8b, 0x05, 0x57, 0x30, 0x0a, 0x98, + 0x0c, 0x31, 0xde, 0xa6, 0xd2, 0x0f, 0x8b, 0x81, 0x2d, 0x2a, 0xab, 0xec, + 0xc7, 0x7b, 0x63, 0x71, 0x04, 0x38, 0xb8, 0x80, 0x48, 0x0c, 0x07, 0xf7, + 0x63, 0xdc, 0x41, 0x1e, 0x29, 0x29, 0xb7, 0x5e, 0x60, 0x63, 0x58, 0xda, + 0xda, 0xe7, 0x6e, 0x71, 0x0e, 0x36, 0x38, 0xf3, 0xda, 0x7f, 0xd9, 0x29, + 0xbe, 0xd9, 0xd4, 0x3d, 0x7f, 0x4f, 0x7b, 0x62, 0x7f, 0x9b, 0x93, 0xe1, + 0xc4, 0xf3, 0xf8, 0xaa, 0x7f, 0x6d, 0xad, 0xc7, 0xd3, 0xaa, 0xc7, 0x58, + 0x74, 0x0c, 0x6f, 0x30, 0x3b, 0xf7, 0x4f, 0xea, 0x59, 0xf6, 0x8d, 0xbe, + 0x9d, 0x9e, 0x8f, 0xfa, 0x3d, 0x8e, 0x98, 0x8f, 0xa3, 0x1c, 0x42, 0x4a, + 0x4c, 0x70, 0x68, 0x0c, 0x7b, 0x40, 0x2d, 0x65, 0x4e, 0x32, 0xc9, 0xda, + 0x4e, 0x80, 0x8e, 0x39, 0xf8, 0x95, 0x7a, 0xce, 0x90, 0xcc, 0x8f, 0xd2, + 0xe3, 0x56, 0x1b, 0x20, 0x87, 0x3a, 0x44, 0x0d, 0x0e, 0x91, 0xe2, 0xb4, + 0xb2, 0x3a, 0x4d, 0x0e, 0xa2, 0xc0, 0x08, 0x75, 0x6e, 0x68, 0xf5, 0x1e, + 0xf3, 0xd9, 0xa6, 0x7b, 0x7c, 0x11, 0xa9, 0x69, 0xc6, 0xac, 0x0a, 0xc7, + 0xaa, 0xd2, 0x49, 0xf6, 0xc0, 0xda, 0x26, 0x37, 0x24, 0xa7, 0x36, 0xae, + 0x86, 0xd2, 0xda, 0x2a, 0xcc, 0xab, 0xe8, 0x00, 0x48, 0x98, 0x1c, 0x47, + 0xf1, 0x57, 0x28, 0xfa, 0xbb, 0x81, 0x48, 0x70, 0xc7, 0xac, 0x35, 0xa4, + 0xee, 0xf7, 0x0d, 0xff, 0x00, 0x71, 0x72, 0xd1, 0x7e, 0x7e, 0x09, 0xad, + 0xd7, 0xbe, 0xd6, 0x8a, 0xaa, 0x3b, 0x5e, 0x4e, 0x90, 0xfe, 0x22, 0x3c, + 0x65, 0x1d, 0x9b, 0x8b, 0x89, 0xad, 0xbc, 0x80, 0x5b, 0x27, 0x44, 0x94, + 0xe4, 0xdd, 0xd1, 0x30, 0x9c, 0xc7, 0x81, 0x4b, 0x7d, 0x42, 0xd1, 0x2e, + 0x88, 0x31, 0xe5, 0x1e, 0x0a, 0x97, 0x50, 0xe9, 0xdd, 0x3b, 0xa7, 0x61, + 0x36, 0xec, 0x80, 0xeb, 0x09, 0x70, 0xab, 0x6c, 0x9d, 0xc7, 0x74, 0x9d, + 0x3c, 0x22, 0x0a, 0xe9, 0x99, 0x5f, 0xa6, 0x09, 0x6f, 0x7e, 0x01, 0x33, + 0x0b, 0x2f, 0xeb, 0x3e, 0x05, 0xb9, 0x18, 0x4d, 0xbf, 0x1c, 0x6e, 0x7e, + 0x34, 0xbf, 0x6c, 0xfd, 0x26, 0xbb, 0x47, 0xfc, 0xc4, 0x24, 0xa7, 0x3a, + 0xae, 0xb3, 0xd0, 0xe2, 0x9c, 0x56, 0x56, 0x59, 0xb2, 0x00, 0x0e, 0x0d, + 0x99, 0x8e, 0x49, 0x9d, 0x4a, 0x2e, 0x3b, 0xb0, 0xb2, 0x01, 0xae, 0x90, + 0xe7, 0x52, 0x64, 0x6e, 0x24, 0x10, 0x76, 0x19, 0x0d, 0x3c, 0x38, 0x2e, + 0x66, 0xea, 0xab, 0xc8, 0x6f, 0xa8, 0xe8, 0x8e, 0x23, 0xb8, 0xf3, 0x5a, + 0x9f, 0x57, 0x7a, 0x6d, 0x97, 0x31, 0xf7, 0xbd, 0x9f, 0xa1, 0x73, 0x86, + 0xd2, 0x49, 0x83, 0x13, 0x24, 0x09, 0xf3, 0x84, 0x94, 0xef, 0xc3, 0x9a, + 0xe2, 0x4f, 0xd2, 0x71, 0xd1, 0x48, 0xd5, 0x75, 0x85, 0xa1, 0xe4, 0x7a, + 0x64, 0xc8, 0x68, 0x90, 0xf2, 0x7c, 0xcf, 0x10, 0x9b, 0xec, 0x4d, 0x0e, + 0x75, 0x95, 0x6e, 0x10, 0x27, 0x69, 0x3a, 0x9d, 0x34, 0x12, 0xe9, 0x85, + 0x11, 0x57, 0x55, 0xf6, 0x3c, 0x32, 0xb2, 0x26, 0x3d, 0xce, 0x89, 0xfb, + 0xa5, 0x25, 0x26, 0xb6, 0xb2, 0xcd, 0x75, 0x8d, 0xa5, 0xa7, 0x5e, 0x02, + 0x7d, 0xad, 0x05, 0xac, 0xec, 0xd1, 0xf7, 0x69, 0xfe, 0xd4, 0xfb, 0xf3, + 0x8b, 0x5a, 0xd7, 0x57, 0x5b, 0x6c, 0x12, 0x24, 0x38, 0xed, 0xff, 0x00, + 0xa9, 0x50, 0xc7, 0xb2, 0xe2, 0xf7, 0xba, 0xd6, 0x8d, 0x1c, 0x5a, 0xd0, + 0x35, 0x30, 0x52, 0x53, 0x3f, 0x4f, 0x48, 0xe7, 0x74, 0xea, 0x7c, 0xd4, + 0x5f, 0x58, 0x86, 0xef, 0xf7, 0x6c, 0x01, 0xb1, 0xf1, 0x4f, 0x7d, 0xef, + 0xac, 0x54, 0xd6, 0xd6, 0x6d, 0x0e, 0x71, 0xdd, 0x1a, 0x40, 0x6f, 0x8f, + 0x0a, 0x58, 0xd5, 0xbe, 0x1a, 0xf0, 0xdf, 0x6e, 0xee, 0x5e, 0x7b, 0x70, + 0x92, 0x99, 0x35, 0xd4, 0x93, 0xb1, 0xae, 0x1b, 0x9b, 0xa9, 0x6f, 0x10, + 0x0f, 0x0a, 0xa9, 0xc6, 0xa3, 0x22, 0xc3, 0x69, 0x6e, 0xe7, 0x71, 0xea, + 0x0e, 0xc0, 0x76, 0x50, 0xcd, 0xfb, 0x4d, 0x79, 0xac, 0x34, 0x54, 0x2e, + 0x2e, 0x63, 0x9b, 0x68, 0x10, 0x1a, 0xd1, 0x22, 0x27, 0x59, 0xf8, 0x21, + 0xe3, 0x59, 0x95, 0x5d, 0x9e, 0x9d, 0x98, 0xb6, 0x34, 0xb8, 0xe9, 0xe9, + 0x80, 0x19, 0x1e, 0x22, 0x5c, 0x12, 0x53, 0x64, 0xe3, 0x62, 0xe3, 0x35, + 0xa7, 0x6b, 0x5a, 0x03, 0xe4, 0xe8, 0x35, 0x30, 0x60, 0xfc, 0x54, 0x9d, + 0x71, 0x15, 0x9b, 0x1e, 0x36, 0x1e, 0x40, 0xe4, 0x8f, 0x00, 0x7c, 0xd5, + 0x17, 0xd9, 0x69, 0xb9, 0xf6, 0x8a, 0x1e, 0x2a, 0xa5, 0xe3, 0x52, 0xe9, + 0x82, 0xee, 0x5c, 0x04, 0x9f, 0xc1, 0x5a, 0xf5, 0x1b, 0x64, 0xb1, 0xcd, + 0xd8, 0xd6, 0x6a, 0xee, 0x49, 0x3a, 0x48, 0xec, 0x92, 0x96, 0xaf, 0x1e, + 0x96, 0xc5, 0xd6, 0x86, 0x82, 0x60, 0x49, 0xfc, 0xe2, 0x7b, 0x7d, 0xe8, + 0xac, 0xa9, 0x96, 0x37, 0x41, 0x00, 0x93, 0xa0, 0x3e, 0x0a, 0x6e, 0xbe, + 0xbf, 0x4c, 0x54, 0x01, 0x1e, 0xd9, 0x69, 0x2d, 0x31, 0xce, 0x9d, 0x92, + 0xad, 0xc3, 0x69, 0x01, 0xb1, 0x04, 0xb4, 0x88, 0x8f, 0xee, 0x49, 0x4c, + 0x5b, 0x5b, 0x0b, 0x4c, 0x0d, 0x04, 0x6a, 0x3b, 0xc2, 0x56, 0xb6, 0x6c, + 0x32, 0x74, 0x23, 0xe8, 0xfc, 0x14, 0xeb, 0x7b, 0x47, 0xb4, 0x34, 0xb4, + 0x76, 0x04, 0x40, 0xf8, 0x26, 0xba, 0xc6, 0xb4, 0x17, 0x96, 0xe8, 0xd3, + 0xac, 0x73, 0xae, 0x82, 0x02, 0x4a, 0x45, 0x6d, 0x2c, 0x35, 0x81, 0x5b, + 0x5a, 0x1c, 0x4e, 0x9e, 0x1c, 0x78, 0x6a, 0xa4, 0x69, 0xa8, 0xd6, 0x61, + 0xa1, 0xbd, 0xa4, 0x08, 0x99, 0xf0, 0x4c, 0xfb, 0x76, 0xb4, 0x6e, 0x0e, + 0x3d, 0xcc, 0x03, 0xa7, 0xdc, 0xa3, 0x65, 0x96, 0xb1, 0xa1, 0x86, 0x1c, + 0x4b, 0x4e, 0xbc, 0x1d, 0x39, 0x09, 0x29, 0x8b, 0x31, 0x6b, 0x0c, 0x6b, + 0x5e, 0x24, 0xb1, 0x80, 0x03, 0xdb, 0x4f, 0x34, 0x60, 0xd1, 0x5b, 0x77, + 0xb1, 0xbe, 0xd0, 0x35, 0x0a, 0xbe, 0x2e, 0x4b, 0x20, 0xb6, 0xe7, 0xc1, + 0x23, 0x47, 0x1e, 0x09, 0x04, 0x8d, 0x11, 0x1d, 0x99, 0x5d, 0x62, 0x04, + 0x97, 0x3c, 0xed, 0x68, 0xf9, 0x73, 0xe4, 0x12, 0x52, 0x1a, 0x98, 0x6f, + 0x79, 0xb1, 0x81, 0xa2, 0xbb, 0x09, 0x24, 0x9f, 0xa5, 0x33, 0xe1, 0xf0, + 0xee, 0xa5, 0x7e, 0x0f, 0xaa, 0x61, 0xc4, 0x16, 0x82, 0x1c, 0x1a, 0xe1, + 0x20, 0x16, 0xf0, 0x53, 0xe3, 0x13, 0x5b, 0x59, 0x5c, 0x82, 0x00, 0xd0, + 0x03, 0x31, 0x1a, 0x6a, 0x8a, 0xfc, 0x8a, 0xab, 0x97, 0x3c, 0xc1, 0x30, + 0x3e, 0x5d, 0xa1, 0x25, 0x21, 0xd9, 0x4d, 0xd5, 0x81, 0x90, 0xc0, 0x4e, + 0x84, 0x6e, 0x1c, 0x18, 0xf3, 0xf0, 0x41, 0xca, 0xaf, 0x0c, 0x52, 0x69, + 0x7b, 0x58, 0x05, 0xad, 0x73, 0x5e, 0xd0, 0x03, 0x65, 0xa7, 0xda, 0x49, + 0x81, 0xf0, 0x53, 0x17, 0xd0, 0x40, 0x7b, 0x5c, 0x1d, 0x12, 0x62, 0x74, + 0xe6, 0x0f, 0x2b, 0x37, 0xac, 0xe4, 0x3b, 0x17, 0x16, 0xcb, 0x29, 0x3b, + 0x2e, 0x35, 0x91, 0x24, 0x8d, 0x03, 0x8c, 0x18, 0xfe, 0x52, 0x4a, 0x73, + 0x19, 0xf5, 0x9a, 0xde, 0x9f, 0x5d, 0x38, 0x6f, 0xa8, 0xdf, 0x5e, 0x39, + 0x73, 0x1f, 0x6f, 0xef, 0xb4, 0x1f, 0x63, 0x9a, 0xef, 0xea, 0xab, 0xd5, + 0xfd, 0x62, 0xaa, 0xed, 0xae, 0x65, 0x2e, 0x79, 0xfa, 0x25, 0xc1, 0xfa, + 0x01, 0xce, 0x8c, 0x31, 0xaa, 0xe6, 0xb1, 0xba, 0xad, 0xb5, 0x1d, 0x97, + 0x81, 0x73, 0x06, 0x90, 0xe1, 0xaf, 0xde, 0xad, 0x57, 0x99, 0xd0, 0x6d, + 0x21, 0xf7, 0xe3, 0x1a, 0xdf, 0xde, 0x07, 0xb7, 0xfe, 0x81, 0x1f, 0x91, + 0x25, 0x3d, 0x2f, 0xfc, 0xe0, 0xc6, 0x75, 0x8d, 0xa5, 0xf5, 0x59, 0x4e, + 0xff, 0x00, 0x68, 0xb2, 0xc1, 0x0d, 0x9f, 0x88, 0x56, 0xf0, 0xb2, 0x2b, + 0xcd, 0x63, 0xb2, 0x29, 0xd2, 0xa2, 0xf2, 0xd0, 0x5c, 0x27, 0x76, 0xcd, + 0x3b, 0x9d, 0x17, 0x37, 0x45, 0x7d, 0x3f, 0x2e, 0xfa, 0x99, 0x87, 0x79, + 0xa0, 0xbb, 0xda, 0x19, 0x5b, 0xb4, 0x9d, 0x5d, 0x2e, 0x6d, 0x92, 0x65, + 0x6f, 0x60, 0xe3, 0x7d, 0x94, 0xed, 0x17, 0x3d, 0xc5, 0xcf, 0x3b, 0xc1, + 0x80, 0x1e, 0x63, 0xe9, 0x43, 0x46, 0x89, 0x29, 0x9d, 0x98, 0xd5, 0xdb, + 0xea, 0x31, 0xcd, 0x76, 0xd3, 0xf4, 0xa7, 0x46, 0x91, 0xe5, 0xac, 0x2a, + 0x4f, 0xe8, 0xf8, 0x97, 0x06, 0xb0, 0x53, 0x5b, 0x44, 0x7b, 0xda, 0xd2, + 0x0b, 0xbd, 0xa4, 0x6d, 0xd4, 0x42, 0xd6, 0xca, 0x7c, 0xe3, 0xfa, 0x4d, + 0x6c, 0xb9, 0xde, 0xdd, 0xdf, 0x9a, 0x34, 0xe4, 0xa0, 0xe2, 0xd7, 0x76, + 0x3b, 0x3d, 0xcd, 0x63, 0xc9, 0xd1, 0xc4, 0x18, 0xf9, 0x81, 0xb5, 0x25, + 0x34, 0x8f, 0x49, 0xc2, 0x23, 0x6b, 0xeb, 0x04, 0xb4, 0x88, 0xe7, 0x51, + 0xe6, 0x8d, 0xfb, 0x3b, 0x1e, 0x27, 0x7b, 0xb6, 0xcc, 0xfa, 0x72, 0x62, + 0x7c, 0x22, 0x55, 0xd7, 0x87, 0xce, 0xf6, 0xd4, 0xe2, 0xf1, 0x00, 0x01, + 0xb6, 0x0c, 0x6b, 0x1c, 0xa9, 0xfb, 0xe3, 0x77, 0xd9, 0xce, 0xee, 0x76, + 0xc8, 0x94, 0x94, 0xe5, 0xbc, 0x61, 0x5a, 0xd0, 0x6b, 0xbc, 0xee, 0x82, + 0xd6, 0x53, 0x49, 0xf6, 0xc9, 0xd3, 0xf7, 0x78, 0xfb, 0x91, 0x2b, 0x12, + 0xc7, 0x07, 0x3a, 0x18, 0x1c, 0x5b, 0x31, 0xb7, 0x74, 0x79, 0xff, 0x00, + 0xb5, 0x60, 0x39, 0x99, 0xd5, 0xd8, 0xd7, 0x33, 0x73, 0x5d, 0x00, 0x97, + 0xf0, 0x4f, 0xc4, 0x89, 0xdc, 0xa0, 0x72, 0x6e, 0xdc, 0xe7, 0x3c, 0xd6, + 0xdd, 0xbf, 0x4a, 0xa1, 0x2d, 0xd3, 0xf9, 0x3a, 0x91, 0x31, 0xdd, 0x25, + 0x3d, 0x0f, 0xd8, 0x31, 0xa9, 0xaf, 0xed, 0x0f, 0x71, 0x0d, 0xaa, 0x49, + 0x7e, 0x9a, 0x1f, 0x88, 0x0a, 0xed, 0x77, 0x06, 0xeb, 0xea, 0xfb, 0x47, + 0x1a, 0xb6, 0x0c, 0x88, 0x07, 0x42, 0xb9, 0xa6, 0x67, 0xe3, 0xbe, 0xb6, + 0xb5, 0xad, 0xac, 0x35, 0x87, 0x73, 0x6c, 0xb0, 0x17, 0x13, 0xf1, 0x2e, + 0x57, 0x31, 0xf2, 0xb7, 0xd4, 0x1f, 0x5b, 0x98, 0x0e, 0x83, 0x63, 0x85, + 0x70, 0x0f, 0x3c, 0xf9, 0x82, 0x92, 0x9d, 0xda, 0xef, 0xea, 0x0e, 0xb0, + 0x6d, 0xb0, 0xbf, 0x67, 0xd3, 0x6e, 0xd6, 0x91, 0xa8, 0xed, 0xc1, 0xfc, + 0x55, 0x4e, 0xa5, 0x9b, 0xd6, 0x19, 0x6e, 0xc6, 0x54, 0x0d, 0x7a, 0x12, + 0x18, 0x24, 0xb4, 0x13, 0x07, 0x78, 0x99, 0xe2, 0x78, 0x95, 0x5a, 0x9c, + 0xbf, 0x4d, 0xfe, 0xa6, 0xd0, 0xd7, 0x3f, 0xd8, 0xe1, 0xb4, 0xf3, 0xe0, + 0x1c, 0xdd, 0x35, 0x57, 0x99, 0x73, 0x5c, 0x77, 0x31, 0xc5, 0x80, 0xc1, + 0x71, 0xd4, 0xfb, 0x86, 0x87, 0x91, 0xfc, 0x12, 0x52, 0x62, 0x68, 0xc8, + 0x82, 0x6a, 0xa8, 0xb3, 0x42, 0xd6, 0xed, 0x6b, 0xa0, 0xb6, 0x39, 0x74, + 0x6a, 0xae, 0x1d, 0x9b, 0x18, 0xc1, 0xb4, 0x1e, 0xe1, 0xb0, 0x34, 0xed, + 0x01, 0x64, 0xd9, 0x7d, 0x54, 0x9d, 0xad, 0x32, 0x37, 0x7e, 0xe4, 0x49, + 0xf8, 0xb7, 0xb2, 0x87, 0xda, 0xe5, 0xd6, 0x3c, 0x52, 0x43, 0xea, 0x12, + 0x5d, 0x0e, 0x1a, 0x0e, 0xfe, 0xe8, 0x49, 0x4d, 0xbb, 0xb3, 0x2e, 0x6e, + 0x48, 0x6d, 0x65, 0x90, 0xe6, 0xea, 0xcd, 0x66, 0x47, 0x8b, 0xbb, 0x2b, + 0x75, 0xe5, 0xdb, 0xb3, 0xdf, 0x47, 0x02, 0x5a, 0x5a, 0xee, 0x7c, 0xb5, + 0x58, 0xb4, 0x64, 0x35, 0xf6, 0xbb, 0x21, 0xcc, 0x78, 0x73, 0xc4, 0x91, + 0xec, 0x3d, 0xbb, 0x0f, 0xcd, 0xe1, 0x1a, 0x8e, 0xb6, 0x1d, 0x41, 0xb3, + 0xd0, 0x2d, 0x66, 0x87, 0x7b, 0xe7, 0x89, 0x81, 0xe0, 0x92, 0x9b, 0xe3, + 0x3c, 0xdc, 0xfd, 0xac, 0x63, 0xea, 0x03, 0x47, 0x1b, 0x1a, 0xd1, 0xf1, + 0xd3, 0x71, 0x25, 0x45, 0x97, 0x58, 0xfb, 0x3d, 0x5b, 0x18, 0x29, 0x63, + 0x44, 0x0a, 0xc3, 0x85, 0x8e, 0xfe, 0xb1, 0xdb, 0xe3, 0xd9, 0x54, 0xc9, + 0xbf, 0x21, 0xa4, 0xbe, 0x9a, 0x01, 0x73, 0x0f, 0xe9, 0x43, 0x64, 0x9f, + 0x81, 0xe4, 0x0f, 0x8a, 0xb3, 0x57, 0x54, 0xdb, 0x20, 0x57, 0xb4, 0x86, + 0xc9, 0x74, 0x82, 0x4c, 0x78, 0xa4, 0xa6, 0xd5, 0x65, 0x82, 0x1c, 0xfd, + 0x03, 0x7b, 0x79, 0x93, 0x13, 0xe2, 0x95, 0xf6, 0x50, 0xe6, 0xec, 0x71, + 0x73, 0xa7, 0x48, 0x66, 0xa7, 0xcc, 0x7b, 0x55, 0x4c, 0x9c, 0xd3, 0x6b, + 0x5a, 0x5e, 0xdd, 0xa0, 0x38, 0x38, 0x16, 0x98, 0x26, 0x3c, 0x60, 0x78, + 0xa8, 0x9e, 0xa0, 0x34, 0xad, 0xae, 0x0c, 0x88, 0x71, 0x76, 0x9f, 0x76, + 0xa9, 0x29, 0x2b, 0x58, 0xca, 0x41, 0x14, 0x63, 0x38, 0xcb, 0x84, 0xea, + 0xd6, 0x98, 0xe2, 0x75, 0x3a, 0xa6, 0x6e, 0x45, 0xc1, 0xfe, 0xad, 0x94, + 0x7a, 0x6d, 0x61, 0x86, 0x09, 0xdc, 0xe2, 0x3c, 0x7d, 0xba, 0x09, 0x59, + 0xee, 0xea, 0x59, 0x4f, 0x97, 0xb0, 0x18, 0xd4, 0x46, 0xe0, 0x5b, 0x00, + 0xc4, 0xcb, 0x5a, 0x50, 0x3f, 0x6a, 0xe5, 0x34, 0xbb, 0xed, 0x4d, 0x1b, + 0x39, 0x60, 0x6e, 0xef, 0x84, 0x13, 0xb4, 0x4a, 0x4a, 0x6e, 0x87, 0xd7, + 0x60, 0x73, 0xc3, 0x76, 0x07, 0x19, 0x7b, 0x4b, 0x83, 0x43, 0xa0, 0xcb, + 0x77, 0x4c, 0xf0, 0x8a, 0x2d, 0x7e, 0xd0, 0xf6, 0x35, 0x8e, 0x07, 0x52, + 0x01, 0x04, 0x48, 0xf9, 0x85, 0x49, 0xb9, 0x34, 0x5e, 0x22, 0xba, 0xb7, + 0xb8, 0x76, 0x23, 0xdd, 0x3e, 0x5a, 0x02, 0x95, 0xcf, 0xb5, 0xcd, 0x68, + 0xb1, 0xae, 0x0c, 0x71, 0xf7, 0x02, 0xed, 0xa2, 0x07, 0xc0, 0x04, 0x94, + 0xdd, 0x6e, 0x56, 0x53, 0x65, 0xd6, 0xd6, 0xd3, 0x07, 0xf7, 0x83, 0x5a, + 0x1b, 0xff, 0x00, 0x4a, 0x4a, 0x57, 0xf5, 0x4a, 0x9a, 0x5c, 0x2b, 0x82, + 0xf3, 0xf4, 0x64, 0x81, 0xf8, 0x09, 0x3f, 0x82, 0x08, 0xcc, 0xa6, 0xa0, + 0x5a, 0xe6, 0xcb, 0x07, 0x0e, 0x0e, 0x0e, 0x1f, 0x34, 0x27, 0xe4, 0xe3, + 0x5e, 0x4f, 0xb3, 0x79, 0x76, 0xac, 0x6b, 0x35, 0x25, 0x91, 0xaf, 0x6f, + 0x14, 0x94, 0xdb, 0x39, 0xd6, 0xb0, 0xed, 0x0d, 0x6e, 0xba, 0x8f, 0x11, + 0xf8, 0x85, 0x07, 0xdc, 0xeb, 0x36, 0x8b, 0xa7, 0x7c, 0xc8, 0x75, 0x7a, + 0x01, 0xe2, 0x4b, 0x5d, 0x3c, 0x05, 0x41, 0xd7, 0x57, 0xcb, 0xa9, 0x73, + 0x0e, 0xa6, 0x6c, 0x6c, 0x3c, 0x79, 0x8f, 0x25, 0x0c, 0x61, 0x73, 0x72, + 0x1c, 0xe2, 0x5d, 0xb4, 0x80, 0x1a, 0xe0, 0x77, 0x19, 0x76, 0xb3, 0xa0, + 0x88, 0x49, 0x4d, 0xeb, 0xee, 0xc8, 0x65, 0x52, 0xfb, 0x5b, 0x5b, 0xc8, + 0x20, 0x10, 0xd1, 0xae, 0x9c, 0xc9, 0x2e, 0x1f, 0x82, 0x0d, 0x0c, 0x25, + 0x87, 0xf4, 0x8e, 0x7b, 0x86, 0xbb, 0x9e, 0xf9, 0xdd, 0xe2, 0x35, 0xd6, + 0x15, 0x6c, 0x87, 0xfa, 0xec, 0xb3, 0x78, 0x2d, 0xd0, 0x00, 0x25, 0xa4, + 0x38, 0xea, 0x7b, 0x78, 0x42, 0x0e, 0xca, 0x49, 0x67, 0xa8, 0xe7, 0xba, + 0xbf, 0x6e, 0xd0, 0xc6, 0xb1, 0xbf, 0x39, 0x3e, 0x69, 0x29, 0xd1, 0x19, + 0xa5, 0xf8, 0xa7, 0x1d, 0xb5, 0xb8, 0xe4, 0x56, 0x60, 0x39, 0xd1, 0x03, + 0xb9, 0x27, 0x88, 0xf8, 0x26, 0xaf, 0x21, 0x96, 0x09, 0x01, 0xce, 0x20, + 0xc1, 0x0c, 0x81, 0x07, 0xce, 0x48, 0xd1, 0x50, 0x68, 0xa2, 0xc7, 0x92, + 0x0c, 0x07, 0x4b, 0x4b, 0x5d, 0x2e, 0x73, 0xa0, 0xcf, 0x6d, 0x39, 0x4a, + 0x69, 0xa2, 0xb7, 0x06, 0x59, 0xe9, 0x11, 0xa1, 0x7f, 0x81, 0xf3, 0x99, + 0x49, 0x4d, 0xc1, 0x6e, 0x3b, 0xac, 0xd8, 0x1d, 0xb6, 0xda, 0xcc, 0xb4, + 0x82, 0x09, 0x69, 0x3e, 0x5a, 0xa3, 0x8a, 0xed, 0x30, 0xeb, 0x2e, 0x2f, + 0x68, 0xd4, 0x4b, 0x03, 0x79, 0xd3, 0xb4, 0x2c, 0xfc, 0x7a, 0xb1, 0xdd, + 0xfa, 0x57, 0xb9, 0xaf, 0x73, 0xf4, 0x2f, 0x6b, 0x9b, 0x2e, 0x3f, 0x15, + 0x6e, 0x9c, 0x9a, 0xc3, 0x5c, 0xc6, 0x39, 0xce, 0x6b, 0x0e, 0xd0, 0x1f, + 0x0e, 0xfb, 0xa4, 0x84, 0x94, 0x98, 0x6d, 0x67, 0xb0, 0x41, 0xa9, 0xba, + 0xb8, 0x02, 0x78, 0xf2, 0x95, 0x1b, 0x68, 0xc2, 0xbf, 0x14, 0xb6, 0xea, + 0xfd, 0x56, 0x90, 0x4b, 0x47, 0xa6, 0x79, 0x33, 0xe0, 0x0f, 0x09, 0xa8, + 0xc8, 0x60, 0x7b, 0xf7, 0xd6, 0xc6, 0x56, 0xd2, 0x75, 0x8d, 0xae, 0x3f, + 0x22, 0x9b, 0x23, 0x26, 0xb7, 0x83, 0x53, 0x65, 0xad, 0x89, 0x25, 0xa2, + 0x64, 0x0e, 0xdc, 0xa4, 0xa7, 0x84, 0xcb, 0xe9, 0xf9, 0x58, 0xef, 0x8b, + 0x18, 0x44, 0xf7, 0x83, 0xf7, 0x14, 0x06, 0xd3, 0x63, 0x88, 0x6b, 0x5b, + 0xb9, 0xc7, 0x80, 0x17, 0xa1, 0xb7, 0x1b, 0x1c, 0xed, 0x05, 0xa4, 0x17, + 0x09, 0xf7, 0x34, 0x71, 0xf7, 0xc2, 0x8d, 0x58, 0xf8, 0x6d, 0x07, 0x6b, + 0x00, 0x0d, 0x30, 0x65, 0xa0, 0x70, 0x63, 0xc1, 0x25, 0x3c, 0xe7, 0x42, + 0xe9, 0x59, 0x54, 0xdc, 0x32, 0x2c, 0xac, 0x81, 0xfb, 0xc4, 0x09, 0x1e, + 0x61, 0x6f, 0x64, 0xdf, 0x70, 0xb1, 0x82, 0x82, 0xd7, 0x39, 0xbc, 0xb5, + 0xc7, 0x61, 0xfe, 0xc9, 0xd7, 0x5f, 0x92, 0x2d, 0x85, 0x8f, 0x24, 0x3a, + 0xc0, 0xd1, 0xa8, 0x23, 0x83, 0xe4, 0x44, 0x35, 0xbf, 0x04, 0x36, 0x0c, + 0x4a, 0xc1, 0xd9, 0x24, 0xf2, 0xf6, 0x82, 0x76, 0x98, 0xd6, 0x75, 0x04, + 0x4a, 0x4a, 0x47, 0x65, 0xfd, 0x42, 0xd2, 0xd6, 0xec, 0x7b, 0x1a, 0x35, + 0x25, 0xa1, 0x8e, 0x24, 0xfd, 0xe3, 0xf2, 0x2b, 0x3f, 0x68, 0xb8, 0x7b, + 0xed, 0x01, 0x86, 0x34, 0x79, 0x11, 0x13, 0xd9, 0x08, 0xe4, 0x12, 0xc6, + 0x9d, 0xaf, 0x66, 0xef, 0x03, 0xfd, 0xca, 0xb9, 0x78, 0x7b, 0xe5, 0xdb, + 0x6c, 0x8e, 0x4d, 0x8d, 0xf0, 0xf0, 0x3a, 0x94, 0x94, 0xdb, 0x66, 0x56, + 0x5b, 0x1d, 0xbe, 0xd7, 0xd4, 0xea, 0xf8, 0x0d, 0x68, 0x73, 0x5c, 0x0f, + 0xce, 0x51, 0x7f, 0x69, 0x3f, 0x74, 0xc0, 0x8d, 0xbc, 0x6e, 0xf7, 0x7d, + 0xca, 0x8e, 0xcd, 0xc2, 0x1f, 0xa6, 0xef, 0x76, 0xd8, 0x3a, 0x1f, 0x20, + 0x3f, 0xb9, 0x2f, 0x42, 0xcf, 0x43, 0x7e, 0xc7, 0x44, 0xed, 0xdf, 0xb1, + 0xdf, 0x4a, 0x67, 0x6f, 0x8a, 0x4a, 0x69, 0x55, 0x81, 0x99, 0x92, 0xdf, + 0xb2, 0xd5, 0x5b, 0x03, 0xda, 0x46, 0xcb, 0x0c, 0x6d, 0x04, 0x77, 0x8f, + 0x82, 0x25, 0xfd, 0x2b, 0xa8, 0x54, 0xe0, 0xd0, 0xda, 0x9c, 0x3b, 0x3a, + 0x46, 0x84, 0x08, 0x92, 0xd2, 0xbb, 0x7c, 0x5c, 0x1a, 0x2a, 0x68, 0x60, + 0x60, 0x98, 0x97, 0xba, 0x39, 0x27, 0xbc, 0xa1, 0xba, 0x86, 0x3b, 0x22, + 0x4b, 0x74, 0xd1, 0xbe, 0x3f, 0xee, 0x49, 0x4f, 0x2a, 0xde, 0x87, 0x6d, + 0xd8, 0xcd, 0x6b, 0x5b, 0x16, 0x98, 0x93, 0x24, 0x54, 0x7c, 0xf6, 0x70, + 0xa9, 0xe5, 0xe2, 0x5f, 0x8a, 0x2d, 0xb6, 0xca, 0xc0, 0x35, 0x17, 0x16, + 0x3a, 0x82, 0x40, 0x6e, 0xdd, 0x37, 0x3c, 0x13, 0xb9, 0x7a, 0x05, 0x8c, + 0xaa, 0x8a, 0x8d, 0x8d, 0x8d, 0xcd, 0x69, 0xda, 0x3b, 0x6b, 0xc2, 0xe7, + 0x7a, 0xcd, 0x37, 0x57, 0xd0, 0xb2, 0x4e, 0xc1, 0x0e, 0x60, 0x36, 0x39, + 0xdf, 0x48, 0x97, 0x11, 0x3b, 0x47, 0xc5, 0x25, 0x3c, 0xc7, 0xdb, 0xf2, + 0x2e, 0x68, 0x73, 0x9c, 0xeb, 0x1a, 0xd2, 0x0b, 0x41, 0x73, 0x80, 0x07, + 0xcb, 0x5d, 0x21, 0x31, 0xea, 0xd9, 0x4d, 0x2d, 0x01, 0xee, 0xd2, 0x78, + 0x73, 0xb4, 0x8f, 0x89, 0x54, 0x9a, 0x7d, 0x81, 0xa3, 0xc7, 0x81, 0xa1, + 0xe1, 0x48, 0xb4, 0x3c, 0xb5, 0x9c, 0x90, 0x0c, 0x47, 0x23, 0x52, 0x92, + 0x9b, 0xd8, 0x3d, 0x4a, 0xfb, 0xaf, 0xd9, 0x75, 0xaf, 0x35, 0xbc, 0x16, + 0xb8, 0x02, 0x5d, 0xa1, 0x3b, 0x75, 0x9e, 0x47, 0x8a, 0xdb, 0x6d, 0x17, + 0x55, 0x5b, 0x9d, 0xb7, 0x6b, 0x00, 0x80, 0xed, 0xc6, 0x76, 0xff, 0x00, + 0x27, 0xb7, 0x7f, 0x05, 0xcf, 0x74, 0x99, 0x19, 0xb5, 0xc7, 0x79, 0xd4, + 0x76, 0x9d, 0x17, 0x6b, 0x87, 0x63, 0x0d, 0x7b, 0x6f, 0x01, 0xc5, 0xda, + 0x6d, 0x3f, 0x9c, 0x47, 0x84, 0xf6, 0x49, 0x4e, 0x5e, 0x2e, 0x38, 0xc9, + 0xa8, 0x33, 0xd3, 0xb9, 0xee, 0x73, 0xa1, 0xd4, 0xb4, 0x06, 0x11, 0x11, + 0x1b, 0x9c, 0xe3, 0xf4, 0x56, 0x95, 0x3d, 0x26, 0xef, 0x41, 0xae, 0x7b, + 0x1b, 0x4b, 0xa4, 0xef, 0x61, 0x32, 0x40, 0x9e, 0x49, 0xaf, 0x6f, 0x2b, + 0x62, 0x8a, 0x6a, 0x61, 0xdc, 0xd0, 0x1a, 0x38, 0xda, 0x38, 0x46, 0xb5, + 0xcc, 0xd6, 0x44, 0x07, 0x36, 0x12, 0x53, 0xcb, 0x31, 0xae, 0xae, 0xeb, + 0x5a, 0xef, 0xd0, 0x19, 0x00, 0x54, 0x03, 0xdc, 0x47, 0x9f, 0xc5, 0xc9, + 0xfe, 0xce, 0xca, 0xec, 0x69, 0xb9, 0x86, 0xb0, 0x79, 0x2f, 0x64, 0x09, + 0x3a, 0x8e, 0x56, 0xfb, 0x31, 0xb1, 0xde, 0xe6, 0x3d, 0xec, 0x1e, 0xa3, + 0x08, 0x73, 0x5e, 0x46, 0xad, 0x9d, 0x39, 0x44, 0x7b, 0xab, 0xb2, 0xc0, + 0xc2, 0xcd, 0xcd, 0x69, 0x20, 0x92, 0x34, 0x91, 0xf1, 0x49, 0x4f, 0x38, + 0x59, 0x75, 0x92, 0xf6, 0x6f, 0x00, 0xfd, 0x12, 0x04, 0xcc, 0x76, 0x6f, + 0x82, 0x7c, 0x7c, 0x7b, 0xf3, 0x37, 0xb6, 0xcd, 0xcc, 0x0e, 0x1a, 0x3f, + 0x6e, 0xc2, 0x08, 0x6c, 0xf2, 0x00, 0x32, 0x25, 0x74, 0x2c, 0xc7, 0x05, + 0xed, 0x71, 0xd1, 0xac, 0x10, 0xdf, 0x3e, 0xf2, 0x54, 0xde, 0xc6, 0xb4, + 0x70, 0x65, 0xc7, 0x48, 0x49, 0x4f, 0x21, 0x6f, 0x48, 0xea, 0x54, 0x35, + 0xae, 0xab, 0xf4, 0xae, 0x6e, 0xb6, 0x35, 0x8e, 0x25, 0xc1, 0xbe, 0x3e, + 0xe3, 0xdd, 0x37, 0xec, 0xdc, 0xdc, 0x86, 0xb4, 0xda, 0x4b, 0x5d, 0x59, + 0xdd, 0x5b, 0x81, 0x8d, 0xa7, 0xb6, 0x8f, 0x5d, 0x75, 0x54, 0xd6, 0xc2, + 0x6c, 0x81, 0xea, 0x11, 0x0e, 0x70, 0xee, 0x04, 0xc7, 0xe5, 0x55, 0xcb, + 0x7d, 0x6b, 0x78, 0xda, 0xc1, 0xa4, 0x46, 0xa9, 0x29, 0xca, 0x67, 0x49, + 0x65, 0x97, 0xd7, 0x71, 0x04, 0x38, 0x02, 0x5e, 0xd6, 0xce, 0xd7, 0x39, + 0xd1, 0x24, 0xf9, 0xe8, 0xa7, 0x67, 0x49, 0x0e, 0x26, 0x2c, 0x2d, 0x33, + 0xdc, 0x02, 0x7c, 0x39, 0xd1, 0x6d, 0x36, 0xb6, 0xb6, 0xc1, 0x00, 0x7c, + 0xfc, 0x78, 0x50, 0xda, 0xfd, 0xd0, 0x06, 0x84, 0x99, 0xed, 0xde, 0x52, + 0x53, 0xcd, 0xe7, 0x74, 0xfc, 0xca, 0x43, 0x8b, 0x4c, 0xe3, 0x06, 0x89, + 0xda, 0xe8, 0x2d, 0x74, 0xf2, 0x46, 0x9a, 0x7c, 0xd3, 0x62, 0xf4, 0xfc, + 0xbb, 0x6c, 0x6b, 0x31, 0xec, 0xd8, 0x06, 0x8f, 0x76, 0xa4, 0x0f, 0x1d, + 0x0c, 0x85, 0xd3, 0x58, 0x0b, 0x83, 0x9b, 0xe9, 0x87, 0x36, 0x00, 0x92, + 0x74, 0xe7, 0xc2, 0x14, 0x6a, 0x65, 0xac, 0x7f, 0x2d, 0x6b, 0x00, 0xec, + 0x3b, 0x9f, 0xf7, 0x24, 0xa7, 0x9e, 0xea, 0x18, 0x58, 0x78, 0xd6, 0x06, + 0x7a, 0xc6, 0xfb, 0x87, 0xd2, 0xa5, 0xed, 0x2e, 0x2d, 0x9f, 0xce, 0x96, + 0xb4, 0xe9, 0xdd, 0x12, 0x9a, 0x81, 0x69, 0xaa, 0xaa, 0x9c, 0x5d, 0x70, + 0x30, 0xe9, 0x80, 0x47, 0x78, 0xec, 0xb5, 0xad, 0x71, 0x16, 0x58, 0x5d, + 0xb7, 0x61, 0x89, 0x2e, 0xee, 0xe8, 0xe0, 0x2c, 0xeb, 0x69, 0xca, 0x24, + 0x3a, 0xa7, 0x35, 0xbb, 0x8f, 0xb6, 0x09, 0x6c, 0x41, 0xe0, 0xc0, 0x3b, + 0xbe, 0x69, 0x29, 0xae, 0xee, 0x95, 0x71, 0xf5, 0x1b, 0x55, 0x4e, 0x6d, + 0x64, 0x80, 0xc0, 0xf7, 0x07, 0x38, 0x88, 0xd6, 0x60, 0xfc, 0x94, 0x1f, + 0xd2, 0x73, 0xef, 0xdb, 0x4d, 0xbb, 0x69, 0xac, 0x01, 0x24, 0xc1, 0x26, + 0x7b, 0x37, 0x6f, 0x84, 0x2d, 0x6a, 0x5b, 0xd4, 0x9d, 0x50, 0xb2, 0xd1, + 0x4e, 0xe7, 0x09, 0x6c, 0x6e, 0x69, 0xf2, 0x91, 0xe2, 0x8e, 0xc7, 0xe5, + 0x10, 0x0d, 0xdb, 0x18, 0xfd, 0x43, 0x43, 0x09, 0x32, 0x3c, 0x75, 0x84, + 0x94, 0xe4, 0x51, 0xd0, 0xf2, 0x40, 0x65, 0x5f, 0x69, 0x6b, 0x68, 0x60, + 0xfc, 0xda, 0xc6, 0xe9, 0x9d, 0x22, 0x56, 0x80, 0xe9, 0x18, 0x4c, 0x07, + 0x78, 0xdc, 0x5d, 0x05, 0xc5, 0xc7, 0x4f, 0x86, 0x90, 0xa1, 0x6d, 0xbd, + 0x69, 0x96, 0x96, 0x62, 0xe2, 0x51, 0x65, 0x42, 0x36, 0xbd, 0xf6, 0x16, + 0x93, 0xe7, 0x1d, 0xa1, 0x30, 0x3f, 0x58, 0x6d, 0x70, 0x77, 0xa1, 0x8c, + 0xc8, 0xd0, 0x9d, 0xef, 0x70, 0x1d, 0xe7, 0xc5, 0x25, 0x34, 0xef, 0xe8, + 0xd8, 0xaf, 0x0e, 0xbb, 0x19, 0xad, 0xae, 0x26, 0x06, 0xde, 0x4f, 0xc6, + 0x25, 0x46, 0xae, 0x8a, 0xea, 0x8e, 0x8f, 0x68, 0xd2, 0x45, 0x60, 0x16, + 0xfc, 0x60, 0xb6, 0x09, 0x5a, 0x7e, 0x9f, 0x51, 0xd9, 0xb5, 0xe7, 0x1c, + 0x36, 0x3d, 0xf0, 0x1e, 0x60, 0xf9, 0x19, 0xd5, 0x0d, 0xd5, 0x66, 0x9c, + 0x96, 0xb9, 0xf7, 0x54, 0xda, 0x84, 0x83, 0xb5, 0xae, 0xdc, 0x67, 0xfa, + 0xdf, 0x04, 0x94, 0xe7, 0xf5, 0x2e, 0x94, 0xe7, 0x61, 0xb2, 0xca, 0x2c, + 0xfd, 0x66, 0xb7, 0x08, 0x63, 0xbb, 0x83, 0xcb, 0x04, 0xf0, 0x55, 0x4a, + 0xf1, 0xba, 0xcb, 0x1b, 0x5b, 0x9c, 0x69, 0x71, 0x2e, 0x1b, 0x99, 0x3a, + 0xb7, 0x49, 0xfa, 0x5b, 0x79, 0x84, 0x3e, 0xb7, 0xd7, 0x33, 0xb1, 0x7a, + 0x8f, 0xa5, 0x53, 0x98, 0x5b, 0x5b, 0x40, 0x6b, 0x8b, 0x44, 0xea, 0x06, + 0xe5, 0x45, 0xff, 0x00, 0x59, 0x3a, 0xa3, 0x88, 0x0e, 0x7b, 0x4d, 0x6f, + 0x96, 0xc0, 0x6b, 0x41, 0x07, 0xc8, 0xa4, 0xa7, 0x71, 0xf4, 0x75, 0x17, + 0x4c, 0x06, 0x96, 0x1d, 0x60, 0x92, 0x78, 0xf1, 0x8d, 0x13, 0x33, 0xa5, + 0xe5, 0x1d, 0xc2, 0xc7, 0x37, 0x6e, 0xae, 0x8f, 0x19, 0xd6, 0x06, 0x8e, + 0x58, 0x4e, 0xfa, 0xcb, 0xd4, 0xd8, 0xd0, 0x1a, 0x5b, 0xed, 0xf1, 0x60, + 0x91, 0xd8, 0x7e, 0x45, 0xbd, 0xd1, 0xfa, 0xa6, 0x4e, 0x6e, 0x2d, 0x56, + 0x17, 0xd6, 0x72, 0x1e, 0x1c, 0xe7, 0xb0, 0xcb, 0x44, 0x03, 0x00, 0xb7, + 0x6a, 0x4a, 0x64, 0x3a, 0x46, 0x43, 0x81, 0x71, 0x20, 0x87, 0x99, 0xdb, + 0x2e, 0x1a, 0x1e, 0xc6, 0x00, 0x44, 0xfd, 0x98, 0xf0, 0x43, 0x18, 0xe6, + 0x80, 0x23, 0x73, 0x9e, 0x37, 0x69, 0xe1, 0xf4, 0x55, 0xc3, 0x65, 0xf5, + 0xb4, 0x97, 0x56, 0x5f, 0xdf, 0xf4, 0x6e, 0x04, 0xfc, 0x00, 0x20, 0x20, + 0xb3, 0xa8, 0x3d, 0xae, 0x7b, 0x8e, 0x16, 0x5b, 0x9a, 0xe8, 0xd7, 0x66, + 0xbf, 0xf5, 0x49, 0x29, 0xad, 0x67, 0x48, 0x7b, 0x1a, 0xf6, 0x17, 0xb4, + 0xd2, 0xe0, 0x36, 0xcb, 0x64, 0x8e, 0xe7, 0xc7, 0xba, 0xac, 0xec, 0x7b, + 0xeb, 0x6e, 0xd1, 0x4d, 0x85, 0xf3, 0x0d, 0x76, 0xd6, 0x91, 0xa1, 0xd0, + 0xab, 0x4f, 0xfa, 0xc3, 0x8f, 0xf6, 0x96, 0x54, 0xfa, 0xaf, 0xac, 0x19, + 0x0e, 0xad, 0xf5, 0x92, 0xef, 0x8c, 0x47, 0x6f, 0x8a, 0x76, 0xf5, 0xee, + 0x8d, 0xba, 0x77, 0x90, 0x4f, 0x3f, 0xa3, 0x20, 0xfe, 0x01, 0x25, 0x34, + 0xbe, 0xc3, 0x9d, 0xb9, 0x97, 0x37, 0x6b, 0x1f, 0xa9, 0x87, 0x34, 0x34, + 0x43, 0x84, 0x1e, 0x42, 0x2f, 0xd9, 0x32, 0xb7, 0xc6, 0xef, 0x77, 0x33, + 0xbd, 0xb1, 0x3e, 0x3f, 0xcd, 0xca, 0xd1, 0x6e, 0x7e, 0x05, 0xcd, 0xf5, + 0x2b, 0xbc, 0x6d, 0x67, 0x8b, 0xb6, 0x10, 0x4f, 0xf5, 0xa0, 0xa8, 0xfe, + 0xd0, 0xe9, 0x9f, 0x4b, 0xed, 0x8c, 0xf0, 0xfa, 0x43, 0xc7, 0xe1, 0x29, + 0x29, 0xcc, 0x3d, 0x6f, 0x37, 0x70, 0xa6, 0xb7, 0x5d, 0x6b, 0xcf, 0x00, + 0x86, 0xb1, 0xa0, 0x9f, 0x12, 0x09, 0xd3, 0xe2, 0x8c, 0xce, 0xa9, 0xd4, + 0x6b, 0x7c, 0xda, 0x5b, 0x46, 0xe2, 0x0b, 0xdc, 0x5c, 0xeb, 0x8b, 0x80, + 0xe0, 0x34, 0x30, 0x40, 0x92, 0xb0, 0x71, 0x72, 0x70, 0x23, 0xf4, 0xb6, + 0xd4, 0xd0, 0xdf, 0x6c, 0x34, 0x47, 0xfd, 0x5b, 0x9c, 0x4f, 0xdc, 0x8a, + 0x7a, 0xa7, 0x4e, 0x63, 0xe5, 0xb7, 0x96, 0x06, 0x37, 0x40, 0xd8, 0x83, + 0x1d, 0xfd, 0xbc, 0x9f, 0x24, 0x94, 0xf4, 0x59, 0x3d, 0x7d, 0xb6, 0x45, + 0x56, 0x30, 0xd5, 0x5b, 0x75, 0xf5, 0x24, 0x35, 0xaf, 0xf0, 0x8e, 0x64, + 0x2c, 0xae, 0xaf, 0xd4, 0xea, 0xbf, 0x0e, 0xda, 0xc5, 0x96, 0x39, 0xf0, + 0x03, 0x60, 0x83, 0x51, 0x92, 0x25, 0xbf, 0x76, 0xaa, 0x8b, 0x7a, 0x97, + 0x4f, 0xb0, 0xbd, 0xa6, 0x4d, 0x6e, 0xd4, 0xbd, 0xc1, 0xcc, 0x6b, 0xc1, + 0xe5, 0xbc, 0xbb, 0xc1, 0x13, 0x3d, 0xd8, 0xe7, 0x0d, 0xde, 0x8d, 0x6e, + 0x69, 0xe4, 0x1d, 0xe5, 0xf1, 0xaf, 0x60, 0x52, 0x53, 0x93, 0xe9, 0xb9, + 0xbe, 0xd7, 0x08, 0xd7, 0x50, 0x7b, 0x29, 0x57, 0x53, 0x83, 0x9a, 0xed, + 0x62, 0x24, 0x7d, 0xe5, 0x20, 0xeb, 0x9f, 0x61, 0x2f, 0x12, 0xe9, 0xd2, + 0x04, 0x22, 0x34, 0x8f, 0x5a, 0xb6, 0x4c, 0x35, 0xa2, 0x0c, 0xf9, 0x8d, + 0x74, 0x49, 0x4c, 0x2a, 0x7d, 0x94, 0xda, 0x0b, 0x4e, 0xdb, 0x1a, 0xf9, + 0x0e, 0x00, 0x13, 0xcc, 0xc7, 0x81, 0x5b, 0xb4, 0xe7, 0xdd, 0x6d, 0x6c, + 0x61, 0xb1, 0xc0, 0x03, 0x3b, 0x85, 0x64, 0x7c, 0xa5, 0xba, 0x85, 0x8a, + 0x5b, 0x58, 0xb8, 0x6d, 0xfa, 0x0d, 0x78, 0x13, 0xc9, 0x27, 0xc5, 0x5e, + 0xa6, 0xca, 0xc0, 0x96, 0xbb, 0x6b, 0x9d, 0x04, 0x34, 0x3b, 0x66, 0x9f, + 0x71, 0xd5, 0x25, 0x3a, 0xd8, 0xfd, 0x52, 0xca, 0x1c, 0x5a, 0x72, 0x9c, + 0xd2, 0xdd, 0x18, 0x5c, 0x0d, 0x8d, 0x27, 0xce, 0x5a, 0x15, 0xaa, 0xfa, + 0xde, 0x53, 0xdc, 0x2c, 0xb5, 0xb5, 0x90, 0xcf, 0x6e, 0xf9, 0x1b, 0x09, + 0x3e, 0x02, 0x77, 0x2c, 0x4a, 0xf3, 0x36, 0x9f, 0xd1, 0x7a, 0x9e, 0xa0, + 0x90, 0xe2, 0xc2, 0xd2, 0x36, 0xf8, 0xcc, 0x49, 0xd7, 0xc9, 0x12, 0xee, + 0xa2, 0x76, 0xc5, 0x9e, 0xa1, 0xaf, 0x4d, 0x1f, 0x59, 0xe4, 0x77, 0x0e, + 0x0e, 0x6a, 0x4a, 0x75, 0xef, 0xea, 0x79, 0xd6, 0x02, 0x48, 0xb2, 0x8f, + 0x69, 0x70, 0xad, 0xac, 0xd0, 0x80, 0x62, 0x7e, 0x9b, 0x4a, 0x7a, 0xba, + 0xb6, 0x45, 0x7b, 0x2b, 0x25, 0x8f, 0x2e, 0x99, 0xdc, 0xe2, 0xc8, 0xf8, + 0xfd, 0x21, 0xdf, 0xc5, 0x63, 0x53, 0x95, 0x56, 0x43, 0x43, 0xdf, 0xea, + 0x31, 0x84, 0x43, 0x4b, 0x6b, 0x71, 0x69, 0xf8, 0x7b, 0x8f, 0xe2, 0x56, + 0x8e, 0x1b, 0xf1, 0x2e, 0x33, 0x40, 0x79, 0xdb, 0xf4, 0x5c, 0x6a, 0x3b, + 0x5b, 0xe3, 0xab, 0x81, 0xf0, 0x49, 0x4d, 0xd6, 0xf5, 0xab, 0x40, 0x86, + 0xb0, 0x1b, 0x01, 0xda, 0x7f, 0x48, 0xc0, 0xcd, 0x07, 0x3a, 0x9e, 0xde, + 0x49, 0xac, 0xeb, 0x37, 0x3e, 0xf2, 0xcb, 0x6c, 0x6d, 0x4c, 0x6c, 0x01, + 0x00, 0xc1, 0x77, 0x24, 0xee, 0x2d, 0x8d, 0x3e, 0x28, 0x5f, 0x68, 0xf4, + 0x9c, 0xe2, 0x09, 0x75, 0x6e, 0x74, 0x0d, 0xc0, 0xb4, 0x8f, 0x13, 0xc7, + 0x05, 0x51, 0xbe, 0xf3, 0x6b, 0x9c, 0xdc, 0x6b, 0x48, 0xda, 0x64, 0xb7, + 0x7b, 0xbe, 0xef, 0x77, 0xf7, 0x24, 0xa7, 0x57, 0xf6, 0xb6, 0x49, 0x05, + 0xae, 0x10, 0xcf, 0xf4, 0x8c, 0x6e, 0xe3, 0x1f, 0xd9, 0xdc, 0xa1, 0x8d, + 0x98, 0xfa, 0x85, 0x86, 0xa7, 0x1b, 0x5e, 0xe7, 0x6f, 0x8b, 0x37, 0x6d, + 0x01, 0xc4, 0x4c, 0x69, 0x31, 0xe4, 0xb1, 0xe8, 0x07, 0x68, 0x70, 0x6b, + 0xc3, 0xc1, 0x20, 0x6d, 0x0d, 0x22, 0x49, 0x93, 0x06, 0x00, 0xfc, 0xaa, + 0xdd, 0x59, 0x57, 0x33, 0xd4, 0x05, 0xa1, 0x84, 0xfb, 0x64, 0x82, 0x6c, + 0xdd, 0x1d, 0xf6, 0xca, 0x4a, 0x75, 0x8f, 0x50, 0xb4, 0x99, 0x96, 0xba, + 0x3b, 0x34, 0x49, 0xff, 0x00, 0xaa, 0x41, 0xfd, 0xb2, 0xc6, 0xdc, 0xe7, + 0x3b, 0xd8, 0xc3, 0x07, 0x6b, 0x83, 0x9c, 0xed, 0xdd, 0xe3, 0x64, 0xe9, + 0xf2, 0x54, 0x3e, 0xd5, 0xf6, 0x7c, 0x7d, 0xd6, 0x07, 0x58, 0xf6, 0x89, + 0x7b, 0xfd, 0x32, 0xc7, 0x69, 0xc7, 0x60, 0x87, 0xf6, 0xb9, 0x7b, 0x89, + 0x0f, 0x75, 0x7c, 0x81, 0x1c, 0x69, 0xc8, 0x92, 0x3f, 0x22, 0x4a, 0x75, + 0x87, 0x5c, 0x3e, 0xb3, 0x59, 0xe8, 0x3b, 0x61, 0x04, 0xee, 0x21, 0xcd, + 0x27, 0x8d, 0x1a, 0xd3, 0xaf, 0xde, 0x8a, 0x7a, 0xbb, 0x5a, 0x09, 0xfb, + 0x3b, 0xa5, 0xda, 0x46, 0xf6, 0x8d, 0x47, 0x63, 0xb9, 0x61, 0xd9, 0x9a, + 0x40, 0xd2, 0x60, 0x09, 0xdc, 0x5c, 0xd2, 0x3c, 0x87, 0xb4, 0x21, 0x57, + 0x94, 0xd6, 0x56, 0x5c, 0xe1, 0x21, 0xda, 0x8f, 0x6b, 0x5c, 0x24, 0xf8, + 0xb9, 0xc6, 0x4a, 0x4a, 0x75, 0xaa, 0xce, 0x75, 0x8d, 0x75, 0x97, 0x54, + 0xd0, 0x41, 0x30, 0x5a, 0xf0, 0x19, 0x24, 0xf9, 0xa8, 0xd1, 0xd4, 0xab, + 0x25, 0xe6, 0xea, 0x1c, 0x24, 0x6d, 0x6c, 0xbb, 0x74, 0x37, 0xc1, 0xba, + 0x78, 0xf8, 0x2c, 0xc3, 0x91, 0x55, 0x8d, 0x32, 0x5e, 0x58, 0x7d, 0xc4, + 0x02, 0x06, 0x83, 0xf2, 0x26, 0x76, 0x55, 0x7b, 0x1a, 0xfa, 0xd9, 0x2e, + 0x27, 0x49, 0x63, 0x77, 0x47, 0x72, 0x3e, 0x5e, 0x29, 0x29, 0xe8, 0x2b, + 0xea, 0x98, 0xb5, 0xd6, 0xd1, 0x6b, 0x5e, 0xd0, 0xdd, 0x0b, 0x88, 0xfc, + 0x7f, 0xd4, 0x23, 0x37, 0xa9, 0xf4, 0xf2, 0x43, 0x7d, 0x50, 0x26, 0x41, + 0x0e, 0x99, 0x1d, 0xff, 0x00, 0x8a, 0xc3, 0x19, 0x6c, 0x24, 0x8d, 0xae, + 0x7b, 0x04, 0x6a, 0xe3, 0x13, 0xf9, 0x14, 0x2b, 0xea, 0x75, 0x02, 0xe6, + 0xb8, 0x80, 0x01, 0xda, 0x1a, 0x08, 0xed, 0xcf, 0xdc, 0x92, 0x9e, 0x8f, + 0xed, 0x38, 0xd5, 0x54, 0x2e, 0x75, 0x8d, 0x75, 0x63, 0x40, 0xe1, 0xae, + 0xbf, 0x29, 0x41, 0x1d, 0x6b, 0xa6, 0xec, 0x07, 0xd5, 0x24, 0x3b, 0x4d, + 0x5a, 0x63, 0xe7, 0xe0, 0xb0, 0x2c, 0xb1, 0x8e, 0xb7, 0xd5, 0x69, 0x2d, + 0x93, 0x24, 0x35, 0xc7, 0xdd, 0xdb, 0xf9, 0x5f, 0x91, 0x2b, 0x32, 0x30, + 0xda, 0x3d, 0xf5, 0x93, 0x6c, 0x43, 0x01, 0x9d, 0x52, 0x53, 0xbd, 0x97, + 0xd4, 0x71, 0x2b, 0xb1, 0xb5, 0x9b, 0x1a, 0xed, 0xe0, 0x48, 0x6c, 0x97, + 0x80, 0x78, 0x3e, 0x10, 0x83, 0x6f, 0x52, 0xc1, 0xdc, 0x4d, 0x9b, 0x83, + 0x43, 0x77, 0x07, 0x96, 0xc0, 0xfc, 0x57, 0x3d, 0x75, 0xcc, 0xad, 0xaf, + 0x0c, 0xd5, 0xcf, 0xd6, 0x58, 0xd1, 0x3e, 0x52, 0xe7, 0x26, 0x63, 0xdb, + 0x6d, 0x70, 0xfa, 0xdc, 0xcd, 0x0e, 0xdd, 0xd6, 0x11, 0x3e, 0x5a, 0x14, + 0x94, 0xe6, 0xf5, 0xdb, 0x2b, 0xbb, 0x3d, 0xf7, 0x54, 0x65, 0x86, 0x36, + 0x93, 0xdc, 0x00, 0x15, 0x4a, 0x1c, 0x3d, 0x6a, 0x8d, 0x83, 0x7b, 0x45, + 0x86, 0x58, 0x34, 0x91, 0xfc, 0x11, 0x73, 0xc6, 0xdc, 0x90, 0xd0, 0x20, + 0x46, 0xbf, 0x0e, 0xda, 0xea, 0x83, 0x5b, 0x00, 0xb0, 0x90, 0x63, 0x57, + 0x19, 0x49, 0x48, 0x49, 0xdc, 0x1d, 0xac, 0x9e, 0xde, 0x3a, 0x4c, 0x2e, + 0xa7, 0xea, 0xe7, 0xb7, 0x06, 0x89, 0xd0, 0x16, 0xbe, 0x63, 0xb9, 0x9d, + 0x17, 0x2a, 0x2b, 0x73, 0x9b, 0x00, 0x6b, 0xa9, 0x3f, 0x00, 0x4a, 0xd5, + 0xe9, 0x99, 0xd9, 0x94, 0xb6, 0xb1, 0x53, 0xbf, 0x47, 0x13, 0x07, 0x89, + 0xe7, 0x8e, 0xfe, 0x69, 0x29, 0xec, 0x5a, 0xdb, 0x1d, 0x3e, 0xe0, 0xd7, + 0x09, 0xda, 0xd7, 0x70, 0x7c, 0xf9, 0x44, 0x6e, 0x65, 0x0d, 0xa8, 0x38, + 0xbc, 0x36, 0xb6, 0xfd, 0x27, 0x38, 0x80, 0x07, 0x91, 0xd7, 0xc5, 0x62, + 0xe6, 0x75, 0x8c, 0x1c, 0xac, 0x46, 0xb3, 0x69, 0xf5, 0xc3, 0x9a, 0x5c, + 0xd0, 0xc7, 0x6c, 0x3f, 0xbc, 0x5a, 0xed, 0x3e, 0x5a, 0xaa, 0xb6, 0x3a, + 0xbb, 0x58, 0xe3, 0x73, 0xcf, 0xb8, 0x06, 0x80, 0xf3, 0xa0, 0x0d, 0xe0, + 0x06, 0xf8, 0x7c, 0xd2, 0x53, 0xb9, 0x67, 0x53, 0xc3, 0x39, 0x4c, 0x02, + 0xd6, 0x02, 0xd0, 0x03, 0x6c, 0x0d, 0x3b, 0xa5, 0xc6, 0x36, 0xef, 0xda, + 0x44, 0x78, 0xa9, 0xb0, 0xe0, 0x97, 0x0b, 0x9b, 0x6b, 0x49, 0xf7, 0x00, + 0xed, 0xc0, 0x01, 0xdc, 0xf6, 0xf2, 0x5c, 0xfd, 0x76, 0x1b, 0x1e, 0x2b, + 0x63, 0x41, 0x63, 0x81, 0x04, 0x82, 0x49, 0xf9, 0x6a, 0xa6, 0xfd, 0xfb, + 0x76, 0xb4, 0xee, 0x23, 0x96, 0x82, 0x74, 0x3e, 0x3b, 0x64, 0xa4, 0xa7, + 0xa4, 0x6f, 0xa5, 0x6c, 0xb9, 0x8e, 0xde, 0xd3, 0xa4, 0x80, 0x08, 0xd3, + 0xfb, 0x2a, 0xb7, 0xa7, 0xd2, 0xbe, 0xd1, 0xe9, 0xc5, 0x1e, 0xb6, 0xe8, + 0xdb, 0xb5, 0x9b, 0xf7, 0x73, 0xc4, 0x4f, 0x9a, 0xc0, 0x65, 0xd6, 0xd4, + 0x21, 0xaf, 0xb0, 0x07, 0x34, 0x82, 0x1a, 0xe2, 0x1a, 0x0c, 0xf3, 0x0d, + 0xe4, 0x14, 0xfe, 0xab, 0xb6, 0x6f, 0x81, 0xea, 0x71, 0xf3, 0x88, 0xdd, + 0xb7, 0x94, 0x94, 0xe6, 0x0a, 0x59, 0x03, 0x65, 0x4c, 0xd2, 0x34, 0x0d, + 0x09, 0x9a, 0xd2, 0x2e, 0xb0, 0x08, 0x6c, 0xb5, 0x8e, 0x6c, 0x76, 0x91, + 0xb4, 0xff, 0x00, 0xd4, 0xab, 0xb5, 0xd2, 0x09, 0xf5, 0x07, 0x3f, 0x47, + 0xca, 0x10, 0x2e, 0x6b, 0x46, 0x4d, 0x50, 0x7e, 0x93, 0x5e, 0xc3, 0xa6, + 0x92, 0xd2, 0x1d, 0xff, 0x00, 0x7e, 0x49, 0x48, 0xc8, 0x74, 0x01, 0x3e, + 0x3c, 0x68, 0x9a, 0x5d, 0x02, 0x4c, 0xf9, 0x9e, 0x55, 0x8d, 0x9a, 0x68, + 0x3f, 0xd7, 0xc4, 0xa1, 0x59, 0x4b, 0x83, 0x41, 0x1a, 0x13, 0xdf, 0xfb, + 0x92, 0x53, 0x55, 0xee, 0x70, 0x74, 0x34, 0xc6, 0x9f, 0x34, 0x4c, 0x2d, + 0x8e, 0xc8, 0x6f, 0xa8, 0x03, 0xb7, 0x7b, 0x40, 0xef, 0xaa, 0x6b, 0x69, + 0x78, 0x7b, 0x5d, 0xa3, 0x41, 0x91, 0xe2, 0x4f, 0x74, 0xec, 0xa8, 0x31, + 0xed, 0x78, 0x1f, 0x40, 0x83, 0x25, 0x25, 0x34, 0xb3, 0x05, 0x95, 0x1c, + 0x8a, 0x4b, 0xa4, 0x8b, 0x40, 0x67, 0x90, 0x24, 0x15, 0x0c, 0xdc, 0xab, + 0xb0, 0xb3, 0x5d, 0x5b, 0x0e, 0xe6, 0x30, 0x36, 0x03, 0xa7, 0xbb, 0x44, + 0xf1, 0x0a, 0xd7, 0x51, 0xac, 0x7d, 0xb0, 0xba, 0x62, 0x5d, 0x5b, 0x9d, + 0x3a, 0xf0, 0x7f, 0xd8, 0xa8, 0x75, 0x93, 0x39, 0x85, 0xda, 0xea, 0xd6, + 0xf3, 0xa7, 0x64, 0x94, 0x87, 0xed, 0xa4, 0x82, 0x1d, 0x5b, 0x49, 0x3c, + 0xb8, 0x97, 0x4f, 0x33, 0xfb, 0xc8, 0x9f, 0xb4, 0xde, 0x2a, 0x75, 0x42, + 0xa6, 0x6d, 0x78, 0x03, 0xb9, 0x88, 0xee, 0xd9, 0x3c, 0xaa, 0x49, 0x24, + 0xa7, 0x45, 0x9d, 0x66, 0xf1, 0x1b, 0xd8, 0x1e, 0xd1, 0xf9, 0xb2, 0x40, + 0x45, 0xa7, 0xeb, 0x0e, 0x4d, 0x2e, 0xd1, 0xa4, 0xd7, 0xac, 0xb3, 0x79, + 0x03, 0x5f, 0x82, 0xc9, 0x49, 0x25, 0x3d, 0x2d, 0x5f, 0x5a, 0xb1, 0xf6, + 0x01, 0x65, 0x0f, 0x0e, 0x1f, 0xca, 0xde, 0x27, 0xc7, 0xdc, 0x83, 0x7f, + 0xd6, 0x1c, 0x7b, 0x9e, 0x5f, 0xb2, 0xc6, 0x39, 0xda, 0x69, 0xb4, 0xfc, + 0xff, 0x00, 0x35, 0x60, 0x24, 0x92, 0x9d, 0xba, 0xfa, 0xf5, 0x4c, 0xd0, + 0xd6, 0xf7, 0x6b, 0xf4, 0x8b, 0xcf, 0x1f, 0xd5, 0x98, 0x94, 0x67, 0x7d, + 0x65, 0x61, 0x90, 0xd6, 0xbd, 0x81, 0xdc, 0x91, 0x04, 0x8f, 0x86, 0xe2, + 0x57, 0x3c, 0x92, 0x4a, 0x7a, 0x46, 0x7d, 0x64, 0xa0, 0xd6, 0x6a, 0x7e, + 0xf6, 0x83, 0x32, 0x60, 0x03, 0xf8, 0x4f, 0xe4, 0x45, 0x7f, 0x5b, 0xc1, + 0xb1, 0xa0, 0xb2, 0xe2, 0x1f, 0xf9, 0xc1, 0xec, 0x1f, 0x81, 0xd1, 0x72, + 0xc9, 0x24, 0xa7, 0x79, 0xd9, 0xf4, 0xc8, 0x71, 0xbc, 0x07, 0x71, 0x0d, + 0x80, 0xd0, 0xde, 0x60, 0x6d, 0x46, 0x6f, 0x57, 0xc2, 0x30, 0x7d, 0x8c, + 0x2d, 0xf3, 0x2e, 0xdc, 0x7e, 0x63, 0x4f, 0xbd, 0x73, 0x69, 0x24, 0xa7, + 0xa7, 0xab, 0xac, 0x63, 0x11, 0xba, 0xc7, 0xea, 0x4f, 0x01, 0xcd, 0x1a, + 0x7c, 0x0f, 0x9f, 0x8a, 0xb0, 0x7a, 0x9e, 0x04, 0x92, 0xdb, 0x5a, 0x4c, + 0xc1, 0x2f, 0x2d, 0xff, 0x00, 0xa9, 0x0e, 0x82, 0xb9, 0x04, 0x92, 0x53, + 0xd8, 0x1e, 0xa5, 0x53, 0xdd, 0xfc, 0xfd, 0x7b, 0x00, 0xe0, 0x3d, 0x8d, + 0x71, 0xfc, 0x7c, 0x7c, 0xd2, 0xab, 0x27, 0x1a, 0xba, 0x49, 0x16, 0x34, + 0x3c, 0x02, 0xe8, 0xdc, 0xcf, 0xfc, 0x94, 0x12, 0xb8, 0xf4, 0x92, 0x53, + 0xd8, 0xe3, 0x75, 0x3e, 0x9c, 0xef, 0x7b, 0xae, 0xda, 0x5a, 0x34, 0x91, + 0xb4, 0x98, 0xf0, 0xda, 0x0a, 0x35, 0x9d, 0x57, 0xa7, 0xd2, 0xe9, 0x73, + 0xc1, 0x25, 0xb2, 0x09, 0x93, 0x33, 0xd9, 0x71, 0x09, 0x24, 0xa7, 0xb2, + 0xbe, 0xea, 0xef, 0xa1, 0xe6, 0xb7, 0x36, 0xba, 0xde, 0x3e, 0x91, 0x78, + 0x61, 0x70, 0xf0, 0xf1, 0x40, 0xc6, 0xbb, 0x0a, 0xad, 0xc4, 0x5c, 0xd7, + 0x59, 0x64, 0x17, 0x00, 0x77, 0xc1, 0x68, 0xdb, 0xa0, 0x9e, 0x17, 0x28, + 0xae, 0x74, 0xc0, 0x4d, 0xe7, 0x49, 0xf6, 0x98, 0xf8, 0x92, 0x12, 0x53, + 0xa5, 0x90, 0xfb, 0x1c, 0xf7, 0x0d, 0xb1, 0x24, 0xf7, 0x98, 0x03, 0x8f, + 0xc0, 0xa9, 0x32, 0x64, 0x02, 0x3b, 0x96, 0x8f, 0x1d, 0x51, 0x29, 0x6e, + 0xe7, 0xbc, 0x38, 0xeb, 0xbc, 0x8d, 0x78, 0xd0, 0x35, 0x20, 0x58, 0xdb, + 0x5a, 0x46, 0xa6, 0x5c, 0x41, 0xf2, 0xd4, 0x24, 0xa6, 0x16, 0x52, 0x1b, + 0x48, 0xd3, 0x51, 0x32, 0x7c, 0xa7, 0x88, 0x4b, 0x11, 0xd6, 0x16, 0x06, + 0xb5, 0xb3, 0x01, 0xa4, 0x6a, 0x43, 0x7e, 0xf1, 0xa2, 0x77, 0x9d, 0x2c, + 0x9d, 0x3d, 0xc4, 0x7e, 0x2b, 0x5f, 0xa4, 0x60, 0xb7, 0x3f, 0xa7, 0x0a, + 0x6b, 0x73, 0x19, 0x92, 0xc7, 0x87, 0x03, 0xcb, 0x9a, 0xd1, 0x1a, 0x11, + 0xe0, 0x52, 0x52, 0x1a, 0x6b, 0x01, 0xbb, 0x9a, 0xdb, 0x2b, 0xdf, 0xf4, + 0x64, 0x0e, 0x0f, 0x3a, 0x82, 0xac, 0x3d, 0xb6, 0x35, 0xc7, 0xde, 0xd6, + 0xb4, 0x10, 0x41, 0x27, 0x53, 0x01, 0x0a, 0xe6, 0xe7, 0x57, 0x63, 0xe9, + 0x34, 0xbe, 0xca, 0xa8, 0x79, 0x68, 0xb5, 0xb5, 0xb0, 0x0d, 0x3b, 0xed, + 0x82, 0x7b, 0x21, 0x8e, 0xa0, 0x2b, 0xa9, 0xc1, 0xec, 0x6e, 0xe6, 0x99, + 0x82, 0xdd, 0xaf, 0x76, 0xe3, 0x26, 0x37, 0x86, 0x84, 0x94, 0xcc, 0x58, + 0xed, 0xac, 0x2d, 0xb0, 0xb8, 0xbb, 0xe8, 0xfb, 0x9a, 0xc1, 0xbb, 0x9d, + 0x74, 0x2a, 0x6c, 0xa2, 0x08, 0x79, 0x21, 0xa4, 0x99, 0x71, 0xd8, 0x48, + 0x9e, 0x4f, 0xb9, 0xb1, 0x2a, 0xaf, 0xdb, 0xb1, 0x4e, 0xb5, 0x1d, 0x9a, + 0x6a, 0xfb, 0x2b, 0x6b, 0x64, 0xf9, 0x16, 0x6e, 0x28, 0x87, 0x22, 0xb7, + 0xb4, 0xea, 0x21, 0xa4, 0x0d, 0x06, 0x84, 0x78, 0xea, 0xd6, 0x94, 0x94, + 0x91, 0xfe, 0x98, 0x7b, 0x60, 0x92, 0xc9, 0x9d, 0xcc, 0x9f, 0x84, 0x13, + 0xb7, 0xf8, 0xa2, 0x4b, 0xbc, 0xf6, 0x73, 0x1b, 0xf5, 0xf8, 0x4a, 0xaa, + 0xfb, 0xec, 0xaa, 0xa9, 0xb6, 0x96, 0x0a, 0x9a, 0x74, 0x3a, 0x97, 0x09, + 0xd3, 0x9e, 0x20, 0xf8, 0x4a, 0x8f, 0xdb, 0x7a, 0x7f, 0x3e, 0xa3, 0xbd, + 0x4f, 0x1d, 0xa2, 0x3f, 0xcd, 0xdd, 0xc2, 0x4a, 0x4e, 0xd7, 0x08, 0x87, + 0x38, 0x80, 0x75, 0x20, 0x0e, 0x15, 0x4c, 0x87, 0x1f, 0xb5, 0x52, 0xe0, + 0x7d, 0x8c, 0x7c, 0x47, 0x1a, 0xb8, 0x16, 0xca, 0xb9, 0x00, 0xd6, 0x5a, + 0x7c, 0x04, 0xb4, 0x7f, 0x7a, 0xad, 0x93, 0x51, 0x6d, 0x0e, 0xb1, 0xa3, + 0x56, 0xed, 0x7b, 0x47, 0x3f, 0x45, 0xcd, 0x77, 0xe4, 0x09, 0x29, 0x30, + 0x96, 0xbd, 0x8c, 0x22, 0x77, 0x93, 0xc7, 0x92, 0x56, 0x03, 0xc7, 0x24, + 0x72, 0x7b, 0x05, 0x29, 0x1b, 0x84, 0x34, 0xf3, 0xa9, 0x8e, 0xc4, 0x24, + 0xf0, 0xd2, 0x7e, 0x89, 0x88, 0x80, 0x27, 0x93, 0xe2, 0x92, 0x9a, 0xb7, + 0xc0, 0xda, 0xee, 0x60, 0xea, 0xe3, 0xd9, 0x2d, 0xb2, 0x67, 0xe9, 0x48, + 0xd3, 0xc1, 0x4b, 0x21, 0x8e, 0x75, 0x71, 0x1e, 0xf1, 0x05, 0xad, 0xf3, + 0x4d, 0x43, 0x6c, 0xf4, 0xda, 0x1e, 0x43, 0x5c, 0x39, 0x13, 0xf8, 0x4a, + 0x4a, 0x6a, 0xf5, 0x46, 0xb8, 0x5a, 0xdb, 0x48, 0x80, 0xf0, 0xd2, 0x0f, + 0xdd, 0xfc, 0x56, 0x67, 0x55, 0x03, 0xd4, 0x69, 0xf1, 0x68, 0x5a, 0xfd, + 0x61, 0xad, 0xf4, 0x18, 0x41, 0x92, 0xc0, 0xd0, 0x7e, 0x4e, 0x8d, 0x3e, + 0xf5, 0x93, 0xd4, 0xde, 0x1e, 0x2b, 0x70, 0x33, 0xec, 0x68, 0x3f, 0x20, + 0x92, 0x9c, 0xf4, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, 0x49, + 0x24, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0xa5, 0x26, 0x31, 0xf6, 0x3c, + 0x57, 0x5b, 0x4b, 0x9e, 0xe3, 0x0d, 0x68, 0x12, 0x49, 0x51, 0x5d, 0xaf, + 0xd4, 0x9e, 0x88, 0xc7, 0xd4, 0x73, 0xef, 0x6e, 0xaf, 0xd1, 0x87, 0xf7, + 0x59, 0xe5, 0xfd, 0x6f, 0xc8, 0x92, 0x9e, 0x6b, 0x2b, 0xa0, 0x75, 0x7c, + 0x4a, 0x45, 0xf7, 0xe3, 0x38, 0x56, 0x7b, 0xb6, 0x1d, 0x1f, 0x1d, 0xb3, + 0x0a, 0x95, 0xb4, 0x5d, 0x4c, 0x0b, 0xab, 0x75, 0x7b, 0x84, 0xb7, 0x70, + 0x2d, 0x91, 0xe2, 0x25, 0x7b, 0x50, 0x60, 0x60, 0x23, 0x6f, 0xb4, 0x0e, + 0x3c, 0x63, 0xc1, 0x72, 0xff, 0x00, 0x5b, 0x7a, 0x5d, 0x59, 0x98, 0xaf, + 0x73, 0x1a, 0x3d, 0x4a, 0xc1, 0x75, 0x6e, 0x03, 0xc3, 0xe1, 0xe2, 0x92, + 0x9f, 0x3a, 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0xa4, 0x92, + 0x49, 0x25, 0x29, 0x5f, 0xe9, 0x40, 0x8b, 0x4b, 0x87, 0x24, 0x47, 0xe2, + 0x15, 0x05, 0xa3, 0xd2, 0xdb, 0xcb, 0xa6, 0x20, 0x4f, 0xdc, 0x52, 0x53, + 0xa5, 0x5b, 0x83, 0x8b, 0xde, 0x34, 0x6b, 0xad, 0x7f, 0x97, 0x01, 0xa0, + 0xe8, 0x8e, 0x03, 0x5b, 0xbc, 0xb9, 0xa0, 0xba, 0x07, 0x6e, 0x00, 0x25, + 0x47, 0x13, 0x75, 0x80, 0xd8, 0xf1, 0xfe, 0x1a, 0xcd, 0x34, 0xd4, 0xfb, + 0x10, 0xf2, 0x8b, 0x98, 0xd7, 0x6d, 0x3a, 0xbb, 0x68, 0x3e, 0x10, 0x37, + 0x68, 0x92, 0x99, 0x64, 0x30, 0x6e, 0x73, 0x04, 0x77, 0x90, 0x3b, 0x70, + 0x56, 0xf7, 0xd5, 0x8a, 0x1e, 0xec, 0x56, 0xdc, 0x08, 0x0d, 0xc7, 0x7f, + 0x60, 0x66, 0x1d, 0x1b, 0xb8, 0xe7, 0x8d, 0x02, 0xc1, 0xb1, 0xaf, 0x67, + 0x03, 0x5f, 0x09, 0xee, 0x49, 0x5b, 0xdd, 0x0c, 0x38, 0x74, 0x7c, 0x8b, + 0xcb, 0x9c, 0xda, 0x9a, 0xc2, 0xd2, 0xc6, 0x90, 0xcd, 0xee, 0x22, 0x1b, + 0x2e, 0x3c, 0x6b, 0xdd, 0x25, 0x3a, 0x77, 0x75, 0x5c, 0x6c, 0x56, 0x9a, + 0xcb, 0xde, 0xe7, 0xb4, 0x19, 0x2d, 0x6f, 0x9f, 0x87, 0x2b, 0x3b, 0x37, + 0xa5, 0x3f, 0xac, 0x86, 0x58, 0xfc, 0x67, 0xb8, 0x41, 0xdb, 0x75, 0x80, + 0x35, 0xd0, 0xed, 0x63, 0x90, 0xad, 0x3a, 0x8a, 0xa8, 0x6d, 0x35, 0xd7, + 0x55, 0x8f, 0xc8, 0x6b, 0x09, 0xc8, 0x36, 0x92, 0xe2, 0x08, 0x00, 0x35, + 0xb2, 0x74, 0x76, 0xaa, 0x2c, 0xf5, 0x5b, 0xf9, 0xb6, 0xb4, 0x12, 0x43, + 0x5c, 0xc7, 0x6d, 0x00, 0xf7, 0xe1, 0x25, 0x3c, 0xef, 0x54, 0xfa, 0xbd, + 0x4f, 0x4a, 0x15, 0xbe, 0xd6, 0x65, 0x91, 0x6c, 0xed, 0x34, 0x16, 0xd8, + 0x01, 0x1d, 0x8e, 0xba, 0x2c, 0xf1, 0x46, 0x16, 0xd7, 0x83, 0x87, 0x9d, + 0x63, 0xdd, 0x1b, 0x6c, 0x78, 0x87, 0x37, 0xe0, 0x06, 0x86, 0x7c, 0xd7, + 0x4d, 0x90, 0xfc, 0x97, 0xde, 0x5a, 0xef, 0x51, 0xce, 0x6c, 0x0f, 0x7b, + 0x8b, 0x87, 0xf9, 0xc6, 0x02, 0x21, 0xb9, 0xd5, 0x00, 0xdb, 0x2e, 0x63, + 0x49, 0x3e, 0xd0, 0xd1, 0xbb, 0xf1, 0x29, 0x29, 0xe6, 0x29, 0xa4, 0x02, + 0x0b, 0x70, 0xf2, 0xc1, 0x1c, 0x02, 0x26, 0x7e, 0x3c, 0x2b, 0x5f, 0x60, + 0xbf, 0xec, 0xff, 0x00, 0x6a, 0xfb, 0x09, 0xd9, 0xbe, 0x7d, 0x3f, 0x76, + 0xef, 0x08, 0x8d, 0xd3, 0x0b, 0xa2, 0xfb, 0x48, 0x60, 0x05, 0xee, 0xba, + 0xcd, 0xc6, 0x1b, 0xb2, 0x8b, 0x1f, 0x24, 0xf9, 0xb5, 0x80, 0x29, 0x7a, + 0xf6, 0x7a, 0x31, 0xf6, 0x5c, 0x98, 0xf5, 0x27, 0x67, 0xa3, 0x66, 0xfe, + 0x3c, 0x36, 0x7f, 0x1f, 0x9a, 0x4a, 0x70, 0xd8, 0xe3, 0xcc, 0xc0, 0x88, + 0x8d, 0x42, 0x1b, 0x6e, 0xb3, 0x7c, 0x06, 0x82, 0xce, 0x5c, 0x67, 0x59, + 0x1a, 0x42, 0x41, 0xc1, 0xc0, 0x39, 0xa2, 0x58, 0x78, 0x20, 0xe8, 0x93, + 0x88, 0xd6, 0x3e, 0x90, 0x12, 0xe9, 0xe0, 0x0f, 0x8a, 0x4a, 0x61, 0x77, + 0xaa, 0xe2, 0xdd, 0x8f, 0xdb, 0x07, 0xdc, 0x20, 0x6a, 0x3e, 0x2a, 0x5b, + 0x89, 0x76, 0xe1, 0xa9, 0x6f, 0x07, 0xcd, 0x45, 0xcd, 0x78, 0x1b, 0x88, + 0x81, 0xce, 0xe9, 0x11, 0xf8, 0x95, 0x37, 0x31, 0xec, 0x0d, 0x70, 0x23, + 0xdd, 0xc0, 0xe0, 0xeb, 0xe5, 0x12, 0x92, 0x99, 0xef, 0x7d, 0x8e, 0x1b, + 0x8f, 0xbb, 0xc5, 0x43, 0x32, 0xb6, 0x6d, 0x2c, 0xb7, 0xe0, 0xe0, 0x0c, + 0x41, 0x6f, 0xe7, 0x4a, 0x8e, 0x3d, 0xb6, 0xb7, 0x25, 0xcc, 0xb0, 0x7a, + 0x6c, 0x2d, 0x90, 0xe2, 0x44, 0xb8, 0x1d, 0x08, 0xd7, 0x85, 0x62, 0xd6, + 0xb2, 0xea, 0x2a, 0xba, 0xa7, 0x07, 0x35, 0xc4, 0xb2, 0xda, 0xdd, 0x21, + 0xcd, 0x23, 0x91, 0xe7, 0xfd, 0xc9, 0x29, 0xcf, 0xea, 0x6e, 0x0f, 0xc6, + 0x04, 0x6b, 0xa3, 0x9a, 0x08, 0xf8, 0x07, 0x7f, 0x05, 0x8f, 0x90, 0xe7, + 0x3b, 0x1a, 0xa7, 0x38, 0x47, 0x60, 0x7c, 0x40, 0x5b, 0x79, 0xa3, 0x6e, + 0x3d, 0x80, 0x30, 0xb5, 0xa0, 0x8d, 0xa4, 0x88, 0x3c, 0xc1, 0x58, 0xb7, + 0x99, 0xc1, 0xac, 0x44, 0x16, 0x92, 0x0f, 0xde, 0x92, 0x9a, 0x69, 0x24, + 0x92, 0x4a, 0x52, 0x49, 0x24, 0x92, 0x94, 0x92, 0x49, 0x24, 0xa5, 0x2b, + 0xfd, 0x23, 0xa3, 0xe5, 0xf5, 0x7c, 0x9f, 0x43, 0x18, 0x00, 0x1a, 0x26, + 0xcb, 0x1d, 0xf4, 0x58, 0x3c, 0xd5, 0x05, 0xd3, 0x7d, 0x5f, 0xea, 0x4c, + 0xc3, 0xe9, 0x8f, 0xae, 0x98, 0x19, 0x36, 0x5a, 0x4b, 0x8f, 0x80, 0x01, + 0xb0, 0x92, 0x9d, 0x2a, 0xbe, 0xa4, 0x74, 0x8c, 0x5a, 0xc3, 0xba, 0x86, + 0x6b, 0x9c, 0xe2, 0x0e, 0x8c, 0x86, 0x37, 0x4f, 0x0d, 0xda, 0xad, 0x21, + 0xd6, 0x3a, 0x5f, 0x4f, 0xa9, 0x94, 0x63, 0xda, 0x03, 0x18, 0xd0, 0xd6, + 0xb4, 0xf8, 0x0d, 0x17, 0x2f, 0x95, 0x75, 0xef, 0x06, 0xc7, 0x39, 0xd6, + 0x5c, 0xfd, 0x01, 0x71, 0xd6, 0x4c, 0xf8, 0xa1, 0x74, 0xce, 0x99, 0x65, + 0x8f, 0x75, 0x99, 0x32, 0x03, 0x4f, 0xbd, 0xff, 0x00, 0x4b, 0xf2, 0x24, + 0xa7, 0xac, 0x3f, 0x5b, 0x69, 0x24, 0x30, 0x58, 0xd2, 0x4f, 0x1a, 0x09, + 0x42, 0x7f, 0xd6, 0x0c, 0x5b, 0x9b, 0xb6, 0xfd, 0x41, 0xe0, 0xe8, 0x0f, + 0xde, 0x0c, 0xa1, 0x62, 0xe1, 0x74, 0xac, 0x81, 0x15, 0x12, 0xe2, 0xc1, + 0x26, 0x5a, 0x5a, 0x60, 0x7c, 0x55, 0x4c, 0xce, 0x9d, 0xd3, 0xf2, 0xea, + 0xb1, 0xb8, 0x8e, 0x3e, 0xb3, 0x06, 0x80, 0xb4, 0x89, 0xfb, 0xd2, 0x52, + 0xcd, 0xe9, 0x9f, 0x56, 0x1e, 0xe2, 0xf0, 0xc8, 0x2e, 0xdd, 0x21, 0xcf, + 0x76, 0xdd, 0x55, 0x3e, 0xb1, 0xd1, 0x3a, 0x48, 0xc6, 0x7d, 0xfd, 0x38, + 0x96, 0x3a, 0xb1, 0xb8, 0x8d, 0xc5, 0xed, 0x20, 0x0d, 0x74, 0x70, 0x07, + 0xf1, 0x54, 0x31, 0x5b, 0x6e, 0x30, 0xf4, 0x2f, 0x83, 0x23, 0x73, 0x60, + 0xcc, 0x4f, 0x64, 0xb3, 0xb3, 0x05, 0x54, 0xbe, 0x9a, 0xdc, 0x66, 0xd1, + 0x04, 0x76, 0x8f, 0x14, 0x94, 0xe3, 0xa5, 0xd9, 0x24, 0xa7, 0x48, 0x49, + 0x4a, 0x4f, 0xda, 0x53, 0x25, 0x3a, 0x42, 0x4a, 0x52, 0xd5, 0xe9, 0x4c, + 0x26, 0xb7, 0xeb, 0x13, 0xdf, 0xc3, 0x55, 0x94, 0xb5, 0x3a, 0x63, 0x9c, + 0xdc, 0x77, 0x96, 0x98, 0xed, 0xf7, 0x90, 0x92, 0x9d, 0x7c, 0x02, 0x03, + 0x6c, 0xee, 0x05, 0xef, 0x00, 0x1f, 0xec, 0xea, 0x95, 0xd4, 0xb5, 0xe4, + 0x31, 0xd2, 0x7f, 0x48, 0x35, 0xfe, 0xc9, 0x29, 0xba, 0x69, 0x69, 0xab, + 0x73, 0xc6, 0xc1, 0xea, 0x90, 0xff, 0x00, 0xeb, 0x4c, 0xf7, 0x47, 0x73, + 0x1f, 0xeb, 0x00, 0x44, 0xc5, 0xac, 0x3a, 0xf6, 0xf6, 0x78, 0x24, 0xa4, + 0x02, 0xd3, 0x05, 0xc6, 0x0b, 0xa6, 0x41, 0xf8, 0x92, 0xb6, 0x7e, 0xaf, + 0x35, 0xf6, 0xe4, 0x32, 0xab, 0x0e, 0xec, 0x36, 0xb7, 0xd5, 0xb2, 0xb7, + 0x0f, 0x61, 0x73, 0x49, 0xdb, 0xaf, 0x8f, 0x1f, 0x25, 0x99, 0x6f, 0xa2, + 0xd0, 0xfb, 0x1c, 0x24, 0x16, 0xc0, 0x68, 0xf2, 0xff, 0x00, 0x7a, 0xb5, + 0xd3, 0xdf, 0x68, 0xa9, 0xbe, 0x99, 0x73, 0x21, 0xa1, 0xc4, 0x86, 0xcb, + 0x49, 0xf0, 0x49, 0x4f, 0x51, 0x94, 0xec, 0x37, 0xbc, 0x02, 0xca, 0xee, + 0x69, 0xd1, 0xec, 0x17, 0x35, 0x90, 0x49, 0x9e, 0x1c, 0xe0, 0x99, 0xac, + 0xe8, 0x75, 0x80, 0x3d, 0x06, 0x3c, 0xba, 0x65, 0xcd, 0x6e, 0xf1, 0x23, + 0x9d, 0x4a, 0xc7, 0xbd, 0xf6, 0x1b, 0x07, 0xe9, 0x40, 0xd1, 0xa5, 0xef, + 0x73, 0x46, 0xd1, 0x27, 0x52, 0x21, 0xc5, 0x3d, 0xad, 0x6b, 0x6f, 0xb4, + 0x53, 0x7b, 0xde, 0xda, 0xce, 0xdb, 0x9a, 0xf6, 0x86, 0x3b, 0x73, 0x4e, + 0x8f, 0xdb, 0x23, 0x73, 0x49, 0xf0, 0x49, 0x4e, 0xc5, 0xef, 0xe9, 0x36, + 0xb1, 0xad, 0x75, 0x4d, 0x75, 0x6d, 0x1a, 0x13, 0x4c, 0x86, 0xc7, 0xf5, + 0x9a, 0x87, 0x4f, 0x52, 0xaf, 0x73, 0x59, 0x8f, 0x82, 0x59, 0x53, 0x7f, + 0x3f, 0xda, 0xc1, 0xf2, 0xda, 0x21, 0x66, 0x3e, 0xf7, 0x91, 0xe9, 0x5c, + 0xf2, 0xd0, 0x7e, 0x9b, 0x7b, 0xea, 0x35, 0xd6, 0x36, 0x81, 0xf2, 0x44, + 0xa2, 0xe1, 0x60, 0xdb, 0x58, 0x9a, 0xe2, 0x36, 0xb7, 0xcb, 0xbc, 0xa4, + 0xa7, 0x51, 0xfd, 0x4e, 0xc0, 0x48, 0x6d, 0x02, 0x47, 0x05, 0xd6, 0xb4, + 0x0f, 0xed, 0x6d, 0x0e, 0x2a, 0x3f, 0x6c, 0xcb, 0x9d, 0xde, 0xa5, 0x13, + 0x1f, 0xcd, 0xfb, 0xb6, 0x73, 0xfb, 0xdc, 0xac, 0x2c, 0xa3, 0x6d, 0x55, + 0x97, 0x12, 0xd7, 0xbf, 0x58, 0x6c, 0x90, 0xf0, 0x3e, 0x61, 0x55, 0xfb, + 0x5b, 0xbe, 0x96, 0xf7, 0xfa, 0x71, 0xb7, 0x6e, 0xe3, 0xcf, 0xf5, 0xbc, + 0x12, 0x53, 0x42, 0xaa, 0xea, 0xaf, 0x71, 0x6c, 0x82, 0xe2, 0x4b, 0x88, + 0xf3, 0x44, 0x21, 0xad, 0x60, 0xf6, 0xf1, 0xc0, 0xd2, 0x07, 0xc0, 0x70, + 0xab, 0xbb, 0x3f, 0x05, 0xa3, 0x5b, 0x98, 0x23, 0xb3, 0x49, 0x74, 0xff, + 0x00, 0x9b, 0x28, 0x56, 0xf5, 0x2c, 0x0b, 0x5a, 0x58, 0xf2, 0xf7, 0x8d, + 0x23, 0x6b, 0x5d, 0x3a, 0x79, 0xe8, 0x92, 0x9b, 0x9a, 0x18, 0x7b, 0x75, + 0x7c, 0x73, 0xce, 0x9e, 0x49, 0x53, 0x63, 0x6c, 0x04, 0xd6, 0x67, 0xcc, + 0x73, 0xf1, 0x99, 0x59, 0xf5, 0xf5, 0x2c, 0x4a, 0x9f, 0xfa, 0x2c, 0x7b, + 0x4b, 0xdc, 0x20, 0x03, 0xac, 0x81, 0xf1, 0x2a, 0x63, 0x3a, 0xf0, 0xcf, + 0xd0, 0x60, 0xb9, 0xac, 0xe6, 0x26, 0x04, 0x9f, 0x80, 0x49, 0x4e, 0x80, + 0x61, 0x76, 0xa0, 0x6e, 0x8e, 0x7e, 0x0a, 0xce, 0x23, 0x77, 0xb8, 0xd3, + 0x31, 0xbb, 0x40, 0x47, 0x88, 0xff, 0x00, 0x62, 0xc8, 0x6e, 0x67, 0x55, + 0xdc, 0x23, 0x11, 0x93, 0xd8, 0x3c, 0x93, 0xf7, 0xea, 0x14, 0xa9, 0xca, + 0xeb, 0xd5, 0xbb, 0x7b, 0x3d, 0x26, 0x9d, 0x35, 0x2c, 0x0e, 0x00, 0x8f, + 0x0d, 0xd2, 0x92, 0x9d, 0x3c, 0xf6, 0xdd, 0x5b, 0x32, 0x31, 0xda, 0xd7, + 0x1c, 0x77, 0x86, 0x93, 0x6b, 0x87, 0xb5, 0xe4, 0x02, 0x5a, 0x5b, 0xaa, + 0xe5, 0xf3, 0x98, 0x19, 0x49, 0x68, 0xee, 0xf7, 0x1f, 0x91, 0x82, 0xb6, + 0xee, 0xcb, 0xfa, 0xc5, 0x97, 0xed, 0xca, 0xcc, 0x9a, 0xc1, 0xfa, 0x2d, + 0x63, 0x1a, 0x24, 0x7f, 0x55, 0xb2, 0xb3, 0x3a, 0xcd, 0x5e, 0x9d, 0x55, + 0xf9, 0x89, 0xfe, 0x1f, 0xc1, 0x25, 0x38, 0xe9, 0x24, 0x92, 0x4a, 0x52, + 0x49, 0x24, 0x92, 0x94, 0x92, 0x49, 0x24, 0xa5, 0x22, 0x53, 0x75, 0x94, + 0xbb, 0x73, 0x0c, 0x78, 0x8e, 0xc5, 0x0d, 0x24, 0x94, 0xde, 0x3d, 0x49, + 0xce, 0xd5, 0xc2, 0x1c, 0x35, 0x1f, 0x15, 0xd9, 0xfd, 0x54, 0xea, 0x38, + 0xd9, 0xac, 0x7b, 0x1a, 0xcd, 0xaf, 0x66, 0xd3, 0x6b, 0x4c, 0x44, 0xba, + 0x75, 0x6f, 0x96, 0x8b, 0x81, 0xaa, 0x9b, 0x6e, 0x76, 0xca, 0x98, 0xe7, + 0xbb, 0xc1, 0xa0, 0x9e, 0x57, 0x75, 0x85, 0xd1, 0xed, 0xe8, 0x57, 0xe1, + 0xb1, 0xa3, 0xdd, 0x7d, 0x2e, 0xfb, 0x53, 0xcf, 0xfa, 0x69, 0x0e, 0x6b, + 0x7e, 0x00, 0x08, 0x09, 0x29, 0xe8, 0x6d, 0x65, 0x75, 0x02, 0xea, 0xea, + 0x26, 0x41, 0x1e, 0xd1, 0xbb, 0x95, 0x57, 0x3b, 0x22, 0x8c, 0x1e, 0x9d, + 0x65, 0xc4, 0x6d, 0xda, 0xd9, 0x78, 0xef, 0xf0, 0x0a, 0x36, 0xdf, 0x85, + 0x60, 0x9b, 0xdc, 0x2b, 0xb3, 0x82, 0xd7, 0x4c, 0xac, 0x4e, 0xac, 0xf7, + 0xf5, 0x1b, 0xa8, 0xe9, 0x18, 0xf2, 0xda, 0x6e, 0xdc, 0x5f, 0x66, 0xba, + 0x06, 0xf0, 0x7e, 0x1b, 0x92, 0x53, 0xca, 0x67, 0x67, 0xbb, 0x27, 0x29, + 0xf7, 0x56, 0x3d, 0x36, 0x1f, 0x6b, 0x1b, 0xe0, 0xd1, 0xc2, 0xa8, 0x49, + 0x26, 0x49, 0x93, 0xe2, 0xac, 0x75, 0x0e, 0x9f, 0x93, 0xd3, 0xb2, 0x9f, + 0x8b, 0x94, 0xdd, 0xb6, 0x37, 0x83, 0xd9, 0xcd, 0x3c, 0x39, 0xbe, 0x45, + 0x56, 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, 0x92, 0x49, 0x24, 0x94, 0xa5, + 0xb1, 0xd1, 0x60, 0xd4, 0xf1, 0x12, 0x66, 0x7f, 0x22, 0xc7, 0x5a, 0xfd, + 0x1b, 0x6f, 0xa7, 0x66, 0xe7, 0x06, 0xb7, 0xf3, 0x89, 0xe3, 0x90, 0x92, + 0x9d, 0xae, 0x8c, 0xd2, 0xfa, 0xee, 0xf4, 0xdd, 0xb4, 0xfa, 0xef, 0x00, + 0x8d, 0x48, 0x92, 0x07, 0xf1, 0x56, 0x83, 0x76, 0xd7, 0x60, 0x68, 0x9b, + 0x03, 0x80, 0x73, 0x4f, 0x20, 0x86, 0xc6, 0xef, 0x35, 0x4b, 0xa0, 0x37, + 0x73, 0x2f, 0xd4, 0xff, 0x00, 0x3f, 0x67, 0xc3, 0xf3, 0x79, 0x0a, 0xf7, + 0x17, 0xdc, 0xd1, 0xa8, 0x68, 0x64, 0xc6, 0xb2, 0x60, 0x94, 0x94, 0xd1, + 0xb2, 0xbf, 0x52, 0xa0, 0x1a, 0xf2, 0x34, 0x1b, 0xa7, 0xc4, 0x47, 0xe0, + 0x8f, 0x82, 0x1a, 0x2d, 0xa4, 0x17, 0x7a, 0x64, 0xd7, 0x2c, 0xb0, 0xb8, + 0xb3, 0x82, 0x64, 0x83, 0x20, 0x70, 0xa2, 0xea, 0xc1, 0xdd, 0x59, 0x03, + 0xda, 0x48, 0x8e, 0xde, 0xd7, 0x15, 0xb3, 0xd3, 0x30, 0x99, 0x9b, 0x84, + 0xda, 0x4b, 0x80, 0x7d, 0x6f, 0x2e, 0xd3, 0x9e, 0x21, 0x25, 0x39, 0xe6, + 0xec, 0x7a, 0x6f, 0x6f, 0xd9, 0xac, 0x16, 0xb4, 0x9f, 0xd3, 0x06, 0xb4, + 0x07, 0x38, 0x4e, 0xba, 0x9f, 0xe2, 0xab, 0xd9, 0x7e, 0x5d, 0x80, 0x5b, + 0x65, 0x9a, 0x83, 0xea, 0x02, 0xe7, 0x6f, 0x7f, 0x3e, 0xd0, 0x1d, 0xca, + 0xd5, 0xb7, 0xea, 0xe5, 0xbe, 0xbb, 0xed, 0xa2, 0xd6, 0x50, 0xe9, 0xdd, + 0xb1, 0xcc, 0x16, 0x17, 0x46, 0xb3, 0xea, 0x38, 0x70, 0x50, 0xff, 0x00, + 0xe6, 0xbd, 0x96, 0x34, 0xfa, 0xf9, 0x27, 0x63, 0x3f, 0x9b, 0x86, 0x92, + 0x01, 0xf0, 0x89, 0xe7, 0xe0, 0x92, 0x9a, 0x6e, 0xc8, 0xad, 0xac, 0xdb, + 0x60, 0x2c, 0x78, 0x32, 0x0e, 0x9c, 0x1f, 0xde, 0x6a, 0x9f, 0xdb, 0x69, + 0x01, 0xd6, 0x13, 0xb5, 0xf2, 0x1e, 0x1e, 0xc1, 0xed, 0xd3, 0xbf, 0x75, + 0x17, 0xfd, 0x58, 0xea, 0x86, 0xc6, 0x07, 0xd8, 0xd6, 0xd4, 0x64, 0xb8, + 0xb7, 0x73, 0x9d, 0xa4, 0x47, 0xb5, 0xc3, 0xe9, 0x15, 0x63, 0x23, 0xa2, + 0xfb, 0x5c, 0xcc, 0x66, 0x5d, 0x50, 0x88, 0x9b, 0x36, 0xb9, 0xbb, 0x87, + 0x1e, 0xd2, 0x26, 0x12, 0x53, 0x45, 0xb9, 0xb6, 0xe4, 0x64, 0xb1, 0xe5, + 0xe5, 0xaf, 0x10, 0x7d, 0xc7, 0x8d, 0x74, 0x91, 0xa4, 0xab, 0x3f, 0xab, + 0x6f, 0xf5, 0x7f, 0xc2, 0xee, 0xdd, 0x30, 0x7e, 0xf5, 0x56, 0xbe, 0x8d, + 0xd6, 0x6d, 0x02, 0xcd, 0x80, 0x3b, 0x70, 0xdc, 0x7d, 0xac, 0x80, 0x34, + 0x90, 0x0b, 0x42, 0xb7, 0xff, 0x00, 0x37, 0xaa, 0xf5, 0x3d, 0x0f, 0xb4, + 0xbf, 0xed, 0x5f, 0x4a, 0x37, 0x69, 0x11, 0xf4, 0x76, 0xcc, 0xed, 0xf3, + 0x49, 0x4d, 0x3a, 0x3a, 0x36, 0x23, 0x08, 0x71, 0x63, 0x43, 0x4f, 0x11, + 0xaf, 0x21, 0x5b, 0x66, 0x0e, 0x30, 0x2d, 0xf4, 0xeb, 0x04, 0xf8, 0x91, + 0x1f, 0x82, 0x76, 0x3f, 0x69, 0xd0, 0x93, 0x22, 0x67, 0xcd, 0x11, 0xee, + 0x1b, 0x44, 0xc9, 0x26, 0x74, 0x1d, 0x82, 0x4a, 0x68, 0x75, 0x0a, 0xab, + 0xaa, 0xfc, 0x6b, 0x84, 0x48, 0x7b, 0xab, 0x76, 0x9f, 0xbe, 0xd9, 0x1f, + 0xf5, 0x2a, 0xdb, 0x5d, 0x5f, 0xa0, 0xd6, 0xe8, 0xd7, 0x12, 0x21, 0xb1, + 0xc7, 0xfb, 0x55, 0x7e, 0xa8, 0xf6, 0x8c, 0x41, 0x70, 0x6c, 0x7a, 0x2f, + 0xae, 0xc9, 0xf2, 0x0e, 0x13, 0xf8, 0x2a, 0xd5, 0xe4, 0xdd, 0x61, 0xb0, + 0x4f, 0xa6, 0x4b, 0xa0, 0x16, 0xea, 0xe8, 0xf2, 0xf0, 0xf8, 0xa4, 0xa6, + 0xde, 0x45, 0xad, 0x6d, 0xa5, 0x8c, 0x13, 0xe5, 0x23, 0x74, 0x8f, 0x15, + 0x19, 0x6d, 0xb5, 0xc3, 0x84, 0x72, 0x01, 0xef, 0xc1, 0x9e, 0x38, 0x55, + 0xad, 0xc5, 0xfb, 0x31, 0xaf, 0xdb, 0xfa, 0x40, 0xe9, 0x06, 0x66, 0x24, + 0xc9, 0x20, 0xa3, 0x36, 0xb8, 0x66, 0xb2, 0x08, 0x1f, 0x44, 0x6a, 0x24, + 0xf7, 0x29, 0x29, 0x8d, 0x34, 0x9a, 0xde, 0xf8, 0x27, 0xdc, 0x44, 0x41, + 0x9e, 0xde, 0x2a, 0x87, 0xd6, 0x3a, 0xda, 0xdc, 0x5a, 0x1c, 0x04, 0x6a, + 0xe6, 0x9f, 0xbc, 0x15, 0xa8, 0xc0, 0xd7, 0x77, 0x33, 0xe4, 0xa9, 0x7d, + 0x62, 0x60, 0xb3, 0xa7, 0x6f, 0x6e, 0xa2, 0xb7, 0x83, 0x23, 0xc0, 0xe9, + 0xca, 0x4a, 0x79, 0x64, 0x92, 0x49, 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, + 0x49, 0x24, 0x92, 0x52, 0x97, 0x71, 0xf5, 0x3f, 0xea, 0x86, 0x1e, 0x5e, + 0x1b, 0x7a, 0xa7, 0x53, 0x69, 0xb4, 0x58, 0x4f, 0xa1, 0x47, 0x0d, 0xda, + 0xdd, 0x37, 0xbf, 0xc6, 0x4f, 0x01, 0x71, 0x2c, 0x63, 0x9e, 0xf6, 0xb1, + 0xa2, 0x5c, 0xe2, 0x00, 0x1e, 0x67, 0x45, 0xec, 0xb8, 0x2c, 0xaf, 0x0b, + 0x1f, 0x1b, 0x05, 0x9a, 0x32, 0xba, 0xc3, 0x1b, 0xf1, 0x68, 0x83, 0xf8, + 0xa4, 0xa7, 0x2f, 0xaf, 0x63, 0x51, 0x8d, 0x56, 0x30, 0xc6, 0x63, 0x69, + 0x6d, 0x6f, 0x92, 0xd6, 0x34, 0x36, 0x1a, 0x46, 0x87, 0xda, 0x3b, 0x10, + 0xb1, 0xfe, 0xae, 0x61, 0xf5, 0x07, 0xe3, 0x64, 0x0b, 0x6c, 0xfb, 0x43, + 0x0b, 0xc3, 0xe1, 0xf3, 0xbc, 0x13, 0xae, 0xf6, 0x9d, 0x4f, 0xc9, 0x75, + 0x19, 0x06, 0xab, 0xb1, 0x2e, 0x7d, 0x90, 0x7d, 0x9a, 0x4f, 0x6e, 0xc2, + 0x7e, 0x6b, 0x27, 0xa1, 0xdc, 0x6a, 0xc8, 0x76, 0x30, 0x70, 0x63, 0xec, + 0xf6, 0xb4, 0x48, 0x79, 0x96, 0xf8, 0xb4, 0x1e, 0x21, 0x25, 0x27, 0xfb, + 0x13, 0x6c, 0x6b, 0x7d, 0x4f, 0x74, 0xf0, 0xe1, 0xaa, 0x8e, 0x4e, 0x15, + 0x1d, 0x2b, 0x12, 0xfe, 0xa4, 0xe8, 0x76, 0x43, 0x2a, 0x21, 0x80, 0xf1, + 0x3c, 0x86, 0x8f, 0x9f, 0x2b, 0x4e, 0xdf, 0xb4, 0x12, 0xd6, 0xd0, 0x2b, + 0x36, 0x35, 0xde, 0xf7, 0xba, 0x76, 0xb0, 0x77, 0x86, 0xf7, 0x3e, 0x4b, + 0x3b, 0xac, 0xd6, 0xc6, 0x60, 0x3b, 0xed, 0x36, 0x17, 0xd9, 0x61, 0xd8, + 0x2c, 0x71, 0xda, 0xd9, 0x8d, 0xc7, 0x4d, 0x1a, 0x07, 0x92, 0x4a, 0x73, + 0x7e, 0xad, 0xd4, 0xec, 0xac, 0x17, 0x1e, 0xa2, 0xf3, 0x98, 0xf7, 0xdb, + 0xb4, 0x8c, 0x88, 0xb5, 0xb1, 0xfc, 0x90, 0xf9, 0x84, 0xdd, 0x7b, 0xea, + 0x3e, 0x15, 0x98, 0xb6, 0x64, 0xf4, 0xc6, 0xfa, 0x39, 0x2c, 0x05, 0xde, + 0x88, 0x33, 0x5d, 0x91, 0xa9, 0x6b, 0x43, 0xbe, 0x89, 0xf0, 0xd6, 0x16, + 0x8f, 0xd5, 0x61, 0x57, 0xd9, 0xad, 0xa9, 0xc0, 0x7a, 0x9b, 0xb7, 0x37, + 0xfa, 0xa7, 0x82, 0x3e, 0x6a, 0xf1, 0xc8, 0xb1, 0xf9, 0x0f, 0xa8, 0x9d, + 0x18, 0xe2, 0x0f, 0xc2, 0x52, 0x53, 0xe3, 0xe4, 0x46, 0x87, 0x94, 0x95, + 0xce, 0xb1, 0x5b, 0x6b, 0xea, 0xb9, 0x8c, 0x68, 0x86, 0xb6, 0xeb, 0x00, + 0x1e, 0x1e, 0xe2, 0xa9, 0xa4, 0xa5, 0x24, 0x92, 0x49, 0x29, 0x4b, 0x5b, + 0xa3, 0xc3, 0xa9, 0xb6, 0xb2, 0x24, 0xb8, 0x11, 0x3f, 0x18, 0x59, 0x2b, + 0x5f, 0xa1, 0xc7, 0xe9, 0x3e, 0x06, 0x3f, 0x04, 0x94, 0xec, 0xfd, 0x5f, + 0x0c, 0x18, 0xb9, 0x24, 0x89, 0xfd, 0x62, 0xc1, 0xa6, 0xbf, 0xe8, 0xd6, + 0x85, 0xed, 0x01, 0xb9, 0x16, 0x88, 0x02, 0x2b, 0x87, 0x40, 0x31, 0x02, + 0x3b, 0xaa, 0x7d, 0x05, 0x8f, 0x6e, 0x26, 0x40, 0x82, 0xd3, 0xf6, 0x8b, + 0xa7, 0xcb, 0x46, 0x2b, 0x79, 0xaf, 0x6f, 0xd8, 0xb2, 0xb7, 0x70, 0xe0, + 0xd0, 0xd0, 0x44, 0xfb, 0x8e, 0x83, 0x9f, 0x82, 0x4a, 0x47, 0x75, 0x60, + 0xbd, 0xe4, 0x77, 0x79, 0x12, 0x74, 0xd7, 0xfd, 0x7c, 0x56, 0xaf, 0xd5, + 0xc2, 0xd6, 0x64, 0x1a, 0x8c, 0x07, 0x38, 0x38, 0x0f, 0x38, 0x33, 0x0a, + 0x85, 0x75, 0x87, 0xbd, 0xee, 0x3a, 0x80, 0xf7, 0x01, 0xe3, 0xa0, 0x61, + 0xfe, 0x2a, 0xd7, 0x4e, 0xb0, 0x55, 0x9b, 0x48, 0x79, 0xd8, 0xd7, 0x3f, + 0x68, 0x20, 0x19, 0x90, 0x67, 0xe0, 0x92, 0x9e, 0xa4, 0xd4, 0xd7, 0x80, + 0xd7, 0x00, 0x41, 0xe5, 0x3f, 0xa0, 0xcd, 0x00, 0x03, 0x68, 0xe0, 0x47, + 0x74, 0x2c, 0x9b, 0x9f, 0x8f, 0x0e, 0x75, 0x8d, 0x0d, 0x3c, 0x17, 0x08, + 0xf8, 0xf7, 0x43, 0x66, 0x63, 0x9c, 0x75, 0x70, 0x11, 0xf1, 0x8d, 0x78, + 0xe5, 0x25, 0x36, 0x1d, 0x40, 0x73, 0x81, 0xec, 0xde, 0x3e, 0x2a, 0x4e, + 0xa5, 0x8e, 0xd4, 0xf3, 0x1c, 0xf8, 0x2a, 0xe7, 0x25, 0xf3, 0x2c, 0x70, + 0x22, 0x38, 0xed, 0xf1, 0x41, 0x75, 0xb6, 0xfa, 0x85, 0xed, 0x3f, 0x48, + 0x41, 0x6c, 0x7f, 0x19, 0x49, 0x4d, 0x8b, 0x8d, 0x6d, 0x77, 0xa4, 0xd0, + 0x05, 0x84, 0x68, 0x48, 0x91, 0xf0, 0xd1, 0x4b, 0xec, 0xf4, 0xcf, 0xa9, + 0xe9, 0x8d, 0xfc, 0x7d, 0x11, 0x3f, 0x0f, 0x15, 0x4d, 0xed, 0x2f, 0x70, + 0x73, 0x77, 0x07, 0xb4, 0x16, 0xb4, 0xf7, 0x01, 0xdc, 0xc2, 0xcb, 0xfb, + 0x11, 0xfb, 0x56, 0xef, 0xb7, 0x5d, 0x33, 0x1f, 0x67, 0xf5, 0xdd, 0xe9, + 0xcf, 0x86, 0xcf, 0xe0, 0x92, 0x9c, 0x66, 0x39, 0xdb, 0x40, 0x03, 0x6c, + 0x69, 0x3f, 0x77, 0x28, 0xad, 0xdd, 0x1e, 0xd1, 0x3a, 0xea, 0x4f, 0x08, + 0x55, 0x90, 0x07, 0x89, 0xe0, 0x7e, 0x2a, 0xc3, 0x00, 0xda, 0x0b, 0xb5, + 0x8d, 0x40, 0x49, 0x4d, 0x6c, 0xda, 0xbd, 0x6c, 0x3b, 0x58, 0xd9, 0x71, + 0x73, 0x1c, 0xdf, 0x98, 0x06, 0x16, 0x3e, 0x25, 0xd7, 0xd4, 0x05, 0xc1, + 0xa5, 0xcc, 0x21, 0xae, 0x71, 0x11, 0x3a, 0x88, 0xd6, 0x57, 0x4c, 0x2a, + 0xb8, 0x00, 0xf6, 0x91, 0xab, 0x88, 0x6b, 0x1b, 0xab, 0xbe, 0xef, 0x39, + 0x59, 0x1d, 0x26, 0x9f, 0x66, 0xc7, 0x8d, 0x2b, 0x7b, 0xaa, 0x23, 0xc7, + 0x6b, 0x88, 0xd7, 0xe4, 0x92, 0x92, 0xe1, 0xd2, 0xfc, 0x82, 0xfc, 0x8b, + 0x49, 0xda, 0xc0, 0x7d, 0x3e, 0x04, 0xb8, 0x09, 0xd4, 0x29, 0xd8, 0x38, + 0x1d, 0xbc, 0xbf, 0x8a, 0xdb, 0x38, 0xd8, 0x58, 0x34, 0x31, 0xa1, 0xae, + 0x78, 0xb4, 0x17, 0x92, 0x3c, 0x7c, 0xbf, 0x22, 0xc8, 0x05, 0xe3, 0x19, + 0xa4, 0x01, 0xb6, 0xd2, 0x23, 0xb9, 0xf6, 0x92, 0xde, 0x47, 0x8a, 0x4a, + 0x45, 0x54, 0xcc, 0x73, 0xe4, 0x38, 0x08, 0x7d, 0x4a, 0x91, 0x67, 0x4d, + 0xca, 0xac, 0x11, 0xa5, 0x7b, 0xc0, 0xfe, 0xa1, 0x0e, 0xfe, 0x08, 0xd5, + 0x80, 0xe2, 0x23, 0xdc, 0x38, 0xd2, 0x51, 0x03, 0x77, 0x7a, 0x95, 0xff, + 0x00, 0xa4, 0x69, 0x66, 0x9d, 0xf7, 0x08, 0x29, 0x29, 0xe0, 0xd2, 0x48, + 0x82, 0x09, 0x07, 0x90, 0x92, 0x4a, 0x52, 0x49, 0x24, 0x92, 0x94, 0x92, + 0x49, 0x24, 0xa6, 0xff, 0x00, 0x41, 0xac, 0x59, 0xd6, 0xb0, 0x18, 0xee, + 0x0e, 0x45, 0x73, 0xf2, 0x70, 0x2b, 0xd5, 0x32, 0xc7, 0xb0, 0x91, 0xa3, + 0xeb, 0xd4, 0x7c, 0xc4, 0xaf, 0x2b, 0xe8, 0x5b, 0xbf, 0x6d, 0x60, 0x6c, + 0x12, 0xef, 0xb4, 0x57, 0x03, 0xfb, 0x41, 0x7a, 0x7d, 0xd9, 0x41, 0xcf, + 0x32, 0xc2, 0xdd, 0xd5, 0xfb, 0xfb, 0x89, 0x1a, 0xb6, 0x0f, 0xde, 0x92, + 0x91, 0x74, 0x7c, 0x9b, 0x2e, 0xc7, 0x15, 0xe4, 0x7a, 0x62, 0x9b, 0xac, + 0x7d, 0x55, 0x82, 0x46, 0xfb, 0x8b, 0x67, 0x76, 0xed, 0xfc, 0x92, 0x9f, + 0x1b, 0xa8, 0xf4, 0xea, 0x7a, 0x85, 0xb8, 0xad, 0x65, 0x74, 0xb6, 0xbd, + 0xe3, 0x7b, 0x04, 0xce, 0xd2, 0x34, 0xf6, 0x8d, 0x3b, 0xa7, 0xa8, 0x62, + 0xe3, 0xf4, 0x86, 0xe5, 0xb9, 0xad, 0x22, 0xb0, 0x6f, 0xa5, 0xce, 0x00, + 0x86, 0xda, 0x49, 0xd4, 0x4f, 0x07, 0x71, 0x85, 0xcf, 0x51, 0x63, 0xa0, + 0xbc, 0x07, 0x6e, 0x7b, 0xa7, 0x49, 0xef, 0xe6, 0x92, 0x9e, 0xc6, 0x87, + 0x63, 0xd9, 0xbe, 0xca, 0x9e, 0x1c, 0x1e, 0xe0, 0xe2, 0x41, 0xe7, 0x40, + 0x3f, 0x82, 0xa9, 0xd5, 0xba, 0x86, 0x1e, 0x36, 0x39, 0x65, 0x85, 0x96, + 0x92, 0xe1, 0xba, 0xa3, 0x0e, 0xd2, 0x75, 0x1e, 0x01, 0x60, 0xb1, 0xac, + 0xc8, 0x73, 0xc3, 0x9c, 0xef, 0x50, 0x33, 0x42, 0x0c, 0x12, 0x01, 0x1a, + 0x14, 0xae, 0xa6, 0xb6, 0x37, 0xd3, 0x10, 0xd6, 0x8d, 0x0f, 0xc5, 0x25, + 0x3a, 0x95, 0x65, 0x60, 0xe3, 0x61, 0x1e, 0xa1, 0x8b, 0x8e, 0xd6, 0x55, + 0xb4, 0xd9, 0x79, 0xa8, 0x6a, 0xdd, 0xa7, 0x52, 0x7e, 0x03, 0xb0, 0x42, + 0xe9, 0xb9, 0xcc, 0xcf, 0xb1, 0x97, 0x55, 0x31, 0x74, 0x39, 0xdb, 0x84, + 0x18, 0x68, 0x84, 0xdd, 0x24, 0xd5, 0x7e, 0x16, 0x6e, 0x1d, 0x90, 0xe6, + 0x39, 0x90, 0x47, 0x8b, 0x5c, 0x36, 0xb9, 0x4f, 0xa4, 0x52, 0xdc, 0x7a, + 0x0b, 0xa3, 0x5a, 0x9a, 0x5a, 0x3e, 0x5a, 0x24, 0xa7, 0xce, 0x7a, 0xd4, + 0x9e, 0xaf, 0x9a, 0x4f, 0xfa, 0x7b, 0x3f, 0xea, 0x8a, 0xa4, 0xad, 0xf5, + 0x67, 0xef, 0xea, 0x99, 0x6f, 0xf1, 0xb9, 0xff, 0x00, 0xf5, 0x45, 0x54, + 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, 0x96, 0xc7, 0x43, 0x6c, 0xb6, 0xd8, + 0x99, 0x00, 0xc4, 0x78, 0xcb, 0x56, 0x3a, 0xdd, 0xfa, 0xbe, 0xdd, 0xd5, + 0xda, 0xd0, 0x35, 0xd7, 0xef, 0xf6, 0xa4, 0xa7, 0x6b, 0xa4, 0x37, 0x66, + 0x2d, 0xcd, 0x99, 0x9c, 0x8b, 0x64, 0xf3, 0xe1, 0xcf, 0xdc, 0x8d, 0xd5, + 0x2b, 0x8c, 0x4c, 0x8d, 0xb0, 0x36, 0xb0, 0x6e, 0xf9, 0x3d, 0xc3, 0xba, + 0x0f, 0x4c, 0xc7, 0x16, 0xf4, 0xbd, 0x96, 0x4e, 0xef, 0x59, 0xee, 0xdd, + 0xc4, 0xb9, 0xa7, 0x95, 0x63, 0xa8, 0x55, 0x65, 0x98, 0x77, 0xb5, 0xbc, + 0xba, 0xb2, 0x46, 0xb1, 0xc3, 0xa7, 0xf8, 0xa4, 0xa4, 0xd8, 0xac, 0xb2, + 0xcb, 0x5e, 0xda, 0xbd, 0xa5, 0xa4, 0xba, 0x62, 0x41, 0x96, 0xb3, 0x85, + 0xaf, 0x82, 0xd6, 0x9a, 0xc7, 0xa9, 0xef, 0x2d, 0x3a, 0xe9, 0xdf, 0x85, + 0x9b, 0x8a, 0xdf, 0xb3, 0x32, 0xd0, 0x5c, 0x5b, 0x68, 0x6e, 0xc7, 0xbd, + 0xbe, 0x6c, 0x60, 0x2e, 0xef, 0xc1, 0x5a, 0x9d, 0x3d, 0xac, 0xf4, 0x34, + 0x04, 0xc7, 0xd2, 0x70, 0x1a, 0x93, 0xe3, 0x09, 0x29, 0xba, 0x71, 0xab, + 0x35, 0xb9, 0xbb, 0x4d, 0x81, 0xc2, 0x03, 0x5e, 0x4b, 0xb6, 0x8f, 0x08, + 0x71, 0x2a, 0x15, 0x52, 0xfa, 0x43, 0x80, 0x00, 0x56, 0xd6, 0xc3, 0x1a, + 0xe8, 0x9f, 0x80, 0x1c, 0x08, 0xf8, 0xab, 0x15, 0xdb, 0x30, 0x1c, 0xd0, + 0x1c, 0x3d, 0xa0, 0x12, 0x03, 0x89, 0xf2, 0x53, 0x6b, 0xfd, 0x6d, 0xcd, + 0xac, 0x07, 0x6c, 0x30, 0xe6, 0x9e, 0xc7, 0xee, 0x49, 0x4d, 0x59, 0x69, + 0x7b, 0x18, 0xca, 0x9e, 0xcd, 0xc2, 0x37, 0x18, 0xd9, 0x3f, 0x29, 0x25, + 0x42, 0xc0, 0xea, 0xde, 0x41, 0x70, 0x7c, 0x4c, 0x06, 0x8d, 0x76, 0x8d, + 0x65, 0x59, 0xfb, 0x31, 0x78, 0x3b, 0xaa, 0x04, 0x76, 0x2d, 0x74, 0x48, + 0xec, 0xa9, 0xe5, 0xe1, 0x39, 0xce, 0x2e, 0xc6, 0x9c, 0x7b, 0x9b, 0x10, + 0xf0, 0xe1, 0x20, 0x7c, 0xc4, 0x14, 0x94, 0xa6, 0x5f, 0x53, 0xcf, 0xe9, + 0x18, 0xe0, 0x0f, 0x01, 0xdc, 0x7e, 0x0a, 0x13, 0x85, 0xeb, 0xfa, 0x7f, + 0x67, 0x6c, 0xfe, 0xf6, 0xd1, 0x13, 0xf1, 0x55, 0x2e, 0xa3, 0x29, 0x87, + 0x7b, 0xf2, 0x03, 0xc1, 0x9f, 0x7b, 0xb6, 0x32, 0x7b, 0xfb, 0x9a, 0xd8, + 0xd3, 0xb6, 0x88, 0xb1, 0x83, 0xe9, 0xc7, 0xac, 0xef, 0x5b, 0xf7, 0xb6, + 0xfb, 0x7e, 0x11, 0x3f, 0xc5, 0x25, 0x38, 0x14, 0x9f, 0x64, 0x44, 0x34, + 0x8d, 0x3c, 0x7c, 0x51, 0x2b, 0x77, 0x24, 0x69, 0x10, 0xd3, 0xf3, 0xf0, + 0xff, 0x00, 0x62, 0x15, 0x4d, 0x3c, 0x9d, 0x4f, 0x7f, 0x9a, 0x38, 0xe6, + 0x35, 0x7b, 0xbc, 0x7b, 0x24, 0xa6, 0x4d, 0x0e, 0x0c, 0xf6, 0x72, 0x7f, + 0x38, 0xf9, 0x78, 0xaa, 0x18, 0x2d, 0x75, 0x39, 0x79, 0x4c, 0x06, 0x7f, + 0x4c, 0x1d, 0xf2, 0x78, 0x0e, 0xd1, 0x5f, 0x0d, 0x6e, 0xe2, 0x1c, 0x4c, + 0xf2, 0xd1, 0x3d, 0x95, 0x3d, 0x6a, 0xea, 0x6f, 0x9d, 0x05, 0xb4, 0xb5, + 0xde, 0x7e, 0xc7, 0x16, 0x98, 0xf9, 0x14, 0x94, 0xec, 0x54, 0xfa, 0xec, + 0xb0, 0x0c, 0x87, 0xb6, 0xba, 0xd8, 0xd2, 0x0b, 0x9e, 0x40, 0x68, 0x13, + 0xc7, 0x91, 0x59, 0xce, 0xba, 0x97, 0x16, 0x53, 0x45, 0x85, 0xed, 0xaf, + 0x57, 0x3a, 0x20, 0x4c, 0xed, 0xf6, 0xa7, 0x7c, 0x3d, 0x81, 0x8f, 0x12, + 0xd7, 0x0f, 0x73, 0x4f, 0x87, 0x9a, 0xab, 0x8c, 0xd3, 0x5d, 0x97, 0x32, + 0x64, 0xb3, 0x68, 0x07, 0xf7, 0x86, 0xbd, 0xbe, 0x09, 0x29, 0x35, 0x7a, + 0x10, 0xd7, 0x73, 0xc9, 0x6f, 0x7d, 0x7b, 0x2b, 0x2d, 0x0d, 0xad, 0xec, + 0xdb, 0xa0, 0x99, 0x86, 0x0f, 0x13, 0x3c, 0xaa, 0xce, 0xda, 0xdb, 0x83, + 0x7c, 0x8e, 0x83, 0x88, 0x07, 0xb9, 0xf9, 0xab, 0x53, 0x3b, 0x0b, 0x75, + 0xed, 0x0d, 0xd0, 0x24, 0xa7, 0x81, 0xce, 0xac, 0xd5, 0x9b, 0x91, 0x51, + 0x11, 0xb2, 0xc7, 0xb6, 0x3e, 0x0e, 0x28, 0x0b, 0x53, 0xeb, 0x25, 0x7e, + 0x9f, 0x59, 0xc8, 0x88, 0x87, 0x6d, 0x7e, 0x9c, 0x7b, 0x9a, 0x09, 0x59, + 0x69, 0x29, 0x49, 0x24, 0x92, 0x4a, 0x52, 0x49, 0x24, 0x92, 0x9d, 0x0f, + 0xab, 0xee, 0x0c, 0xeb, 0x98, 0x0e, 0x3c, 0x0b, 0xeb, 0xff, 0x00, 0xaa, + 0x0b, 0xd4, 0xee, 0xc3, 0x6b, 0xb7, 0x3c, 0x80, 0x41, 0x69, 0x13, 0xf9, + 0xc4, 0xf8, 0x93, 0x30, 0xbc, 0x87, 0x16, 0xef, 0x43, 0x26, 0x9b, 0xc7, + 0xf8, 0x27, 0xb5, 0xff, 0x00, 0xe6, 0x90, 0x57, 0xb2, 0x36, 0xdf, 0x53, + 0x15, 0xc6, 0xb8, 0x3b, 0xdb, 0x2d, 0x77, 0x23, 0x51, 0xa2, 0x4a, 0x71, + 0x2f, 0xca, 0xb3, 0x03, 0xa4, 0x62, 0xe2, 0xdc, 0x37, 0x1b, 0x5e, 0xe0, + 0x00, 0xd7, 0xda, 0x5c, 0xf7, 0x03, 0xfc, 0x56, 0x5d, 0x77, 0x63, 0x7a, + 0x6f, 0xb1, 0xf7, 0x56, 0x5c, 0xd7, 0x35, 0xad, 0x3a, 0x9d, 0x35, 0xdc, + 0x4c, 0x70, 0xae, 0xf5, 0x2b, 0xbd, 0x6e, 0xa8, 0xd6, 0x0f, 0x75, 0x78, + 0xac, 0xda, 0xd2, 0x46, 0x92, 0x47, 0x97, 0x92, 0x8b, 0x83, 0x2b, 0x01, + 0xcc, 0x64, 0x57, 0x01, 0xb6, 0x09, 0x99, 0xfe, 0x52, 0x4a, 0x43, 0x56, + 0x40, 0xb1, 0xa5, 0xf8, 0xc3, 0xd8, 0xc9, 0x0f, 0xb4, 0xb7, 0x6e, 0xf3, + 0xfc, 0x9d, 0xda, 0xc0, 0x4e, 0xfb, 0x5d, 0xb8, 0x6b, 0xf4, 0xa4, 0x91, + 0x01, 0x58, 0x22, 0x58, 0xe6, 0xf0, 0x0f, 0x86, 0x9e, 0x0b, 0x3d, 0xb6, + 0x64, 0x3b, 0x25, 0xde, 0xa3, 0x06, 0xc0, 0x0c, 0x38, 0x7c, 0x74, 0x49, + 0x4d, 0xcc, 0x1c, 0x83, 0x56, 0x45, 0x67, 0x86, 0xd8, 0x4b, 0x5f, 0x1d, + 0xc3, 0xbc, 0x7e, 0x6b, 0x4e, 0x9b, 0x5c, 0x29, 0xb2, 0xb7, 0x08, 0x7b, + 0x6d, 0x73, 0x0c, 0xf7, 0x0d, 0x74, 0x85, 0x8a, 0x41, 0xf4, 0x58, 0x5b, + 0x3b, 0xa6, 0x7e, 0x0a, 0xc6, 0x6f, 0x50, 0x66, 0x26, 0x1b, 0xb3, 0x49, + 0xfc, 0xd7, 0x58, 0x3c, 0xed, 0x23, 0x68, 0x1f, 0x7a, 0x4a, 0x78, 0x3e, + 0xa2, 0x00, 0xea, 0x19, 0x40, 0x6a, 0x3d, 0x6b, 0x20, 0xff, 0x00, 0x68, + 0xaa, 0xc9, 0xc9, 0x2e, 0x25, 0xc4, 0xc9, 0x3a, 0x92, 0x99, 0x25, 0x29, + 0x24, 0x92, 0x49, 0x4a, 0x5b, 0xdf, 0x57, 0x1e, 0x58, 0x2d, 0x20, 0xc7, + 0xb5, 0xda, 0xc4, 0xfe, 0xea, 0xc1, 0x5b, 0xff, 0x00, 0x56, 0x98, 0x2c, + 0xb1, 0xf5, 0x93, 0xb4, 0x16, 0x9f, 0xfb, 0xea, 0x4a, 0x77, 0xfa, 0x25, + 0xbe, 0xbd, 0x57, 0xd4, 0xfd, 0x1b, 0x5e, 0x53, 0xda, 0x00, 0xd4, 0x86, + 0xb9, 0xa1, 0xce, 0x3e, 0x7a, 0xad, 0x8b, 0xba, 0x3e, 0x43, 0x85, 0x81, + 0xa5, 0xa5, 0x8e, 0xa1, 0xc4, 0x3b, 0x81, 0x33, 0x3a, 0x8d, 0x56, 0x1f, + 0x41, 0x65, 0xb5, 0x7d, 0xb2, 0xc8, 0x2d, 0x8c, 0x92, 0xe6, 0x13, 0xfc, + 0x96, 0xc4, 0xca, 0xe8, 0x2a, 0xea, 0x39, 0x2e, 0xb4, 0xb6, 0xd0, 0xd7, + 0x30, 0xb4, 0xeb, 0x1c, 0xcc, 0x8e, 0x52, 0x53, 0x43, 0x0e, 0xce, 0xa3, + 0x93, 0xb0, 0xd1, 0x80, 0x6a, 0xf5, 0x5b, 0x36, 0x5d, 0x7b, 0xc6, 0xd0, + 0x23, 0x6c, 0xfa, 0x6c, 0x13, 0xac, 0x68, 0x16, 0xbf, 0x4f, 0xc5, 0xea, + 0x0c, 0x6f, 0xa5, 0x96, 0x58, 0x19, 0x3e, 0xdf, 0x40, 0x16, 0x13, 0xfd, + 0xad, 0xc5, 0xca, 0xc5, 0x17, 0xd4, 0xfa, 0x6b, 0x7d, 0x45, 0x84, 0x9a, + 0xda, 0x05, 0x8c, 0xed, 0x1a, 0xc1, 0xf3, 0xf2, 0x56, 0x9a, 0x2c, 0x01, + 0xae, 0x6c, 0x16, 0x3b, 0x57, 0xba, 0x7d, 0xd1, 0xcc, 0x08, 0xf1, 0x49, + 0x4b, 0x7a, 0x4d, 0xaf, 0xdd, 0x1b, 0x8f, 0x12, 0xe2, 0x4c, 0x0f, 0xe4, + 0xf3, 0xaa, 0x19, 0xce, 0xc4, 0xc5, 0xaf, 0x7d, 0x8f, 0x0c, 0x2f, 0xd5, + 0xc3, 0x6e, 0xd7, 0x1f, 0x8b, 0x79, 0x40, 0xea, 0x3d, 0x49, 0xf8, 0x95, + 0x1d, 0xc5, 0xa6, 0xd3, 0x21, 0xad, 0x6f, 0x0d, 0x6f, 0x6f, 0x8a, 0xe5, + 0x32, 0x72, 0x9f, 0x6b, 0x9d, 0x63, 0xcc, 0x93, 0xe2, 0x92, 0x9d, 0xfc, + 0xcf, 0xad, 0x74, 0xd4, 0xd2, 0x71, 0xaa, 0x2e, 0xd8, 0x27, 0x73, 0xf4, + 0x6c, 0x0f, 0xe4, 0xb7, 0x55, 0xcb, 0x75, 0x0f, 0xad, 0x77, 0x5f, 0x5b, + 0x9f, 0x7d, 0xae, 0x65, 0x6f, 0x27, 0x6d, 0x4c, 0x1b, 0x4b, 0x84, 0x6b, + 0xe6, 0x07, 0xc5, 0x51, 0xcf, 0xcf, 0x65, 0x7a, 0x39, 0xde, 0xd1, 0xa1, + 0x03, 0x92, 0x7c, 0x02, 0xe7, 0xb2, 0x2d, 0x16, 0xd8, 0x5e, 0xd0, 0x5a, + 0xd3, 0xc0, 0x26, 0x52, 0x53, 0x65, 0xf9, 0xcd, 0xb3, 0x2f, 0xd6, 0x26, + 0xc0, 0xdd, 0x74, 0x2f, 0xdd, 0x13, 0xfc, 0x14, 0xbf, 0x69, 0xbf, 0x7c, + 0x6c, 0x64, 0x4f, 0x30, 0x78, 0x54, 0x12, 0x49, 0x4f, 0x79, 0x48, 0x21, + 0xc4, 0x3c, 0x82, 0x3d, 0xb0, 0x07, 0x91, 0xe5, 0x58, 0x20, 0x8d, 0x75, + 0x8e, 0x40, 0x1f, 0x7a, 0x18, 0xa8, 0xb6, 0xfd, 0xb5, 0x90, 0xf0, 0x5b, + 0x24, 0xf7, 0x02, 0x4b, 0x7b, 0xab, 0x0d, 0x6b, 0xc6, 0x87, 0x4f, 0x33, + 0xe3, 0xdd, 0x25, 0x2a, 0x04, 0x07, 0x7d, 0x19, 0x11, 0xb4, 0xf3, 0xc4, + 0x2c, 0xfc, 0xa6, 0x91, 0x97, 0x86, 0xfe, 0x24, 0xd9, 0x51, 0x27, 0xbc, + 0x8d, 0xc3, 0xfe, 0xa5, 0x69, 0xd9, 0x5b, 0x5a, 0xdd, 0xdb, 0xc0, 0x8e, + 0xfc, 0xeb, 0xca, 0xa3, 0xd4, 0x44, 0x57, 0x55, 0xbf, 0xe8, 0xef, 0xad, + 0xc4, 0x9f, 0x07, 0x1d, 0x87, 0xfe, 0xa9, 0x25, 0x25, 0x30, 0x44, 0x70, + 0x66, 0x60, 0xf3, 0xf1, 0x2a, 0xbd, 0x6d, 0x23, 0x36, 0xc9, 0xfc, 0xea, + 0xda, 0x7e, 0xe8, 0x6f, 0xf0, 0x57, 0x2d, 0x63, 0x64, 0x90, 0x26, 0x74, + 0x11, 0xdf, 0x54, 0x27, 0x57, 0x19, 0x75, 0xd8, 0xd0, 0x48, 0x75, 0x6e, + 0x6b, 0x8f, 0xc0, 0xee, 0x49, 0x4c, 0x6c, 0xae, 0x5e, 0x3d, 0xa3, 0xda, + 0x24, 0x89, 0xd3, 0x8e, 0xff, 0x00, 0x35, 0x61, 0xa0, 0x3e, 0xa6, 0x97, + 0x6a, 0xd0, 0x24, 0xf6, 0x68, 0xee, 0xa3, 0x6b, 0x4f, 0xa8, 0x1b, 0x12, + 0x00, 0x12, 0xd1, 0xd9, 0x1a, 0x81, 0x35, 0x86, 0xba, 0x5d, 0xb4, 0x0d, + 0x38, 0x02, 0x34, 0x49, 0x4f, 0x27, 0xf5, 0xbe, 0x80, 0xdc, 0xba, 0x2f, + 0x6f, 0x16, 0xd5, 0x07, 0xe2, 0xc3, 0xfd, 0xc4, 0x2c, 0x05, 0xd8, 0x7d, + 0x70, 0xa5, 0x87, 0xa6, 0xe3, 0x5e, 0x00, 0x05, 0x97, 0x16, 0x69, 0xe0, + 0xf6, 0xee, 0xff, 0x00, 0xbe, 0xae, 0x3d, 0x25, 0x29, 0x24, 0x92, 0x49, + 0x4a, 0x49, 0x24, 0x92, 0x52, 0x97, 0xa0, 0x74, 0x1e, 0xba, 0xda, 0xfe, + 0xac, 0x9b, 0x1c, 0xe2, 0x1f, 0x8c, 0x3d, 0x07, 0x19, 0x33, 0xcf, 0xb0, + 0xff, 0x00, 0x9a, 0x7f, 0x05, 0xe7, 0xeb, 0x6f, 0xea, 0xd3, 0xc3, 0xdf, + 0x93, 0x8b, 0x69, 0x3f, 0x66, 0x75, 0x62, 0xeb, 0x20, 0x4c, 0x1a, 0x8f, + 0xb7, 0x4f, 0xed, 0x24, 0xa7, 0xa1, 0xc4, 0xcf, 0xc3, 0xb8, 0x07, 0x0b, + 0x47, 0xa8, 0xf2, 0x5e, 0xe2, 0x41, 0x99, 0x2a, 0xe3, 0x5c, 0x08, 0xda, + 0xe8, 0x32, 0x7e, 0xf0, 0x7e, 0x4b, 0x32, 0x9c, 0x8c, 0x2b, 0x6c, 0x63, + 0x18, 0xcb, 0x1f, 0x63, 0xe1, 0xa1, 0xc0, 0x01, 0xaf, 0xc2, 0x74, 0x5a, + 0x8d, 0xaa, 0x01, 0x30, 0xe2, 0x01, 0x00, 0x6e, 0x8f, 0xef, 0x49, 0x4b, + 0x3a, 0x1b, 0x4b, 0xa5, 0xc0, 0x76, 0x68, 0x1c, 0xf3, 0xe6, 0x85, 0xb4, + 0x92, 0x7b, 0xcf, 0x87, 0xc5, 0x35, 0xd0, 0xc6, 0x13, 0xb5, 0xc4, 0x92, + 0x5a, 0x03, 0x44, 0x9d, 0xdc, 0x8f, 0xc8, 0xa5, 0x51, 0x12, 0xd9, 0xdc, + 0x46, 0xbd, 0xb5, 0x49, 0x4c, 0x36, 0x86, 0x30, 0x97, 0x01, 0x10, 0x47, + 0x3a, 0x95, 0xcf, 0x75, 0xfc, 0xaf, 0x57, 0x11, 0x95, 0xb4, 0x90, 0xd6, + 0x58, 0x65, 0xbf, 0x29, 0xd5, 0x74, 0xd7, 0x6d, 0x2d, 0xda, 0x43, 0x81, + 0xd3, 0x5d, 0x07, 0x3f, 0x12, 0xb9, 0x3e, 0xbb, 0x4d, 0x94, 0xb7, 0xdc, + 0xef, 0x63, 0xac, 0x1b, 0x1a, 0x46, 0xba, 0x37, 0x52, 0x4c, 0x79, 0xa4, + 0xa7, 0x15, 0x2e, 0xc9, 0x25, 0xd9, 0x25, 0x29, 0x39, 0xe0, 0x26, 0x4e, + 0x78, 0x1f, 0x0f, 0xe2, 0x92, 0x96, 0x5b, 0xff, 0x00, 0x56, 0x47, 0xeb, + 0x4e, 0x93, 0x03, 0x64, 0xc9, 0xed, 0xa0, 0x58, 0x0b, 0xa0, 0xfa, 0xb2, + 0xe7, 0x0c, 0xa9, 0x60, 0x93, 0xb4, 0xff, 0x00, 0xd4, 0x84, 0x94, 0xf4, + 0x3d, 0x32, 0xd6, 0x3d, 0x99, 0x35, 0x99, 0x69, 0x65, 0xe5, 0xae, 0x9e, + 0x60, 0xb6, 0x47, 0xe5, 0x5a, 0xb8, 0xbb, 0x1d, 0x75, 0xad, 0x71, 0xfa, + 0x0d, 0x1e, 0xe6, 0xf7, 0xf7, 0x44, 0x80, 0xb1, 0x7a, 0x6d, 0x6e, 0x7d, + 0xbd, 0x48, 0x91, 0xab, 0x6f, 0x06, 0x3c, 0xcd, 0x61, 0x6e, 0x74, 0xf1, + 0x53, 0xee, 0xb0, 0x5b, 0xa4, 0x55, 0x0d, 0x23, 0xc5, 0x87, 0x70, 0xd5, + 0x25, 0x3a, 0xb5, 0x88, 0x6b, 0x1d, 0x5b, 0x44, 0x40, 0x6b, 0x1b, 0xf4, + 0x40, 0x2e, 0xd7, 0xb2, 0x9e, 0x45, 0xb5, 0xe3, 0x32, 0x5a, 0xd0, 0xd8, + 0xd1, 0xbe, 0x25, 0xc7, 0x95, 0x4f, 0x1b, 0x3a, 0xa1, 0x45, 0x77, 0x38, + 0x97, 0x31, 0x95, 0x87, 0x30, 0xc6, 0xdd, 0xce, 0x23, 0xf3, 0x7c, 0x67, + 0x8d, 0x16, 0x76, 0x76, 0x65, 0x8e, 0x15, 0x3d, 0xfe, 0xd2, 0x75, 0x22, + 0x67, 0xdc, 0xe0, 0x5d, 0xca, 0x4a, 0x68, 0x75, 0x2c, 0xa7, 0xdd, 0x90, + 0xf9, 0x33, 0x1a, 0x05, 0x99, 0x99, 0x70, 0xa2, 0x87, 0x58, 0x4e, 0xa0, + 0x68, 0xa7, 0x75, 0xbe, 0xf9, 0x07, 0xbe, 0xab, 0x27, 0xaf, 0x5d, 0x34, + 0xb0, 0x0e, 0x0e, 0x81, 0x25, 0x38, 0xf9, 0x37, 0xfa, 0xcf, 0x91, 0xa0, + 0x08, 0x29, 0x24, 0x92, 0x94, 0x92, 0x49, 0x24, 0xa7, 0xd0, 0x2c, 0x86, + 0x5a, 0xc7, 0xb8, 0xea, 0x1a, 0x41, 0x68, 0x8e, 0xe7, 0x95, 0x64, 0x6e, + 0x89, 0xe6, 0x7f, 0x39, 0x50, 0xbf, 0x18, 0x3e, 0xf7, 0x1b, 0x37, 0x16, + 0xda, 0x37, 0x30, 0x00, 0x49, 0x98, 0x82, 0x27, 0xc9, 0x5d, 0xa5, 0xce, + 0x0d, 0x88, 0x00, 0x33, 0xdb, 0xfc, 0x9d, 0x12, 0x53, 0x38, 0x3b, 0x5c, + 0x40, 0x91, 0x00, 0xee, 0x77, 0xf7, 0x20, 0x66, 0xd4, 0xfb, 0xfa, 0x76, + 0x43, 0xaa, 0x6b, 0xac, 0x8a, 0x8b, 0xf7, 0x76, 0x05, 0x83, 0x7f, 0xf0, + 0x56, 0x4c, 0x11, 0x00, 0x4c, 0xc8, 0x97, 0x4f, 0xe4, 0x51, 0x6d, 0x8e, + 0x63, 0x4d, 0x6e, 0x71, 0x15, 0x59, 0x2d, 0x77, 0x61, 0xc4, 0x24, 0xa6, + 0x0d, 0x73, 0x6d, 0x6d, 0x76, 0x03, 0xb8, 0x3d, 0xad, 0x3f, 0x37, 0x6b, + 0xf7, 0x26, 0x7b, 0x0e, 0xec, 0x72, 0x38, 0xde, 0x41, 0x23, 0xb8, 0x73, + 0x4c, 0x7e, 0x45, 0x5b, 0x09, 0xce, 0x18, 0x34, 0xb7, 0xf3, 0xab, 0x1b, + 0x1d, 0xe2, 0x76, 0x3b, 0x6e, 0x9f, 0x72, 0xb3, 0x17, 0x17, 0x68, 0xc3, + 0xb2, 0xb2, 0x1c, 0x74, 0xe2, 0x3c, 0x12, 0x53, 0x27, 0x02, 0x1e, 0x38, + 0xdd, 0x12, 0x47, 0xc3, 0x4d, 0x54, 0xb1, 0xec, 0x6b, 0xac, 0x70, 0x6c, + 0xb9, 0xa6, 0x5d, 0x07, 0x40, 0x24, 0x6e, 0x42, 0x68, 0x79, 0xb1, 0xcf, + 0x20, 0x11, 0xa1, 0x68, 0xdc, 0x37, 0x48, 0x70, 0x77, 0x8a, 0x2e, 0x3e, + 0x3b, 0x58, 0xe2, 0xf7, 0x38, 0x6d, 0x1a, 0x43, 0x43, 0xb5, 0x8d, 0x07, + 0x68, 0x49, 0x4d, 0x2f, 0xac, 0xb5, 0x7d, 0xa3, 0xa0, 0xdf, 0x60, 0xd0, + 0x54, 0xea, 0xec, 0x00, 0x44, 0x68, 0xed, 0x87, 0x8f, 0xeb, 0x2e, 0x09, + 0x7a, 0x5e, 0x70, 0xc6, 0xcc, 0xe9, 0x39, 0x58, 0xf5, 0x8d, 0xcd, 0x7d, + 0x2f, 0x2c, 0x77, 0x8b, 0x9a, 0x37, 0x37, 0xfe, 0x90, 0x5e, 0x68, 0x92, + 0x94, 0x92, 0x49, 0x24, 0xa5, 0x24, 0x92, 0x49, 0x29, 0x4b, 0x67, 0xea, + 0xcb, 0xac, 0x39, 0x76, 0xe3, 0xb0, 0x4b, 0x72, 0x59, 0xe9, 0x58, 0xe0, + 0x63, 0x6b, 0x1c, 0x46, 0xbf, 0x7c, 0x2c, 0x65, 0xb7, 0xf5, 0x52, 0xda, + 0xeb, 0xcf, 0xb3, 0x78, 0x2e, 0x2e, 0xa8, 0x86, 0x86, 0x89, 0x3f, 0x49, + 0xae, 0xfe, 0x09, 0x29, 0xe9, 0xf0, 0xba, 0x4d, 0x38, 0x0e, 0x7e, 0x46, + 0xe3, 0x6b, 0x8c, 0x32, 0xb0, 0x60, 0x06, 0xfe, 0xf1, 0x1e, 0x2a, 0xcb, + 0xe5, 0x9e, 0xd3, 0x3a, 0x83, 0xa2, 0x95, 0x79, 0x35, 0xdc, 0xe0, 0x77, + 0x02, 0x5a, 0x3e, 0x81, 0x90, 0xe0, 0x7e, 0x05, 0x47, 0x25, 0xc1, 0xd6, + 0xb5, 0xe3, 0x52, 0xd9, 0x13, 0xe0, 0x92, 0x98, 0xe4, 0xbc, 0x83, 0x8e, + 0xd1, 0x13, 0x65, 0x86, 0x7e, 0x4c, 0x71, 0x4a, 0xc6, 0x06, 0x34, 0x16, + 0xea, 0x41, 0x0a, 0xb6, 0x6d, 0x83, 0xd4, 0xc4, 0x33, 0x23, 0xd4, 0x77, + 0xfe, 0x7b, 0x7a, 0x96, 0x3d, 0xa0, 0x87, 0x31, 0xba, 0xed, 0x2d, 0x99, + 0x3f, 0x34, 0x94, 0xd9, 0xb1, 0xbe, 0x2d, 0x89, 0x02, 0x27, 0x50, 0x24, + 0x79, 0x2e, 0x67, 0xeb, 0x3b, 0xd8, 0xca, 0xc6, 0x2e, 0xd2, 0x48, 0x70, + 0xb5, 0xb6, 0x76, 0x83, 0x2d, 0x85, 0xd2, 0xdb, 0x78, 0x60, 0x2e, 0x3c, + 0x01, 0xc9, 0x5c, 0xbf, 0xd6, 0x0c, 0xb1, 0x91, 0x41, 0x01, 0xa7, 0xe9, + 0x34, 0xee, 0x22, 0x38, 0xd3, 0xf8, 0xa4, 0xa7, 0x9d, 0x4e, 0x78, 0x09, + 0x93, 0x92, 0x20, 0x79, 0x24, 0xa5, 0x93, 0xbb, 0x86, 0xfc, 0x3f, 0x89, + 0x4c, 0x97, 0x82, 0x4a, 0x52, 0xe8, 0x3e, 0xab, 0x11, 0xf6, 0xa2, 0x60, + 0xba, 0x5a, 0x5a, 0x00, 0xf1, 0xda, 0xb9, 0xf5, 0xbb, 0xf5, 0x59, 0xc1, + 0xb9, 0x72, 0xee, 0x35, 0xef, 0x1c, 0xb5, 0x25, 0x3d, 0x37, 0x49, 0xb7, + 0x65, 0xdd, 0x4a, 0xb2, 0xd0, 0x5d, 0x6d, 0xcc, 0x00, 0xcc, 0x41, 0x35, + 0x8d, 0x56, 0xa6, 0x2b, 0x09, 0x71, 0x6d, 0x9e, 0xd7, 0x6e, 0x00, 0x1f, + 0x10, 0x5c, 0x74, 0x59, 0xbd, 0x32, 0xa6, 0xdd, 0xd4, 0xb2, 0xeb, 0x00, + 0x9f, 0xd3, 0x52, 0x1c, 0xd6, 0xe8, 0x7f, 0x9a, 0x1c, 0x4a, 0xdf, 0x6d, + 0x25, 0xb6, 0x9d, 0xa7, 0x74, 0x39, 0xba, 0x44, 0x39, 0xb3, 0x3a, 0x10, + 0x52, 0x53, 0x21, 0x63, 0x69, 0x21, 0xf6, 0x68, 0xd6, 0xc0, 0x90, 0x09, + 0xd2, 0x76, 0x81, 0x03, 0xb6, 0xab, 0x3f, 0xab, 0x50, 0xed, 0xaf, 0xd3, + 0x73, 0x6a, 0xb0, 0x3a, 0x7b, 0xc3, 0xbc, 0x82, 0xd4, 0xb6, 0xb6, 0xb6, + 0xd2, 0x44, 0x90, 0x01, 0x97, 0x03, 0xa8, 0x9f, 0x05, 0x5b, 0x2e, 0x9b, + 0x45, 0x62, 0xc6, 0xd8, 0xeb, 0x76, 0x30, 0xb5, 0xd5, 0xc0, 0x73, 0xac, + 0x1a, 0x10, 0x49, 0x31, 0xa8, 0x49, 0x4f, 0x21, 0x98, 0xc2, 0xdb, 0x1d, + 0x1c, 0x72, 0x16, 0x3f, 0x54, 0x66, 0xec, 0x69, 0xe4, 0xb3, 0xfb, 0xd7, + 0x45, 0x9d, 0x58, 0x6b, 0xf5, 0x23, 0x61, 0xfa, 0x27, 0xb7, 0xc1, 0x62, + 0xe6, 0x56, 0x4b, 0x5e, 0xc3, 0xa8, 0x3a, 0x6a, 0x92, 0x9e, 0x75, 0x25, + 0x27, 0xb1, 0xcc, 0x71, 0x6b, 0xb9, 0x0a, 0x29, 0x29, 0x49, 0x24, 0x92, + 0x4a, 0x7d, 0x1c, 0x9b, 0x3d, 0x47, 0x34, 0x5a, 0x1a, 0xd1, 0xa3, 0x9a, + 0xc0, 0x5f, 0x27, 0xbf, 0x97, 0xe2, 0xa6, 0xc7, 0x57, 0x5b, 0x5a, 0x36, + 0xba, 0x60, 0xf1, 0x0d, 0x68, 0x93, 0xe6, 0x4a, 0x0d, 0x4d, 0x35, 0xb0, + 0x32, 0xb1, 0x2d, 0x1a, 0x6a, 0x49, 0x23, 0xe6, 0x89, 0xb1, 0xe4, 0x6d, + 0x2e, 0x10, 0x7e, 0xff, 0x00, 0xc1, 0x25, 0x24, 0x37, 0x4b, 0xc9, 0x6b, + 0x04, 0xf2, 0x37, 0xb8, 0xbb, 0xf2, 0x42, 0x0b, 0xed, 0xba, 0x19, 0x01, + 0x9a, 0xbe, 0x1d, 0x00, 0x68, 0x3b, 0xbb, 0xdd, 0x3e, 0x0a, 0x62, 0xbd, + 0xb1, 0x2e, 0xe3, 0x41, 0xd9, 0x42, 0xdb, 0x58, 0x1a, 0x5d, 0x00, 0x11, + 0xac, 0xf9, 0x77, 0xf1, 0x49, 0x4b, 0x35, 0xd6, 0xd6, 0xd7, 0x54, 0xc7, + 0x10, 0xc7, 0x12, 0xe8, 0x6f, 0xb5, 0xbb, 0x8e, 0xba, 0x81, 0xe2, 0x95, + 0x2f, 0x79, 0xac, 0x32, 0xd6, 0xfb, 0x88, 0xf7, 0x1d, 0x48, 0x27, 0xcb, + 0x77, 0x64, 0x06, 0xe6, 0xd3, 0xb7, 0xda, 0x47, 0x3a, 0x91, 0xe3, 0xfd, + 0x9d, 0x51, 0x06, 0x43, 0x09, 0x1e, 0xe1, 0xe7, 0x0f, 0x10, 0x0a, 0x4a, + 0x4c, 0xe2, 0xe0, 0xcd, 0x00, 0x04, 0x1d, 0x20, 0x22, 0x30, 0x90, 0x46, + 0xe9, 0x33, 0xca, 0xae, 0xcb, 0x3d, 0x42, 0xf7, 0x35, 0xc3, 0xc0, 0x92, + 0xe9, 0x1f, 0x81, 0x53, 0x70, 0x7b, 0x75, 0x3b, 0x4f, 0xca, 0x3f, 0x2a, + 0x4a, 0x6c, 0x34, 0xd7, 0x21, 0xad, 0x03, 0x6b, 0xb9, 0x03, 0xc3, 0xba, + 0xf3, 0x4c, 0x9a, 0xbd, 0x1c, 0x8b, 0x69, 0xff, 0x00, 0x46, 0xf7, 0x33, + 0xfc, 0xd3, 0x0b, 0xbf, 0x75, 0xf6, 0x35, 0xec, 0x65, 0x50, 0xf7, 0x1f, + 0xcd, 0x93, 0xa3, 0x7b, 0xb8, 0xc9, 0x8f, 0xc1, 0x71, 0xbf, 0x58, 0x6a, + 0xf4, 0xba, 0xce, 0x5b, 0x7f, 0x79, 0xfb, 0xc7, 0xfd, 0x70, 0x07, 0xff, + 0x00, 0x14, 0x94, 0xe7, 0x24, 0x92, 0x49, 0x29, 0x49, 0x24, 0x92, 0x4a, + 0x52, 0xd5, 0xfa, 0xb0, 0xe0, 0xde, 0xb1, 0x4c, 0x98, 0x90, 0xf0, 0x3c, + 0xc9, 0x69, 0xd1, 0x65, 0x2d, 0x3f, 0xab, 0x96, 0x32, 0xbe, 0xb1, 0x8f, + 0xbc, 0x48, 0x71, 0x2c, 0xf8, 0x17, 0x02, 0x01, 0xfb, 0xd2, 0x53, 0xdd, + 0x3e, 0xa6, 0xba, 0x1c, 0x00, 0x24, 0xf0, 0x62, 0x7f, 0xda, 0xab, 0x64, + 0x02, 0xc7, 0x81, 0x1a, 0x2d, 0x22, 0xd0, 0xf6, 0xb5, 0xcc, 0x77, 0xb4, + 0x8e, 0xcb, 0x2f, 0x3e, 0x05, 0xba, 0x93, 0xf1, 0x12, 0x52, 0x53, 0x9b, + 0xd6, 0xed, 0x2c, 0xaa, 0x9d, 0xa4, 0x8d, 0xaf, 0xe5, 0xbc, 0x83, 0x04, + 0x22, 0x74, 0x2d, 0xa6, 0x8b, 0x4b, 0x89, 0x71, 0x2f, 0x1f, 0x4b, 0xe1, + 0xe4, 0xa8, 0xf5, 0xe7, 0x8f, 0x42, 0xbd, 0x80, 0x82, 0x6c, 0x6f, 0x3f, + 0x35, 0x77, 0xa2, 0xba, 0x31, 0x25, 0xc3, 0xf3, 0xf5, 0xf9, 0x24, 0xa6, + 0xf6, 0x61, 0x24, 0x6d, 0x04, 0x12, 0x07, 0x0b, 0x9a, 0xeb, 0xef, 0x70, + 0xaa, 0xb6, 0x1d, 0x24, 0xf1, 0xf0, 0x0b, 0xa5, 0xcb, 0x73, 0x36, 0x6e, + 0x6c, 0x89, 0x23, 0x50, 0xb9, 0xbf, 0xac, 0x85, 0xb1, 0x48, 0xfc, 0xed, + 0x49, 0x3d, 0xd2, 0x53, 0x84, 0x92, 0x49, 0x24, 0xa5, 0x24, 0x92, 0x49, + 0x29, 0x4b, 0x67, 0xea, 0xdb, 0x05, 0x99, 0x5b, 0x0f, 0x72, 0x3f, 0x21, + 0xf0, 0x58, 0xcb, 0x6f, 0xea, 0xb1, 0x3f, 0xb4, 0x18, 0x3f, 0x94, 0xdf, + 0x2e, 0xc5, 0x25, 0x3d, 0x7d, 0x18, 0xe3, 0x12, 0xfb, 0x6f, 0x0e, 0x2e, + 0x76, 0x4b, 0xd8, 0xf7, 0x01, 0xa6, 0xd2, 0xc1, 0xb1, 0xbf, 0x91, 0x6b, + 0x63, 0x64, 0x1b, 0xae, 0x06, 0xc7, 0x1f, 0x51, 0xb3, 0xee, 0x00, 0x6b, + 0x03, 0xb9, 0xee, 0xb1, 0xdb, 0x3e, 0xbe, 0x43, 0x89, 0x9d, 0xcf, 0x64, + 0x8f, 0x80, 0x8f, 0xe0, 0xac, 0xb2, 0xc0, 0xca, 0xad, 0x20, 0xc3, 0xb5, + 0xe7, 0x91, 0x22, 0x12, 0x53, 0xbd, 0x6b, 0x59, 0x58, 0xdc, 0xd6, 0x9d, + 0xce, 0xf6, 0x92, 0x07, 0xe2, 0x56, 0x76, 0x75, 0xce, 0x20, 0x52, 0xc9, + 0x69, 0x77, 0x26, 0x34, 0x00, 0x72, 0xae, 0x54, 0xe2, 0x71, 0x2a, 0x7b, + 0x89, 0x70, 0x7b, 0x5b, 0x2f, 0x1e, 0xf0, 0x34, 0xda, 0x75, 0xf8, 0xf7, + 0x54, 0x73, 0x5c, 0x1a, 0xdb, 0x7d, 0x30, 0x44, 0x16, 0xeb, 0xac, 0x34, + 0x36, 0x0f, 0xf0, 0x49, 0x4e, 0x1e, 0x5d, 0x77, 0x59, 0x7d, 0x80, 0xd6, + 0x20, 0x6c, 0x60, 0xdb, 0xaf, 0xaa, 0xd2, 0x3e, 0x93, 0x81, 0x98, 0xfe, + 0x0b, 0x1f, 0xa8, 0xe2, 0x65, 0x63, 0xcb, 0xdb, 0x5b, 0xdc, 0xc2, 0x62, + 0x00, 0xdd, 0xa7, 0xc5, 0x74, 0x7b, 0xcd, 0xb7, 0xff, 0x00, 0x36, 0x1e, + 0x1c, 0x01, 0xdc, 0x03, 0x80, 0x91, 0xaf, 0xd3, 0x1a, 0x29, 0xda, 0xcc, + 0x87, 0x30, 0xfa, 0x85, 0x9b, 0x08, 0xf6, 0xb4, 0x6a, 0x27, 0xe2, 0x92, + 0x9e, 0x16, 0xcc, 0x4b, 0x72, 0x35, 0x35, 0x90, 0x7e, 0xe2, 0x15, 0x4b, + 0x3a, 0x7e, 0x5b, 0x08, 0xfd, 0x19, 0x33, 0xa8, 0x5d, 0xcd, 0xb8, 0x60, + 0x80, 0xe2, 0xd6, 0x17, 0x1d, 0x1e, 0x44, 0x9f, 0xc8, 0xa0, 0x31, 0xeb, + 0x00, 0x83, 0x5d, 0x87, 0xdc, 0x5c, 0x1c, 0x1b, 0xc0, 0xf0, 0x97, 0x14, + 0x94, 0xf0, 0xae, 0xc5, 0xc9, 0x6c, 0x07, 0x54, 0xf1, 0x3c, 0x7b, 0x4e, + 0xaa, 0x3e, 0x8d, 0xb1, 0x3b, 0x1d, 0x13, 0x13, 0x07, 0x9f, 0x05, 0xda, + 0xd5, 0x4d, 0x96, 0x3d, 0xc6, 0xb9, 0xab, 0xd3, 0x30, 0x1a, 0x48, 0x0e, + 0xd7, 0xc2, 0x3b, 0x2b, 0xbf, 0xb2, 0xdb, 0xf6, 0x7d, 0xba, 0xef, 0xfa, + 0x73, 0xaf, 0x33, 0x3c, 0xfc, 0x52, 0x52, 0xc1, 0xc5, 0xd2, 0xd9, 0x93, + 0x1c, 0x47, 0x64, 0x9a, 0xe7, 0x02, 0x78, 0x10, 0x0c, 0x14, 0x32, 0xd7, + 0x96, 0x92, 0xd7, 0x1d, 0x07, 0x7d, 0x06, 0x88, 0x58, 0xed, 0xf5, 0x5b, + 0xea, 0xbd, 0xcf, 0xf8, 0x40, 0x03, 0xe4, 0x92, 0x9b, 0x02, 0xdd, 0xce, + 0x00, 0x4b, 0x9c, 0x3c, 0xbd, 0xbf, 0x18, 0xe1, 0x31, 0xb2, 0x96, 0xbc, + 0x87, 0xb8, 0x82, 0x5c, 0x1a, 0x0c, 0xfd, 0x27, 0x73, 0x09, 0xf7, 0x00, + 0x5a, 0x58, 0xd2, 0x5c, 0x4e, 0x85, 0xdc, 0x15, 0x17, 0x55, 0xfa, 0x6a, + 0xae, 0xb6, 0x1c, 0x58, 0x49, 0x12, 0xe3, 0x1f, 0x08, 0x49, 0x48, 0x46, + 0x2d, 0x06, 0xd7, 0x1a, 0xbf, 0x3c, 0x6e, 0xf7, 0xf0, 0xde, 0x67, 0xe5, + 0xdd, 0x4b, 0x17, 0x1a, 0xba, 0x1d, 0x61, 0xac, 0xc3, 0x6c, 0xf7, 0x16, + 0x0d, 0x19, 0x3e, 0x2e, 0x3a, 0x9d, 0x7c, 0x02, 0x27, 0xa8, 0xc7, 0xd8, + 0xe6, 0x12, 0x1b, 0x77, 0x2e, 0x04, 0xc1, 0xda, 0x7e, 0x8c, 0x08, 0x98, + 0x2a, 0x4e, 0xb5, 0x95, 0xd8, 0x5b, 0x70, 0x0d, 0xad, 0xad, 0x91, 0x6b, + 0xdc, 0xd0, 0x24, 0xf6, 0x6b, 0x38, 0x01, 0x25, 0x30, 0x7b, 0xdd, 0x45, + 0x6e, 0xb9, 0xb5, 0x1b, 0x6d, 0x76, 0xd0, 0x62, 0x1a, 0x20, 0x7e, 0xee, + 0xb3, 0xa2, 0x37, 0xa8, 0xf7, 0x56, 0x2c, 0x97, 0x03, 0xc9, 0x0c, 0x68, + 0xdd, 0xe3, 0x07, 0x71, 0x05, 0x55, 0xb7, 0xaa, 0x74, 0x9a, 0xe3, 0x7e, + 0x4d, 0x6e, 0x79, 0xe7, 0xdc, 0x6c, 0xfc, 0x2b, 0x0e, 0x51, 0xff, 0x00, + 0x9c, 0x58, 0x40, 0xc5, 0x35, 0x64, 0x5d, 0x3a, 0x34, 0x57, 0x58, 0x68, + 0x27, 0xe2, 0xf3, 0x29, 0x29, 0x26, 0x25, 0x76, 0x6b, 0x91, 0x68, 0xdd, + 0x7d, 0x84, 0x86, 0x7a, 0x90, 0x76, 0xb6, 0x79, 0xff, 0x00, 0x62, 0xe7, + 0xbe, 0xb8, 0x56, 0x47, 0x53, 0x65, 0xa4, 0x47, 0xab, 0x4b, 0x4f, 0xcd, + 0xa4, 0xb3, 0xf8, 0x2d, 0xb7, 0xf5, 0x1c, 0xab, 0xad, 0xaf, 0x67, 0x4b, + 0x03, 0x69, 0x0e, 0x63, 0xef, 0xb2, 0x48, 0x3f, 0xbd, 0x0d, 0x0a, 0x87, + 0xd7, 0x0a, 0xec, 0x76, 0x36, 0x0e, 0x4b, 0xda, 0x1a, 0xe2, 0x6c, 0x63, + 0xa3, 0xc4, 0xc3, 0xa3, 0xf2, 0xa4, 0xa7, 0x96, 0x49, 0x24, 0x92, 0x52, + 0x92, 0x49, 0x24, 0x94, 0xa5, 0x63, 0xa7, 0xd9, 0xe9, 0x67, 0x63, 0xd9, + 0x31, 0xb6, 0xc6, 0x12, 0x7c, 0xb7, 0x05, 0x5d, 0x49, 0x9a, 0x3d, 0xa7, + 0xcc, 0x24, 0xa7, 0xd4, 0x28, 0x73, 0x43, 0x0b, 0x74, 0xd7, 0x51, 0xf2, + 0xe5, 0x65, 0xe7, 0x12, 0x6c, 0xdb, 0xba, 0x5a, 0x0f, 0xb6, 0x3c, 0x56, + 0x86, 0x23, 0x65, 0xa1, 0xa3, 0xe8, 0xb6, 0x5b, 0x3e, 0x7c, 0xac, 0x5c, + 0xe7, 0x39, 0xb9, 0xae, 0xac, 0xbb, 0x46, 0x1e, 0xdd, 0xca, 0x4a, 0x73, + 0x7a, 0xed, 0x9f, 0xab, 0x57, 0x0d, 0xd1, 0xaf, 0x69, 0x92, 0xb6, 0x3a, + 0x4d, 0x75, 0xfd, 0x88, 0x5c, 0x34, 0x04, 0x9d, 0x3c, 0xa5, 0x62, 0x75, + 0xa2, 0xd3, 0x4d, 0x6c, 0x9d, 0xce, 0xf5, 0x06, 0xef, 0xc5, 0x6c, 0x60, + 0x1f, 0x4f, 0x06, 0xaa, 0xc4, 0xc8, 0x1f, 0x94, 0xa4, 0xa6, 0xed, 0xad, + 0x63, 0xaa, 0x3b, 0x88, 0x3a, 0x88, 0x10, 0xb9, 0x3f, 0xac, 0x44, 0x1b, + 0x2a, 0x02, 0x09, 0x82, 0x5c, 0x42, 0xeb, 0xde, 0xcd, 0xcc, 0x0d, 0x64, + 0x12, 0x47, 0xdc, 0xb8, 0xde, 0xbe, 0x23, 0x21, 0xad, 0xf0, 0x2e, 0xd7, + 0xc7, 0x84, 0x94, 0xe5, 0x24, 0x92, 0x49, 0x29, 0x49, 0x24, 0x92, 0x4a, + 0x52, 0xd9, 0xfa, 0xae, 0xed, 0xbd, 0x45, 0x86, 0x60, 0xef, 0x6c, 0x0e, + 0xe7, 0x95, 0x8c, 0xb5, 0xfe, 0xac, 0xc7, 0xed, 0x2a, 0xa7, 0x43, 0xbd, + 0x90, 0x7e, 0x26, 0x12, 0x53, 0xda, 0x96, 0xcd, 0xb7, 0xec, 0x70, 0xaf, + 0xdc, 0x36, 0xbc, 0x8d, 0xdb, 0x4c, 0xfe, 0xee, 0x8a, 0x6d, 0xae, 0xb7, + 0x38, 0x33, 0x91, 0x6b, 0xc3, 0x4c, 0xf1, 0x1a, 0xc9, 0xfc, 0x14, 0x18, + 0xd0, 0xec, 0xac, 0x96, 0x8d, 0x4b, 0x5c, 0xc9, 0xf9, 0x92, 0x47, 0xe4, + 0x44, 0x1f, 0xce, 0xb7, 0x49, 0xfa, 0x44, 0x47, 0x90, 0xff, 0x00, 0x6a, + 0x4a, 0x6d, 0xe2, 0xb9, 0xb8, 0xf6, 0xbe, 0xba, 0x01, 0xf4, 0x2b, 0x74, + 0x43, 0x4e, 0x92, 0xe1, 0x32, 0x01, 0x3e, 0x25, 0x57, 0xce, 0xea, 0xf4, + 0xe2, 0xbe, 0x9a, 0x5b, 0x5b, 0xc0, 0xbd, 0xc7, 0xd4, 0x70, 0x13, 0xb7, + 0x64, 0x13, 0x21, 0xa7, 0x59, 0x4e, 0xc9, 0x65, 0x96, 0x38, 0xb7, 0x92, + 0xd2, 0x5b, 0xac, 0x18, 0x1e, 0x4a, 0x86, 0x73, 0xed, 0xbb, 0x22, 0x8f, + 0x41, 0xa3, 0x70, 0x73, 0x81, 0x9d, 0x4e, 0xa3, 0x9d, 0x7e, 0x09, 0x29, + 0xb7, 0x8f, 0x7d, 0xd9, 0x15, 0x9b, 0x2d, 0x63, 0x85, 0x00, 0x9d, 0x1e, + 0x03, 0x74, 0x9d, 0x39, 0xfc, 0x54, 0xb6, 0x63, 0xb0, 0xed, 0xc7, 0xa9, + 0xa0, 0xc4, 0x9d, 0xa3, 0x73, 0x60, 0xf9, 0xe8, 0x04, 0xa8, 0xd5, 0x57, + 0x53, 0xb1, 0xa1, 0xad, 0x61, 0x81, 0x04, 0x7a, 0xa0, 0x01, 0x03, 0xb1, + 0xf1, 0x56, 0x5b, 0x81, 0x79, 0x0d, 0xdd, 0xb5, 0xa5, 0xda, 0xb9, 0x8d, + 0xf7, 0xf1, 0xf2, 0x10, 0x92, 0x90, 0x7d, 0xba, 0xbd, 0xa0, 0x8d, 0xc0, + 0x87, 0x7d, 0x17, 0x6d, 0x60, 0x70, 0xf1, 0x94, 0xcd, 0xc8, 0xa7, 0x21, + 0xe2, 0x80, 0xe6, 0x36, 0xe2, 0xe1, 0x15, 0x93, 0x3b, 0x87, 0xd2, 0xe5, + 0xb2, 0x38, 0x56, 0x5b, 0xd2, 0xb1, 0xab, 0xc9, 0x0e, 0xda, 0xf6, 0xd7, + 0x3e, 0xd6, 0xee, 0x96, 0x9f, 0xee, 0x57, 0x2c, 0xc4, 0xc6, 0x69, 0x6b, + 0x9f, 0x58, 0x04, 0x00, 0x6b, 0x31, 0x24, 0x6d, 0xf0, 0x23, 0x54, 0x94, + 0xe7, 0xfa, 0x4c, 0x36, 0x16, 0xb1, 0x9a, 0x30, 0x3a, 0x5c, 0xce, 0x40, + 0x1d, 0xa0, 0x2a, 0xfe, 0xae, 0x4f, 0xda, 0x3f, 0x99, 0xb3, 0xec, 0xfb, + 0x66, 0x3d, 0x3f, 0x6c, 0x4f, 0xd3, 0xdd, 0xcc, 0xc7, 0x68, 0x5a, 0x2e, + 0xab, 0x14, 0xb8, 0x7a, 0xc1, 0xce, 0x82, 0x43, 0x5c, 0x24, 0x6b, 0xcc, + 0x79, 0x14, 0x7d, 0xdf, 0xa0, 0x88, 0x3f, 0x47, 0xe8, 0xeb, 0x31, 0xc4, + 0xfd, 0xc9, 0x29, 0xe3, 0x0f, 0x59, 0xc4, 0x66, 0x43, 0x8b, 0xf2, 0x2a, + 0x34, 0xc0, 0x0d, 0x63, 0x25, 0xee, 0xdd, 0xe3, 0x2c, 0x09, 0x8f, 0xd6, + 0x0c, 0x06, 0x98, 0xaa, 0xab, 0xed, 0x3d, 0xb6, 0x30, 0x34, 0x69, 0xfd, + 0x62, 0xae, 0x62, 0xf4, 0xba, 0x45, 0x60, 0xb6, 0x86, 0x35, 0xc6, 0x0f, + 0xc8, 0x79, 0xa3, 0x8c, 0x5a, 0x8b, 0x5c, 0x0b, 0x40, 0x8d, 0x1d, 0x1e, + 0x72, 0xdf, 0xfb, 0xf2, 0x4a, 0x73, 0x7f, 0x69, 0x75, 0x1b, 0x4c, 0x63, + 0xf4, 0xc2, 0xd2, 0x0e, 0x86, 0xd7, 0xcf, 0x3e, 0x50, 0x8f, 0xe9, 0xfd, + 0x66, 0xb5, 0xb2, 0xd7, 0xd3, 0x8c, 0x01, 0xfc, 0xc6, 0x4c, 0x69, 0xc7, + 0xb9, 0x6b, 0xb1, 0xad, 0x69, 0x88, 0x97, 0x34, 0x34, 0x91, 0xe0, 0x60, + 0xf2, 0x55, 0xb6, 0x90, 0xd1, 0xa7, 0x73, 0xab, 0xbb, 0x03, 0xe4, 0x92, + 0x9e, 0x63, 0x2b, 0xa2, 0xe7, 0xbb, 0x1a, 0xec, 0x8b, 0xf3, 0xad, 0xb2, + 0xc0, 0xdd, 0xd0, 0x3f, 0x47, 0x20, 0x72, 0x3d, 0xa8, 0x95, 0xfd, 0x59, + 0xe9, 0xc2, 0xe9, 0x7b, 0x5d, 0x6b, 0x4f, 0xe7, 0x3c, 0x92, 0xb7, 0xad, + 0xac, 0xde, 0xcb, 0x1a, 0x07, 0xf3, 0x8d, 0x2d, 0x97, 0x78, 0x90, 0x46, + 0x8a, 0xae, 0x0d, 0x81, 0xf8, 0xf4, 0x9b, 0x07, 0xb8, 0xb1, 0xb3, 0xf1, + 0x6e, 0x85, 0x25, 0x23, 0xab, 0xa5, 0xf4, 0xfa, 0xcc, 0x55, 0x4b, 0x00, + 0xed, 0xa0, 0x9f, 0xc5, 0x10, 0x61, 0xd0, 0x1e, 0x1d, 0xb4, 0x0d, 0x8e, + 0x0e, 0x9f, 0xf3, 0x9b, 0xa7, 0xc8, 0xab, 0x5b, 0x37, 0x3f, 0x48, 0x22, + 0x34, 0x49, 0xcd, 0x70, 0x80, 0x79, 0x1f, 0xef, 0xd1, 0x25, 0x22, 0x65, + 0x4d, 0x75, 0x20, 0x01, 0x11, 0xdc, 0xe8, 0x56, 0x5f, 0xd7, 0x0a, 0x3d, + 0x5e, 0x85, 0xea, 0x19, 0xdd, 0x45, 0xcd, 0x77, 0xc8, 0xcb, 0x3f, 0xef, + 0xcb, 0x66, 0xb6, 0xfb, 0x4b, 0x5d, 0xc4, 0x9d, 0x7c, 0xbc, 0xca, 0xab, + 0xd7, 0x29, 0x39, 0x3d, 0x13, 0x31, 0xbd, 0x85, 0x25, 0xc0, 0x71, 0xad, + 0x7e, 0xef, 0xfb, 0xea, 0x4a, 0x7c, 0xc9, 0x24, 0x92, 0x49, 0x4a, 0x49, + 0x24, 0x92, 0x52, 0x92, 0x1a, 0x6a, 0x92, 0x49, 0x29, 0xf4, 0xec, 0x19, + 0x7e, 0x38, 0xb7, 0xf7, 0xda, 0xd7, 0xb6, 0x3c, 0xc4, 0xac, 0x7e, 0xa4, + 0xcf, 0xd3, 0x9b, 0x01, 0xfa, 0x46, 0x24, 0x78, 0xad, 0x8c, 0x16, 0x8f, + 0xb0, 0xd2, 0xea, 0xcc, 0x87, 0x54, 0xd2, 0xc0, 0xed, 0x23, 0xda, 0x16, + 0x6f, 0x53, 0x6b, 0x8b, 0x09, 0x70, 0x2d, 0xf0, 0x24, 0x68, 0x7e, 0x09, + 0x29, 0xe7, 0x7a, 0xb5, 0xa1, 0xae, 0xc6, 0x04, 0xc8, 0xde, 0x5c, 0x7c, + 0x20, 0x40, 0x5b, 0x78, 0x4f, 0x25, 0xbf, 0xa3, 0xd4, 0xb4, 0xfb, 0x5b, + 0xe2, 0x25, 0x73, 0xdd, 0x78, 0x8f, 0x5e, 0x96, 0xb7, 0x86, 0xd6, 0x3f, + 0x12, 0x56, 0xc7, 0x4a, 0xfa, 0x02, 0x0f, 0x60, 0x7e, 0x70, 0x92, 0x9d, + 0xdf, 0x51, 0xaf, 0x6b, 0x47, 0x0f, 0x33, 0xd8, 0xfe, 0x55, 0xc9, 0x7d, + 0x67, 0xaf, 0x65, 0xf5, 0x1f, 0x1d, 0xdf, 0x94, 0x2e, 0xa6, 0x97, 0xee, + 0x04, 0x1f, 0x6b, 0xbc, 0x0f, 0x07, 0xcc, 0x2e, 0x73, 0xeb, 0x63, 0x40, + 0x75, 0x1a, 0x6a, 0x0b, 0xa4, 0xfc, 0x61, 0x25, 0x3c, 0xea, 0x49, 0x24, + 0x92, 0x94, 0x92, 0x49, 0x24, 0xa5, 0x2d, 0x7f, 0xab, 0x0d, 0x0e, 0xea, + 0x75, 0x07, 0x09, 0x1b, 0xd8, 0x7e, 0xe7, 0x2c, 0x85, 0xb1, 0xf5, 0x5c, + 0x7f, 0x95, 0x6b, 0xfe, 0xb3, 0x3f, 0xea, 0xda, 0x92, 0x9e, 0xe2, 0x8a, + 0xff, 0x00, 0x5c, 0xcc, 0x2e, 0xfa, 0x4e, 0xf4, 0xdc, 0x47, 0x94, 0xbf, + 0x89, 0xf8, 0x29, 0xbd, 0xcd, 0xa7, 0xf4, 0x96, 0x93, 0xa0, 0x30, 0x63, + 0x5f, 0x71, 0xe1, 0x2a, 0x1a, 0xf7, 0x66, 0x65, 0x3a, 0x41, 0xdc, 0x58, + 0xdd, 0xbf, 0xd5, 0x2f, 0xfe, 0xf4, 0x4c, 0x8a, 0xdb, 0xb7, 0xc0, 0x69, + 0xa1, 0xd7, 0xcf, 0xf8, 0xa4, 0xa4, 0x42, 0xcf, 0x51, 0x8e, 0x7b, 0x78, + 0x03, 0xb7, 0x3e, 0xd2, 0x52, 0xa9, 0xbb, 0x6c, 0xad, 0xe1, 0xa7, 0x57, + 0x1d, 0xe7, 0xc3, 0xdb, 0xca, 0x58, 0xd5, 0xfa, 0x74, 0xb8, 0x33, 0x40, + 0x77, 0x11, 0xe6, 0xe2, 0xe4, 0x76, 0x6d, 0x67, 0xa2, 0xe3, 0xac, 0xba, + 0x20, 0xf9, 0x84, 0x94, 0xdb, 0x63, 0x6c, 0x0e, 0x69, 0x2d, 0xdd, 0x2e, + 0xdb, 0xb9, 0xba, 0x7a, 0x6d, 0x20, 0xfb, 0x93, 0xbb, 0xf6, 0x90, 0x24, + 0xe3, 0xb5, 0x8e, 0x61, 0x03, 0x63, 0x5c, 0xe2, 0x1d, 0xcf, 0x8e, 0xa1, + 0x33, 0x58, 0xd3, 0x61, 0xd8, 0xc1, 0xac, 0x17, 0x1e, 0x38, 0xd1, 0x1e, + 0xdb, 0x1d, 0xb3, 0x63, 0x44, 0xbb, 0x89, 0x98, 0x81, 0xde, 0x21, 0x25, + 0x20, 0x6b, 0xfa, 0x84, 0xb4, 0xbb, 0x17, 0x50, 0x44, 0x93, 0x60, 0x82, + 0x3b, 0x95, 0x6c, 0x56, 0x1a, 0xe1, 0x61, 0x61, 0xd2, 0x76, 0x07, 0x1d, + 0xdc, 0xf8, 0x0e, 0xcb, 0x0e, 0xcb, 0xba, 0x9e, 0x33, 0xac, 0x38, 0xf9, + 0x04, 0xd6, 0xd7, 0xc0, 0xaa, 0xe1, 0xbd, 0xb0, 0x20, 0xed, 0x0e, 0xfa, + 0x41, 0x1f, 0xf6, 0xa7, 0x58, 0x70, 0x6f, 0xa7, 0x81, 0x5b, 0x7c, 0x4b, + 0xae, 0x2e, 0x1e, 0x71, 0x15, 0x84, 0x94, 0xea, 0xb7, 0x67, 0xd0, 0x02, + 0x20, 0xfe, 0x90, 0x9f, 0x03, 0xa8, 0x09, 0xbe, 0xce, 0x37, 0xce, 0xbb, + 0x22, 0x76, 0x49, 0x8f, 0x09, 0xe5, 0x65, 0xb5, 0xfd, 0x5d, 0xf7, 0x36, + 0xeb, 0x8d, 0x6d, 0x60, 0x8d, 0xd4, 0x31, 0xa6, 0x08, 0x1f, 0xca, 0x26, + 0x56, 0xbf, 0xad, 0x57, 0xa7, 0xba, 0x74, 0x8e, 0x35, 0x9f, 0x84, 0x78, + 0xa4, 0xa7, 0x9c, 0xc3, 0xb0, 0xdb, 0x81, 0x8d, 0x74, 0xea, 0xfa, 0xdb, + 0xbb, 0xfa, 0xd1, 0x07, 0xf1, 0x4e, 0xed, 0xa1, 0xc2, 0x41, 0x87, 0x0d, + 0xb3, 0xf1, 0x11, 0xf7, 0xa1, 0xe2, 0x11, 0x56, 0x3b, 0xea, 0x1f, 0xe0, + 0x6d, 0xb1, 0x9f, 0x01, 0xbc, 0x91, 0xf8, 0x15, 0x2b, 0xa9, 0x05, 0x9b, + 0x4f, 0xd0, 0x26, 0x04, 0x76, 0x9d, 0x3f, 0x8a, 0x4a, 0x5b, 0x11, 0xb6, + 0xb5, 0xd6, 0x32, 0xc9, 0x25, 0xa1, 0xa0, 0x4f, 0x80, 0xf6, 0xc9, 0x5a, + 0x15, 0xb3, 0x7e, 0xd2, 0x4e, 0xe8, 0x1a, 0x7e, 0xe8, 0x3e, 0x28, 0x00, + 0xc8, 0xe3, 0x48, 0x90, 0x3b, 0xf8, 0xa3, 0xd4, 0x5c, 0x00, 0x04, 0x07, + 0x41, 0xd0, 0x37, 0x48, 0xf8, 0xa4, 0xa5, 0x48, 0x76, 0xa3, 0xde, 0xe6, + 0x9e, 0x78, 0x68, 0x54, 0xb1, 0x1a, 0xd6, 0x32, 0xc6, 0x7f, 0xa3, 0xb2, + 0xc6, 0xcf, 0x3a, 0x17, 0x6e, 0x1f, 0x81, 0x57, 0x9d, 0x02, 0xd7, 0x54, + 0x4e, 0xe3, 0x1b, 0x98, 0xd0, 0x20, 0x41, 0xd7, 0x95, 0x4d, 0x90, 0xdc, + 0x8c, 0x90, 0x44, 0x6f, 0xd9, 0x60, 0x1f, 0xd6, 0x6e, 0xd7, 0x7f, 0xd4, + 0xa4, 0xa6, 0xcc, 0x0f, 0x6b, 0x87, 0x71, 0x3a, 0x70, 0x9c, 0xb6, 0x49, + 0x27, 0x53, 0xe1, 0xe5, 0xaf, 0xf7, 0xa6, 0x6b, 0x80, 0xad, 0xae, 0x1c, + 0x47, 0xfb, 0x52, 0xf5, 0x36, 0xb6, 0x5d, 0xac, 0x4e, 0xa9, 0x29, 0x76, + 0x02, 0x1e, 0xe6, 0x7c, 0xfe, 0x00, 0x84, 0x4a, 0xe9, 0x37, 0x63, 0x59, + 0x41, 0x87, 0x36, 0xc0, 0xe6, 0x3c, 0x7c, 0x74, 0xfc, 0x85, 0x0b, 0x77, + 0xbc, 0xfe, 0xf0, 0xfe, 0xff, 0x00, 0x04, 0x5a, 0x81, 0xdc, 0x5d, 0xc0, + 0x06, 0x4f, 0xcf, 0x44, 0x94, 0xf9, 0x13, 0xd8, 0x58, 0xf7, 0x31, 0xda, + 0x16, 0x92, 0x08, 0x3e, 0x21, 0x45, 0x5f, 0xeb, 0xb4, 0x1c, 0x7e, 0xb3, + 0x9b, 0x54, 0x44, 0x5c, 0xe2, 0x07, 0x93, 0x8e, 0xe1, 0xf8, 0x15, 0x41, + 0x25, 0x29, 0x24, 0x92, 0x49, 0x4a, 0x49, 0x24, 0xe0, 0x49, 0x03, 0xc5, + 0x25, 0x3e, 0x93, 0x45, 0xa3, 0x1f, 0x0b, 0x16, 0x8b, 0x35, 0x6f, 0xa4, + 0xc6, 0x97, 0x46, 0x80, 0x40, 0x12, 0xaa, 0x3b, 0xd1, 0x2d, 0x7b, 0x6c, + 0x77, 0xb6, 0x0f, 0xa5, 0xb8, 0xea, 0x34, 0xf3, 0xf3, 0x57, 0x2d, 0x69, + 0xa2, 0xca, 0xd8, 0xc6, 0x8b, 0x25, 0x9b, 0x80, 0xee, 0x0b, 0x7d, 0xba, + 0x7f, 0x72, 0xa3, 0x97, 0x5b, 0x6c, 0xb0, 0x1b, 0xdb, 0xee, 0x63, 0x86, + 0x9c, 0x6a, 0x00, 0xfc, 0x12, 0x53, 0xca, 0xf5, 0xd6, 0xed, 0xc9, 0xae, + 0x0c, 0xfb, 0x23, 0xee, 0x25, 0x6e, 0xf4, 0xfc, 0x67, 0x59, 0x8f, 0x4d, + 0xf4, 0x10, 0x0e, 0xd6, 0xc8, 0x98, 0xed, 0xac, 0x2c, 0x3e, 0xbe, 0x5d, + 0xf6, 0xb6, 0x83, 0xc0, 0x6e, 0x9f, 0x79, 0x2b, 0xa2, 0xfa, 0xbc, 0xc0, + 0xde, 0x9a, 0xd6, 0xbf, 0x9d, 0x23, 0xe1, 0x09, 0x29, 0xbf, 0x8c, 0xe3, + 0x71, 0xf7, 0x1d, 0xb6, 0x33, 0xe9, 0x0e, 0xcb, 0x9d, 0xfa, 0xd6, 0xf0, + 0xed, 0x80, 0x0e, 0x1f, 0xcf, 0xc9, 0x74, 0x4d, 0xc6, 0x78, 0xb7, 0x75, + 0x66, 0x7f, 0x7b, 0x77, 0x11, 0xe6, 0xb9, 0xcf, 0xac, 0x0f, 0xf5, 0xe9, + 0xb2, 0xe0, 0x3d, 0xa2, 0xc6, 0x86, 0xfc, 0x00, 0x84, 0x94, 0xf3, 0xa9, + 0x24, 0x92, 0x4a, 0x52, 0x49, 0x24, 0x92, 0x94, 0xb5, 0xfe, 0xad, 0x7f, + 0xca, 0x4d, 0x3e, 0x1b, 0x4f, 0xfd, 0x36, 0xac, 0x85, 0xb1, 0xf5, 0x60, + 0x4f, 0x50, 0x70, 0xfe, 0x40, 0x8f, 0xf3, 0xd8, 0x92, 0x9e, 0xfb, 0x15, + 0x83, 0xed, 0x79, 0x04, 0x0d, 0xce, 0x21, 0x8e, 0x77, 0x91, 0x97, 0xab, + 0x36, 0x52, 0x1c, 0xd3, 0xfb, 0xd1, 0xa0, 0x3d, 0xcf, 0xfa, 0x85, 0x0c, + 0x36, 0x83, 0x91, 0x94, 0x7b, 0x0a, 0xda, 0x7e, 0x30, 0xf7, 0xea, 0xac, + 0x59, 0x58, 0x73, 0x41, 0x00, 0x9d, 0x74, 0x3a, 0xc0, 0x3f, 0xed, 0x49, + 0x4d, 0x36, 0xd7, 0xb2, 0x86, 0x13, 0x32, 0x0c, 0x13, 0xda, 0x1f, 0xfd, + 0xc8, 0xee, 0x6e, 0xd6, 0xb3, 0xfa, 0xff, 0x00, 0xf7, 0xd2, 0x88, 0xda, + 0x62, 0x43, 0x8c, 0x31, 0xad, 0x80, 0x39, 0x6e, 0xaa, 0xb6, 0x7b, 0x89, + 0xa1, 0xbb, 0x77, 0x35, 0xc2, 0xd1, 0xc7, 0xf5, 0x4a, 0x4a, 0x74, 0x19, + 0x3a, 0xcc, 0x84, 0x17, 0x3a, 0x48, 0x70, 0x23, 0x4e, 0x07, 0x74, 0x1c, + 0x7d, 0xee, 0x64, 0x5f, 0x73, 0xbe, 0x50, 0x3f, 0x82, 0x93, 0x9a, 0x09, + 0xda, 0xd0, 0x3d, 0xbf, 0x13, 0xa7, 0xcd, 0x25, 0x32, 0x65, 0x03, 0x23, + 0x7d, 0x4e, 0x1a, 0x1f, 0x76, 0xee, 0xe9, 0x63, 0xe3, 0xe4, 0xd6, 0x43, + 0x74, 0x7d, 0x7c, 0x35, 0xd2, 0x3f, 0x8a, 0x4c, 0x25, 0xa4, 0x17, 0x1d, + 0x1a, 0x09, 0x00, 0x4b, 0x5a, 0x64, 0x7e, 0x77, 0x8f, 0x0a, 0xdb, 0xd8, + 0xd7, 0x9d, 0x44, 0x37, 0x42, 0x0f, 0x60, 0x92, 0x91, 0x3e, 0xa7, 0xb0, + 0xfe, 0x5e, 0xe1, 0x37, 0xa1, 0x6f, 0xd3, 0x83, 0xb5, 0x5b, 0x60, 0x9a, + 0xc7, 0x79, 0xed, 0xe2, 0x9f, 0x6b, 0xa7, 0x91, 0x3f, 0xb9, 0xa4, 0x47, + 0x82, 0x4a, 0x79, 0xc0, 0x03, 0x73, 0x32, 0xab, 0x1f, 0x9d, 0xb2, 0xd9, + 0x3c, 0x0d, 0xcd, 0x0d, 0x27, 0xfe, 0x8a, 0x2d, 0xbf, 0xcd, 0x10, 0xde, + 0x62, 0x40, 0x3f, 0x97, 0xef, 0x4f, 0x65, 0x1b, 0xf3, 0x58, 0xe0, 0x75, + 0xb2, 0x82, 0x07, 0x86, 0xe6, 0x3b, 0x4f, 0xfa, 0xb5, 0x3f, 0xb2, 0x3b, + 0x69, 0xf5, 0x1d, 0x02, 0x21, 0xc5, 0xde, 0xdd, 0xdf, 0x7a, 0x4a, 0x60, + 0xd2, 0x22, 0x3c, 0xcf, 0xc6, 0x25, 0x1b, 0x14, 0x33, 0x73, 0xd8, 0x34, + 0x26, 0x0e, 0xd9, 0xd7, 0x45, 0x06, 0x53, 0x4d, 0x70, 0x5d, 0x64, 0xbb, + 0xf9, 0x32, 0x7e, 0xe4, 0x4a, 0xfd, 0x06, 0x3b, 0x75, 0x60, 0xee, 0x1d, + 0xdd, 0x00, 0x9f, 0xca, 0x92, 0x97, 0xbb, 0x66, 0xc6, 0x99, 0x82, 0x34, + 0x81, 0xdc, 0x8d, 0x35, 0x55, 0x1f, 0x59, 0xfb, 0x4b, 0x5d, 0x11, 0xea, + 0x56, 0xe6, 0xc7, 0x9b, 0x1c, 0x1c, 0x3f, 0x2a, 0x3b, 0x6c, 0xf4, 0x81, + 0xaa, 0xba, 0xc0, 0x69, 0x97, 0x17, 0x1f, 0x71, 0x24, 0xea, 0x75, 0x72, + 0x8d, 0x39, 0x16, 0x5a, 0xc6, 0xd8, 0xf6, 0xba, 0xb7, 0x99, 0xf6, 0x3a, + 0x01, 0x1d, 0xbb, 0x24, 0xa4, 0x8d, 0xc7, 0x76, 0xd2, 0x26, 0x1a, 0x74, + 0xd7, 0x48, 0x44, 0x34, 0xd2, 0x19, 0x06, 0xc0, 0x74, 0xed, 0xaf, 0xe4, + 0x54, 0xdc, 0xec, 0x87, 0x5c, 0x18, 0x1a, 0x0d, 0x5b, 0x4e, 0xe2, 0x75, + 0x20, 0xf6, 0x0a, 0xc5, 0x6c, 0x78, 0x11, 0x32, 0x3c, 0xf4, 0x09, 0x29, + 0x86, 0x26, 0x38, 0xc7, 0xad, 0xc2, 0xd7, 0xba, 0xf7, 0x13, 0x3b, 0x8e, + 0x83, 0xf1, 0xd5, 0x1c, 0x64, 0x55, 0x2d, 0xad, 0xa4, 0x07, 0xd8, 0x0e, + 0xd6, 0xf2, 0x61, 0xbc, 0xc7, 0xc1, 0x3b, 0x2b, 0x6b, 0xa4, 0x1d, 0x4f, + 0x22, 0x06, 0xb3, 0xfd, 0xea, 0x55, 0x56, 0x06, 0xd9, 0xe7, 0x96, 0xc0, + 0x8f, 0xb9, 0x25, 0x3e, 0x75, 0xf5, 0xca, 0xa7, 0x33, 0xab, 0xfa, 0xae, + 0x10, 0xeb, 0xea, 0x63, 0x9d, 0x1f, 0xbc, 0xd9, 0xac, 0xff, 0x00, 0xd4, + 0xac, 0x15, 0xd9, 0x7f, 0x8c, 0x2a, 0x08, 0xb7, 0x16, 0xfe, 0xc7, 0x7b, + 0x7c, 0xb5, 0x0d, 0x70, 0xfe, 0x2b, 0x8d, 0x49, 0x4a, 0x49, 0x24, 0x92, + 0x52, 0x94, 0xe9, 0x6e, 0xfb, 0xab, 0x67, 0xef, 0x38, 0x0f, 0xbc, 0xa8, + 0x2b, 0x18, 0x0d, 0xdd, 0x9d, 0x8e, 0x22, 0x7f, 0x48, 0xc9, 0xff, 0x00, + 0x38, 0x24, 0xa7, 0xd2, 0x72, 0x71, 0x3d, 0x66, 0xc5, 0x6e, 0x87, 0xd4, + 0x49, 0x69, 0xf1, 0x91, 0xc2, 0xc4, 0xba, 0xeb, 0x99, 0xbe, 0xec, 0x80, + 0x43, 0xc3, 0x89, 0x87, 0x68, 0x61, 0xa0, 0x34, 0x1f, 0xc1, 0x6e, 0xd7, + 0x7b, 0x06, 0x27, 0xda, 0x1d, 0x20, 0x90, 0x34, 0xfc, 0x8b, 0x95, 0xea, + 0x99, 0x8e, 0xc9, 0xb4, 0xb0, 0x70, 0x49, 0x00, 0xf2, 0x92, 0x9c, 0xee, + 0xb2, 0xf6, 0xe4, 0x52, 0xdb, 0xc3, 0x43, 0x5c, 0xc7, 0x41, 0x23, 0xbe, + 0xe1, 0xff, 0x00, 0x98, 0xae, 0x83, 0xa4, 0xd7, 0x63, 0x71, 0xe9, 0xe7, + 0x69, 0x63, 0x48, 0x3f, 0x20, 0xb9, 0xee, 0xb0, 0x05, 0x18, 0xd8, 0xf4, + 0x0d, 0x37, 0xcd, 0x87, 0xe5, 0xa0, 0xfc, 0xa5, 0x6c, 0x63, 0xf5, 0x2a, + 0xf1, 0xfa, 0x4e, 0x39, 0x26, 0x6d, 0xd8, 0xdd, 0xac, 0x07, 0x5d, 0x34, + 0x93, 0xf7, 0x24, 0xa7, 0x4b, 0x3b, 0x2c, 0x51, 0x8e, 0x6a, 0x04, 0x17, + 0xdb, 0x23, 0x4f, 0x05, 0xcf, 0x75, 0x61, 0x1d, 0x34, 0xcc, 0x6a, 0xf6, + 0xc7, 0xe5, 0x52, 0x65, 0xd6, 0x65, 0x38, 0xd8, 0xe7, 0x82, 0x5c, 0x62, + 0x3c, 0xbb, 0xe8, 0x14, 0x7a, 0xf3, 0x76, 0x60, 0xd4, 0xdd, 0x67, 0x7c, + 0xeb, 0xfb, 0xb1, 0xa2, 0x4a, 0x79, 0xf4, 0x92, 0x49, 0x25, 0x29, 0x24, + 0x92, 0x49, 0x4a, 0x5b, 0x1f, 0x55, 0x84, 0xf5, 0x38, 0xf1, 0x61, 0xff, + 0x00, 0xaa, 0x6a, 0xc7, 0x5b, 0x5f, 0x54, 0xff, 0x00, 0xe5, 0x76, 0xff, + 0x00, 0x51, 0xdf, 0x94, 0x24, 0xa7, 0xd1, 0xb0, 0xc1, 0x39, 0xb9, 0x6c, + 0x11, 0xfc, 0xd0, 0x88, 0xfe, 0xb9, 0x47, 0xad, 0xfa, 0x6c, 0x77, 0x63, + 0x10, 0xab, 0x61, 0x12, 0xde, 0xa9, 0x90, 0x27, 0xda, 0x68, 0x07, 0xe7, + 0xea, 0x1f, 0x04, 0x6a, 0xa2, 0xc7, 0xc9, 0x1b, 0xa1, 0xc6, 0x7b, 0x1f, + 0x04, 0x94, 0xc8, 0x65, 0x55, 0x6e, 0xf6, 0xb2, 0x7d, 0x84, 0x49, 0x8e, + 0x41, 0xd2, 0x42, 0xab, 0x99, 0xb8, 0xd6, 0xc3, 0xc1, 0xf5, 0x40, 0x81, + 0xf0, 0x72, 0xb4, 0xcc, 0x7a, 0x71, 0xab, 0x71, 0x6b, 0x84, 0x76, 0xf2, + 0x93, 0x3a, 0xa0, 0xe6, 0x31, 0xc7, 0x1d, 0x91, 0xf4, 0xbd, 0x40, 0x74, + 0xf8, 0x1f, 0x14, 0x94, 0xb5, 0x52, 0xe0, 0x7b, 0x7f, 0x72, 0x35, 0x64, + 0x49, 0xdc, 0xd0, 0x60, 0x68, 0xa2, 0xca, 0xde, 0xd6, 0x49, 0x11, 0xe3, + 0xf1, 0x44, 0xac, 0x49, 0xd0, 0xcc, 0xf1, 0x3c, 0x24, 0xa4, 0x6c, 0xdc, + 0xe7, 0xb5, 0x9e, 0x67, 0xee, 0x8e, 0x55, 0xd8, 0x2f, 0x66, 0xe3, 0xc8, + 0x11, 0xfe, 0xa1, 0x57, 0xae, 0x91, 0xea, 0x16, 0x82, 0x49, 0x8d, 0x15, + 0x98, 0x63, 0x47, 0xa9, 0xb4, 0xbb, 0x64, 0xc1, 0x03, 0xdd, 0xf2, 0x49, + 0x4c, 0x31, 0x09, 0x63, 0xce, 0x3b, 0xdc, 0xd7, 0x38, 0x02, 0xe6, 0x99, + 0x87, 0x6d, 0x26, 0x38, 0xf8, 0xa3, 0x43, 0x77, 0x73, 0xe7, 0x1f, 0xc1, + 0x61, 0xdd, 0xd5, 0x59, 0xfb, 0x42, 0xc7, 0x06, 0x16, 0xba, 0x90, 0x2b, + 0x06, 0x06, 0xef, 0xde, 0x9f, 0x9a, 0x2f, 0xed, 0x3b, 0xbd, 0x29, 0xf7, + 0x47, 0x3f, 0x43, 0x5f, 0xf3, 0x52, 0x52, 0x0a, 0xf2, 0xec, 0xba, 0xa1, + 0x61, 0xdc, 0xc1, 0xac, 0x36, 0x36, 0x9f, 0xb9, 0x07, 0x28, 0xde, 0xf3, + 0x5e, 0xd8, 0xdb, 0xbb, 0xf4, 0x85, 0xc7, 0x5d, 0xb1, 0xd9, 0x1c, 0x82, + 0x49, 0x27, 0x50, 0x38, 0x82, 0x7f, 0xb9, 0x38, 0x00, 0x88, 0x0e, 0x13, + 0xcc, 0x01, 0xfd, 0xe9, 0x29, 0x4d, 0xad, 0xc4, 0x02, 0x00, 0x81, 0xdf, + 0x95, 0x20, 0xcd, 0x63, 0xc7, 0xc0, 0x29, 0x4e, 0xd6, 0x88, 0x31, 0x3c, + 0xf6, 0xfe, 0x09, 0xab, 0xa6, 0x2c, 0x7d, 0xa6, 0xc2, 0xe2, 0xf0, 0x06, + 0xd2, 0x7d, 0xad, 0x8e, 0xed, 0x1e, 0x25, 0x25, 0x32, 0x15, 0xc8, 0x2d, + 0xf1, 0x12, 0x24, 0xa9, 0x06, 0x08, 0x81, 0x10, 0x3c, 0x12, 0x8d, 0xba, + 0xc1, 0x83, 0xc2, 0x85, 0x37, 0xb2, 0xe6, 0x6f, 0xfc, 0xcd, 0x5b, 0x2e, + 0xd0, 0xc8, 0x31, 0xc2, 0x4a, 0x67, 0xb6, 0x48, 0xfe, 0xf4, 0x43, 0x58, + 0x3b, 0x87, 0x72, 0x20, 0xc4, 0xf7, 0xef, 0x28, 0x2f, 0xb0, 0x32, 0xb7, + 0x9a, 0x9c, 0xc7, 0x59, 0x07, 0x68, 0x26, 0x04, 0x8f, 0x13, 0x29, 0x9d, + 0x90, 0xda, 0x58, 0x1f, 0x7b, 0x9b, 0x5b, 0x60, 0x6e, 0x7b, 0xec, 0x6b, + 0x1b, 0x3d, 0xe2, 0x52, 0x52, 0x5a, 0xab, 0x6d, 0x75, 0x36, 0xbd, 0xee, + 0x3b, 0x40, 0x1b, 0x9c, 0x44, 0x98, 0xf1, 0x4f, 0x6d, 0x86, 0xb6, 0x3a, + 0xc1, 0x59, 0xb0, 0xb4, 0x4c, 0x37, 0x93, 0x1e, 0x13, 0xdd, 0x64, 0x5d, + 0xf5, 0x97, 0xa7, 0xd5, 0x21, 0x87, 0xd7, 0x27, 0xfd, 0x0c, 0xbf, 0xf1, + 0x88, 0xfc, 0x54, 0x1b, 0xd6, 0x6f, 0xca, 0x1b, 0xb1, 0xba, 0x71, 0x20, + 0x47, 0xbe, 0xd7, 0x06, 0x81, 0xf2, 0x00, 0x94, 0x94, 0x83, 0xeb, 0xc5, + 0x22, 0xfe, 0x99, 0xeb, 0xc0, 0x9a, 0xb6, 0x3f, 0x4e, 0xda, 0x96, 0x1e, + 0x3f, 0xac, 0xbc, 0xf9, 0x7a, 0x4f, 0x54, 0x66, 0x5e, 0x4f, 0x48, 0xcb, + 0x66, 0x53, 0x58, 0xd7, 0x7a, 0x0e, 0x75, 0x4c, 0xac, 0x10, 0xcf, 0x68, + 0xdf, 0xde, 0x75, 0xf6, 0xaf, 0x36, 0x49, 0x4a, 0x49, 0x24, 0x92, 0x52, + 0x95, 0xee, 0x8d, 0xb5, 0xb9, 0xec, 0xb9, 0xff, 0x00, 0x42, 0x99, 0x79, + 0xfc, 0x83, 0xf1, 0x2a, 0x8c, 0x2b, 0xdd, 0x27, 0x33, 0xec, 0x99, 0x5b, + 0x8b, 0x1b, 0x63, 0x6c, 0x1b, 0x08, 0x79, 0x81, 0xc8, 0x20, 0xca, 0x4a, + 0x76, 0xf2, 0x3a, 0x8f, 0x54, 0xcd, 0x70, 0xa3, 0x04, 0x1f, 0x41, 0xba, + 0x12, 0x34, 0xfc, 0x42, 0xb1, 0x89, 0xd2, 0x5e, 0xdf, 0x75, 0xc4, 0x1b, + 0x5d, 0xd8, 0x19, 0x03, 0xef, 0x57, 0x31, 0x2c, 0xb4, 0xb6, 0x46, 0x37, + 0xa2, 0xf2, 0x63, 0xda, 0x5a, 0x5a, 0xe0, 0x7c, 0x1c, 0xd9, 0x8f, 0x9a, + 0x28, 0x7e, 0x61, 0x7e, 0xe6, 0xe2, 0xc8, 0xe2, 0x43, 0xc1, 0x8f, 0x92, + 0x4a, 0x79, 0x5f, 0xad, 0x16, 0x07, 0x75, 0x47, 0x54, 0xd2, 0x0b, 0x68, + 0x63, 0x58, 0x23, 0xfc, 0xef, 0xe2, 0xb5, 0x3a, 0x00, 0x17, 0xf4, 0xe6, + 0xd2, 0xf6, 0xee, 0x73, 0x4f, 0xb7, 0x4f, 0xcd, 0x27, 0xf8, 0x2c, 0x4e, + 0xbb, 0x51, 0xaf, 0xa9, 0xdc, 0x0f, 0x2e, 0x21, 0xc6, 0x79, 0x04, 0xf6, + 0x5a, 0xfd, 0x1a, 0xda, 0x31, 0xb1, 0x19, 0x63, 0x9e, 0x4b, 0xec, 0x10, + 0xda, 0xeb, 0x05, 0xcf, 0x24, 0x7b, 0x49, 0x80, 0x0c, 0x24, 0xa6, 0xf5, + 0x75, 0xe2, 0xe2, 0x17, 0x58, 0xf8, 0x0e, 0x1a, 0x4f, 0x7f, 0x80, 0x58, + 0xdd, 0x63, 0x21, 0x99, 0x4c, 0x7b, 0xa0, 0x82, 0xd1, 0x2c, 0x69, 0xec, + 0x01, 0x0b, 0x62, 0xbc, 0x1a, 0xac, 0xf7, 0xd9, 0x4d, 0xae, 0x71, 0xd7, + 0xde, 0xc7, 0x4c, 0x7c, 0x21, 0x0f, 0xaa, 0xe2, 0x56, 0xde, 0x97, 0x7d, + 0xb5, 0xb0, 0xb3, 0x63, 0x20, 0x82, 0xd2, 0xd3, 0xc8, 0x8d, 0x0f, 0xc5, + 0x25, 0x3c, 0x72, 0x96, 0xd8, 0x12, 0x78, 0xec, 0x99, 0x15, 0xb4, 0x12, + 0x01, 0x71, 0x80, 0x78, 0xee, 0x92, 0x90, 0xa7, 0x11, 0xdc, 0xa2, 0x1a, + 0x9a, 0x38, 0x32, 0x98, 0xd6, 0x00, 0x99, 0x13, 0xf1, 0x49, 0x4c, 0x34, + 0xf1, 0x5b, 0x3f, 0x54, 0xbf, 0xe5, 0xaa, 0x80, 0xee, 0xd7, 0xfe, 0x45, + 0x8f, 0xb4, 0xad, 0x6f, 0xab, 0x1e, 0xa3, 0x7a, 0xc5, 0x46, 0xb6, 0x6f, + 0x7c, 0x3a, 0x1a, 0x74, 0x1a, 0x88, 0x3f, 0x70, 0x49, 0x4f, 0xa3, 0x50, + 0xd3, 0xfb, 0x5d, 0xec, 0x03, 0x57, 0x63, 0x9d, 0x7f, 0xeb, 0x8a, 0x76, + 0x8b, 0x28, 0x8b, 0x1a, 0x67, 0x79, 0x21, 0xe3, 0xf7, 0x75, 0xfa, 0x4a, + 0x38, 0xaf, 0x1f, 0xb6, 0xdc, 0x01, 0x93, 0xf6, 0x77, 0x69, 0xf0, 0xb1, + 0xab, 0x42, 0xfa, 0xc3, 0xab, 0xf7, 0x47, 0x74, 0x94, 0xd3, 0x73, 0xc5, + 0x84, 0xc1, 0xf6, 0x9f, 0xa2, 0x7b, 0x78, 0x20, 0xe4, 0x92, 0xe7, 0xd3, + 0x4b, 0x75, 0x87, 0xf3, 0x3e, 0x0d, 0x76, 0x89, 0xdc, 0xc2, 0x5f, 0xb2, + 0xb3, 0x00, 0x44, 0xf7, 0xd0, 0x1d, 0x53, 0x5a, 0x43, 0x33, 0x2a, 0x60, + 0xd4, 0x97, 0xc9, 0xed, 0xf9, 0xa5, 0x25, 0x36, 0x00, 0x79, 0x66, 0xd7, + 0x19, 0x8e, 0x27, 0xfd, 0x8a, 0x9e, 0x56, 0x2b, 0xf7, 0x35, 0xef, 0xcb, + 0xb6, 0xb6, 0x6e, 0xd4, 0x56, 0x43, 0x67, 0xcb, 0x41, 0x2b, 0x46, 0x00, + 0x3a, 0xe9, 0x3c, 0x2c, 0xfe, 0xb4, 0x4b, 0x70, 0x5c, 0xe0, 0x35, 0x6b, + 0x98, 0x40, 0x1f, 0xd6, 0x84, 0x94, 0xdf, 0x69, 0x6d, 0x75, 0x83, 0x04, + 0x98, 0x10, 0x7e, 0x97, 0xce, 0x4a, 0xab, 0x9f, 0x93, 0x7d, 0x8c, 0x2d, + 0x69, 0xfb, 0x3b, 0x5a, 0x04, 0x49, 0x1b, 0x89, 0x9e, 0xf0, 0x56, 0x5e, + 0x35, 0xf6, 0xdf, 0x5d, 0x77, 0xb2, 0xeb, 0x18, 0x1b, 0x21, 0xac, 0x71, + 0x81, 0x13, 0xdd, 0xbd, 0xd6, 0x8d, 0x83, 0xd7, 0xaf, 0xf4, 0xad, 0x12, + 0x46, 0x9b, 0x74, 0x49, 0x4e, 0x6e, 0x63, 0x6a, 0xc9, 0xb7, 0xd5, 0x7d, + 0x9b, 0x5e, 0x44, 0x30, 0x30, 0x6d, 0x24, 0x7f, 0x29, 0xe0, 0x89, 0xfb, + 0x90, 0xff, 0x00, 0x67, 0xe4, 0x6d, 0x9f, 0x55, 0xfe, 0x9c, 0x46, 0xdd, + 0xe7, 0x6f, 0xdf, 0xcf, 0xe2, 0xac, 0x8c, 0x4f, 0x4f, 0x40, 0xd9, 0xda, + 0x3d, 0xbf, 0xed, 0x44, 0xde, 0x7d, 0x2d, 0xb2, 0x3d, 0x4e, 0x3d, 0x3f, + 0xfc, 0xc9, 0x25, 0x32, 0xaf, 0x28, 0xe4, 0x59, 0x63, 0x59, 0x49, 0x6f, + 0xa6, 0xed, 0xb2, 0xe3, 0xf4, 0xb4, 0xd4, 0x80, 0x9d, 0xd6, 0x5f, 0x5e, + 0xd3, 0x45, 0x02, 0xdd, 0xa4, 0x6e, 0x6b, 0x4e, 0xa0, 0x1e, 0xf0, 0x16, + 0x4b, 0xbe, 0xb0, 0x66, 0xe4, 0x90, 0x70, 0x7a, 0x79, 0x1b, 0x4e, 0xf0, + 0xeb, 0x9c, 0x06, 0xb1, 0x13, 0xb5, 0x83, 0xf8, 0xa5, 0x8f, 0x5f, 0xd6, + 0x0c, 0xf6, 0x9b, 0xdd, 0x7b, 0x31, 0x9c, 0x49, 0x63, 0xcd, 0x2c, 0x01, + 0xda, 0x1d, 0xb1, 0xbd, 0xd2, 0x52, 0x53, 0xbb, 0x59, 0x7d, 0xfb, 0x88, + 0x2d, 0x6e, 0xcd, 0x5c, 0xc2, 0x08, 0x81, 0xe6, 0x5c, 0x02, 0xcf, 0xc8, + 0xeb, 0x38, 0xf8, 0xb6, 0x1a, 0xef, 0xba, 0xa0, 0x78, 0x86, 0xd8, 0x1d, + 0x1f, 0xd9, 0x63, 0x49, 0x41, 0x1f, 0x56, 0x9a, 0xe6, 0x91, 0x95, 0x75, + 0xb7, 0x97, 0x4c, 0x87, 0xbc, 0x90, 0x4f, 0xc2, 0x61, 0x5d, 0xc5, 0xe8, + 0xb8, 0x14, 0x97, 0x31, 0xb5, 0xb3, 0x73, 0x43, 0x5d, 0x00, 0x78, 0xa4, + 0xa6, 0x87, 0xed, 0xcb, 0x6e, 0x3b, 0x31, 0xb1, 0x5f, 0x90, 0x0f, 0x0e, + 0xda, 0xea, 0xda, 0x7e, 0x6e, 0x20, 0xfe, 0x0a, 0x75, 0x64, 0x75, 0x9b, + 0x01, 0x65, 0x58, 0x94, 0x63, 0x88, 0xfc, 0xf0, 0x6d, 0x3a, 0xf3, 0xe0, + 0x16, 0xb5, 0x0d, 0x73, 0x32, 0xdf, 0x4d, 0x75, 0x45, 0x60, 0x4c, 0xe9, + 0xf9, 0xb1, 0x1f, 0x7a, 0xb4, 0xe6, 0x0f, 0x56, 0x22, 0x01, 0x1c, 0x00, + 0x92, 0x9e, 0x4a, 0xae, 0x93, 0x9b, 0x6d, 0x8e, 0x76, 0x5e, 0x5b, 0x9a, + 0x0b, 0x9c, 0xd2, 0x2a, 0x02, 0xb1, 0xa1, 0xfe, 0x4e, 0xaa, 0xf5, 0x3f, + 0x56, 0x70, 0x18, 0xe1, 0x63, 0xc1, 0xb9, 0xc3, 0x42, 0xe7, 0x92, 0xe3, + 0xff, 0x00, 0x49, 0x6a, 0x9a, 0x59, 0xbe, 0xc9, 0x89, 0x96, 0xbb, 0x4f, + 0x31, 0x1f, 0xc1, 0x58, 0x93, 0x2c, 0xfd, 0xd7, 0x24, 0xa6, 0x9b, 0xfa, + 0x45, 0x02, 0x80, 0xca, 0x5a, 0xd6, 0x19, 0x1a, 0xc0, 0x88, 0x57, 0x31, + 0xb1, 0x6b, 0xae, 0xad, 0x90, 0x34, 0x44, 0xd2, 0x03, 0x4f, 0x0e, 0x91, + 0x1e, 0x3d, 0xd4, 0x9a, 0x47, 0xbb, 0xc9, 0x25, 0x22, 0xcb, 0xa6, 0xbb, + 0xf1, 0x4d, 0x4e, 0x64, 0xcb, 0x0b, 0x74, 0xd0, 0xfb, 0x9a, 0x42, 0xf3, + 0x76, 0xfd, 0x4f, 0xea, 0x6e, 0x25, 0xa1, 0xf5, 0xcf, 0x1f, 0x9d, 0xff, + 0x00, 0x91, 0x5e, 0x98, 0xf6, 0xee, 0x63, 0x48, 0x31, 0x23, 0x5e, 0xdc, + 0x2c, 0xd7, 0x3d, 0x94, 0xb9, 0xcc, 0x8f, 0x73, 0x49, 0xf7, 0xed, 0x9d, + 0xc4, 0x7c, 0xd2, 0x53, 0xc7, 0x33, 0xea, 0x17, 0x53, 0x7b, 0x67, 0xd7, + 0xa4, 0x1f, 0xed, 0xff, 0x00, 0xe4, 0x54, 0xdb, 0xf5, 0x03, 0xa8, 0x6a, + 0x1f, 0x91, 0x4e, 0xef, 0x01, 0xbc, 0xff, 0x00, 0xdf, 0x17, 0x6d, 0x4e, + 0x51, 0xf4, 0x45, 0x65, 0xbb, 0xda, 0x79, 0xdc, 0xdf, 0xf6, 0xa2, 0xb6, + 0xeb, 0xb7, 0x7e, 0xaf, 0x58, 0x6b, 0x3f, 0x3b, 0xb0, 0xfe, 0x25, 0x25, + 0x3c, 0x50, 0xff, 0x00, 0x17, 0x97, 0xec, 0xdc, 0xec, 0xe6, 0x03, 0xe0, + 0x2b, 0x77, 0xf1, 0x21, 0x59, 0xc0, 0xfa, 0x95, 0x8b, 0x87, 0x79, 0xb7, + 0x36, 0xe3, 0x95, 0xe9, 0x80, 0xe6, 0xd6, 0xd6, 0xed, 0x6c, 0xf8, 0xba, + 0x67, 0x70, 0x5d, 0xb5, 0x62, 0xd2, 0xd1, 0x61, 0xd4, 0x90, 0x0c, 0x10, + 0xde, 0xfd, 0xa5, 0x49, 0xf4, 0x0b, 0x5b, 0xb1, 0xec, 0x04, 0x1d, 0x67, + 0x49, 0x06, 0x64, 0x41, 0x8e, 0xc9, 0x29, 0xc7, 0x35, 0xe2, 0x37, 0x0e, + 0xdb, 0x69, 0xfc, 0xc2, 0xe6, 0x3b, 0xbb, 0x43, 0x99, 0xe3, 0x0b, 0x2a, + 0x8b, 0x3a, 0xae, 0x6b, 0x43, 0x2b, 0xc3, 0xbb, 0x11, 0xfc, 0xba, 0xc0, + 0xd6, 0xbd, 0xa4, 0x76, 0xda, 0x49, 0x1c, 0xf9, 0x85, 0xb7, 0xf6, 0x07, + 0xd6, 0xd6, 0x61, 0xb2, 0xa0, 0xda, 0x83, 0x9c, 0xf7, 0x59, 0xba, 0x5e, + 0xfd, 0xc7, 0x71, 0xdc, 0xd8, 0x1a, 0xcf, 0x75, 0xab, 0x53, 0x76, 0x57, + 0xe9, 0xb0, 0x16, 0xed, 0x11, 0xdb, 0x8f, 0x9c, 0xa4, 0xa7, 0x80, 0xbf, + 0xea, 0x46, 0x6e, 0x5d, 0xc7, 0x27, 0x21, 0xe6, 0x92, 0x74, 0x2c, 0x8d, + 0xc7, 0x4e, 0xe4, 0xca, 0xb1, 0x4f, 0xd5, 0xec, 0xde, 0x9a, 0xd2, 0x71, + 0xc7, 0xda, 0x07, 0x2c, 0xc7, 0x07, 0x63, 0x1c, 0xfe, 0xda, 0xbb, 0x85, + 0xdc, 0x12, 0xee, 0xd3, 0xf1, 0xd1, 0x31, 0xae, 0xf2, 0x5a, 0xe1, 0x66, + 0xd6, 0xb4, 0x7d, 0x08, 0x07, 0xef, 0x3c, 0xa4, 0xa7, 0x16, 0x9c, 0x5c, + 0x57, 0x62, 0xb1, 0xd9, 0x82, 0x2c, 0x70, 0x01, 0xf2, 0x4e, 0x8f, 0xee, + 0xdd, 0x0f, 0x8a, 0xab, 0xd4, 0xba, 0x75, 0x39, 0x38, 0x96, 0x61, 0x56, + 0x5f, 0xba, 0xc8, 0x6e, 0xc1, 0x2e, 0x3c, 0xfd, 0x1d, 0x64, 0xfe, 0x6a, + 0xd2, 0xcf, 0xc1, 0xc9, 0xba, 0xab, 0xa9, 0xa9, 0xac, 0x2c, 0xbf, 0x97, + 0x19, 0x96, 0x9f, 0x16, 0xf3, 0xaa, 0x97, 0x4f, 0xe9, 0xd7, 0xd7, 0x6f, + 0xad, 0x92, 0xe6, 0x3a, 0xde, 0x01, 0x0d, 0x88, 0x07, 0x98, 0xf8, 0xa4, + 0xa7, 0x9f, 0xa3, 0xfc, 0x5d, 0x60, 0x91, 0x36, 0x3a, 0xd9, 0x3d, 0xb7, + 0x01, 0x1f, 0xf4, 0x51, 0x07, 0xf8, 0xba, 0xc1, 0x63, 0xa4, 0x5d, 0x70, + 0x1e, 0x4e, 0x69, 0xff, 0x00, 0xbe, 0xae, 0xc7, 0x69, 0x90, 0x49, 0x13, + 0xc6, 0x89, 0x3a, 0xa9, 0xe4, 0x02, 0xee, 0xd2, 0x4c, 0x7d, 0xc9, 0x29, + 0xe4, 0x19, 0xfe, 0x2e, 0xba, 0x5f, 0xd3, 0xb6, 0xcb, 0xde, 0x3c, 0x03, + 0x98, 0x34, 0xff, 0x00, 0x31, 0x1d, 0xdf, 0x51, 0x7a, 0x23, 0x43, 0x05, + 0x78, 0xef, 0xb3, 0x73, 0xb6, 0xb9, 0xde, 0xa1, 0x3b, 0x44, 0x7d, 0x23, + 0xa8, 0xfc, 0x17, 0x54, 0x19, 0x03, 0x58, 0x4d, 0xb4, 0x6e, 0xf0, 0xd2, + 0x74, 0x00, 0x24, 0xa7, 0x9c, 0xff, 0x00, 0x99, 0x1d, 0x0c, 0x37, 0x69, + 0xc7, 0x12, 0x78, 0x3b, 0x9c, 0x7f, 0x8a, 0x93, 0x7e, 0xac, 0x74, 0xec, + 0x27, 0xb6, 0xec, 0x4a, 0x1a, 0xcb, 0x6b, 0x1e, 0xd2, 0x27, 0x77, 0xe2, + 0x56, 0xfb, 0xd8, 0xc7, 0x00, 0x5d, 0xa8, 0x9f, 0x1d, 0x15, 0x3c, 0xab, + 0xea, 0x63, 0x4b, 0x3d, 0x42, 0xd3, 0xc4, 0x1d, 0x7f, 0x2a, 0x4a, 0x68, + 0x61, 0x3e, 0xb7, 0x7d, 0x63, 0xb2, 0xb0, 0x62, 0xc6, 0x63, 0x38, 0xb9, + 0x84, 0x11, 0x01, 0xcf, 0x64, 0x1d, 0x46, 0xab, 0x52, 0xd6, 0xef, 0x21, + 0xad, 0xe0, 0x15, 0x95, 0xd3, 0x59, 0x5b, 0xba, 0xd5, 0xd7, 0xb5, 0xe0, + 0xd8, 0xec, 0x70, 0xc2, 0x3c, 0x03, 0x5d, 0xf7, 0x2d, 0x62, 0x43, 0x09, + 0x27, 0xe8, 0xb6, 0x4f, 0xc5, 0x25, 0x35, 0x3d, 0x1f, 0x4a, 0xc7, 0x46, + 0xa1, 0xdc, 0x85, 0x9d, 0x78, 0xb0, 0x66, 0xd0, 0xe0, 0x74, 0x07, 0x5e, + 0xfe, 0x20, 0x7e, 0x55, 0xa3, 0x66, 0x4d, 0x5b, 0xe5, 0xc1, 0xc3, 0x52, + 0x01, 0x0a, 0x86, 0x45, 0xf4, 0xbb, 0x26, 0x96, 0xb3, 0x52, 0xd7, 0x03, + 0xa7, 0xcd, 0x25, 0x3a, 0xed, 0xf6, 0xd7, 0xb9, 0xe3, 0x5e, 0x1b, 0xf1, + 0x59, 0xdd, 0x4a, 0x3e, 0xc7, 0x61, 0x76, 0x83, 0x42, 0x7e, 0x00, 0xab, + 0xc6, 0xd0, 0x04, 0x1d, 0x5a, 0x74, 0x21, 0x53, 0xea, 0x2f, 0x27, 0x06, + 0xed, 0x90, 0xd2, 0x18, 0x4b, 0x4b, 0x84, 0xb7, 0x4f, 0x14, 0x94, 0xe7, + 0xd2, 0x4d, 0xac, 0xd8, 0x03, 0x4b, 0x4f, 0x04, 0xf7, 0xf9, 0x2b, 0x14, + 0xd7, 0x66, 0xc8, 0x36, 0x18, 0x6f, 0x1a, 0x0f, 0xb9, 0x06, 0x97, 0x41, + 0x15, 0x58, 0xd6, 0xb5, 0xc7, 0x89, 0xf2, 0x1d, 0x91, 0x9d, 0xea, 0x91, + 0xb0, 0x6a, 0x3e, 0xf4, 0x94, 0xd8, 0x78, 0x65, 0x9a, 0x01, 0x23, 0xc5, + 0x37, 0xd8, 0xeb, 0x8f, 0x52, 0x3f, 0xba, 0x10, 0xd8, 0x2e, 0x6b, 0x21, + 0xad, 0x0e, 0x3c, 0x71, 0x1f, 0x04, 0xb7, 0xdd, 0x31, 0xb7, 0x58, 0xe2, + 0x7d, 0xb3, 0xc7, 0x31, 0xfc, 0x12, 0x52, 0xf8, 0xb8, 0xd5, 0x0a, 0x58, + 0x43, 0x40, 0x31, 0x06, 0x11, 0x71, 0x5a, 0xc6, 0x1b, 0xd8, 0x06, 0x81, + 0xdb, 0x80, 0x1f, 0xca, 0x0d, 0x77, 0xe5, 0x4b, 0x11, 0xc0, 0x00, 0x07, + 0x1c, 0x00, 0x8d, 0x56, 0xd6, 0x65, 0x3c, 0x71, 0xb9, 0xad, 0x27, 0xe4, + 0x48, 0xfe, 0x29, 0x29, 0x9b, 0xd8, 0x08, 0x04, 0x0f, 0x9a, 0xae, 0xd6, + 0x96, 0x67, 0x80, 0x62, 0x1f, 0x5c, 0x13, 0xf0, 0x95, 0x69, 0xf1, 0xb4, + 0x96, 0xf1, 0x2a, 0xb6, 0xbe, 0xb3, 0xcb, 0xc4, 0x6c, 0x2d, 0x70, 0x3f, + 0xc9, 0x94, 0x94, 0x9d, 0xa3, 0x6e, 0x4d, 0x4f, 0x6f, 0x0e, 0x6b, 0x98, + 0xef, 0x3d, 0x37, 0x0f, 0xc8, 0x88, 0xf6, 0xb4, 0x58, 0xde, 0x75, 0xe4, + 0x0e, 0x3e, 0x65, 0x31, 0x21, 0xaf, 0x6c, 0xe9, 0xaf, 0xc4, 0x92, 0x9a, + 0xc7, 0x48, 0xf2, 0x1c, 0x1e, 0xd2, 0x92, 0x9a, 0xf7, 0x80, 0xcb, 0x49, + 0x1d, 0xeb, 0x22, 0x3c, 0xda, 0x67, 0xf2, 0x39, 0x26, 0x39, 0xc7, 0x18, + 0xc8, 0xf7, 0xb0, 0x98, 0x1e, 0x23, 0x90, 0x14, 0x72, 0x77, 0x5c, 0x59, + 0xb4, 0x1f, 0xa5, 0x1b, 0x8e, 0x92, 0x1c, 0xd3, 0x29, 0x3b, 0x2b, 0x0f, + 0x1d, 0x8e, 0x75, 0xd7, 0x31, 0x84, 0x01, 0x23, 0x70, 0x9d, 0x3c, 0x86, + 0xa9, 0x29, 0x77, 0x5b, 0x21, 0x84, 0x08, 0x83, 0xdb, 0xb2, 0x23, 0xe5, + 0xcf, 0x3e, 0x6b, 0x16, 0xef, 0xac, 0x5d, 0x3e, 0xb9, 0x2c, 0xad, 0xf7, + 0x3b, 0xf9, 0x20, 0x06, 0xcf, 0xc5, 0xdf, 0xdc, 0xab, 0xd9, 0xf5, 0x9b, + 0x32, 0xd0, 0xd1, 0x4e, 0x3b, 0x6a, 0x92, 0x40, 0xdc, 0x4b, 0x9d, 0xc7, + 0x7e, 0x02, 0x4a, 0x7a, 0x6b, 0x2b, 0x77, 0xd9, 0x25, 0xba, 0x90, 0x78, + 0x59, 0xee, 0x0c, 0x17, 0x45, 0xbf, 0x4b, 0x92, 0x3e, 0x2b, 0x27, 0xed, + 0xfd, 0x4a, 0xff, 0x00, 0xa7, 0x73, 0xa0, 0x8f, 0xa0, 0xdf, 0x68, 0xfb, + 0x9a, 0x8f, 0x53, 0x2e, 0x7c, 0x12, 0x40, 0x27, 0xf3, 0xf9, 0x49, 0x4e, + 0xdd, 0x2d, 0xa1, 0xa7, 0x5a, 0xc7, 0x8c, 0x98, 0x85, 0x69, 0xb7, 0x33, + 0x69, 0x68, 0x01, 0xa0, 0x68, 0x61, 0x63, 0x56, 0xc7, 0x96, 0x06, 0x92, + 0x60, 0x69, 0xa9, 0x3a, 0xfc, 0xd1, 0x98, 0x3f, 0x95, 0xa7, 0x70, 0x4c, + 0xca, 0x4a, 0x75, 0x85, 0xb4, 0xb4, 0x41, 0x30, 0x04, 0x6a, 0x98, 0xe6, + 0x63, 0xb1, 0xa0, 0xb9, 0xf0, 0x0e, 0x80, 0x9f, 0xe0, 0xb2, 0xad, 0xb7, + 0xd4, 0xdc, 0x1c, 0xf1, 0x1c, 0x43, 0x4c, 0x1f, 0x15, 0x54, 0x59, 0x50, + 0x6f, 0xa3, 0xb5, 0xc6, 0xb9, 0x97, 0x6a, 0xee, 0xda, 0xea, 0x79, 0x49, + 0x4f, 0x40, 0xcb, 0x9b, 0x63, 0x4b, 0x98, 0x0c, 0xb2, 0x34, 0x3a, 0x4c, + 0xf0, 0xab, 0xdb, 0x96, 0xea, 0x5e, 0x03, 0xda, 0x5c, 0x48, 0x92, 0x47, + 0xe6, 0x8e, 0xd2, 0x02, 0xad, 0x80, 0x72, 0xed, 0x7b, 0xb3, 0x73, 0x88, + 0xad, 0x8e, 0x66, 0xec, 0x7c, 0x76, 0xe8, 0x2b, 0x68, 0xe5, 0xee, 0x2e, + 0xe5, 0xdf, 0xc1, 0x64, 0xe2, 0xf5, 0x86, 0xe6, 0xe6, 0x65, 0x58, 0xea, + 0xdc, 0x2a, 0x70, 0x35, 0xd4, 0xe3, 0x2d, 0xf6, 0x8d, 0x03, 0x80, 0xef, + 0x3c, 0xca, 0x4a, 0x7a, 0x2f, 0x53, 0x29, 0xe2, 0x6b, 0xa8, 0x90, 0x75, + 0x04, 0xe8, 0x0a, 0xaf, 0x97, 0xd4, 0xdf, 0x87, 0xb4, 0x64, 0x34, 0x30, + 0xbc, 0xfb, 0x44, 0xce, 0xe0, 0x39, 0x54, 0x87, 0x54, 0xcb, 0x65, 0x61, + 0x8d, 0xc8, 0x2f, 0x70, 0x81, 0xb9, 0xc0, 0x4e, 0x88, 0x5b, 0xfd, 0x5b, + 0x0d, 0x97, 0x3f, 0xd7, 0xb2, 0x20, 0x6f, 0x3e, 0xd0, 0x3c, 0x42, 0x4a, + 0x6c, 0x0f, 0xac, 0x55, 0xbb, 0x46, 0x56, 0xe2, 0xe2, 0x76, 0x80, 0x06, + 0x9f, 0x15, 0x61, 0xdd, 0x42, 0xd7, 0x7d, 0x16, 0xfc, 0xf5, 0x1f, 0x82, + 0xcb, 0xb2, 0xb0, 0xe7, 0xef, 0xd8, 0xdf, 0xb8, 0x91, 0x3e, 0x30, 0x84, + 0xea, 0xb7, 0x12, 0xf2, 0xd7, 0x6a, 0x44, 0x00, 0x48, 0x1f, 0x95, 0x25, + 0x3b, 0x3f, 0x6d, 0xbb, 0x46, 0x17, 0xcb, 0xb9, 0xe2, 0x10, 0xdf, 0xd4, + 0x6f, 0x60, 0x71, 0x25, 0xda, 0x71, 0xa0, 0x83, 0xf0, 0xe5, 0x67, 0x07, + 0x38, 0x92, 0x1a, 0x35, 0x10, 0x35, 0xe4, 0x26, 0x3e, 0xab, 0xe1, 0x91, + 0x60, 0x11, 0xa1, 0x02, 0x07, 0xde, 0x12, 0x53, 0xa9, 0x57, 0x50, 0xb6, + 0xff, 0x00, 0x60, 0xb7, 0xd3, 0x74, 0x7b, 0x77, 0x0e, 0x7f, 0x22, 0x9b, + 0xac, 0xcd, 0x0e, 0x1b, 0x1e, 0xd2, 0x3b, 0xcc, 0x92, 0x7c, 0xbc, 0x96, + 0x25, 0x9f, 0x68, 0x63, 0xc3, 0x8e, 0xe7, 0x82, 0x21, 0xcd, 0x76, 0xba, + 0x03, 0x20, 0x85, 0xb7, 0x8b, 0x93, 0x89, 0x95, 0x50, 0x6c, 0x11, 0x63, + 0x46, 0xaf, 0x23, 0xd8, 0x48, 0xf3, 0xf1, 0xf2, 0x49, 0x4c, 0x5f, 0x66, + 0x48, 0xf7, 0x10, 0xf2, 0x1b, 0xcb, 0x5a, 0x77, 0x6a, 0xab, 0x59, 0x6d, + 0x84, 0x3c, 0x57, 0x5e, 0xf7, 0x44, 0xb4, 0x1d, 0x4b, 0x9d, 0xfb, 0xb3, + 0x01, 0x57, 0xc8, 0xcf, 0x1e, 0xab, 0xdb, 0x5c, 0x16, 0x83, 0xb5, 0x91, + 0xdc, 0xf7, 0x21, 0x1f, 0x0d, 0xf6, 0xb4, 0x32, 0xc2, 0x60, 0xb7, 0x52, + 0xd8, 0x96, 0x8f, 0x82, 0x4a, 0x4b, 0x85, 0x83, 0x7e, 0x3d, 0x9e, 0xb3, + 0x83, 0xcd, 0xb6, 0x30, 0x87, 0xb7, 0x64, 0x06, 0x99, 0x1a, 0x04, 0x6b, + 0x5b, 0x9a, 0xe6, 0x8f, 0x5c, 0xe8, 0x39, 0x80, 0x40, 0x3e, 0x08, 0xcd, + 0xea, 0x4f, 0xb4, 0x7e, 0x88, 0x83, 0xac, 0x12, 0xd0, 0x77, 0x0f, 0x93, + 0x93, 0xbb, 0x25, 0xd6, 0x1d, 0xb6, 0x12, 0x0f, 0x3b, 0x52, 0x53, 0x47, + 0xde, 0xc0, 0x09, 0x3b, 0x48, 0xd0, 0xba, 0x24, 0x9f, 0x35, 0x46, 0xdc, + 0x72, 0xfb, 0x5b, 0x73, 0x5e, 0x18, 0x58, 0x66, 0x47, 0xe7, 0x47, 0x1b, + 0x87, 0x2b, 0x6d, 0xee, 0x86, 0xea, 0xcd, 0xd3, 0xe5, 0xd9, 0x03, 0xd3, + 0x64, 0xb8, 0x86, 0xf3, 0xf7, 0x24, 0xa7, 0x3c, 0x5f, 0xd5, 0x6b, 0x20, + 0x3d, 0xf8, 0xdb, 0x27, 0xdc, 0x5c, 0x2c, 0x2f, 0x0d, 0xec, 0x61, 0xa7, + 0xc5, 0x47, 0x2f, 0x2f, 0x2d, 0xb5, 0x01, 0xea, 0xd4, 0x77, 0xb0, 0x91, + 0x65, 0x4d, 0x31, 0x3f, 0xdb, 0x26, 0x15, 0xab, 0xa8, 0x33, 0x0d, 0xa8, + 0x9e, 0xe3, 0x5e, 0x7e, 0xe4, 0x1a, 0xba, 0x68, 0xf4, 0x6d, 0xad, 0xb5, + 0x8a, 0x85, 0xa6, 0x1f, 0x20, 0x78, 0x73, 0x25, 0x25, 0x2b, 0xa7, 0x3f, + 0xed, 0x41, 0xa3, 0x3e, 0xc6, 0x9b, 0x99, 0xf4, 0x08, 0x10, 0x60, 0xf7, + 0x25, 0x68, 0x1c, 0x50, 0xc2, 0x22, 0xc6, 0xbf, 0x4e, 0x38, 0x76, 0x9e, + 0x0a, 0x95, 0x3d, 0x39, 0xa1, 0xcd, 0xd7, 0x7b, 0xc6, 0x8d, 0x8e, 0x21, + 0x5c, 0x60, 0xb0, 0xbc, 0xb5, 0xcd, 0x10, 0xdd, 0x0f, 0xc9, 0x25, 0x30, + 0x03, 0x71, 0xf6, 0x83, 0xf3, 0xe5, 0x3f, 0xa6, 0xee, 0x11, 0x00, 0x69, + 0x70, 0x03, 0xbf, 0x9a, 0x9e, 0xc3, 0xbb, 0x6e, 0xbf, 0x72, 0x4a, 0x69, + 0xe0, 0xcc, 0xc1, 0x10, 0xe9, 0xd2, 0x15, 0xbb, 0xd8, 0x5b, 0x75, 0x2f, + 0x07, 0x47, 0x07, 0xb4, 0x8f, 0x90, 0x77, 0xfd, 0xf5, 0x73, 0x2c, 0xfa, + 0xce, 0x6b, 0x91, 0x4e, 0x21, 0x7c, 0x70, 0x5c, 0x76, 0x8f, 0xfa, 0x32, + 0x9d, 0xfd, 0x6b, 0xaf, 0xe7, 0x53, 0x15, 0xb1, 0x95, 0x10, 0xe0, 0xe6, + 0x16, 0x08, 0x0d, 0xf8, 0xee, 0x99, 0xd0, 0xa4, 0xa7, 0xa7, 0x68, 0x20, + 0xed, 0x71, 0xd0, 0x73, 0xaf, 0x0a, 0xa6, 0x4f, 0x54, 0xe9, 0x98, 0xb3, + 0xeb, 0xe4, 0x31, 0xa4, 0x82, 0xd2, 0xd6, 0x9d, 0xee, 0xed, 0xd9, 0xb2, + 0xb9, 0xb7, 0x74, 0xee, 0xb1, 0x99, 0xa6, 0x55, 0xee, 0x73, 0x7b, 0x82, + 0xff, 0x00, 0xe0, 0x34, 0x45, 0xab, 0xea, 0xd9, 0xac, 0xc9, 0x20, 0xc7, + 0x12, 0x65, 0x25, 0x37, 0xef, 0xfa, 0xd7, 0x88, 0x21, 0xb8, 0xf4, 0x59, + 0x7b, 0xfb, 0x17, 0x43, 0x41, 0x20, 0x6b, 0xe2, 0x55, 0x1b, 0xfe, 0xb0, + 0x75, 0x9c, 0x98, 0x65, 0x35, 0xd7, 0x43, 0x49, 0xec, 0x0b, 0x88, 0xf9, + 0xbb, 0x45, 0xaa, 0xde, 0x95, 0x89, 0x5b, 0x18, 0x68, 0xa7, 0x6d, 0xa3, + 0xe9, 0x3c, 0x9d, 0xda, 0x7c, 0x0a, 0xb7, 0x45, 0x34, 0xd6, 0xcd, 0x29, + 0x00, 0x47, 0x31, 0xee, 0x25, 0x25, 0x3c, 0xef, 0xd9, 0x7a, 0xb6, 0x6b, + 0x47, 0xda, 0x2d, 0x79, 0x68, 0x23, 0xdb, 0x24, 0x0d, 0x3c, 0x95, 0x8a, + 0x7e, 0xaf, 0x93, 0x25, 0xd0, 0x1c, 0x79, 0x5b, 0x4e, 0x75, 0x8d, 0x3e, + 0xda, 0x9c, 0xed, 0xda, 0x93, 0x20, 0x00, 0x9c, 0x65, 0x0d, 0xdb, 0x5d, + 0x59, 0x1d, 0xa7, 0xb2, 0x4a, 0x73, 0x6b, 0xfa, 0xbd, 0x8c, 0xc3, 0xa9, + 0x26, 0x3c, 0x11, 0xc7, 0x4f, 0xc1, 0xa0, 0x00, 0xf8, 0x1f, 0xba, 0x5d, + 0x1c, 0xab, 0xce, 0x20, 0x91, 0x3e, 0xc9, 0x30, 0x1a, 0x4e, 0xa5, 0x46, + 0xdc, 0x3a, 0x6e, 0x11, 0x60, 0x79, 0x73, 0x4c, 0x82, 0x1c, 0x5b, 0xa7, + 0x86, 0x89, 0x29, 0x1b, 0x31, 0xe9, 0xac, 0x97, 0xb5, 0x8c, 0x90, 0x23, + 0x51, 0xb8, 0x6b, 0xde, 0x13, 0x96, 0x8a, 0xd8, 0x3d, 0xb3, 0xe1, 0xa6, + 0x91, 0xc6, 0x88, 0x6e, 0x63, 0x7d, 0x60, 0xca, 0xe9, 0x2f, 0x03, 0x5d, + 0xc5, 0xce, 0x3a, 0x8d, 0x20, 0xea, 0xae, 0x07, 0x52, 0xd6, 0x82, 0xe8, + 0x61, 0x1d, 0xdc, 0x07, 0xf1, 0x49, 0x4d, 0x37, 0x39, 0xd3, 0xc4, 0x79, + 0x05, 0x07, 0x9f, 0x61, 0xec, 0x46, 0xa4, 0x8f, 0xf6, 0x2b, 0x8e, 0x75, + 0x64, 0x4b, 0x40, 0xf3, 0x2a, 0xb5, 0xce, 0x00, 0x18, 0x70, 0x83, 0xdb, + 0x5e, 0x12, 0x53, 0x49, 0xc6, 0x63, 0x68, 0x74, 0x78, 0xc6, 0x8a, 0xdf, + 0x4d, 0xc1, 0x36, 0x97, 0x5d, 0x6f, 0xb7, 0x1d, 0xba, 0x46, 0xb0, 0xf7, + 0x1e, 0xde, 0x61, 0x35, 0x58, 0xa6, 0xf7, 0x8a, 0xd8, 0xef, 0x67, 0x2e, + 0x76, 0xa3, 0x6b, 0x67, 0x58, 0x56, 0x3a, 0xa5, 0xff, 0x00, 0x67, 0xc7, + 0xf4, 0x31, 0x7d, 0x96, 0x3c, 0x7a, 0x74, 0xc7, 0xe6, 0xe9, 0xee, 0x7f, + 0xf6, 0x47, 0xe2, 0x92, 0x9a, 0x1d, 0x6b, 0xa8, 0x9c, 0x97, 0xbf, 0xa7, + 0xe2, 0x49, 0x69, 0x86, 0xe4, 0x5a, 0xde, 0xc0, 0x72, 0xc0, 0x7c, 0x4a, + 0x8b, 0x31, 0x58, 0xd6, 0x86, 0xd2, 0x36, 0xf6, 0x1e, 0x41, 0x3e, 0x0e, + 0x20, 0xc6, 0xa4, 0x56, 0xc1, 0xba, 0x39, 0xee, 0x75, 0xee, 0xad, 0xfb, + 0x58, 0xd9, 0x78, 0xed, 0xc7, 0x82, 0x4a, 0x6a, 0xfa, 0x0e, 0x04, 0x09, + 0xd3, 0xc3, 0xb1, 0xf8, 0x26, 0xba, 0xb7, 0x8d, 0xbb, 0x1a, 0x5e, 0xef, + 0x21, 0x1a, 0x7c, 0xe1, 0x59, 0x2e, 0xa5, 0xce, 0xdc, 0x5b, 0xa7, 0x13, + 0xaf, 0xf7, 0xa9, 0xba, 0xa6, 0x10, 0x4b, 0x1a, 0x66, 0x20, 0x76, 0x84, + 0x94, 0x87, 0x15, 0x96, 0xe9, 0xb4, 0xed, 0x27, 0xb1, 0xef, 0x08, 0xb7, + 0x34, 0xb8, 0xee, 0x3e, 0xd3, 0xfb, 0xa3, 0xba, 0x85, 0x94, 0xe4, 0x12, + 0x06, 0xa1, 0xad, 0xfb, 0xbc, 0x94, 0xc5, 0x76, 0x93, 0xee, 0x70, 0x3e, + 0x5d, 0xd2, 0x52, 0xd5, 0x16, 0x80, 0x37, 0x30, 0xf3, 0xae, 0x9c, 0x2b, + 0x95, 0xd5, 0x5d, 0x84, 0x47, 0x7f, 0x87, 0x75, 0x5e, 0xb7, 0x96, 0x99, + 0x7f, 0xbd, 0xa0, 0xeb, 0x25, 0x58, 0x65, 0xb5, 0x07, 0x02, 0xc6, 0xc4, + 0xf6, 0x3a, 0xa4, 0xa6, 0xc3, 0xf0, 0x2a, 0x2d, 0x05, 0xcc, 0x06, 0x39, + 0x54, 0x8f, 0x48, 0xc6, 0x3b, 0xfd, 0x32, 0xea, 0xc5, 0x9a, 0x3c, 0x30, + 0xc0, 0x20, 0x79, 0x78, 0xab, 0xcc, 0xb2, 0xa2, 0x3d, 0xc4, 0xc9, 0x9d, + 0x3e, 0x08, 0x8d, 0xba, 0xae, 0x7f, 0x04, 0x94, 0xe6, 0xd7, 0xd2, 0x2a, + 0xa6, 0xb0, 0x00, 0xde, 0x46, 0x92, 0xed, 0x49, 0x8f, 0x1e, 0x25, 0x11, + 0xd8, 0x9b, 0x99, 0xe9, 0xb4, 0x9a, 0xc8, 0xee, 0xdd, 0x25, 0x68, 0xfa, + 0x8d, 0x23, 0xda, 0x24, 0x79, 0x26, 0x96, 0x92, 0x41, 0x07, 0xe7, 0xc2, + 0x4a, 0x69, 0x83, 0xd4, 0xab, 0x70, 0x0d, 0xae, 0x81, 0x58, 0xfa, 0x5b, + 0x64, 0x38, 0xfe, 0x10, 0xaa, 0x59, 0x5f, 0x55, 0x7e, 0x5b, 0xad, 0x7b, + 0x3f, 0x43, 0x00, 0x35, 0x80, 0xb4, 0x93, 0xe3, 0x2e, 0x9d, 0x16, 0xc6, + 0xd0, 0x75, 0x1a, 0xfc, 0x4a, 0x60, 0x36, 0xc9, 0xf6, 0xfc, 0x67, 0x54, + 0x94, 0xd3, 0x05, 0xbf, 0x44, 0x9d, 0x9a, 0x4e, 0xa1, 0x48, 0x31, 0x84, + 0x19, 0x71, 0x1f, 0x8c, 0xab, 0x0f, 0x2c, 0x8d, 0x48, 0xd5, 0x09, 0xd4, + 0xd6, 0xe1, 0x31, 0xaf, 0xc6, 0x12, 0x52, 0x31, 0x55, 0x1c, 0x8d, 0x4f, + 0xdc, 0x9c, 0xd2, 0x1e, 0x0b, 0x35, 0x83, 0xa4, 0xcc, 0x7d, 0xc8, 0x82, + 0x96, 0xb4, 0xee, 0x9d, 0xa7, 0xc8, 0xff, 0x00, 0x04, 0xed, 0x73, 0x80, + 0x3b, 0x4c, 0x83, 0xe2, 0x92, 0x9a, 0xe5, 0x8d, 0xaa, 0x24, 0x6f, 0x0d, + 0xf3, 0xd5, 0x04, 0xe5, 0x52, 0xc9, 0x0c, 0x80, 0x20, 0x9d, 0x06, 0x8a, + 0xe3, 0xdd, 0x11, 0xb9, 0x9b, 0xbc, 0x00, 0xee, 0x98, 0x54, 0x2c, 0x6c, + 0xfd, 0x98, 0x49, 0xec, 0x40, 0x49, 0x4d, 0x7a, 0x43, 0xaf, 0x21, 0xd1, + 0xa7, 0x68, 0x0a, 0xdf, 0xa3, 0x6f, 0x13, 0xa4, 0x73, 0x21, 0x0c, 0x8b, + 0x18, 0x36, 0xb6, 0xb0, 0xc1, 0xc4, 0x34, 0xe9, 0x09, 0xb7, 0x98, 0x8d, + 0xe2, 0x38, 0xf9, 0xf2, 0x92, 0x9e, 0x73, 0x1f, 0xa6, 0x30, 0x3b, 0xd8, + 0xc1, 0xa7, 0x0a, 0xdd, 0x74, 0x06, 0x8d, 0xb2, 0x39, 0xe0, 0x05, 0x67, + 0x78, 0x06, 0x5a, 0xde, 0x04, 0x18, 0x50, 0x6b, 0x7b, 0x16, 0x90, 0x35, + 0xf7, 0x46, 0xb3, 0xe2, 0x92, 0x96, 0x78, 0xa8, 0x08, 0xb1, 0xdb, 0x47, + 0x04, 0x4c, 0x25, 0x5e, 0x2d, 0x4f, 0x3f, 0xa3, 0x12, 0x5a, 0x78, 0x91, + 0xf8, 0x4f, 0x28, 0xac, 0xa9, 0xcf, 0x04, 0x41, 0x90, 0x75, 0x24, 0x73, + 0x1e, 0x29, 0xfd, 0x07, 0x37, 0xe9, 0xb3, 0x8e, 0x25, 0x25, 0x21, 0x35, + 0xd4, 0x1c, 0xed, 0xc4, 0xb4, 0xcf, 0x8c, 0x7d, 0xc9, 0x36, 0xda, 0xaa, + 0x30, 0xcb, 0x1c, 0x27, 0x80, 0xe7, 0x4a, 0x9b, 0x70, 0xea, 0xb0, 0xc9, + 0x71, 0x68, 0x3c, 0xb6, 0x25, 0x3b, 0xba, 0x7d, 0x4c, 0x10, 0xd3, 0xed, + 0xe4, 0x69, 0x22, 0x7e, 0x25, 0x25, 0x27, 0x65, 0x8e, 0x7c, 0x06, 0xb8, + 0x3b, 0x49, 0x56, 0x1b, 0x8b, 0xea, 0x34, 0x8b, 0x1b, 0xc6, 0xb3, 0xc1, + 0xfb, 0xd5, 0x2a, 0xb1, 0xdb, 0xac, 0x3d, 0xa6, 0xcf, 0x2d, 0x63, 0xf8, + 0x2b, 0x2c, 0xaa, 0x97, 0x34, 0x6e, 0x7b, 0x9e, 0x46, 0x9e, 0x01, 0x25, + 0x24, 0xb3, 0x1f, 0x1d, 0xe2, 0x1c, 0xed, 0x07, 0x04, 0x90, 0x9c, 0x63, + 0x7a, 0x6d, 0xfd, 0x13, 0xe5, 0xc0, 0xc8, 0xdd, 0xee, 0x31, 0xe0, 0xa0, + 0xfc, 0x7a, 0x8b, 0x9b, 0xfa, 0x39, 0x03, 0x88, 0x31, 0x00, 0x25, 0xe8, + 0x56, 0x0e, 0xd6, 0x12, 0x27, 0xe3, 0x29, 0x29, 0x57, 0x7d, 0xa8, 0x58, + 0x1c, 0x2b, 0x80, 0x79, 0xdb, 0x07, 0x8d, 0x50, 0x1d, 0xea, 0xdc, 0x76, + 0x96, 0x73, 0xc6, 0x93, 0x1f, 0x72, 0x37, 0xa2, 0xc6, 0xb8, 0x97, 0x3c, + 0xc7, 0x24, 0xcf, 0x64, 0xee, 0xbb, 0x1e, 0xb0, 0x25, 0xd0, 0xd1, 0xdc, + 0xcc, 0xcf, 0xc9, 0x25, 0x20, 0xf4, 0x6e, 0x00, 0x37, 0x6b, 0x77, 0x1f, + 0x13, 0x1c, 0x2a, 0xf7, 0xd7, 0x63, 0x80, 0x60, 0x6b, 0x46, 0xed, 0x04, + 0x19, 0x24, 0xf8, 0x2b, 0x37, 0x5e, 0x36, 0x91, 0x5f, 0xd2, 0x8f, 0xbb, + 0xe4, 0x9b, 0x1a, 0xab, 0x37, 0x0b, 0x1f, 0xc9, 0xd7, 0x5f, 0xcd, 0xfe, + 0xe4, 0x94, 0xce, 0x8a, 0x9b, 0x83, 0x8a, 0x77, 0x38, 0x6f, 0xe6, 0xd7, + 0x9d, 0x40, 0x8d, 0x7e, 0xe0, 0xb2, 0xa9, 0x6b, 0xf3, 0xb2, 0x5d, 0x96, + 0xe3, 0xec, 0xfa, 0x34, 0xb4, 0xf1, 0xb4, 0x78, 0xfc, 0x79, 0x2a, 0x79, + 0x59, 0x37, 0x75, 0x1b, 0x36, 0x52, 0xd2, 0x71, 0x2a, 0x3f, 0xa5, 0xd4, + 0x03, 0x63, 0x87, 0x00, 0x7f, 0x72, 0xd2, 0xc4, 0xab, 0x6d, 0x25, 0x8e, + 0xfd, 0x1b, 0xc8, 0x90, 0xd3, 0xc2, 0x4a, 0x47, 0x4d, 0x4e, 0x1b, 0x80, + 0x20, 0x39, 0xbc, 0x81, 0xc6, 0xa8, 0x76, 0x7b, 0x5d, 0x0e, 0xf7, 0x93, + 0xc4, 0x4f, 0x2a, 0xcf, 0xae, 0xca, 0xb7, 0x56, 0xdd, 0x1f, 0x31, 0x31, + 0x22, 0x78, 0xe5, 0x02, 0xd6, 0xbc, 0x17, 0x16, 0xec, 0x3b, 0x0e, 0xae, + 0x0e, 0x31, 0xe6, 0x49, 0x29, 0x29, 0x97, 0xd8, 0xae, 0xb7, 0x46, 0x80, + 0x1d, 0xe1, 0x20, 0x7e, 0x45, 0x0b, 0x69, 0x7d, 0x6e, 0x2c, 0x70, 0x82, + 0x34, 0x24, 0x14, 0x6a, 0xa9, 0xca, 0x7b, 0x43, 0xe8, 0x27, 0x5d, 0x77, + 0xce, 0x9f, 0x8a, 0x95, 0xb4, 0x58, 0xc6, 0x88, 0x79, 0xb6, 0xe9, 0x87, + 0xf6, 0x03, 0xe6, 0x52, 0x53, 0x58, 0x38, 0x81, 0x1c, 0xca, 0x95, 0x75, + 0xda, 0xe7, 0x43, 0x19, 0xb9, 0xc3, 0x91, 0x1d, 0xbc, 0xd5, 0x9a, 0xb0, + 0xdb, 0x65, 0x61, 0xd7, 0x91, 0x55, 0x84, 0x99, 0x6c, 0xee, 0x31, 0xf1, + 0x45, 0xb1, 0xee, 0x0d, 0x2c, 0xa9, 0xc0, 0x16, 0xf0, 0x46, 0x87, 0x4e, + 0xfa, 0x24, 0xa7, 0x35, 0xcd, 0x7b, 0x1d, 0xef, 0xaf, 0x6b, 0x89, 0x30, + 0x08, 0x81, 0x1e, 0x1e, 0x09, 0x85, 0x93, 0xf4, 0x4c, 0x47, 0x74, 0x4b, + 0xad, 0xbe, 0xf7, 0x12, 0xfa, 0xe5, 0x95, 0x88, 0xd0, 0x92, 0x3e, 0x26, + 0x55, 0x7d, 0xa3, 0xdd, 0xb5, 0xbe, 0xde, 0xfa, 0xfd, 0xe9, 0x29, 0xb7, + 0x4b, 0xed, 0x80, 0xd1, 0xc1, 0xd0, 0x12, 0x3f, 0x8a, 0x3b, 0x5f, 0x63, + 0x80, 0x10, 0x07, 0x8c, 0xac, 0xfa, 0xaf, 0x7b, 0x5c, 0x03, 0x64, 0x40, + 0xd0, 0x76, 0x28, 0x8e, 0xbc, 0xc1, 0x91, 0xdb, 0x4d, 0x75, 0x1a, 0xff, + 0x00, 0x14, 0x94, 0xe8, 0x32, 0xd2, 0xd7, 0x90, 0x4e, 0x91, 0xcc, 0x42, + 0x63, 0x9a, 0xd6, 0xba, 0x08, 0x20, 0x41, 0x24, 0x82, 0x08, 0xd1, 0x67, + 0xc0, 0x73, 0x76, 0xed, 0x68, 0xdd, 0xfb, 0xa6, 0x08, 0xee, 0x54, 0x8d, + 0x75, 0x44, 0x3c, 0xe9, 0x00, 0x01, 0xdc, 0xa4, 0xa6, 0xe9, 0xea, 0x38, + 0xe5, 0xb2, 0xdf, 0x73, 0xbf, 0x74, 0x03, 0x3f, 0x25, 0x4a, 0xdc, 0xe1, + 0x32, 0xcd, 0x0f, 0x8e, 0xb0, 0x50, 0xec, 0xad, 0x81, 0xc2, 0xca, 0x9c, + 0x7c, 0xc7, 0x84, 0x7c, 0x10, 0xc1, 0x1e, 0xe0, 0xe8, 0x71, 0x71, 0x99, + 0x84, 0x94, 0x91, 0xd9, 0x57, 0xba, 0x4b, 0xdd, 0x15, 0x9e, 0x1c, 0x44, + 0xfe, 0x45, 0x0a, 0xb3, 0x2c, 0x32, 0x2c, 0x1b, 0x5e, 0x09, 0x0d, 0x6b, + 0x4c, 0xc8, 0xf1, 0x40, 0x7b, 0xac, 0x20, 0xcb, 0x60, 0x4c, 0x02, 0x01, + 0x3a, 0xa1, 0x12, 0xf6, 0x3b, 0x6b, 0xe6, 0x40, 0x11, 0xa6, 0xa9, 0x29, + 0xd1, 0xab, 0xa9, 0xd8, 0xd1, 0x04, 0x12, 0x7c, 0x08, 0xd6, 0x51, 0xff, + 0x00, 0x6b, 0x31, 0x9f, 0x4d, 0xa5, 0x93, 0xf2, 0x83, 0xf3, 0x58, 0xce, + 0x2e, 0x1f, 0xa4, 0x24, 0x86, 0x8e, 0x24, 0x4e, 0x9f, 0x25, 0x0f, 0x52, + 0xb3, 0x64, 0x58, 0xdf, 0x66, 0x84, 0x3d, 0x9a, 0xba, 0x7c, 0x08, 0x29, + 0x29, 0xd6, 0x1d, 0x5e, 0xb6, 0x97, 0x6d, 0x7b, 0x9f, 0xaf, 0x04, 0xb4, + 0x8f, 0xbe, 0x11, 0x47, 0x5b, 0x0e, 0xd1, 0x8d, 0x81, 0xdc, 0xc8, 0x3a, + 0xac, 0x33, 0x5b, 0x2c, 0x24, 0xd6, 0x07, 0x26, 0x01, 0xd0, 0x91, 0xf9, + 0x14, 0xfe, 0xcd, 0x63, 0x04, 0x35, 0xa0, 0xbc, 0xc7, 0xb6, 0x74, 0x8f, + 0x92, 0x4a, 0x75, 0xec, 0xea, 0x21, 0xdf, 0x49, 0xe2, 0x3c, 0x82, 0x96, + 0xeb, 0xb6, 0xef, 0xda, 0x76, 0xfc, 0x96, 0x3b, 0x1a, 0xef, 0x53, 0x8d, + 0x47, 0xd2, 0x9d, 0x74, 0x3d, 0xf5, 0x46, 0xf5, 0x3f, 0x47, 0xf4, 0x4f, + 0x87, 0x1d, 0xbc, 0x52, 0x53, 0xac, 0xd2, 0xc3, 0x59, 0x76, 0xc2, 0x09, + 0xe4, 0x70, 0xa4, 0x01, 0x73, 0xa1, 0xb5, 0xb9, 0xc2, 0x27, 0x70, 0xfc, + 0x8b, 0x23, 0x27, 0x37, 0xa9, 0x1b, 0x37, 0x56, 0xf1, 0xb4, 0x0d, 0x18, + 0x59, 0x2e, 0xec, 0x85, 0x85, 0xd4, 0x3a, 0xae, 0x3b, 0x8b, 0x9c, 0x5d, + 0x7f, 0xbb, 0x71, 0x16, 0x8e, 0x07, 0x71, 0x2d, 0x21, 0x25, 0x3d, 0x1b, + 0x2a, 0xb5, 0xf6, 0x34, 0x1f, 0x6b, 0x48, 0x93, 0x00, 0x18, 0xfe, 0x49, + 0xe2, 0x0f, 0xc9, 0x4f, 0x23, 0x16, 0xb1, 0x51, 0x2d, 0xdd, 0xb9, 0xa0, + 0x91, 0x1a, 0xc9, 0xec, 0x16, 0x18, 0xeb, 0xd9, 0x2f, 0xbb, 0x56, 0x0a, + 0xeb, 0x10, 0x44, 0x07, 0x13, 0xee, 0xd3, 0xda, 0x3e, 0x2a, 0xc6, 0x1f, + 0x57, 0xcb, 0x2f, 0x7b, 0x2c, 0xa3, 0xd3, 0x69, 0x74, 0x56, 0xf2, 0x77, + 0x0f, 0xed, 0x0d, 0x0f, 0xfa, 0xf0, 0x92, 0x97, 0xfb, 0x2e, 0x4e, 0xd2, + 0xed, 0xcf, 0x1e, 0x12, 0xed, 0x15, 0x9a, 0xf1, 0x09, 0x07, 0xd7, 0xb0, + 0x9e, 0xc2, 0x4c, 0x0d, 0x3c, 0x02, 0x37, 0xdb, 0x6a, 0xb1, 0x81, 0xa5, + 0xa1, 0xef, 0x93, 0x2d, 0x61, 0x12, 0x3c, 0x34, 0x3a, 0xaa, 0x17, 0xd9, + 0x73, 0x00, 0x26, 0x5a, 0x44, 0xcb, 0x0f, 0xe5, 0x92, 0x92, 0x9b, 0xac, + 0xc4, 0x1b, 0x89, 0x2e, 0xd0, 0x70, 0xd3, 0xa0, 0xe1, 0x14, 0x30, 0xb7, + 0x82, 0x20, 0x76, 0x1f, 0xde, 0xb2, 0x87, 0x50, 0x78, 0x70, 0x61, 0xb4, + 0x49, 0xf9, 0xe9, 0xfd, 0x94, 0x41, 0x9e, 0x1e, 0xc0, 0x44, 0x6e, 0x13, + 0xa9, 0xd3, 0x77, 0xc0, 0x24, 0xa6, 0xf3, 0xa9, 0x83, 0x33, 0xa9, 0x9f, + 0x77, 0x70, 0x3c, 0x02, 0x5f, 0xa1, 0x8d, 0xa2, 0xce, 0x34, 0x89, 0x13, + 0xf1, 0x59, 0xef, 0xcf, 0xad, 0xac, 0x90, 0x7d, 0x57, 0x83, 0xa3, 0x78, + 0x01, 0x05, 0xb9, 0xf6, 0x3d, 0xee, 0x22, 0xa0, 0x46, 0x9b, 0x5f, 0x3c, + 0xf3, 0x29, 0x29, 0xd1, 0x2c, 0x13, 0xb1, 0x84, 0x47, 0x81, 0xd7, 0x54, + 0x9d, 0x8a, 0x5c, 0xc8, 0x73, 0x9b, 0x3c, 0x68, 0x04, 0x47, 0x60, 0x65, + 0x52, 0x66, 0x46, 0x53, 0x9f, 0xb4, 0x96, 0xd6, 0x0c, 0x46, 0xee, 0x14, + 0xdc, 0xe3, 0x53, 0x43, 0xac, 0x25, 0xf6, 0x78, 0x48, 0x80, 0x3b, 0x24, + 0xa4, 0xf6, 0x62, 0x3a, 0xba, 0x1c, 0xec, 0x73, 0x53, 0xf2, 0x74, 0xda, + 0xdb, 0x49, 0x0d, 0x27, 0xc0, 0xed, 0xd5, 0x53, 0x19, 0x3d, 0x55, 0xec, + 0x38, 0xb9, 0x18, 0xa3, 0x1d, 0xef, 0x70, 0x6d, 0x97, 0xd7, 0x60, 0xb1, + 0xbb, 0x0f, 0xd2, 0x23, 0x82, 0x0f, 0xc5, 0x0e, 0xec, 0xbb, 0x6d, 0x92, + 0x5d, 0x01, 0xa7, 0xb3, 0x4f, 0xfd, 0x52, 0x87, 0xae, 0x41, 0xda, 0x5a, + 0xe6, 0x02, 0x26, 0x4c, 0xf7, 0xef, 0x10, 0x92, 0x99, 0x61, 0xe0, 0xb3, + 0x16, 0xa6, 0x40, 0x78, 0xb9, 0xdc, 0xb1, 0xc4, 0x6c, 0x9f, 0x1d, 0x16, + 0x8b, 0x2a, 0x16, 0x3b, 0x7d, 0x8e, 0x2d, 0x0d, 0x9d, 0x0b, 0xa6, 0x0f, + 0x96, 0xab, 0x2c, 0xbf, 0x24, 0x9d, 0x84, 0x8d, 0xa7, 0xe8, 0xb8, 0x6a, + 0xe9, 0xd7, 0xb0, 0xee, 0x8d, 0xb2, 0xe1, 0x50, 0x71, 0x30, 0x18, 0x0e, + 0xd2, 0xe7, 0x00, 0xed, 0x34, 0x74, 0xb4, 0x14, 0x94, 0xdc, 0x76, 0x2b, + 0x0e, 0xd0, 0x5c, 0xd9, 0x3c, 0x41, 0x74, 0x99, 0xef, 0xf8, 0xa1, 0x57, + 0x83, 0x88, 0xc2, 0x6c, 0x65, 0x6e, 0xb2, 0xc2, 0x75, 0xfa, 0x4d, 0x9f, + 0x18, 0x2e, 0x54, 0xf7, 0x65, 0x58, 0xf3, 0x6b, 0x36, 0x86, 0x90, 0x09, + 0x64, 0xea, 0x63, 0xbf, 0xdc, 0xad, 0xb3, 0x37, 0x25, 0xd5, 0x97, 0x34, + 0x1b, 0x47, 0x6d, 0x9a, 0x71, 0xfd, 0x64, 0x94, 0x96, 0xdc, 0xbc, 0xa6, + 0xc3, 0x68, 0x60, 0xad, 0x83, 0x42, 0xe7, 0x12, 0x4e, 0xbe, 0x01, 0xa1, + 0x12, 0x8c, 0xea, 0x6b, 0x60, 0xa9, 0xe0, 0xbc, 0x83, 0x2e, 0x7e, 0xba, + 0xf8, 0xca, 0x6b, 0x2f, 0x73, 0x60, 0xd9, 0x5f, 0xa9, 0x22, 0x75, 0x74, + 0x80, 0x3c, 0xfb, 0x25, 0xf6, 0xba, 0xc7, 0xb5, 0xd4, 0xb5, 0xae, 0x69, + 0x1a, 0x34, 0x8d, 0x3c, 0x52, 0x53, 0x0b, 0xfa, 0xa3, 0x09, 0x73, 0x69, + 0x6b, 0xc4, 0x0f, 0x10, 0xd1, 0xa7, 0xc4, 0x2a, 0x76, 0xe5, 0xba, 0xa8, + 0xb1, 0xef, 0x0c, 0x98, 0xf7, 0x38, 0xed, 0xe7, 0x81, 0xaa, 0xd1, 0x37, + 0x56, 0x41, 0x7f, 0xa0, 0x24, 0xeb, 0x27, 0x92, 0x80, 0x6a, 0xa3, 0x21, + 0xbb, 0x5f, 0x40, 0x7c, 0x90, 0x43, 0x1c, 0x03, 0xb5, 0x1f, 0x14, 0x94, + 0xd2, 0xae, 0xc2, 0xe3, 0xb9, 0x8f, 0x96, 0x1e, 0x76, 0x99, 0x9f, 0x19, + 0x84, 0x46, 0x82, 0xe6, 0xc5, 0x6d, 0x24, 0x93, 0xa3, 0xa2, 0x3c, 0xa1, + 0x5d, 0x35, 0x32, 0x96, 0x83, 0xe9, 0x88, 0x3d, 0xa0, 0x47, 0xe0, 0x93, + 0x2e, 0x69, 0x86, 0x06, 0x10, 0x39, 0x80, 0xd3, 0xa7, 0xde, 0x92, 0x9a, + 0x8d, 0x16, 0x6f, 0x73, 0x5e, 0x38, 0xef, 0x1d, 0xfc, 0x14, 0x85, 0x6f, + 0x30, 0x44, 0xb4, 0x9f, 0x8a, 0xbe, 0x5a, 0x08, 0xf6, 0x30, 0xee, 0xfd, + 0xe3, 0x3c, 0x25, 0xb2, 0xfe, 0x41, 0x0d, 0x6e, 0x9a, 0x6d, 0x3a, 0xa4, + 0xa6, 0x81, 0xa6, 0xdd, 0xc2, 0xc7, 0x00, 0x37, 0x49, 0x9e, 0xff, 0x00, + 0x14, 0xe3, 0x05, 0xae, 0x71, 0x73, 0x77, 0x87, 0x91, 0xa0, 0x0e, 0x24, + 0x4f, 0xc1, 0x6a, 0xb2, 0xb6, 0x90, 0x04, 0x49, 0x1c, 0xf2, 0x06, 0xaa, + 0x0e, 0xf5, 0x1b, 0xa3, 0x2b, 0x86, 0x0e, 0x08, 0x74, 0x04, 0x94, 0xe7, + 0x7d, 0x9b, 0x25, 0xae, 0x90, 0xf2, 0x2b, 0x23, 0xda, 0xd8, 0x93, 0xa7, + 0x9a, 0x1b, 0xf1, 0xed, 0x99, 0x20, 0xcc, 0x48, 0x1c, 0x09, 0x3c, 0xea, + 0xaf, 0xbd, 0xd7, 0x35, 0xda, 0xb2, 0x34, 0xd2, 0x4c, 0xf1, 0xdd, 0x26, + 0xfd, 0xa0, 0xb7, 0x7e, 0x80, 0x44, 0xcc, 0xf0, 0x92, 0x9c, 0xdb, 0x28, + 0xc8, 0x05, 0xae, 0x80, 0x0b, 0x5c, 0x07, 0x8e, 0xee, 0xd0, 0x07, 0x82, + 0x83, 0xf1, 0x6c, 0x02, 0x23, 0xe8, 0xfb, 0xbc, 0x60, 0x2d, 0x66, 0x49, + 0x6f, 0x62, 0x48, 0x99, 0x99, 0xd1, 0x43, 0xd2, 0x63, 0xb7, 0x6e, 0x12, + 0x1a, 0x60, 0x6b, 0x33, 0x3f, 0x34, 0x94, 0xe3, 0x1a, 0x5e, 0x00, 0x04, + 0x17, 0x3a, 0x74, 0x8f, 0x03, 0xd8, 0xa8, 0xd5, 0x8e, 0xf2, 0x76, 0xb8, + 0x0f, 0x71, 0xf1, 0x20, 0x03, 0xe6, 0xb7, 0x03, 0x2a, 0x0f, 0x3b, 0x40, + 0x24, 0x7c, 0x10, 0xcf, 0xa7, 0xb8, 0x16, 0xd4, 0x1c, 0x7b, 0x76, 0x82, + 0x3e, 0x29, 0x29, 0xc6, 0xf4, 0xdb, 0x50, 0x21, 0xcc, 0x24, 0x3a, 0x4f, + 0xb4, 0x11, 0x11, 0xfb, 0xa9, 0xab, 0x65, 0xcd, 0x1b, 0xde, 0x1d, 0x68, + 0x89, 0x04, 0x06, 0xb5, 0xc1, 0xce, 0xe3, 0x4e, 0xeb, 0x61, 0xcf, 0xd8, + 0xd2, 0xe3, 0x56, 0xd8, 0x3d, 0xf5, 0xfc, 0x56, 0x6f, 0x50, 0xcf, 0xb9, + 0x92, 0xc6, 0xb0, 0x81, 0x3f, 0x49, 0xa0, 0x9d, 0xc3, 0xf8, 0x24, 0xa5, + 0xda, 0xc2, 0x1e, 0x4b, 0x9a, 0x5c, 0x62, 0x76, 0x8d, 0x76, 0xf9, 0x68, + 0x8b, 0x1f, 0xa3, 0x9d, 0x76, 0x7e, 0xec, 0x19, 0x8f, 0x05, 0x9d, 0x89, + 0x99, 0x16, 0x0d, 0xcf, 0x75, 0x41, 0xdf, 0x4d, 0xdc, 0x81, 0x2a, 0xe7, + 0xed, 0x37, 0xc4, 0x6e, 0x77, 0xa5, 0x3b, 0x7d, 0x5d, 0x9a, 0xfc, 0x63, + 0x88, 0x49, 0x4f, 0xff, 0xd9 +}; +size_t demo_007_jpg_len = 22901; + +const uint8_t demo_008_jpg[] = { + 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x64, 0x00, 0x64, 0x00, 0x00, 0xff, 0xec, 0x00, 0x59, + 0x44, 0x75, 0x63, 0x6b, 0x79, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x02, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x46, 0x00, + 0x53, 0x00, 0x41, 0x00, 0x2f, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x2f, 0x00, 0x38, 0x00, + 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x5c, 0x00, 0x38, 0x00, 0x62, 0x00, 0x33, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x61, 0x00, 0x2e, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x66, 0x00, 0x00, 0xff, 0xee, 0x00, 0x0e, 0x41, 0x64, 0x6f, 0x62, 0x65, + 0x00, 0x64, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xff, 0xdb, 0x00, 0x84, 0x00, + 0x10, 0x0b, 0x0b, 0x0b, 0x0c, 0x0b, 0x10, 0x0c, 0x0c, 0x10, 0x17, 0x0f, + 0x0d, 0x0f, 0x17, 0x1b, 0x14, 0x10, 0x10, 0x14, 0x1b, 0x1f, 0x17, 0x17, + 0x17, 0x17, 0x17, 0x1f, 0x1e, 0x17, 0x1a, 0x1a, 0x1a, 0x1a, 0x17, 0x1e, + 0x1e, 0x23, 0x25, 0x27, 0x25, 0x23, 0x1e, 0x2f, 0x2f, 0x33, 0x33, 0x2f, + 0x2f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x01, 0x11, 0x0f, 0x0f, 0x11, 0x13, 0x11, 0x15, + 0x12, 0x12, 0x15, 0x14, 0x11, 0x14, 0x11, 0x14, 0x1a, 0x14, 0x16, 0x16, + 0x14, 0x1a, 0x26, 0x1a, 0x1a, 0x1c, 0x1a, 0x1a, 0x26, 0x30, 0x23, 0x1e, + 0x1e, 0x1e, 0x1e, 0x23, 0x30, 0x2b, 0x2e, 0x27, 0x27, 0x27, 0x2e, 0x2b, + 0x35, 0x35, 0x30, 0x30, 0x35, 0x35, 0x40, 0x40, 0x3f, 0x40, 0x40, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xc0, 0x00, + 0x11, 0x08, 0x01, 0x90, 0x01, 0x2c, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, + 0x01, 0x03, 0x11, 0x01, 0xff, 0xc4, 0x01, 0x3f, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x01, 0x02, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x01, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x03, 0x04, 0x05, + 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x02, 0x04, 0x02, 0x05, 0x07, 0x06, 0x08, 0x05, 0x03, 0x0c, 0x33, 0x01, + 0x00, 0x02, 0x11, 0x03, 0x04, 0x21, 0x12, 0x31, 0x05, 0x41, 0x51, 0x61, + 0x13, 0x22, 0x71, 0x81, 0x32, 0x06, 0x14, 0x91, 0xa1, 0xb1, 0x42, 0x23, + 0x24, 0x15, 0x52, 0xc1, 0x62, 0x33, 0x34, 0x72, 0x82, 0xd1, 0x43, 0x07, + 0x25, 0x92, 0x53, 0xf0, 0xe1, 0xf1, 0x63, 0x73, 0x35, 0x16, 0xa2, 0xb2, + 0x83, 0x26, 0x44, 0x93, 0x54, 0x64, 0x45, 0xc2, 0xa3, 0x74, 0x36, 0x17, + 0xd2, 0x55, 0xe2, 0x65, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, + 0x46, 0x27, 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, + 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, + 0xc6, 0xd6, 0xe6, 0xf6, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, + 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x11, 0x00, 0x02, 0x02, 0x01, 0x02, 0x04, + 0x04, 0x03, 0x04, 0x05, 0x06, 0x07, 0x07, 0x06, 0x05, 0x35, 0x01, 0x00, + 0x02, 0x11, 0x03, 0x21, 0x31, 0x12, 0x04, 0x41, 0x51, 0x61, 0x71, 0x22, + 0x13, 0x05, 0x32, 0x81, 0x91, 0x14, 0xa1, 0xb1, 0x42, 0x23, 0xc1, 0x52, + 0xd1, 0xf0, 0x33, 0x24, 0x62, 0xe1, 0x72, 0x82, 0x92, 0x43, 0x53, 0x15, + 0x63, 0x73, 0x34, 0xf1, 0x25, 0x06, 0x16, 0xa2, 0xb2, 0x83, 0x07, 0x26, + 0x35, 0xc2, 0xd2, 0x44, 0x93, 0x54, 0xa3, 0x17, 0x64, 0x45, 0x55, 0x36, + 0x74, 0x65, 0xe2, 0xf2, 0xb3, 0x84, 0xc3, 0xd3, 0x75, 0xe3, 0xf3, 0x46, + 0x94, 0xa4, 0x85, 0xb4, 0x95, 0xc4, 0xd4, 0xe4, 0xf4, 0xa5, 0xb5, 0xc5, + 0xd5, 0xe5, 0xf5, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, + 0xe6, 0xf6, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, + 0xc7, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, + 0x00, 0x3f, 0x00, 0xe2, 0x49, 0x3e, 0x9b, 0x47, 0x80, 0x43, 0x3e, 0x0a, + 0x6e, 0x8d, 0x8d, 0x89, 0x9d, 0x66, 0x7f, 0x82, 0x8c, 0x6a, 0x92, 0x91, + 0xff, 0x00, 0x84, 0x1f, 0x14, 0x52, 0xe3, 0xb7, 0x68, 0x03, 0x53, 0x24, + 0xf7, 0xf8, 0x28, 0x11, 0xef, 0x68, 0x1e, 0x2a, 0x6d, 0x99, 0xe1, 0x25, + 0x2c, 0x1a, 0x79, 0xee, 0x8e, 0xe6, 0x1b, 0x05, 0x63, 0x70, 0x9e, 0x25, + 0xba, 0x08, 0xed, 0x3e, 0x6a, 0x04, 0x18, 0x24, 0x7c, 0x15, 0x8c, 0x56, + 0xb5, 0x81, 0x8e, 0x91, 0xcc, 0x94, 0x94, 0xd7, 0xb2, 0x8b, 0x2a, 0xef, + 0x29, 0x9a, 0x4b, 0x9b, 0xa9, 0x5a, 0xc1, 0x95, 0x5f, 0xeb, 0x56, 0x61, + 0xae, 0xe4, 0x38, 0x9e, 0x0f, 0x84, 0xac, 0xa8, 0xd4, 0x81, 0xe3, 0x13, + 0xf0, 0x49, 0x4c, 0x1c, 0xd0, 0x5b, 0xe7, 0xd8, 0xa1, 0x84, 0x57, 0x14, + 0x32, 0x06, 0xed, 0x35, 0x49, 0x49, 0x1d, 0xf4, 0x47, 0xc1, 0x0c, 0x04, + 0x47, 0xfd, 0x11, 0xf0, 0x50, 0x09, 0x29, 0x92, 0x44, 0x77, 0x4e, 0x91, + 0x49, 0x4b, 0xb3, 0x47, 0x26, 0x3c, 0xa7, 0x67, 0xd2, 0x4c, 0xed, 0x1c, + 0x92, 0x94, 0xe1, 0xec, 0x1f, 0x15, 0x16, 0xa9, 0x3b, 0x84, 0x98, 0x92, + 0x99, 0x3f, 0xb0, 0x42, 0xb0, 0x41, 0x84, 0x57, 0x72, 0x86, 0xfe, 0x52, + 0x52, 0x36, 0x7d, 0x2f, 0x92, 0x3b, 0x50, 0x59, 0xf4, 0x91, 0x98, 0x92, + 0x91, 0x34, 0x27, 0x6a, 0x43, 0xba, 0x60, 0x35, 0x84, 0x94, 0xa6, 0x85, + 0x18, 0xf7, 0x1f, 0x81, 0x45, 0x68, 0x51, 0xdb, 0xef, 0xf9, 0x14, 0x94, + 0x8b, 0xc1, 0x19, 0xa3, 0xd9, 0x28, 0x4d, 0x1a, 0xa9, 0x07, 0x11, 0x00, + 0xe8, 0x92, 0x99, 0x80, 0x08, 0x26, 0x40, 0x81, 0xdf, 0xbf, 0xc1, 0x05, + 0xdc, 0xa3, 0x04, 0x27, 0x24, 0xa5, 0xcc, 0x16, 0xa2, 0x61, 0x09, 0xcb, + 0xa0, 0x77, 0x36, 0x30, 0x78, 0x7e, 0x70, 0x43, 0x8f, 0x64, 0xa2, 0xe0, + 0x8f, 0xd7, 0xb1, 0xbc, 0xed, 0xaf, 0x8e, 0x7e, 0x90, 0x49, 0x4f, 0xa6, + 0xd4, 0xe1, 0x56, 0x03, 0x5a, 0xe7, 0x06, 0x89, 0x32, 0x4f, 0xc5, 0x12, + 0x8c, 0x9a, 0xef, 0x0d, 0xf4, 0x5c, 0xd7, 0xbd, 0x9f, 0x48, 0x34, 0xc9, + 0x85, 0x00, 0x03, 0x29, 0x68, 0xfc, 0xe7, 0x77, 0xec, 0x25, 0x67, 0xe4, + 0x65, 0xd3, 0x8a, 0xf6, 0x5e, 0x03, 0xad, 0x76, 0xe8, 0x1b, 0x00, 0x2e, + 0x33, 0xd8, 0xf1, 0xed, 0x49, 0x4e, 0xd5, 0x0c, 0xb9, 0x96, 0x35, 0xee, + 0x10, 0xd9, 0xee, 0x44, 0x91, 0xc2, 0xe3, 0x7a, 0xb7, 0xd4, 0xfe, 0xb3, + 0x9b, 0xd4, 0xf2, 0xb2, 0xa8, 0x15, 0x9a, 0xed, 0xb1, 0xce, 0x6c, 0xbe, + 0x0c, 0x1f, 0x11, 0x0b, 0xa3, 0xb3, 0xae, 0x3b, 0xd0, 0x65, 0xff, 0x00, + 0x67, 0xba, 0x87, 0x57, 0x0f, 0x7d, 0x7e, 0x91, 0xb0, 0x58, 0xd2, 0x63, + 0xdb, 0x67, 0xd1, 0x07, 0xe2, 0xae, 0xd1, 0xd4, 0x06, 0x61, 0x16, 0x62, + 0xd7, 0x68, 0x0d, 0x8f, 0x54, 0xda, 0xdf, 0x49, 0xc0, 0x1e, 0xed, 0x0e, + 0x1e, 0xef, 0x92, 0x4a, 0x78, 0x23, 0xf5, 0x1b, 0xaf, 0x06, 0x93, 0xb6, + 0xad, 0x35, 0xfe, 0x70, 0x70, 0x87, 0xff, 0x00, 0x34, 0x3a, 0x8c, 0xed, + 0xf5, 0xf1, 0xf7, 0x78, 0x6f, 0x77, 0xe5, 0xd8, 0xbd, 0x3d, 0xcf, 0x0e, + 0xf6, 0xba, 0x0f, 0xc4, 0x03, 0xf8, 0x85, 0x4f, 0xec, 0x75, 0x7a, 0x9b, + 0xa2, 0xbd, 0xb1, 0x1e, 0x9e, 0xc1, 0xb6, 0x37, 0x4c, 0xf8, 0xcf, 0x64, + 0x94, 0xf9, 0x37, 0xe6, 0xc2, 0x77, 0x68, 0x47, 0xc1, 0x47, 0xb2, 0x93, + 0xbb, 0x24, 0xa4, 0x7a, 0xef, 0x1e, 0x1d, 0x91, 0xea, 0x12, 0x47, 0xe4, + 0xf1, 0x41, 0x33, 0xbc, 0x2b, 0x14, 0x34, 0xc8, 0xfc, 0xa9, 0x29, 0x9b, + 0x80, 0x80, 0x22, 0x35, 0x3a, 0xa3, 0x1a, 0x8f, 0xaa, 0x6b, 0xe3, 0x69, + 0xd6, 0x13, 0x96, 0xb4, 0xd6, 0xed, 0xc4, 0x78, 0xb4, 0x78, 0x82, 0xac, + 0x32, 0x1e, 0xda, 0xaf, 0x02, 0x7d, 0x41, 0x0e, 0xd3, 0x87, 0x33, 0x47, + 0x04, 0x94, 0xc7, 0x16, 0xd2, 0x2c, 0x7b, 0x8c, 0x92, 0x09, 0xd4, 0x6a, + 0x74, 0x59, 0xfb, 0x1e, 0x3d, 0xe5, 0xa4, 0x31, 0xda, 0xee, 0xed, 0x32, + 0xb4, 0x08, 0x14, 0x55, 0x6d, 0x8e, 0x1f, 0x48, 0x90, 0xcf, 0x19, 0x2a, + 0x95, 0xac, 0xb2, 0xab, 0x3d, 0x33, 0xd8, 0x35, 0xae, 0x1e, 0x71, 0x29, + 0x29, 0x13, 0x84, 0x0e, 0x10, 0x9c, 0x21, 0xdf, 0x72, 0xb1, 0x60, 0x31, + 0xe6, 0x54, 0x32, 0x04, 0x5c, 0x5b, 0x11, 0xb4, 0x06, 0x98, 0xf2, 0x09, + 0x29, 0x6b, 0x34, 0x00, 0x79, 0x04, 0x30, 0x54, 0xec, 0xfe, 0x0a, 0x1b, + 0x4f, 0x25, 0x25, 0x32, 0x04, 0x24, 0x5c, 0x0a, 0x76, 0xd7, 0xa6, 0xaa, + 0x05, 0xa2, 0x74, 0xe1, 0x25, 0x24, 0x61, 0x12, 0xa2, 0xfe, 0x65, 0x36, + 0xd2, 0x38, 0xd0, 0xa6, 0x3a, 0xf3, 0xca, 0x4a, 0x67, 0x32, 0x02, 0x7a, + 0xf9, 0x51, 0x1c, 0x05, 0x26, 0x03, 0x1b, 0xbb, 0x71, 0x3e, 0x69, 0x29, + 0x44, 0xc9, 0x0a, 0x2e, 0xfa, 0x45, 0x49, 0xa3, 0xdc, 0x14, 0x5d, 0xc9, + 0x49, 0x48, 0xdb, 0xf4, 0x91, 0xd9, 0xc2, 0x0b, 0x46, 0xb3, 0xe0, 0x8f, + 0x5e, 0xa0, 0xa4, 0xa4, 0x61, 0x30, 0xfa, 0x4a, 0x4d, 0xee, 0x98, 0x7f, + 0x38, 0x12, 0x52, 0xed, 0x13, 0xa2, 0x44, 0x0d, 0xe7, 0xe0, 0x54, 0x87, + 0x2a, 0x27, 0xe9, 0x9f, 0x81, 0x49, 0x48, 0x87, 0x21, 0x4c, 0xb7, 0x73, + 0x3c, 0xc7, 0x08, 0x7f, 0x9c, 0x00, 0x46, 0x63, 0x4b, 0x80, 0x6f, 0xe2, + 0x92, 0x91, 0xb7, 0x50, 0xa0, 0xed, 0x75, 0x46, 0x73, 0x36, 0xb8, 0x88, + 0x41, 0x78, 0x8d, 0x12, 0x52, 0xe4, 0xfb, 0x21, 0x58, 0xc0, 0x07, 0xf6, + 0x86, 0x27, 0x6f, 0xd2, 0xd7, 0x1f, 0xe7, 0x05, 0x5b, 0x6c, 0x34, 0x9e, + 0xea, 0xd7, 0x4f, 0x1f, 0xe5, 0x3c, 0x30, 0x78, 0xf5, 0x6a, 0xf2, 0xfc, + 0xe0, 0x92, 0x9e, 0xef, 0x36, 0xbe, 0xaf, 0x64, 0xbb, 0x1d, 0xf5, 0x8c, + 0x72, 0x00, 0x6d, 0x6e, 0x6f, 0x71, 0xe6, 0x16, 0x7b, 0x31, 0xba, 0xe5, + 0x0f, 0x16, 0x35, 0xb5, 0x18, 0x76, 0xa6, 0x6c, 0x12, 0x0f, 0x63, 0x2e, + 0x2b, 0xa6, 0xaa, 0xb3, 0x65, 0x0d, 0x8e, 0xc4, 0xfd, 0xf2, 0xa4, 0x2b, + 0xde, 0xc2, 0xd2, 0x01, 0xd4, 0x0f, 0xc5, 0x25, 0x38, 0xb5, 0xb7, 0xeb, + 0x0b, 0x80, 0x61, 0x75, 0x2c, 0x13, 0x0d, 0x00, 0x3b, 0x48, 0xfe, 0xd2, + 0xc3, 0xea, 0x3f, 0x5a, 0xba, 0xce, 0x06, 0x6d, 0xf8, 0x60, 0xd4, 0x4d, + 0x2e, 0xd8, 0x5d, 0xb4, 0x92, 0x63, 0xe2, 0xe5, 0xde, 0x54, 0xc1, 0x33, + 0xdf, 0x91, 0xf9, 0x57, 0x95, 0xfd, 0x61, 0x78, 0x7f, 0x5c, 0xce, 0x70, + 0xe3, 0xd6, 0x78, 0xfb, 0x8c, 0x24, 0xa6, 0xf3, 0x7e, 0xba, 0xf5, 0xd0, + 0x23, 0x7d, 0x67, 0xe2, 0xcf, 0xf6, 0xa2, 0x7f, 0xcf, 0x7e, 0xb1, 0xe9, + 0xf1, 0x5e, 0xfe, 0x37, 0x41, 0x8f, 0xf3, 0x65, 0x73, 0xa0, 0x25, 0xac, + 0x24, 0xa4, 0xca, 0x6e, 0x03, 0xf0, 0x51, 0x03, 0xdc, 0x07, 0x28, 0x8e, + 0x1f, 0x91, 0x25, 0x22, 0x77, 0xd3, 0x6a, 0xb5, 0x59, 0xe0, 0x01, 0xa8, + 0xee, 0x15, 0x76, 0xeb, 0x63, 0x42, 0xb0, 0x58, 0x5b, 0x24, 0x0f, 0x8f, + 0xc1, 0x25, 0x27, 0x07, 0xd6, 0x70, 0x6b, 0x44, 0x01, 0xc9, 0xfe, 0x0a, + 0x56, 0x38, 0xe3, 0x3c, 0x32, 0xbf, 0x75, 0x2e, 0x3b, 0x88, 0xf1, 0x20, + 0x42, 0x0b, 0x1d, 0x03, 0x49, 0x83, 0xcf, 0xfa, 0xf8, 0xab, 0x76, 0x7b, + 0xf1, 0x84, 0xc4, 0x81, 0xf0, 0x49, 0x48, 0x8b, 0xcb, 0x7d, 0xe5, 0x87, + 0x7f, 0xe6, 0x6f, 0xfa, 0x2d, 0xf3, 0x8f, 0x1f, 0x05, 0x00, 0xc2, 0x65, + 0xce, 0x24, 0x93, 0xac, 0x9f, 0x0e, 0xe5, 0x3d, 0x4e, 0x0f, 0x12, 0x75, + 0x3c, 0x72, 0x49, 0xfc, 0x53, 0xb9, 0xec, 0x68, 0x3a, 0xf6, 0x25, 0x25, + 0x24, 0xe9, 0xb8, 0x4d, 0xcc, 0xce, 0x6b, 0x1c, 0x62, 0x9a, 0xfd, 0xf6, + 0x38, 0xf0, 0x1a, 0x35, 0xd5, 0x53, 0xea, 0x22, 0xa3, 0xd4, 0x32, 0x0d, + 0x0e, 0x0e, 0xa4, 0xd8, 0x76, 0x38, 0x70, 0x42, 0xb7, 0x6d, 0x8f, 0xc3, + 0xc1, 0x35, 0x83, 0xb7, 0x23, 0x30, 0x4b, 0xc7, 0x76, 0xd3, 0xd8, 0x1f, + 0x37, 0x2c, 0xd0, 0x34, 0x09, 0x29, 0x4f, 0x12, 0xe8, 0x4e, 0xd6, 0x82, + 0xed, 0x78, 0x02, 0x53, 0xc7, 0xe9, 0x3e, 0xe5, 0x26, 0x81, 0xea, 0xc1, + 0xd2, 0x74, 0x49, 0x4b, 0x6d, 0x73, 0x86, 0x82, 0x1a, 0x91, 0x66, 0x9a, + 0x88, 0x56, 0x5a, 0xc7, 0x12, 0x63, 0x48, 0xe4, 0x76, 0x51, 0x73, 0x41, + 0xd4, 0x99, 0xf0, 0x01, 0x25, 0x35, 0x5c, 0x08, 0x89, 0x49, 0xec, 0xf6, + 0x6f, 0x1f, 0x35, 0x2b, 0x7e, 0x94, 0x22, 0x16, 0xfe, 0xac, 0xe2, 0x7e, + 0x49, 0x29, 0xae, 0xde, 0x14, 0x9a, 0x34, 0x95, 0x16, 0x04, 0x46, 0x0d, + 0x3f, 0x82, 0x4a, 0x58, 0x7d, 0x24, 0x33, 0xc9, 0x45, 0x8d, 0x4a, 0x19, + 0xe5, 0x25, 0x31, 0x1c, 0x22, 0xd4, 0x20, 0x21, 0xff, 0x00, 0x72, 0x35, + 0x51, 0xb0, 0xf6, 0x49, 0x4c, 0x1b, 0xc9, 0x4d, 0x1e, 0xf0, 0xa4, 0x39, + 0x29, 0xa0, 0x6f, 0x09, 0x29, 0x9f, 0x06, 0x14, 0x48, 0xf7, 0x9f, 0x30, + 0x54, 0xdc, 0x25, 0xda, 0x26, 0x8f, 0xd2, 0x19, 0xec, 0xd2, 0x52, 0x53, + 0x56, 0x3d, 0xff, 0x00, 0x34, 0x6a, 0x4f, 0xbc, 0x41, 0x42, 0x1a, 0xbd, + 0x12, 0x90, 0x77, 0xca, 0x4a, 0x49, 0x6f, 0xd2, 0x2e, 0xef, 0xdb, 0xe2, + 0xab, 0xbc, 0x6a, 0xad, 0x58, 0x15, 0x77, 0x0d, 0x52, 0x53, 0x13, 0x1b, + 0x0c, 0x6a, 0x55, 0xbc, 0x00, 0x3f, 0x6a, 0x61, 0x78, 0x9b, 0x6b, 0xff, + 0x00, 0xaa, 0x0a, 0xa1, 0x1a, 0x2b, 0x78, 0x03, 0xfc, 0xab, 0x87, 0x3a, + 0x0f, 0x56, 0xbf, 0xfa, 0xa0, 0x92, 0x9f, 0x55, 0xc7, 0x00, 0x62, 0xd7, + 0xa6, 0xb3, 0xcf, 0xcd, 0x26, 0x8f, 0x71, 0x31, 0xa6, 0xef, 0x70, 0xfc, + 0x14, 0x1a, 0xf2, 0x31, 0xe9, 0x23, 0xc4, 0xfe, 0x54, 0x51, 0xb5, 0xaf, + 0x7c, 0xf2, 0x40, 0x29, 0x29, 0x25, 0x50, 0x1c, 0xd3, 0xf0, 0xd7, 0xf0, + 0x5e, 0x45, 0xd6, 0x89, 0x77, 0x58, 0xce, 0x27, 0x59, 0xc8, 0xb7, 0xfe, + 0xad, 0xcb, 0xd7, 0x1c, 0xf0, 0xc8, 0x70, 0x00, 0xc1, 0x1f, 0x95, 0x79, + 0x17, 0x58, 0x11, 0xd5, 0xb3, 0xbf, 0xf0, 0xc5, 0xbf, 0xf5, 0x65, 0x25, + 0x35, 0x87, 0xd1, 0x9f, 0x8a, 0x5f, 0x98, 0x93, 0x44, 0xb3, 0xe6, 0xa3, + 0xd9, 0x25, 0x36, 0x6a, 0x6e, 0xeb, 0x61, 0x49, 0xfc, 0x90, 0x35, 0x4d, + 0x5b, 0x7d, 0xee, 0xf8, 0x27, 0xfc, 0xe2, 0x92, 0x98, 0xd6, 0x3f, 0x4a, + 0x3e, 0x3f, 0xc5, 0x68, 0x81, 0x13, 0xe1, 0x0a, 0x8d, 0x66, 0x6c, 0x68, + 0x23, 0x8f, 0xef, 0x5a, 0x00, 0x48, 0x25, 0x25, 0x35, 0x5e, 0x22, 0xc3, + 0xb4, 0xed, 0x52, 0x6d, 0xc0, 0xb4, 0xb7, 0xb0, 0xf0, 0xfc, 0xaa, 0x36, + 0xff, 0x00, 0x38, 0xe5, 0x06, 0x34, 0xed, 0x79, 0x07, 0x40, 0x0f, 0xcd, + 0x25, 0x33, 0x65, 0x76, 0xb9, 0xfb, 0x58, 0x04, 0x9f, 0xde, 0x70, 0x03, + 0xf1, 0x2a, 0x4f, 0x2d, 0xa5, 0xe0, 0x87, 0x36, 0xdb, 0x47, 0x70, 0x3d, + 0x8d, 0x3f, 0x3e, 0x50, 0x2b, 0xec, 0x9d, 0xdc, 0xca, 0x4a, 0x62, 0xe7, + 0x3d, 0xee, 0x73, 0xec, 0x71, 0x73, 0x9d, 0xa9, 0x71, 0xe4, 0x94, 0xa3, + 0x84, 0x86, 0xb2, 0x53, 0xa4, 0xa5, 0x38, 0x43, 0xcb, 0xbb, 0x08, 0x4c, + 0xe0, 0x4f, 0xb8, 0x7d, 0xe9, 0xdf, 0x24, 0xbc, 0x0f, 0x29, 0x50, 0x6b, + 0x8b, 0x0c, 0x72, 0x12, 0x53, 0x65, 0x97, 0xc0, 0xec, 0x7c, 0x41, 0xf1, + 0x51, 0x7d, 0xa7, 0x50, 0xdf, 0x68, 0xf2, 0x51, 0x06, 0xb7, 0x79, 0x15, + 0x3f, 0x4a, 0xbe, 0x49, 0x30, 0x92, 0x91, 0xd7, 0x51, 0xb0, 0xc8, 0xe3, + 0xb2, 0x9e, 0x5c, 0x32, 0xb1, 0x50, 0xe7, 0x92, 0x14, 0xc6, 0x43, 0x6b, + 0x6c, 0x33, 0xe9, 0x71, 0x2a, 0xbb, 0xc1, 0x23, 0x73, 0xb9, 0x29, 0x29, + 0x83, 0x02, 0x23, 0x00, 0xf9, 0xf6, 0x50, 0x62, 0x23, 0x4c, 0x32, 0x3b, + 0x93, 0xa2, 0x4a, 0x5a, 0x39, 0x42, 0x23, 0xdc, 0x8b, 0xe2, 0xa1, 0xf9, + 0xc9, 0x29, 0x8c, 0x6a, 0x11, 0x1a, 0x40, 0x67, 0xc4, 0xa8, 0xf7, 0xfb, + 0xd3, 0x86, 0xcb, 0x47, 0xc5, 0x25, 0x2c, 0xde, 0x52, 0x1f, 0x4c, 0x14, + 0x9b, 0xdd, 0x3c, 0x9d, 0xc1, 0x25, 0x24, 0x6c, 0x19, 0x9e, 0x7b, 0x28, + 0xb8, 0x7e, 0x91, 0xc3, 0xf9, 0x25, 0x49, 0xbc, 0x4a, 0x56, 0x69, 0x63, + 0xbf, 0xaa, 0x52, 0x53, 0x52, 0xbd, 0x5e, 0x14, 0xe9, 0xfa, 0x51, 0xe6, + 0xa3, 0x56, 0x96, 0x05, 0x3a, 0x7f, 0x9c, 0xf9, 0xa4, 0xa6, 0xc5, 0xad, + 0x80, 0xaa, 0x3a, 0x63, 0xe2, 0xaf, 0x5e, 0xdd, 0x15, 0x37, 0xb6, 0x08, + 0x1e, 0x09, 0x29, 0x67, 0x0f, 0x6a, 0xb7, 0x82, 0x1c, 0xde, 0xa9, 0x82, + 0x48, 0xe6, 0xd6, 0x47, 0xf9, 0xc1, 0x55, 0x73, 0x74, 0x57, 0xb1, 0x09, + 0xfd, 0xa9, 0x82, 0x4e, 0xb1, 0x6b, 0x23, 0xe4, 0x42, 0x4a, 0x7d, 0x20, + 0x4f, 0xa5, 0x54, 0x0e, 0x09, 0x8f, 0xbd, 0x58, 0x79, 0x97, 0xba, 0x0f, + 0x61, 0x3f, 0x09, 0x55, 0xeb, 0xd6, 0xba, 0xc7, 0x8e, 0xbf, 0x7b, 0x8a, + 0xb0, 0xe1, 0x17, 0xbc, 0x7f, 0x24, 0x7e, 0x54, 0x94, 0xc1, 0xf2, 0x5b, + 0x1d, 0xb4, 0xe3, 0xe2, 0xbc, 0xa3, 0xac, 0x69, 0xd5, 0xb3, 0x7f, 0xe3, + 0xed, 0xff, 0x00, 0xab, 0x2b, 0xd6, 0x5f, 0x5b, 0x9d, 0x0d, 0x6f, 0xd2, + 0x27, 0x43, 0xf3, 0x5e, 0x4f, 0xd6, 0x07, 0xf9, 0x5b, 0x37, 0xbf, 0xe9, + 0xed, 0xff, 0x00, 0xaa, 0x29, 0x29, 0x05, 0x5f, 0xcd, 0x93, 0xe6, 0x87, + 0x07, 0x6a, 0x2d, 0x3f, 0xcd, 0xbb, 0xe2, 0xa3, 0x03, 0xd3, 0x8f, 0x3e, + 0x52, 0x53, 0x65, 0xad, 0xe4, 0xa8, 0x8e, 0x4a, 0x29, 0x69, 0x0c, 0xf8, + 0xa1, 0x86, 0x80, 0x24, 0xfc, 0x92, 0x52, 0xaa, 0xfe, 0x70, 0x69, 0x11, + 0xdd, 0x68, 0x37, 0x82, 0x7c, 0xf8, 0x54, 0xa9, 0x69, 0xde, 0x3c, 0x15, + 0xca, 0x65, 0xcc, 0x91, 0xe7, 0xf9, 0x52, 0x52, 0x0b, 0x41, 0x97, 0x14, + 0x36, 0x82, 0x58, 0xf2, 0x38, 0x00, 0xe8, 0x8f, 0x6c, 0x87, 0x47, 0x8f, + 0x3f, 0x24, 0x16, 0x7d, 0x0b, 0x27, 0x90, 0x0a, 0x4a, 0x46, 0xce, 0x02, + 0x91, 0xd4, 0xa5, 0x5f, 0x0a, 0x51, 0x32, 0x47, 0x64, 0x94, 0x8f, 0xb9, + 0x4f, 0xc9, 0x4e, 0x01, 0x48, 0x0f, 0x70, 0x49, 0x4a, 0x6c, 0xc5, 0xd1, + 0xdf, 0x43, 0xf0, 0x08, 0x47, 0xe9, 0x0f, 0x82, 0xb1, 0x5d, 0x64, 0xfa, + 0xc4, 0x7e, 0x6b, 0x49, 0x28, 0x04, 0x43, 0x87, 0xc1, 0x25, 0x32, 0xdb, + 0x30, 0x13, 0x86, 0x8e, 0x0a, 0x93, 0x46, 0xa1, 0x3c, 0x70, 0x92, 0x98, + 0xed, 0x01, 0xc3, 0x44, 0xad, 0xfa, 0x23, 0xcd, 0x4c, 0xfd, 0x21, 0xe2, + 0x9a, 0xf6, 0xc5, 0x6c, 0x77, 0x88, 0x49, 0x48, 0x47, 0x03, 0xe6, 0x8a, + 0xcd, 0xc1, 0x9a, 0x09, 0x07, 0xbf, 0x82, 0x10, 0xd4, 0x01, 0xf1, 0x56, + 0x18, 0xc7, 0x1a, 0xb4, 0xfa, 0x3f, 0x9d, 0xf2, 0x49, 0x48, 0x8a, 0x80, + 0xe4, 0xa9, 0xc6, 0x8a, 0x1e, 0x29, 0x29, 0x4d, 0x12, 0xe8, 0xf2, 0x2a, + 0x6c, 0x6c, 0x36, 0x3c, 0x14, 0x1a, 0x0e, 0xef, 0x91, 0x44, 0x66, 0xac, + 0x9e, 0xf2, 0x92, 0x91, 0x37, 0x94, 0xe6, 0x34, 0x4e, 0xc1, 0xa9, 0x4c, + 0xe1, 0x09, 0x29, 0x33, 0x74, 0x6c, 0xa8, 0xb8, 0x6e, 0xbe, 0x3c, 0x5a, + 0x7f, 0x22, 0x9b, 0x41, 0xf4, 0xbe, 0x2a, 0x04, 0xed, 0xb8, 0x3b, 0xc0, + 0x1f, 0xc8, 0x92, 0x9a, 0xa2, 0x5b, 0x60, 0xf8, 0xa9, 0xd5, 0xfc, 0xe7, + 0xcd, 0x45, 0xc3, 0xf4, 0x9f, 0x12, 0x89, 0x50, 0xfd, 0x24, 0xf8, 0x14, + 0x94, 0xdb, 0xb4, 0xcb, 0x44, 0x77, 0x54, 0xec, 0x32, 0xe9, 0x0a, 0xf3, + 0xda, 0x4b, 0x34, 0xd2, 0x15, 0x37, 0xb4, 0x02, 0x63, 0xb4, 0x24, 0xa6, + 0x36, 0x7d, 0x1f, 0x8a, 0xbb, 0x8c, 0x67, 0xa8, 0xe1, 0x47, 0x22, 0xe6, + 0x7e, 0x50, 0xa9, 0xd9, 0xab, 0x40, 0x0a, 0xc6, 0x01, 0x3f, 0xb4, 0xf0, + 0xc9, 0xe0, 0xdc, 0xcf, 0xfa, 0xa0, 0x92, 0x9f, 0x4d, 0xaa, 0x03, 0x2b, + 0x2e, 0xf1, 0xff, 0x00, 0xbf, 0x2b, 0x0e, 0x03, 0xd5, 0x71, 0xfe, 0x48, + 0xfc, 0xaa, 0xab, 0x1a, 0x4d, 0x60, 0x01, 0xac, 0x9d, 0x7e, 0x6a, 0xcc, + 0x45, 0xa4, 0x72, 0x4b, 0x04, 0xfd, 0xe9, 0x29, 0x90, 0x61, 0xf5, 0x18, + 0xe9, 0xfc, 0xe1, 0xf9, 0x57, 0x92, 0xf5, 0xa0, 0x07, 0x56, 0xcd, 0x1c, + 0x7e, 0x9e, 0xdd, 0x3f, 0xb4, 0x57, 0xae, 0x48, 0x0e, 0x69, 0x3c, 0xb4, + 0x83, 0xf8, 0xaf, 0x26, 0xeb, 0xc3, 0xfc, 0xb3, 0x9d, 0xff, 0x00, 0x86, + 0x2d, 0xff, 0x00, 0xaa, 0x29, 0x29, 0xab, 0x47, 0xf3, 0x4f, 0xf8, 0x85, + 0x1d, 0xa7, 0xd3, 0xfe, 0xd2, 0x9e, 0x38, 0xfd, 0x1d, 0x9f, 0x24, 0xa3, + 0xf4, 0x73, 0xe6, 0x92, 0x9b, 0xee, 0xac, 0xfa, 0x7e, 0x70, 0xa0, 0x6a, + 0xd0, 0x78, 0x15, 0x6d, 0xcd, 0xf6, 0x7e, 0x45, 0x1b, 0x6b, 0x86, 0xb7, + 0x6a, 0x4a, 0x6b, 0x56, 0x00, 0x2e, 0x3d, 0xc0, 0x56, 0xb1, 0x84, 0xd0, + 0x3e, 0x0a, 0x95, 0x9b, 0x9b, 0x60, 0x1c, 0x12, 0xdf, 0xc2, 0x55, 0xde, + 0x9a, 0xe6, 0xbd, 0xde, 0x94, 0xc9, 0x02, 0x42, 0x4a, 0x47, 0x63, 0x41, + 0x07, 0xcb, 0xf8, 0xa1, 0x35, 0x91, 0x55, 0x86, 0x79, 0x1c, 0x2b, 0x17, + 0x31, 0xc1, 0xd6, 0x34, 0x72, 0x38, 0x50, 0x63, 0x1d, 0xf6, 0x7b, 0x49, + 0x12, 0x43, 0x79, 0xf0, 0x49, 0x4d, 0x46, 0xe8, 0x02, 0x2d, 0x4d, 0x96, + 0xb8, 0x9e, 0x38, 0x53, 0xaa, 0xb0, 0x59, 0x31, 0xaa, 0x99, 0xaf, 0x6e, + 0xe3, 0xf9, 0xae, 0x10, 0x47, 0xdc, 0x92, 0x90, 0xb1, 0xbe, 0xe1, 0x3d, + 0x82, 0x89, 0x6c, 0x10, 0x8e, 0xd1, 0xee, 0xf9, 0x21, 0x91, 0xdd, 0x25, + 0x33, 0xa0, 0x7b, 0x72, 0x4c, 0xc0, 0xdb, 0xc7, 0x8a, 0xa8, 0xe1, 0x36, + 0x7c, 0x82, 0xb8, 0xcd, 0xad, 0xf5, 0x67, 0x97, 0x08, 0x01, 0x56, 0xb0, + 0x45, 0xd1, 0xf0, 0x49, 0x4c, 0xea, 0x6e, 0xbf, 0x22, 0xa4, 0x1b, 0xe2, + 0xa7, 0x4b, 0x24, 0x13, 0xc0, 0x00, 0xfe, 0x44, 0x46, 0x33, 0x49, 0x1a, + 0xa4, 0xa4, 0x05, 0xb0, 0xef, 0x82, 0x85, 0xe3, 0xf4, 0x75, 0xf9, 0x0f, + 0xe2, 0x8e, 0xe1, 0xcf, 0x90, 0x42, 0xb8, 0x7e, 0x85, 0x9f, 0x04, 0x94, + 0x80, 0xc4, 0x35, 0x5b, 0x60, 0x77, 0xd9, 0xe2, 0x34, 0x3a, 0x93, 0xf0, + 0x55, 0x08, 0x80, 0xdf, 0x32, 0xaf, 0x6e, 0xdb, 0x8f, 0xb0, 0xfe, 0x74, + 0x47, 0xe4, 0x29, 0x29, 0xad, 0x12, 0xd0, 0x84, 0x04, 0x92, 0xac, 0x01, + 0xcc, 0x7c, 0x90, 0x40, 0xfa, 0x5f, 0x04, 0x94, 0xb5, 0x40, 0x7a, 0xa0, + 0x1e, 0x08, 0x21, 0x19, 0x95, 0x6d, 0x64, 0x1e, 0x50, 0xaa, 0xfe, 0x72, + 0x7c, 0x01, 0x28, 0x96, 0xd8, 0xe2, 0x00, 0x61, 0x87, 0x14, 0x94, 0x8a, + 0xb1, 0xa9, 0x48, 0xb7, 0x52, 0xa4, 0xc1, 0xa9, 0x84, 0xfb, 0x0e, 0xa7, + 0xc4, 0x68, 0x92, 0x92, 0x35, 0xbf, 0xa2, 0x50, 0x2d, 0xfd, 0x38, 0x07, + 0xc0, 0xfe, 0x44, 0x76, 0x8f, 0x60, 0xf8, 0x28, 0x00, 0x0e, 0x4b, 0x3e, + 0x7f, 0x91, 0x25, 0x34, 0x5f, 0xfc, 0xe0, 0x46, 0xc7, 0x68, 0x73, 0x9e, + 0x3b, 0xcc, 0x81, 0xe4, 0xa3, 0x6b, 0x7f, 0x4a, 0x3e, 0x28, 0xb8, 0xac, + 0xfd, 0x24, 0xf6, 0x05, 0x25, 0x36, 0xed, 0x6c, 0x55, 0xf2, 0x59, 0xee, + 0x6c, 0x12, 0x07, 0x92, 0xd7, 0xbd, 0x9f, 0xa2, 0xf9, 0x2c, 0xdb, 0x40, + 0x04, 0x94, 0x94, 0x84, 0xeb, 0x01, 0x5b, 0xc3, 0x00, 0x75, 0x3c, 0x30, + 0xd1, 0x3b, 0x2e, 0x67, 0xe5, 0x55, 0x49, 0xfe, 0x0a, 0xe7, 0x4f, 0x61, + 0x1d, 0x5b, 0x14, 0x9e, 0x0d, 0xcd, 0xfc, 0x0a, 0x4a, 0x7d, 0x1e, 0xb3, + 0xfa, 0x16, 0x19, 0xee, 0xe9, 0xfb, 0xca, 0x38, 0x70, 0x36, 0x98, 0xfd, + 0xdf, 0xe2, 0xa9, 0xd2, 0xf9, 0x66, 0xd2, 0x62, 0x4b, 0xa3, 0xef, 0x2a, + 0xd3, 0x24, 0x38, 0x4f, 0x10, 0x75, 0xed, 0xa2, 0x4a, 0x64, 0xf2, 0x48, + 0x1e, 0x13, 0xfd, 0xeb, 0xcb, 0x7a, 0xeb, 0x7f, 0xca, 0xd9, 0x87, 0xbf, + 0xac, 0xff, 0x00, 0xca, 0xbd, 0x4d, 0xe4, 0x36, 0x07, 0x62, 0xe1, 0x11, + 0xc9, 0x12, 0xbc, 0xc7, 0xaf, 0x88, 0xea, 0xd9, 0xb1, 0xfe, 0x99, 0xff, + 0x00, 0x95, 0x25, 0x34, 0xb1, 0x1b, 0x35, 0xdd, 0xf2, 0x4b, 0x6f, 0xe8, + 0xfe, 0x6a, 0xcf, 0x4a, 0xad, 0xaf, 0xf5, 0x83, 0xb8, 0x80, 0xa5, 0xe8, + 0x37, 0xd4, 0xd9, 0x1e, 0xdd, 0xf1, 0x29, 0x29, 0xb6, 0xd0, 0x5a, 0x1a, + 0x0e, 0xa4, 0xb7, 0xdd, 0xf1, 0x2a, 0x4d, 0x6e, 0xe0, 0xd0, 0x39, 0x6f, + 0x28, 0xef, 0xa8, 0x8e, 0x3b, 0x42, 0x86, 0xc3, 0x05, 0xc3, 0x8d, 0x34, + 0x49, 0x4e, 0x76, 0x5b, 0x7f, 0x4e, 0x5b, 0xc7, 0xb4, 0x7f, 0x14, 0xdd, + 0x3c, 0x58, 0xcc, 0xca, 0xe0, 0x10, 0x67, 0x55, 0x66, 0xfa, 0xb7, 0xd8, + 0xf7, 0x6b, 0xb9, 0xa1, 0xa3, 0xe5, 0xa9, 0x5a, 0x5d, 0x2b, 0x1d, 0xa6, + 0xb7, 0x64, 0x58, 0x35, 0xe1, 0xa9, 0x29, 0xa9, 0x98, 0xc8, 0x7b, 0xcc, + 0x76, 0x55, 0xeb, 0xdc, 0x71, 0x6f, 0x03, 0x80, 0x04, 0x9f, 0x9a, 0xbf, + 0x98, 0x3d, 0xcf, 0x71, 0xf0, 0xe1, 0x52, 0x65, 0x6f, 0x38, 0xd6, 0xbc, + 0x18, 0x60, 0x1e, 0xe1, 0xe3, 0x29, 0x29, 0x8d, 0x2c, 0x86, 0x4f, 0x68, + 0x52, 0x78, 0x30, 0x23, 0x59, 0x3c, 0x29, 0x52, 0xd9, 0xae, 0x07, 0x82, + 0x33, 0xea, 0x77, 0xb7, 0x61, 0x0d, 0x70, 0x89, 0x27, 0xcd, 0x25, 0x34, + 0xf6, 0x10, 0x4f, 0x88, 0x50, 0x2d, 0xd0, 0x47, 0x72, 0xad, 0x39, 0xa0, + 0xb9, 0xd1, 0xfe, 0xa1, 0x08, 0xb2, 0x76, 0xfc, 0x7f, 0x8a, 0x4a, 0x60, + 0x47, 0xb5, 0xc2, 0x39, 0x3c, 0xf7, 0x55, 0xde, 0x3f, 0x58, 0x8f, 0x87, + 0xe4, 0x57, 0xb2, 0x69, 0x70, 0xad, 0xae, 0x69, 0x89, 0x27, 0x72, 0xab, + 0xb0, 0x8c, 0x92, 0xde, 0xe2, 0x3f, 0x22, 0x4a, 0x4f, 0x5b, 0x4f, 0xa6, + 0xe0, 0x39, 0x31, 0xfc, 0x51, 0x58, 0xd9, 0x66, 0x89, 0x06, 0xed, 0x6e, + 0xe3, 0xc6, 0x83, 0xef, 0x95, 0x31, 0xab, 0x64, 0x68, 0x3b, 0x7d, 0xe9, + 0x29, 0xa9, 0x6b, 0x61, 0xc4, 0x72, 0x85, 0x68, 0xfd, 0x0b, 0x55, 0x8b, + 0x01, 0x9d, 0x7c, 0xd0, 0x1c, 0xcd, 0xdb, 0x5a, 0x7e, 0x8b, 0xb6, 0xcf, + 0xc0, 0x98, 0x49, 0x4d, 0xfe, 0x99, 0xf5, 0x7e, 0xde, 0xa1, 0x4b, 0x2e, + 0x7b, 0xcd, 0x75, 0xfe, 0x68, 0x68, 0x97, 0x1f, 0xbf, 0x85, 0xd0, 0xd1, + 0xf5, 0x6b, 0x05, 0xad, 0xdb, 0x61, 0x75, 0x9b, 0x3b, 0x93, 0xdc, 0xfc, + 0x14, 0xb0, 0x5e, 0x03, 0x59, 0x5d, 0x6d, 0x30, 0xd0, 0x01, 0x00, 0x0e, + 0xc3, 0x40, 0x3f, 0xbd, 0x5f, 0xaa, 0xf7, 0x6c, 0x00, 0xb4, 0xee, 0x7b, + 0xb4, 0x32, 0x20, 0xfc, 0x92, 0x53, 0x41, 0xff, 0x00, 0x56, 0xba, 0x76, + 0xd0, 0xda, 0xdb, 0x05, 0xdc, 0xcf, 0x2b, 0x2f, 0x2f, 0xea, 0xc3, 0x1b, + 0xb8, 0xd4, 0x4b, 0x3b, 0x69, 0xa8, 0xfb, 0x8a, 0xea, 0x8d, 0x87, 0xd5, + 0x82, 0x1c, 0x03, 0x44, 0xea, 0x37, 0x42, 0x15, 0xcc, 0xf5, 0x19, 0x2d, + 0xe4, 0x9d, 0x46, 0x9a, 0xa4, 0xa7, 0x80, 0xc8, 0xe9, 0x39, 0x98, 0xc5, + 0xc4, 0xb7, 0x7b, 0x36, 0x91, 0xb9, 0xbf, 0xf9, 0x1e, 0x55, 0x5a, 0x18, + 0xf7, 0xe4, 0x86, 0xfe, 0xe0, 0x97, 0x2e, 0xc3, 0x2e, 0x9b, 0x37, 0xba, + 0xd0, 0xd9, 0x0d, 0x99, 0x6f, 0x07, 0x4f, 0x25, 0x82, 0xee, 0x9d, 0x93, + 0x8a, 0x2c, 0xc8, 0x70, 0x1e, 0x9d, 0xce, 0x73, 0x98, 0xf0, 0x41, 0xf6, + 0x76, 0xf3, 0x49, 0x4e, 0x7d, 0x1c, 0x99, 0xf1, 0x47, 0x27, 0x58, 0xed, + 0xfe, 0xc4, 0x1a, 0x74, 0x04, 0xab, 0x2d, 0x6b, 0x48, 0x1d, 0xa7, 0xf2, + 0x84, 0x94, 0xb8, 0x12, 0xd0, 0x23, 0xb2, 0x0b, 0x44, 0x65, 0xb0, 0x78, + 0x93, 0xf9, 0x15, 0xb6, 0xed, 0x2d, 0x07, 0xc0, 0x2a, 0xe7, 0xfa, 0x65, + 0x50, 0x27, 0x5f, 0xe0, 0x92, 0x9a, 0xb9, 0x0d, 0x8b, 0xa3, 0xcd, 0x1b, + 0x06, 0xb2, 0xeb, 0x88, 0xfe, 0x51, 0x51, 0xc9, 0x00, 0x5e, 0x27, 0xf7, + 0x86, 0x8a, 0xd7, 0x4c, 0x60, 0x37, 0xbc, 0xf6, 0x6b, 0x8f, 0xe5, 0x49, + 0x4d, 0x8c, 0xdd, 0xb5, 0xb0, 0x0e, 0x01, 0xd4, 0xac, 0xd7, 0x7a, 0x6e, + 0x6c, 0xb7, 0xe3, 0xaf, 0xe2, 0xb5, 0x73, 0x9a, 0x1c, 0x01, 0x76, 0xb1, + 0xdb, 0xe2, 0xb2, 0x9d, 0x59, 0x0f, 0x02, 0x38, 0xd0, 0x84, 0x94, 0xd6, + 0xb4, 0xcd, 0xa1, 0xa3, 0x89, 0x0b, 0x47, 0x1a, 0x3f, 0x69, 0xe3, 0x6d, + 0x33, 0xb6, 0xe6, 0xea, 0x3c, 0xca, 0xa5, 0xe9, 0xc5, 0x9b, 0x8f, 0x00, + 0xea, 0xaf, 0x60, 0xd2, 0x2b, 0xcd, 0xc7, 0x8e, 0x5b, 0x70, 0x9f, 0x9b, + 0xb4, 0x49, 0x4f, 0x7b, 0x43, 0x86, 0xd9, 0xec, 0x4b, 0xbf, 0x2a, 0xb9, + 0xea, 0x38, 0x9d, 0x91, 0xc8, 0x3c, 0x2a, 0x78, 0xcd, 0x8a, 0xda, 0x3c, + 0xce, 0x9f, 0x35, 0x6e, 0xbd, 0x01, 0x24, 0x77, 0x31, 0xf7, 0x24, 0xa6, + 0x57, 0xb0, 0x1d, 0xa4, 0x70, 0xde, 0x00, 0xed, 0x0b, 0xcd, 0x7a, 0xfb, + 0x08, 0xea, 0xd9, 0x93, 0xde, 0xd7, 0xfe, 0x55, 0xe9, 0x2e, 0x32, 0x34, + 0xf3, 0xd5, 0x79, 0xef, 0xd6, 0x06, 0xff, 0x00, 0x95, 0xb2, 0xcf, 0x6f, + 0x50, 0xa4, 0xa6, 0x8f, 0x4d, 0x25, 0xa2, 0xf8, 0xd1, 0xd0, 0x20, 0xa6, + 0x93, 0xe9, 0x7a, 0x9f, 0x9d, 0xbe, 0x7e, 0x6a, 0x78, 0x0d, 0xf7, 0x5c, + 0x3f, 0x92, 0x3f, 0x2a, 0x96, 0xdf, 0xd5, 0xfc, 0xb7, 0xff, 0x00, 0x04, + 0x94, 0xec, 0x9a, 0xc9, 0x1a, 0x0d, 0x49, 0x92, 0x87, 0x5b, 0x0b, 0x77, + 0x07, 0x70, 0x0c, 0xc2, 0xb6, 0x1b, 0xa1, 0x3d, 0xc2, 0x03, 0xd8, 0xe2, + 0x4e, 0xbe, 0xc1, 0xcf, 0xcb, 0x52, 0x92, 0x9a, 0xcc, 0x60, 0x79, 0xc8, + 0xb2, 0x78, 0x64, 0x7e, 0x45, 0xa1, 0x82, 0xd1, 0xfb, 0x3d, 0xa4, 0x1e, + 0x49, 0x55, 0x30, 0xdc, 0x1f, 0x46, 0x5e, 0x90, 0x7d, 0xa1, 0x5b, 0xe9, + 0xe0, 0xfe, 0xcf, 0x6c, 0xf6, 0x27, 0xf2, 0xa4, 0xa6, 0xa6, 0x78, 0x1b, + 0x9d, 0xa7, 0x60, 0xa8, 0xfa, 0x92, 0xc7, 0x56, 0x7f, 0x39, 0xae, 0x31, + 0xf7, 0x2d, 0x2c, 0xc6, 0x88, 0xd3, 0x52, 0x55, 0x03, 0x51, 0x6d, 0x56, + 0xbe, 0x01, 0x21, 0x9a, 0x9f, 0x00, 0x4f, 0x64, 0x94, 0xb6, 0x28, 0x05, + 0x8d, 0xd3, 0x5d, 0x7e, 0xe4, 0x6c, 0x82, 0x77, 0x18, 0xd2, 0x23, 0xf2, + 0x28, 0x62, 0x4f, 0xa4, 0x1c, 0x04, 0xc0, 0x56, 0x6c, 0xa8, 0x00, 0xf2, + 0xe3, 0xee, 0x3a, 0x8f, 0x84, 0x24, 0xa6, 0xa3, 0x44, 0x82, 0x4e, 0xa7, + 0xb2, 0x8b, 0x9b, 0xf4, 0x07, 0xf2, 0x87, 0xe5, 0x46, 0x6b, 0x7d, 0x84, + 0xa8, 0x1f, 0xa7, 0x5e, 0x9c, 0xbc, 0x24, 0xa4, 0x97, 0x33, 0x71, 0x0c, + 0xe3, 0x53, 0xf9, 0x55, 0x3b, 0x18, 0x06, 0x7d, 0x9e, 0x51, 0xf9, 0x16, + 0x85, 0x8c, 0x1f, 0x6a, 0x60, 0xf1, 0x06, 0x55, 0x4b, 0x07, 0xeb, 0xf7, + 0x78, 0x02, 0x3f, 0x22, 0x4a, 0x4d, 0xb0, 0xbe, 0x97, 0x0f, 0x9f, 0xf9, + 0xa3, 0xfd, 0xa9, 0xa2, 0x29, 0x04, 0x1d, 0x78, 0x3f, 0x7a, 0x9b, 0xc8, + 0x63, 0x20, 0xf7, 0x0e, 0x8f, 0xb8, 0x25, 0xb0, 0x31, 0x84, 0x0d, 0x48, + 0xee, 0x52, 0x53, 0x52, 0xee, 0x0b, 0x8f, 0x3c, 0x2a, 0xda, 0xef, 0xae, + 0x48, 0x0d, 0x00, 0x39, 0xc4, 0xf6, 0x6b, 0x4c, 0x95, 0x6a, 0xe1, 0xa1, + 0xdd, 0xcf, 0x8a, 0x0e, 0x4d, 0x40, 0xe2, 0xd6, 0x43, 0x77, 0x39, 0xe0, + 0x36, 0x3e, 0x27, 0x54, 0x94, 0xf4, 0x18, 0xf9, 0x39, 0x39, 0xe4, 0x33, + 0x08, 0x7b, 0x08, 0x96, 0xd9, 0x67, 0xb0, 0x19, 0xfc, 0x55, 0xc6, 0xe2, + 0x75, 0x46, 0x38, 0x4b, 0xa8, 0x86, 0x80, 0x4b, 0x7d, 0xd3, 0xa8, 0xf1, + 0x1c, 0xac, 0xac, 0x50, 0xea, 0xb1, 0x5f, 0x7d, 0x81, 0x95, 0x3d, 0x8e, + 0x86, 0x41, 0x77, 0xa8, 0xf6, 0x0e, 0xe5, 0xd3, 0xa4, 0x7c, 0x15, 0xae, + 0xa1, 0x66, 0x45, 0x9d, 0x2f, 0x1e, 0xf6, 0x0f, 0xd3, 0x96, 0x6e, 0x93, + 0x2d, 0xd0, 0xe8, 0x24, 0x84, 0x94, 0xdf, 0x9e, 0xa8, 0xd6, 0xbd, 0xc0, + 0x55, 0x27, 0xe8, 0x92, 0xe7, 0x81, 0xf3, 0x10, 0xa8, 0xbf, 0xaa, 0x75, + 0x7a, 0xa1, 0xae, 0x6d, 0x2d, 0xd8, 0x60, 0xea, 0x79, 0xfb, 0x91, 0x71, + 0x6a, 0xce, 0xa7, 0x1a, 0x97, 0x59, 0x49, 0x2f, 0x2c, 0x06, 0xc7, 0x30, + 0x92, 0xd1, 0x1f, 0x9a, 0xf1, 0xdf, 0xe2, 0x10, 0x3a, 0xbb, 0x0b, 0x59, + 0x30, 0x03, 0x8c, 0x1d, 0x7f, 0x8a, 0x4a, 0x66, 0xce, 0xae, 0x5d, 0x0d, + 0xcd, 0xac, 0x56, 0xf3, 0x3b, 0x6d, 0xac, 0xee, 0xad, 0xd2, 0x3c, 0xf5, + 0x0a, 0xee, 0x6f, 0x4d, 0xaf, 0x1b, 0xa1, 0x6e, 0xb0, 0x4d, 0x9b, 0x5c, + 0xf8, 0x3a, 0x86, 0x6f, 0x13, 0xb4, 0x79, 0x2e, 0x53, 0xa8, 0xdf, 0x6f, + 0xd9, 0x9b, 0x1b, 0x5a, 0x27, 0x46, 0x3b, 0x49, 0x1f, 0xc9, 0x56, 0xb0, + 0xfa, 0xe6, 0x6d, 0xb8, 0x97, 0x61, 0x65, 0xbc, 0xd9, 0x5d, 0x8d, 0x2d, + 0xa8, 0x9f, 0xcd, 0x31, 0xa4, 0x79, 0x24, 0xa7, 0x1e, 0x97, 0x8d, 0x07, + 0x89, 0x57, 0x18, 0xdd, 0x09, 0xe2, 0x09, 0x2b, 0x3e, 0xb2, 0x5a, 0x47, + 0x91, 0x5a, 0xdd, 0x1f, 0x0b, 0xf6, 0x86, 0x50, 0xc7, 0x73, 0xcb, 0x01, + 0x1b, 0x9c, 0xe0, 0x24, 0xfc, 0x02, 0x4a, 0x61, 0x53, 0x81, 0x67, 0xc2, + 0x50, 0xab, 0x21, 0xd9, 0xb4, 0xfc, 0x4f, 0xe4, 0x5d, 0xcb, 0x3e, 0xa1, + 0xf4, 0xe1, 0x5f, 0xf4, 0x8b, 0xa4, 0x89, 0x9f, 0x6f, 0xf7, 0x2e, 0x43, + 0xa8, 0x60, 0xb7, 0xa7, 0x75, 0x96, 0xe3, 0xb5, 0xe5, 0xec, 0x69, 0x96, + 0xb8, 0x88, 0x30, 0x47, 0x74, 0x94, 0xe7, 0xe4, 0xb0, 0xbf, 0x2d, 0xa3, + 0xc5, 0xc3, 0xf2, 0xab, 0xd8, 0x2c, 0x70, 0xbe, 0xc8, 0xe3, 0x71, 0xfc, + 0x0a, 0xad, 0x1b, 0xb2, 0xdb, 0x3f, 0xbc, 0x15, 0xec, 0x16, 0xfe, 0xb2, + 0xf8, 0xe3, 0x73, 0xa7, 0xef, 0x49, 0x49, 0xf3, 0xaa, 0x77, 0xa5, 0xbb, + 0xbc, 0x72, 0xb2, 0x98, 0xc2, 0xe9, 0x71, 0xe7, 0xba, 0xde, 0xc9, 0x13, + 0x8d, 0xa8, 0xd0, 0x03, 0xaf, 0xcd, 0x63, 0x50, 0xc3, 0x06, 0x35, 0xf7, + 0x47, 0xdc, 0x92, 0x9a, 0xb7, 0x69, 0xcf, 0x88, 0xfc, 0xaa, 0xfe, 0x25, + 0x60, 0x66, 0x50, 0x66, 0x49, 0xb5, 0xa4, 0xf9, 0x7b, 0x95, 0x1c, 0x81, + 0xee, 0xd7, 0xc4, 0x69, 0xf3, 0x5a, 0x38, 0xd5, 0x1f, 0xb7, 0x56, 0x78, + 0x06, 0xc6, 0x39, 0xa7, 0xca, 0x52, 0x53, 0xdb, 0xe3, 0x96, 0xfa, 0x6c, + 0x93, 0xdd, 0xd3, 0xfe, 0x72, 0x23, 0x27, 0x50, 0x7e, 0x8e, 0xe1, 0xb5, + 0x41, 0xad, 0x03, 0x1d, 0x8e, 0xf0, 0x2e, 0x1f, 0x22, 0x51, 0x18, 0x48, + 0x0d, 0x91, 0x24, 0x9f, 0xef, 0x49, 0x4b, 0xb8, 0x9d, 0x83, 0x59, 0xf1, + 0xf1, 0xe1, 0x70, 0x9d, 0x75, 0x85, 0xdd, 0x53, 0x2c, 0x0e, 0xcf, 0x27, + 0xf0, 0x5d, 0xe3, 0x89, 0x1b, 0x64, 0x41, 0xd3, 0x4f, 0x90, 0x5c, 0x1f, + 0xd6, 0x39, 0xfd, 0xab, 0x94, 0x39, 0xfd, 0x21, 0xfc, 0x81, 0x25, 0x39, + 0xd8, 0x8f, 0x15, 0xbe, 0xd2, 0xe0, 0x60, 0xb4, 0x01, 0xf3, 0x28, 0xf1, + 0xfa, 0xbc, 0xff, 0x00, 0x2e, 0x3f, 0x04, 0x2c, 0x46, 0x6e, 0xb2, 0xd6, + 0x9f, 0xdd, 0x07, 0xee, 0x70, 0x57, 0x7d, 0x31, 0xe8, 0xed, 0x8d, 0x77, + 0xa4, 0xa7, 0x57, 0x78, 0x87, 0x34, 0x05, 0x5d, 0xdb, 0x80, 0x31, 0xdc, + 0xc7, 0xdd, 0xca, 0xb2, 0x5a, 0x03, 0xc9, 0x1e, 0x68, 0x4e, 0x20, 0x3c, + 0x40, 0xd1, 0xb3, 0x23, 0xe2, 0x92, 0x91, 0x62, 0x56, 0x5b, 0x5e, 0x46, + 0x91, 0xb8, 0x8e, 0x55, 0xbc, 0x06, 0x4e, 0x0b, 0x44, 0xe8, 0x09, 0x91, + 0xf3, 0x48, 0x34, 0x6d, 0xb0, 0x8d, 0x24, 0xe8, 0xa5, 0xd3, 0xd9, 0xb7, + 0x13, 0x69, 0xe7, 0x71, 0x3f, 0x8a, 0x4a, 0x69, 0xe4, 0xb4, 0xb4, 0xc4, + 0x7f, 0xac, 0x95, 0x52, 0xda, 0xc7, 0xd9, 0xee, 0x73, 0x9d, 0x04, 0x0f, + 0x60, 0xf1, 0x2b, 0x4a, 0xd6, 0x87, 0xee, 0x72, 0xad, 0x75, 0x64, 0x62, + 0xde, 0x63, 0xdb, 0xb6, 0x09, 0xfc, 0x89, 0x29, 0xaf, 0x85, 0x0c, 0x69, + 0x69, 0x32, 0x08, 0x00, 0x04, 0x7c, 0xb6, 0x39, 0xfb, 0x48, 0xd0, 0x03, + 0x04, 0x20, 0x62, 0xb4, 0x1d, 0x86, 0x60, 0x8e, 0xde, 0x50, 0xad, 0x64, + 0x4e, 0xc6, 0xbb, 0xc5, 0xc3, 0x4f, 0x92, 0x4a, 0x40, 0xc6, 0xfe, 0x8e, + 0x3c, 0x50, 0xf6, 0x93, 0x6d, 0x5f, 0xd6, 0x0a, 0xe3, 0x6b, 0x96, 0x4a, + 0x10, 0xaa, 0x32, 0x2a, 0x68, 0xfd, 0xe9, 0x49, 0x4b, 0xe5, 0x30, 0x7a, + 0xcd, 0x6f, 0x1b, 0x81, 0xd5, 0x67, 0xed, 0x27, 0x32, 0xc1, 0x3c, 0x46, + 0xbf, 0x20, 0xb5, 0x6e, 0x68, 0x37, 0x30, 0x3b, 0xfd, 0x75, 0x59, 0xe1, + 0x91, 0x9d, 0x78, 0x1a, 0xc1, 0x01, 0x25, 0x36, 0x4d, 0x41, 0xcd, 0xd4, + 0xcc, 0x34, 0x9f, 0xc5, 0x22, 0xdd, 0x23, 0xb1, 0xd4, 0x2b, 0x14, 0x31, + 0xa4, 0x12, 0x74, 0x04, 0x40, 0xf8, 0x92, 0x50, 0xf6, 0x7b, 0x47, 0xc2, + 0x12, 0x53, 0x99, 0x92, 0x76, 0x87, 0x03, 0xcc, 0xa7, 0x89, 0xaa, 0x82, + 0x75, 0x03, 0x69, 0x8f, 0x9a, 0x7c, 0xb3, 0x3b, 0xb4, 0x44, 0x6b, 0x37, + 0x62, 0x50, 0x5b, 0xc8, 0x00, 0x9f, 0x1e, 0xe9, 0x29, 0xbd, 0x6d, 0xb8, + 0x85, 0x8c, 0xa2, 0xdb, 0x3d, 0x36, 0xb8, 0x0d, 0xef, 0x8d, 0x36, 0x93, + 0x11, 0x3e, 0x25, 0x5f, 0xbf, 0xad, 0x74, 0x8a, 0x9e, 0x29, 0xc6, 0xb9, + 0xb7, 0x86, 0xb4, 0x7a, 0x94, 0x89, 0x92, 0x07, 0xb4, 0xec, 0x31, 0xb4, + 0xb8, 0x0e, 0xdc, 0xac, 0xba, 0x3a, 0x6d, 0x97, 0xde, 0xc1, 0x91, 0xfa, + 0x1a, 0xa0, 0x39, 0xe5, 0xfa, 0x1f, 0x2d, 0x3f, 0xbd, 0x59, 0xb1, 0xae, + 0x65, 0xfb, 0x7a, 0x57, 0x4a, 0x6d, 0xec, 0x68, 0xfe, 0x7d, 0xfa, 0x00, + 0xef, 0xed, 0x7f, 0x04, 0x94, 0xec, 0x8c, 0x96, 0x0a, 0x9a, 0xfa, 0x48, + 0xb2, 0x87, 0x09, 0x6b, 0x81, 0xe4, 0x79, 0xae, 0x7b, 0xaa, 0x65, 0xbb, + 0x2a, 0xd7, 0x03, 0xa3, 0x46, 0x80, 0x7f, 0x7a, 0x2b, 0x33, 0x9c, 0xe0, + 0x5a, 0xda, 0x19, 0x8a, 0xd6, 0x4b, 0x5d, 0x55, 0x64, 0xc6, 0xfe, 0x5d, + 0x32, 0xb3, 0xb2, 0xee, 0x6b, 0x6b, 0x3b, 0x75, 0x82, 0x5c, 0xf3, 0xd9, + 0x25, 0x35, 0xfa, 0xb3, 0x3d, 0x0c, 0x58, 0x32, 0x03, 0x9c, 0xdf, 0x49, + 0xae, 0xe7, 0xe8, 0x99, 0x3f, 0x0d, 0x7f, 0xd6, 0x52, 0xc5, 0xe9, 0xb6, + 0x33, 0xa5, 0x3b, 0x32, 0xeb, 0x36, 0xd8, 0xd7, 0x03, 0x55, 0x03, 0x57, + 0x3d, 0xbe, 0x7d, 0xc2, 0x26, 0x55, 0x79, 0x99, 0xb9, 0x63, 0x2b, 0x0a, + 0x2c, 0x2c, 0x68, 0x15, 0xd2, 0xf8, 0x26, 0x07, 0x2e, 0xaf, 0x78, 0xda, + 0xe9, 0xf2, 0x42, 0x3d, 0x7f, 0xab, 0x52, 0xe3, 0x5d, 0xa7, 0x63, 0xdb, + 0xa3, 0x9a, 0xea, 0xc0, 0x20, 0xf9, 0x8d, 0xa1, 0x25, 0x2b, 0x06, 0xbc, + 0x6b, 0xdc, 0xcb, 0x2f, 0xc6, 0xb5, 0xad, 0x75, 0xad, 0xad, 0xc4, 0x3b, + 0xda, 0x37, 0x7f, 0x27, 0x47, 0x7e, 0x2b, 0xa4, 0x0c, 0xe9, 0xf8, 0x1f, + 0x59, 0xb1, 0x2a, 0xe9, 0xa0, 0x0a, 0x2d, 0xac, 0x7a, 0xb3, 0xba, 0x1a, + 0xe3, 0xda, 0x5c, 0x4e, 0xab, 0x03, 0x13, 0xaa, 0x66, 0xf5, 0x0c, 0xba, + 0xe9, 0xbd, 0xc1, 0xd5, 0x80, 0x49, 0x0d, 0x68, 0x1c, 0x0f, 0x25, 0xa8, + 0x1a, 0x77, 0x36, 0xa6, 0x8f, 0x6f, 0x27, 0xc6, 0x65, 0x25, 0x3e, 0x93, + 0x20, 0x89, 0x07, 0x4f, 0x15, 0xe5, 0xbf, 0x59, 0xdc, 0xe1, 0xf5, 0x8d, + 0x91, 0xc7, 0x8f, 0xde, 0xae, 0xbe, 0x2c, 0x69, 0x63, 0x09, 0x6b, 0x84, + 0x0d, 0xc0, 0x9e, 0xea, 0x97, 0x53, 0xbb, 0xec, 0x6f, 0xa5, 0xad, 0x01, + 0xc5, 0xcc, 0x25, 0xdb, 0xc4, 0xf7, 0x89, 0x49, 0x4d, 0x3f, 0x4e, 0xf6, + 0xe4, 0x55, 0x65, 0xac, 0x73, 0x58, 0xf7, 0x7b, 0x1c, 0x44, 0x07, 0x47, + 0x82, 0xb5, 0x84, 0x4f, 0xdb, 0x2c, 0x11, 0x03, 0x7b, 0x90, 0xb1, 0xfa, + 0xed, 0xb8, 0xf6, 0x9b, 0x7d, 0x2a, 0xde, 0x4b, 0x76, 0x80, 0xe9, 0x86, + 0xf9, 0x80, 0x89, 0x5f, 0xd6, 0x8b, 0x9a, 0xcd, 0x8e, 0xa5, 0x96, 0x1e, + 0x49, 0x98, 0x27, 0xba, 0x4a, 0x74, 0x32, 0xe3, 0xec, 0xe2, 0x7b, 0x03, + 0x23, 0xb2, 0xa0, 0xda, 0xda, 0xd6, 0x4b, 0x7f, 0x3a, 0x5d, 0xf7, 0xab, + 0x38, 0xdd, 0x7a, 0xcc, 0xc0, 0xe6, 0x1c, 0x36, 0x35, 0x81, 0xa7, 0x73, + 0x89, 0xd0, 0x7e, 0x0a, 0xb3, 0x6c, 0x0d, 0xaa, 0x09, 0x10, 0x01, 0x12, + 0x92, 0x9c, 0xfc, 0x9d, 0x1e, 0x07, 0x9b, 0x7f, 0x2a, 0xd6, 0xa0, 0x83, + 0xd4, 0x69, 0x02, 0x74, 0x7b, 0x46, 0xbd, 0xbd, 0xcb, 0x0e, 0xeb, 0x5d, + 0x65, 0x93, 0xfc, 0xa1, 0xf7, 0x4a, 0xda, 0xc5, 0x0e, 0x1d, 0x45, 0x8e, + 0xe4, 0x0b, 0x59, 0xa7, 0x94, 0xa4, 0xa7, 0xb3, 0x00, 0x1c, 0x4a, 0xf5, + 0xd6, 0x4c, 0x8f, 0x9a, 0x98, 0x69, 0xda, 0xc2, 0x0f, 0x7e, 0x3e, 0xf4, + 0xed, 0x68, 0x38, 0x62, 0x39, 0xd7, 0xf2, 0xa4, 0x1d, 0x0d, 0x6f, 0x68, + 0x22, 0x4a, 0x4a, 0x66, 0xe8, 0xb1, 0xa4, 0xbb, 0x43, 0xa4, 0x1f, 0x90, + 0x5c, 0x27, 0xd6, 0x16, 0xff, 0x00, 0x95, 0x72, 0x9d, 0xfc, 0xbf, 0xfb, + 0xe8, 0x5d, 0xe8, 0x2d, 0x0c, 0x9e, 0x47, 0x7f, 0xb9, 0x70, 0x5d, 0x7c, + 0x03, 0xd5, 0xb2, 0xfc, 0x9f, 0xff, 0x00, 0x7d, 0x09, 0x29, 0xcf, 0xc3, + 0x6b, 0xbd, 0x7b, 0x00, 0xe4, 0xb3, 0xf8, 0x85, 0x7b, 0xdf, 0xf6, 0x7d, + 0xdf, 0x9f, 0xbb, 0x95, 0x5b, 0x00, 0x7e, 0xb6, 0xff, 0x00, 0xea, 0x15, + 0xa5, 0xb4, 0xfa, 0x13, 0xb7, 0x59, 0xe1, 0x25, 0x37, 0x4b, 0x49, 0x6f, + 0x97, 0x8a, 0x85, 0x94, 0xb7, 0x6c, 0x93, 0xee, 0x07, 0x8f, 0xc1, 0x58, + 0x00, 0x48, 0x1f, 0x7a, 0x1b, 0xde, 0xd1, 0x0f, 0x22, 0x64, 0x11, 0xf8, + 0xa4, 0xa6, 0x35, 0x99, 0xaf, 0x4f, 0xdf, 0x21, 0x1b, 0x18, 0x45, 0x41, + 0xbe, 0x68, 0x35, 0x6d, 0x14, 0xb9, 0xc0, 0x68, 0xd7, 0x13, 0x3f, 0x72, + 0xb3, 0x8f, 0xab, 0x44, 0x6a, 0x39, 0x49, 0x48, 0x1d, 0x58, 0x87, 0xfc, + 0x90, 0x6e, 0x61, 0xfb, 0x2d, 0xdf, 0xbb, 0xb7, 0x5f, 0x9f, 0x0a, 0xdc, + 0x41, 0xb3, 0xe4, 0x81, 0x70, 0x77, 0xa3, 0x63, 0xa3, 0xda, 0x46, 0xd3, + 0xf3, 0x49, 0x4e, 0x6e, 0x2b, 0x7e, 0x8a, 0xb9, 0x7b, 0x06, 0xc1, 0x1c, + 0x4b, 0x4f, 0xde, 0xaa, 0x62, 0x88, 0x1a, 0xf6, 0x98, 0x57, 0xaf, 0x6f, + 0xb0, 0x02, 0x78, 0x00, 0xa4, 0xa6, 0x2d, 0x03, 0x60, 0x50, 0xda, 0x0e, + 0x5d, 0x31, 0xc9, 0x21, 0x1a, 0xb0, 0x3d, 0x21, 0xe1, 0xdd, 0x41, 0xad, + 0x03, 0x3a, 0x86, 0x8e, 0xee, 0x09, 0x29, 0x9e, 0x4b, 0x1a, 0x2c, 0x69, + 0x3a, 0x41, 0xd0, 0xac, 0xa7, 0x9f, 0xd7, 0xf2, 0x08, 0xe3, 0x7f, 0xf7, + 0x2e, 0x87, 0x32, 0xb6, 0x7a, 0x8d, 0x9e, 0x23, 0x85, 0x80, 0xe6, 0xfe, + 0xbd, 0x7c, 0x7f, 0xa4, 0x84, 0x94, 0xdb, 0x67, 0xd0, 0x00, 0x8f, 0xa4, + 0xf1, 0xf8, 0x0f, 0xf6, 0xa3, 0x55, 0x45, 0xb7, 0xd8, 0xda, 0x68, 0x61, + 0xb2, 0xce, 0x36, 0xb7, 0xf8, 0xa8, 0x55, 0x4d, 0xb6, 0x59, 0x4d, 0x55, + 0x8d, 0xcf, 0x7b, 0xf4, 0x1f, 0x70, 0x5d, 0xae, 0x0e, 0x05, 0x58, 0x58, + 0xc2, 0x9a, 0xe3, 0x71, 0xd6, 0xc7, 0xf7, 0x73, 0x8a, 0x4a, 0x79, 0x7c, + 0x7f, 0xa9, 0xb9, 0x77, 0x5c, 0x5d, 0x9a, 0xf6, 0xd3, 0x41, 0xd4, 0xb6, + 0xb3, 0xb9, 0xe7, 0xc8, 0x76, 0x0b, 0x46, 0xbc, 0x0c, 0x6e, 0x9c, 0xd7, + 0xd7, 0x4e, 0x23, 0x87, 0xa2, 0xdf, 0x65, 0x84, 0x87, 0x92, 0x40, 0x90, + 0x75, 0x33, 0xca, 0xdb, 0x6b, 0x88, 0x8d, 0x7c, 0xb5, 0xf1, 0x08, 0x19, + 0xed, 0x75, 0x98, 0xd6, 0xbd, 0x9f, 0x4c, 0x56, 0xf6, 0xfe, 0x05, 0x25, + 0x3c, 0x86, 0x13, 0xeb, 0xb4, 0x1f, 0x5d, 0xc4, 0xda, 0xf9, 0x71, 0x7f, + 0x8b, 0x8e, 0xba, 0xad, 0x02, 0xd2, 0xda, 0xd9, 0x16, 0x39, 0xcc, 0xb0, + 0x4b, 0x98, 0xc9, 0x60, 0x6f, 0xce, 0x75, 0x59, 0x38, 0x70, 0x36, 0xcf, + 0x81, 0xfc, 0x8a, 0xd6, 0x45, 0xae, 0xa7, 0xa7, 0xda, 0xf0, 0x40, 0x86, + 0x98, 0x91, 0x3a, 0xf2, 0x92, 0x9c, 0xfe, 0xb1, 0x40, 0xc7, 0xb0, 0x5c, + 0xc6, 0xb9, 0x8d, 0x76, 0x8f, 0x0e, 0x32, 0x5c, 0x7c, 0x65, 0x64, 0xbd, + 0xae, 0xb8, 0x9d, 0xfa, 0x4e, 0x80, 0x76, 0x5a, 0x43, 0x27, 0x6f, 0x4f, + 0x2d, 0xc8, 0xb8, 0x5d, 0x63, 0xfd, 0x8c, 0xa8, 0x81, 0x23, 0xf9, 0x41, + 0x02, 0x9a, 0x77, 0x90, 0xd8, 0xfb, 0x92, 0x53, 0xa1, 0xf5, 0x46, 0x8a, + 0xdd, 0x7e, 0x5e, 0x0d, 0xcd, 0x9a, 0xdc, 0xda, 0xed, 0xab, 0xc5, 0x8e, + 0x92, 0xd2, 0x5a, 0xba, 0x4c, 0xbe, 0x81, 0x87, 0xd4, 0x31, 0xdd, 0x4e, + 0x7b, 0x7f, 0x48, 0xc1, 0xfa, 0x1c, 0x96, 0x8f, 0xd2, 0x37, 0xca, 0x7b, + 0xfc, 0x0a, 0xc1, 0xe8, 0x81, 0xd4, 0xf5, 0x5a, 0x23, 0xfc, 0x23, 0x5c, + 0xcd, 0x7c, 0x86, 0xf1, 0xf9, 0x17, 0x66, 0xeb, 0xea, 0x90, 0xc2, 0x4b, + 0x9d, 0x3a, 0x00, 0x27, 0x5f, 0x3e, 0xc9, 0x29, 0xe4, 0xd9, 0xf5, 0x1f, + 0x27, 0x0f, 0x28, 0xdb, 0x89, 0x73, 0x6f, 0x68, 0x69, 0x1b, 0x5e, 0x3d, + 0x37, 0x49, 0xfb, 0xc2, 0x06, 0x40, 0xc9, 0xc3, 0xb4, 0xd7, 0x91, 0x51, + 0xa5, 0xf0, 0x47, 0xbb, 0xb8, 0x3d, 0xc7, 0x88, 0x5d, 0xdb, 0x09, 0x2d, + 0x73, 0x88, 0x82, 0x40, 0x31, 0xe0, 0xaa, 0xf5, 0x8e, 0x98, 0xce, 0xa7, + 0x81, 0x65, 0x11, 0xfa, 0x66, 0x89, 0xa5, 0xfd, 0xc3, 0x87, 0x6f, 0x81, + 0xe0, 0xa4, 0xa7, 0x89, 0x19, 0x2d, 0x6b, 0x25, 0xa3, 0x52, 0x44, 0x9f, + 0x25, 0x5b, 0x31, 0x9f, 0x6a, 0xbd, 0xae, 0xd0, 0xb4, 0x36, 0x3d, 0xdc, + 0xaa, 0xed, 0xba, 0xc6, 0xd9, 0xb4, 0x8e, 0x5d, 0x0e, 0x07, 0xb1, 0x1d, + 0x91, 0x6a, 0xea, 0x38, 0xad, 0xb0, 0x50, 0xe9, 0xf5, 0x4b, 0xa2, 0x03, + 0x49, 0x49, 0x4b, 0x0e, 0x9f, 0x51, 0x80, 0xe6, 0xb4, 0xcf, 0xc1, 0x26, + 0xf4, 0xec, 0x66, 0x98, 0x35, 0x07, 0x77, 0x82, 0x3f, 0xb9, 0x5a, 0xfb, + 0x55, 0x44, 0xed, 0x0d, 0x76, 0xef, 0x0d, 0xa6, 0x54, 0x5d, 0x99, 0x88, + 0xd7, 0x43, 0x9e, 0x03, 0x86, 0x8e, 0x06, 0x46, 0xbe, 0x7a, 0x24, 0xa6, + 0x75, 0xd2, 0xca, 0xa9, 0x2d, 0xaa, 0xaf, 0x4d, 0xa4, 0x3a, 0x79, 0xd7, + 0x4f, 0x35, 0x49, 0xb5, 0x1f, 0x4d, 0xc2, 0x64, 0x38, 0x92, 0x3c, 0x82, + 0xd2, 0x63, 0xdb, 0x60, 0x6f, 0xa4, 0xe0, 0xe6, 0xc3, 0xa6, 0x3b, 0x2a, + 0x75, 0x30, 0xfa, 0x6e, 0x07, 0x4d, 0xa4, 0x8f, 0xc5, 0x25, 0x39, 0x76, + 0xb0, 0x31, 0xda, 0x0e, 0xe3, 0xf2, 0xad, 0xac, 0x16, 0x1f, 0xb5, 0x8d, + 0x75, 0xf5, 0x59, 0xaf, 0xcd, 0x65, 0xe5, 0x32, 0x1e, 0x07, 0x6d, 0x0c, + 0xfc, 0xd6, 0xdd, 0x35, 0xfa, 0x79, 0x95, 0x6d, 0xfd, 0xe6, 0x93, 0xf7, + 0xa4, 0xa7, 0xa8, 0x04, 0x8c, 0x7a, 0xf5, 0xfd, 0xef, 0xca, 0x8a, 0x1b, + 0x35, 0x47, 0x98, 0x3a, 0x7c, 0x54, 0x1b, 0xfc, 0xd5, 0x22, 0x3b, 0x19, + 0xf9, 0x95, 0x2a, 0x60, 0xb6, 0xd0, 0x20, 0x96, 0xf0, 0x7c, 0xa5, 0x25, + 0x2d, 0x90, 0xf1, 0x55, 0x7f, 0x15, 0xc4, 0xf5, 0xb9, 0x77, 0x50, 0xbd, + 0xf1, 0xf4, 0x9c, 0x0f, 0xfd, 0x10, 0xbb, 0x7b, 0xa0, 0x83, 0x33, 0x3a, + 0xc4, 0x7c, 0xd7, 0x1b, 0xd5, 0xd9, 0xfa, 0xe5, 0xfa, 0x6a, 0x08, 0xff, + 0x00, 0xa9, 0x09, 0x29, 0xa3, 0xd3, 0x5b, 0xbb, 0x38, 0xb7, 0xc5, 0xa4, + 0xad, 0x9d, 0x9e, 0xdd, 0xb1, 0xdd, 0x64, 0xf4, 0xa0, 0x7f, 0x69, 0x8f, + 0x36, 0x39, 0x6f, 0xfa, 0x67, 0x8e, 0xe9, 0x29, 0x1b, 0x9f, 0x00, 0x99, + 0xe7, 0x40, 0x85, 0x2d, 0x73, 0x00, 0x98, 0x06, 0x63, 0xef, 0x52, 0x68, + 0x24, 0x35, 0xa7, 0x53, 0x1a, 0x91, 0xe2, 0xa1, 0x6d, 0x7b, 0x6b, 0x10, + 0x38, 0x0e, 0x49, 0x4c, 0x69, 0xb0, 0x36, 0x8b, 0x58, 0x79, 0x04, 0x88, + 0x3e, 0x48, 0xbd, 0x2a, 0xed, 0xf4, 0xea, 0x65, 0xc0, 0x41, 0xf9, 0x15, + 0x92, 0xeb, 0x1e, 0x6c, 0x76, 0xb0, 0x0b, 0x8a, 0xb3, 0xd2, 0xdf, 0xe9, + 0xe5, 0x10, 0x0c, 0xb5, 0xed, 0xd7, 0xfb, 0xd2, 0x53, 0xa7, 0x69, 0xda, + 0x1c, 0x46, 0x93, 0x1f, 0xc5, 0x09, 0xef, 0x6b, 0xf0, 0xee, 0x67, 0xe7, + 0x1f, 0x7f, 0xc9, 0xb0, 0x3f, 0x8a, 0x9e, 0x4f, 0x0e, 0x23, 0xc3, 0x85, + 0x4a, 0xc7, 0x6d, 0x63, 0xff, 0x00, 0x95, 0x5b, 0xbf, 0x02, 0x92, 0x90, + 0x55, 0x21, 0xa4, 0x8e, 0x00, 0x28, 0xf6, 0x3d, 0xcf, 0x68, 0x71, 0xf0, + 0x40, 0xc7, 0x20, 0xd4, 0xf8, 0xe6, 0x38, 0x47, 0x70, 0x86, 0xed, 0x27, + 0x50, 0xd6, 0x90, 0x92, 0x99, 0x35, 0xe0, 0x56, 0x24, 0xfc, 0x65, 0x26, + 0x1f, 0xd7, 0x68, 0x77, 0xf2, 0x81, 0x4c, 0xd6, 0xb1, 0xe1, 0x8c, 0xb5, + 0xa0, 0xd6, 0xe3, 0x0f, 0x07, 0xc0, 0x98, 0x55, 0xb1, 0xaa, 0x34, 0x75, + 0x0f, 0x40, 0xbb, 0xd8, 0xcb, 0x20, 0x49, 0xe2, 0x12, 0x53, 0xb9, 0x69, + 0x0f, 0x2e, 0x79, 0x3f, 0x43, 0x8f, 0x99, 0x58, 0x0e, 0xfe, 0x99, 0x7f, + 0xf5, 0xce, 0xab, 0x53, 0x22, 0xc7, 0xb6, 0xbb, 0x00, 0x9f, 0x76, 0x87, + 0xe4, 0x25, 0x64, 0xd5, 0x06, 0xe7, 0x9f, 0x17, 0x12, 0x92, 0x9d, 0xef, + 0xab, 0x8d, 0x0f, 0xea, 0x5e, 0xa3, 0x86, 0x95, 0xd6, 0x40, 0xf2, 0x2e, + 0x3f, 0xed, 0x5d, 0x60, 0x71, 0x6f, 0x3c, 0x78, 0xf8, 0x2e, 0x5f, 0xea, + 0xdb, 0x00, 0x37, 0xbc, 0x73, 0x2d, 0x1f, 0x70, 0x5d, 0x2b, 0x5e, 0x1e, + 0xdf, 0x1f, 0x14, 0x94, 0xb1, 0x1e, 0xf7, 0x37, 0xcc, 0x39, 0xbe, 0x68, + 0x37, 0x3c, 0x37, 0x1a, 0xf7, 0x38, 0xe8, 0xd6, 0x38, 0x13, 0xf2, 0xd1, + 0x1d, 0xdd, 0x88, 0xd1, 0xcd, 0xe2, 0x56, 0x4f, 0x5f, 0xbb, 0xec, 0xfd, + 0x3e, 0xf6, 0xb7, 0x4f, 0x59, 0xa1, 0xa3, 0xe2, 0x4c, 0x14, 0x94, 0xf3, + 0x7d, 0x3e, 0xbf, 0x50, 0x69, 0xd8, 0x05, 0x6b, 0x23, 0x0c, 0xe6, 0x32, + 0xcc, 0x42, 0xe3, 0x5b, 0x5d, 0x59, 0xfd, 0x20, 0x1a, 0x35, 0xc7, 0xe8, + 0xee, 0xf2, 0x9e, 0x55, 0x7c, 0x1b, 0x1d, 0x45, 0x5a, 0x05, 0xbb, 0xd1, + 0x9a, 0xd7, 0xb2, 0xc3, 0x60, 0x91, 0x69, 0x2d, 0x83, 0xdc, 0x34, 0x0d, + 0x3f, 0x14, 0x94, 0xf1, 0xd5, 0xe0, 0x91, 0x38, 0xf9, 0x6c, 0x2d, 0xb6, + 0xb3, 0xc1, 0xe5, 0xae, 0x0a, 0xe5, 0x6d, 0x86, 0x10, 0xd8, 0xf3, 0x2b, + 0x67, 0xad, 0xf4, 0xd7, 0x82, 0x2f, 0x66, 0xaf, 0xac, 0x43, 0x8f, 0x77, + 0x56, 0x38, 0x71, 0xf3, 0x6f, 0x07, 0xc9, 0x63, 0x93, 0xb1, 0x85, 0xc4, + 0xe8, 0x35, 0x49, 0x4d, 0xff, 0x00, 0xab, 0x98, 0x26, 0xdc, 0xb6, 0xda, + 0xe2, 0x5d, 0x56, 0x13, 0x4c, 0x39, 0xdd, 0xec, 0x78, 0x81, 0xf7, 0x09, + 0x5d, 0x81, 0x6b, 0x36, 0x0d, 0xa2, 0x16, 0x47, 0xd5, 0xdc, 0x67, 0x63, + 0x74, 0x7c, 0x7f, 0x53, 0xf9, 0xeb, 0xc7, 0xad, 0x61, 0xf3, 0x7e, 0xa0, + 0x7c, 0x9b, 0x0b, 0x55, 0x8f, 0x06, 0x5a, 0x74, 0x0d, 0xf6, 0xea, 0x92, + 0x99, 0x49, 0xda, 0x4c, 0xf6, 0x82, 0x8b, 0xbc, 0xb6, 0xb9, 0xe0, 0x93, + 0xa7, 0xcc, 0xa0, 0x13, 0x0d, 0x27, 0xf3, 0x63, 0x5f, 0x92, 0x42, 0xcf, + 0x51, 0xc0, 0x76, 0x68, 0xdd, 0xf3, 0x49, 0x4f, 0x27, 0xf5, 0xb3, 0xa7, + 0x32, 0x8c, 0xaa, 0xf3, 0xeb, 0x00, 0x33, 0x20, 0x1d, 0xe0, 0x7f, 0xa4, + 0x6f, 0x7f, 0x98, 0x5c, 0xc3, 0x7f, 0xa7, 0xe3, 0xb8, 0x77, 0x78, 0x5d, + 0xd7, 0xd6, 0xca, 0x85, 0x9d, 0x15, 0x8f, 0xfc, 0xea, 0xec, 0x07, 0xe4, + 0xef, 0x63, 0xbf, 0x2a, 0xe1, 0x5c, 0x36, 0xe7, 0xe3, 0x8e, 0x3f, 0x48, + 0x3f, 0x2a, 0x4a, 0x76, 0x28, 0x93, 0x93, 0x33, 0xc2, 0xad, 0xd4, 0x9e, + 0xd6, 0x3d, 0xf0, 0x01, 0x25, 0xd2, 0x67, 0xba, 0xb3, 0x8e, 0x26, 0xe7, + 0x90, 0x74, 0x0e, 0x8f, 0xb9, 0x51, 0xea, 0x8c, 0x3e, 0xa9, 0x77, 0x00, + 0x92, 0x92, 0x9b, 0x78, 0x59, 0xcd, 0xb2, 0xdd, 0x81, 0xa1, 0xb3, 0x04, + 0x7c, 0x0c, 0x23, 0xdb, 0x53, 0x6b, 0xdc, 0x00, 0x26, 0x5c, 0x5d, 0x3f, + 0xd6, 0x2b, 0x17, 0x0d, 0xbb, 0xad, 0x68, 0x76, 0xa0, 0x1d, 0x63, 0x98, + 0x2b, 0x76, 0xca, 0x9c, 0xd0, 0x1a, 0x4c, 0x90, 0x22, 0x7c, 0x63, 0xbf, + 0xdc, 0x92, 0x9c, 0x6c, 0xa6, 0x92, 0xe0, 0x07, 0x77, 0x0f, 0xca, 0xb7, + 0x05, 0xd5, 0xbf, 0xa8, 0x56, 0xd6, 0x9f, 0xa2, 0xf0, 0xd2, 0xb2, 0xb2, + 0x9b, 0x06, 0x7f, 0x74, 0x8f, 0xca, 0xaf, 0xe1, 0x56, 0x06, 0x65, 0x56, + 0x4c, 0x97, 0x38, 0x12, 0x3c, 0xe7, 0xfd, 0xa9, 0x29, 0xea, 0x89, 0xfd, + 0x0d, 0x5d, 0xb4, 0x3f, 0x95, 0x3d, 0x51, 0x2f, 0xf3, 0x1c, 0x28, 0xc8, + 0x15, 0x55, 0xf0, 0x3f, 0x95, 0x3d, 0x5f, 0x48, 0x80, 0x22, 0x5a, 0x52, + 0x52, 0x6b, 0x08, 0x76, 0xa3, 0x4f, 0x35, 0xc7, 0x75, 0x7f, 0x6e, 0x6e, + 0x40, 0x76, 0xa4, 0x11, 0xff, 0x00, 0x52, 0x17, 0x62, 0x07, 0xb4, 0x77, + 0x91, 0xc2, 0xe3, 0xba, 0xec, 0x8e, 0xa5, 0x90, 0x3f, 0xab, 0xff, 0x00, + 0x52, 0xd4, 0x94, 0xd0, 0xe9, 0x24, 0x7e, 0xd5, 0x61, 0xfe, 0x4b, 0xbf, + 0x22, 0xe8, 0xb7, 0x69, 0x3d, 0xa5, 0x73, 0x9d, 0x38, 0x47, 0x53, 0xaf, + 0xfa, 0xae, 0xfc, 0x8b, 0x77, 0x77, 0xb2, 0x3b, 0xff, 0x00, 0xb1, 0x25, + 0x33, 0xda, 0x08, 0x3f, 0x95, 0x33, 0x86, 0x9e, 0xfe, 0x48, 0x81, 0x3e, + 0x6a, 0x43, 0xdc, 0x08, 0xf1, 0x98, 0x43, 0x70, 0x2e, 0xf6, 0xc4, 0x41, + 0x09, 0x29, 0xe7, 0xf2, 0x9f, 0xee, 0xb0, 0x8d, 0x36, 0x3c, 0xfe, 0x58, + 0x50, 0xc5, 0xce, 0xb6, 0x8b, 0x03, 0xb6, 0xf9, 0xfc, 0x91, 0x5f, 0x59, + 0x36, 0xdf, 0x5b, 0x86, 0x8e, 0x73, 0x8c, 0xf6, 0x99, 0x41, 0xb4, 0xd4, + 0x5c, 0x41, 0x06, 0x00, 0xd0, 0x77, 0x90, 0x92, 0x9e, 0x80, 0xdc, 0xcb, + 0xaa, 0x16, 0x34, 0xc8, 0x73, 0x41, 0x0a, 0xb5, 0x80, 0xfa, 0x6f, 0x71, + 0x1a, 0x6c, 0x70, 0xfc, 0x42, 0x86, 0x08, 0xdb, 0x4b, 0xd8, 0x4f, 0x11, + 0x1e, 0x52, 0x25, 0x19, 0xc7, 0xf5, 0x4b, 0x41, 0xfd, 0xef, 0xca, 0x12, + 0x53, 0x5f, 0x09, 0x92, 0xd7, 0x01, 0xa1, 0x23, 0x55, 0x62, 0xe6, 0x6d, + 0xf7, 0xf3, 0x02, 0x15, 0x6c, 0x5d, 0xcd, 0x69, 0x3e, 0x5f, 0xdc, 0xac, + 0xdd, 0xb8, 0xb0, 0x0e, 0xc6, 0x25, 0x25, 0x30, 0x0e, 0x06, 0x98, 0x3e, + 0x1f, 0xc6, 0x55, 0x5e, 0xb3, 0x59, 0xf5, 0x1e, 0xf1, 0xf9, 0xec, 0x6b, + 0xc1, 0xf9, 0x05, 0x77, 0xd3, 0x69, 0xac, 0x7f, 0x54, 0xa0, 0xf5, 0x00, + 0xd7, 0xd5, 0x8e, 0x5d, 0xc3, 0x99, 0xb1, 0xc7, 0xe0, 0x7f, 0xda, 0x92, + 0x9c, 0xda, 0xb2, 0x2e, 0x6b, 0x44, 0x3c, 0xc7, 0x71, 0x28, 0xb5, 0x5b, + 0x0e, 0x73, 0xb4, 0x74, 0xea, 0x55, 0xb7, 0x74, 0x76, 0x32, 0xb0, 0x5a, + 0xfd, 0xd3, 0x31, 0xc8, 0x30, 0x04, 0xf9, 0xaa, 0x6d, 0xa9, 0xbb, 0x9c, + 0x1a, 0x1c, 0x08, 0xe6, 0x60, 0xff, 0x00, 0x10, 0x92, 0x9e, 0x93, 0xea, + 0xcd, 0xdb, 0xdb, 0x71, 0x88, 0x01, 0xcd, 0x3f, 0x7c, 0xae, 0x91, 0xa0, + 0x03, 0xaf, 0x1d, 0x88, 0x5c, 0xbf, 0xd5, 0x79, 0x65, 0x97, 0xd4, 0xe0, + 0x64, 0x86, 0xbb, 0x8e, 0xc0, 0x96, 0xae, 0xa2, 0xb9, 0x02, 0x0e, 0xa3, + 0xb2, 0x4a, 0x49, 0xdb, 0x5d, 0x42, 0xe6, 0x7e, 0xb5, 0xd8, 0x0b, 0xb1, + 0xf1, 0xdb, 0xf4, 0x9e, 0x4b, 0xdc, 0x7c, 0x9b, 0xed, 0x5d, 0x46, 0x80, + 0x1f, 0x25, 0xc5, 0xf5, 0x8b, 0xfe, 0xd7, 0xd6, 0xac, 0x0d, 0xd5, 0x94, + 0x01, 0x5c, 0xf9, 0x8d, 0x5d, 0xf8, 0xa4, 0xa4, 0x55, 0xb2, 0x04, 0x79, + 0x2e, 0x8b, 0xa0, 0xb1, 0xae, 0xe9, 0x8f, 0xdd, 0xac, 0x5a, 0xe2, 0x3c, + 0xb4, 0x6a, 0xc1, 0x8d, 0x7c, 0x16, 0xcf, 0x43, 0xca, 0xae, 0xac, 0x3b, + 0x18, 0xf7, 0x00, 0x7d, 0x42, 0x40, 0xf8, 0x80, 0x92, 0x9b, 0x79, 0x24, + 0x35, 0xb0, 0xff, 0x00, 0x75, 0x7e, 0x3c, 0xc4, 0xfe, 0x50, 0xb9, 0x2c, + 0xee, 0x9d, 0x91, 0xf6, 0xd1, 0x8f, 0x53, 0x4b, 0xb1, 0x6d, 0x73, 0x08, + 0xb0, 0x7d, 0x10, 0xc7, 0x38, 0x02, 0x27, 0xc9, 0x75, 0x4f, 0xc9, 0xad, + 0xc4, 0xb1, 0x9e, 0xe6, 0x9f, 0xcd, 0xe2, 0x3c, 0x95, 0x5b, 0xb1, 0x1e, + 0xdd, 0xbb, 0x6d, 0xda, 0xd6, 0xbc, 0x58, 0x5b, 0x12, 0x60, 0x19, 0xda, + 0x3e, 0x29, 0x29, 0xd1, 0xfa, 0x44, 0x35, 0xa7, 0x65, 0x6c, 0xd0, 0x01, + 0xe0, 0x14, 0xcb, 0xab, 0x0c, 0x21, 0xd0, 0x1a, 0x35, 0x92, 0xaa, 0xd4, + 0xf6, 0x44, 0x6e, 0x98, 0xe4, 0x95, 0x2d, 0xed, 0x9f, 0x16, 0x77, 0xee, + 0x12, 0x53, 0x77, 0x96, 0x90, 0x38, 0x20, 0xa1, 0x62, 0x02, 0x29, 0x05, + 0xda, 0x39, 0xc0, 0x13, 0xf2, 0xd0, 0x28, 0xe3, 0x65, 0x57, 0x79, 0x22, + 0xb9, 0xf6, 0xf2, 0x08, 0x84, 0x4a, 0x5c, 0x0c, 0x01, 0xf4, 0x5a, 0x12, + 0x53, 0x5b, 0xad, 0x62, 0x3b, 0x37, 0xa6, 0xe4, 0x63, 0x33, 0xe9, 0x06, + 0x07, 0x30, 0x78, 0xb9, 0xa7, 0x7c, 0x7e, 0x0b, 0xce, 0x2e, 0x71, 0x3d, + 0x42, 0x83, 0xe0, 0xf6, 0xaf, 0x57, 0xac, 0x72, 0x7b, 0x93, 0x25, 0x79, + 0xa7, 0xd6, 0x0c, 0x13, 0x85, 0xf5, 0x91, 0xf5, 0x37, 0x46, 0x3a, 0xc6, + 0xd9, 0x57, 0xf5, 0x6c, 0xf7, 0x47, 0xc8, 0xe8, 0x92, 0x9b, 0xb8, 0x84, + 0x00, 0x4f, 0x89, 0x24, 0xfe, 0x28, 0x59, 0x80, 0x58, 0xe7, 0xc8, 0x27, + 0x6b, 0xb5, 0xfb, 0x91, 0xb1, 0xe3, 0x60, 0xed, 0xa9, 0x9f, 0xb9, 0x3b, + 0xc4, 0xbd, 0xc0, 0x76, 0x70, 0x27, 0xe7, 0x01, 0x25, 0x39, 0xfd, 0x3a, + 0x90, 0xcb, 0xb7, 0x11, 0x33, 0x2b, 0x5d, 0xff, 0x00, 0x44, 0x13, 0xf4, + 0x88, 0x93, 0xf3, 0x42, 0xc6, 0x60, 0x63, 0x1a, 0xd2, 0xd9, 0x7b, 0xbd, + 0xad, 0xf8, 0x9f, 0x6a, 0xb3, 0x63, 0x3d, 0xef, 0x8f, 0xa2, 0xd8, 0x1f, + 0x77, 0xfb, 0x92, 0x53, 0x97, 0x9a, 0xd6, 0xee, 0xe7, 0x49, 0xd4, 0x2b, + 0x98, 0x95, 0x9a, 0xb3, 0xab, 0x24, 0xe9, 0x6c, 0x58, 0xdf, 0x2e, 0x74, + 0x55, 0x73, 0x87, 0xbf, 0x67, 0xef, 0x77, 0x56, 0xf1, 0xd8, 0xf1, 0x9b, + 0x59, 0x78, 0x80, 0xe7, 0x82, 0xcf, 0x81, 0xd3, 0xf8, 0x24, 0xa7, 0xa5, + 0x71, 0x69, 0xa2, 0xbe, 0xf0, 0x0f, 0xe5, 0x4f, 0x53, 0xeb, 0x0e, 0x0e, + 0x1e, 0x04, 0x14, 0x8b, 0x40, 0xc7, 0xa8, 0x77, 0x33, 0xc2, 0x7a, 0x40, + 0x36, 0x36, 0x39, 0x03, 0x9e, 0xe9, 0x29, 0x21, 0x32, 0xd6, 0x91, 0xcc, + 0x69, 0xf8, 0x2e, 0x4b, 0xaf, 0x09, 0xea, 0x59, 0x07, 0xbc, 0xb7, 0xfe, + 0xa5, 0xab, 0xad, 0x0e, 0x21, 0xac, 0x9d, 0x07, 0xfb, 0x97, 0x29, 0xd7, + 0xa3, 0xf6, 0x95, 0xff, 0x00, 0xd9, 0xd7, 0xfb, 0x21, 0x25, 0x39, 0x98, + 0x53, 0xf6, 0xf6, 0x3b, 0xc8, 0xad, 0xa8, 0xf6, 0x79, 0xff, 0x00, 0xb1, + 0x62, 0xe1, 0x7f, 0x4d, 0x6f, 0xdc, 0xb7, 0x3f, 0x32, 0x12, 0x53, 0x21, + 0xc4, 0xf7, 0x12, 0xa1, 0x2e, 0x69, 0x6c, 0xf2, 0x35, 0x3f, 0x05, 0x27, + 0x12, 0x2b, 0xf0, 0x80, 0x87, 0x6b, 0x9c, 0x76, 0xc9, 0xd0, 0x98, 0x29, + 0x29, 0xab, 0x93, 0x8c, 0x5d, 0x56, 0xf6, 0xf0, 0x1c, 0x66, 0x3c, 0x09, + 0x54, 0xbf, 0x67, 0x5f, 0x6b, 0x83, 0x80, 0x86, 0xfd, 0xeb, 0x75, 0x8c, + 0x6b, 0xb1, 0x86, 0x92, 0x0e, 0xa8, 0x95, 0x52, 0xd1, 0x5c, 0x8e, 0x40, + 0x94, 0x94, 0xe6, 0xd7, 0x8d, 0xe9, 0x31, 0xad, 0x92, 0x4e, 0xe0, 0x4f, + 0xdc, 0x50, 0x6c, 0xfc, 0x08, 0xd4, 0x79, 0xad, 0x1b, 0x41, 0x9d, 0x74, + 0xd4, 0x7e, 0x45, 0x50, 0x34, 0x07, 0x99, 0xd7, 0x70, 0x80, 0x92, 0x98, + 0xe3, 0x8e, 0xdc, 0x05, 0x66, 0xe6, 0xe9, 0x20, 0x69, 0xa0, 0x42, 0xa9, + 0x84, 0x47, 0x99, 0x84, 0x7b, 0x24, 0xdb, 0xb7, 0xb4, 0x71, 0xf0, 0x49, + 0x48, 0xa0, 0xfa, 0x62, 0x3c, 0x15, 0x6c, 0xe6, 0xce, 0x33, 0x47, 0x76, + 0x38, 0x8f, 0xbc, 0x7f, 0xb1, 0x5e, 0x2d, 0xda, 0xd0, 0x15, 0x5c, 0xad, + 0x1b, 0x63, 0x63, 0x82, 0xd7, 0x1f, 0x9e, 0x89, 0x29, 0xb5, 0x59, 0x16, + 0x62, 0x54, 0xe8, 0xe4, 0x73, 0xf2, 0x59, 0x4c, 0x11, 0x63, 0x87, 0x99, + 0x93, 0xf3, 0x56, 0xf1, 0x7a, 0x96, 0x23, 0x31, 0x1b, 0x8e, 0xfb, 0x36, + 0xda, 0xc9, 0x04, 0x10, 0x7c, 0x74, 0xd6, 0x3c, 0x15, 0x26, 0xdb, 0x5f, + 0xaa, 0xf3, 0x30, 0xd2, 0x49, 0x1d, 0xbe, 0x09, 0x29, 0xdf, 0xfa, 0xb6, + 0x37, 0x66, 0x59, 0xff, 0x00, 0x12, 0x3f, 0x17, 0x4a, 0xe9, 0xaa, 0x1d, + 0x97, 0x35, 0xf5, 0x72, 0xc6, 0x0c, 0xf7, 0x37, 0x73, 0x76, 0xba, 0xbd, + 0xad, 0xd7, 0x9d, 0xb1, 0xc2, 0xea, 0x98, 0xd0, 0x75, 0x6e, 0xbe, 0x49, + 0x29, 0xa9, 0xd5, 0xf3, 0x46, 0x06, 0x05, 0x97, 0xfe, 0x7c, 0x6d, 0xa8, + 0x78, 0xbd, 0xda, 0x37, 0xfb, 0xd7, 0x13, 0x8a, 0xd3, 0xea, 0x17, 0xb8, + 0xcb, 0x8e, 0xa4, 0xf7, 0x25, 0x5f, 0xeb, 0x7d, 0x49, 0x9d, 0x43, 0x30, + 0x32, 0x97, 0xef, 0xc6, 0xc7, 0x90, 0x1d, 0xf9, 0xae, 0xb2, 0x61, 0xce, + 0x6f, 0x90, 0xe0, 0x15, 0x4e, 0xbd, 0x35, 0xf1, 0x49, 0x4d, 0x91, 0xa9, + 0x2a, 0xe7, 0x4c, 0xa9, 0xef, 0xf5, 0x36, 0x89, 0x01, 0xdc, 0xfc, 0x95, + 0x16, 0x92, 0x01, 0x57, 0x7a, 0x35, 0xaf, 0x66, 0x4b, 0xf5, 0xf6, 0x38, + 0x00, 0x47, 0x9a, 0x4a, 0x74, 0x1d, 0x8f, 0x5b, 0x4d, 0x64, 0xb4, 0x6a, + 0x4e, 0xe3, 0xf0, 0x08, 0x55, 0xd2, 0x24, 0xb9, 0xfe, 0xe6, 0xb8, 0xf3, + 0xdd, 0xbf, 0x05, 0x67, 0x21, 0xf1, 0xb5, 0xdf, 0x1f, 0xc5, 0x47, 0x11, + 0x85, 0xed, 0x70, 0xf0, 0x3a, 0x24, 0xa4, 0x66, 0xbb, 0x1a, 0x0c, 0x19, + 0x1d, 0x8f, 0x2a, 0x17, 0xd8, 0x69, 0xa5, 0xee, 0x7d, 0x87, 0xd8, 0x24, + 0x91, 0xe3, 0xd8, 0x2b, 0x36, 0x34, 0xb4, 0xed, 0x6c, 0xc3, 0xbb, 0xfc, + 0x16, 0x67, 0x51, 0x77, 0xb7, 0x60, 0x1e, 0x70, 0x7c, 0x92, 0x52, 0xfd, + 0x0a, 0xf2, 0xec, 0xbb, 0x1d, 0xbe, 0x03, 0xc9, 0x8a, 0xe7, 0x57, 0x11, + 0xc9, 0x5b, 0x74, 0x11, 0xb0, 0x01, 0xa4, 0xfd, 0xfa, 0xae, 0x57, 0x0c, + 0xd9, 0x45, 0x95, 0xd9, 0x58, 0x01, 0xcc, 0x71, 0x76, 0xe3, 0xdc, 0x1e, + 0x42, 0xe8, 0x70, 0xae, 0x04, 0x97, 0x3d, 0xc2, 0x5c, 0x4c, 0x49, 0xf1, + 0x29, 0x29, 0xd6, 0xac, 0x2e, 0x3f, 0xeb, 0xbd, 0x00, 0x75, 0x5e, 0x9b, + 0x78, 0x1a, 0xd9, 0xec, 0x27, 0xcd, 0x8e, 0x91, 0xff, 0x00, 0x54, 0xba, + 0xf6, 0x38, 0x80, 0x27, 0x45, 0xcb, 0x7d, 0x78, 0x6b, 0x9d, 0x67, 0x49, + 0x78, 0xd5, 0xa2, 0xe7, 0x82, 0x7c, 0xce, 0xd2, 0x07, 0xe0, 0x92, 0x9c, + 0xda, 0x18, 0x43, 0x4f, 0xc4, 0xfe, 0x44, 0xf7, 0x0d, 0xb6, 0x3b, 0xe4, + 0x53, 0xd4, 0xe8, 0x63, 0xbc, 0x49, 0x3f, 0x72, 0x8e, 0x53, 0xa5, 0xfa, + 0x1e, 0xc2, 0x12, 0x53, 0x76, 0x86, 0x56, 0x3d, 0xef, 0xfa, 0x4c, 0xf7, + 0x37, 0xe6, 0x94, 0x12, 0x5d, 0x3c, 0xcc, 0x28, 0x35, 0xb6, 0x59, 0xb0, + 0xb0, 0x7b, 0x49, 0x2d, 0x79, 0xf0, 0x83, 0x28, 0xcf, 0xd4, 0xf3, 0xc9, + 0x27, 0xf1, 0x49, 0x4e, 0x4e, 0x7e, 0x96, 0xb7, 0xcb, 0x5f, 0xc8, 0xad, + 0x57, 0x2f, 0xcc, 0xa8, 0x83, 0xa3, 0x5e, 0xdf, 0xc1, 0xba, 0xaa, 0x99, + 0xdf, 0xce, 0x1d, 0x66, 0x00, 0xfc, 0xa1, 0x5b, 0xc6, 0x83, 0x95, 0x5f, + 0x9d, 0x93, 0xf7, 0x24, 0xa7, 0xa5, 0x7b, 0x67, 0x1a, 0xa7, 0x01, 0xac, + 0x4c, 0x26, 0xa4, 0xcd, 0x9a, 0xe9, 0xa6, 0xa8, 0x8d, 0xf7, 0xd0, 0xc0, + 0x39, 0x0d, 0x3f, 0x91, 0x46, 0xa6, 0xc1, 0x74, 0xf2, 0x06, 0x9f, 0x39, + 0x49, 0x4c, 0xab, 0x73, 0x9c, 0x3d, 0xec, 0xdb, 0x07, 0x4f, 0x3e, 0x17, + 0x2b, 0xd7, 0x34, 0xcf, 0xc8, 0x1d, 0xc3, 0x9b, 0xff, 0x00, 0x52, 0x17, + 0x58, 0x1a, 0x63, 0x43, 0x3c, 0x68, 0x7e, 0x4b, 0x91, 0xeb, 0xa1, 0xcd, + 0xcf, 0xc8, 0x1d, 0xf7, 0x37, 0x5f, 0xec, 0x84, 0x94, 0xd0, 0xc2, 0x3f, + 0xac, 0xb5, 0xc3, 0x59, 0x2b, 0x66, 0x04, 0x73, 0xdb, 0xf8, 0xac, 0x4c, + 0x0f, 0xe7, 0x5b, 0xe3, 0x21, 0x6c, 0x4f, 0x7f, 0x97, 0xe2, 0x92, 0x93, + 0x81, 0x2c, 0x83, 0xca, 0x19, 0x6c, 0xb7, 0x51, 0xa0, 0x33, 0x28, 0x80, + 0xb6, 0x48, 0xf1, 0x88, 0x50, 0xb4, 0xb1, 0xe4, 0x82, 0x74, 0x6e, 0x80, + 0x79, 0xa4, 0xa4, 0xb5, 0x00, 0x31, 0x84, 0x6b, 0xed, 0x47, 0xa8, 0x0d, + 0x91, 0xd8, 0x00, 0x81, 0x41, 0x27, 0x1d, 0xbd, 0x8e, 0xd8, 0xfc, 0x11, + 0x6a, 0x71, 0xdb, 0xaf, 0x3a, 0x24, 0xa4, 0x17, 0x89, 0x74, 0x0e, 0x34, + 0x54, 0x9e, 0x61, 0xcd, 0xd2, 0x62, 0x65, 0x5d, 0xbb, 0xe9, 0x3b, 0xe4, + 0xa8, 0xbe, 0x77, 0x40, 0xe0, 0xc8, 0x29, 0x29, 0x2f, 0xbb, 0x73, 0x74, + 0xd1, 0x4d, 0xcd, 0x8b, 0xbc, 0x22, 0x35, 0x44, 0x60, 0x25, 0x82, 0x34, + 0xf3, 0x4c, 0xff, 0x00, 0xe7, 0x5d, 0x22, 0x49, 0x1a, 0x14, 0x94, 0xbb, + 0xa0, 0x35, 0xa4, 0x2a, 0x59, 0xc4, 0x91, 0x60, 0x1d, 0xda, 0x09, 0xf9, + 0x15, 0x68, 0xb8, 0x96, 0x34, 0x77, 0x54, 0x6f, 0x76, 0xe7, 0xbc, 0x78, + 0xb4, 0x8f, 0xb8, 0x24, 0xa7, 0x21, 0xe2, 0xd3, 0x73, 0x8d, 0x75, 0xb9, + 0xdc, 0x12, 0x5a, 0xd2, 0x7f, 0x22, 0xb7, 0xd3, 0x6a, 0xc8, 0xcd, 0xc9, + 0x18, 0xe1, 0xdb, 0x00, 0x05, 0xd6, 0x12, 0xdd, 0x43, 0x47, 0xc4, 0x29, + 0xf4, 0xa2, 0x0d, 0xef, 0x0e, 0x24, 0x1e, 0xf0, 0xb7, 0xf0, 0x30, 0x9d, + 0x53, 0x2d, 0xb8, 0x82, 0x5d, 0x90, 0xe8, 0x68, 0xfe, 0x48, 0xe1, 0x25, + 0x32, 0xc7, 0xc5, 0xab, 0x01, 0xad, 0xb1, 0x84, 0x39, 0xcd, 0x74, 0xc9, + 0xe7, 0xe0, 0x15, 0x3e, 0xb9, 0xf5, 0x9e, 0xec, 0x9b, 0xdf, 0xd2, 0xb0, + 0x83, 0xa8, 0xc6, 0x04, 0xb2, 0xec, 0x81, 0xa3, 0xad, 0xf1, 0x6b, 0x0f, + 0x66, 0xf9, 0xf7, 0x57, 0x9f, 0x83, 0x65, 0xa3, 0x69, 0x02, 0x49, 0x04, + 0x89, 0x8d, 0xcd, 0xd6, 0x42, 0xa3, 0x9d, 0xd2, 0xee, 0xb1, 0xa4, 0x32, + 0xa7, 0x02, 0x0c, 0xb1, 0xd1, 0x30, 0x47, 0xc1, 0x25, 0x39, 0xb4, 0x06, + 0xb2, 0xb6, 0xb4, 0x08, 0x00, 0x40, 0x1f, 0x05, 0x61, 0xae, 0x11, 0xaa, + 0xcd, 0xf5, 0xed, 0xaa, 0xff, 0x00, 0x46, 0xfa, 0xdd, 0x53, 0xc7, 0x21, + 0xe0, 0xb7, 0xf2, 0xa3, 0xdb, 0x93, 0x58, 0x10, 0x0f, 0xc4, 0xa4, 0xa6, + 0xf6, 0xf0, 0x19, 0xca, 0xb1, 0xd3, 0xb2, 0x6a, 0x63, 0x5e, 0xf2, 0x49, + 0x76, 0xed, 0xa1, 0x8d, 0x12, 0xe2, 0x7c, 0x82, 0xc5, 0x6d, 0xee, 0xb1, + 0xc1, 0x8c, 0x32, 0x5d, 0xa0, 0x5a, 0x18, 0xc7, 0xa8, 0xd4, 0xdf, 0xd1, + 0x0a, 0xe4, 0x79, 0x6a, 0x7e, 0x25, 0x25, 0x3d, 0x0e, 0x3d, 0x79, 0x99, + 0x4f, 0xdf, 0x78, 0x14, 0x51, 0xfb, 0x93, 0x2f, 0x3f, 0x1e, 0xc1, 0x69, + 0x57, 0x5d, 0x40, 0x45, 0x66, 0x7c, 0x63, 0x85, 0xc9, 0x7e, 0xd9, 0xcf, + 0xad, 0xed, 0x66, 0x48, 0x63, 0x5a, 0x79, 0x20, 0x3a, 0x47, 0xca, 0x78, + 0xf8, 0x2d, 0x36, 0xf5, 0x8c, 0x0c, 0x4d, 0xb7, 0x5f, 0x9b, 0x5d, 0x65, + 0xe2, 0x5a, 0xc9, 0xfa, 0x43, 0xe0, 0x92, 0x9d, 0x8b, 0x9b, 0x0c, 0x71, + 0xef, 0xc8, 0xf9, 0x2c, 0x3b, 0xdb, 0xea, 0x38, 0xd8, 0x4e, 0xad, 0x71, + 0x8f, 0x98, 0x85, 0x71, 0xdd, 0x6b, 0xa7, 0xe4, 0x33, 0xf4, 0x19, 0x35, + 0xd8, 0xd7, 0x73, 0xb5, 0xc0, 0x91, 0xf1, 0x59, 0x19, 0x3d, 0x4a, 0xba, + 0xc6, 0xca, 0xc7, 0xaa, 0x5a, 0x4f, 0x1c, 0x7d, 0xe9, 0x29, 0x39, 0xbf, + 0x17, 0x0a, 0x93, 0x6e, 0x51, 0xd4, 0xce, 0xca, 0xdb, 0xab, 0x9d, 0xf0, + 0x0a, 0xd7, 0x45, 0xce, 0xc5, 0xc9, 0x70, 0xa8, 0xb9, 0xad, 0x2e, 0xfa, + 0x2c, 0x77, 0xb1, 0xc0, 0xf8, 0x09, 0xe5, 0x73, 0x2e, 0x36, 0x5d, 0x71, + 0xba, 0xe7, 0x6f, 0xb1, 0xdd, 0xfb, 0x01, 0xe0, 0x3c, 0x02, 0x77, 0x3d, + 0xac, 0x12, 0x4c, 0x42, 0x4a, 0x7d, 0x1d, 0xbb, 0x5b, 0xed, 0x3f, 0x08, + 0x2b, 0x97, 0xfa, 0xeb, 0x9b, 0x48, 0x38, 0x38, 0x4d, 0x13, 0x71, 0xb4, + 0x5c, 0x7f, 0x92, 0xd6, 0xcb, 0x47, 0xde, 0x4a, 0x37, 0xd5, 0xee, 0xb3, + 0x93, 0x91, 0x8e, 0xea, 0xf2, 0x81, 0x7d, 0x4d, 0xfe, 0x63, 0x24, 0xfe, + 0x74, 0x18, 0x2d, 0x3e, 0x31, 0xe2, 0xb9, 0xbf, 0xac, 0x59, 0x2f, 0xc8, + 0xeb, 0xa6, 0xd7, 0x34, 0xb5, 0xad, 0x73, 0x59, 0x5c, 0xf7, 0x6b, 0x0f, + 0x3f, 0x3e, 0x52, 0x53, 0x63, 0x19, 0xdb, 0x9a, 0xe2, 0x7e, 0x5f, 0x82, + 0x8e, 0x5b, 0xda, 0x1e, 0x63, 0x96, 0xb5, 0x45, 0x84, 0x8a, 0x5e, 0x1b, + 0xa3, 0x8c, 0xed, 0x3f, 0x72, 0x8b, 0xd8, 0x5d, 0x7d, 0xa0, 0x99, 0x25, + 0xad, 0xf9, 0xfb, 0x44, 0xa4, 0xa7, 0x57, 0x10, 0x9f, 0x40, 0x91, 0xa9, + 0x90, 0x60, 0x79, 0x80, 0x51, 0x1b, 0xa0, 0x83, 0xe0, 0x07, 0xf1, 0xfe, + 0x28, 0x58, 0xa4, 0x32, 0xa7, 0xe9, 0xc0, 0x03, 0xfe, 0x88, 0x08, 0xc4, + 0x46, 0xef, 0x1d, 0x7f, 0x04, 0x94, 0xe4, 0x66, 0x02, 0x6d, 0x70, 0x1a, + 0xc9, 0x00, 0x7d, 0xea, 0xd6, 0x16, 0xef, 0xb4, 0x30, 0xf7, 0xdf, 0xa2, + 0xa9, 0x96, 0xe1, 0xea, 0x92, 0x34, 0x20, 0x83, 0xf8, 0xab, 0xb8, 0x2d, + 0x2d, 0xbe, 0x92, 0x7b, 0xc3, 0xbf, 0x2a, 0x4a, 0x7a, 0x5a, 0x1e, 0xd3, + 0x55, 0x44, 0x09, 0x6b, 0x9b, 0xf9, 0x65, 0x49, 0xc7, 0x69, 0xb2, 0x35, + 0x10, 0xdd, 0x3e, 0xf5, 0x16, 0x4f, 0xa3, 0x59, 0x3a, 0x3a, 0x23, 0x44, + 0xce, 0x25, 0xcf, 0x73, 0x4f, 0x30, 0xdd, 0x7e, 0x12, 0x92, 0x93, 0x32, + 0x34, 0x1c, 0x71, 0x3f, 0x82, 0xe3, 0xba, 0xee, 0x9d, 0x4f, 0x2d, 0xb3, + 0xc5, 0x91, 0xf7, 0x00, 0xbb, 0x0a, 0xe6, 0x47, 0x7f, 0xf7, 0x95, 0xc7, + 0x75, 0xef, 0xf9, 0x5f, 0x32, 0x75, 0xfd, 0x21, 0x9f, 0xb8, 0x24, 0xa6, + 0x86, 0x18, 0x8b, 0x07, 0xf5, 0x82, 0xd8, 0xed, 0x3d, 0xe5, 0x64, 0x62, + 0xe9, 0x63, 0x7f, 0xac, 0x16, 0xc7, 0xe6, 0xfc, 0xd2, 0x52, 0x46, 0xea, + 0x75, 0xed, 0xaf, 0xe0, 0x83, 0xbb, 0x52, 0x0f, 0x02, 0x49, 0xf9, 0x04, + 0x49, 0x8d, 0x3b, 0x77, 0x4d, 0xb5, 0x9b, 0x1e, 0xef, 0x10, 0x4f, 0xe0, + 0x92, 0x99, 0xd3, 0xfc, 0xcf, 0xcb, 0xf8, 0x23, 0xce, 0x9e, 0x0a, 0xad, + 0x6f, 0x69, 0xaf, 0x6f, 0x7d, 0x21, 0x19, 0x84, 0x10, 0x4f, 0x6f, 0xf6, + 0xa4, 0xa4, 0x6e, 0x32, 0xe7, 0x4a, 0xae, 0xe7, 0x00, 0x4f, 0x9a, 0x23, + 0x8e, 0xae, 0xd5, 0x06, 0x5b, 0xb5, 0xf2, 0x27, 0x4f, 0x6a, 0x4a, 0x4f, + 0x53, 0xf4, 0x09, 0xec, 0x79, 0xde, 0x76, 0x8e, 0x44, 0xca, 0x0d, 0x67, + 0x69, 0x6f, 0x74, 0xe5, 0xf2, 0xe7, 0x03, 0xa4, 0x04, 0x94, 0xa7, 0xbe, + 0x1b, 0x23, 0xb8, 0x95, 0x49, 0xaf, 0x9b, 0xdc, 0x0f, 0x70, 0x7f, 0x22, + 0xb2, 0x63, 0x6c, 0x15, 0x4a, 0x08, 0xc9, 0x9f, 0x10, 0x47, 0xde, 0x92, + 0x95, 0xd1, 0x18, 0x6c, 0xea, 0x8d, 0xac, 0x0d, 0x1f, 0xed, 0xfe, 0x3f, + 0xc1, 0x77, 0x10, 0xd6, 0x80, 0x00, 0xd1, 0xa3, 0x45, 0x83, 0xf5, 0x4f, + 0xa7, 0x16, 0x8b, 0x7a, 0x8d, 0x83, 0xe9, 0xfe, 0x8e, 0x90, 0x7b, 0x06, + 0xfd, 0x37, 0x7f, 0x05, 0xbb, 0xea, 0x34, 0xb5, 0xc4, 0xe9, 0xaa, 0x4a, + 0x40, 0x2c, 0x36, 0x58, 0xe3, 0x05, 0xbb, 0x74, 0xd5, 0x4a, 0xa3, 0xb9, + 0xd1, 0xf9, 0xa3, 0xf1, 0x4b, 0xe9, 0x19, 0x03, 0x9f, 0x15, 0x36, 0xc3, + 0x5a, 0x60, 0x6b, 0xc2, 0x4a, 0x48, 0xfa, 0x71, 0xac, 0x8f, 0x56, 0x96, + 0x59, 0xb3, 0x82, 0xe6, 0x87, 0x47, 0xc2, 0x65, 0x4a, 0xbc, 0x2e, 0x9a, + 0xe0, 0x2c, 0x6e, 0x35, 0x24, 0xbf, 0x5d, 0xdb, 0x1b, 0xaf, 0xe0, 0xa1, + 0x5b, 0x8b, 0xa4, 0x46, 0x83, 0x52, 0x8f, 0x21, 0xdb, 0x49, 0x31, 0xde, + 0x12, 0x53, 0x33, 0x89, 0x85, 0x20, 0x9a, 0x2b, 0x31, 0xe0, 0xd0, 0x23, + 0xf0, 0x50, 0xb7, 0xa3, 0xf4, 0xfb, 0x86, 0x8d, 0x2c, 0xf3, 0x1a, 0xc7, + 0xde, 0xa4, 0x25, 0xae, 0xdd, 0x33, 0x3a, 0x14, 0x72, 0xf6, 0xec, 0x04, + 0x1f, 0xbd, 0x25, 0x3c, 0xff, 0x00, 0x51, 0xe8, 0x38, 0xed, 0x07, 0x66, + 0x53, 0x77, 0x34, 0x4e, 0xd7, 0x89, 0x3f, 0xc5, 0x72, 0x5d, 0x43, 0xa4, + 0x13, 0x90, 0x6a, 0xf5, 0x2b, 0xb3, 0xf7, 0x9c, 0xd9, 0x71, 0x1e, 0x5a, + 0xe8, 0xba, 0x7f, 0xac, 0x36, 0x57, 0x6d, 0xe2, 0x9a, 0x03, 0x85, 0xc7, + 0xdd, 0x6b, 0xda, 0x60, 0x35, 0xbe, 0x07, 0xe3, 0x0b, 0x1a, 0x8b, 0x1b, + 0x65, 0x8f, 0x15, 0x0f, 0xd1, 0x54, 0x76, 0x4f, 0x8b, 0xbf, 0x38, 0xa4, + 0xa6, 0xb6, 0x17, 0x49, 0xa7, 0x18, 0x4b, 0x5b, 0xee, 0x23, 0x57, 0xbb, + 0x53, 0xfe, 0xc5, 0x62, 0xd0, 0x00, 0x1b, 0x75, 0xf8, 0xab, 0x0e, 0x70, + 0x88, 0xe2, 0x39, 0x55, 0x40, 0xb6, 0xeb, 0x05, 0x75, 0x0d, 0xce, 0x77, + 0xe1, 0x3d, 0xca, 0x4a, 0x69, 0xdf, 0x92, 0xe0, 0xe6, 0xd3, 0x43, 0x4d, + 0x97, 0x3c, 0xed, 0x65, 0x6d, 0xd4, 0x92, 0xb7, 0x7a, 0x37, 0xd5, 0xa7, + 0x37, 0xf5, 0xae, 0xad, 0x16, 0xd8, 0x75, 0x65, 0x03, 0x5a, 0xd9, 0xfd, + 0x6f, 0xde, 0x3f, 0x82, 0xb1, 0xd3, 0xba, 0x5d, 0x78, 0x4f, 0xf5, 0x6b, + 0x67, 0xda, 0x2f, 0x2d, 0x8d, 0xe5, 0x85, 0xa5, 0xa4, 0x9d, 0x76, 0x97, + 0x7e, 0x6a, 0xd6, 0x0c, 0xb4, 0x8d, 0xd6, 0xb8, 0xff, 0x00, 0x57, 0x81, + 0xf0, 0x49, 0x4c, 0x9b, 0x8f, 0x5e, 0xd2, 0xd6, 0xb4, 0x35, 0xa3, 0x40, + 0xd0, 0x21, 0xbf, 0x72, 0x1d, 0x98, 0x94, 0x5e, 0xc3, 0x4e, 0x43, 0x1a, + 0xf6, 0x7e, 0x68, 0x23, 0x8f, 0x31, 0xe0, 0x8f, 0xbb, 0xe8, 0xf8, 0x9e, + 0x53, 0xbc, 0x34, 0x10, 0xe1, 0xf7, 0x24, 0xa7, 0x8f, 0xea, 0x38, 0xaf, + 0xc2, 0xc8, 0xf4, 0x1c, 0x7d, 0xae, 0xd6, 0xb7, 0xfe, 0xf3, 0x49, 0x55, + 0x9e, 0xe2, 0xdc, 0xa7, 0x13, 0xe0, 0x01, 0xf8, 0x11, 0x0b, 0xa4, 0xfa, + 0xc3, 0x8a, 0x2f, 0xc7, 0xa6, 0xf3, 0xcd, 0x4f, 0x8f, 0x38, 0x70, 0xff, + 0x00, 0x62, 0xe7, 0xb2, 0x5a, 0xd1, 0x92, 0x40, 0xe5, 0xc1, 0xbf, 0x80, + 0x49, 0x4d, 0xfb, 0x2c, 0xd9, 0x8e, 0xf2, 0xce, 0x4b, 0x9b, 0xf7, 0x18, + 0x47, 0x36, 0x7d, 0x33, 0xe2, 0x62, 0x3e, 0x65, 0x53, 0x1e, 0xec, 0x39, + 0x26, 0x7e, 0x89, 0x27, 0xe1, 0x0a, 0xc3, 0x84, 0x17, 0x6b, 0xa6, 0x83, + 0xef, 0x24, 0xa4, 0xa7, 0x2f, 0x2d, 0xd3, 0x65, 0x8d, 0xf0, 0xd0, 0x7d, + 0xea, 0xf6, 0x01, 0x27, 0x25, 0xa2, 0x78, 0x74, 0x7d, 0xc1, 0x66, 0xe4, + 0x4f, 0xa9, 0x61, 0xf1, 0x3f, 0xc5, 0x5e, 0xe9, 0xc4, 0x1c, 0xa6, 0xc7, + 0x77, 0xfe, 0x46, 0xa4, 0xa7, 0xac, 0x1f, 0xcc, 0x56, 0x46, 0xa4, 0x47, + 0xe4, 0x43, 0x6c, 0x9b, 0x49, 0x3d, 0xc0, 0x31, 0xf7, 0xa3, 0x37, 0x56, + 0x56, 0xd1, 0xa1, 0x80, 0x98, 0x34, 0x7a, 0x80, 0x77, 0x00, 0x7e, 0x52, + 0x92, 0x95, 0x8f, 0xb9, 0xc2, 0x4f, 0x80, 0x3f, 0x89, 0x5c, 0x5f, 0x5e, + 0xb2, 0x3a, 0xc6, 0x60, 0x27, 0x9b, 0x4f, 0xe2, 0x02, 0xed, 0x99, 0xa0, + 0x1e, 0x10, 0x3f, 0x2a, 0xe1, 0xfe, 0xb0, 0x81, 0xfb, 0x67, 0x2a, 0x38, + 0x36, 0x4e, 0xbf, 0xd5, 0x09, 0x29, 0xab, 0x8a, 0x7d, 0xec, 0x3f, 0xca, + 0x0b, 0x6b, 0xbc, 0x79, 0xcf, 0xe0, 0xb1, 0x30, 0xce, 0xad, 0x1f, 0xcb, + 0x6a, 0xda, 0xfc, 0xe4, 0x94, 0xca, 0x1c, 0xe7, 0x69, 0xe6, 0xa0, 0x77, + 0x36, 0x97, 0xf6, 0x01, 0x8e, 0x84, 0x6a, 0x9a, 0x7d, 0x48, 0x3d, 0xa6, + 0x25, 0x3e, 0x43, 0x22, 0x97, 0x47, 0x01, 0xa5, 0x25, 0x35, 0x6a, 0x24, + 0x34, 0x77, 0x3b, 0x64, 0xab, 0x2c, 0x7c, 0x30, 0x76, 0x9f, 0xee, 0x55, + 0x87, 0x12, 0x07, 0x68, 0x46, 0x04, 0x6d, 0x01, 0x25, 0x22, 0x04, 0x9d, + 0xd3, 0xe1, 0x3f, 0x8a, 0x19, 0x9f, 0xca, 0x8b, 0x54, 0x1d, 0xe3, 0xe0, + 0x98, 0x86, 0xed, 0x33, 0xe0, 0x92, 0x96, 0x0e, 0x0d, 0x03, 0xcd, 0x4c, + 0x0f, 0x76, 0xba, 0x92, 0x25, 0x0c, 0xbb, 0x6b, 0x98, 0x3c, 0x51, 0x1b, + 0x60, 0x75, 0x8e, 0x6c, 0x6a, 0x38, 0x3f, 0x95, 0x25, 0x2d, 0xb6, 0x41, + 0x95, 0x4d, 0xed, 0x03, 0x29, 0xba, 0xe9, 0x3c, 0xab, 0xee, 0x1c, 0xfd, + 0xca, 0xa5, 0xad, 0xfd, 0x65, 0x92, 0x40, 0x13, 0xdd, 0x25, 0x3d, 0x8b, + 0x1b, 0x4d, 0x34, 0x32, 0xba, 0x40, 0x6d, 0x41, 0xa0, 0x33, 0xc2, 0x16, + 0x7d, 0xf9, 0x00, 0x3f, 0x65, 0x43, 0xd4, 0xb7, 0xcf, 0xe8, 0xb7, 0xe2, + 0xaa, 0x51, 0x92, 0x1f, 0x50, 0x63, 0x9f, 0xf4, 0x74, 0x80, 0x7b, 0x0e, + 0x34, 0x52, 0xfb, 0x4e, 0x3d, 0x60, 0xc3, 0xbd, 0xde, 0x49, 0x29, 0xb7, + 0x53, 0x8d, 0x44, 0x0b, 0xec, 0x97, 0xda, 0x67, 0xe0, 0x7c, 0x02, 0xb1, + 0x00, 0xb8, 0x34, 0x0e, 0x78, 0x0b, 0x15, 0xf7, 0xb0, 0xb9, 0xaf, 0xb6, + 0x48, 0x6e, 0xa3, 0xe2, 0xb6, 0x7a, 0x73, 0xdd, 0x6e, 0x3b, 0x72, 0x2d, + 0x6e, 0xd2, 0xef, 0xa0, 0x0f, 0x87, 0x8a, 0x4a, 0x6c, 0xb5, 0x85, 0xb5, + 0x86, 0x8e, 0xfc, 0x95, 0x30, 0x03, 0x59, 0x09, 0xda, 0x77, 0x09, 0x8d, + 0x10, 0x9e, 0xf1, 0x30, 0x0a, 0x4a, 0x48, 0x0c, 0x0d, 0x75, 0x4e, 0x2d, + 0x63, 0xbd, 0xbc, 0x89, 0xe1, 0x08, 0x3c, 0x93, 0xaf, 0x05, 0x42, 0xd2, + 0xf6, 0xeb, 0xa7, 0x9f, 0x82, 0x4a, 0x73, 0xfa, 0xa6, 0x2d, 0xa2, 0xab, + 0xe5, 0xed, 0xa9, 0xaf, 0x0e, 0x71, 0xbd, 0xa2, 0x6c, 0x23, 0xe7, 0xe0, + 0xb9, 0xec, 0x7a, 0x46, 0x2e, 0x35, 0x35, 0x01, 0x1b, 0xce, 0xbe, 0x24, + 0x9d, 0x75, 0x5a, 0xbd, 0x5e, 0xd7, 0xdb, 0x60, 0xaf, 0x77, 0xe8, 0x80, + 0x97, 0x99, 0xef, 0xd8, 0x2c, 0x4c, 0x4c, 0x9f, 0xb4, 0xe6, 0x3e, 0xc3, + 0xfc, 0xc6, 0x30, 0x2d, 0xaf, 0xb6, 0xe7, 0xbb, 0xe9, 0x3b, 0xe4, 0x12, + 0x53, 0x66, 0xc7, 0x38, 0x17, 0x4a, 0xd6, 0xfa, 0xb5, 0x8a, 0xd7, 0x0b, + 0xb2, 0xdd, 0xa8, 0x27, 0xd3, 0x67, 0xcb, 0xdc, 0x56, 0x2b, 0xc8, 0xb1, + 0x81, 0xc0, 0xeb, 0x69, 0x2e, 0x68, 0xf0, 0x60, 0xd0, 0x2e, 0xa7, 0xa7, + 0xd4, 0x71, 0xb1, 0x2b, 0xa4, 0x7b, 0x76, 0x89, 0x77, 0xc4, 0xea, 0x52, + 0x53, 0x6c, 0xbc, 0x0d, 0x01, 0xd7, 0x90, 0x54, 0x5c, 0xe2, 0xe1, 0xb4, + 0xf2, 0x53, 0x43, 0x43, 0x77, 0x0e, 0x0e, 0xba, 0xa4, 0xd8, 0x93, 0x3f, + 0x48, 0xff, 0x00, 0x04, 0x94, 0xab, 0xa1, 0x9b, 0x23, 0x80, 0x0a, 0x63, + 0x6e, 0xf7, 0x34, 0x0e, 0xe8, 0x79, 0x4f, 0x05, 0xc0, 0x0f, 0x0d, 0x53, + 0xd6, 0x22, 0xc1, 0xf0, 0xec, 0x92, 0x96, 0xea, 0x60, 0x1e, 0x9f, 0x68, + 0x1a, 0x96, 0xb4, 0x93, 0xf2, 0xd4, 0x2e, 0x37, 0x21, 0xc0, 0xde, 0x08, + 0xe4, 0x81, 0xf9, 0x17, 0x59, 0xd6, 0x6c, 0x35, 0x74, 0xab, 0xdf, 0xc4, + 0xc3, 0x7e, 0xf2, 0x02, 0xe4, 0x2e, 0xf7, 0xda, 0x08, 0xfd, 0xde, 0x12, + 0x53, 0x69, 0xaf, 0xfd, 0x52, 0x1a, 0x75, 0x73, 0x75, 0xf9, 0x38, 0x88, + 0x57, 0x9d, 0xee, 0x9f, 0x88, 0x1f, 0x70, 0x0b, 0x34, 0x81, 0x55, 0x75, + 0xb5, 0xe0, 0x4e, 0xa0, 0x34, 0x99, 0xee, 0x0e, 0xab, 0x40, 0x7b, 0x5a, + 0xed, 0x66, 0x0f, 0xf0, 0x49, 0x4e, 0x55, 0xff, 0x00, 0xce, 0xb8, 0x8e, + 0x67, 0xf8, 0xab, 0x9d, 0x34, 0x39, 0xb9, 0x94, 0xee, 0x31, 0xb9, 0xe4, + 0x8f, 0x86, 0xd5, 0x47, 0x20, 0xfb, 0xdd, 0x1d, 0xbf, 0xbd, 0x5f, 0xe9, + 0xa4, 0x59, 0x9b, 0x4b, 0x89, 0xfa, 0x30, 0xd8, 0xfb, 0xd2, 0x53, 0xd8, + 0x01, 0xfa, 0x26, 0x49, 0xec, 0x35, 0xee, 0x21, 0x26, 0x93, 0xea, 0x4b, + 0xb5, 0x90, 0x98, 0x1f, 0xd0, 0x8e, 0x38, 0x09, 0x44, 0x3d, 0x87, 0xb1, + 0x69, 0x9f, 0xbc, 0x24, 0xa6, 0x40, 0x9f, 0xa5, 0x3a, 0xc7, 0xe4, 0x2b, + 0x8c, 0xfa, 0xc2, 0xdf, 0xf2, 0xbe, 0x41, 0xe2, 0x5c, 0x3f, 0xea, 0x1a, + 0xbb, 0x16, 0x9f, 0x68, 0xf9, 0x8f, 0xc5, 0x72, 0x3f, 0x58, 0x3f, 0xe5, + 0x4b, 0xc7, 0x60, 0x47, 0xfd, 0x43, 0x52, 0x53, 0x93, 0x8a, 0x61, 0xed, + 0x3e, 0x0f, 0x6f, 0xe5, 0x5b, 0x7b, 0xbd, 0xf1, 0xe6, 0xb1, 0x6a, 0xf6, + 0xc7, 0xf5, 0xda, 0xb5, 0xb5, 0xdf, 0x3d, 0xe7, 0xf8, 0x24, 0xa7, 0x4c, + 0x31, 0xbb, 0xc9, 0xf0, 0x1a, 0x7d, 0xea, 0x39, 0x23, 0x6d, 0x0f, 0x3e, + 0x0d, 0xd5, 0x16, 0xb1, 0x32, 0xe1, 0xc6, 0x80, 0x1f, 0x82, 0x8e, 0x61, + 0x1f, 0x65, 0xb0, 0x78, 0x89, 0x49, 0x4d, 0x16, 0xb3, 0x70, 0x13, 0xe3, + 0xf9, 0x12, 0x78, 0x3b, 0x8f, 0xc0, 0x7e, 0x54, 0x7a, 0xdb, 0x0d, 0x6a, + 0x6b, 0x40, 0x02, 0x7e, 0x09, 0x29, 0x05, 0x03, 0xdc, 0xf1, 0xdb, 0x45, + 0x22, 0x3d, 0xa6, 0x3c, 0x0e, 0x9e, 0x49, 0xb1, 0xe0, 0x9b, 0x08, 0x3d, + 0xc2, 0x4e, 0x12, 0xe0, 0xed, 0x74, 0x07, 0x84, 0x94, 0xc0, 0xb2, 0x6c, + 0x68, 0x1d, 0x82, 0x37, 0xa2, 0x7d, 0x62, 0xee, 0x07, 0x6f, 0xb9, 0x41, + 0xa3, 0xf4, 0xa0, 0xfc, 0x91, 0xc3, 0xfd, 0xee, 0x9e, 0x34, 0x01, 0x25, + 0x2c, 0x41, 0x20, 0xe8, 0xaa, 0x5d, 0x50, 0x76, 0x43, 0x01, 0x3a, 0x6a, + 0x3e, 0x64, 0x2b, 0xed, 0x82, 0xd0, 0x7b, 0xaa, 0xaf, 0x07, 0xed, 0x0c, + 0xd3, 0xf3, 0x92, 0x53, 0x91, 0x9e, 0xc7, 0x07, 0x00, 0x24, 0xb8, 0xcc, + 0x38, 0x18, 0x81, 0xf7, 0xa0, 0xd7, 0x95, 0x9d, 0x51, 0x01, 0x97, 0x13, + 0xe4, 0xf0, 0x1d, 0xf9, 0x42, 0xd3, 0x7b, 0x5d, 0xf6, 0xb6, 0x17, 0x6a, + 0xd7, 0x1b, 0x36, 0xfc, 0x23, 0x45, 0x4b, 0x3c, 0xfe, 0xba, 0xf0, 0x3c, + 0x04, 0x0f, 0x92, 0x4a, 0x74, 0xfa, 0x25, 0x5d, 0x47, 0xa8, 0xe4, 0x03, + 0x6b, 0x99, 0xf6, 0x5a, 0xe0, 0xda, 0xe0, 0xcf, 0x73, 0xbc, 0x18, 0x0f, + 0x9a, 0xea, 0xc4, 0x7d, 0x10, 0x34, 0xec, 0x3c, 0x00, 0x50, 0xc1, 0xc3, + 0xaf, 0x0f, 0x0e, 0xba, 0x2a, 0x00, 0xe8, 0x1c, 0xe3, 0xdc, 0xb8, 0x89, + 0x71, 0x46, 0x15, 0xf0, 0x67, 0x94, 0x94, 0xc8, 0x10, 0xd6, 0x79, 0x2a, + 0xce, 0x74, 0xc9, 0x22, 0x02, 0x2b, 0x9c, 0x00, 0x25, 0x05, 0xfc, 0x7b, + 0x4e, 0x81, 0x25, 0x33, 0x69, 0x00, 0x02, 0x47, 0x0a, 0x2e, 0x21, 0xe0, + 0x82, 0x62, 0x78, 0x41, 0xde, 0x03, 0xf6, 0x03, 0xee, 0x89, 0xf9, 0x29, + 0xea, 0xd3, 0xae, 0xa0, 0xf7, 0x49, 0x4e, 0x17, 0x59, 0xc7, 0x76, 0xc0, + 0xc0, 0xe8, 0x7b, 0xc9, 0xef, 0xa7, 0xc4, 0xac, 0x66, 0x63, 0xb9, 0xfb, + 0x31, 0xb1, 0xea, 0x71, 0x6b, 0x46, 0xa4, 0x0d, 0x5d, 0xe3, 0xaf, 0xf1, + 0x5d, 0xb3, 0xf1, 0xe9, 0xb0, 0x87, 0x39, 0xba, 0x8e, 0x0f, 0x81, 0x4c, + 0xdc, 0x7a, 0xaa, 0x6c, 0x31, 0xa0, 0x0f, 0x00, 0x92, 0x9c, 0x3e, 0x8f, + 0xd1, 0x6d, 0x66, 0x43, 0x6e, 0xcc, 0x6e, 0x95, 0x7f, 0x35, 0x5c, 0xc8, + 0xf2, 0x27, 0xc9, 0x74, 0x44, 0x86, 0xeb, 0xd8, 0x72, 0x7c, 0x10, 0x9a, + 0xe2, 0x0c, 0xc2, 0x90, 0x2e, 0xdc, 0x35, 0xf6, 0x78, 0x42, 0x4a, 0x49, + 0x63, 0x9b, 0x04, 0x11, 0xd9, 0x05, 0xad, 0x7c, 0x83, 0x11, 0xe3, 0xaa, + 0x9b, 0x98, 0x49, 0xd3, 0x44, 0x98, 0x0b, 0x01, 0x2f, 0x3d, 0x92, 0x53, + 0x51, 0xee, 0xdd, 0x69, 0x1e, 0x10, 0x15, 0xba, 0xab, 0xf7, 0x17, 0x76, + 0xf3, 0x59, 0xf5, 0xb9, 0xd7, 0x64, 0xb8, 0x47, 0x2e, 0xed, 0xe4, 0xb5, + 0x68, 0x69, 0x2c, 0x6e, 0xe1, 0xab, 0x8c, 0xfc, 0x82, 0x4a, 0x72, 0x7e, + 0xb8, 0x3b, 0xd3, 0xe8, 0xa1, 0xbc, 0x6f, 0xb5, 0x83, 0x4f, 0x9b, 0xbf, + 0x82, 0xe4, 0x1b, 0x79, 0xad, 0xf5, 0x9b, 0xbd, 0xc0, 0x68, 0x48, 0x3d, + 0xbb, 0x6a, 0xba, 0xef, 0xae, 0x25, 0xaf, 0xc0, 0xc7, 0xa4, 0x89, 0x16, + 0x5a, 0x49, 0x03, 0x4d, 0x18, 0xd3, 0x3f, 0x95, 0x72, 0x74, 0xe3, 0xee, + 0x0d, 0x73, 0xb5, 0x60, 0x02, 0x1a, 0x47, 0x87, 0x74, 0x94, 0x9e, 0xf7, + 0x6e, 0xa2, 0xa3, 0x20, 0x43, 0xe1, 0xb1, 0x24, 0x99, 0x89, 0xd5, 0x6a, + 0x12, 0xdf, 0x49, 0xfa, 0xfd, 0xdf, 0x35, 0x9b, 0x97, 0x0e, 0x65, 0x04, + 0x37, 0x68, 0xde, 0xe2, 0x47, 0x1e, 0x0b, 0x49, 0xac, 0x0e, 0x63, 0x80, + 0xd0, 0x4f, 0xf7, 0xa4, 0xa7, 0x1b, 0x22, 0x5b, 0x63, 0x4f, 0x89, 0x1f, + 0x95, 0x68, 0xf4, 0xda, 0xf6, 0xe7, 0xb6, 0x39, 0x2f, 0xd3, 0xee, 0x2a, + 0x86, 0x58, 0x3b, 0xab, 0x91, 0xcb, 0x80, 0xfc, 0x56, 0x9f, 0x4e, 0xd7, + 0xa8, 0x30, 0x11, 0xf4, 0x0b, 0x84, 0xfc, 0x8a, 0x4a, 0x7a, 0xa2, 0xd3, + 0xe9, 0x33, 0x6e, 0xbe, 0xd0, 0x0f, 0x91, 0x29, 0x00, 0x43, 0x9a, 0x3b, + 0xed, 0xfe, 0x21, 0x4e, 0x25, 0x8c, 0x33, 0xae, 0x83, 0xf0, 0x0a, 0x2e, + 0x77, 0xbc, 0x08, 0xd6, 0x0e, 0xbf, 0x30, 0x92, 0x96, 0x6c, 0x73, 0xf1, + 0xfc, 0xa1, 0x72, 0x5d, 0x7c, 0x13, 0xd4, 0xaf, 0x9e, 0x64, 0x7f, 0xd4, + 0x85, 0xd6, 0x34, 0x18, 0x69, 0xf1, 0x04, 0xfe, 0x2b, 0x96, 0xea, 0xa0, + 0x3f, 0x3f, 0x20, 0xf3, 0xee, 0x3a, 0xfc, 0x80, 0x49, 0x4e, 0x4e, 0xc2, + 0x18, 0x0f, 0xf2, 0x9b, 0xf9, 0x56, 0xb4, 0x15, 0x42, 0xc1, 0xb6, 0xb2, + 0x47, 0x88, 0x95, 0xa3, 0x1f, 0xa3, 0x9e, 0xc9, 0x29, 0xd5, 0xdc, 0xd0, + 0x36, 0x81, 0x00, 0x76, 0xf0, 0x40, 0xcd, 0xda, 0x30, 0xdc, 0x4f, 0x2e, + 0x88, 0xfb, 0xd4, 0xc3, 0x46, 0xd2, 0x7c, 0x4a, 0xaf, 0x9e, 0x63, 0x18, + 0x13, 0xe5, 0xf9, 0x52, 0x52, 0xcc, 0x74, 0x32, 0x7c, 0x54, 0x2e, 0x7f, + 0xb6, 0x0a, 0x66, 0xbb, 0xf4, 0x6d, 0xee, 0x50, 0xef, 0x78, 0x88, 0xf1, + 0xee, 0x92, 0x98, 0x62, 0x19, 0x0f, 0xf8, 0xa2, 0x3c, 0xfe, 0x42, 0xab, + 0xe2, 0xbc, 0x80, 0xfe, 0x39, 0x84, 0xd7, 0x64, 0xb5, 0x9a, 0x38, 0x13, + 0xcc, 0x6d, 0x49, 0x4d, 0x96, 0xbe, 0x08, 0x3f, 0x04, 0x85, 0x92, 0xef, + 0x98, 0x27, 0xe0, 0xa3, 0x8a, 0xe6, 0x59, 0xb4, 0x39, 0xb2, 0x4e, 0xa6, + 0x5c, 0x78, 0x56, 0xac, 0xc2, 0xac, 0x3b, 0x6e, 0xc8, 0xdc, 0x01, 0x69, + 0xdc, 0x4f, 0xf1, 0x49, 0x4b, 0x55, 0x60, 0x73, 0x79, 0x9f, 0x05, 0x4d, + 0xce, 0x73, 0xb3, 0x86, 0xba, 0x12, 0x03, 0x5b, 0x3f, 0x8a, 0x96, 0x76, + 0x35, 0xb8, 0xf8, 0xc6, 0xea, 0x43, 0x5b, 0x58, 0x12, 0x5e, 0x1c, 0x79, + 0x1a, 0x42, 0xa1, 0x89, 0x95, 0xbf, 0x22, 0xa7, 0x13, 0x30, 0xe9, 0x9f, + 0x92, 0x4a, 0x6d, 0x66, 0x58, 0x2b, 0xb9, 0x8f, 0x76, 0x84, 0x38, 0x81, + 0x3c, 0x00, 0x41, 0xf0, 0x59, 0xd9, 0x59, 0x57, 0xba, 0xc7, 0x1a, 0x83, + 0x64, 0xeb, 0xea, 0x11, 0xac, 0x01, 0xc2, 0xd3, 0xca, 0xb2, 0xd7, 0x5f, + 0x0d, 0x63, 0x0d, 0x2f, 0x30, 0x37, 0x89, 0xe0, 0x72, 0xaa, 0xd9, 0x43, + 0x9c, 0x08, 0xf4, 0x99, 0xaf, 0xee, 0x92, 0x12, 0x53, 0xe8, 0x14, 0x34, + 0x1a, 0x98, 0xed, 0x4f, 0xb1, 0xa4, 0x7c, 0xda, 0x13, 0x38, 0x68, 0x7c, + 0x5a, 0x89, 0x82, 0xf1, 0x66, 0x0e, 0x3b, 0xc7, 0x7a, 0xd9, 0xff, 0x00, + 0x52, 0x12, 0xb0, 0x46, 0x83, 0xe6, 0x92, 0x9a, 0x16, 0x38, 0xba, 0x47, + 0x8e, 0x9a, 0x72, 0xa0, 0xc6, 0x38, 0x82, 0x0f, 0x1d, 0x91, 0x6d, 0xda, + 0xd7, 0x13, 0xe0, 0x9a, 0x4c, 0x07, 0x4c, 0x8e, 0x52, 0x52, 0x2d, 0xaf, + 0x24, 0x33, 0x96, 0xf8, 0xa2, 0x16, 0x86, 0x88, 0x3f, 0x7a, 0x98, 0x23, + 0xe8, 0xfc, 0x60, 0xa4, 0xf6, 0xcb, 0x41, 0x22, 0x52, 0x53, 0x02, 0x40, + 0xd3, 0xbf, 0x92, 0x79, 0x98, 0x3f, 0x7a, 0x18, 0x24, 0xcc, 0x1d, 0x02, + 0x2b, 0x4c, 0xb6, 0x02, 0x4a, 0x61, 0xb4, 0x6e, 0x2e, 0xd5, 0x44, 0x17, + 0x06, 0x92, 0x06, 0x81, 0x15, 0xbe, 0xe0, 0x41, 0x94, 0xbd, 0x32, 0x3e, + 0x25, 0x25, 0x22, 0xdf, 0xba, 0x08, 0x32, 0x96, 0x43, 0xc8, 0xaf, 0xc3, + 0x44, 0xb6, 0xb8, 0x59, 0xc6, 0x87, 0xc1, 0x2c, 0xa6, 0x82, 0xc0, 0xd2, + 0x35, 0x29, 0x29, 0xa3, 0xd3, 0x01, 0x7e, 0x63, 0xdc, 0x38, 0x68, 0x26, + 0x3e, 0x6b, 0x67, 0x18, 0x97, 0x34, 0xb8, 0x68, 0xdf, 0xa2, 0xd5, 0x9b, + 0xd2, 0xe8, 0x8b, 0xdc, 0x4e, 0x81, 0xc0, 0x8f, 0x9c, 0xad, 0x9a, 0x83, + 0x5a, 0xd8, 0x10, 0x1a, 0xd1, 0xf7, 0x78, 0x92, 0x92, 0x9e, 0x3b, 0xeb, + 0x9d, 0xc5, 0xdd, 0x43, 0x0f, 0x19, 0x8e, 0x03, 0xd1, 0x61, 0xb1, 0xed, + 0x9e, 0xf6, 0x18, 0x1f, 0x83, 0x56, 0x1d, 0x5f, 0x68, 0x93, 0x5b, 0x6c, + 0x68, 0x93, 0xa1, 0x3c, 0x29, 0xe7, 0xe7, 0x7e, 0xd1, 0xea, 0xd9, 0x19, + 0xa0, 0x6e, 0xad, 0xef, 0x22, 0xb1, 0xfc, 0x86, 0xfb, 0x59, 0xf8, 0x05, + 0x7b, 0x1d, 0xc1, 0xe3, 0x68, 0x1b, 0x52, 0x53, 0x56, 0xd6, 0xe7, 0x37, + 0xf4, 0x76, 0x5d, 0x53, 0x9a, 0x35, 0x9d, 0xa6, 0x75, 0xf8, 0x15, 0x7b, + 0xa7, 0xd9, 0x7d, 0xbe, 0xa3, 0x5e, 0x01, 0xad, 0xac, 0x9d, 0xcd, 0x04, + 0x7b, 0x87, 0xc7, 0xe2, 0x81, 0x76, 0x82, 0x16, 0x97, 0x49, 0xa1, 0xe7, + 0x10, 0xbf, 0xdd, 0x0e, 0x24, 0x7b, 0x48, 0x01, 0x25, 0x38, 0xbd, 0x49, + 0xa5, 0x81, 0xbe, 0x4f, 0x1f, 0x94, 0x2d, 0x5c, 0x0f, 0xe9, 0xed, 0xf3, + 0x24, 0xfe, 0x0a, 0xaf, 0x5e, 0xa1, 0xb5, 0x56, 0xc7, 0x33, 0x70, 0x97, + 0x80, 0x5a, 0xee, 0x74, 0x23, 0xb8, 0x47, 0xe9, 0xd6, 0x35, 0xdd, 0x41, + 0xa3, 0x5d, 0xc3, 0x73, 0x63, 0xe0, 0x0a, 0x4a, 0x7a, 0xc2, 0xef, 0xd0, + 0xb4, 0xf7, 0x1b, 0x63, 0xf2, 0x15, 0x13, 0x25, 0xc3, 0xb9, 0x00, 0xeb, + 0xf3, 0x09, 0xc1, 0xfd, 0x13, 0x64, 0x41, 0xf6, 0xa8, 0xeb, 0xb8, 0x4f, + 0xf2, 0xbf, 0x28, 0x49, 0x4a, 0x6b, 0x64, 0x01, 0x31, 0x20, 0x85, 0xc8, + 0x3c, 0x69, 0x1c, 0xc4, 0x89, 0xf8, 0x68, 0xbb, 0x06, 0x88, 0x0d, 0x1e, + 0x6e, 0x5c, 0x93, 0xc6, 0xa7, 0xe2, 0x52, 0x53, 0x5a, 0xd0, 0x7d, 0x17, + 0x2b, 0xff, 0x00, 0xe0, 0x22, 0x3b, 0xaa, 0x97, 0xb6, 0x31, 0xdc, 0x7c, + 0xd5, 0x8d, 0xe3, 0xec, 0xfd, 0xfe, 0x94, 0x24, 0xa7, 0x47, 0xd4, 0x6c, + 0x0d, 0x47, 0x92, 0xab, 0xd4, 0x2e, 0x6b, 0xa8, 0x20, 0x6a, 0x5a, 0x46, + 0x83, 0xc2, 0x55, 0x93, 0x6b, 0x47, 0x31, 0xae, 0x81, 0x48, 0xbd, 0x91, + 0xc0, 0x49, 0x4e, 0x55, 0x77, 0x8d, 0x1a, 0x41, 0x13, 0xaf, 0x08, 0x76, + 0xda, 0xd7, 0x38, 0xc4, 0xc0, 0xf2, 0x5a, 0x62, 0x4b, 0xf7, 0x48, 0xd3, + 0xb2, 0x93, 0x9c, 0xd8, 0xd4, 0x4c, 0x78, 0x24, 0xa7, 0x12, 0x87, 0x0f, + 0x77, 0x61, 0x20, 0xf8, 0x28, 0xdd, 0xad, 0x8d, 0x74, 0x8e, 0x79, 0x5a, + 0xce, 0x73, 0x08, 0x21, 0xba, 0x15, 0x4f, 0x30, 0x56, 0x69, 0x7c, 0x08, + 0x77, 0x2d, 0x3d, 0xd2, 0x53, 0x0a, 0x7d, 0x7b, 0x6d, 0x61, 0xae, 0x1d, + 0x3a, 0x1d, 0x16, 0xb3, 0x05, 0x96, 0x5c, 0x06, 0xa7, 0x6c, 0x87, 0x0e, + 0x20, 0x01, 0xc0, 0x59, 0xdd, 0x27, 0x23, 0x1d, 0x96, 0x4d, 0xae, 0xdb, + 0x1f, 0x76, 0x9c, 0xab, 0xf4, 0xbf, 0x2a, 0xf2, 0xdb, 0x29, 0x61, 0x35, + 0x12, 0x48, 0x77, 0x3a, 0x4a, 0x4a, 0x47, 0xd6, 0x29, 0x8e, 0x99, 0x63, + 0x80, 0x86, 0xb5, 0xa7, 0x42, 0x7b, 0x9d, 0x74, 0x5c, 0xd7, 0x4b, 0xd7, + 0x22, 0x9f, 0xeb, 0x70, 0xba, 0x7e, 0xb3, 0x90, 0x1f, 0xd2, 0xed, 0xa9, + 0xc2, 0x1e, 0xd1, 0xaf, 0xcf, 0x45, 0xce, 0xf4, 0xd0, 0x3d, 0x6a, 0x7c, + 0xc8, 0x49, 0x4e, 0xde, 0x67, 0xf8, 0x26, 0xf7, 0xdd, 0x22, 0x3e, 0x08, + 0x3b, 0x08, 0x83, 0xe2, 0xac, 0xe5, 0x34, 0xfa, 0xb5, 0x0e, 0xd3, 0xfc, + 0x0a, 0x68, 0xd2, 0x3b, 0x24, 0xa7, 0xa8, 0xe8, 0x96, 0x6f, 0xe9, 0x74, + 0x8e, 0xec, 0x96, 0x1f, 0xec, 0x9f, 0xee, 0x56, 0xad, 0xfa, 0x3e, 0x7d, + 0x96, 0x4f, 0xd5, 0xec, 0xa1, 0x5f, 0xa9, 0x89, 0x61, 0x01, 0xbf, 0xce, + 0x31, 0xc7, 0x4f, 0x27, 0x05, 0x6b, 0xa8, 0xf5, 0xac, 0x0c, 0x5a, 0x89, + 0x16, 0x36, 0xdb, 0x7f, 0x36, 0xb6, 0x19, 0x93, 0xe6, 0x47, 0x01, 0x25, + 0x32, 0x35, 0x02, 0x64, 0xf0, 0x10, 0xf6, 0x81, 0x2d, 0x8d, 0x3c, 0x57, + 0x3c, 0xce, 0xb1, 0x99, 0x93, 0xd5, 0x71, 0xab, 0xba, 0xef, 0x4e, 0x87, + 0x93, 0x15, 0xb7, 0xda, 0xd7, 0x12, 0xd3, 0xb4, 0x7d, 0xeb, 0xa5, 0xc5, + 0xa8, 0x3d, 0xb2, 0xef, 0x87, 0xdc, 0x92, 0x98, 0x56, 0xc9, 0xd4, 0x19, + 0x44, 0x73, 0x4e, 0xc2, 0x3f, 0x05, 0x0b, 0xa8, 0x7b, 0x5d, 0xfa, 0x37, + 0xb9, 0xbf, 0x02, 0x80, 0xe7, 0x5e, 0xdf, 0xf0, 0x87, 0x5d, 0x12, 0x52, + 0x76, 0x50, 0x22, 0x5d, 0xdd, 0x10, 0x57, 0x58, 0x1e, 0xe7, 0x01, 0x1e, + 0x6a, 0xa0, 0xf5, 0x9c, 0x36, 0x97, 0x93, 0x3c, 0xca, 0x8b, 0xa8, 0x2e, + 0x92, 0xed, 0x49, 0xee, 0x52, 0x53, 0x61, 0xf6, 0x31, 0x82, 0x03, 0x9b, + 0x3e, 0x65, 0x05, 0xb9, 0x0d, 0x92, 0xed, 0xdf, 0x76, 0xaa, 0x2d, 0xc5, + 0x0d, 0x1a, 0xf2, 0x9c, 0x55, 0x13, 0x03, 0x84, 0x94, 0xcb, 0xed, 0x95, + 0xb7, 0x5d, 0xa5, 0xdf, 0x82, 0x0b, 0xf2, 0x9d, 0x61, 0xf6, 0xd7, 0x03, + 0xc4, 0x99, 0x44, 0x34, 0x89, 0xd4, 0x79, 0x22, 0x55, 0x8d, 0xb8, 0x80, + 0x06, 0x9f, 0xdc, 0x92, 0x96, 0xc6, 0xad, 0xdb, 0x0d, 0xaf, 0xfa, 0x4e, + 0xfa, 0x02, 0x20, 0x09, 0x40, 0xfa, 0xc9, 0x76, 0x6d, 0x7d, 0x1e, 0xea, + 0x7a, 0x7d, 0x2f, 0xbb, 0x2b, 0x28, 0x7a, 0x2d, 0x15, 0x89, 0x2d, 0x6b, + 0xbe, 0x9b, 0xb4, 0xfe, 0x4e, 0x9f, 0x35, 0xa7, 0x65, 0x45, 0xa5, 0x95, + 0x8f, 0x89, 0x5c, 0xf3, 0xbe, 0xb4, 0xbc, 0xf5, 0x8b, 0xf0, 0x31, 0x0b, + 0x4b, 0x31, 0xfd, 0xad, 0x9d, 0x45, 0x85, 0xbf, 0x4e, 0x3e, 0x05, 0x25, + 0x3c, 0xf7, 0x4d, 0xfa, 0xaf, 0xf5, 0x80, 0xd7, 0x07, 0x0d, 0xd5, 0xc7, + 0xef, 0x90, 0xdf, 0xca, 0x56, 0xe6, 0x1f, 0xd5, 0x7e, 0xae, 0xd8, 0x75, + 0x8d, 0x63, 0x3c, 0x8b, 0xe4, 0xfe, 0x12, 0xb5, 0xeb, 0xeb, 0xd9, 0x9f, + 0x9d, 0x8e, 0xc3, 0xf0, 0x24, 0x2b, 0x15, 0xf5, 0x9b, 0x9d, 0xce, 0x34, + 0x7c, 0x1d, 0xfe, 0xc4, 0x94, 0xe3, 0x5b, 0xf5, 0x4f, 0xa8, 0xd9, 0xae, + 0xfa, 0x87, 0xcc, 0xff, 0x00, 0x72, 0x2e, 0x3f, 0xd5, 0xfe, 0xa7, 0x8f, + 0x4b, 0x6a, 0xdc, 0xc3, 0x12, 0x74, 0x3a, 0x73, 0xe6, 0xb6, 0xdb, 0xd5, + 0x1e, 0x7f, 0xed, 0x3b, 0xbf, 0xce, 0x0a, 0x63, 0x3d, 0xce, 0xff, 0x00, + 0x00, 0xef, 0xbc, 0x24, 0xa7, 0x95, 0xea, 0x5f, 0x57, 0x7a, 0xae, 0x54, + 0x06, 0xec, 0xf6, 0x90, 0x75, 0x76, 0x88, 0x38, 0xfd, 0x17, 0xaa, 0xe2, + 0xf5, 0x16, 0x64, 0xdc, 0xc6, 0x8c, 0x76, 0x97, 0x12, 0x43, 0x81, 0xd0, + 0x82, 0x06, 0x9f, 0x15, 0xd8, 0xfa, 0xee, 0x76, 0xbe, 0x8b, 0xfe, 0xf0, + 0xaa, 0x75, 0x17, 0xb9, 0x98, 0x76, 0xda, 0x6b, 0x70, 0x6b, 0x44, 0x92, + 0x48, 0xf1, 0x1e, 0x49, 0x29, 0x76, 0x7d, 0x06, 0xf7, 0xe3, 0xf0, 0x51, + 0x2e, 0x88, 0x23, 0xb3, 0x9c, 0x23, 0xe6, 0x9d, 0x8e, 0x05, 0x8c, 0x81, + 0xda, 0x44, 0x7c, 0x02, 0x00, 0x74, 0x91, 0xe3, 0xbc, 0xa4, 0xa4, 0xed, + 0x82, 0x40, 0xf3, 0x26, 0x3e, 0x21, 0x71, 0x9e, 0xa5, 0x85, 0xc4, 0x18, + 0x70, 0x92, 0x34, 0xec, 0xbb, 0x56, 0x0f, 0xd2, 0x0f, 0xeb, 0x03, 0xf8, + 0x2f, 0x3e, 0xb7, 0xed, 0x4e, 0x71, 0x68, 0x21, 0xa3, 0x71, 0xd4, 0x73, + 0xca, 0x4a, 0x75, 0x2f, 0xc6, 0xb9, 0xd8, 0xae, 0x01, 0x84, 0xba, 0x78, + 0x08, 0x9b, 0x1f, 0xe8, 0x47, 0xa6, 0xed, 0xdc, 0xf0, 0xb3, 0xc3, 0xb2, + 0x1a, 0x1a, 0xfa, 0x9c, 0xed, 0xcd, 0xf3, 0x9d, 0xdf, 0x19, 0x4f, 0xfb, + 0x47, 0xad, 0x47, 0xa7, 0xed, 0xdb, 0xcf, 0xab, 0x1a, 0xed, 0xf0, 0x8f, + 0x8a, 0x4a, 0x6d, 0x0b, 0x73, 0x1f, 0x1a, 0xb4, 0x0f, 0x18, 0x3f, 0x86, + 0xaa, 0x60, 0x65, 0x13, 0xad, 0x82, 0x3c, 0x36, 0x9f, 0xef, 0x56, 0x4e, + 0xd2, 0x7d, 0xbc, 0x79, 0xa7, 0xd5, 0x25, 0x21, 0x0c, 0xc8, 0xef, 0x68, + 0xf9, 0xb5, 0x45, 0xd5, 0xdb, 0xfe, 0x93, 0xee, 0x6f, 0xfb, 0x55, 0x93, + 0x24, 0x68, 0xa0, 0x44, 0x1f, 0x73, 0xa1, 0x25, 0x35, 0xfd, 0x1b, 0x8f, + 0x0f, 0x20, 0x7c, 0x02, 0xaf, 0x91, 0x49, 0x60, 0x82, 0xf2, 0xf7, 0xbf, + 0xe8, 0xb0, 0x01, 0xb9, 0xca, 0xcb, 0xb2, 0x9c, 0xf7, 0x9a, 0xf1, 0xc8, + 0x71, 0x1a, 0x39, 0xe7, 0xe8, 0xb4, 0xff, 0x00, 0x12, 0xa5, 0x55, 0x42, + 0xa9, 0x71, 0x3b, 0x9e, 0xef, 0xa4, 0xf7, 0x72, 0x7c, 0x92, 0x53, 0x9a, + 0xde, 0x9c, 0xf6, 0x91, 0x2e, 0x3b, 0x4f, 0xd2, 0xd2, 0x61, 0x5f, 0xc4, + 0xb7, 0x27, 0x0c, 0xb7, 0x64, 0xb8, 0x30, 0x43, 0x24, 0x01, 0xc8, 0xee, + 0x25, 0x1f, 0x78, 0x8e, 0xc1, 0x3c, 0xb4, 0x02, 0x74, 0x49, 0x4d, 0x2c, + 0xff, 0x00, 0xb4, 0xe6, 0x30, 0xb1, 0xc5, 0xac, 0x07, 0x9f, 0x9f, 0xc1, + 0x54, 0xc3, 0xe9, 0xb6, 0xe3, 0xdd, 0x55, 0x9e, 0xa0, 0x73, 0x58, 0xe0, + 0x48, 0xf1, 0x5a, 0x65, 0x85, 0xc6, 0x60, 0xfc, 0x82, 0x73, 0x59, 0x0d, + 0x98, 0x22, 0x3c, 0x42, 0x4a, 0x56, 0x6b, 0xaa, 0xf5, 0x59, 0xbd, 0xdb, + 0x1c, 0x35, 0x61, 0x8d, 0x0f, 0x92, 0x80, 0xf5, 0x6c, 0x91, 0x4b, 0xeb, + 0x79, 0xf0, 0x26, 0x3f, 0x2a, 0x59, 0xa5, 0xd6, 0x1a, 0xbd, 0x31, 0x2f, + 0xdd, 0xed, 0xf0, 0x1e, 0x7f, 0x24, 0x4a, 0xf1, 0x69, 0x63, 0x43, 0x5d, + 0xee, 0x3c, 0x92, 0x79, 0x24, 0xf2, 0x52, 0x53, 0x52, 0xc7, 0xf5, 0x10, + 0x60, 0x54, 0x0c, 0x78, 0x11, 0xfd, 0xe9, 0xb1, 0xea, 0xca, 0xb6, 0xf1, + 0xf6, 0x86, 0xc3, 0x60, 0xf7, 0x1c, 0xf8, 0x68, 0xae, 0x1c, 0x6c, 0x6f, + 0xe5, 0x02, 0x38, 0x82, 0x42, 0x25, 0x14, 0x91, 0x68, 0x2d, 0x71, 0x3c, + 0xe8, 0xef, 0x34, 0x94, 0xe5, 0x75, 0x6c, 0x67, 0x3a, 0xca, 0x45, 0x63, + 0x59, 0x90, 0x26, 0x20, 0xb7, 0x51, 0xa8, 0x5d, 0x8f, 0xd5, 0xeb, 0xed, + 0xc9, 0xe9, 0xf5, 0xd9, 0x7c, 0x0b, 0x44, 0xb5, 0xf1, 0xac, 0x90, 0x62, + 0x7e, 0x6b, 0x97, 0xea, 0xcd, 0xb9, 0xf6, 0x56, 0x31, 0xe4, 0x38, 0x1d, + 0x22, 0x27, 0xcf, 0x95, 0xbf, 0xf5, 0x39, 0xd7, 0x8c, 0x5b, 0xa8, 0xc8, + 0x1e, 0xf6, 0x3c, 0x38, 0x1d, 0x0f, 0xb5, 0xc3, 0xcb, 0xcc, 0x24, 0xa7, + 0x6a, 0xc6, 0x49, 0x55, 0xdd, 0x40, 0x74, 0x3b, 0xef, 0xf2, 0x2a, 0xed, + 0x91, 0x20, 0x21, 0x32, 0x7d, 0xc0, 0x0f, 0x30, 0x92, 0x9a, 0xcd, 0xc6, + 0xd4, 0x1f, 0x39, 0x2a, 0x66, 0x91, 0x1c, 0x2b, 0x03, 0x91, 0x23, 0xe2, + 0x85, 0x76, 0x4e, 0x3d, 0x72, 0x5f, 0x6b, 0x1a, 0x39, 0xd5, 0xc1, 0x25, + 0x23, 0x75, 0x4a, 0x3e, 0x90, 0x80, 0x84, 0xee, 0xad, 0xd3, 0x9a, 0x09, + 0x39, 0x0d, 0x70, 0x6c, 0xee, 0xdb, 0x26, 0x23, 0xe0, 0x15, 0x13, 0xf5, + 0xa7, 0xa0, 0x86, 0xeb, 0x96, 0x07, 0x3a, 0x6d, 0x7c, 0xff, 0x00, 0xd4, + 0xa4, 0xa7, 0x4f, 0xd3, 0x92, 0x3e, 0x2a, 0xcd, 0x55, 0x43, 0xc7, 0x80, + 0x58, 0x7f, 0xf3, 0xb7, 0xa0, 0x34, 0xb6, 0x32, 0x0b, 0xa3, 0x58, 0x6d, + 0x6f, 0xff, 0x00, 0xc8, 0xad, 0x3e, 0x99, 0xd5, 0xf0, 0x3a, 0x8b, 0x1d, + 0x6e, 0x15, 0x9e, 0xa3, 0x18, 0x76, 0xbc, 0x10, 0x5a, 0xe6, 0x9e, 0x75, + 0x07, 0x54, 0x94, 0xd5, 0xfa, 0xc7, 0x9c, 0xfc, 0x3c, 0x1b, 0x5f, 0x49, + 0xdb, 0x7d, 0x87, 0xd1, 0xa5, 0xff, 0x00, 0xba, 0x48, 0xf7, 0x3b, 0xe4, + 0x17, 0x9e, 0x53, 0x86, 0xfa, 0x32, 0x19, 0x91, 0x5d, 0xd1, 0x63, 0x1d, + 0xbb, 0x59, 0xd7, 0xc6, 0x7e, 0x2b, 0xb1, 0xfa, 0xc4, 0xd7, 0xe5, 0x64, + 0x33, 0x1c, 0x3b, 0xd9, 0x4c, 0x92, 0x3f, 0x96, 0xfd, 0x4f, 0xe0, 0xb1, + 0x8f, 0x47, 0x7b, 0xb8, 0x29, 0x29, 0xd9, 0xc2, 0xca, 0xae, 0xe6, 0x07, + 0xb4, 0x8d, 0x79, 0x1e, 0x05, 0x69, 0x52, 0xe6, 0xae, 0x43, 0xf6, 0x5f, + 0x50, 0xa1, 0xdb, 0xe8, 0xb3, 0x6f, 0x89, 0x07, 0x4f, 0x9a, 0xd3, 0xc6, + 0x39, 0xac, 0x63, 0x45, 0xc6, 0xcd, 0xf1, 0xab, 0x9a, 0x1a, 0xe6, 0x9f, + 0xc8, 0x92, 0x9e, 0xa2, 0xb2, 0xd5, 0x65, 0x9b, 0x57, 0x3b, 0x55, 0xef, + 0x8d, 0x6f, 0x73, 0x7e, 0x35, 0x9f, 0xe0, 0xac, 0xb3, 0x24, 0x01, 0xae, + 0x51, 0xe3, 0x81, 0x53, 0xa5, 0x25, 0x3b, 0xcd, 0x2d, 0x54, 0xba, 0xd6, + 0xd7, 0x74, 0xfb, 0x1a, 0x75, 0x92, 0xdd, 0x3f, 0xb4, 0x15, 0x06, 0xe7, + 0xd0, 0xfa, 0xbd, 0x4a, 0xb2, 0x2d, 0xb8, 0x1e, 0x36, 0xb0, 0x37, 0xe4, + 0x77, 0x70, 0xb3, 0xcb, 0xf3, 0x6e, 0xb3, 0x75, 0xf6, 0x1f, 0x4c, 0x49, + 0x0d, 0xed, 0xe4, 0x92, 0x9d, 0x13, 0xb8, 0x70, 0x79, 0x02, 0x3e, 0x29, + 0xaa, 0x78, 0x73, 0x88, 0x22, 0x08, 0x7c, 0x90, 0xa6, 0xf0, 0xd2, 0x0f, + 0x68, 0x03, 0xf8, 0x28, 0x56, 0xc9, 0x2c, 0x7f, 0x12, 0x49, 0x9f, 0x99, + 0x49, 0x4d, 0xba, 0x64, 0xbf, 0xcb, 0x9f, 0xc1, 0x70, 0x85, 0xd6, 0xbe, + 0xdf, 0x55, 0x84, 0x39, 0xa1, 0xce, 0xde, 0xde, 0xe3, 0x5e, 0x21, 0x77, + 0x54, 0x72, 0xf2, 0x75, 0x8e, 0x57, 0x23, 0x91, 0x84, 0x37, 0x9b, 0x5a, + 0x76, 0x58, 0x49, 0xf7, 0x0e, 0xfa, 0xf7, 0x1d, 0xd2, 0x53, 0x54, 0xe4, + 0xe4, 0x9f, 0xa1, 0x5b, 0x0b, 0x3b, 0x7b, 0xa0, 0x8f, 0xc1, 0x13, 0xed, + 0x57, 0xed, 0x8f, 0x4d, 0xbf, 0x09, 0x52, 0x0e, 0xd8, 0x63, 0x21, 0x9b, + 0x4f, 0x01, 0xe0, 0x7b, 0x4a, 0x36, 0xc6, 0xc4, 0xc6, 0x9e, 0x29, 0x29, + 0xb7, 0xb5, 0xde, 0x0a, 0x41, 0x8e, 0xf0, 0x53, 0xbe, 0xca, 0xe8, 0x69, + 0x75, 0xae, 0x0c, 0x6b, 0x44, 0x9d, 0x78, 0x58, 0xd6, 0xf5, 0x6b, 0xf3, + 0x1e, 0xea, 0x7a, 0x70, 0x37, 0x34, 0x7d, 0x2b, 0x27, 0x6b, 0x1b, 0xf1, + 0x77, 0xf0, 0x09, 0x29, 0xbd, 0x91, 0x95, 0x4e, 0x38, 0xf7, 0x10, 0x5d, + 0xe0, 0x35, 0x2a, 0xb8, 0x65, 0xf9, 0x10, 0xeb, 0x7f, 0x45, 0x59, 0xd4, + 0x56, 0x0f, 0xb8, 0xff, 0x00, 0x5b, 0xc1, 0x3e, 0x2e, 0x17, 0xa7, 0xfa, + 0x5b, 0x66, 0xdb, 0xbb, 0xbc, 0x8f, 0x68, 0x27, 0xf7, 0x02, 0xb4, 0x64, + 0x08, 0x80, 0x92, 0x91, 0x8a, 0xc3, 0x40, 0x6b, 0x40, 0x68, 0x1d, 0x82, + 0x8e, 0xcd, 0xc7, 0xba, 0x28, 0x24, 0xf2, 0xd0, 0x3c, 0xb9, 0x44, 0x0d, + 0xd3, 0x41, 0x12, 0x92, 0x90, 0xfa, 0x62, 0x34, 0x26, 0x53, 0xfa, 0x4e, + 0xd0, 0x93, 0x3e, 0x2a, 0xcb, 0x6b, 0x6b, 0x44, 0x9f, 0xc1, 0x42, 0xc7, + 0xb5, 0x8d, 0xde, 0xee, 0x09, 0x01, 0xa0, 0x72, 0xe2, 0x7b, 0x04, 0x94, + 0xc5, 0xad, 0x20, 0x44, 0xc7, 0x82, 0x16, 0x45, 0x8d, 0xa6, 0xbd, 0xf6, + 0x3e, 0x1b, 0xa0, 0xf9, 0x9d, 0x00, 0x47, 0x63, 0x48, 0xf7, 0x38, 0x82, + 0xee, 0xe0, 0x76, 0xf2, 0x0a, 0x9d, 0x75, 0xfd, 0xb6, 0xf1, 0x91, 0x6f, + 0xb6, 0x9a, 0xe7, 0xec, 0xf5, 0x90, 0x7d, 0xc7, 0x83, 0x63, 0xbf, 0x82, + 0x4a, 0x49, 0x64, 0x34, 0xb0, 0xb7, 0x4e, 0x7f, 0x22, 0x63, 0x7b, 0xf8, + 0x47, 0x7e, 0x23, 0x2c, 0x80, 0x5c, 0x4c, 0x78, 0x26, 0x38, 0xc1, 0xbc, + 0x48, 0x49, 0x4d, 0x7d, 0xf6, 0xf6, 0x1a, 0x23, 0xe0, 0x39, 0xff, 0x00, + 0x69, 0x87, 0x0f, 0xcd, 0x30, 0xa0, 0x6a, 0x77, 0x89, 0x2a, 0x78, 0xed, + 0x73, 0x6d, 0x69, 0x1c, 0xa4, 0xa6, 0x19, 0xe7, 0xd3, 0xbd, 0x85, 0xba, + 0xf2, 0x4c, 0x79, 0xca, 0x3f, 0x4a, 0xeb, 0x0c, 0xe9, 0xf6, 0xda, 0xfb, + 0x2a, 0x7b, 0xc5, 0x81, 0xa2, 0x1b, 0x1a, 0x6d, 0x9f, 0x1f, 0x8a, 0xad, + 0x9b, 0x0e, 0xb7, 0x41, 0x1a, 0x2a, 0x6f, 0x91, 0xa4, 0x80, 0x0a, 0x4a, + 0x6f, 0x75, 0xff, 0x00, 0xac, 0x79, 0x59, 0x4d, 0x60, 0xc5, 0xdf, 0x8a, + 0xc2, 0xe0, 0xc7, 0x43, 0xbd, 0xd0, 0x75, 0x27, 0x48, 0xec, 0x16, 0x2d, + 0x59, 0x3d, 0x44, 0x36, 0x06, 0x6d, 0x8d, 0x61, 0x32, 0x7f, 0x49, 0x66, + 0xa9, 0xef, 0x05, 0xf7, 0xd5, 0x5c, 0x88, 0x6e, 0xe7, 0xb8, 0x7c, 0xb6, + 0x8f, 0xca, 0x8e, 0xca, 0x1c, 0xf3, 0xbd, 0xcd, 0x00, 0x93, 0x20, 0x0e, + 0x02, 0x4a, 0x6c, 0xd2, 0x5e, 0xf6, 0x03, 0x63, 0xdf, 0x64, 0xf9, 0x9f, + 0xc6, 0x4a, 0x2d, 0x40, 0x06, 0x96, 0x46, 0xd0, 0xde, 0x07, 0xc5, 0x2c, + 0x5a, 0xe2, 0x3d, 0x41, 0x0d, 0xf8, 0x94, 0xb3, 0x58, 0xe0, 0xdf, 0x52, + 0xa7, 0x7b, 0x58, 0x61, 0xdf, 0x02, 0x92, 0x95, 0x1b, 0x2c, 0x03, 0xf3, + 0x2c, 0xf6, 0xbb, 0xc9, 0xdd, 0x8f, 0xcd, 0x62, 0xdd, 0x4d, 0x6c, 0xe9, + 0xf6, 0x3c, 0x8f, 0x79, 0x73, 0x5a, 0xd3, 0xdf, 0x43, 0xaa, 0xb9, 0x5e, + 0x43, 0xf7, 0xbe, 0x97, 0xda, 0x74, 0x87, 0x02, 0x40, 0x3e, 0xd3, 0xfd, + 0xc4, 0x21, 0x64, 0x57, 0x47, 0xd9, 0x4d, 0x62, 0xdd, 0xee, 0xdd, 0xbb, + 0x51, 0x1c, 0xa4, 0xa6, 0x8e, 0x1d, 0x6d, 0xe7, 0xc5, 0x6f, 0x74, 0xdb, + 0x8e, 0x1d, 0xe3, 0x23, 0x1d, 0xc1, 0x96, 0x70, 0x74, 0xd1, 0xcd, 0xf0, + 0x70, 0xee, 0xb0, 0xaa, 0x1b, 0x1d, 0xb4, 0x98, 0xd5, 0x6a, 0x61, 0xb8, + 0x6e, 0x87, 0x76, 0xd6, 0x67, 0xc5, 0x25, 0x3b, 0x4f, 0xb1, 0xf7, 0x5c, + 0xfb, 0x5d, 0x13, 0x61, 0xdd, 0xa7, 0x1a, 0xa9, 0x80, 0x63, 0x55, 0x5e, + 0xad, 0xad, 0x6e, 0xe9, 0x1b, 0x4f, 0x98, 0x85, 0x62, 0xb7, 0xd6, 0x4c, + 0x09, 0x3e, 0x3e, 0x09, 0x29, 0x98, 0x00, 0xa8, 0x02, 0x6a, 0x30, 0x09, + 0xd9, 0xfb, 0xbd, 0xc7, 0xc1, 0x1b, 0x69, 0x9f, 0x24, 0x8d, 0x61, 0xcd, + 0xda, 0x40, 0x3f, 0x14, 0x94, 0xa0, 0x64, 0x48, 0xd6, 0x52, 0x92, 0xa2, + 0xc9, 0xad, 0xe1, 0x8f, 0x3e, 0xd7, 0x68, 0xd2, 0x78, 0x9f, 0x09, 0xfe, + 0xf4, 0x57, 0x56, 0x48, 0xd0, 0x11, 0xe6, 0x12, 0x53, 0x4a, 0xf6, 0xd9, + 0x43, 0x8e, 0x46, 0x38, 0x24, 0xf3, 0x6d, 0x43, 0xf3, 0xc7, 0x88, 0xfe, + 0x52, 0x2b, 0x2f, 0xaf, 0x23, 0x1f, 0xd4, 0x61, 0x90, 0x61, 0x1f, 0xd3, + 0x90, 0xa9, 0x1c, 0x23, 0x8f, 0x7b, 0xae, 0xa9, 0xdb, 0x6a, 0x7f, 0xf3, + 0x95, 0xf6, 0xdd, 0x3a, 0x38, 0x78, 0x24, 0xa7, 0x64, 0xe9, 0x3f, 0xd5, + 0x51, 0xa8, 0xfe, 0x81, 0xa4, 0x7e, 0x6c, 0x94, 0xce, 0x7e, 0x87, 0xe0, + 0x52, 0xae, 0x3d, 0x28, 0x22, 0x0c, 0x7e, 0x29, 0x29, 0xb1, 0x4b, 0xa1, + 0xa3, 0xbe, 0xe9, 0x95, 0x90, 0xea, 0xe7, 0xb0, 0x5a, 0xd4, 0x47, 0xa6, + 0x0f, 0xe7, 0x05, 0x9c, 0xe8, 0x8d, 0xdf, 0x80, 0x49, 0x4d, 0x67, 0x57, + 0x22, 0x0b, 0x41, 0xf8, 0xa0, 0xfd, 0x91, 0x9e, 0x7b, 0x79, 0xd9, 0xd9, + 0x5c, 0xd3, 0x98, 0x91, 0xdf, 0xba, 0x24, 0x37, 0x6c, 0xc2, 0x4a, 0x79, + 0xac, 0x3e, 0x8f, 0xd4, 0x7a, 0x94, 0x5d, 0xd5, 0x6d, 0x75, 0x78, 0xe7, + 0x56, 0xd0, 0xd1, 0x0e, 0x77, 0xcb, 0xb0, 0xf8, 0xae, 0x86, 0x9c, 0x6a, + 0x28, 0xa9, 0xb5, 0x55, 0x58, 0x6b, 0x1b, 0xa0, 0x68, 0x57, 0xc5, 0x4c, + 0x22, 0x4f, 0xca, 0x54, 0x5d, 0x5d, 0x6d, 0x3a, 0x24, 0xa6, 0x9b, 0xa9, + 0x69, 0xd6, 0x23, 0xe6, 0xa3, 0xe8, 0x37, 0xf7, 0x49, 0xf0, 0x85, 0x6d, + 0xce, 0x6c, 0xfa, 0x6d, 0x6f, 0xb8, 0x0f, 0x71, 0x03, 0xf2, 0xf8, 0x27, + 0x6f, 0xa7, 0xde, 0x4f, 0x8a, 0x4a, 0x6a, 0x8c, 0x61, 0xc8, 0x6a, 0x7f, + 0xb3, 0xb7, 0xf7, 0x61, 0x5e, 0x6b, 0xab, 0x3a, 0x06, 0x8d, 0x3c, 0x90, + 0x4e, 0x45, 0x76, 0xb8, 0xb6, 0xb0, 0x08, 0x1a, 0x69, 0xae, 0xe3, 0xe4, + 0x92, 0x9a, 0xc7, 0x1e, 0x62, 0x07, 0xc0, 0x0e, 0x49, 0xf0, 0x4c, 0xdc, + 0x07, 0x97, 0xfa, 0x96, 0x9d, 0xf6, 0x0f, 0xa3, 0xdd, 0xac, 0x1e, 0x0d, + 0xfe, 0xf5, 0xa1, 0x4d, 0x2e, 0x61, 0x2e, 0x78, 0x2e, 0xb0, 0xf3, 0x1c, + 0x34, 0x78, 0x04, 0x3c, 0x8c, 0x92, 0xe7, 0x1c, 0x6a, 0x0e, 0xdb, 0x00, + 0x06, 0xd7, 0xe9, 0xfa, 0x36, 0x9f, 0xfb, 0xf1, 0xec, 0x92, 0x9a, 0x16, + 0xd2, 0xeb, 0x2c, 0x75, 0x55, 0x3b, 0xda, 0x34, 0xb5, 0xfc, 0x11, 0xfc, + 0x91, 0xe6, 0x88, 0xda, 0x1c, 0xc0, 0x00, 0x1c, 0x68, 0x02, 0xd0, 0xc5, + 0xab, 0x19, 0xd5, 0x86, 0xd2, 0x25, 0xad, 0xd2, 0x40, 0x9f, 0xc7, 0xba, + 0xb5, 0xf6, 0x71, 0xa7, 0xb3, 0xef, 0x49, 0x4e, 0x47, 0xa4, 0xff, 0x00, + 0x0e, 0x11, 0x71, 0xb0, 0x9d, 0x90, 0xfd, 0xa7, 0x46, 0xc7, 0x69, 0xd4, + 0xfc, 0x56, 0x89, 0xc6, 0x6f, 0xee, 0xc1, 0x3e, 0x49, 0xda, 0xec, 0x8a, + 0x46, 0xc6, 0x16, 0x46, 0xa4, 0x03, 0x32, 0x09, 0xee, 0x52, 0x53, 0x8f, + 0x6e, 0x1b, 0xab, 0x24, 0x3d, 0xa4, 0x10, 0x60, 0x98, 0xee, 0xa0, 0x31, + 0x20, 0x87, 0x83, 0xa8, 0xe1, 0x6d, 0xbd, 0xbe, 0xa8, 0x6b, 0xac, 0x0d, + 0xf5, 0x7f, 0x3c, 0xb6, 0x60, 0xfc, 0x8a, 0x18, 0xa1, 0xa6, 0x34, 0xd3, + 0xb2, 0x4a, 0x70, 0x6c, 0xe9, 0xc6, 0xc7, 0xee, 0x7b, 0xdc, 0x7e, 0x00, + 0x01, 0xf8, 0x21, 0xbb, 0xa6, 0xb4, 0x70, 0x27, 0xe2, 0xba, 0x51, 0x43, + 0x07, 0x65, 0x17, 0xd1, 0x50, 0x12, 0xed, 0x07, 0x74, 0x94, 0xf1, 0x83, + 0x10, 0xbf, 0x33, 0x25, 0xd0, 0x03, 0x29, 0x6b, 0x2a, 0xd7, 0xcc, 0x7a, + 0x8e, 0xfc, 0xa1, 0x69, 0x0a, 0x2a, 0x15, 0xb5, 0xed, 0x87, 0x1d, 0x1b, + 0x1e, 0x13, 0xdc, 0xad, 0x2e, 0x93, 0x88, 0xdb, 0x71, 0xac, 0xc8, 0x73, + 0x41, 0xfb, 0x55, 0xb6, 0x5a, 0x3f, 0xa8, 0x5d, 0xb5, 0x9f, 0xf4, 0x5a, + 0x11, 0x5d, 0xd1, 0x70, 0x9f, 0xcb, 0x0b, 0x35, 0x07, 0xda, 0xe2, 0x04, + 0x8f, 0x2e, 0x12, 0x53, 0x87, 0xea, 0x47, 0xaa, 0xe2, 0x21, 0xb5, 0xbb, + 0xd2, 0x33, 0xdc, 0xc8, 0x12, 0xac, 0x53, 0x4b, 0xf2, 0x6e, 0x75, 0x00, + 0x34, 0x16, 0xb4, 0x13, 0xa4, 0x07, 0x03, 0x3d, 0xb5, 0xf0, 0x5a, 0x96, + 0x74, 0x5c, 0x47, 0xb1, 0xc1, 0xcf, 0x78, 0xde, 0xe0, 0xf2, 0x7d, 0xb3, + 0xb9, 0xa4, 0x11, 0x07, 0x6f, 0x1a, 0x29, 0x8e, 0x9d, 0x53, 0xad, 0x17, + 0x3c, 0xbc, 0x5a, 0x1b, 0xb3, 0xd8, 0x76, 0x88, 0x07, 0x4e, 0x02, 0x4a, + 0x79, 0xf6, 0x74, 0xbc, 0x6b, 0x6f, 0x74, 0x69, 0x76, 0x39, 0x35, 0xdb, + 0x5f, 0x91, 0xf7, 0x03, 0xfd, 0xc8, 0xee, 0xfa, 0xbf, 0x4b, 0xb8, 0x0b, + 0x42, 0xda, 0x29, 0xc1, 0xcd, 0xab, 0x26, 0xb3, 0xb4, 0xe4, 0x45, 0x77, + 0x03, 0xae, 0xf6, 0xc8, 0x6b, 0x1f, 0xaf, 0x70, 0x5c, 0xb5, 0x1a, 0x2b, + 0x31, 0x09, 0x29, 0xe4, 0xad, 0xfa, 0xb1, 0x5b, 0xb4, 0x68, 0xda, 0x7c, + 0x5a, 0x4a, 0x18, 0xe8, 0x59, 0xb4, 0xb6, 0x18, 0xcf, 0x5a, 0x38, 0x20, + 0xc1, 0x23, 0xce, 0x57, 0x64, 0x6b, 0x67, 0x68, 0x43, 0x7b, 0x5b, 0x1c, + 0x69, 0xe4, 0x92, 0x9e, 0x6a, 0xba, 0x29, 0x0c, 0xfb, 0x25, 0xf5, 0x58, + 0xdb, 0x2e, 0x9f, 0x44, 0xc4, 0x10, 0xe6, 0x8d, 0xde, 0xde, 0xda, 0x2b, + 0x38, 0x98, 0x97, 0xfa, 0x15, 0xfa, 0xad, 0x2d, 0xbc, 0x88, 0xb6, 0x62, + 0x01, 0x1e, 0x60, 0x95, 0x7b, 0x3e, 0x8f, 0x52, 0xad, 0xd5, 0xe9, 0x6d, + 0x44, 0x58, 0xc3, 0xe6, 0xde, 0xdf, 0x31, 0xa2, 0x95, 0x4f, 0x6d, 0xb5, + 0xb6, 0xd6, 0xce, 0xd7, 0x8d, 0xc3, 0x44, 0x94, 0xa6, 0xe3, 0x9e, 0xe7, + 0x5f, 0x05, 0x31, 0x54, 0x78, 0x4a, 0x9b, 0x4f, 0x71, 0xf8, 0xa6, 0xb2, + 0xc0, 0xd3, 0x06, 0x35, 0x49, 0x48, 0xdd, 0x8e, 0xc7, 0x08, 0x7c, 0x10, + 0x79, 0x10, 0x86, 0x08, 0xa4, 0x86, 0x3b, 0xdd, 0x59, 0xd0, 0x38, 0xea, + 0x41, 0x3e, 0x28, 0xb3, 0x3a, 0xfd, 0xc8, 0x19, 0x1e, 0xab, 0x3d, 0xcd, + 0x1b, 0x98, 0x7e, 0x93, 0x63, 0x5f, 0x92, 0x4a, 0x63, 0xd4, 0x59, 0x6b, + 0xf1, 0x2d, 0x18, 0x92, 0x32, 0x03, 0x49, 0xab, 0xb0, 0x2e, 0x1d, 0xbe, + 0x6a, 0x8d, 0x39, 0x75, 0x66, 0x63, 0x35, 0xfb, 0x4d, 0x77, 0xb4, 0x86, + 0xd9, 0x59, 0x9d, 0x08, 0xe7, 0x42, 0xaf, 0x57, 0x7c, 0xb6, 0x40, 0x24, + 0x76, 0xee, 0xa8, 0xe5, 0xb2, 0xa3, 0x78, 0xc8, 0x68, 0x2c, 0xb2, 0x08, + 0x79, 0x1c, 0x3b, 0xc3, 0x77, 0x98, 0x49, 0x4d, 0xab, 0x6f, 0x6e, 0xf0, + 0xc9, 0xda, 0x1c, 0x62, 0x4f, 0x1c, 0xad, 0x1b, 0x71, 0xea, 0xa6, 0xa0, + 0xe1, 0x26, 0x08, 0x0e, 0x24, 0xfe, 0x69, 0x30, 0x4a, 0xe6, 0x32, 0x32, + 0x77, 0x5d, 0x48, 0x6c, 0x10, 0xe7, 0x16, 0xb8, 0x83, 0xc4, 0x02, 0x57, + 0x51, 0x47, 0xa5, 0xd4, 0x7a, 0x78, 0x65, 0xbe, 0xef, 0x6e, 0xc7, 0xf6, + 0x32, 0x3b, 0xe8, 0x92, 0x91, 0x32, 0xdd, 0xad, 0xb0, 0x4f, 0x07, 0x4f, + 0xbe, 0x02, 0xac, 0xfe, 0x04, 0xf0, 0x85, 0x9c, 0x3e, 0xc2, 0xea, 0x58, + 0xd2, 0x7d, 0x27, 0x96, 0x89, 0x24, 0x93, 0xed, 0xf1, 0x2a, 0x07, 0x28, + 0x98, 0x86, 0xc8, 0x89, 0x9e, 0xd1, 0xf1, 0x49, 0x49, 0xeb, 0xa6, 0xe7, + 0xee, 0x75, 0x40, 0xbb, 0x64, 0x1d, 0x07, 0x20, 0xa5, 0xbc, 0xc6, 0xcd, + 0xbe, 0xef, 0x05, 0x0e, 0x9d, 0x99, 0x91, 0x8d, 0x6b, 0xc3, 0x68, 0x7b, + 0xea, 0x74, 0xb8, 0xc9, 0x0d, 0x97, 0x49, 0x30, 0xd3, 0xe6, 0x79, 0x95, + 0x77, 0xf6, 0xc6, 0x4f, 0xa7, 0x3f, 0x62, 0xfd, 0x63, 0x8d, 0xb2, 0xde, + 0x12, 0x53, 0x8f, 0x67, 0x5f, 0xc5, 0xd4, 0x36, 0xd6, 0x90, 0x4c, 0x17, + 0x49, 0x31, 0xf0, 0x50, 0xb3, 0xeb, 0x06, 0x3b, 0x9a, 0x59, 0x53, 0xda, + 0xc7, 0x91, 0xa3, 0x8b, 0x4b, 0xb6, 0xc7, 0x27, 0x4e, 0x74, 0xe1, 0x63, + 0x8a, 0x5b, 0x2d, 0x96, 0x76, 0x80, 0x23, 0xfd, 0xaa, 0xc5, 0x58, 0xf8, + 0xc0, 0xee, 0x2c, 0x68, 0x3a, 0xcc, 0x98, 0x3e, 0x49, 0x29, 0xd9, 0xab, + 0xab, 0x60, 0x1a, 0xce, 0xcb, 0x18, 0x01, 0xfc, 0xe9, 0xef, 0x1d, 0xfc, + 0xd0, 0x6a, 0xeb, 0x0c, 0xc8, 0xc8, 0x65, 0x75, 0xbd, 0xad, 0xc5, 0x6b, + 0x43, 0xed, 0x3a, 0x6f, 0xde, 0x26, 0x5a, 0xd9, 0xfc, 0xde, 0x0c, 0xac, + 0xb6, 0xe3, 0xd0, 0xfd, 0x1c, 0xc8, 0x13, 0xce, 0x92, 0x91, 0xc4, 0xaa, + 0x5f, 0xb4, 0x9e, 0x3b, 0x6a, 0x74, 0x1a, 0x44, 0x94, 0x94, 0xe9, 0xf5, + 0x5e, 0xb7, 0x4b, 0xb1, 0x45, 0x38, 0xc4, 0x7a, 0x8f, 0x30, 0xed, 0xa6, + 0x3d, 0xa3, 0xfb, 0xd3, 0xf4, 0x5c, 0xc7, 0x33, 0x18, 0xd9, 0x73, 0x43, + 0x9e, 0xf7, 0x18, 0xd6, 0x40, 0x6b, 0x74, 0x80, 0x56, 0x76, 0x07, 0x4d, + 0x66, 0x66, 0x57, 0xa4, 0x00, 0xac, 0x01, 0xb9, 0xd2, 0x7b, 0x0d, 0x3b, + 0x2d, 0x63, 0xf5, 0x56, 0xcf, 0x53, 0x7d, 0x57, 0xfa, 0x55, 0x46, 0xac, + 0x97, 0x10, 0x52, 0x53, 0x74, 0x75, 0x16, 0x6d, 0x79, 0x0c, 0xda, 0xe8, + 0x26, 0x49, 0xee, 0x07, 0x75, 0xca, 0xe4, 0x5d, 0x6d, 0xd9, 0x16, 0x64, + 0xd7, 0x71, 0xad, 0xae, 0x20, 0xea, 0x25, 0xa6, 0x38, 0x25, 0x6f, 0x59, + 0xf5, 0x7a, 0x90, 0x08, 0xb7, 0x30, 0x35, 0xa4, 0x6d, 0x2d, 0xd7, 0xbf, + 0xcd, 0x56, 0x7f, 0x45, 0xe9, 0x2d, 0x6e, 0xc3, 0x91, 0x63, 0x87, 0x8b, + 0x5a, 0x4c, 0xfe, 0x29, 0x29, 0x54, 0x7d, 0x66, 0xa5, 0x8c, 0x6d, 0x35, + 0xd8, 0x58, 0x18, 0x3e, 0x8b, 0x98, 0x4c, 0x81, 0xf0, 0xf1, 0x56, 0xd9, + 0xf5, 0xaf, 0x14, 0x40, 0x7b, 0xa7, 0xc4, 0x43, 0xbf, 0xb9, 0x51, 0x1d, + 0x13, 0xa6, 0xf1, 0x48, 0xb6, 0x49, 0xfa, 0x44, 0x44, 0xfd, 0xea, 0x63, + 0xea, 0xe8, 0x23, 0x73, 0x09, 0x8f, 0x38, 0x49, 0x4d, 0x83, 0xf5, 0x9a, + 0x8a, 0xed, 0x7d, 0x8f, 0xbf, 0xd4, 0x65, 0x86, 0x2b, 0x6b, 0x5a, 0x7d, + 0x81, 0xa3, 0xf3, 0xfe, 0x25, 0x4a, 0xbf, 0xac, 0xb8, 0x6e, 0x2c, 0x6d, + 0xd6, 0xb0, 0x1d, 0xdb, 0x9c, 0xe0, 0x4c, 0x18, 0x1d, 0xfc, 0x8a, 0xa6, + 0xdf, 0xab, 0xec, 0x69, 0x3b, 0xad, 0x60, 0x27, 0x8e, 0x1c, 0x9c, 0xf4, + 0x1a, 0xb5, 0x8b, 0x03, 0xbb, 0xc6, 0xc9, 0x13, 0xf8, 0x24, 0xa7, 0x43, + 0xfe, 0x71, 0xe1, 0x12, 0xd8, 0xba, 0xa0, 0x0f, 0xd2, 0xf7, 0x7d, 0xc8, + 0xcf, 0xeb, 0xf8, 0x20, 0xb7, 0x65, 0x8c, 0x2d, 0xef, 0xef, 0x69, 0x1e, + 0x1d, 0x96, 0x2f, 0xfc, 0xdb, 0x6e, 0xbb, 0xac, 0x90, 0x7f, 0x34, 0x34, + 0x7f, 0x12, 0x9f, 0xfe, 0x6d, 0x63, 0xba, 0x00, 0x79, 0x1e, 0x23, 0x68, + 0x49, 0x4f, 0x45, 0xfb, 0x57, 0x1b, 0x66, 0xff, 0x00, 0xcd, 0x02, 0x4b, + 0xa4, 0x40, 0x55, 0x72, 0xba, 0xa5, 0x39, 0x3d, 0x3a, 0xe7, 0xe3, 0x3c, + 0x02, 0xe6, 0x38, 0xb4, 0xc8, 0xdd, 0x23, 0xc9, 0x62, 0x8f, 0xaa, 0xdd, + 0x3d, 0xb6, 0x8b, 0x1e, 0xfb, 0x1c, 0xee, 0xed, 0xec, 0xef, 0x88, 0x47, + 0x67, 0x40, 0xe9, 0xcd, 0x78, 0x21, 0x8f, 0xdd, 0xf1, 0xd3, 0xf0, 0x49, + 0x4d, 0x7c, 0x4e, 0xb9, 0xd5, 0x19, 0x5e, 0x36, 0x38, 0x3b, 0x01, 0xf4, + 0xd9, 0x10, 0xd8, 0x63, 0x24, 0x35, 0xce, 0xdc, 0x09, 0x5d, 0x5d, 0xb9, + 0xb4, 0x35, 0xe6, 0xb6, 0xeb, 0x61, 0xed, 0x20, 0x76, 0x59, 0x27, 0xa4, + 0xf4, 0xc2, 0xc1, 0x35, 0xbb, 0x41, 0xfb, 0xca, 0xbf, 0xec, 0x6e, 0x9f, + 0xbb, 0xd5, 0x0c, 0xb0, 0x3c, 0x12, 0x64, 0xd8, 0x4e, 0xa7, 0x94, 0x94, + 0xee, 0x1c, 0xbc, 0x6a, 0xc4, 0xe4, 0x5a, 0xdd, 0x84, 0x13, 0x2e, 0x10, + 0x27, 0x90, 0xb3, 0xed, 0xfa, 0xc3, 0x86, 0xf3, 0x14, 0xb8, 0x96, 0x69, + 0xa8, 0x05, 0xbf, 0x96, 0x10, 0x2a, 0xc2, 0xc5, 0xad, 0x9a, 0xb7, 0x7b, + 0x75, 0x80, 0xe7, 0x17, 0x7e, 0x54, 0x7a, 0x5d, 0x4d, 0x22, 0x6b, 0xa1, + 0x9a, 0xe9, 0x04, 0x03, 0xfc, 0x12, 0x53, 0x4b, 0x2e, 0xf1, 0x90, 0xca, + 0xde, 0xeb, 0xb6, 0x39, 0x8f, 0xdc, 0x1d, 0xb6, 0x41, 0x64, 0xcf, 0xa6, + 0x67, 0x8e, 0x39, 0x53, 0xab, 0xaf, 0x31, 0xb7, 0xd5, 0x55, 0x9a, 0x31, + 0xe6, 0x0b, 0xe3, 0xdb, 0x27, 0xe1, 0xc6, 0xaa, 0xfd, 0x99, 0xd7, 0xda, + 0xc1, 0x56, 0xd6, 0x7a, 0x60, 0xc9, 0x68, 0x6f, 0x0a, 0x9e, 0x47, 0xe9, + 0x58, 0xe1, 0xb1, 0xb1, 0x3a, 0x13, 0xa2, 0x4a, 0x75, 0x46, 0x53, 0x5a, + 0x5d, 0xb5, 0xdb, 0xa0, 0x69, 0xb7, 0x59, 0x2a, 0x15, 0xf5, 0x2a, 0xef, + 0x0c, 0x06, 0x58, 0x5e, 0xdd, 0x41, 0x03, 0x47, 0x77, 0x03, 0xe0, 0xb9, + 0xd7, 0xe3, 0x96, 0xb7, 0x63, 0x5b, 0xb5, 0xc4, 0xce, 0xe6, 0x39, 0xc0, + 0xfe, 0x04, 0x21, 0x7a, 0x79, 0x92, 0x4b, 0x6f, 0x78, 0x03, 0xce, 0x75, + 0x1d, 0xfb, 0xa4, 0xa7, 0x6e, 0xfc, 0xf1, 0x57, 0x4e, 0x75, 0xcd, 0x02, + 0xcb, 0xa9, 0x3b, 0x0b, 0x09, 0xda, 0x49, 0x6b, 0xb6, 0x38, 0xe9, 0xe5, + 0xaa, 0xc0, 0x7d, 0xfd, 0x5e, 0x9c, 0x06, 0x7a, 0x59, 0x0d, 0xdb, 0x63, + 0xde, 0x03, 0x60, 0xee, 0x02, 0x49, 0x1c, 0x0f, 0x03, 0xaf, 0x65, 0x67, + 0x1a, 0x8c, 0x91, 0xa1, 0xb0, 0x98, 0x3b, 0xa2, 0x35, 0x24, 0x99, 0x32, + 0xaf, 0x16, 0xde, 0x59, 0xef, 0x79, 0x00, 0xfc, 0x02, 0x4a, 0x67, 0x89, + 0xd4, 0xb1, 0x1d, 0x8a, 0xdb, 0x5e, 0xed, 0xa4, 0x30, 0x07, 0xee, 0x20, + 0x7b, 0x80, 0x82, 0xab, 0xdb, 0xd7, 0x3a, 0x73, 0x2f, 0xad, 0xad, 0x2e, + 0x3b, 0xe3, 0xdd, 0x23, 0x69, 0x03, 0x9e, 0xe8, 0x56, 0x61, 0xd6, 0x5c, + 0x77, 0x30, 0x3a, 0x44, 0x10, 0x75, 0xf9, 0xa6, 0x6e, 0x0d, 0x2c, 0x61, + 0x05, 0xad, 0x8f, 0x0d, 0xa0, 0x4a, 0x4a, 0x74, 0x47, 0x54, 0xc7, 0x7b, + 0x83, 0x2a, 0x83, 0x22, 0x64, 0xc2, 0x27, 0xdb, 0x68, 0x75, 0x7b, 0x9c, + 0xf6, 0xea, 0x60, 0x02, 0x40, 0x2b, 0x19, 0xd8, 0x14, 0xd8, 0xe9, 0x2d, + 0x1e, 0x40, 0x84, 0xdf, 0xb3, 0xe9, 0x6e, 0x8c, 0xac, 0x7c, 0x74, 0x49, + 0x4d, 0xbb, 0x3a, 0x86, 0x3b, 0x73, 0xa9, 0xae, 0xb7, 0xb7, 0x6d, 0xad, + 0x78, 0x7e, 0xe7, 0x40, 0xdc, 0xd0, 0x0b, 0x64, 0xf6, 0x4f, 0x93, 0xd4, + 0xf0, 0xcc, 0x06, 0x96, 0x38, 0x8d, 0x08, 0x04, 0x1e, 0x3e, 0x7d, 0xd5, + 0x27, 0xe1, 0x54, 0xd1, 0x0e, 0x00, 0xc6, 0xb0, 0xa9, 0x5f, 0x8b, 0x53, + 0x7e, 0x8b, 0x7e, 0x70, 0x92, 0x90, 0x66, 0x1c, 0x43, 0xd4, 0x69, 0xcb, + 0xc7, 0x6f, 0xa7, 0x60, 0x25, 0xaf, 0x68, 0x27, 0x6b, 0xa7, 0x83, 0x1f, + 0x02, 0xba, 0xfe, 0x89, 0x91, 0xb5, 0xee, 0xa8, 0x9d, 0x1e, 0x03, 0x87, + 0xc5, 0x71, 0xc6, 0xbd, 0xa5, 0xae, 0x02, 0x36, 0xad, 0xee, 0x9f, 0x7b, + 0x98, 0x6b, 0xb6, 0x20, 0xb4, 0xc1, 0xf8, 0x24, 0xa7, 0x4b, 0xeb, 0x4d, + 0x37, 0x0e, 0x99, 0x66, 0x46, 0x3c, 0xfa, 0x98, 0xa4, 0x5a, 0xd0, 0x3b, + 0xb4, 0x68, 0xf1, 0xfe, 0x6a, 0xe7, 0x9b, 0xd6, 0x4d, 0x78, 0xc2, 0xd6, + 0x81, 0x6b, 0x5f, 0x13, 0x58, 0x88, 0x04, 0xf8, 0x4f, 0x8f, 0x75, 0xdb, + 0xbb, 0x65, 0xd5, 0x41, 0xd6, 0xbb, 0x1b, 0x04, 0x78, 0x87, 0x08, 0x5c, + 0x1e, 0x4f, 0x4b, 0x38, 0xf9, 0x76, 0xe3, 0xeb, 0xb5, 0x84, 0x00, 0x07, + 0x06, 0x07, 0x3f, 0x30, 0x92, 0x92, 0x57, 0xd7, 0x2e, 0x36, 0x6a, 0xc3, + 0x5b, 0x60, 0x08, 0xdb, 0x20, 0xf9, 0xf9, 0x15, 0x6f, 0xf6, 0xed, 0x7b, + 0x36, 0xef, 0x66, 0xff, 0x00, 0xeb, 0x69, 0xfd, 0xff, 0x00, 0x25, 0x5d, + 0x98, 0x4d, 0x6e, 0xd0, 0x4f, 0x06, 0x60, 0xac, 0x6f, 0x4b, 0xf5, 0xfd, + 0xbd, 0xbd, 0x5f, 0xfb, 0xf2, 0x4a, 0x76, 0x8d, 0x3b, 0x5a, 0x06, 0xd2, + 0x00, 0xee, 0x7f, 0xdc, 0x9a, 0xb0, 0xcd, 0x43, 0x84, 0x78, 0x1f, 0x35, + 0x17, 0x58, 0x48, 0x99, 0x31, 0xdc, 0xa9, 0x06, 0x86, 0xfb, 0x88, 0x1a, + 0xa4, 0xa6, 0x7b, 0x98, 0x0c, 0x40, 0x88, 0xd7, 0xc1, 0x57, 0x36, 0x39, + 0xb2, 0x41, 0x82, 0xad, 0x00, 0xd2, 0xcd, 0x5a, 0x4c, 0xe9, 0xdf, 0xf8, + 0x2a, 0xf9, 0x1b, 0x03, 0x83, 0x43, 0x7d, 0xa0, 0x82, 0xe8, 0x71, 0x92, + 0x92, 0x9b, 0xdd, 0x1f, 0x2c, 0xd4, 0x6c, 0xb8, 0xb2, 0x1c, 0x7d, 0xa1, + 0xed, 0x89, 0x8d, 0x0c, 0x70, 0xae, 0xbb, 0xa8, 0x5b, 0x74, 0xb4, 0xb5, + 0xce, 0x6f, 0x8b, 0x9e, 0x7f, 0x20, 0x54, 0xb1, 0xee, 0xa6, 0xd2, 0xef, + 0xb2, 0x54, 0x2b, 0x63, 0x7b, 0x44, 0x9f, 0xc6, 0x4a, 0x29, 0x66, 0x43, + 0xb5, 0x07, 0x6f, 0xc8, 0x24, 0xa6, 0x63, 0x20, 0x83, 0x3e, 0x93, 0x23, + 0xe1, 0x2a, 0x4e, 0xcb, 0xb3, 0x6f, 0xb4, 0x34, 0x1e, 0xda, 0x28, 0x57, + 0x87, 0x91, 0xba, 0x4b, 0xa5, 0xa4, 0x77, 0x99, 0x95, 0x60, 0xe1, 0x34, + 0x34, 0x3b, 0x92, 0x7b, 0x19, 0x49, 0x48, 0x59, 0x7e, 0x43, 0xb9, 0x74, + 0x7c, 0x34, 0x44, 0x22, 0xd7, 0x6a, 0x4f, 0xc2, 0x65, 0x1a, 0xba, 0x0f, + 0x07, 0x41, 0xe4, 0x88, 0xda, 0x80, 0x33, 0x1f, 0x7f, 0x29, 0x29, 0xaa, + 0xc6, 0x59, 0xdd, 0x1e, 0xaa, 0x9e, 0xf3, 0x04, 0xc0, 0xf1, 0x46, 0xf4, + 0xe0, 0xe9, 0xa2, 0x98, 0x1a, 0x44, 0xc4, 0x73, 0xaa, 0x4a, 0x59, 0xb5, + 0x36, 0x7d, 0xce, 0x3f, 0x20, 0xa2, 0xe7, 0x54, 0x0c, 0x34, 0x12, 0x63, + 0xc5, 0x12, 0x18, 0x07, 0x8a, 0x88, 0xd8, 0x07, 0x1e, 0xef, 0x24, 0x94, + 0xc0, 0x39, 0xa3, 0x46, 0x80, 0x0f, 0x33, 0xa9, 0x2a, 0x1a, 0x12, 0x27, + 0x99, 0xd3, 0xb2, 0x23, 0xdc, 0x07, 0x97, 0x03, 0xcc, 0x92, 0xa1, 0xb0, + 0x17, 0xee, 0x24, 0x47, 0x92, 0x4a, 0x5b, 0xb1, 0x9d, 0x3b, 0x26, 0x05, + 0xa3, 0x91, 0xf1, 0xf2, 0xfc, 0x54, 0xb6, 0xd6, 0x34, 0x71, 0x13, 0xe0, + 0xa2, 0x6c, 0xab, 0x81, 0xa0, 0x1c, 0x94, 0x94, 0xc3, 0x76, 0xee, 0xc2, + 0x07, 0x09, 0xc3, 0x8f, 0x23, 0x48, 0x4e, 0x4d, 0x7f, 0x9b, 0xa8, 0xf1, + 0xff, 0x00, 0x7a, 0x69, 0x60, 0xf2, 0xf3, 0x29, 0x29, 0x13, 0xec, 0x32, + 0x43, 0x41, 0x77, 0xfa, 0xf9, 0x21, 0xb8, 0x5c, 0x5d, 0xb2, 0x08, 0x1f, + 0x87, 0x9a, 0xb8, 0x1b, 0x58, 0xd6, 0x44, 0x94, 0x37, 0x5b, 0x53, 0x46, + 0xe2, 0x35, 0x1a, 0x0f, 0x8a, 0x4a, 0x40, 0x29, 0x92, 0x26, 0x1c, 0xee, + 0xca, 0x62, 0x82, 0x01, 0x10, 0x04, 0xf7, 0x02, 0x4a, 0x23, 0x6e, 0x06, + 0x5c, 0x46, 0xa3, 0x84, 0xc2, 0xc2, 0x49, 0x2e, 0xd0, 0xa4, 0xa5, 0xea, + 0x63, 0x1a, 0x49, 0x70, 0x92, 0x04, 0x00, 0xa4, 0x03, 0x66, 0x76, 0xc9, + 0x51, 0x0e, 0xd4, 0xc7, 0x07, 0xb4, 0x80, 0x13, 0x8b, 0x5a, 0x0e, 0xae, + 0x1f, 0x7a, 0x4a, 0x56, 0xc1, 0xb8, 0x9d, 0xa2, 0x7c, 0xf5, 0x43, 0x2d, + 0x36, 0x3e, 0x1d, 0x00, 0x0f, 0x04, 0xf6, 0x64, 0x56, 0xdd, 0x37, 0xb6, + 0x67, 0x5d, 0x47, 0x74, 0x27, 0x65, 0xe2, 0xb0, 0x81, 0xeb, 0x56, 0x0f, + 0x9b, 0x87, 0xf7, 0xa4, 0xa4, 0xde, 0x88, 0x1a, 0x34, 0x0f, 0x9a, 0x1d, + 0xad, 0x73, 0x78, 0xe4, 0xf6, 0x0a, 0x0f, 0xea, 0x18, 0x91, 0x3f, 0x68, + 0xab, 0xc3, 0xe9, 0xb7, 0x9f, 0xbd, 0x00, 0xf5, 0x4c, 0x1d, 0x5c, 0x72, + 0xaa, 0x8e, 0xde, 0xe0, 0x92, 0x99, 0xbd, 0xac, 0x69, 0x31, 0xac, 0xfc, + 0x95, 0x3b, 0x00, 0x2d, 0x2e, 0x23, 0xe4, 0xa4, 0xee, 0xaf, 0xd3, 0x5c, + 0xe3, 0xfa, 0xc3, 0x04, 0x0e, 0x64, 0x76, 0xf8, 0x2a, 0x77, 0x75, 0x4c, + 0x03, 0x3b, 0x6e, 0x6e, 0x9e, 0x7f, 0xec, 0x49, 0x4c, 0x2d, 0x6e, 0x82, + 0x07, 0x0b, 0x46, 0x82, 0x3d, 0x26, 0x79, 0x68, 0x56, 0x45, 0xfd, 0x4f, + 0x0c, 0x8d, 0x2e, 0x04, 0xf2, 0x20, 0x1f, 0xee, 0x5a, 0x98, 0x84, 0x1a, + 0xdc, 0xce, 0xe4, 0x48, 0x49, 0x4f, 0x49, 0xd2, 0xed, 0x2f, 0xc7, 0xd8, + 0x4c, 0xb9, 0x9f, 0x91, 0x67, 0x75, 0xfc, 0x6d, 0xb7, 0x57, 0x90, 0xd0, + 0x4b, 0x5f, 0xec, 0x79, 0x1e, 0x23, 0x85, 0x3e, 0x95, 0x71, 0x6d, 0xcd, + 0x69, 0xe1, 0xfa, 0x1f, 0x9a, 0xd6, 0xcf, 0xa3, 0xd5, 0xc6, 0x7b, 0x36, + 0xee, 0x78, 0x1b, 0x98, 0x3b, 0xee, 0x1a, 0x84, 0x94, 0xf3, 0x94, 0xb4, + 0x06, 0xe8, 0xdd, 0xa3, 0x9d, 0xc7, 0x95, 0x8f, 0x38, 0xdf, 0x6f, 0xf4, + 0x7e, 0xcf, 0xfa, 0x5f, 0x5b, 0xf9, 0xdd, 0xc6, 0x66, 0x66, 0x61, 0x68, + 0x55, 0xd4, 0x71, 0x49, 0x20, 0x92, 0x1d, 0xdc, 0x6d, 0x32, 0x85, 0xf6, + 0x9c, 0x6d, 0xf1, 0xe9, 0x18, 0xf5, 0xbd, 0x5f, 0x53, 0xbc, 0xf1, 0x31, + 0xca, 0x4a, 0x6d, 0x7e, 0xcf, 0x6b, 0x9b, 0xb9, 0x8e, 0x04, 0x0f, 0x8f, + 0xf1, 0x52, 0x6e, 0x1b, 0x47, 0x69, 0x23, 0xcd, 0x5b, 0x65, 0x7a, 0x19, + 0xd4, 0x26, 0xac, 0xd2, 0xd2, 0x4c, 0x4c, 0x73, 0x04, 0x04, 0x94, 0xd5, + 0x2c, 0x2d, 0x91, 0xb3, 0x5e, 0xd0, 0xdd, 0x3f, 0xea, 0x90, 0x2d, 0xc7, + 0x0f, 0xd5, 0xcd, 0x20, 0x03, 0x13, 0xc2, 0xd2, 0x7b, 0x18, 0xe6, 0xb9, + 0xed, 0x6e, 0xd6, 0x34, 0x4b, 0x9e, 0x4c, 0x81, 0xf3, 0x30, 0x82, 0xcf, + 0x4d, 0xe4, 0x35, 0x8e, 0x24, 0xfe, 0xef, 0x84, 0xfd, 0xe9, 0x29, 0xab, + 0x84, 0xfa, 0x70, 0x9f, 0x61, 0xb5, 0x8e, 0xda, 0xe8, 0xdb, 0xb4, 0x4f, + 0x1f, 0x15, 0x68, 0xf5, 0x7c, 0x70, 0x74, 0xa6, 0xd2, 0x3e, 0x03, 0xf8, + 0x95, 0x2f, 0xb3, 0x59, 0x24, 0xc1, 0xdb, 0xf1, 0x1f, 0xdc, 0x87, 0x66, + 0x28, 0x8e, 0x4e, 0xef, 0x0e, 0x52, 0x53, 0x27, 0x75, 0xdc, 0x71, 0xaf, + 0xa3, 0x64, 0x71, 0xf9, 0xbf, 0xde, 0xa2, 0xff, 0x00, 0xac, 0x15, 0x44, + 0x0c, 0x7b, 0x08, 0xf1, 0x96, 0xaa, 0xee, 0xc7, 0xd3, 0x5f, 0xc7, 0x45, + 0x11, 0x43, 0x08, 0xe3, 0x5f, 0x2e, 0xe9, 0x29, 0x3f, 0xfc, 0xe0, 0x6f, + 0x6c, 0x67, 0x0f, 0x32, 0xf1, 0xfd, 0xc9, 0xbf, 0xe7, 0x07, 0x66, 0xe3, + 0xeb, 0xfd, 0x7f, 0xfc, 0xc5, 0x07, 0xec, 0xc3, 0xe4, 0x7e, 0x4a, 0x5e, + 0x87, 0x71, 0x30, 0x0a, 0x4a, 0x49, 0xfb, 0x76, 0xd2, 0x67, 0xec, 0xd2, + 0x3c, 0xde, 0x78, 0xff, 0x00, 0x35, 0x48, 0xf5, 0xeb, 0xb8, 0x6e, 0x33, + 0x1b, 0x13, 0x32, 0xf2, 0x7e, 0x5f, 0x45, 0x44, 0x54, 0x48, 0x02, 0x5a, + 0x3e, 0x1c, 0xfe, 0x29, 0x9d, 0x40, 0xe7, 0x53, 0xf0, 0xff, 0x00, 0xcc, + 0x52, 0x53, 0x01, 0xd7, 0xf3, 0x8c, 0x8f, 0xb3, 0xd7, 0xf1, 0x92, 0x53, + 0x1e, 0xbb, 0xd4, 0x5c, 0x0c, 0x51, 0x58, 0x3f, 0xda, 0xfe, 0xf4, 0xce, + 0xc7, 0x74, 0x71, 0xa7, 0x69, 0x50, 0x14, 0xba, 0x46, 0x82, 0x7b, 0xeb, + 0xaf, 0xdc, 0x92, 0x96, 0x3d, 0x67, 0xa9, 0x4c, 0x6c, 0xac, 0x78, 0x7b, + 0x4e, 0x9f, 0x8a, 0x5f, 0xb5, 0xba, 0xa7, 0x11, 0x5c, 0xf8, 0xed, 0x3f, + 0x90, 0x94, 0x41, 0x4c, 0x19, 0x3a, 0x0f, 0x3f, 0xf6, 0xa7, 0x15, 0x30, + 0x0d, 0x34, 0x71, 0xe6, 0x4a, 0x4a, 0x6b, 0x9e, 0xa1, 0xd5, 0x04, 0xcd, + 0x8d, 0x20, 0x9f, 0xdc, 0x0a, 0x27, 0x3f, 0xaa, 0x6b, 0xfa, 0x66, 0x8d, + 0x79, 0xd8, 0xd0, 0x55, 0x87, 0x56, 0xd3, 0xf4, 0x80, 0x01, 0x33, 0xa8, + 0x6b, 0x80, 0xdb, 0xa1, 0xf1, 0x09, 0x29, 0xae, 0x7a, 0x87, 0x54, 0x24, + 0x4e, 0x4f, 0xdc, 0xd6, 0xc7, 0xfd, 0x4a, 0x87, 0xda, 0x3a, 0x8b, 0x8c, + 0xbb, 0x21, 0xdf, 0x1d, 0x07, 0xf0, 0x56, 0x5b, 0x40, 0x99, 0xe6, 0x51, + 0x1b, 0x4c, 0x47, 0x87, 0x89, 0x13, 0xfc, 0x52, 0x53, 0x48, 0xd9, 0x9c, + 0xe1, 0xae, 0x4d, 0x91, 0xe0, 0x1d, 0xfd, 0xc9, 0x13, 0x96, 0x47, 0xbe, + 0xfb, 0x7e, 0xf2, 0xb4, 0x3d, 0x02, 0x4c, 0xb7, 0xe2, 0x98, 0x54, 0x09, + 0xdb, 0x00, 0x6a, 0x92, 0x9c, 0xd3, 0x55, 0xce, 0x01, 0xbe, 0xa5, 0x91, + 0xe6, 0xf2, 0xa2, 0xec, 0x77, 0x97, 0x6a, 0xf7, 0x13, 0xdf, 0x53, 0xfd, + 0xeb, 0x55, 0xf4, 0xb4, 0x1d, 0x07, 0xc4, 0x94, 0x03, 0x50, 0xe4, 0x24, + 0xa6, 0x81, 0xc5, 0x21, 0xba, 0x4a, 0x9d, 0x78, 0xed, 0xdb, 0xe9, 0xbb, + 0x5a, 0xdc, 0x65, 0xc3, 0x9d, 0xae, 0x1c, 0x38, 0x2b, 0xc2, 0xb9, 0x01, + 0xa7, 0x89, 0xfa, 0x2a, 0x6d, 0xa6, 0xad, 0xdc, 0x13, 0x3d, 0xc4, 0x68, + 0x92, 0x9c, 0xc7, 0xe0, 0x06, 0x8d, 0x5b, 0xa7, 0x68, 0xee, 0xa2, 0x3a, + 0x49, 0x2d, 0xdc, 0xe0, 0xda, 0xda, 0xee, 0x0d, 0x84, 0x36, 0x7e, 0x1d, + 0xd6, 0xeb, 0x2b, 0x10, 0x5a, 0x5b, 0xea, 0x30, 0x7b, 0x80, 0x3c, 0x83, + 0xe3, 0xf0, 0xf1, 0x54, 0xae, 0x6b, 0x9c, 0xf2, 0xe7, 0xea, 0x4f, 0x8a, + 0x4a, 0x73, 0x5d, 0xd2, 0x6d, 0x6b, 0x5c, 0xe6, 0x34, 0x58, 0xd0, 0x24, + 0xba, 0xb2, 0x1f, 0xf7, 0x81, 0xaa, 0xa8, 0xec, 0x61, 0xdb, 0xef, 0x5a, + 0x84, 0x3e, 0xbb, 0x03, 0x98, 0x4b, 0x5c, 0x3e, 0x8b, 0x87, 0xd2, 0x1f, + 0x34, 0xb2, 0x43, 0x6e, 0xa8, 0x64, 0xb5, 0xa0, 0x59, 0xbb, 0x65, 0xc0, + 0x68, 0x37, 0x1d, 0x5a, 0xfd, 0x3f, 0x7b, 0xf2, 0xa4, 0xa7, 0x1c, 0xe3, + 0x69, 0xe1, 0xf2, 0x51, 0x38, 0xa4, 0x6a, 0x74, 0x95, 0x7c, 0x31, 0xa5, + 0xc6, 0x5c, 0xd8, 0xf0, 0xee, 0x54, 0x1f, 0x4e, 0xd0, 0x4c, 0x6e, 0x03, + 0xc4, 0x24, 0xa6, 0x83, 0xf1, 0xda, 0xd1, 0xe3, 0xe6, 0xba, 0x3c, 0x47, + 0x3b, 0xd3, 0x6b, 0x87, 0x25, 0xad, 0x3f, 0x82, 0xcc, 0xde, 0xf7, 0x34, + 0x35, 0x98, 0xec, 0x79, 0xf2, 0xd3, 0xef, 0x5a, 0xb8, 0x1a, 0xd1, 0x5c, + 0xb7, 0x69, 0x00, 0x34, 0xb7, 0xc1, 0x25, 0x3a, 0x18, 0xef, 0x87, 0x07, + 0x37, 0x83, 0x07, 0xe6, 0xba, 0x6a, 0xdd, 0xea, 0x54, 0xcb, 0x3b, 0xc6, + 0xbf, 0x15, 0xcc, 0xe3, 0x36, 0x3d, 0xbd, 0xc7, 0x1f, 0x25, 0xd0, 0x74, + 0xc3, 0xb9, 0xaf, 0xad, 0xc7, 0x51, 0x04, 0x42, 0x4a, 0x79, 0xfc, 0x9e, + 0x94, 0xda, 0x3a, 0xad, 0xed, 0x0d, 0xf6, 0x3c, 0x1b, 0x19, 0xf0, 0x76, + 0xbf, 0x81, 0x55, 0x3e, 0xc6, 0xef, 0xb4, 0xcc, 0x7b, 0x7f, 0x8a, 0xec, + 0x33, 0x30, 0xdb, 0x61, 0x65, 0xa3, 0xe9, 0x30, 0x16, 0x9f, 0xea, 0x95, + 0x91, 0xf6, 0x5f, 0xd6, 0x22, 0x3c, 0x92, 0x53, 0xff, 0xd9 +}; +size_t demo_008_jpg_len = 17842; diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/esp32_jpeg/esp32_jpeg.ino b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/esp32_jpeg/esp32_jpeg.ino new file mode 100644 index 0000000..75308b2 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/esp32_jpeg/esp32_jpeg.ino @@ -0,0 +1,78 @@ +//#include +#include +#include "JPEGDEC.h" +//#include "test_images/gray_road.h" +//#include "test_images/f6t.h" +#include "test_images/thumb_test.h" + +// Janzen Hub +#define CS_PIN 4 +#define DC_PIN 12 +#define LED_PIN 16 +#define BUILTIN_SDCARD 0 +#define RESET_PIN -1 +#define MISO_PIN 19 +#define MOSI_PIN 23 +#define SCK_PIN 18 + +JPEGDEC jpeg; + +//uint8_t ucTXBuf[1024]; +static uint8_t *ucTXBuf; + +//File file; +// pixel drawing callback +void drawMCU(JPEGDRAW *pDraw) +{ + int iCount = pDraw->iWidth * pDraw->iHeight; +// Serial.printf("Draw pos = %d,%d. size = %d x %d\n", pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight); + spilcdSetPosition(pDraw->x, pDraw->y, pDraw->iWidth, pDraw->iHeight, 1); +// spilcdWriteDataBlock((uint8_t *)pDraw->pPixels, iCount*2, 1); + spilcdWaitDMA(); + memcpy(ucTXBuf, pDraw->pPixels, iCount*sizeof(uint16_t)); + spilcdWriteDataDMA(iCount*2); +} /* drawMCU() */ + +void setup() +{ +char szTemp[128]; + + Serial.begin(115200); +// spilcdSetTXBuffer(ucTXBuf, sizeof(ucTXBuf)); + ucTXBuf = spilcdGetDMABuffer(); + spilcdInit(LCD_ILI9341, 0, 0, 0, 40000000, CS_PIN, DC_PIN, RESET_PIN, LED_PIN, MISO_PIN, MOSI_PIN, SCK_PIN); + +// if (!SD.begin(SDCARD_CS)) +// { +// Serial.println("SD Init Fail!"); +// } +// else +// { +// sprintf(szTemp, "SD Card Type: %d Size: %d MB", SD.cardType(), (int)(SD.cardSize() / 1024 / 1024)); +// Serial.println(szTemp); +// } +} /* setup() */ +void loop() { +long lTime; + + spilcdFill(0,1); + + if (jpeg.open((uint8_t *)thumb_test, sizeof(thumb_test), drawMCU)) + { + Serial.println("Successfully opened JPEG image"); + Serial.printf("Image size: %d x %d, orientation: %d, bpp: %d\n", jpeg.getWidth(), + jpeg.getHeight(), jpeg.getOrientation(), jpeg.getBpp()); + if (jpeg.hasThumb()) + Serial.printf("Thumbnail present: %d x %d\n", jpeg.getThumbWidth(), jpeg.getThumbHeight()); + jpeg.setPixelType(BIG_ENDIAN_PIXELS); + lTime = micros(); + if (jpeg.decode(40,100,JPEG_SCALE_QUARTER | JPEG_EXIF_THUMBNAIL)) + { + lTime = micros() - lTime; + Serial.printf("Successfully decoded image in %d us\n", (int)lTime); + } + jpeg.close(); + } + + delay(10000); +} diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/jpeg_perf_test/jpeg_perf_test.ino b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/jpeg_perf_test/jpeg_perf_test.ino new file mode 100644 index 0000000..2db1106 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/examples/jpeg_perf_test/jpeg_perf_test.ino @@ -0,0 +1,54 @@ +// +// Perf Test +// +#include +#include "../test_images/tulips.h" // 640x480 56k byte test image +JPEGDEC jpeg; + +void JPEGDraw(JPEGDRAW *pDraw) +{ + // do nothing +} /* JPEGDraw() */ + +void setup() { + Serial.begin(115200); + delay(100); // allow time for Serial to start +} /* setup() */ + +void loop() { +long lTime; + + if (jpeg.openFLASH((uint8_t *)tulips, sizeof(tulips), JPEGDraw)) { + lTime = micros(); + if (jpeg.decode(0,0,0)) { // full sized decode + lTime = micros() - lTime; + Serial.printf("full sized decode in %d us\n", (int)lTime); + } + jpeg.close(); + } + if (jpeg.openFLASH((uint8_t *)tulips, sizeof(tulips), JPEGDraw)) { + lTime = micros(); + if (jpeg.decode(0,0,JPEG_SCALE_HALF)) { // 1/2 sized decode + lTime = micros() - lTime; + Serial.printf("half sized decode in %d us\n", (int)lTime); + } + jpeg.close(); + } + if (jpeg.openFLASH((uint8_t *)tulips, sizeof(tulips), JPEGDraw)) { + lTime = micros(); + if (jpeg.decode(0,0,JPEG_SCALE_QUARTER)) { // 1/4 sized decode + lTime = micros() - lTime; + Serial.printf("quarter sized decode in %d us\n", (int)lTime); + } + jpeg.close(); + } + if (jpeg.openFLASH((uint8_t *)tulips, sizeof(tulips), JPEGDraw)) { + lTime = micros(); + if (jpeg.decode(0,0,JPEG_SCALE_EIGHTH)) { // 1/8 sized decode + lTime = micros() - lTime; + Serial.printf("eighth sized decode in %d us\n", (int)lTime); + } + jpeg.close(); + } + delay(5000); +} /* loop() */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/library.properties b/Microcontroller Code/lib/JPEGDEC-1.2.1/library.properties new file mode 100644 index 0000000..22582d8 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/library.properties @@ -0,0 +1,10 @@ +name=JPEGDEC +version=1.2.1 +author=Larry Bank +maintainer=Larry Bank +sentence=Optimized JPEG decoder for MCUs with 32K+ RAM. +paragraph=A fast JPEG library with a unique set of functions to make viewing image on microcontrollers easy. Includes fast downscaling options and the ability to view Exif embedded thumbnails. Supports baseline grayscale and color images with Huffman encoding. +category=Display +url=https://github.com/bitbank2/JPEGDEC +architectures=* +includes=JPEGDEC.h diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/main.c b/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/main.c new file mode 100644 index 0000000..a480b00 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/main.c @@ -0,0 +1,104 @@ +// JPEG perf test +// Written by Larry Bank +// +// Will open an arbitrary JPEG file if passed on the command line +// or will use the sample image (tulips) +// +#include +#include +#include +#include "../src/JPEGDEC.h" +#include "../test_images/tulips.h" + +JPEGIMAGE jpg; + +long micros() +{ +long iTime; +struct timespec res; + + clock_gettime(CLOCK_MONOTONIC, &res); + iTime = 1000000*res.tv_sec + res.tv_nsec/1000; + + return iTime; +} /* micros() */ + +void JPEGDraw(JPEGDRAW *pDraw) +{ +} /* JPEGDraw() */ + +int main(int argc, char *argv[]) +{ +long lTime; +int rc; + + printf("JPEG decoder demo\n"); + printf("Run without parameters to test in-memory decoding\n"); + printf("Or pass a filename\n\n"); + + if (argc == 2) + rc = JPEG_openFile(&jpg, argv[1], JPEGDraw); + else + rc = JPEG_openRAM(&jpg, (uint8_t *)tulips, sizeof(tulips), JPEGDraw); + if (rc) + { + lTime = micros(); + if (JPEG_decode(&jpg, 0, 0, 0)) { // full size + lTime = micros() - lTime; + printf("full sized decode in %d us\n", (int)lTime); + } + else + { + printf("Decode failed, last error = %d\n", JPEG_getLastError(&jpg)); + return 0; + } + JPEG_close(&jpg); + } + else + { + printf("open() failed, last error = %d\n", JPEG_getLastError(&jpg)); + return 0; + } + + if (argc == 2) + rc = JPEG_openFile(&jpg, argv[1], JPEGDraw); + else + rc = JPEG_openRAM(&jpg, (uint8_t *)tulips, sizeof(tulips), JPEGDraw); + if (rc) + { + lTime = micros(); + if (JPEG_decode(&jpg, 0, 0, JPEG_SCALE_HALF)) { // 1/2 size + lTime = micros() - lTime; + printf("half sized decode in %d us\n", (int)lTime); + } + JPEG_close(&jpg); + } + if (argc == 2) + rc = JPEG_openFile(&jpg, argv[1], JPEGDraw); + else + rc = JPEG_openRAM(&jpg, (uint8_t *)tulips, sizeof(tulips), JPEGDraw); + if (rc) + { + lTime = micros(); + if (JPEG_decode(&jpg, 0, 0, JPEG_SCALE_QUARTER)) { // 1/4 size + lTime = micros() - lTime; + printf("quarter sized decode in %d us\n", (int)lTime); + } + JPEG_close(&jpg); + } + if (argc == 2) + rc = JPEG_openFile(&jpg, argv[1], JPEGDraw); + else + rc = JPEG_openRAM(&jpg, (uint8_t *)tulips, sizeof(tulips), JPEGDraw); + if (rc) + { + lTime = micros(); + if (JPEG_decode(&jpg, 0, 0, JPEG_SCALE_EIGHTH)) { // 1/8 size + lTime = micros() - lTime; + printf("eighth sized decode in %d us\n", (int)lTime); + } + JPEG_close(&jpg); + } + + return 0; +} /* main() */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/makefile b/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/makefile new file mode 100644 index 0000000..2ed3fa4 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/linux/makefile @@ -0,0 +1,16 @@ +CFLAGS=-c -Wall -O2 -I../src -D__LINUX__ +LIBS = -lm -lpthread + +all: jpegdec + +jpegdec: jpeg.o main.o + $(CC) main.o jpeg.o $(LIBS) -o jpegdec + +jpeg.o: ../src/jpeg.c ../src/JPEGDEC.h makefile + $(CC) $(CFLAGS) ../src/jpeg.c + +main.o: main.c ../src/JPEGDEC.h makefile + $(CC) $(CFLAGS) main.c + +clean: + rm *.o jpegdec diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/perf.jpg b/Microcontroller Code/lib/JPEGDEC-1.2.1/perf.jpg new file mode 100644 index 0000000..e00faaf Binary files /dev/null and b/Microcontroller Code/lib/JPEGDEC-1.2.1/perf.jpg differ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/squirrel_dither.jpg b/Microcontroller Code/lib/JPEGDEC-1.2.1/squirrel_dither.jpg new file mode 100644 index 0000000..c093d55 Binary files /dev/null and b/Microcontroller Code/lib/JPEGDEC-1.2.1/squirrel_dither.jpg differ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.cpp b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.cpp new file mode 100644 index 0000000..882bbd4 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.cpp @@ -0,0 +1,170 @@ +// +// JPEG Decoder +// +// written by Larry Bank +// bitbank@pobox.com +// Arduino port started 8/2/2020 +// Original JPEG code written 26+ years ago :) +// The goal of this code is to decode baseline JPEG images +// using no more than 18K of RAM (if sent directly to an LCD display) +// +// Copyright 2020 BitBank Software, Inc. All Rights Reserved. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//=========================================================================== +// +#include "JPEGDEC.h" + +// forward references +JPEG_STATIC int JPEGInit(JPEGIMAGE *pJPEG); +JPEG_STATIC int JPEGParseInfo(JPEGIMAGE *pPage, int bExtractThumb); +JPEG_STATIC void JPEGGetMoreData(JPEGIMAGE *pPage); +JPEG_STATIC int DecodeJPEG(JPEGIMAGE *pImage); + +// Include the C code which does the actual work +#include "jpeg.c" + +void JPEGDEC::setPixelType(int iType) +{ + if (iType >= 0 && iType < INVALID_PIXEL_TYPE) + _jpeg.ucPixelType = (uint8_t)iType; + else + _jpeg.iError = JPEG_INVALID_PARAMETER; +} /* setPixelType() */ + +void JPEGDEC::setMaxOutputSize(int iMaxMCUs) +{ + if (iMaxMCUs < 1) + iMaxMCUs = 1; // don't allow invalid value + _jpeg.iMaxMCUs = iMaxMCUs; +} /* setMaxOutputSize() */ +// +// Memory initialization +// +int JPEGDEC::openRAM(uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw) +{ + memset(&_jpeg, 0, sizeof(JPEGIMAGE)); + _jpeg.ucMemType = JPEG_MEM_RAM; + _jpeg.pfnRead = readRAM; + _jpeg.pfnSeek = seekMem; + _jpeg.pfnDraw = pfnDraw; + _jpeg.pfnOpen = NULL; + _jpeg.pfnClose = NULL; + _jpeg.JPEGFile.iSize = iDataSize; + _jpeg.JPEGFile.pData = pData; + _jpeg.iMaxMCUs = 1000; // set to an unnaturally high value to start + return JPEGInit(&_jpeg); +} /* openRAM() */ + +int JPEGDEC::openFLASH(uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw) +{ + memset(&_jpeg, 0, sizeof(JPEGIMAGE)); + _jpeg.ucMemType = JPEG_MEM_FLASH; + _jpeg.pfnRead = readFLASH; + _jpeg.pfnSeek = seekMem; + _jpeg.pfnDraw = pfnDraw; + _jpeg.pfnOpen = NULL; + _jpeg.pfnClose = NULL; + _jpeg.JPEGFile.iSize = iDataSize; + _jpeg.JPEGFile.pData = pData; + _jpeg.iMaxMCUs = 1000; // set to an unnaturally high value to start + return JPEGInit(&_jpeg); +} /* openRAM() */ + +int JPEGDEC::getOrientation() +{ + return (int)_jpeg.ucOrientation; +} /* getOrientation() */ + +int JPEGDEC::getLastError() +{ + return _jpeg.iError; +} /* getLastError() */ + +int JPEGDEC::getWidth() +{ + return _jpeg.iWidth; +} /* getWidth() */ + +int JPEGDEC::getHeight() +{ + return _jpeg.iHeight; +} /* getHeight() */ + +int JPEGDEC::hasThumb() +{ + return (int)_jpeg.ucHasThumb; +} /* hasThumb() */ + +int JPEGDEC::getThumbWidth() +{ + return _jpeg.iThumbWidth; +} /* getThumbWidth() */ + +int JPEGDEC::getThumbHeight() +{ + return _jpeg.iThumbHeight; +} /* getThumbHeight() */ + +int JPEGDEC::getBpp() +{ + return (int)_jpeg.ucBpp; +} /* getBpp() */ + +int JPEGDEC::getSubSample() +{ + return (int)_jpeg.ucSubSample; +} /* getSubSample() */ + +// +// File (SD/MMC) based initialization +// +int JPEGDEC::open(const char *szFilename, JPEG_OPEN_CALLBACK *pfnOpen, JPEG_CLOSE_CALLBACK *pfnClose, JPEG_READ_CALLBACK *pfnRead, JPEG_SEEK_CALLBACK *pfnSeek, JPEG_DRAW_CALLBACK *pfnDraw) +{ + memset(&_jpeg, 0, sizeof(JPEGIMAGE)); + _jpeg.pfnRead = pfnRead; + _jpeg.pfnSeek = pfnSeek; + _jpeg.pfnDraw = pfnDraw; + _jpeg.pfnOpen = pfnOpen; + _jpeg.pfnClose = pfnClose; + _jpeg.iMaxMCUs = 1000; // set to an unnaturally high value to start + _jpeg.JPEGFile.fHandle = (*pfnOpen)(szFilename, &_jpeg.JPEGFile.iSize); + if (_jpeg.JPEGFile.fHandle == NULL) + return 0; + return JPEGInit(&_jpeg); + +} /* open() */ + +void JPEGDEC::close() +{ + if (_jpeg.pfnClose) + (*_jpeg.pfnClose)(_jpeg.JPEGFile.fHandle); +} /* close() */ + +// +// Decode the image +// returns: +// 1 = good result +// 0 = error +// +int JPEGDEC::decode(int x, int y, int iOptions) +{ + _jpeg.iXOffset = x; + _jpeg.iYOffset = y; + _jpeg.iOptions = iOptions; + return DecodeJPEG(&_jpeg); +} /* decode() */ + +int JPEGDEC::decodeDither(uint8_t *pDither, int iOptions) +{ + _jpeg.iOptions = iOptions; + _jpeg.pDitherBuffer = pDither; + return DecodeJPEG(&_jpeg); +} diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.h new file mode 100644 index 0000000..77b5250 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/JPEGDEC.h @@ -0,0 +1,251 @@ +// +// Copyright 2020 BitBank Software, Inc. All Rights Reserved. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//=========================================================================== +// +#ifndef __JPEGDEC__ +#define __JPEGDEC__ +#if defined( __MACH__ ) || defined( __LINUX__ ) || defined( __MCUXPRESSO ) +#include +#include +#include +#include +#define memcpy_P memcpy +#define PROGMEM +#else +#include +#endif +// +// JPEG Decoder +// Written by Larry Bank +// Copyright (c) 2020 BitBank Software, Inc. +// +// Designed to decode baseline JPEG images (8 or 24-bpp) +// using less than 22K of RAM +// + +/* Defines and variables */ +#define FILE_HIGHWATER 1536 +#define JPEG_FILE_BUF_SIZE 2048 +#define HUFF_TABLEN 273 +#define HUFF11SIZE (1<<11) +#define DC_TABLE_SIZE 1024 +#define DCTSIZE 64 +#define MAX_MCU_COUNT 6 +#define MAX_COMPS_IN_SCAN 4 +#define MAX_BUFFERED_PIXELS 2048 + +// Decoder options +#define JPEG_AUTO_ROTATE 1 +#define JPEG_SCALE_HALF 2 +#define JPEG_SCALE_QUARTER 4 +#define JPEG_SCALE_EIGHTH 8 +#define JPEG_LE_PIXELS 16 +#define JPEG_EXIF_THUMBNAIL 32 +#define JPEG_LUMA_ONLY 64 + +#define MCU0 (DCTSIZE * 0) +#define MCU1 (DCTSIZE * 1) +#define MCU2 (DCTSIZE * 2) +#define MCU3 (DCTSIZE * 3) +#define MCU4 (DCTSIZE * 4) +#define MCU5 (DCTSIZE * 5) + +// Pixel types (defaults to little endian RGB565) +enum { + RGB565_LITTLE_ENDIAN = 0, + RGB565_BIG_ENDIAN, + EIGHT_BIT_GRAYSCALE, + FOUR_BIT_DITHERED, + TWO_BIT_DITHERED, + ONE_BIT_DITHERED, + INVALID_PIXEL_TYPE +}; + +enum { + JPEG_MEM_RAM=0, + JPEG_MEM_FLASH +}; + +// Error codes returned by getLastError() +enum { + JPEG_SUCCESS = 0, + JPEG_INVALID_PARAMETER, + JPEG_DECODE_ERROR, + JPEG_UNSUPPORTED_FEATURE, + JPEG_INVALID_FILE +}; + +typedef struct buffered_bits +{ +unsigned char *pBuf; // buffer pointer +uint32_t ulBits; // buffered bits +uint32_t ulBitOff; // current bit offset +} BUFFERED_BITS; + +typedef struct jpeg_file_tag +{ + int32_t iPos; // current file position + int32_t iSize; // file size + uint8_t *pData; // memory file pointer + void * fHandle; // class pointer to File/SdFat or whatever you want +} JPEGFILE; + +typedef struct jpeg_draw_tag +{ + int x, y; // upper left corner of current MCU + int iWidth, iHeight; // size of this MCU + int iBpp; // bit depth of the pixels (8 or 16) + uint16_t *pPixels; // 16-bit pixels +} JPEGDRAW; + +// Callback function prototypes +typedef int32_t (JPEG_READ_CALLBACK)(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen); +typedef int32_t (JPEG_SEEK_CALLBACK)(JPEGFILE *pFile, int32_t iPosition); +typedef void (JPEG_DRAW_CALLBACK)(JPEGDRAW *pDraw); +typedef void * (JPEG_OPEN_CALLBACK)(const char *szFilename, int32_t *pFileSize); +typedef void (JPEG_CLOSE_CALLBACK)(void *pHandle); + +/* JPEG color component info */ +typedef struct _jpegcompinfo +{ +// These values are fixed over the whole image +// For compression, they must be supplied by the user interface +// for decompression, they are read from the SOF marker. +unsigned char component_needed; /* do we need the value of this component? */ +unsigned char component_id; /* identifier for this component (0..255) */ +unsigned char component_index; /* its index in SOF or cinfo->comp_info[] */ +//unsigned char h_samp_factor; /* horizontal sampling factor (1..4) */ +//unsigned char v_samp_factor; /* vertical sampling factor (1..4) */ +unsigned char quant_tbl_no; /* quantization table selector (0..3) */ +// These values may vary between scans +// For compression, they must be supplied by the user interface +// for decompression, they are read from the SOS marker. +unsigned char dc_tbl_no; /* DC entropy table selector (0..3) */ +unsigned char ac_tbl_no; /* AC entropy table selector (0..3) */ +// These values are computed during compression or decompression startup +//int true_comp_width; /* component's image width in samples */ +//int true_comp_height; /* component's image height in samples */ +// the above are the logical dimensions of the downsampled image +// These values are computed before starting a scan of the component +//int MCU_width; /* number of blocks per MCU, horizontally */ +//int MCU_height; /* number of blocks per MCU, vertically */ +//int MCU_blocks; /* MCU_width * MCU_height */ +//int downsampled_width; /* image width in samples, after expansion */ +//int downsampled_height; /* image height in samples, after expansion */ +// the above are the true_comp_xxx values rounded up to multiples of +// the MCU dimensions; these are the working dimensions of the array +// as it is passed through the DCT or IDCT step. NOTE: these values +// differ depending on whether the component is interleaved or not!! +// This flag is used only for decompression. In cases where some of the +// components will be ignored (eg grayscale output from YCbCr image), +// we can skip IDCT etc. computations for the unused components. +} JPEGCOMPINFO; + +// +// our private structure to hold a JPEG image decode state +// +typedef struct jpeg_image_tag +{ + int iWidth, iHeight; // image size + int iThumbWidth, iThumbHeight; // thumbnail size (if present) + int iThumbData; // offset to image data + int iXOffset, iYOffset; // placement on the display + uint8_t ucBpp, ucSubSample, ucHuffTableUsed; + uint8_t ucMode, ucOrientation, ucHasThumb, b11Bit; + uint8_t ucComponentsInScan, cApproxBitsLow, cApproxBitsHigh; + uint8_t iScanStart, iScanEnd, ucFF, ucNumComponents; + uint8_t ucACTable, ucDCTable, ucMaxACCol, ucMaxACRow; + uint8_t ucMemType, ucPixelType; + int iEXIF; // Offset to EXIF 'TIFF' file + int iError; + int iOptions; + int iVLCOff; // current VLC data offset + int iVLCSize; // current quantity of data in the VLC buffer + int iResInterval, iResCount; // restart interval + int iMaxMCUs; // max MCUs of pixels per JPEGDraw call + JPEG_READ_CALLBACK *pfnRead; + JPEG_SEEK_CALLBACK *pfnSeek; + JPEG_DRAW_CALLBACK *pfnDraw; + JPEG_OPEN_CALLBACK *pfnOpen; + JPEG_CLOSE_CALLBACK *pfnClose; + JPEGCOMPINFO JPCI[MAX_COMPS_IN_SCAN]; /* Max color components */ + JPEGFILE JPEGFile; + BUFFERED_BITS bb; + uint8_t *pDitherBuffer; // provided externally to do Floyd-Steinberg dithering + uint16_t usPixels[MAX_BUFFERED_PIXELS]; + int16_t sMCUs[DCTSIZE * MAX_MCU_COUNT]; // 4:2:0 needs 6 DCT blocks per MCU + int16_t sQuantTable[DCTSIZE*4]; // quantization tables + uint8_t ucFileBuf[JPEG_FILE_BUF_SIZE]; // holds temp data and pixel stack + uint8_t ucHuffDC[DC_TABLE_SIZE * 2]; // up to 2 'short' tables + uint16_t usHuffAC[HUFF11SIZE * 2]; +} JPEGIMAGE; + +#ifdef __cplusplus +#define JPEG_STATIC static +// +// The JPEGDEC class wraps portable C code which does the actual work +// +class JPEGDEC +{ + public: + int openRAM(uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw); + int openFLASH(uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw); + int open(const char *szFilename, JPEG_OPEN_CALLBACK *pfnOpen, JPEG_CLOSE_CALLBACK *pfnClose, JPEG_READ_CALLBACK *pfnRead, JPEG_SEEK_CALLBACK *pfnSeek, JPEG_DRAW_CALLBACK *pfnDraw); + void close(); + int decode(int x, int y, int iOptions); + int decodeDither(uint8_t *pDither, int iOptions); + int getOrientation(); + int getWidth(); + int getHeight(); + int getBpp(); + int getSubSample(); + int hasThumb(); + int getThumbWidth(); + int getThumbHeight(); + int getLastError(); + void setPixelType(int iType); // defaults to little endian + void setMaxOutputSize(int iMaxMCUs); + + private: + JPEGIMAGE _jpeg; +}; +#else +#define JPEG_STATIC +int JPEG_openRAM(JPEGIMAGE *pJPEG, uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw); +int JPEG_openFile(JPEGIMAGE *pJPEG, const char *szFilename, JPEG_DRAW_CALLBACK *pfnDraw); +int JPEG_getWidth(JPEGIMAGE *pJPEG); +int JPEG_getHeight(JPEGIMAGE *pJPEG); +int JPEG_decode(JPEGIMAGE *pJPEG, int x, int y, int iOptions); +int JPEG_decodeDither(JPEGIMAGE *pJPEG, uint8_t *pDither, int iOptions); +void JPEG_close(JPEGIMAGE *pJPEG); +int JPEG_getLastError(JPEGIMAGE *pJPEG); +int JPEG_getOrientation(JPEGIMAGE *pJPEG); +int JPEG_getBpp(JPEGIMAGE *pJPEG); +int JPEG_getSubSample(JPEGIMAGE *pJPEG); +int JPEG_hasThumb(JPEGIMAGE *pJPEG); +int JPEG_getThumbWidth(JPEGIMAGE *pJPEG); +int JPEG_getThumbHeight(JPEGIMAGE *pJPEG); +int JPEG_getLastError(JPEGIMAGE *pJPEG); +void JPEG_setPixelType(JPEGIMAGE *pJPEG, int iType); // defaults to little endian +void JPEG_setMaxOutputSize(JPEGIMAGE *pJPEG, int iMaxMCUs); +#endif // __cplusplus + +// Due to unaligned memory causing an exception, we have to do these macros the slow way +#define INTELSHORT(p) ((*p) + (*(p+1)<<8)) +#define INTELLONG(p) ((*p) + (*(p+1)<<8) + (*(p+2)<<16) + (*(p+3)<<24)) +#define MOTOSHORT(p) (((*(p))<<8) + (*(p+1))) +#define MOTOLONG(p) (((*p)<<24) + ((*(p+1))<<16) + ((*(p+2))<<8) + (*(p+3))) + +// Must be a 32-bit target processor +#define REGISTER_WIDTH 32 + +#endif // __JPEGDEC__ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/src/jpeg.c b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/jpeg.c new file mode 100644 index 0000000..bd762c4 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/src/jpeg.c @@ -0,0 +1,3435 @@ +// +// JPEG Decoder +// +// written by Larry Bank +// bitbank@pobox.com +// Arduino port started 8/2/2020 +// Original JPEG code written 26+ years ago :) +// The goal of this code is to decode baseline JPEG images +// using no more than 18K of RAM (if sent directly to an LCD display) +// +// Copyright 2020 BitBank Software, Inc. All Rights Reserved. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +//=========================================================================== +// +#include "JPEGDEC.h" + +// forward references +static int JPEGInit(JPEGIMAGE *pJPEG); +static int JPEGParseInfo(JPEGIMAGE *pPage, int bExtractThumb); +static void JPEGGetMoreData(JPEGIMAGE *pPage); +static int DecodeJPEG(JPEGIMAGE *pImage); +static int32_t readRAM(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen); +static int32_t seekMem(JPEGFILE *pFile, int32_t iPosition); +static int32_t readFile(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen); +static int32_t seekFile(JPEGFILE *pFile, int32_t iPosition); +static void closeFile(void *handle); +static void JPEGDither(JPEGIMAGE *pJPEG, int iWidth, int iHeight); +/* JPEG tables */ +// zigzag ordering of DCT coefficients +static const unsigned char cZigZag[64] = {0,1,5,6,14,15,27,28, + 2,4,7,13,16,26,29,42, + 3,8,12,17,25,30,41,43, + 9,11,18,24,31,40,44,53, + 10,19,23,32,39,45,52,54, + 20,22,33,38,46,51,55,60, + 21,34,37,47,50,56,59,61, + 35,36,48,49,57,58,62,63}; + +// un-zigzag ordering +static const unsigned char cZigZag2[64] = {0,1,8,16,9,2,3,10, + 17,24,32,25,18,11,4,5, + 12,19,26,33,40,48,41,34, + 27,20,13,6,7,14,21,28, + 35,42,49,56,57,50,43,36, + 29,22,15,23,30,37,44,51, + 58,59,52,45,38,31,39,46, + 53,60,61,54,47,55,62,63}; + +// For AA&N IDCT method, multipliers are equal to quantization +// coefficients scaled by scalefactor[row]*scalefactor[col], where +// scalefactor[0] = 1 +// scalefactor[k] = cos(k*PI/16) * sqrt(2) for k=1..7 +// For integer operation, the multiplier table is to be scaled by +// IFAST_SCALE_BITS. +static const int iScaleBits[64] = {16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270, + 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906, + 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315, + 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520, + 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552, + 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446, + 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247}; +// +// Range clip and shift for RGB565 output +// input value is 0 to 255, then another 256 for overflow to FF, then 512 more for negative values wrapping around +// Trims a few instructions off the final output stage +// +static const uint8_t ucRangeTable[] = {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, + 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, + 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, + 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, + 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, + 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, + 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, + 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, + 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, + 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, + 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f}; + +// +// Convert 8-bit grayscale into RGB565 +// +static const uint16_t usGrayTo565[] = {0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020, // 0 + 0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0861,0x0861, + 0x1082,0x1082,0x1082,0x1082,0x10a2,0x10a2,0x10a2,0x10a2, + 0x18c3,0x18c3,0x18c3,0x18c3,0x18e3,0x18e3,0x18e3,0x18e3, + 0x2104,0x2104,0x2104,0x2104,0x2124,0x2124,0x2124,0x2124, + 0x2945,0x2945,0x2945,0x2945,0x2965,0x2965,0x2965,0x2965, + 0x3186,0x3186,0x3186,0x3186,0x31a6,0x31a6,0x31a6,0x31a6, + 0x39c7,0x39c7,0x39c7,0x39c7,0x39e7,0x39e7,0x39e7,0x39e7, + 0x4208,0x4208,0x4208,0x4208,0x4228,0x4228,0x4228,0x4228, + 0x4a49,0x4a49,0x4a49,0x4a49,0x4a69,0x4a69,0x4a69,0x4a69, + 0x528a,0x528a,0x528a,0x528a,0x52aa,0x52aa,0x52aa,0x52aa, + 0x5acb,0x5acb,0x5acb,0x5acb,0x5aeb,0x5aeb,0x5aeb,0x5aeb, + 0x630c,0x630c,0x630c,0x630c,0x632c,0x632c,0x632c,0x632c, + 0x6b4d,0x6b4d,0x6b4d,0x6b4d,0x6b6d,0x6b6d,0x6b6d,0x6b6d, + 0x738e,0x738e,0x738e,0x738e,0x73ae,0x73ae,0x73ae,0x73ae, + 0x7bcf,0x7bcf,0x7bcf,0x7bcf,0x7bef,0x7bef,0x7bef,0x7bef, + 0x8410,0x8410,0x8410,0x8410,0x8430,0x8430,0x8430,0x8430, + 0x8c51,0x8c51,0x8c51,0x8c51,0x8c71,0x8c71,0x8c71,0x8c71, + 0x9492,0x9492,0x9492,0x9492,0x94b2,0x94b2,0x94b2,0x94b2, + 0x9cd3,0x9cd3,0x9cd3,0x9cd3,0x9cf3,0x9cf3,0x9cf3,0x9cf3, + 0xa514,0xa514,0xa514,0xa514,0xa534,0xa534,0xa534,0xa534, + 0xad55,0xad55,0xad55,0xad55,0xad75,0xad75,0xad75,0xad75, + 0xb596,0xb596,0xb596,0xb596,0xb5b6,0xb5b6,0xb5b6,0xb5b6, + 0xbdd7,0xbdd7,0xbdd7,0xbdd7,0xbdf7,0xbdf7,0xbdf7,0xbdf7, + 0xc618,0xc618,0xc618,0xc618,0xc638,0xc638,0xc638,0xc638, + 0xce59,0xce59,0xce59,0xce59,0xce79,0xce79,0xce79,0xce79, + 0xd69a,0xd69a,0xd69a,0xd69a,0xd6ba,0xd6ba,0xd6ba,0xd6ba, + 0xdedb,0xdedb,0xdedb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb, + 0xe71c,0xe71c,0xe71c,0xe71c,0xe73c,0xe73c,0xe73c,0xe73c, + 0xef5d,0xef5d,0xef5d,0xef5d,0xef7d,0xef7d,0xef7d,0xef7d, + 0xf79e,0xf79e,0xf79e,0xf79e,0xf7be,0xf7be,0xf7be,0xf7be, + 0xffdf,0xffdf,0xffdf,0xffdf,0xffff,0xffff,0xffff,0xffff}; +// +// Clip and convert red value into 5-bits for RGB565 +// +static const uint16_t usRangeTableR[] = {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // 0 + 0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800,0x0800, + 0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000,0x1000, + 0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800,0x1800, + 0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000, + 0x2800,0x2800,0x2800,0x2800,0x2800,0x2800,0x2800,0x2800, + 0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000,0x3000, + 0x3800,0x3800,0x3800,0x3800,0x3800,0x3800,0x3800,0x3800, + 0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000,0x4000, + 0x4800,0x4800,0x4800,0x4800,0x4800,0x4800,0x4800,0x4800, + 0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x5000,0x5000, + 0x5800,0x5800,0x5800,0x5800,0x5800,0x5800,0x5800,0x5800, + 0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000,0x6000, + 0x6800,0x6800,0x6800,0x6800,0x6800,0x6800,0x6800,0x6800, + 0x7000,0x7000,0x7000,0x7000,0x7000,0x7000,0x7000,0x7000, + 0x7800,0x7800,0x7800,0x7800,0x7800,0x7800,0x7800,0x7800, + 0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000, + 0x8800,0x8800,0x8800,0x8800,0x8800,0x8800,0x8800,0x8800, + 0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9000,0x9000, + 0x9800,0x9800,0x9800,0x9800,0x9800,0x9800,0x9800,0x9800, + 0xa000,0xa000,0xa000,0xa000,0xa000,0xa000,0xa000,0xa000, + 0xa800,0xa800,0xa800,0xa800,0xa800,0xa800,0xa800,0xa800, + 0xb000,0xb000,0xb000,0xb000,0xb000,0xb000,0xb000,0xb000, + 0xb800,0xb800,0xb800,0xb800,0xb800,0xb800,0xb800,0xb800, + 0xc000,0xc000,0xc000,0xc000,0xc000,0xc000,0xc000,0xc000, + 0xc800,0xc800,0xc800,0xc800,0xc800,0xc800,0xc800,0xc800, + 0xd000,0xd000,0xd000,0xd000,0xd000,0xd000,0xd000,0xd000, + 0xd800,0xd800,0xd800,0xd800,0xd800,0xd800,0xd800,0xd800, + 0xe000,0xe000,0xe000,0xe000,0xe000,0xe000,0xe000,0xe000, + 0xe800,0xe800,0xe800,0xe800,0xe800,0xe800,0xe800,0xe800, + 0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000,0xf000, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, // 256 + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 512 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 768 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +// +// Clip and convert green value into 5-bits for RGB565 +// +static const uint16_t usRangeTableG[] = {0x0000,0x0000,0x0000,0x0000,0x0020,0x0020,0x0020,0x0020, // 0 + 0x0040,0x0040,0x0040,0x0040,0x0060,0x0060,0x0060,0x0060, + 0x0080,0x0080,0x0080,0x0080,0x00a0,0x00a0,0x00a0,0x00a0, + 0x00c0,0x00c0,0x00c0,0x00c0,0x00e0,0x00e0,0x00e0,0x00e0, + 0x0100,0x0100,0x0100,0x0100,0x0120,0x0120,0x0120,0x0120, + 0x0140,0x0140,0x0140,0x0140,0x0160,0x0160,0x0160,0x0160, + 0x0180,0x0180,0x0180,0x0180,0x01a0,0x01a0,0x01a0,0x01a0, + 0x01c0,0x01c0,0x01c0,0x01c0,0x01e0,0x01e0,0x01e0,0x01e0, + 0x0200,0x0200,0x0200,0x0200,0x0220,0x0220,0x0220,0x0220, + 0x0240,0x0240,0x0240,0x0240,0x0260,0x0260,0x0260,0x0260, + 0x0280,0x0280,0x0280,0x0280,0x02a0,0x02a0,0x02a0,0x02a0, + 0x02c0,0x02c0,0x02c0,0x02c0,0x02e0,0x02e0,0x02e0,0x02e0, + 0x0300,0x0300,0x0300,0x0300,0x0320,0x0320,0x0320,0x0320, + 0x0340,0x0340,0x0340,0x0340,0x0360,0x0360,0x0360,0x0360, + 0x0380,0x0380,0x0380,0x0380,0x03a0,0x03a0,0x03a0,0x03a0, + 0x03c0,0x03c0,0x03c0,0x03c0,0x03e0,0x03e0,0x03e0,0x03e0, + 0x0400,0x0400,0x0400,0x0400,0x0420,0x0420,0x0420,0x0420, + 0x0440,0x0440,0x0440,0x0440,0x0460,0x0460,0x0460,0x0460, + 0x0480,0x0480,0x0480,0x0480,0x04a0,0x04a0,0x04a0,0x04a0, + 0x04c0,0x04c0,0x04c0,0x04c0,0x04e0,0x04e0,0x04e0,0x04e0, + 0x0500,0x0500,0x0500,0x0500,0x0520,0x0520,0x0520,0x0520, + 0x0540,0x0540,0x0540,0x0540,0x0560,0x0560,0x0560,0x0560, + 0x0580,0x0580,0x0580,0x0580,0x05a0,0x05a0,0x05a0,0x05a0, + 0x05c0,0x05c0,0x05c0,0x05c0,0x05e0,0x05e0,0x05e0,0x05e0, + 0x0600,0x0600,0x0600,0x0600,0x0620,0x0620,0x0620,0x0620, + 0x0640,0x0640,0x0640,0x0640,0x0660,0x0660,0x0660,0x0660, + 0x0680,0x0680,0x0680,0x0680,0x06a0,0x06a0,0x06a0,0x06a0, + 0x06c0,0x06c0,0x06c0,0x06c0,0x06e0,0x06e0,0x06e0,0x06e0, + 0x0700,0x0700,0x0700,0x0700,0x0720,0x0720,0x0720,0x0720, + 0x0740,0x0740,0x0740,0x0740,0x0760,0x0760,0x0760,0x0760, + 0x0780,0x0780,0x0780,0x0780,0x07a0,0x07a0,0x07a0,0x07a0, + 0x07c0,0x07c0,0x07c0,0x07c0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, // 256 + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0,0x07e0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 512 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 768 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +// +// Clip and convert blue value into 5-bits for RGB565 +// +static const uint16_t usRangeTableB[] = {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, // 0 + 0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001,0x0001, + 0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002,0x0002, + 0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003,0x0003, + 0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004,0x0004, + 0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005,0x0005, + 0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006,0x0006, + 0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007,0x0007, + 0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008,0x0008, + 0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,0x0009,0x0009, + 0x000a,0x000a,0x000a,0x000a,0x000a,0x000a,0x000a,0x000a, + 0x000b,0x000b,0x000b,0x000b,0x000b,0x000b,0x000b,0x000b, + 0x000c,0x000c,0x000c,0x000c,0x000c,0x000c,0x000c,0x000c, + 0x000d,0x000d,0x000d,0x000d,0x000d,0x000d,0x000d,0x000d, + 0x000e,0x000e,0x000e,0x000e,0x000e,0x000e,0x000e,0x000e, + 0x000f,0x000f,0x000f,0x000f,0x000f,0x000f,0x000f,0x000f, + 0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010,0x0010, + 0x0011,0x0011,0x0011,0x0011,0x0011,0x0011,0x0011,0x0011, + 0x0012,0x0012,0x0012,0x0012,0x0012,0x0012,0x0012,0x0012, + 0x0013,0x0013,0x0013,0x0013,0x0013,0x0013,0x0013,0x0013, + 0x0014,0x0014,0x0014,0x0014,0x0014,0x0014,0x0014,0x0014, + 0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015,0x0015, + 0x0016,0x0016,0x0016,0x0016,0x0016,0x0016,0x0016,0x0016, + 0x0017,0x0017,0x0017,0x0017,0x0017,0x0017,0x0017,0x0017, + 0x0018,0x0018,0x0018,0x0018,0x0018,0x0018,0x0018,0x0018, + 0x0019,0x0019,0x0019,0x0019,0x0019,0x0019,0x0019,0x0019, + 0x001a,0x001a,0x001a,0x001a,0x001a,0x001a,0x001a,0x001a, + 0x001b,0x001b,0x001b,0x001b,0x001b,0x001b,0x001b,0x001b, + 0x001c,0x001c,0x001c,0x001c,0x001c,0x001c,0x001c,0x001c, + 0x001d,0x001d,0x001d,0x001d,0x001d,0x001d,0x001d,0x001d, + 0x001e,0x001e,0x001e,0x001e,0x001e,0x001e,0x001e,0x001e, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, // 256 + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f,0x001f, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 512 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 768 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +#if defined( __LINUX__ ) || defined( __MCUXPRESSO ) +// +// API for C +// + +// +// Memory initialization +// +int JPEG_openRAM(JPEGIMAGE *pJPEG, uint8_t *pData, int iDataSize, JPEG_DRAW_CALLBACK *pfnDraw) +{ + memset(pJPEG, 0, sizeof(JPEGIMAGE)); + pJPEG->ucMemType = JPEG_MEM_RAM; + pJPEG->pfnRead = readRAM; + pJPEG->pfnSeek = seekMem; + pJPEG->pfnDraw = pfnDraw; + pJPEG->pfnOpen = NULL; + pJPEG->pfnClose = NULL; + pJPEG->JPEGFile.iSize = iDataSize; + pJPEG->JPEGFile.pData = pData; + pJPEG->iMaxMCUs = 1000; // set to an unnaturally high value to start + return JPEGInit(pJPEG); +} /* JPEG_openRAM() */ +// +// File initialization +// +int JPEG_openFile(JPEGIMAGE *pJPEG, const char *szFilename, JPEG_DRAW_CALLBACK *pfnDraw) +{ + memset(pJPEG, 0, sizeof(JPEGIMAGE)); + pJPEG->ucMemType = JPEG_MEM_RAM; + pJPEG->pfnRead = readFile; + pJPEG->pfnSeek = seekFile; + pJPEG->pfnDraw = pfnDraw; + pJPEG->pfnOpen = NULL; + pJPEG->pfnClose = closeFile; + pJPEG->iMaxMCUs = 1000; // set to an unnaturally high value to start + pJPEG->JPEGFile.fHandle = fopen(szFilename, "r+b"); + if (pJPEG->JPEGFile.fHandle == NULL) + return 0; + fseek((FILE *)pJPEG->JPEGFile.fHandle, 0, SEEK_END); + pJPEG->JPEGFile.iSize = (int)ftell((FILE *)pJPEG->JPEGFile.fHandle); + fseek((FILE *)pJPEG->JPEGFile.fHandle, 0, SEEK_SET); + return JPEGInit(pJPEG); +} /* JPEG_openFile() */ + +int JPEG_getLastError(JPEGIMAGE *pJPEG) +{ + return pJPEG->iError; +} /* JPEG_getLastError() */ + +int JPEG_getWidth(JPEGIMAGE *pJPEG) +{ + return pJPEG->iWidth; +} /* JPEG_getWidth() */ + +int JPEG_getHeight(JPEGIMAGE *pJPEG) +{ + return pJPEG->iHeight; +} /* JPEG_getHeight() */ + +int JPEG_getOrientation(JPEGIMAGE *pJPEG) +{ + return (int)pJPEG->ucOrientation; +} /* JPEG_getOrientation() */ + +int JPEG_getBpp(JPEGIMAGE *pJPEG) +{ + return (int)pJPEG->ucBpp; +} /* JPEG_getBpp() */ +int JPEG_getSubSample(JPEGIMAGE *pJPEG) +{ + return (int)pJPEG->ucSubSample; +} /* JPEG_getSubSample() */ +int JPEG_hasThumb(JPEGIMAGE *pJPEG) +{ + return (int)pJPEG->ucHasThumb; +} /* JPEG_hasThumb() */ +int JPEG_getThumbWidth(JPEGIMAGE *pJPEG) +{ + return pJPEG->iThumbWidth; +} /* JPEG_getThumbWidth() */ +int JPEG_getThumbHeight(JPEGIMAGE *pJPEG) +{ + return pJPEG->iThumbHeight; +} /* JPEG_getThumbHeight() */ +void JPEG_setPixelType(JPEGIMAGE *pJPEG, int iType) +{ + pJPEG->ucPixelType = (uint8_t)iType; +} /* JPEG_setPixelType() */ +void JPEG_setMaxOutputSize(JPEGIMAGE *pJPEG, int iMaxMCUs) +{ + if (iMaxMCUs < 1) + iMaxMCUs = 1; // don't allow invalid value + pJPEG->iMaxMCUs = iMaxMCUs; +} /* JPEG_setMaxOutputSize() */ + +int JPEG_decode(JPEGIMAGE *pJPEG, int x, int y, int iOptions) +{ + pJPEG->iXOffset = x; + pJPEG->iYOffset = y; + pJPEG->iOptions = iOptions; + return DecodeJPEG(pJPEG); +} /* JPEG_decode() */ + +int JPEG_decodeDither(JPEGIMAGE *pJPEG, uint8_t *pDither, int iOptions) +{ + pJPEG->iOptions = iOptions; + pJPEG->pDitherBuffer = pDither; + return DecodeJPEG(pJPEG); +} /* JPEG_decodeDither() */ + +void JPEG_close(JPEGIMAGE *pJPEG) +{ + if (pJPEG->pfnClose) + (*pJPEG->pfnClose)(pJPEG->JPEGFile.fHandle); +} /* JPEG_close() */ + +#endif // !__cplusplus +// +// Helper functions for memory based images +// +static int32_t readRAM(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen) +{ + int32_t iBytesRead; + + iBytesRead = iLen; + if ((pFile->iSize - pFile->iPos) < iLen) + iBytesRead = pFile->iSize - pFile->iPos; + if (iBytesRead <= 0) + return 0; + memcpy(pBuf, &pFile->pData[pFile->iPos], iBytesRead); + pFile->iPos += iBytesRead; + return iBytesRead; +} /* readRAM() */ + +static int32_t readFLASH(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen) +{ + int32_t iBytesRead; + + iBytesRead = iLen; + if ((pFile->iSize - pFile->iPos) < iLen) + iBytesRead = pFile->iSize - pFile->iPos; + if (iBytesRead <= 0) + return 0; + memcpy_P(pBuf, &pFile->pData[pFile->iPos], iBytesRead); + pFile->iPos += iBytesRead; + return iBytesRead; +} /* readFLASH() */ + +static int32_t seekMem(JPEGFILE *pFile, int32_t iPosition) +{ + if (iPosition < 0) iPosition = 0; + else if (iPosition >= pFile->iSize) iPosition = pFile->iSize-1; + pFile->iPos = iPosition; + return iPosition; +} /* seekMem() */ + +#if defined( __LINUX__ ) || defined( __MCUXPRESSO ) + +static void closeFile(void *handle) +{ + fclose((FILE *)handle); +} /* closeFile() */ + +static int32_t seekFile(JPEGFILE *pFile, int32_t iPosition) +{ + if (iPosition < 0) iPosition = 0; + else if (iPosition >= pFile->iSize) iPosition = pFile->iSize-1; + pFile->iPos = iPosition; + fseek((FILE *)pFile->fHandle, iPosition, SEEK_SET); + return iPosition; +} /* seekFile() */ + +static int32_t readFile(JPEGFILE *pFile, uint8_t *pBuf, int32_t iLen) +{ + int32_t iBytesRead; + + iBytesRead = iLen; + if ((pFile->iSize - pFile->iPos) < iLen) + iBytesRead = pFile->iSize - pFile->iPos; + if (iBytesRead <= 0) + return 0; + iBytesRead = (int)fread(pBuf, 1, iBytesRead, (FILE *)pFile->fHandle); + pFile->iPos += iBytesRead; + return iBytesRead; +} /* readFile() */ + +#endif // __LINUX__ +// +// The following functions are written in plain C and have no +// 3rd party dependencies, not even the C runtime library +// +// +// Initialize a JPEG file and callback access from a file on SD or memory +// returns 1 for success, 0 for failure +// Fills in the basic image info fields of the JPEGIMAGE structure +// +static int JPEGInit(JPEGIMAGE *pJPEG) +{ + return JPEGParseInfo(pJPEG, 0); // gather info for image +} /* JPEGInit() */ +// +// Unpack the Huffman tables +// +static int JPEGGetHuffTables(uint8_t *pBuf, int iLen, JPEGIMAGE *pJPEG) +{ + int i, j, iOffset, iTableOffset; + uint8_t ucTable, *pHuffVals; + + iOffset = 0; + pHuffVals = (uint8_t *)pJPEG->usPixels; // temp holding area to save RAM + while (iLen > 17) // while there are tables to copy (we may have combined more than 1 table together) + { + ucTable = pBuf[iOffset++]; // get table index + if (ucTable & 0x10) // convert AC offset of 0x10 into offset of 4 + ucTable ^= 0x14; + pJPEG->ucHuffTableUsed |= (1 << ucTable); // mark this table as being defined + if (ucTable <= 7) // tables are 0-3, AC+DC + { + iTableOffset = ucTable * HUFF_TABLEN; + j = 0; // total bits + for (i=0; i<16; i++) + { + j += pBuf[iOffset]; + pHuffVals[iTableOffset+i] = pBuf[iOffset++]; + } + iLen -= 17; // subtract length of bit lengths + if (j == 0 || j > 256 || j > iLen) // bogus bit lengths + { + return -1; + } + iTableOffset += 16; + for (i=0; ib11Bit = 1; // indicate we're using the bigger A/C decode tables + // first do DC components (up to 4 tables of 12-bit codes) + // we can save time and memory for the DC codes by knowing that there exist short codes (<= 6 bits) + // and long codes (>6 bits, but the first 5 bits are 1's). This allows us to create 2 tables: a 6-bit and 7 or 8-bit + // to handle any DC codes + iMaxLength = 12; // assume DC codes can be 12-bits + iMaxMask = 0x7f; // lower 7 bits after truncate 5 leading 1's + if (pJPEG->ucMode == 0xc3) // create 13-bit tables for lossless mode + { + iMaxLength = 13; + iMaxMask = 0xff; + } + for (iTable = 0; iTable < 2; iTable++) + { + if (pJPEG->ucHuffTableUsed & (1<huffdcFast[iTable] = (int *)PILIOAlloc(0x180); // short table = 128 bytes, long table = 256 bytes + pucShort = (unsigned char *)&pJPEG->ucHuffDC[iTable*DC_TABLE_SIZE]; + // pJPEG->huffdc[iTable] = pJPEG->huffdcFast[iTable] + 0x20; // 0x20 longs = 128 bytes + pucLong = (unsigned char *)&pJPEG->ucHuffDC[iTable*DC_TABLE_SIZE + 128]; + pBits = &pJPEG->ucHuffVals[iTable * HUFF_TABLEN]; + p = pBits; + p += 16; // point to bit data + cc = 0; // start with a code of 0 + for (iBitNum = 1; iBitNum <= 16; iBitNum++) + { + iLen = *pBits++; // get number of codes for this bit length + if (iBitNum > iMaxLength && iLen > 0) // we can't handle codes longer a certain length + { + return -1; + } + while (iLen) + { + // if (iBitNum > 6) // do long table + if ((cc >> (iBitNum-5)) == 0x1f) // first 5 bits are 1 - use long table + { + count = iMaxLength - iBitNum; + codestart = cc << count; + pucTable = &pucLong[codestart & iMaxMask]; // use lower 7/8 bits of code + } + else // do short table + { + count = 6 - iBitNum; + if (count < 0) + return -1; // DEBUG - something went wrong + codestart = cc << count; + pucTable = &pucShort[codestart]; + } + ucCode = *p++; // get actual huffman code + if (ucCode == 16 && pJPEG->ucMode == 0xc3) // lossless mode + { + // in lossless mode, this code won't fit in 4 bits, so save it's length in the next slot + ucCode = 255; + pucLong[256] = (unsigned char)iBitNum; + } + // does precalculating the DC value save time on ARM? +#ifndef USE_ARM_ASM + if (ucCode != 0 && (ucCode + iBitNum) <= 6 && pJPEG->ucMode != 0xc2) // we can fit the magnitude value in the code lookup (not for progressive) + { + int k, iLoop; + unsigned char ucCoeff; + unsigned char *d = &pucTable[512]; + unsigned char ucMag = ucCode; + ucCode |= ((iBitNum+ucCode) << 4); // add magnitude bits to length + repeat = 1<ucHuffTableUsed & (1<<(iTable+4))) // if this table is defined + { + pBits = &pJPEG->ucHuffVals[(iTable+4) * HUFF_TABLEN]; + p = pBits; + p += 16; // point to bit data + pShort = &pJPEG->usHuffAC[iTable*HUFF11SIZE]; + pLong = &pJPEG->usHuffAC[iTable*HUFF11SIZE + 1024]; // long codes start here + cc = 0; // start with a code of 0 + // construct the decode table + for (iBitNum = 1; iBitNum <= 16; iBitNum++) + { + iLen = *pBits++; // get number of codes for this bit length + while (iLen) + { + if ((cc >> (iBitNum-4)) == 0xf) // first 4 bits are 1 - use long table + { + count = 16 - iBitNum; + codestart = cc << count; + pTable = &pLong[codestart & 0xfff]; // use lower 12 bits of code + } + else + { + count = 12 - iBitNum; + if (count < 0) // a 13-bit? code - that doesn't fit our optimized scheme, see if we can do a bigger table version + { + return -1; // DEBUG - fatal error, we currently don't support it + } + codestart = cc << count; + pTable = &pShort[codestart]; // 11 bits or shorter + } + code = *p++; // get actual huffman code + if (bThumbnail && code != 0) // add "extra" bits to code length since we skip these codes + { + // get rid of extra bits in code and add increment (1) for AC index + code = ((iBitNum+(code & 0xf)) << 8) | ((code >> 4)+1); + } + else + { + code |= (iBitNum << 8); + } + if (count) // do it as dwords to save time + { + repeat = 1 << (count-1); // store as dwords (/2) + ul = code | (code << 16); + pLongTable = (uint32_t *)pTable; + for (j=0; jusPixels; + for (j=0; j<4; j++) + { + if (pJPEG->ucHuffTableUsed & (1 << j)) + iTablesUsed++; + } + // first do DC components (up to 4 tables of 12-bit codes) + // we can save time and memory for the DC codes by knowing that there exist short codes (<= 6 bits) + // and long codes (>6 bits, but the first 5 bits are 1's). This allows us to create 2 tables: a 6-bit and 7 or 8-bit + // to handle any DC codes + iMaxLength = 12; // assume DC codes can be 12-bits + iMaxMask = 0x7f; // lower 7 bits after truncate 5 leading 1's + for (iTable = 0; iTable < 4; iTable++) + { + if (pJPEG->ucHuffTableUsed & (1 << iTable)) + { + // pJPEG->huffdcFast[iTable] = (int *)PILIOAlloc(0x180); // short table = 128 bytes, long table = 256 bytes + pucShort = &pJPEG->ucHuffDC[iTable*DC_TABLE_SIZE]; + // pJPEG->huffdc[iTable] = pJPEG->huffdcFast[iTable] + 0x20; // 0x20 longs = 128 bytes + pucLong = &pJPEG->ucHuffDC[iTable*DC_TABLE_SIZE + 128]; + pBits = &pHuffVals[iTable * HUFF_TABLEN]; + p = pBits; + p += 16; // point to bit data + cc = 0; // start with a code of 0 + for (iBitNum = 1; iBitNum <= 16; iBitNum++) + { + iLen = *pBits++; // get number of codes for this bit length + if (iBitNum > iMaxLength && iLen > 0) // we can't handle codes longer a certain length + { + return 0; + } + while (iLen) + { + // if (iBitNum > 6) // do long table + if ((cc >> (iBitNum-5)) == 0x1f) // first 5 bits are 1 - use long table + { + count = iMaxLength - iBitNum; + codestart = cc << count; + pucTable = &pucLong[codestart & iMaxMask]; // use lower 7/8 bits of code + } + else // do short table + { + count = 6 - iBitNum; + if (count < 0) + return 0; // DEBUG - something went wrong + codestart = cc << count; + pucTable = &pucShort[codestart]; + } + ucCode = *p++; // get actual huffman code + // does precalculating the DC value save time on ARM? +#ifndef USE_ARM_ASM + if (ucCode != 0 && (ucCode + iBitNum) <= 6 && pJPEG->ucMode != 0xc2) // we can fit the magnitude value in the code lookup (not for progressive) + { + int k, iLoop; + unsigned char ucCoeff; + unsigned char *d = &pucTable[512]; + unsigned char ucMag = ucCode; + ucCode |= ((iBitNum+ucCode) << 4); // add magnitude bits to length + repeat = 1<ucHuffTableUsed & (1 << (iTable+4))) // if this table is defined + { + pBits = &pHuffVals[(iTable+4) * HUFF_TABLEN]; + p = pBits; + p += 16; // point to bit data + pShort = &pJPEG->usHuffAC[iTable*HUFF11SIZE]; + pLong = &pJPEG->usHuffAC[iTable*HUFF11SIZE + 1024]; + cc = 0; // start with a code of 0 + // construct the decode table + for (iBitNum = 1; iBitNum <= 16; iBitNum++) + { + iLen = *pBits++; // get number of codes for this bit length + while (iLen) + { + if ((cc >> (iBitNum-6)) == 0x3f) // first 6 bits are 1 - use long table + { + count = 16 - iBitNum; + codestart = cc << count; + pTable = &pLong[codestart & 0x3ff]; // use lower 10 bits of code + } + else + { + count = 10 - iBitNum; + if (count < 0) // an 11/12-bit? code - that doesn't fit our optimized scheme, see if we can do a bigger table version + { + if (count == -1 && iTablesUsed <= 4) // we need to create "slow" tables + { // DEBUG +// j = JPEGMakeHuffTables_Slow(pJPEG, bThumbnail); + return 0; + } + else + return 0; // DEBUG - fatal error, more than 2 big tables we currently don't support + } + codestart = cc << count; + pTable = &pShort[codestart]; // 10 bits or shorter + } + code = *p++; // get actual huffman code + if (bThumbnail && code != 0) // add "extra" bits to code length since we skip these codes + { + // get rid of extra bits in code and add increment (1) for AC index + code = ((iBitNum+(code & 0xf)) << 8) | ((code >> 4)+1); + } +#ifdef BOGUS // precalculating the AC coeff makes it run slightly slower + else if ((code & 0xf) != 0 && (code + iBitNum) <= 10) // we can fit the magnitude value + huffman code in a single read + { + int k, iLoop; + unsigned short usCoeff; + unsigned short *d = &pTable[4096]; // use unused table slots 2+3 for extra coeff data + unsigned char ucMag = (unsigned char)(code & 0xf); + code |= ((iBitNum + (code & 0xf)) << 8); // add magnitude bits to length + repeat = 1< 1) + { + iType = 4; + } + switch (iType) + { + case 3: /* Short */ + i = TIFFSHORT(p+8, bMotorola); + break; + case 4: /* Long */ + case 7: // undefined (treat it as a long since it's usually a multibyte buffer) + i = TIFFLONG(p+8, bMotorola); + break; + case 6: // signed byte + i = (signed char)p[8]; + break; + case 2: /* ASCII */ + case 5: /* Unsigned Rational */ + case 10: /* Signed Rational */ + i = TIFFLONG(p+8, bMotorola); + break; + default: /* to suppress compiler warning */ + i = 0; + break; + } + return i; + +} /* TIFFVALUE() */ +static void GetTIFFInfo(JPEGIMAGE *pPage, int bMotorola, int iOffset) +{ + int iTag, iTagCount, i; + uint8_t *cBuf = pPage->ucFileBuf; + + iTagCount = TIFFSHORT(&cBuf[iOffset], bMotorola); /* Number of tags in this dir */ + if (iTagCount < 1 || iTagCount > 256) // invalid tag count + return; /* Bad header info */ + /*--- Search the TIFF tags ---*/ + for (i=0; iucOrientation = TIFFVALUE(p, bMotorola); + } + else if (iTag == 256) // width of thumbnail + { + pPage->iThumbWidth = TIFFVALUE(p, bMotorola); + } + else if (iTag == 257) // height of thumbnail + { + pPage->iThumbHeight = TIFFVALUE(p, bMotorola); + } + else if (iTag == 513) // offset to JPEG data + { + pPage->iThumbData = TIFFVALUE(p, bMotorola); + } + } +} /* GetTIFFInfo() */ + +static int JPEGGetSOS(JPEGIMAGE *pJPEG, int *iOff) +{ + int16_t sLen; + int iOffset = *iOff; + int i, j; + uint8_t uc,c,cc; + uint8_t *buf = pJPEG->ucFileBuf; + + sLen = MOTOSHORT(&buf[iOffset]); + iOffset += 2; + + // Assume no components in this scan + for (i=0; i<4; i++) + pJPEG->JPCI[i].component_needed = 0; + + uc = buf[iOffset++]; // get number of components + pJPEG->ucComponentsInScan = uc; + sLen -= 3; + if (uc < 1 || uc > MAX_COMPS_IN_SCAN || sLen != (uc*2+3)) // check length of data packet + return 1; // error + for (i=0; iJPCI[j].component_id == cc) + break; + } + if (j == 4) // error, not found + return 1; + if ((c & 0xf) > 3 || (c & 0xf0) > 0x30) + return 1; // bogus table numbers + pJPEG->JPCI[j].dc_tbl_no = c >> 4; + pJPEG->JPCI[j].ac_tbl_no = c & 0xf; + pJPEG->JPCI[j].component_needed = 1; // mark this component as being included in the scan + } + pJPEG->iScanStart = buf[iOffset++]; // Get the scan start (or lossless predictor) for this scan + pJPEG->iScanEnd = buf[iOffset++]; // Get the scan end for this scan + c = buf[iOffset++]; // successive approximation bits + pJPEG->cApproxBitsLow = c & 0xf; // also point transform in lossless mode + pJPEG->cApproxBitsHigh = c >> 4; + + *iOff = iOffset; + return 0; + +} /* JPEGGetSOS() */ +// +// Remove markers from the data stream to allow faster decode +// Stuffed zeros and restart interval markers aren't needed to properly decode +// the data, but they make reading VLC data slower, so I pull them out first +// +static int JPEGFilter(uint8_t *pBuf, uint8_t *d, int iLen, uint8_t *bFF) +{ + // since we have the entire jpeg buffer in memory already, we can just change it in place + unsigned char c, *s, *pEnd, *pStart; + + pStart = d; + s = pBuf; + pEnd = &s[iLen-1]; // stop just shy of the end to not miss a final marker/stuffed 0 + if (*bFF) // last byte was a FF, check the next one + { + if (s[0] == 0) // stuffed 0, keep the FF + *d++ = 0xff; + s++; + *bFF = 0; + } + while (s < pEnd) + { + c = *d++ = *s++; + if (c == 0xff) // marker or stuffed zeros? + { + if (s[0] != 0) // it's a marker, skip both + { + d--; + } + s++; // for stuffed 0's, store the FF, skip the 00 + } + } + if (s == pEnd) // need to test the last byte + { + c = s[0]; + if (c == 0xff) // last byte is FF, take care of it next time through + *bFF = 1; // take care of it next time through + else + *d++ = c; // nope, just store it + } + return (int)(d-pStart); // filtered output length +} /* JPEGFilter() */ +// +// Read and filter more VLC data for decoding +// +static void JPEGGetMoreData(JPEGIMAGE *pPage) +{ + int iDelta = pPage->iVLCSize - pPage->iVLCOff; +// printf("Getting more data...size=%d, off=%d\n", pPage->iVLCSize, pPage->iVLCOff); + // move any existing data down + if (iDelta >= (JPEG_FILE_BUF_SIZE-64) || iDelta < 0) + return; // buffer is already full; no need to read more data + if (pPage->iVLCOff != 0) + { + memcpy(pPage->ucFileBuf, &pPage->ucFileBuf[pPage->iVLCOff], pPage->iVLCSize - pPage->iVLCOff); + pPage->iVLCSize -= pPage->iVLCOff; + pPage->iVLCOff = 0; + pPage->bb.pBuf = pPage->ucFileBuf; // reset VLC source pointer too + } + if (pPage->JPEGFile.iPos < pPage->JPEGFile.iSize && pPage->iVLCSize < JPEG_FILE_BUF_SIZE-64) + { + int i; + // Try to read enough to fill the buffer + i = (*pPage->pfnRead)(&pPage->JPEGFile, &pPage->ucFileBuf[pPage->iVLCSize], JPEG_FILE_BUF_SIZE - pPage->iVLCSize); // max length we can read + // Filter out the markers + pPage->iVLCSize += JPEGFilter(&pPage->ucFileBuf[pPage->iVLCSize], &pPage->ucFileBuf[pPage->iVLCSize], i, &pPage->ucFF); + } +} /* JPEGGetMoreData() */ + +// +// Parse the JPEG header, gather necessary info to decode the image +// Returns 1 for success, 0 for failure +// +static int JPEGParseInfo(JPEGIMAGE *pPage, int bExtractThumb) +{ + int iBytesRead; + int i, iOffset, iTableOffset; + uint8_t ucTable, *s = pPage->ucFileBuf; + uint16_t usMarker, usLen = 0; + int iFilePos = 0; + + if (bExtractThumb) // seek to the start of the thumbnail image + { + iFilePos = pPage->iThumbData; + (*pPage->pfnSeek)(&pPage->JPEGFile, iFilePos); + } + iBytesRead = (*pPage->pfnRead)(&pPage->JPEGFile, s, JPEG_FILE_BUF_SIZE); + if (iBytesRead < 256) // a JPEG file this tiny? probably bad + { + pPage->iError = JPEG_INVALID_FILE; + return 0; + } + iFilePos += iBytesRead; + if (MOTOSHORT(pPage->ucFileBuf) != 0xffd8) + { + pPage->iError = JPEG_INVALID_FILE; + return 0; // not a JPEG file + } + iOffset = 2; /* Start at offset of first marker */ + usMarker = 0; /* Search for SOFx (start of frame) marker */ + while (usMarker != 0xffda && iOffset < pPage->JPEGFile.iSize) + { + if (iOffset >= JPEG_FILE_BUF_SIZE/2) // too close to the end, read more data + { + // Do we need to seek first? + if (iOffset >= JPEG_FILE_BUF_SIZE) + { + iFilePos += (iOffset - iBytesRead); + iOffset = 0; + (*pPage->pfnSeek)(&pPage->JPEGFile, iFilePos); + iBytesRead = 0; // throw away any old data + } + // move existing bytes down + if (iOffset) + { + memcpy(pPage->ucFileBuf, &pPage->ucFileBuf[iOffset], iBytesRead - iOffset); + iBytesRead -= iOffset; + iOffset = 0; + } + i = (*pPage->pfnRead)(&pPage->JPEGFile, &pPage->ucFileBuf[iBytesRead], JPEG_FILE_BUF_SIZE-iBytesRead); + iFilePos += i; + iBytesRead += i; + } + usMarker = MOTOSHORT(&s[iOffset]); + iOffset += 2; + usLen = MOTOSHORT(&s[iOffset]); // marker length + + if (usMarker < 0xffc0 || usMarker == 0xffff) // invalid marker, could be generated by "Arles Image Web Page Creator" or Accusoft + { + iOffset++; + continue; // skip 1 byte and try to resync + } + switch (usMarker) + { + case 0xffc1: + case 0xffc2: + case 0xffc3: + pPage->iError = JPEG_UNSUPPORTED_FEATURE; + return 0; // currently unsupported modes + + case 0xffe1: // App1 (EXIF?) + if (s[iOffset+2] == 'E' && s[iOffset+3] == 'x' && (s[iOffset+8] == 'M' || s[iOffset+8] == 'I')) // the EXIF data we want + { + int bMotorola, IFD, iTagCount; + pPage->iEXIF = iFilePos - iBytesRead + iOffset + 8; // start of TIFF file + // Get the orientation value (if present) + bMotorola = (s[iOffset+8] == 'M'); + IFD = TIFFLONG(&s[iOffset+12], bMotorola); + iTagCount = TIFFSHORT(&s[iOffset+16], bMotorola); + GetTIFFInfo(pPage, bMotorola, IFD+iOffset+8); + // The second IFD defines the thumbnail (if present) + if (iTagCount >= 1 && iTagCount < 32) // valid number of tags for EXIF data 'page' + { + // point to next IFD + IFD += (12 * iTagCount) + 2; + IFD = TIFFLONG(&s[IFD + iOffset + 8], bMotorola); + if (IFD != 0) // Thumbnail present? + { + pPage->ucHasThumb = 1; + GetTIFFInfo(pPage, bMotorola, IFD+iOffset+8); // info for second 'page' of TIFF + pPage->iThumbData += iOffset + 8; // absolute offset in the file + } + } + } + break; + case 0xffc0: // SOFx - start of frame + pPage->ucMode = (uint8_t)usMarker; + pPage->ucBpp = s[iOffset+2]; // bits per sample + pPage->iHeight = MOTOSHORT(&s[iOffset+3]); + pPage->iWidth = MOTOSHORT(&s[iOffset+5]); + pPage->ucNumComponents = s[iOffset+7]; + pPage->ucBpp = pPage->ucBpp * pPage->ucNumComponents; /* Bpp = number of components * bits per sample */ + if (pPage->ucNumComponents == 1) + pPage->ucSubSample = 0; // use this to differentiate from color 1:1 + else + { + usLen -= 8; + iOffset += 8; +// pPage->ucSubSample = s[iOffset+9]; // subsampling option for the second color component + for (i=0; iucNumComponents; i++) + { + uint8_t ucSamp; + pPage->JPCI[i].component_id = s[iOffset++]; + pPage->JPCI[i].component_index = (unsigned char)i; + ucSamp = s[iOffset++]; // get the h+v sampling factor + if (i == 0) // Y component? + pPage->ucSubSample = ucSamp; +// pPage->JPCI[i].h_samp_factor = ucSamp >> 4; +// pPage->JPCI[i].v_samp_factor = ucSamp & 0xf; + pPage->JPCI[i].quant_tbl_no = s[iOffset++]; // quantization table number + usLen -= 3; + } + } + break; + case 0xffdd: // Restart Interval + if (usLen == 4) + pPage->iResInterval = MOTOSHORT(&s[iOffset+2]); + break; + case 0xffc4: /* M_DHT */ // get Huffman tables + iOffset += 2; // skip length + usLen -= 2; // subtract length length + if (JPEGGetHuffTables(&s[iOffset], usLen, pPage) != 0) // bad tables? + { + pPage->iError = JPEG_DECODE_ERROR; + return 0; // error + } + break; + case 0xffdb: /* M_DQT */ + /* Get the quantization tables */ + /* first byte has PPPPNNNN where P = precision and N = table number 0-3 */ + iOffset += 2; // skip length + usLen -= 2; // subtract length length + while (usLen > 0) + { + ucTable = s[iOffset++]; // table number + if ((ucTable & 0xf) > 3) // invalid table number + { + pPage->iError = JPEG_DECODE_ERROR; + return 0; + } + iTableOffset = (ucTable & 0xf) * DCTSIZE; + if (ucTable & 0xf0) // if word precision + { + for (i=0; isQuantTable[i+iTableOffset] = MOTOSHORT(&s[iOffset]); + iOffset += 2; + } + usLen -= (DCTSIZE*2 + 1); + } + else // byte precision + { + for (i=0; isQuantTable[i+iTableOffset] = (unsigned short)s[iOffset++]; + } + usLen -= (DCTSIZE + 1); + } + } + break; + } // switch on JPEG marker + iOffset += usLen; + } // while + if (usMarker == 0xffda) // start of image + { + if (pPage->ucBpp != 8) // need to match up table IDs + { + iOffset -= usLen; + JPEGGetSOS(pPage, &iOffset); // get Start-Of-Scan info for decoding + } + if (!JPEGMakeHuffTables(pPage, 0)) //int bThumbnail) DEBUG + { + pPage->iError = JPEG_UNSUPPORTED_FEATURE; + return 0; + } + // Now the offset points to the start of compressed data + i = JPEGFilter(&pPage->ucFileBuf[iOffset], pPage->ucFileBuf, iBytesRead-iOffset, &pPage->ucFF); + pPage->iVLCOff = 0; + pPage->iVLCSize = i; + JPEGGetMoreData(pPage); // read more VLC data + return 1; + } + pPage->iError = JPEG_DECODE_ERROR; + return 0; +} /* JPEGParseInfo() */ +// +// Fix and reorder the quantization table for faster decoding.* +// +static void JPEGFixQuantD(JPEGIMAGE *pJPEG) +{ + int iTable, iTableOffset; + signed short sTemp[DCTSIZE]; + int i; + uint16_t *p; + + for (iTable=0; iTableucNumComponents; iTable++) + { + iTableOffset = iTable * DCTSIZE; + p = (uint16_t *)&pJPEG->sQuantTable[iTableOffset]; + for (i=0; isQuantTable[iTableOffset], sTemp, DCTSIZE*sizeof(short)); // copy back to original spot + + // Prescale for DCT multiplication + p = (uint16_t *)&pJPEG->sQuantTable[iTableOffset]; + for (i=0; i> 12); + } + } +} /* JPEGFixQuantD() */ +// +// Decode the 64 coefficients of the current DCT block +// +static int JPEGDecodeMCU(JPEGIMAGE *pJPEG, int iMCU, int *iDCPredictor) +{ + uint32_t ulCode, ulTemp; + uint8_t *pZig; + signed char cCoeff; + unsigned short *pFast; + unsigned char ucHuff, *pucFast; + uint32_t usHuff; // this prevents an unnecessary & 65535 for shorts + uint32_t ulBitOff, ulBits; // local copies to allow compiler to use register vars + uint8_t *pBuf, *pEnd, *pEnd2; + signed short *pMCU = &pJPEG->sMCUs[iMCU]; + uint8_t ucMaxACCol, ucMaxACRow; + + #define MIN_DCT_THRESHOLD 8 + + ulBitOff = pJPEG->bb.ulBitOff; + ulBits = pJPEG->bb.ulBits; + pBuf = pJPEG->bb.pBuf; + + pZig = (unsigned char *)&cZigZag2[1]; + pEnd = (unsigned char *)&cZigZag2[64]; + + if (ulBitOff > (REGISTER_WIDTH-17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + if (pJPEG->iOptions & (JPEG_SCALE_QUARTER | JPEG_SCALE_EIGHTH)) // reduced size DCT + { + pMCU[1] = pMCU[8] = pMCU[9] = 0; + pEnd2 = (uint8_t *)&cZigZag2[5]; // we only need to store the 4 elements we care about + } + else + { + memset(pMCU, 0, 64*sizeof(short)); // pre-fill with zero since we may skip coefficients + pEnd2 = (uint8_t *)&cZigZag2[64]; + } + ucMaxACCol = ucMaxACRow = 0; + pZig = (unsigned char *)&cZigZag2[1]; + pEnd = (unsigned char *)&cZigZag2[64]; + + // get the DC component + pucFast = &pJPEG->ucHuffDC[pJPEG->ucDCTable * DC_TABLE_SIZE]; + ulCode = (ulBits >> (REGISTER_WIDTH - 12 - ulBitOff)) & 0xfff; // get as lower 12 bits + if (ulCode >= 0xf80) // it's a long code + ulCode = (ulCode & 0xff); // point to long table and trim to 7-bits + 0x80 offset into long table + else + ulCode >>= 6; // it's a short code, use first 6 bits only + ucHuff = pucFast[ulCode]; + cCoeff = (signed char)pucFast[ulCode+512]; // get pre-calculated extra bits for "small" values + if (ucHuff == 0) // invalid code + return -1; + ulBitOff += (ucHuff >> 4); // add the Huffman length + ucHuff &= 0xf; // get the actual code (SSSS) + if (ucHuff) // if there is a change to the DC value + { // get the 'extra' bits + if (cCoeff) + { + (*iDCPredictor) += cCoeff; + } + else + { + if (ulBitOff > (REGISTER_WIDTH - 17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + ulCode = ulBits << ulBitOff; + ulTemp = ~(uint32_t)(((int32_t)ulCode)>>31); // slide sign bit across other 31 bits + ulCode >>= (REGISTER_WIDTH - ucHuff); + ulCode -= ulTemp>>(REGISTER_WIDTH-ucHuff); + ulBitOff += ucHuff; // add bit length + (*iDCPredictor) += (int)ulCode; + } + } + pMCU[0] = (short)*iDCPredictor; // store in MCU[0] + // Now get the other 63 AC coefficients + pFast = &pJPEG->usHuffAC[pJPEG->ucACTable * HUFF11SIZE]; + if (pJPEG->b11Bit) // 11-bit "slow" tables used + { +// if (pJPEG->pHuffACFast == pJPEG->huffacFast[1]) // second table +// pFast = &pJPEG->ucAltHuff[0]; + while (pZig < pEnd) + { + if (ulBitOff >(REGISTER_WIDTH - 17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + ulCode = (ulBits >> (REGISTER_WIDTH - 16 - ulBitOff)) & 0xffff; // get as lower 16 bits + if (ulCode >= 0xf000) // first 4 bits = 1, use long table + ulCode = (ulCode & 0x1fff); + else + ulCode >>= 4; // use lower 12 bits (short table) + usHuff = pFast[ulCode]; + if (usHuff == 0) // invalid code + return -1; + ulBitOff += (usHuff >> 8); // add length + usHuff &= 0xff; // get code (RRRR/SSSS) + if (usHuff == 0) // no more AC components + { + goto mcu_done; + } + if (ulBitOff > (REGISTER_WIDTH - 17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + pZig += (usHuff >> 4); // get the skip amount (RRRR) + usHuff &= 0xf; // get (SSSS) - extra length + if (pZig < pEnd && usHuff) // && piHisto) + { + ulCode = ulBits << ulBitOff; + ulTemp = ~(uint32_t) (((int32_t) ulCode) >> (REGISTER_WIDTH-1)); // slide sign bit across other 63 bits + ulCode >>= (REGISTER_WIDTH - usHuff); + ulCode -= ulTemp >> (REGISTER_WIDTH - usHuff); + ucMaxACCol |= 1<<(*pZig & 7); // keep track of occupied columns + if (*pZig >= 0x20) // if more than 4 rows used in a col, mark it + ucMaxACRow |= 1<<(*pZig & 7); // keep track of the max AC term row + pMCU[*pZig] = (signed short)ulCode; // store AC coefficient (already reordered) + } + ulBitOff += usHuff; // add (SSSS) extra length + pZig++; + } // while + } + else // 10-bit "fast" tables used + { + while (pZig < pEnd) + { + if (ulBitOff >(REGISTER_WIDTH - 17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + ulCode = (ulBits >> (REGISTER_WIDTH - 16 - ulBitOff)) & 0xffff; // get as lower 16 bits + if (ulCode >= 0xfc00) // first 6 bits = 1, use long table + ulCode = (ulCode & 0x7ff); // (ulCode & 0x3ff) + 0x400; + else + ulCode >>= 6; // use lower 10 bits (short table) + usHuff = pFast[ulCode]; + if (usHuff == 0) // invalid code + return -1; + ulBitOff += (usHuff >> 8); // add length + usHuff &= 0xff; // get code (RRRR/SSSS) + if (usHuff == 0) // no more AC components + { + goto mcu_done; + } + if (ulBitOff >(REGISTER_WIDTH - 17)) // need to get more data + { + pBuf += (ulBitOff >> 3); + ulBitOff &= 7; + ulBits = MOTOLONG(pBuf); + } + pZig += (usHuff >> 4); // get the skip amount (RRRR) + usHuff &= 0xf; // get (SSSS) - extra length + if (pZig < pEnd2 && usHuff) + { + ulCode = ulBits << ulBitOff; + ulTemp = ~(uint32_t) (((int32_t) ulCode) >> (REGISTER_WIDTH-1)); // slide sign bit across other 63 bits + ulCode >>= (REGISTER_WIDTH - usHuff); + ulCode -= ulTemp >> (REGISTER_WIDTH - usHuff); + ucMaxACCol |= 1<<(*pZig & 7); // keep track of occupied columns + if (*pZig >= 0x20) // if more than 4 rows used in a col, mark it + ucMaxACRow |= 1<<(*pZig & 7); // keep track of the max AC term row + pMCU[*pZig] = (signed short)ulCode; // store AC coefficient (already reordered) + } + ulBitOff += usHuff; // add (SSSS) extra length + pZig++; + } // while + } // 10-bit tables +mcu_done: + pJPEG->bb.pBuf = pBuf; + pJPEG->iVLCOff = (int)(pBuf - pJPEG->ucFileBuf); + pJPEG->bb.ulBitOff = ulBitOff; + pJPEG->bb.ulBits = ulBits; + pJPEG->ucMaxACCol = ucMaxACCol; + pJPEG->ucMaxACRow = ucMaxACRow; // DEBUG + return 0; +} /* JPEGDecodeMCU() */ +// +// Inverse DCT +// +static void JPEGIDCT(JPEGIMAGE *pJPEG, int iMCUOffset, int iQuantTable, int iACFlags) +{ + int iRow; + unsigned char ucColMask; + int iCol; + signed int tmp6,tmp7,tmp10,tmp11,tmp12,tmp13; + signed int z5,z10,z11,z12,z13; + signed int tmp0,tmp1,tmp2,tmp3,tmp4,tmp5; + signed short *pQuant; + unsigned char *pOutput; + unsigned char ucMaxACRow, ucMaxACCol; + int16_t *pMCUSrc = &pJPEG->sMCUs[iMCUOffset]; + + ucMaxACRow = (unsigned char)(iACFlags >> 8); + ucMaxACCol = iACFlags & 0xff; + + // my shortcut method appears to violate patent 20020080052 + // but the patent is invalidated by prior art: + // http://netilium.org/~mad/dtj/DTJ/DTJK04/ + pQuant = &pJPEG->sQuantTable[iQuantTable * DCTSIZE]; + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) // special case + { + /* Column 0 */ + tmp4 = pMCUSrc[0] * pQuant[0]; + tmp5 = pMCUSrc[8] * pQuant[8]; + tmp0 = tmp4 + tmp5; + tmp2 = tmp4 - tmp5; + /* Column 1 */ + tmp4 = pMCUSrc[1] * pQuant[1]; + tmp5 = pMCUSrc[9] * pQuant[9]; + tmp1 = tmp4 + tmp5; + tmp3 = tmp4 - tmp5; + /* Pass 2: process 2 rows, store into output array. */ + /* Row 0 */ + pOutput = (unsigned char *)pMCUSrc; // store output pixels back into MCU + pOutput[0] = ucRangeTable[(((tmp0 + tmp1)>>5) & 0x3ff)]; + pOutput[1] = ucRangeTable[(((tmp0 - tmp1)>>5) & 0x3ff)]; + /* Row 1 */ + pOutput[2] = ucRangeTable[(((tmp2 + tmp3)>>5) & 0x3ff)]; + pOutput[3] = ucRangeTable[(((tmp2 - tmp3)>>5) & 0x3ff)]; + return; + } + // do columns first + ucColMask = ucMaxACCol | 1; // column 0 must always be calculated + for (iCol = 0; iCol < 8 && ucColMask; iCol++) + { + if (ucColMask & (1<>8); // used to be 362 - 1 (256) + tmp0 = tmp10 + tmp1; + tmp3 = tmp10 - tmp1; + tmp1 = tmp10 + tmp12; + tmp2 = tmp10 - tmp12; + // odd part + tmp4 = pMCUSrc[iCol+8] * pQuant[iCol+8]; // get 1st row + tmp5 = pMCUSrc[iCol+24]; + if (tmp5) // this value is usually 0 + { + tmp5 *= pQuant[iCol+24]; // get 3rd row + tmp7 = tmp4 + tmp5; + tmp11 = (((tmp4 - tmp5) * 362) >> 8); // 362>>8 = 1.414213562 + z5 = (((tmp4-tmp5) * 473) >> 8); // 473>>8 = 1.8477 + tmp12 = ((-tmp5 * -669)>>8) + z5; // -669>>8 = -2.6131259 + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp10 = ((tmp4 * 277)>>8) - z5; // 277>>8 = 1.08239 + tmp4 = tmp10 + tmp5; + } + else // simpler case when we only have 1 odd row to calculate + { + tmp7 = tmp4; + tmp5 = (145*tmp4) >> 8; + tmp6 = (217*tmp4) >> 8; + tmp4 = (-51*tmp4) >> 8; + } + pMCUSrc[iCol] = (short)(tmp0 + tmp7); // row0 + pMCUSrc[iCol+8] = (short)(tmp1 + tmp6); // row 1 + pMCUSrc[iCol+16] = (short)(tmp2 + tmp5); // row 2 + pMCUSrc[iCol+24] = (short)(tmp3 - tmp4); // row 3 + pMCUSrc[iCol+32] = (short)(tmp3 + tmp4); // row 4 + pMCUSrc[iCol+40] = (short)(tmp2 - tmp5); // row 5 + pMCUSrc[iCol+48] = (short)(tmp1 - tmp6); // row 6 + pMCUSrc[iCol+56] = (short)(tmp0 - tmp7); // row 7 + } + else // need to do full column calculation + { + // even part + tmp0 = pMCUSrc[iCol] * pQuant[iCol]; + tmp2 = pMCUSrc[iCol+32]; // get 4th row + if (tmp2) // 4th row is most likely 0 + { + tmp2 = tmp2 * pQuant[iCol+32]; + tmp10 = tmp0 + tmp2; + tmp11 = tmp0 - tmp2; + } + else + { + tmp10 = tmp11 = tmp0; + } + tmp1 = pMCUSrc[iCol+16] * pQuant[iCol+16]; // get 2nd row + tmp3 = pMCUSrc[iCol+48]; // get 6th row + if (tmp3) // 6th row is most likely 0 + { + tmp3 = tmp3 * pQuant[iCol+48]; + tmp13 = tmp1 + tmp3; + tmp12 = (((tmp1 - tmp3) * 362) >> 8) - tmp13; // 362>>8 = 1.414213562 + } + else + { + tmp13 = tmp1; + tmp12 = ((tmp1*362)>>8) - tmp1; + } + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + // odd part + tmp5 = pMCUSrc[iCol+24] * pQuant[iCol+24]; // get 3rd row + tmp6 = pMCUSrc[iCol+40]; // get 5th row + if (tmp6) // very likely that row 5 = 0 + { + tmp6 = tmp6 * pQuant[iCol+40]; + z13 = tmp6 + tmp5; + z10 = tmp6 - tmp5; + } + else + { + z13 = tmp5; + z10 = -tmp5; + } + tmp4 = pMCUSrc[iCol+8] * pQuant[iCol+8]; // get 1st row + tmp7 = pMCUSrc[iCol+56]; // get 7th row + if (tmp7) // very likely that row 7 = 0 + { + tmp7 = tmp7 * pQuant[iCol+56]; + z11 = tmp4 + tmp7; + z12 = tmp4 - tmp7; + } + else + { + z11 = z12 = tmp4; + } + tmp7 = z11 + z13; + tmp11 = (((z11 - z13) * 362) >> 8); // 362>>8 = 1.414213562 + z5 = (((z10 + z12) * 473) >> 8); // 473>>8 = 1.8477 + tmp12 = ((z10 * -669)>>8) + z5; // -669>>8 = -2.6131259 + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp10 = ((z12 * 277)>>8) - z5; // 277>>8 = 1.08239 + tmp4 = tmp10 + tmp5; + pMCUSrc[iCol] = (short)(tmp0 + tmp7); // row0 + pMCUSrc[iCol+8] = (short)(tmp1 + tmp6); // row 1 + pMCUSrc[iCol+16] = (short)(tmp2 + tmp5); // row 2 + pMCUSrc[iCol+24] = (short)(tmp3 - tmp4); // row 3 + pMCUSrc[iCol+32] = (short)(tmp3 + tmp4); // row 4 + pMCUSrc[iCol+40] = (short)(tmp2 - tmp5); // row 5 + pMCUSrc[iCol+48] = (short)(tmp1 - tmp6); // row 6 + pMCUSrc[iCol+56] = (short)(tmp0 - tmp7); // row 7 + } // full calculation needed + } // if column has data in it + } // for each column + // now do rows + pOutput = (unsigned char *)pMCUSrc; // store output pixels back into MCU + for (iRow=0; iRow<64; iRow+=8) // all rows must be calculated + { + // even part + if (ucMaxACCol < 0x10) // quick and dirty calculation (right 4 columns are all 0's) + { + if (ucMaxACCol < 0x04) // very likely case (1 or 2 columns occupied) + { + // even part + tmp0 = tmp1 = tmp2 = tmp3 = pMCUSrc[iRow+0]; + // odd part + tmp7 = pMCUSrc[iRow+1]; + tmp6 = (tmp7 * 217)>>8; // * 0.8477 + tmp5 = (tmp7 * 145)>>8; // * 0.5663 + tmp4 = -((tmp7 * 51)>>8); // * -0.199 + } + else + { + tmp10 = pMCUSrc[iRow+0]; + tmp13 = pMCUSrc[iRow+2]; + tmp12 = ((tmp13 * 106)>>8); // 2-6 * 1.414 + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp10 + tmp12; + tmp2 = tmp10 - tmp12; + // odd part + z13 = pMCUSrc[iRow+3]; + z11 = pMCUSrc[iRow+1]; + tmp7 = z11 + z13; + tmp11 = ((z11 - z13)*362)>>8; // * 1.414 + z5 = ((z11 - z13)*473)>>8; // * 1.8477 + tmp10 = ((z11*277)>>8) - z5; // * 1.08239 + tmp12 = ((z13*669)>>8) + z5; // * 2.61312 + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + } + } + else // need to do the full calculation + { + tmp10 = pMCUSrc[iRow+0] + pMCUSrc[iRow+4]; + tmp11 = pMCUSrc[iRow+0] - pMCUSrc[iRow+4]; + tmp13 = pMCUSrc[iRow+2] + pMCUSrc[iRow+6]; + tmp12 = (((pMCUSrc[iRow+2] - pMCUSrc[iRow+6]) * 362)>>8) - tmp13; // 2-6 * 1.414 + tmp0 = tmp10 + tmp13; + tmp3 = tmp10 - tmp13; + tmp1 = tmp11 + tmp12; + tmp2 = tmp11 - tmp12; + // odd part + z13 = pMCUSrc[iRow+5] + pMCUSrc[iRow+3]; + z10 = pMCUSrc[iRow+5] - pMCUSrc[iRow+3]; + z11 = pMCUSrc[iRow+1] + pMCUSrc[iRow+7]; + z12 = pMCUSrc[iRow+1] - pMCUSrc[iRow+7]; + tmp7 = z11 + z13; + tmp11 = ((z11 - z13)*362)>>8; // * 1.414 + z5 = ((z10 + z12)*473)>>8; // * 1.8477 + tmp10 = ((z12*277)>>8) - z5; // * 1.08239 + tmp12 = ((z10*-669)>>8) + z5; // * 2.61312 + tmp6 = tmp12 - tmp7; + tmp5 = tmp11 - tmp6; + tmp4 = tmp10 + tmp5; + } + // final output stage - scale down and range limit + pOutput[0] = ucRangeTable[(((tmp0 + tmp7)>>5) & 0x3ff)]; + pOutput[1] = ucRangeTable[(((tmp1 + tmp6)>>5) & 0x3ff)]; + pOutput[2] = ucRangeTable[(((tmp2 + tmp5)>>5) & 0x3ff)]; + pOutput[3] = ucRangeTable[(((tmp3 - tmp4)>>5) & 0x3ff)]; + pOutput[4] = ucRangeTable[(((tmp3 + tmp4)>>5) & 0x3ff)]; + pOutput[5] = ucRangeTable[(((tmp2 - tmp5)>>5) & 0x3ff)]; + pOutput[6] = ucRangeTable[(((tmp1 - tmp6)>>5) & 0x3ff)]; + pOutput[7] = ucRangeTable[(((tmp0 - tmp7)>>5) & 0x3ff)]; + pOutput += 8; + } // for each row +} /* JPEGIDCT() */ +static void JPEGPutMCU8BitGray(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + int i, j, xcount, ycount; + uint8_t *pDest, *pSrc = (uint8_t *)&pJPEG->sMCUs[0]; + + if (pJPEG->pDitherBuffer) + pDest = &pJPEG->pDitherBuffer[x]; + else + pDest = (uint8_t *)&pJPEG->usPixels[x/2]; + + if (pJPEG->ucSubSample <= 0x11) // single Y + { + if (pJPEG->iOptions & JPEG_SCALE_HALF) // special handling of 1/2 size (pixel averaging) + { + int pix; + for (i=0; i<4; i++) + { + for (j=0; j<4; j++) + { + pix = (pSrc[0] + pSrc[1] + pSrc[8] + pSrc[9] + 2) >> 2; // average 2x2 block + pDest[j] = (uint8_t)pix; + pSrc += 2; + } + pSrc += 8; // skip extra line + pDest += iPitch; + } + return; + } + xcount = ycount = 8; // debug + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + xcount = ycount = 2; + else if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + xcount = ycount = 1; + for (i=0; iucSubSample == 0x21) // stacked horizontally + { + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + // only 2 pixels emitted + pDest[0] = pSrc[0]; + pDest[1] = pSrc[128]; + return; + } /* 1/8 */ + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (i=0; i<4; i++) + { + for (j=0; j<4; j++) + { + int pix; + pix = (pSrc[j*2] + pSrc[j*2+1] + pSrc[j*2 + 8] + pSrc[j*2 + 9] + 2) >> 2; + pDest[j] = (uint8_t)pix; + pix = (pSrc[j*2 + 128] + pSrc[j*2+129] + pSrc[j*2 + 136] + pSrc[j*2 + 137] + 2) >> 2; + pDest[j+4] = (uint8_t)pix; + } + pSrc += 16; + pDest += iPitch; + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { + // each MCU contributes a 2x2 block + pDest[0] = pSrc[0]; // Y0 + pDest[1] = pSrc[1]; + pDest[iPitch] = pSrc[2]; + pDest[iPitch+1] = pSrc[3]; + + pDest[2] = pSrc[128]; // Y` + pDest[3] = pSrc[129]; + pDest[iPitch+2] = pSrc[130]; + pDest[iPitch+3] = pSrc[131]; + return; + } + for (i=0; i<8; i++) + { + for (j=0; j<8; j++) + { + pDest[j] = pSrc[j]; + pDest[j+8] = pSrc[128 + j]; + } + pSrc += 8; + pDest += iPitch; + } + } // 0x21 + if (pJPEG->ucSubSample == 0x12) // stacked vertically + { + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + // only 2 pixels emitted + pDest[0] = pSrc[0]; + pDest[iPitch] = pSrc[128]; + return; + } /* 1/8 */ + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (i=0; i<4; i++) + { + for (j=0; j<4; j++) + { + int pix; + pix = (pSrc[j*2] + pSrc[j*2+1] + pSrc[j*2 + 8] + pSrc[j*2 + 9] + 2) >> 2; + pDest[j] = (uint8_t)pix; + pix = (pSrc[j*2 + 128] + pSrc[j*2+129] + pSrc[j*2 + 136] + pSrc[j*2 + 137] + 2) >> 2; + pDest[4*iPitch+j] = (uint8_t)pix; + } + pSrc += 16; + pDest += iPitch; + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { + // each MCU contributes a 2x2 block + pDest[0] = pSrc[0]; // Y0 + pDest[1] = pSrc[1]; + pDest[iPitch] = pSrc[2]; + pDest[iPitch+1] = pSrc[3]; + + pDest[iPitch*2] = pSrc[128]; // Y` + pDest[iPitch*2+1] = pSrc[129]; + pDest[iPitch*3] = pSrc[130]; + pDest[iPitch*3+1] = pSrc[131]; + return; + } + for (i=0; i<8; i++) + { + for (j=0; j<8; j++) + { + pDest[j] = pSrc[j]; + pDest[8*iPitch + j] = pSrc[128 + j]; + } + pSrc += 8; + pDest += iPitch; + } + } // 0x12 + if (pJPEG->ucSubSample == 0x22) + { + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + // each MCU contributes 1 pixel + pDest[0] = pSrc[0]; // Y0 + pDest[1] = pSrc[128]; // Y1 + pDest[iPitch] = pSrc[256]; // Y2 + pDest[iPitch + 1] = pSrc[384]; // Y3 + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { + // each MCU contributes 2x2 pixels + pDest[0] = pSrc[0]; // Y0 + pDest[1] = pSrc[1]; + pDest[iPitch] = pSrc[2]; + pDest[iPitch+1] = pSrc[3]; + + pDest[2] = pSrc[128]; // Y1 + pDest[3] = pSrc[129]; + pDest[iPitch+2] = pSrc[130]; + pDest[iPitch+3] = pSrc[131]; + + pDest[iPitch*2] = pSrc[256]; // Y2 + pDest[iPitch*2+1] = pSrc[257]; + pDest[iPitch*3] = pSrc[258]; + pDest[iPitch*3+1] = pSrc[259]; + + pDest[iPitch*2+2] = pSrc[384]; // Y3 + pDest[iPitch*2+3] = pSrc[385]; + pDest[iPitch*3+2] = pSrc[386]; + pDest[iPitch*3+3] = pSrc[387]; + return; + } + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (i=0; i<4; i++) + { + for (j=0; j<4; j++) + { + int pix; + pix = (pSrc[j*2] + pSrc[j*2+1] + pSrc[j*2 + 8] + pSrc[j*2 + 9] + 2) >> 2; + pDest[j] = (uint8_t)pix; // Y0 + pix = (pSrc[j*2+128] + pSrc[j*2+129] + pSrc[j*2 + 136] + pSrc[j*2 + 137] + 2) >> 2; + pDest[j+4] = (uint8_t)pix; // Y1 + pix = (pSrc[j*2+256] + pSrc[j*2+257] + pSrc[j*2 + 264] + pSrc[j*2 + 265] + 2) >> 2; + pDest[iPitch*4 + j] = (uint8_t)pix; // Y2 + pix = (pSrc[j*2+384] + pSrc[j*2+385] + pSrc[j*2 + 392] + pSrc[j*2 + 393] + 2) >> 2; + pDest[iPitch*4 + j + 4] = (uint8_t)pix; // Y3 + } + pSrc += 16; + pDest += iPitch; + } + return; + } + for (i=0; i<8; i++) + { + for (j=0; j<8; j++) + { + pDest[j] = pSrc[j]; // Y0 + pDest[j+8] = pSrc[j+128]; // Y1 + pDest[iPitch*8 + j] = pSrc[j+256]; // Y2 + pDest[iPitch*8 + j + 8] = pSrc[j + 384]; // Y3 + } + pSrc += 8; + pDest += iPitch; + } + } // 0x22 +} /* JPEGMPutMCU8BitGray() */ + +static void JPEGPutMCUGray(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + uint16_t *usDest = (uint16_t *)&pJPEG->usPixels[x]; + int i, j, xcount, ycount; + uint8_t *pSrc = (uint8_t *)&pJPEG->sMCUs[0]; + + if (pJPEG->iOptions & JPEG_SCALE_HALF) // special handling of 1/2 size (pixel averaging) + { + int pix; + for (i=0; i<4; i++) + { + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + for (j=0; j<4; j++) + { + pix = (pSrc[0] + pSrc[1] + pSrc[8] + pSrc[9] + 2) >> 2; // average 2x2 block + usDest[i] = usGrayTo565[pix]; + pSrc += 2; + } + } + else + { + for (j=0; j<4; j++) + { + pix = (pSrc[0] + pSrc[1] + pSrc[8] + pSrc[9] + 2) >> 2; // average 2x2 block + usDest[i] = __builtin_bswap16(usGrayTo565[pix]); + pSrc += 2; + } + } + pSrc += 8; // skip extra line + usDest += iPitch; + } + return; + } + xcount = ycount = 8; // debug + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + xcount = ycount = 2; + else if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + xcount = ycount = 1; + for (i=0; iucPixelType == RGB565_LITTLE_ENDIAN) + { + for (j=0; j> 12) & 0x3ff]; // blue pixel + usPixel |= usRangeTableG[((iCBG + iCRG + iY) >> 12) & 0x3ff]; // green pixel + usPixel |= usRangeTableR[((iCRR + iY) >> 12) & 0x3ff]; // red pixel + pDest[0] = usPixel; +} /* JPEGPixelLE() */ + +static void JPEGPixelBE(uint16_t *pDest, int iY, int iCb, int iCr) +{ + int iCBB, iCBG, iCRG, iCRR; + unsigned short usPixel; + + iCBB = 7258 * (iCb-0x80); + iCBG = -1409 * (iCb-0x80); + iCRG = -2925 * (iCr-0x80); + iCRR = 5742 * (iCr-0x80); + usPixel = usRangeTableB[((iCBB + iY) >> 12) & 0x3ff]; // blue pixel + usPixel |= usRangeTableG[((iCBG + iCRG + iY) >> 12) & 0x3ff]; // green pixel + usPixel |= usRangeTableR[((iCRR + iY) >> 12) & 0x3ff]; // red pixel + pDest[0] = __builtin_bswap16(usPixel); +} /* JPEGPixelBE() */ + +static void JPEGPixel2LE(uint16_t *pDest, int iY1, int iY2, int iCb, int iCr) +{ + int iCBB, iCBG, iCRG, iCRR; + uint32_t ulPixel1, ulPixel2; + + iCBB = 7258 * (iCb-0x80); + iCBG = -1409 * (iCb-0x80); + iCRG = -2925 * (iCr-0x80); + iCRR = 5742 * (iCr-0x80); + ulPixel1 = usRangeTableB[((iCBB + iY1) >> 12) & 0x3ff]; // blue pixel + ulPixel1 |= usRangeTableG[((iCBG + iCRG + iY1) >> 12) & 0x3ff]; // green pixel + ulPixel1 |= usRangeTableR[((iCRR + iY1) >> 12) & 0x3ff]; // red pixel + + ulPixel2 = usRangeTableB[((iCBB + iY2) >> 12) & 0x3ff]; // blue pixel + ulPixel2 |= usRangeTableG[((iCBG + iCRG + iY2) >> 12) & 0x3ff]; // green pixel + ulPixel2 |= usRangeTableR[((iCRR + iY2) >> 12) & 0x3ff]; // red pixel + *(uint32_t *)&pDest[0] = (ulPixel1 | (ulPixel2<<16)); +} /* JPEGPixel2LE() */ + +static void JPEGPixel2BE(uint16_t *pDest, int iY1, int iY2, int iCb, int iCr) +{ + int iCBB, iCBG, iCRG, iCRR; + uint32_t ulPixel1, ulPixel2; + + iCBB = 7258 * (iCb-0x80); + iCBG = -1409 * (iCb-0x80); + iCRG = -2925 * (iCr-0x80); + iCRR = 5742 * (iCr-0x80); + ulPixel1 = usRangeTableB[((iCBB + iY1) >> 12) & 0x3ff]; // blue pixel + ulPixel1 |= usRangeTableG[((iCBG + iCRG + iY1) >> 12) & 0x3ff]; // green pixel + ulPixel1 |= usRangeTableR[((iCRR + iY1) >> 12) & 0x3ff]; // red pixel + + ulPixel2 = usRangeTableB[((iCBB + iY2) >> 12) & 0x3ff]; // blue pixel + ulPixel2 |= usRangeTableG[((iCBG + iCRG + iY2) >> 12) & 0x3ff]; // green pixel + ulPixel2 |= usRangeTableR[((iCRR + iY2) >> 12) & 0x3ff]; // red pixel + *(uint32_t *)&pDest[0] = __builtin_bswap16(ulPixel1) | (__builtin_bswap16(ulPixel2)<<16); +} /* JPEGPixel2BE() */ + +static void JPEGPutMCU11(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + int iCr, iCb; + signed int Y; + int iCol; + int iRow; + uint8_t *pY, *pCr, *pCb; + uint16_t *pOutput = &pJPEG->usPixels[x]; + + pY = (unsigned char *)&pJPEG->sMCUs[0*DCTSIZE]; + pCb = (unsigned char *)&pJPEG->sMCUs[1*DCTSIZE]; + pCr = (unsigned char *)&pJPEG->sMCUs[2*DCTSIZE]; + + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (iRow=0; iRow<4; iRow++) // up to 8 rows to do + { + for (iCol=0; iCol<4; iCol++) // up to 4x2 cols to do + { + iCr = (pCr[0] + pCr[1] + pCr[8] + pCr[9] + 2) >> 2; + iCb = (pCb[0] + pCb[1] + pCb[8] + pCb[9] + 2) >> 2; + Y = (pY[0] + pY[1] + pY[8] + pY[9]) << 10; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol, Y, iCb, iCr); + else + JPEGPixelBE(pOutput+iCol, Y, iCb, iCr); + pCr += 2; + pCb += 2; + pY += 2; + } // for col + pCr += 8; + pCb += 8; + pY += 8; + pOutput += iPitch; + } // for row + return; + } + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) // special case for 1/8 scaling + { + // only 4 pixels to draw, so no looping needed + iCr = pCr[0]; + iCb = pCb[0]; + Y = (int)(pY[0]) << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput, Y, iCb, iCr); + else + JPEGPixelBE(pOutput, Y, iCb, iCr); + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) // special case for 1/4 scaling + { + // only 4 pixels to draw, so no looping needed + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelLE(pOutput, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelLE(pOutput+1, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelLE(pOutput+iPitch, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelLE(pOutput+1+iPitch, Y, iCb, iCr); + } + else + { + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelBE(pOutput, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelBE(pOutput+1, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelBE(pOutput+iPitch, Y, iCb, iCr); + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelBE(pOutput+1+iPitch, Y, iCb, iCr); + } + return; + } + for (iRow=0; iRow<8; iRow++) // up to 8 rows to do + { + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + for (iCol=0; iCol<8; iCol++) // up to 4x2 cols to do + { + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelLE(pOutput+iCol, Y, iCb, iCr); + } // for col + } + else + { + for (iCol=0; iCol<8; iCol++) // up to 4x2 cols to do + { + iCr = *pCr++; + iCb = *pCb++; + Y = (int)(*pY++) << 12; + JPEGPixelBE(pOutput+iCol, Y, iCb, iCr); + } // for col + } + pOutput += iPitch; + } // for row +} /* JPEGPutMCU11() */ + +static void JPEGPutMCU22(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + uint32_t Cr,Cb; + signed int Y1, Y2, Y3, Y4; + int iRow, iCol, iXCount1, iXCount2, iYCount; + unsigned char *pY, *pCr, *pCb; + int bUseOdd1, bUseOdd2; // special case where 24bpp odd sized image can clobber first column + uint16_t *pOutput = &pJPEG->usPixels[x]; + + pY = (unsigned char *)&pJPEG->sMCUs[0*DCTSIZE]; + pCb = (unsigned char *)&pJPEG->sMCUs[4*DCTSIZE]; + pCr = (unsigned char *)&pJPEG->sMCUs[5*DCTSIZE]; + + if (pJPEG->iOptions & JPEG_SCALE_HALF) // special handling of 1/2 size (pixel averaging) + { + for (iRow=0; iRow<4; iRow++) // 16x16 becomes 8x8 of 2x2 pixels + { + for (iCol=0; iCol<4; iCol++) + { + Y1 = (pY[iCol*2] + pY[iCol*2+1] + pY[iCol*2+8] + pY[iCol*2+9]) << 10; + Cb = pCb[iCol]; + Cr = pCr[iCol]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol, Y1, Cb, Cr); // top left + else + JPEGPixelBE(pOutput+iCol, Y1, Cb, Cr); + Y1 = (pY[iCol*2+(DCTSIZE*2)] + pY[iCol*2+1+(DCTSIZE*2)] + pY[iCol*2+8+(DCTSIZE*2)] + pY[iCol*2+9+(DCTSIZE*2)]) << 10; + Cb = pCb[iCol+4]; + Cr = pCr[iCol+4]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol+4, Y1, Cb, Cr); // top right + else + JPEGPixelBE(pOutput+iCol+4, Y1, Cb, Cr); + Y1 = (pY[iCol*2+(DCTSIZE*4)] + pY[iCol*2+1+(DCTSIZE*4)] + pY[iCol*2+8+(DCTSIZE*4)] + pY[iCol*2+9+(DCTSIZE*4)]) << 10; + Cb = pCb[iCol+32]; + Cr = pCr[iCol+32]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol+iPitch*4, Y1, Cb, Cr); // bottom left + else + JPEGPixelBE(pOutput+iCol+iPitch*4, Y1, Cb, Cr); + Y1 = (pY[iCol*2+(DCTSIZE*6)] + pY[iCol*2+1+(DCTSIZE*6)] + pY[iCol*2+8+(DCTSIZE*6)] + pY[iCol*2+9+(DCTSIZE*6)]) << 10; + Cb = pCb[iCol+32+4]; + Cr = pCr[iCol+32+4]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol+4+iPitch*4, Y1, Cb, Cr); // bottom right + else + JPEGPixelBE(pOutput+iCol+4+iPitch*4, Y1, Cb, Cr); + } + pY += 8; + pCb += 8; + pCr += 8; + pOutput += iPitch; + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + Y1 = pY[0] << 12; // scale to level of conversion table + Cb = pCb[0]; + Cr = pCr[0]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput, Y1, Cb, Cr); + // top right block + Y1 = pY[DCTSIZE*2] << 12; // scale to level of conversion table + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput + 1, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput + 1, Y1, Cb, Cr); + // bottom left block + Y1 = pY[DCTSIZE*4] << 12; // scale to level of conversion table + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iPitch, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput+iPitch, Y1, Cb, Cr); + // bottom right block + Y1 = pY[DCTSIZE*6] << 12; // scale to level of conversion table + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+ 1 + iPitch, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput+ 1 + iPitch, Y1, Cb, Cr); + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) // special case of 1/4 + { + for (iRow=0; iRow<2; iRow++) + { + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + for (iCol=0; iCol<2; iCol++) + { + // top left block + Y1 = pY[iCol] << 12; // scale to level of conversion table + Cb = pCb[0]; + Cr = pCr[0]; + JPEGPixelLE(pOutput + iCol, Y1, Cb, Cr); + // top right block + Y1 = pY[iCol+(DCTSIZE*2)] << 12; // scale to level of conversion table + Cb = pCb[1]; + Cr = pCr[1]; + JPEGPixelLE(pOutput + 2+iCol, Y1, Cb, Cr); + // bottom left block + Y1 = pY[iCol+DCTSIZE*4] << 12; // scale to level of conversion table + Cb = pCb[2]; + Cr = pCr[2]; + JPEGPixelLE(pOutput+iPitch*2 + iCol, Y1, Cb, Cr); + // bottom right block + Y1 = pY[iCol+DCTSIZE*6] << 12; // scale to level of conversion table + Cb = pCb[3]; + Cr = pCr[3]; + JPEGPixelLE(pOutput+iPitch*2 + 2+iCol, Y1, Cb, Cr); + } // for each column + } + else + { + for (iCol=0; iCol<2; iCol++) + { + // top left block + Y1 = pY[iCol] << 12; // scale to level of conversion table + Cb = pCb[0]; + Cr = pCr[0]; + JPEGPixelBE(pOutput + iCol, Y1, Cb, Cr); + // top right block + Y1 = pY[iCol+(DCTSIZE*2)] << 12; // scale to level of conversion table + Cb = pCb[1]; + Cr = pCr[1]; + JPEGPixelBE(pOutput + 2+iCol, Y1, Cb, Cr); + // bottom left block + Y1 = pY[iCol+DCTSIZE*4] << 12; // scale to level of conversion table + Cb = pCb[2]; + Cr = pCr[2]; + JPEGPixelBE(pOutput+iPitch*2 + iCol, Y1, Cb, Cr); + // bottom right block + Y1 = pY[iCol+DCTSIZE*6] << 12; // scale to level of conversion table + Cb = pCb[3]; + Cr = pCr[3]; + JPEGPixelBE(pOutput+iPitch*2 + 2+iCol, Y1, Cb, Cr); + } // for each column + } + pY += 2; // skip 1 line of source pixels + pOutput += iPitch; + } + return; + } + /* Convert YCC pixels into RGB pixels and store in output image */ + iYCount = 4; + bUseOdd1 = bUseOdd2 = 1; // assume odd column can be used + if ((x+15) >= pJPEG->iWidth) + { + iCol = (((pJPEG->iWidth & 15)+1) >> 1); + if (iCol >= 4) + { + iXCount1 = 4; + iXCount2 = iCol-4; + if (pJPEG->iWidth & 1 && (iXCount2 * 2) + 8 + (x * 16) > pJPEG->iWidth) + bUseOdd2 = 0; + } + else + { + iXCount1 = iCol; + iXCount2 = 0; + if (pJPEG->iWidth & 1 && (iXCount1 * 2) + (x * 16) > pJPEG->iWidth) + bUseOdd1 = 0; + } + } + else + iXCount1 = iXCount2 = 4; + for (iRow=0; iRowucPixelType == RGB565_LITTLE_ENDIAN) + { + if (bUseOdd1 || iCol != (iXCount1-1)) // only render if it won't go off the right edge + { + JPEGPixel2LE(pOutput + (iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2LE(pOutput+iPitch + (iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelLE(pOutput + (iCol<<1), Y1, Cb, Cr); + JPEGPixelLE(pOutput+iPitch + (iCol<<1), Y3, Cb, Cr); + } + } + else + { + if (bUseOdd1 || iCol != (iXCount1-1)) // only render if it won't go off the right edge + { + JPEGPixel2BE(pOutput + (iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2BE(pOutput+iPitch + (iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput + (iCol<<1), Y1, Cb, Cr); + JPEGPixelBE(pOutput+iPitch + (iCol<<1), Y3, Cb, Cr); + } + } + // for top right block + if (iCol < iXCount2) + { + Y1 = pY[iCol*2+DCTSIZE*2]; + Y2 = pY[iCol*2+1+DCTSIZE*2]; + Y3 = pY[iCol*2+8+DCTSIZE*2]; + Y4 = pY[iCol*2+9+DCTSIZE*2]; + Y1 <<= 12; // scale to level of conversion table + Y2 <<= 12; + Y3 <<= 12; + Y4 <<= 12; + Cb = pCb[iCol+4]; + Cr = pCr[iCol+4]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + if (bUseOdd2 || iCol != (iXCount2-1)) // only render if it won't go off the right edge + { + JPEGPixel2LE(pOutput + 8+(iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2LE(pOutput+iPitch + 8+(iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelLE(pOutput+ 8+(iCol<<1), Y1, Cb, Cr); + JPEGPixelLE(pOutput+iPitch+ 8+(iCol<<1), Y3, Cb, Cr); + } + } + else + { + if (bUseOdd2 || iCol != (iXCount2-1)) // only render if it won't go off the right edge + { + JPEGPixel2BE(pOutput + 8+(iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2BE(pOutput+iPitch + 8+(iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput+ 8+(iCol<<1), Y1, Cb, Cr); + JPEGPixelBE(pOutput+iPitch+ 8+(iCol<<1), Y3, Cb, Cr); + } + } + } + // for bottom left block + Y1 = pY[iCol*2+DCTSIZE*4]; + Y2 = pY[iCol*2+1+DCTSIZE*4]; + Y3 = pY[iCol*2+8+DCTSIZE*4]; + Y4 = pY[iCol*2+9+DCTSIZE*4]; + Y1 <<= 12; // scale to level of conversion table + Y2 <<= 12; + Y3 <<= 12; + Y4 <<= 12; + Cb = pCb[iCol+32]; + Cr = pCr[iCol+32]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + if (bUseOdd1 || iCol != (iXCount1-1)) // only render if it won't go off the right edge + { + JPEGPixel2LE(pOutput+iPitch*8+ (iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2LE(pOutput+iPitch*9+ (iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelLE(pOutput+iPitch*8+ (iCol<<1), Y1, Cb, Cr); + JPEGPixelLE(pOutput+iPitch*9+ (iCol<<1), Y3, Cb, Cr); + } + } + else + { + if (bUseOdd1 || iCol != (iXCount1-1)) // only render if it won't go off the right edge + { + JPEGPixel2BE(pOutput+iPitch*8+ (iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2BE(pOutput+iPitch*9+ (iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput+iPitch*8+ (iCol<<1), Y1, Cb, Cr); + JPEGPixelBE(pOutput+iPitch*9+ (iCol<<1), Y3, Cb, Cr); + } + } + // for bottom right block + if (iCol < iXCount2) + { + Y1 = pY[iCol*2+DCTSIZE*6]; + Y2 = pY[iCol*2+1+DCTSIZE*6]; + Y3 = pY[iCol*2+8+DCTSIZE*6]; + Y4 = pY[iCol*2+9+DCTSIZE*6]; + Y1 <<= 12; // scale to level of conversion table + Y2 <<= 12; + Y3 <<= 12; + Y4 <<= 12; + Cb = pCb[iCol+36]; + Cr = pCr[iCol+36]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + if (bUseOdd2 || iCol != (iXCount2-1)) // only render if it won't go off the right edge + { + JPEGPixel2LE(pOutput+iPitch*8+ 8+(iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2LE(pOutput+iPitch*9+ 8+(iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelLE(pOutput+iPitch*8+ 8+(iCol<<1), Y1, Cb, Cr); + JPEGPixelLE(pOutput+iPitch*9+ 8+(iCol<<1), Y3, Cb, Cr); + } + } + else + { + if (bUseOdd2 || iCol != (iXCount2-1)) // only render if it won't go off the right edge + { + JPEGPixel2BE(pOutput+iPitch*8+ 8+(iCol<<1), Y1, Y2, Cb, Cr); + JPEGPixel2BE(pOutput+iPitch*9+ 8+(iCol<<1), Y3, Y4, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput+iPitch*8+ 8+(iCol<<1), Y1, Cb, Cr); + JPEGPixelBE(pOutput+iPitch*9+ 8+(iCol<<1), Y3, Cb, Cr); + } + } + } + } // for each column + pY += 16; // skip to next line of source pixels + pCb += 8; + pCr += 8; + pOutput += iPitch*2; + } +} /* JPEGPutMCU22() */ + +static void JPEGPutMCU12(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + uint32_t Cr,Cb; + signed int Y1, Y2; + int iRow, iCol, iXCount, iYCount; + uint8_t *pY, *pCr, *pCb; + uint16_t *pOutput = &pJPEG->usPixels[x]; + + pY = (uint8_t *)&pJPEG->sMCUs[0*DCTSIZE]; + pCb = (uint8_t *)&pJPEG->sMCUs[2*DCTSIZE]; + pCr = (uint8_t *)&pJPEG->sMCUs[3*DCTSIZE]; + + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (iRow=0; iRow<4; iRow++) + { + for (iCol=0; iCol<4; iCol++) + { + Y1 = (pY[0] + pY[1] + pY[8] + pY[9]) << 10; + Cb = (pCb[0] + pCb[1] + 1) >> 1; + Cr = (pCr[0] + pCr[1] + 1) >> 1; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput+iCol, Y1, Cb, Cr); + Y1 = (pY[DCTSIZE*2] + pY[DCTSIZE*2+1] + pY[DCTSIZE*2+8] + pY[DCTSIZE*2+9]) << 10; + Cb = (pCb[32] + pCb[33] + 1) >> 1; + Cr = (pCr[32] + pCr[33] + 1) >> 1; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol+iPitch, Y1, Cb, Cr); + else + JPEGPixelBE(pOutput+iCol+iPitch, Y1, Cb, Cr); + pCb += 2; + pCr += 2; + pY += 2; + } + pY += 8; + pOutput += iPitch*2; + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + Y1 = pY[0] << 12; + Y2 = pY[DCTSIZE*2] << 12; + Cb = pCb[0]; + Cr = pCr[0]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput, Y1, Cb, Cr); + JPEGPixelLE(pOutput + iPitch, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput, Y1, Cb, Cr); + JPEGPixelBE(pOutput + iPitch, Y2, Cb, Cr); + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { // draw a 2x4 block + Y1 = pY[0] << 12; + Y2 = pY[2] << 12; + Cb = pCb[0]; + Cr = pCr[0]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput, Y1, Cb, Cr); + JPEGPixelLE(pOutput + iPitch, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput, Y1, Cb, Cr); + JPEGPixelBE(pOutput + iPitch, Y2, Cb, Cr); + } + Y1 = pY[1] << 12; + Y2 = pY[3] << 12; + Cb = pCb[1]; + Cr = pCr[1]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput + 1, Y1, Cb, Cr); + JPEGPixelLE(pOutput + 1 + iPitch, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput + 1, Y1, Cb, Cr); + JPEGPixelBE(pOutput + 1 + iPitch, Y2, Cb, Cr); + } + pY += DCTSIZE*2; // next Y block below + Y1 = pY[0] << 12; + Y2 = pY[2] << 12; + Cb = pCb[2]; + Cr = pCr[2]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput + iPitch*2, Y1, Cb, Cr); + JPEGPixelLE(pOutput + iPitch*3, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput + iPitch*2, Y1, Cb, Cr); + JPEGPixelBE(pOutput + iPitch*3, Y2, Cb, Cr); + } + Y1 = pY[1] << 12; + Y2 = pY[3] << 12; + Cb = pCb[3]; + Cr = pCr[3]; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput + 1 + iPitch*2, Y1, Cb, Cr); + JPEGPixelLE(pOutput + 1 + iPitch*3, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput + 1 + iPitch*2, Y1, Cb, Cr); + JPEGPixelBE(pOutput + 1 + iPitch*3, Y2, Cb, Cr); + } + return; + } + /* Convert YCC pixels into RGB pixels and store in output image */ + iYCount = 16; + iXCount = 8; + for (iRow=0; iRowucPixelType == RGB565_LITTLE_ENDIAN) + { + JPEGPixelLE(pOutput + iCol, Y1, Cb, Cr); + JPEGPixelLE(pOutput + iPitch + iCol, Y2, Cb, Cr); + } + else + { + JPEGPixelBE(pOutput + iCol, Y1, Cb, Cr); + JPEGPixelBE(pOutput + iPitch + iCol, Y2, Cb, Cr); + } + } + pY += 16; // skip to next 2 lines of source pixels + if (iRow == 6) // next MCU block, skip ahead to correct spot + pY += (128-64); + pCb += 8; + pCr += 8; + pOutput += iPitch*2; // next 2 lines of dest pixels + } +} /* JPEGPutMCU12() */ +static void JPEGPutMCU21(JPEGIMAGE *pJPEG, int x, int iPitch) +{ + int iCr, iCb; + signed int Y1, Y2; + int iCol; + int iRow; + uint8_t *pY, *pCr, *pCb; + uint16_t *pOutput = &pJPEG->usPixels[x]; + + pY = (uint8_t *)&pJPEG->sMCUs[0*DCTSIZE]; + pCb = (uint8_t *)&pJPEG->sMCUs[2*DCTSIZE]; + pCr = (uint8_t *)&pJPEG->sMCUs[3*DCTSIZE]; + + if (pJPEG->iOptions & JPEG_SCALE_HALF) + { + for (iRow=0; iRow<4; iRow++) + { + for (iCol=0; iCol<4; iCol++) + { // left block + iCr = (pCr[0] + pCr[8] + 1) >> 1; + iCb = (pCb[0] + pCb[8] + 1) >> 1; + Y1 = (signed int)(pY[0] + pY[1] + pY[8] + pY[9]) << 10; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol, Y1, iCb, iCr); + else + JPEGPixelBE(pOutput+iCol, Y1, iCb, iCr); + // right block + iCr = (pCr[4] + pCr[12] + 1) >> 1; + iCb = (pCb[4] + pCb[12] + 1) >> 1; + Y1 = (signed int)(pY[128] + pY[129] + pY[136] + pY[137]) << 10; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixelLE(pOutput+iCol+4, Y1, iCb, iCr); + else + JPEGPixelBE(pOutput+iCol+4, Y1, iCb, iCr); + pCb++; + pCr++; + pY += 2; + } + pCb += 12; + pCr += 12; + pY += 8; + pOutput += iPitch; + } + return; + } + if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { // draw 2 pixels + iCr = pCr[0]; + iCb = pCb[0]; + Y1 = (signed int)(pY[0]) << 12; + Y2 = (signed int)(pY[DCTSIZE*2]) << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput, Y1, Y2, iCb, iCr); + return; + } + if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { // draw 4x2 pixels + // top left + iCr = pCr[0]; + iCb = pCb[0]; + Y1 = (signed int)(pY[0]) << 12; + Y2 = (signed int)(pY[1]) << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput, Y1, Y2, iCb, iCr); + // top right + iCr = pCr[1]; + iCb = pCb[1]; + Y1 = (signed int)pY[DCTSIZE*2] << 12; + Y2 = (signed int)pY[DCTSIZE*2+1] << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput + 2, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput + 2, Y1, Y2, iCb, iCr); + // bottom left + iCr = pCr[2]; + iCb = pCb[2]; + Y1 = (signed int)(pY[2]) << 12; + Y2 = (signed int)(pY[3]) << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput + iPitch, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput + iPitch, Y1, Y2, iCb, iCr); + // bottom right + iCr = pCr[3]; + iCb = pCb[3]; + Y1 = (signed int)pY[DCTSIZE*2+2] << 12; + Y2 = (signed int)pY[DCTSIZE*2+3] << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput + iPitch + 2, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput + iPitch + 2, Y1, Y2, iCb, iCr); + return; + } + /* Convert YCC pixels into RGB pixels and store in output image */ + for (iRow=0; iRow<8; iRow++) // up to 8 rows to do + { + for (iCol=0; iCol<4; iCol++) // up to 4x2 cols to do + { // left block + iCr = *pCr++; + iCb = *pCb++; + Y1 = (signed int)(*pY++) << 12; + Y2 = (signed int)(*pY++) << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput + iCol*2, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput + iCol*2, Y1, Y2, iCb, iCr); + // right block + iCr = pCr[3]; + iCb = pCb[3]; + Y1 = (signed int)pY[126] << 12; + Y2 = (signed int)pY[127] << 12; + if (pJPEG->ucPixelType == RGB565_LITTLE_ENDIAN) + JPEGPixel2LE(pOutput + 8 + iCol*2, Y1, Y2, iCb, iCr); + else + JPEGPixel2BE(pOutput + 8 + iCol*2, Y1, Y2, iCb, iCr); + } // for col + pCb += 4; + pCr += 4; + pOutput += iPitch; + } // for row +} /* JPEGPutMCU21() */ + +// Dither the 8-bit gray pixels into 1, 2, or 4-bit gray +static void JPEGDither(JPEGIMAGE *pJPEG, int iWidth, int iHeight) +{ +int x, y, xmask=0, iDestPitch=0; +int32_t cNew, lFErr, v=0, h; +int32_t e1,e2,e3,e4; +uint8_t cOut, ucPixelType; // forward errors for gray +uint8_t *pSrc, *pDest, *errors, *pErrors=NULL, *d, *pPixels; // destination 8bpp image +uint8_t pixelmask=0, shift=0; + + ucPixelType = pJPEG->ucPixelType; + errors = (uint8_t *)&pJPEG->usPixels[MAX_BUFFERED_PIXELS/2]; // plenty of space here + errors[0] = errors[1] = errors[2] = 0; + pDest = pSrc = pJPEG->pDitherBuffer; // write the new pixels over the original + switch (ucPixelType) + { + case FOUR_BIT_DITHERED: + iDestPitch = (iWidth+1)/2; + pixelmask = 0xf0; + shift = 4; + xmask = 1; + break; + case TWO_BIT_DITHERED: + iDestPitch = (iWidth+3)/4; + pixelmask = 0xc0; + shift = 2; + xmask = 3; + break; + case ONE_BIT_DITHERED: + iDestPitch = (iWidth+7)/8; + pixelmask = 0x80; + shift = 1; + xmask = 7; + break; + } + for (y=0; y 255) cNew = 255; // clip to uint8_t + cOut <<= shift; // pack new pixels into a byte + cOut |= (cNew >> (8-shift)); // keep top N bits + if ((x & xmask) == xmask) // store it when the byte is full + { + *d++ = cOut; + cOut = 0; + } + // calculate the Floyd-Steinberg error for this pixel + v = cNew - (cNew & pixelmask); // new error for N-bit gray output (always positive) + h = v >> 1; + e1 = (7*h)>>3; // 7/16 + e2 = h - e1; // 1/16 + e3 = (5*h) >> 3; // 5/16 + e4 = h - e3; // 3/16 + // distribute error to neighbors + lFErr = e1 + pErrors[1]; + pErrors[1] = (uint8_t)e2; + pErrors[0] += e3; + pErrors[-1] += e4; + pErrors++; + } // for x + } // for y + // copy the output to the pixel buffer for the user to access + memcpy(pJPEG->usPixels, pJPEG->pDitherBuffer, iDestPitch * iHeight); +} /* JPEGDither() */ + +// +// Decode the image +// returns 0 for error, 1 for success +// +static int DecodeJPEG(JPEGIMAGE *pJPEG) +{ + int cx, cy, x, y, mcuCX, mcuCY; + int iLum0, iLum1, iLum2, iLum3, iCr, iCb; + signed int iDCPred0, iDCPred1, iDCPred2; + int i, iQuant1, iQuant2, iQuant3, iErr; + uint8_t c; + int iMCUCount, xoff, iPitch, bThumbnail = 0; + uint32_t l, *pl; + unsigned char cDCTable0, cACTable0, cDCTable1, cACTable1, cDCTable2, cACTable2; + JPEGDRAW jd; + int iMaxFill = 16, iScaleShift = 0; + + // Requested the Exif thumbnail + if (pJPEG->iOptions & JPEG_EXIF_THUMBNAIL) + { + if (pJPEG->iThumbData == 0 || pJPEG->iThumbWidth == 0) // doesn't exist + { + pJPEG->iError = JPEG_INVALID_PARAMETER; + return 0; + } + if (!JPEGParseInfo(pJPEG, 1)) // parse the embedded thumbnail file header + return 0; // something went wrong + } + // Fast downscaling options + if (pJPEG->iOptions & JPEG_SCALE_HALF) + iScaleShift = 1; + else if (pJPEG->iOptions & JPEG_SCALE_QUARTER) + { + iScaleShift = 2; + iMaxFill = 1; + } + else if (pJPEG->iOptions & JPEG_SCALE_EIGHTH) + { + iScaleShift = 3; + iMaxFill = 1; + bThumbnail = 1; + } + + // reorder and fix the quantization table for decoding + JPEGFixQuantD(pJPEG); + pJPEG->bb.ulBits = MOTOLONG(&pJPEG->ucFileBuf[0]); // preload first 4 bytes + pJPEG->bb.pBuf = pJPEG->ucFileBuf; + pJPEG->bb.ulBitOff = 0; + + cDCTable0 = pJPEG->JPCI[0].dc_tbl_no; + cACTable0 = pJPEG->JPCI[0].ac_tbl_no; + cDCTable1 = pJPEG->JPCI[1].dc_tbl_no; + cACTable1 = pJPEG->JPCI[1].ac_tbl_no; + cDCTable2 = pJPEG->JPCI[2].dc_tbl_no; + cACTable2 = pJPEG->JPCI[2].ac_tbl_no; + iDCPred0 = iDCPred1 = iDCPred2 = mcuCX = mcuCY = 0; + + switch (pJPEG->ucSubSample) // set up the parameters for the different subsampling options + { + case 0x00: // fake value to handle grayscale + case 0x01: // fake value to handle sRGB/CMYK + case 0x11: + cx = (pJPEG->iWidth + 7) >> 3; // number of MCU blocks + cy = (pJPEG->iHeight + 7) >> 3; + iCr = MCU1; + iCb = MCU2; + mcuCX = mcuCY = 8; + break; + case 0x12: + cx = (pJPEG->iWidth + 7) >> 3; // number of MCU blocks + cy = (pJPEG->iHeight + 15) >> 4; + iCr = MCU2; + iCb = MCU3; + mcuCX = 8; + mcuCY = 16; + break; + case 0x21: + cx = (pJPEG->iWidth + 15) >> 4; // number of MCU blocks + cy = (pJPEG->iHeight + 7) >> 3; + iCr = MCU2; + iCb = MCU3; + mcuCX = 16; + mcuCY = 8; + break; + case 0x22: + cx = (pJPEG->iWidth + 15) >> 4; // number of MCU blocks + cy = (pJPEG->iHeight + 15) >> 4; + iCr = MCU4; + iCb = MCU5; + mcuCX = mcuCY = 16; + break; + default: // to suppress compiler warning + cx = cy = 0; + iCr = iCb = 0; + break; + } + // Scale down the MCUs by the requested amount + mcuCX >>= iScaleShift; + mcuCY >>= iScaleShift; + + iQuant1 = pJPEG->sQuantTable[pJPEG->JPCI[0].quant_tbl_no*DCTSIZE]; // DC quant values + iQuant2 = pJPEG->sQuantTable[pJPEG->JPCI[1].quant_tbl_no*DCTSIZE]; + iQuant3 = pJPEG->sQuantTable[pJPEG->JPCI[2].quant_tbl_no*DCTSIZE]; + // luminance values are always in these positions + iLum0 = MCU0; + iLum1 = MCU1; + iLum2 = MCU2; + iLum3 = MCU3; + iErr = 0; + pJPEG->iResCount = pJPEG->iResInterval; + // Calculate how many MCUs we can fit in the pixel buffer to maximize LCD drawing speed + iMCUCount = MAX_BUFFERED_PIXELS / (mcuCX * mcuCY); + if (pJPEG->ucPixelType == EIGHT_BIT_GRAYSCALE) + iMCUCount *= 2; // each pixel is only 1 byte + if (iMCUCount > cx) + iMCUCount = cx; // don't go wider than the image + if (iMCUCount > pJPEG->iMaxMCUs) // did the user set an upper bound on how many pixels per JPEGDraw callback? + iMCUCount = pJPEG->iMaxMCUs; + if (pJPEG->ucPixelType > EIGHT_BIT_GRAYSCALE) // dithered, override the max MCU count + iMCUCount = cx; // do the whole row + jd.iBpp = 16; + switch (pJPEG->ucPixelType) + { + case EIGHT_BIT_GRAYSCALE: + jd.iBpp = 8; + break; + case FOUR_BIT_DITHERED: + jd.iBpp = 4; + break; + case TWO_BIT_DITHERED: + jd.iBpp = 2; + break; + case ONE_BIT_DITHERED: + jd.iBpp = 1; + break; + } + jd.pPixels = pJPEG->usPixels; + jd.iHeight = mcuCY; + jd.y = pJPEG->iYOffset; + for (y = 0; y < cy; y++, jd.y += mcuCY) + { + jd.x = pJPEG->iXOffset; + xoff = 0; // start of new LCD output group + iPitch = iMCUCount * mcuCX; // pixels per line of LCD buffer + for (x = 0; x < cx && iErr == 0; x++) + { + pJPEG->ucACTable = cACTable0; + pJPEG->ucDCTable = cDCTable0; + // do the first luminance component + iErr = JPEGDecodeMCU(pJPEG, iLum0, &iDCPred0); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + pl = (uint32_t *)&pJPEG->sMCUs[iLum0]; + c = ucRangeTable[((iDCPred0 * iQuant1) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + for (i = 0; iJPCI[0].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); // first quantization table + } + // do the second luminance component + if (pJPEG->ucSubSample > 0x11) // subsampling + { + iErr |= JPEGDecodeMCU(pJPEG, iLum1, &iDCPred0); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + c = ucRangeTable[((iDCPred0 * iQuant1) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + pl = (uint32_t *)&pJPEG->sMCUs[iLum1]; + for (i = 0; iJPCI[0].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); // first quantization table + } + if (pJPEG->ucSubSample == 0x22) + { + iErr |= JPEGDecodeMCU(pJPEG, iLum2, &iDCPred0); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + c = ucRangeTable[((iDCPred0 * iQuant1) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + pl = (uint32_t *)&pJPEG->sMCUs[iLum2]; + for (i = 0; iJPCI[0].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); // first quantization table + } + iErr |= JPEGDecodeMCU(pJPEG, iLum3, &iDCPred0); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + c = ucRangeTable[((iDCPred0 * iQuant1) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + pl = (uint32_t *)&pJPEG->sMCUs[iLum3]; + for (i = 0; iJPCI[0].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); // first quantization table + } + } // if 2:2 subsampling + } // if subsampling used + if (pJPEG->ucSubSample && pJPEG->ucNumComponents == 3) // if color (not CMYK) + { + // first chroma + pJPEG->ucACTable = cACTable1; + pJPEG->ucDCTable = cDCTable1; + iErr |= JPEGDecodeMCU(pJPEG, iCr, &iDCPred1); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + c = ucRangeTable[((iDCPred1 * iQuant2) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + pl = (uint32_t *)&pJPEG->sMCUs[iCr]; + for (i = 0; iJPCI[1].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); // second quantization table + } + // second chroma + pJPEG->ucACTable = cACTable2; + pJPEG->ucDCTable = cDCTable2; + iErr |= JPEGDecodeMCU(pJPEG, iCb, &iDCPred2); + if (pJPEG->ucMaxACCol == 0 || bThumbnail) // no AC components, save some time + { + c = ucRangeTable[((iDCPred2 * iQuant3) >> 5) & 0x3ff]; + l = c | ((uint32_t) c << 8) | ((uint32_t) c << 16) | ((uint32_t) c << 24); + // dct stores byte values + pl = (uint32_t *)&pJPEG->sMCUs[iCb]; + for (i = 0; iJPCI[2].quant_tbl_no, (pJPEG->ucMaxACCol | (pJPEG->ucMaxACRow << 8))); + } + } // if color components present + if (pJPEG->ucPixelType >= EIGHT_BIT_GRAYSCALE) + { + JPEGPutMCU8BitGray(pJPEG, xoff, iPitch); + } + else + { + switch (pJPEG->ucSubSample) + { + case 0x00: // grayscale + JPEGPutMCUGray(pJPEG, xoff, iPitch); + break; + case 0x11: + JPEGPutMCU11(pJPEG, xoff, iPitch); + break; + case 0x12: + JPEGPutMCU12(pJPEG, xoff, iPitch); + break; + case 0x21: + JPEGPutMCU21(pJPEG, xoff, iPitch); + break; + case 0x22: + JPEGPutMCU22(pJPEG, xoff, iPitch); + break; + } // switch on color option + } + xoff += mcuCX; + if (xoff == iPitch || x == cx-1) // time to draw + { + xoff = 0; + jd.iWidth = iPitch; // width of each LCD block group + if (pJPEG->ucPixelType > EIGHT_BIT_GRAYSCALE) // dither to 4/2/1 bits + JPEGDither(pJPEG, cx * mcuCX, mcuCY); + (*pJPEG->pfnDraw)(&jd); + jd.x += iPitch; + if ((cx - 1 - x) < iMCUCount) // change pitch for the last set of MCUs on this row + iPitch = (cx - 1 - x) * mcuCX; + } + if (pJPEG->iResInterval) + { + if (--pJPEG->iResCount == 0) + { + pJPEG->iResCount = pJPEG->iResInterval; + iDCPred0 = iDCPred1 = iDCPred2 = 0; // reset DC predictors + if (pJPEG->bb.ulBitOff & 7) // need to start at the next even byte + { + pJPEG->bb.ulBitOff += (8 - (pJPEG->bb.ulBitOff & 7)); // new restart interval starts on byte boundary + } + } // if restart interval needs to reset + } // if there is a restart interval + // See if we need to feed it more data + if (pJPEG->iVLCOff >= FILE_HIGHWATER) + JPEGGetMoreData(pJPEG); // need more 'filtered' VLC data + } // for x + } // for y + if (iErr != 0) + pJPEG->iError = JPEG_DECODE_ERROR; + return (iErr == 0); +} /* DecodeJPEG() */ diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/sciopero.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/sciopero.h new file mode 100644 index 0000000..4b6cf53 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/sciopero.h @@ -0,0 +1,2292 @@ +// +// sciopero +// +const uint8_t sciopero[] PROGMEM = { 0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x00,0x00,0x01, + 0x00,0x01,0x00,0x00,0xff,0xfe,0x00,0x3b,0x43,0x52,0x45,0x41,0x54,0x4f,0x52,0x3a, + 0x20,0x67,0x64,0x2d,0x6a,0x70,0x65,0x67,0x20,0x76,0x31,0x2e,0x30,0x20,0x28,0x75, + 0x73,0x69,0x6e,0x67,0x20,0x49,0x4a,0x47,0x20,0x4a,0x50,0x45,0x47,0x20,0x76,0x36, + 0x32,0x29,0x2c,0x20,0x71,0x75,0x61,0x6c,0x69,0x74,0x79,0x20,0x3d,0x20,0x39,0x30, + 0x0a,0xff,0xdb,0x00,0x43,0x00,0x03,0x02,0x02,0x03,0x02,0x02,0x03,0x03,0x03,0x03, + 0x04,0x03,0x03,0x04,0x05,0x08,0x05,0x05,0x04,0x04,0x05,0x0a,0x07,0x07,0x06,0x08, + 0x0c,0x0a,0x0c,0x0c,0x0b,0x0a,0x0b,0x0b,0x0d,0x0e,0x12,0x10,0x0d,0x0e,0x11,0x0e, + 0x0b,0x0b,0x10,0x16,0x10,0x11,0x13,0x14,0x15,0x15,0x15,0x0c,0x0f,0x17,0x18,0x16, + 0x14,0x18,0x12,0x14,0x15,0x14,0xff,0xdb,0x00,0x43,0x01,0x03,0x04,0x04,0x05,0x04, + 0x05,0x09,0x05,0x05,0x09,0x14,0x0d,0x0b,0x0d,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14, + 0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0xff,0xc0,0x00,0x11,0x08, + 0x01,0x2c,0x01,0x2c,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xff,0xc4, + 0x00,0x1f,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff, + 0xc4,0x00,0xb5,0x10,0x00,0x02,0x01,0x03,0x03,0x02,0x04,0x03,0x05,0x05,0x04,0x04, + 0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06, + 0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1, + 0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a, + 0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45, + 0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65, + 0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85, + 0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3, + 0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba, + 0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8, + 0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4, + 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xc4,0x00,0x1f,0x01,0x00,0x03,0x01,0x01,0x01, + 0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04, + 0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x11,0x00,0x02,0x01,0x02, + 0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00,0x01,0x02,0x77,0x00,0x01,0x02,0x03, + 0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81, + 0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1, + 0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a, + 0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54, + 0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74, + 0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92, + 0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9, + 0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, + 0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5, + 0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xda, + 0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xf4,0xbf,0x13,0xfe, + 0xd7,0x31,0xeb,0xd6,0xb6,0x36,0x77,0xfa,0x53,0x49,0x69,0x69,0x32,0x4b,0x1c,0x50, + 0xc9,0xe4,0x83,0xb4,0x8c,0x29,0x0a,0x31,0x8e,0x3f,0x53,0x5d,0xed,0x9f,0xfc,0x14, + 0x4b,0x4e,0xdb,0xb2,0xfb,0xc2,0xb3,0x20,0xe8,0x5e,0x0b,0xb0,0x48,0xfc,0x0a,0xff, + 0x00,0x5a,0xf8,0x1f,0x5a,0xd6,0x1a,0x1e,0x4b,0x6e,0x73,0xd0,0x67,0xa5,0x70,0x3e, + 0x2d,0xf1,0xb4,0xfa,0x52,0x2c,0x51,0xb6,0xf9,0x9b,0x9e,0x4f,0x4f,0xf3,0xcd,0x7c, + 0x75,0x1a,0xd5,0x9d,0x67,0x0a,0x3b,0xbf,0x4e,0x87,0xee,0x98,0xec,0x9b,0x27,0xc3, + 0x61,0x5d,0x7c,0x55,0x3b,0x42,0x3d,0x9b,0xeb,0xd9,0x27,0xd4,0xfd,0x49,0xd0,0xff, + 0x00,0x6e,0x3f,0x08,0x7f,0x67,0x5a,0x59,0x2b,0xdf,0xda,0x32,0xab,0x89,0x6e,0xaf, + 0xa2,0x12,0xb9,0x24,0x1d,0xb8,0xd8,0x71,0xd4,0x8e,0x48,0xed,0xd2,0xbd,0x03,0xc0, + 0xff,0x00,0xb4,0x3f,0xc3,0x7b,0xf9,0x6d,0x24,0x7f,0x17,0xdb,0x3d,0xd2,0xc0,0xca, + 0xd2,0xdf,0xb3,0x23,0x96,0x66,0xcb,0x0c,0xb0,0x00,0x0e,0x07,0x03,0x8a,0xfc,0x55, + 0x83,0xe2,0x4e,0xb7,0x6f,0x1a,0xc8,0x81,0x6e,0x10,0xfd,0xe0,0x70,0x31,0xec,0x07, + 0x7a,0xd5,0xb3,0xf8,0xc9,0x72,0x84,0x0b,0x8b,0x36,0x1e,0xea,0x6b,0xd3,0x50,0xc7, + 0x52,0x49,0x72,0xa6,0x97,0xf5,0xe4,0x7c,0x4b,0xa5,0xc3,0x78,0x8b,0xf2,0x55,0x9d, + 0x36,0xfb,0xab,0xfe,0x8f,0xf3,0x3f,0x75,0xee,0xfe,0x20,0x69,0x3e,0x20,0xd2,0xaf, + 0xa3,0xd0,0xb5,0x2b,0x1d,0x45,0xc4,0x0e,0x3c,0xc8,0xee,0x15,0x90,0x1d,0xa7,0xa0, + 0x07,0x2c,0x7d,0x87,0x1d,0xb2,0x2b,0xe2,0xcf,0xda,0x83,0x49,0x96,0xd6,0x6f,0x0f, + 0x41,0x7b,0x71,0x2c,0xda,0x91,0xba,0xb5,0x06,0x39,0x80,0x55,0x45,0xdf,0x3b,0x7c, + 0xb1,0x8e,0x3f,0x8f,0xa9,0xcb,0x73,0xc9,0xaf,0x87,0x6c,0x3e,0x35,0x45,0x16,0x1b, + 0x37,0x10,0x63,0xf8,0x95,0x88,0xc5,0x75,0x76,0x5f,0xb4,0x14,0xd2,0x98,0x41,0xd6, + 0xe7,0x90,0x46,0x43,0x22,0x5c,0xb7,0x98,0x14,0xfa,0x80,0xdd,0x2a,0x9e,0x2e,0xb4, + 0x75,0xa9,0x49,0xfc,0x82,0x3c,0x3f,0x80,0xab,0xfe,0xed,0x8e,0x8b,0xf2,0x7a,0x3f, + 0xcf,0xf4,0x3f,0x56,0xbe,0x22,0x5e,0xdc,0x5a,0x78,0x67,0x52,0x8e,0xc6,0x0b,0x76, + 0xbe,0x8e,0xc2,0x0d,0x92,0x5c,0x16,0x3b,0x98,0xcd,0x1e,0x01,0x39,0xe9,0xf3,0x1e, + 0x95,0xea,0x7e,0x1a,0x43,0x17,0x87,0x74,0xb4,0xfe,0xed,0xac,0x43,0xff,0x00,0x1c, + 0x15,0xf9,0x4d,0x63,0xfb,0x64,0xf8,0xaa,0xfa,0x03,0x0d,0xe6,0xb5,0x6b,0xab,0xc4, + 0xe1,0x54,0x8b,0xb8,0x50,0xb6,0x14,0x82,0x3e,0x60,0x01,0x1d,0x07,0x43,0x5e,0xe1, + 0xe1,0x4f,0xf8,0x28,0xae,0xb3,0x6d,0x6f,0x04,0x1a,0x87,0x87,0xb4,0xeb,0xd8,0xa3, + 0x50,0x80,0xda,0xca,0xd1,0xb6,0x00,0xc7,0x7d,0xc2,0xb3,0xa7,0x98,0x52,0x8d,0x4b, + 0xce,0xeb,0x4b,0x6c,0x45,0x6e,0x14,0xc7,0xaa,0x4b,0xd8,0xb8,0xcf,0x5b,0xe9,0x2f, + 0x4e,0xf6,0x3e,0xf9,0x62,0x76,0x9a,0xf9,0xe7,0xf6,0xae,0x9c,0xc3,0xf0,0xeb,0xe2, + 0x0c,0xa3,0x20,0x2f,0x87,0xe4,0x8b,0x8f,0xf6,0x83,0x0f,0xfd,0x9e,0xb9,0xbd,0x0f, + 0xfe,0x0a,0x0d,0xe0,0xeb,0xe0,0xab,0xa9,0xe8,0xda,0x9e,0x9e,0xc7,0xa9,0x88,0xa4, + 0xcb,0xfc,0xd4,0xfe,0x95,0x61,0x3e,0x3d,0x7c,0x39,0xf8,0x9a,0x6f,0x2d,0x2f,0xbc, + 0x41,0x61,0xa7,0xd9,0xde,0xfc,0xb3,0x43,0xa9,0x40,0xd2,0xb4,0x8b,0x9c,0x85,0x3b, + 0xd7,0x60,0x1c,0x74,0xc7,0xa7,0x26,0xba,0x6a,0xe3,0xa8,0x3b,0x72,0xca,0xef,0xfa, + 0xef,0x6f,0xc4,0xf1,0x27,0x91,0x66,0x54,0x2e,0xea,0x50,0x92,0x5d,0xed,0x7f,0xca, + 0xe5,0x5f,0x87,0x3a,0x96,0x9f,0xe1,0xff,0x00,0x82,0x7e,0x13,0x8a,0xe6,0xfa,0x15, + 0x9e,0xef,0x47,0xb1,0x86,0x1b,0x68,0xf2,0xef,0x92,0x90,0x92,0x5f,0x68,0x3b,0x06, + 0x33,0xcb,0x62,0xbd,0xe3,0xc1,0xb7,0xb7,0x76,0xbe,0x17,0xd2,0xf4,0xfb,0x4b,0x5f, + 0x36,0x4b,0x7b,0x74,0x8d,0xe6,0x6e,0x23,0xdc,0x17,0x9c,0x77,0x3c,0xfa,0xe2,0xb1, + 0xfc,0x37,0xa3,0xfc,0x39,0xd6,0xe0,0x88,0x58,0x5f,0x69,0x9a,0xcb,0x00,0xa0,0x14, + 0xbb,0x49,0x0f,0x1d,0x3e,0x50,0xde,0xc3,0xaf,0x6e,0x2b,0xd2,0x2d,0x92,0x28,0x62, + 0x48,0xe1,0x55,0x48,0xd0,0x05,0x55,0x51,0x80,0x07,0xa0,0x14,0xa9,0x53,0xad,0x56, + 0x7e,0xd1,0xc9,0x45,0x5a,0xda,0x6a,0xfe,0xfd,0x8f,0x32,0xab,0x50,0x8f,0xb3,0x69, + 0xde,0xf7,0xd7,0x43,0x1d,0xbc,0x3f,0x36,0xa4,0x3f,0xe2,0x65,0x70,0xd2,0xa1,0xff, + 0x00,0x96,0x29,0xc2,0x7e,0x23,0xbf,0xe3,0x9a,0xbd,0xa7,0x68,0x36,0x3a,0x4c,0x92, + 0xbd,0xa5,0xac,0x70,0x3c,0xb8,0xde,0xca,0x39,0x6c,0x74,0xc9,0xab,0xf9,0xaa,0xda, + 0x86,0xa9,0x69,0xa4,0xdb,0x3d,0xc5,0xf5,0xd4,0x36,0x76,0xe8,0x32,0xd2,0xcf,0x20, + 0x45,0x5f,0xa9,0x3c,0x57,0x74,0x30,0xf4,0xa9,0xbe,0x7b,0x5d,0xf7,0x7a,0xbf,0xbc, + 0xe5,0xe6,0x93,0xd0,0xb3,0x93,0x46,0x71,0x5e,0x3f,0xe2,0xcf,0xda,0x77,0xc2,0xda, + 0x29,0x68,0x74,0x64,0xb8,0xf1,0x35,0xe6,0x70,0x05,0x90,0xdb,0x06,0x7b,0x66,0x66, + 0xf9,0x48,0xf7,0x4d,0xd5,0xc3,0x6b,0x5f,0x12,0x3c,0x71,0xe2,0x0d,0x2f,0xed,0x9a, + 0xd6,0xb9,0xa7,0x7c,0x3c,0xd2,0x1c,0x90,0x01,0xfd,0xdc,0xee,0xbe,0xcd,0x20,0xdc, + 0xdf,0x54,0x55,0x3c,0x56,0x15,0x71,0xf4,0x29,0x69,0x7b,0xbf,0x23,0x58,0xd0,0x9c, + 0xb5,0xb5,0xbd,0x4f,0x46,0xf8,0xa5,0xf1,0x87,0xc2,0x9a,0x5d,0xae,0xbd,0xe1,0x7b, + 0xad,0x5e,0x2b,0x7d,0x59,0xec,0x64,0x8d,0x83,0xa9,0xf2,0xe3,0x79,0x23,0x6d,0x8a, + 0xcd,0xd0,0x31,0xea,0x17,0xa9,0xaf,0x39,0xf0,0x67,0xc7,0xdf,0xec,0x0f,0x05,0xe8, + 0xde,0x1f,0xf0,0xe7,0x87,0xee,0xbc,0x41,0xab,0x41,0x6c,0x91,0xc9,0x3b,0xa9,0x82, + 0x02,0xe0,0x60,0x95,0x1b,0x4c,0x8c,0x07,0xfb,0x80,0x71,0xd6,0xbe,0x6d,0x83,0xe2, + 0x97,0x86,0xf4,0x5f,0x1a,0x78,0x8e,0x39,0x6d,0xef,0x3c,0x47,0xa9,0xcd,0xa8,0x86, + 0x81,0xae,0x65,0x78,0xad,0xef,0xad,0xd6,0x05,0x54,0x76,0x66,0x06,0x43,0x26,0xfd, + 0xcd,0xd3,0x3d,0x79,0xe4,0xd6,0xb5,0xc7,0xc6,0x1f,0x16,0xeb,0xf1,0x7d,0x8f,0x4c, + 0x96,0xdb,0xc3,0x76,0xd3,0x9c,0x0b,0x1d,0x02,0x1d,0x92,0xc9,0x9e,0xdb,0xd4,0x97, + 0x63,0xff,0x00,0x03,0x07,0xda,0xbc,0x1c,0x46,0x63,0x53,0x9f,0x9a,0x3a,0x69,0xa7, + 0x5d,0xff,0x00,0x03,0xd2,0x86,0x11,0x72,0xd9,0xff,0x00,0x97,0xfc,0x13,0xd9,0x7c, + 0x61,0xe2,0x6f,0x16,0xdf,0xc2,0x27,0xf1,0xbf,0x8d,0xad,0x7c,0x1b,0x62,0xdc,0x8d, + 0x32,0xce,0x43,0x04,0xae,0xbe,0xc8,0x85,0xa6,0x6e,0x3b,0x16,0xc7,0xb5,0x79,0xb4, + 0x9f,0x12,0xfc,0x11,0xe1,0x73,0x22,0x78,0x5f,0xc3,0x57,0x3e,0x23,0xbe,0x27,0x73, + 0x5e,0x6a,0xdf,0xba,0x87,0x77,0x73,0xe5,0xae,0x59,0xbf,0xe0,0x64,0x53,0x3c,0x2b, + 0xfb,0x35,0x78,0xd7,0xc5,0xd2,0x7d,0xaa,0x5d,0x28,0xe9,0xf1,0xca,0x77,0x3d,0xde, + 0xb9,0x21,0x8d,0x9b,0xdf,0xcb,0xc1,0x72,0x7f,0xdf,0x5f,0xc6,0xbd,0x9f,0xc2,0x5f, + 0xb1,0xfe,0x8b,0x6d,0x12,0xcb,0xe2,0x0d,0x5a,0xeb,0x54,0x91,0x46,0x45,0xb5,0xa7, + 0xfa,0x34,0x03,0xaf,0xa6,0x5b,0xf2,0x2b,0xf4,0xae,0x07,0xed,0xf1,0x12,0xd7,0xf1, + 0xfe,0xbf,0x43,0x47,0x2a,0x14,0x55,0xaf,0xf7,0x7f,0x5f,0xa9,0xf3,0xc6,0xbf,0xf1, + 0x27,0xc6,0xbe,0x3b,0x65,0xb0,0xba,0xd5,0xa5,0x82,0xde,0x51,0xb5,0x34,0xad,0x1a, + 0x2f,0x2d,0x58,0x7a,0x6c,0x8f,0x96,0xfc,0x59,0xbe,0x95,0xbf,0xe1,0x6f,0xd9,0x8b, + 0xc6,0x1a,0xcd,0xb4,0x77,0x2d,0xa5,0x43,0xa4,0x59,0xb9,0x05,0x65,0xd5,0x1c,0x6f, + 0x7c,0x9e,0x08,0x89,0x41,0x3d,0xff,0x00,0x89,0x57,0xeb,0x5f,0x67,0xf8,0x7b,0xc1, + 0x1a,0x0f,0x83,0x34,0xc7,0x8b,0x45,0xd2,0x6d,0x34,0xd5,0x68,0xf0,0xc6,0x08,0x80, + 0x79,0x0e,0x3a,0xb3,0x75,0x63,0xee,0x49,0xad,0x2d,0x46,0xea,0xda,0xd1,0xad,0x96, + 0xe2,0x68,0xe0,0x89,0x49,0x72,0x64,0x60,0xa3,0x00,0x71,0xc9,0xf7,0x22,0xb4,0xfa, + 0xa6,0x8e,0x53,0x7a,0xe9,0xf8,0x9c,0xff,0x00,0x5c,0x6b,0x4a,0x71,0xb2,0x3c,0x67, + 0xc2,0x5f,0xb2,0x1f,0x86,0xf4,0xe3,0x1c,0xda,0xf5,0xfd,0xe7,0x88,0x2e,0x17,0x92, + 0x81,0x8d,0xbc,0x03,0xe8,0xaa,0x4b,0xfe,0x05,0xf1,0xed,0x5e,0xb3,0xa1,0xf8,0x0f, + 0xc3,0xbe,0x1d,0x8d,0xa0,0xd3,0x34,0x3b,0x0b,0x18,0x40,0x03,0x6c,0x16,0xea,0xb9, + 0xeb,0xc9,0x38,0xe4,0xf3,0xd4,0xd5,0xa4,0xf1,0x00,0x9b,0x8b,0x1b,0x3b,0x9b,0xc2, + 0x7a,0x3e,0xcf,0x2d,0x3e,0xbb,0x9b,0x19,0x1f,0xee,0xe6,0x9d,0xf6,0x3d,0x56,0xe8, + 0x13,0x2d,0xcc,0x5a,0x78,0x27,0xe6,0x5b,0x65,0xf3,0x5b,0x1c,0x63,0x0e,0xc0,0x01, + 0xdf,0xf8,0x4d,0x7b,0x54,0xe9,0x53,0x51,0x8f,0xb2,0x85,0xfb,0xfd,0xdd,0xd9,0xc1, + 0x3a,0x95,0x27,0xf1,0xc8,0x92,0xe7,0x4c,0xb2,0x86,0x09,0x02,0xaf,0xd9,0xd7,0x6f, + 0x3e,0x54,0x8d,0x18,0xff,0x00,0xc7,0x48,0xac,0xa7,0xd7,0x2c,0xd1,0xd6,0x2d,0x3e, + 0xea,0xee,0xf6,0x46,0x38,0x09,0x69,0x89,0x54,0xfa,0x8d,0xec,0x0a,0x83,0xf5,0x61, + 0x5a,0x16,0xde,0x1e,0xb3,0x3e,0x5c,0xd3,0xab,0xde,0xcc,0xa7,0x76,0xfb,0xb7,0x32, + 0x61,0xba,0xe5,0x41,0xe1,0x4f,0xd0,0x0a,0xe2,0x3e,0x3f,0xb4,0x89,0xe0,0x70,0x21, + 0x59,0xb7,0x99,0x90,0x0f,0xb3,0x2c,0x85,0xfe,0xf0,0x18,0x02,0x37,0x47,0xe9,0x91, + 0xf2,0x92,0x7d,0x8f,0x4a,0xd7,0x92,0x52,0xf7,0x95,0x95,0xed,0xb7,0xf5,0xfa,0x19, + 0xe9,0xb1,0xab,0xa8,0xeb,0x9a,0x8d,0xa4,0x37,0x0e,0xfa,0x8e,0x9f,0x6a,0x90,0xc4, + 0xf7,0x06,0x0b,0x92,0xb2,0xdc,0x15,0x41,0xb9,0xb8,0x46,0x55,0x5e,0x9d,0x72,0x71, + 0x9a,0xf8,0xaf,0xe3,0x5f,0xed,0xd7,0x75,0xf0,0xf3,0xc4,0x33,0x69,0xb0,0x69,0x77, + 0x5e,0x23,0xb9,0x8d,0xc2,0xdb,0x5e,0x9b,0xb0,0xb6,0xae,0x76,0xe4,0x8f,0x26,0x3c, + 0x09,0x14,0x67,0x01,0x8b,0x03,0xc5,0x7a,0x4f,0xc3,0xc4,0x82,0x6d,0x43,0xc4,0xa8, + 0xf1,0x46,0xb7,0x0b,0xa0,0xde,0x87,0x2c,0xd1,0xf9,0xe0,0x14,0xc6,0x18,0xb0,0x8e, + 0x61,0xd7,0xfe,0x5a,0x46,0xdf,0xef,0x7a,0xfc,0x7d,0xe2,0x0f,0x0a,0xe9,0xed,0xe3, + 0x8f,0x06,0x58,0xea,0x71,0xb3,0x58,0x9b,0xa7,0x49,0x8a,0x0f,0x9b,0x60,0xc0,0x38, + 0x18,0x1e,0xb5,0xbd,0x2c,0x2d,0x37,0x2f,0x7a,0xee,0xdd,0xc6,0xe5,0x65,0x71,0x35, + 0x2f,0xda,0x27,0xe2,0xe7,0xc4,0x85,0xf2,0xb4,0x99,0xd3,0xc3,0x96,0x43,0x88,0xe1, + 0xd3,0xe2,0x30,0x98,0xc1,0xea,0x15,0x94,0xef,0xc7,0xb1,0x72,0x2b,0xe8,0x4f,0xd9, + 0xfb,0x47,0xd5,0x7c,0x33,0xf0,0x63,0x77,0x89,0x1a,0xe6,0xea,0xee,0xe3,0x5e,0xb9, + 0xba,0x92,0x7b,0x8b,0x70,0x40,0x1e,0x45,0xb8,0x1c,0x98,0xca,0x8e,0x73,0xcb,0x3a, + 0x1f,0x46,0xcd,0x7d,0x43,0xf0,0xe7,0xf6,0x76,0xf0,0x47,0x86,0x74,0xdb,0x69,0x2c, + 0xf4,0x88,0xe7,0x0c,0x81,0xd6,0x49,0xfe,0x62,0x41,0x19,0x07,0x1c,0x55,0x5f,0x8e, + 0x76,0x76,0x9a,0x3c,0x9e,0x1b,0xb7,0xb3,0x8a,0x3b,0x46,0x5f,0xb4,0x18,0xd6,0x00, + 0xb1,0xb6,0x7f,0x76,0x0e,0xdd,0xae,0x8f,0x9f,0xf7,0x1b,0x27,0xba,0xb7,0x6d,0x77, + 0x4e,0xca,0xc8,0x9b,0xf6,0x3c,0xf7,0xc6,0x93,0xda,0x4f,0xf0,0x85,0xd2,0xee,0xd6, + 0x4b,0xe9,0x1f,0x53,0x69,0x22,0x49,0x16,0x42,0x54,0xac,0x1f,0x2c,0x83,0x79,0x1c, + 0x2f,0x27,0x21,0xe4,0x51,0xea,0x7a,0x0f,0x79,0xf0,0x9d,0xee,0xad,0x73,0xe1,0xdd, + 0x2e,0x3b,0x2b,0x38,0x2d,0xa2,0x16,0xf1,0x93,0x2d,0xec,0xbf,0x30,0xca,0x83,0x8f, + 0x2d,0x73,0xc8,0x27,0x04,0x12,0x3a,0x57,0x89,0xea,0xd6,0xf3,0x2f,0xc2,0xf1,0x0a, + 0xdb,0x2c,0x51,0xc9,0x7c,0xd2,0x33,0x84,0xc3,0x31,0x2f,0x0a,0x1d,0xc3,0xc9,0x53, + 0x9e,0x47,0x2c,0x14,0xf3,0xf7,0x8f,0x19,0xfa,0x71,0x6c,0xe0,0x92,0x30,0x65,0x89, + 0x1c,0x81,0x8c,0xb2,0x8a,0xe2,0x8d,0x2f,0x6b,0x88,0x72,0x4d,0xab,0x2f,0xcf,0xfe, + 0x18,0xd9,0xca,0xd4,0xd2,0x31,0x4f,0x87,0xaf,0x2f,0x1d,0x57,0x50,0xd5,0xee,0x25, + 0x42,0x09,0x31,0x59,0xff,0x00,0xa3,0xa7,0xe6,0x32,0xff,0x00,0xf8,0xf5,0x68,0xdb, + 0x68,0x7a,0x7e,0x9d,0x2b,0x5c,0x45,0x69,0x0c,0x53,0x95,0x01,0xae,0x36,0x8f,0x31, + 0x80,0x18,0xe5,0xba,0x9e,0x07,0x73,0x55,0xef,0xae,0x74,0x9d,0x25,0x84,0xb7,0x17, + 0x11,0xda,0x46,0xa3,0x04,0xf9,0xa5,0x06,0x49,0x18,0x18,0x07,0xad,0x51,0x3a,0xf7, + 0xdb,0xbe,0x5d,0x36,0xc7,0x54,0xb9,0x8d,0xb8,0x32,0xb4,0x5e,0x5a,0x01,0xeb,0x99, + 0xb0,0x48,0xff,0x00,0x77,0x35,0xb4,0x5d,0x2a,0x6d,0xf7,0x5f,0x37,0xb7,0xde,0x65, + 0xef,0x31,0xda,0xe4,0xab,0x25,0xed,0xa5,0xcc,0x6e,0xaf,0x12,0x5b,0xca,0xdb,0x94, + 0x8c,0x10,0x50,0x90,0x41,0xff,0x00,0x80,0xd7,0xcb,0xb6,0x17,0x32,0xdd,0x49,0x13, + 0x3b,0x67,0x62,0x90,0x14,0x90,0x46,0x49,0x24,0x1f,0x5e,0xb8,0xf5,0xe8,0x2b,0xdc, + 0x6f,0xec,0x7c,0x41,0xa7,0x78,0x7a,0xf2,0x0b,0x61,0xa5,0x68,0xcb,0x05,0xa0,0x10, + 0x5b,0xcb,0xbe,0x75,0xb6,0x8b,0x64,0xb9,0x2d,0xb4,0x28,0xc8,0xe8,0x15,0x41,0x03, + 0x1d,0x48,0xaf,0x00,0xb7,0xb5,0xf1,0x3d,0xa7,0x98,0x20,0xd5,0x34,0x1b,0xa8,0x99, + 0xb0,0x64,0xf3,0x1a,0x2d,0xc7,0xdb,0x2a,0x4f,0xe5,0x5e,0x1e,0x26,0x4e,0x72,0x72, + 0x92,0xb3,0x3d,0x2c,0x3e,0x89,0xd8,0xdf,0x9e,0x36,0x80,0x47,0x13,0xdc,0xbb,0x1b, + 0x87,0x23,0x01,0x48,0xe3,0x77,0x50,0x01,0xcf,0x6c,0xf3,0x8f,0xd2,0xbc,0x0b,0xe3, + 0xfc,0x30,0x1f,0x8b,0x5e,0x20,0x53,0xb8,0xec,0x9c,0xa8,0xe0,0xf4,0xce,0x71,0xf7, + 0x87,0xad,0x7a,0xda,0x6b,0xba,0xe2,0xf8,0xd7,0x47,0xd3,0xce,0x9b,0x63,0x70,0x92, + 0xcf,0x6b,0x0c,0x97,0x4b,0x30,0x68,0xce,0xf9,0x30,0xc8,0x98,0x5e,0x76,0xa8,0x07, + 0x9c,0x75,0xaf,0x1d,0xf8,0xba,0xd3,0xdc,0x7c,0x4b,0xf1,0x13,0x8b,0x96,0x00,0xdd, + 0xb9,0xc1,0x63,0xc6,0x79,0xc7,0xb0,0xe6,0xbd,0x2c,0xa1,0x59,0xcd,0xfa,0x19,0xe3, + 0x1a,0x56,0x47,0xcb,0x1a,0x84,0xc6,0xe2,0xf1,0xc9,0x39,0x55,0xed,0xec,0x2b,0xca, + 0xbc,0x7f,0x39,0x97,0x56,0x65,0x1d,0x48,0x09,0xef,0xd3,0x3f,0xd6,0xbd,0x26,0x49, + 0x81,0x46,0xc7,0x56,0x3d,0x6b,0xc9,0x7c,0x69,0x31,0x6d,0x66,0xe0,0xa9,0xe4,0x31, + 0x07,0xd8,0x01,0x8f,0xe9,0x5c,0x39,0x32,0xe6,0xc4,0x4a,0x4f,0xb7,0xea,0x8f,0xd7, + 0x78,0xda,0xa7,0x26,0x5d,0x0a,0x6b,0xac,0x97,0xe0,0x99,0xa5,0xa1,0xba,0xbd,0xb9, + 0x11,0x2b,0xcb,0xb4,0xe3,0x08,0x09,0x03,0xd6,0xb4,0xd7,0xcb,0x62,0x49,0x51,0xbb, + 0xfb,0x84,0x64,0xd7,0x37,0xe1,0xfb,0xb4,0x8e,0xc8,0xa9,0x98,0xe3,0x71,0xe1,0x48, + 0x02,0xba,0x5d,0x2a,0x48,0xae,0x9b,0x72,0x92,0xe0,0x00,0x18,0xe0,0x9c,0x0f,0xc6, + 0xbe,0xb2,0x6a,0xc7,0xe2,0x71,0xd5,0xd8,0xaf,0x7b,0x6d,0x0b,0xba,0xc4,0xd1,0xa9, + 0x1c,0x12,0x10,0x64,0xf3,0x50,0x9d,0x1e,0xd8,0xee,0x66,0x0d,0x16,0x38,0x03,0x77, + 0x39,0xa8,0x6e,0xef,0xe4,0x96,0x47,0x21,0x80,0x0b,0xd0,0x01,0x9e,0x3f,0x95,0x58, + 0x82,0x6c,0x58,0xce,0xf2,0xb6,0x5d,0xd0,0x94,0x19,0xc7,0x3f,0x41,0xf8,0xd0,0xd3, + 0x48,0x69,0xa7,0x21,0x91,0x78,0x66,0xe1,0x63,0x4b,0x9b,0x75,0xb9,0x16,0xec,0xdb, + 0x7c,0xe0,0x87,0x66,0x7e,0xb5,0x62,0x6b,0x5d,0x6a,0xc6,0x50,0xd6,0xf7,0x8c,0xb1, + 0xe3,0xe5,0x1b,0xb0,0xdc,0x0e,0xb8,0xae,0xdf,0xe1,0x9e,0xb1,0x75,0x69,0x69,0x79, + 0x6f,0xb9,0x45,0xbc,0x56,0xaf,0x38,0x18,0x48,0xce,0xe0,0xc3,0x19,0x62,0x37,0x11, + 0xc9,0xe0,0x1c,0x9e,0x2b,0x17,0x51,0xbc,0x6f,0x17,0x78,0xb4,0x5c,0x4d,0x2c,0x56, + 0xf2,0x5c,0xc9,0x1c,0x2c,0xa0,0x12,0x00,0x00,0x2e,0xe2,0x58,0xfb,0x67,0xad,0x79, + 0x8b,0x11,0x39,0x56,0x9d,0x3a,0x91,0x5c,0xb1,0xeb,0xbf,0xe0,0x7b,0x8e,0x84,0x69, + 0x61,0xe9,0x55,0xc3,0xd4,0x6a,0x73,0x7b,0x6d,0xf8,0xaf,0x33,0x37,0x4a,0xf1,0x77, + 0x89,0x62,0x99,0xe3,0x6b,0xe5,0xf2,0xd6,0x32,0xfb,0xa4,0xe7,0x76,0x3b,0x0f,0x73, + 0x5d,0x1d,0xa7,0x8f,0x75,0xc8,0x6d,0xcc,0xb3,0x45,0x1c,0x81,0x62,0xf3,0x8f,0xae, + 0x3d,0x3e,0xb5,0xbf,0x1e,0x83,0xe1,0xcb,0xc6,0x5d,0x31,0x57,0x6d,0xd2,0x82,0xaf, + 0x75,0x11,0x67,0x32,0x36,0xe3,0xc6,0x49,0x55,0x24,0x0c,0x1c,0x01,0x82,0x3b,0xd7, + 0x9d,0xea,0xed,0xf6,0x09,0x6f,0xec,0x4c,0x21,0x64,0x8e,0x5d,0x84,0x06,0xde,0x01, + 0x53,0x8c,0x64,0x70,0x47,0x04,0x57,0x3d,0x1f,0xab,0x63,0x1b,0x4a,0x9d,0x9e,0xfb, + 0x5b,0x4e,0xe7,0xa5,0x5b,0x1b,0x9a,0xe5,0xb1,0x4f,0xeb,0x2e,0x4b,0x6d,0xef,0x67, + 0xd9,0xde,0xe7,0x67,0xa4,0x7c,0x71,0x60,0xe0,0x1b,0x79,0xe2,0x65,0x20,0x16,0x8d, + 0xba,0x57,0xa6,0x78,0x5f,0xf6,0xb6,0xd7,0xfc,0x3d,0xb4,0x58,0x78,0xab,0x54,0xb0, + 0x55,0x00,0xec,0x17,0x4f,0xb7,0x1f,0x4c,0xe2,0xbc,0x67,0x43,0x92,0x15,0xf0,0x84, + 0xc0,0x58,0xbb,0xde,0x4b,0x72,0x48,0x95,0x10,0x6d,0x64,0x0a,0x06,0xdc,0xfd,0x49, + 0xe0,0x57,0x45,0xe3,0x3f,0x84,0x93,0xf8,0x6b,0x47,0xb6,0xbc,0xb8,0xd3,0x91,0x92, + 0x48,0xd0,0xba,0xa3,0x02,0xd1,0xb3,0x05,0xc6,0xe1,0xd7,0x39,0xcd,0x63,0x57,0x0d, + 0x84,0xa7,0x55,0x42,0xee,0x2d,0xed,0xae,0xff,0x00,0x79,0xd5,0x4b,0x88,0x73,0x4a, + 0xb4,0xdc,0xaa,0x42,0x35,0x62,0xb7,0xbc,0x7f,0xca,0xc7,0xd4,0x5e,0x1a,0xff,0x00, + 0x82,0x82,0xf8,0xde,0xd2,0x30,0x8d,0xaf,0xda,0xea,0x2b,0x8c,0x01,0x75,0x02,0x16, + 0x1f,0x88,0x00,0xfe,0x75,0x6e,0xc7,0xf6,0xa5,0xb6,0xf1,0x06,0xb7,0x0e,0xa3,0xe3, + 0x0b,0x4b,0x9f,0x12,0x94,0x25,0x96,0x37,0xd4,0x36,0xa2,0x13,0xfd,0xc4,0x2a,0x55, + 0x7f,0xe0,0x20,0x57,0xc4,0x5a,0x56,0x9d,0x69,0x69,0x7d,0x29,0x7b,0x47,0x9c,0x94, + 0x3b,0x23,0x61,0xb4,0xab,0x9c,0x72,0x07,0x3d,0x2b,0x62,0xf3,0xc3,0x1a,0xed,0xa4, + 0x16,0xf3,0x41,0x14,0x89,0x1d,0xc2,0xef,0x88,0x7f,0x11,0x1c,0x72,0x70,0x7d,0xea, + 0x6a,0xe0,0xa7,0x25,0xcb,0xed,0x9d,0xbc,0xff,0x00,0xe1,0xca,0xa5,0x9c,0x60,0x2a, + 0x26,0xeb,0xe0,0x63,0x7e,0xf1,0xbc,0x7f,0x4f,0xd4,0xfb,0x83,0x54,0xfd,0xa5,0x46, + 0xa6,0x4c,0x3e,0x1f,0x96,0xcf,0xc1,0xd6,0xa7,0x8d,0xf6,0xf6,0x59,0xb8,0xc7,0xbc, + 0xdf,0x33,0x7f,0xdf,0x3b,0x2b,0x2f,0xc2,0xda,0x45,0xb7,0x8f,0xb5,0xb6,0xf3,0x7c, + 0x4f,0xa5,0x2c,0xf2,0x60,0xbd,0xfe,0xb9,0xa8,0x94,0xdd,0x9f,0x4c,0xe5,0x89,0xf6, + 0x6c,0x8f,0x7a,0xf9,0x23,0x48,0xf0,0x9f,0x8c,0x67,0xb5,0x92,0xe0,0xcd,0x15,0xba, + 0x23,0x05,0x08,0xc4,0xb1,0x6c,0x81,0xd3,0xf3,0xf5,0xa7,0xdb,0xea,0x7e,0x26,0xd3, + 0x42,0x9b,0xa4,0xb6,0x75,0xe3,0x04,0x4c,0x01,0xeb,0x8e,0x9c,0xd7,0x9b,0x3c,0xba, + 0xad,0xf7,0x52,0xf9,0xff,0x00,0xc3,0x1d,0x8a,0xb6,0x45,0x5a,0x3e,0xea,0x9d,0x26, + 0xfa,0xd9,0x49,0x7e,0xac,0xfb,0xdb,0xe2,0xcf,0xec,0xd3,0xa1,0x78,0x67,0xe1,0x25, + 0xdf,0x89,0x3f,0xb7,0xd3,0x5f,0xd4,0xec,0xe5,0x81,0xed,0x7e,0xc4,0x12,0x1b,0x64, + 0x73,0x2a,0x0e,0xc4,0x9e,0x84,0x82,0x77,0x01,0xdf,0x1c,0x57,0xd2,0xbf,0x01,0x3c, + 0x25,0x0e,0x87,0xe0,0x3b,0x7b,0xc9,0xb4,0x7b,0x2d,0x2e,0xfb,0x50,0x61,0x3b,0x0b, + 0x58,0x55,0x3e,0x52,0xab,0xb7,0x9e,0x49,0x18,0x19,0xe4,0x9e,0xb9,0xef,0x5f,0x92, + 0x1a,0x5f,0xc4,0xfd,0x5b,0x4c,0x02,0x44,0x7b,0x8b,0x71,0xc0,0x2f,0x0c,0xa4,0x03, + 0xdf,0x1d,0x45,0x7a,0x8f,0x87,0x7f,0x6d,0x2f,0x1d,0xf8,0x6a,0x14,0xb3,0x1e,0x26, + 0xbc,0x10,0xaa,0x6d,0x58,0x6e,0xd8,0x48,0x02,0xf2,0x30,0x0b,0x0c,0x81,0xc1,0xe8, + 0x46,0x31,0x4e,0x31,0xa9,0x45,0x35,0x2a,0x4f,0xf3,0x39,0x67,0x93,0x61,0xf1,0x51, + 0xb6,0x1b,0x1b,0x09,0x3f,0xef,0x7b,0xa7,0xeb,0x1d,0xe6,0xa7,0x69,0xa7,0x26,0x27, + 0x9a,0x24,0x66,0xfb,0xab,0x90,0x19,0x8f,0xa0,0x1d,0x4f,0xe1,0x5c,0x4f,0x8d,0x3e, + 0x31,0xe8,0x5e,0x02,0xb1,0x37,0x1a,0xac,0xf1,0x58,0xa3,0x31,0x50,0xf7,0xd2,0xfd, + 0x9d,0x15,0xb6,0x83,0xb4,0x96,0x19,0x04,0xe7,0x20,0x11,0xcf,0x35,0xf0,0xc6,0x91, + 0xfb,0x79,0xeb,0x86,0x13,0x1b,0xc3,0x67,0x6e,0xd2,0x05,0x59,0x6e,0xb4,0xe0,0x22, + 0x9d,0xc0,0x39,0x27,0x73,0x07,0x19,0xf7,0xc5,0x72,0x7f,0x18,0xfe,0x2b,0xd9,0x7c, + 0x71,0x37,0xa2,0x6d,0x52,0xe2,0xce,0x09,0xed,0x22,0x8a,0x2b,0x1b,0xc6,0xf3,0xa2, + 0x49,0xd2,0x3d,0x86,0x62,0xeb,0xc9,0x2d,0xdc,0xec,0xfc,0xeb,0xa2,0x9e,0x22,0x8c, + 0xa4,0x94,0xe7,0xcb,0xe5,0x63,0x86,0xaf,0x0b,0xe6,0x94,0xd5,0xe1,0x4f,0x9d,0x77, + 0x8b,0x4c,0xfa,0x0b,0xe2,0x0f,0xfc,0x14,0x4f,0xc1,0x7a,0x2c,0xcf,0x6b,0xa4,0xea, + 0x12,0x6b,0x32,0x21,0xc2,0x5b,0xd8,0x41,0xd4,0x8f,0xe1,0x90,0x92,0x4f,0xd1,0x93, + 0xf2,0xae,0xd7,0xc1,0x3f,0x18,0x35,0x6f,0x14,0xf8,0x37,0x47,0xd6,0xb4,0xeb,0x18, + 0x34,0xbb,0xad,0x4a,0xc7,0xed,0x8f,0x2d,0xca,0x9b,0xcb,0xd8,0xf3,0x2c,0x8a,0xa0, + 0x86,0x21,0xb6,0x85,0x51,0xc8,0x0d,0xd4,0xf1,0xeb,0xf2,0xbf,0xec,0xfb,0xf0,0x03, + 0xe1,0x6f,0xd9,0x2d,0x8e,0xb7,0xe3,0x8d,0x3a,0xda,0xf7,0x60,0x0f,0x6f,0xb1,0xa3, + 0x01,0xbb,0xfc,0xce,0x14,0x1a,0xfa,0x8f,0x56,0xd2,0xb4,0xbb,0x3b,0xcb,0x4d,0x1f, + 0x43,0xb9,0x4d,0x43,0x47,0xb3,0xb6,0x86,0x3b,0x77,0x85,0x96,0xe6,0x3c,0x01,0xcb, + 0x00,0xb8,0x75,0x39,0x27,0xe7,0x8d,0x8e,0x3b,0x8e,0x2b,0xd5,0x83,0xa0,0xdd,0xe9, + 0xbb,0xbe,0xe7,0xcf,0x57,0xc1,0xe2,0x70,0xda,0x57,0xa6,0xe2,0xfc,0xd3,0x47,0xab, + 0xfc,0x2a,0xd4,0x6e,0x2e,0x7c,0x65,0xe3,0xb8,0x67,0xb9,0x69,0x2d,0xed,0x6e,0xad, + 0x52,0x35,0x63,0xf2,0x23,0x1b,0x58,0xd9,0xc8,0x1c,0x63,0x25,0xb2,0x78,0x15,0xde, + 0x4d,0xe2,0x7b,0x02,0xcd,0x1c,0x12,0xb5,0xec,0x83,0x82,0x96,0x68,0x66,0xc1,0xf4, + 0x25,0x41,0x03,0xf1,0xc5,0x79,0x77,0xc1,0x8d,0x2b,0x4e,0xd7,0xfc,0x47,0xf1,0x0f, + 0x56,0x96,0x24,0xbc,0xf3,0x35,0x91,0x6e,0xa1,0x9c,0xbc,0x25,0x63,0x86,0x3d,0xac, + 0x14,0x92,0xb9,0xf9,0x8f,0xcc,0x06,0x70,0x05,0x7b,0x04,0x48,0xb1,0x2b,0x2a,0xaa, + 0xaa,0x83,0x80,0xa0,0x60,0x01,0x53,0x4b,0x9d,0x45,0xab,0xe8,0xdb,0x39,0x2a,0x59, + 0x4b,0xee,0x32,0x8d,0xde,0xac,0xd1,0xed,0x86,0xce,0x2b,0x65,0xe0,0x19,0x6e,0xa5, + 0xc9,0xfa,0x84,0x5c,0xe4,0x7d,0x58,0x57,0x98,0xfe,0xd0,0x3e,0x75,0xa7,0x83,0xa0, + 0x4d,0x43,0x50,0x8a,0x7f,0xb4,0x4e,0xa8,0x23,0x68,0xed,0xe3,0x8f,0x23,0x9c,0x01, + 0x38,0x65,0x24,0xfa,0x33,0x0f,0x62,0x0d,0x7a,0xfd,0xf5,0xe4,0x16,0x70,0xef,0xb8, + 0x9a,0x38,0x10,0x72,0x5e,0x46,0x0a,0x00,0x1c,0xe7,0x26,0xbc,0x7b,0xf6,0x82,0xbc, + 0x4d,0x5b,0xc3,0xda,0x55,0xd6,0x99,0x77,0x72,0xc6,0xde,0xe8,0xab,0x3d,0xa7,0x9e, + 0x11,0x95,0xa3,0x6c,0xee,0x68,0x91,0xf2,0xa3,0x68,0xea,0xac,0xa3,0x8c,0x8e,0x95, + 0x71,0x8a,0x8c,0xd4,0x39,0xaf,0x6b,0x7f,0x56,0x27,0x7e,0x87,0x9b,0x7c,0x3d,0x86, + 0x7b,0x05,0xf1,0x11,0xb8,0x32,0xa4,0x6b,0xa2,0xcf,0xe5,0xc6,0xfe,0x72,0x00,0x19, + 0x91,0x72,0xa8,0xfb,0x80,0x1c,0xf5,0x8a,0x5d,0xbe,0xdd,0x08,0xf9,0x33,0xc4,0x88, + 0x2e,0x3e,0x26,0xf8,0x2d,0x32,0x0e,0xe7,0x9d,0xbf,0x54,0xff,0x00,0x1a,0xfa,0x77, + 0xc2,0xbe,0x54,0x7e,0x0a,0xf1,0xe5,0xcc,0x73,0x43,0x3a,0xa6,0x96,0x54,0x88,0x96, + 0x1f,0x2c,0xb1,0x91,0x73,0x9f,0x2d,0xc2,0x13,0xec,0xd1,0x23,0x7d,0x79,0xaf,0x98, + 0xd6,0xc4,0xdc,0x7c,0x5f,0xf0,0x55,0xb3,0x7c,0xdf,0x23,0xbe,0x07,0x1d,0x5e,0x3f, + 0xf0,0xaf,0x42,0x8a,0x5c,0xcd,0x99,0xcf,0xe1,0x3f,0x53,0x34,0x8d,0x52,0xc7,0x4f, + 0xd2,0x6d,0x22,0x79,0xe3,0x42,0xb1,0xaa,0xed,0x0d,0x92,0x30,0x05,0x79,0x6f,0xc7, + 0x8b,0xd7,0xbb,0xd4,0xf4,0x75,0x83,0xcc,0x28,0x20,0x9c,0xb4,0x6b,0xb9,0xb7,0x82, + 0xc8,0x32,0x51,0x43,0xe4,0x71,0xd4,0xc2,0xe3,0xdd,0x7b,0xfa,0xe6,0x8f,0xa2,0xd9, + 0x69,0xf6,0xd1,0x08,0x2d,0xa3,0x42,0x00,0x3b,0xb6,0xf2,0x7f,0x1e,0xb5,0xe3,0x7f, + 0xb4,0x00,0xdf,0xe2,0x5d,0x38,0x49,0x84,0xb4,0x8e,0xd3,0x7b,0x3c,0x88,0x36,0x03, + 0xbc,0xe3,0xe6,0x74,0xd8,0xa7,0x8f,0xf9,0xeb,0x13,0x7b,0xd3,0x9d,0x94,0x2c,0x85, + 0x0e,0x6f,0xb4,0x72,0x7e,0x25,0x7b,0x9b,0x9f,0x86,0x3e,0x1e,0xfb,0x35,0xd4,0x76, + 0x93,0x1b,0xb9,0x0c,0x6c,0x21,0x49,0x54,0x11,0x3c,0x21,0x46,0x37,0xe0,0x0d,0xd8, + 0xce,0x36,0x91,0xc8,0xd8,0x39,0x15,0xef,0xb6,0xbe,0x12,0x9a,0xfa,0x0b,0x67,0xd5, + 0x35,0x9b,0xeb,0xe3,0xb3,0x2e,0x88,0xe2,0xdd,0x18,0x90,0x3b,0x47,0xb4,0xe0,0x60, + 0xf0,0x49,0xeb,0xc9,0x35,0xe0,0xfe,0x25,0x99,0x6e,0x3c,0x3b,0xe0,0x08,0x25,0x9c, + 0xb3,0x4b,0x7a,0x70,0x5e,0x42,0x4b,0x83,0x38,0xc1,0xe6,0x56,0x24,0x7c,0x83,0xbb, + 0x8e,0x9c,0x8e,0x0d,0x7d,0x04,0x7c,0x5b,0xa4,0xda,0x7e,0xe0,0x5e,0xad,0xc5,0xc2, + 0x8d,0xad,0x0d,0xb2,0x99,0xa4,0x52,0x3b,0x6d,0x40,0x4d,0x78,0xcb,0xd9,0x3c,0x4c, + 0xd5,0x5d,0xac,0x8e,0xc7,0x75,0x4e,0x36,0xf3,0x2e,0x59,0xe8,0x5a,0x7e,0x8d,0x1c, + 0x82,0xca,0xce,0x0b,0x62,0xe3,0xe7,0x68,0xd0,0x02,0xde,0xe4,0xf5,0x3f,0x8d,0x5c, + 0x03,0x6c,0x6b,0xf4,0x03,0x8a,0xc4,0x3e,0x20,0xbf,0xd4,0x09,0x8a,0xcb,0x45,0xba, + 0x39,0x1f,0xeb,0xae,0x99,0x60,0x50,0x3d,0x70,0x49,0x7f,0xfc,0x76,0xab,0xdf,0xe9, + 0xba,0xde,0xa7,0x2e,0xd9,0x75,0x58,0x74,0xdb,0x70,0xc7,0x11,0xd9,0xc6,0x4c,0x8e, + 0x3b,0x65,0xd8,0xe0,0x1f,0x60,0xbf,0x8d,0x75,0xca,0xac,0x62,0xaf,0x4e,0x3a,0x7d, + 0xcb,0xf1,0xb1,0x87,0x2d,0xdf,0xbc,0xca,0x1e,0x3d,0x7f,0xf8,0x94,0x78,0x85,0xf0, + 0x36,0x8d,0x35,0xba,0x9c,0x7f,0x0c,0x83,0xaf,0xe3,0x5f,0x3b,0x69,0xfa,0x74,0x09, + 0x6e,0x92,0x15,0x79,0xae,0x59,0x43,0x80,0x0e,0xe5,0xc7,0xcc,0x37,0x67,0xd3,0xa7, + 0x20,0xfd,0x33,0x5e,0xe5,0xe3,0x8d,0x06,0xd0,0x78,0x67,0x57,0x8a,0xfa,0xe7,0x52, + 0xb8,0xb5,0x8a,0xd8,0x3c,0xb2,0xc5,0x71,0xb6,0x69,0x00,0xc1,0xdb,0x90,0x00,0xc7, + 0x3d,0x31,0x5f,0x39,0x5a,0xe8,0x9a,0x1d,0xd4,0xac,0x90,0xde,0xeb,0x96,0xb1,0xb3, + 0x6d,0xf2,0xda,0x68,0xd8,0xf5,0xe0,0x1e,0x00,0x35,0xf3,0xf8,0x99,0x4d,0xc9,0xb9, + 0x1e,0x96,0x1e,0xc9,0x68,0x69,0x5e,0xc5,0x24,0xbe,0x22,0xf0,0xba,0x46,0xdb,0x5e, + 0x7d,0x52,0x14,0x8d,0xe2,0x52,0xc9,0x19,0xdd,0xc6,0x72,0x7a,0x01,0xcf,0x19,0xaf, + 0x9f,0x3e,0x22,0xdf,0x35,0xcf,0x8e,0x75,0xb9,0x01,0x91,0x77,0x5c,0xb7,0xcb,0x9c, + 0x63,0xda,0xbe,0x88,0xf0,0xf6,0x81,0x00,0xf1,0x56,0x85,0x2c,0x7a,0xf6,0xa3,0x78, + 0xd6,0xd7,0x71,0xc8,0xb0,0x30,0x47,0x45,0x1b,0x87,0x5e,0x98,0xeb,0x8c,0x8f,0x5e, + 0x95,0xf3,0x77,0x8d,0xae,0xc3,0xf8,0xbb,0x57,0x65,0x58,0xd8,0x1b,0x97,0xe4,0xfd, + 0x6b,0xd8,0xca,0x7e,0x09,0x18,0x62,0xee,0xda,0xb9,0xf2,0xeb,0xb6,0xd0,0x7d,0x00, + 0xe9,0xef,0x5e,0x31,0xe2,0xc9,0x5a,0x6d,0x5a,0x62,0xad,0xc3,0x33,0x67,0xfe,0xfa, + 0x35,0xec,0x13,0x49,0x88,0x98,0xfe,0x35,0xe2,0xda,0xdb,0x96,0xbb,0x2f,0xc6,0x08, + 0xe0,0xfe,0x3f,0xfd,0x7a,0xcb,0x22,0x8f,0xbd,0x52,0x5e,0x9f,0xa9,0xfa,0x5f,0x1d, + 0x55,0xf7,0x30,0xf4,0xfc,0xe4,0xff,0x00,0x2f,0xf3,0x2f,0xe8,0x29,0xb6,0xd5,0x4a, + 0x9d,0xa4,0x93,0xce,0x40,0xf5,0xf5,0xae,0x9f,0x4e,0x91,0xad,0x2c,0x9d,0xc1,0xcb, + 0xc8,0x0a,0xe7,0x04,0xf1,0xf5,0x3c,0x57,0x3d,0xa2,0x00,0x96,0x31,0x36,0x00,0xc9, + 0xc8,0x6e,0x07,0x73,0x5b,0x33,0x48,0x45,0xaa,0x63,0xe6,0x5e,0x47,0x4c,0xfe,0xa6, + 0xbe,0xa2,0xa2,0xbb,0xb1,0xf9,0x24,0x5d,0xb5,0x19,0x15,0xbb,0x4d,0x01,0x62,0x55, + 0x95,0x47,0x23,0x76,0x4f,0xe4,0x31,0x4d,0x69,0x86,0xc1,0x18,0xe9,0x8c,0x72,0x71, + 0xfa,0x0a,0x64,0x6a,0xd2,0xc7,0xb4,0x93,0xd7,0xee,0xf5,0x1f,0x90,0xab,0xb6,0xd6, + 0x2d,0x2c,0x45,0xfe,0xe8,0x43,0x83,0xfc,0x39,0xfc,0xaa,0x3d,0x46,0x76,0x3f,0x0f, + 0x65,0x78,0x74,0xfd,0x6e,0x74,0x56,0x08,0xb6,0x2d,0x19,0x6c,0xaa,0x63,0x2a,0xc7, + 0xab,0x73,0xdb,0xb7,0x35,0x43,0xc1,0x56,0x0f,0x73,0xe2,0xbb,0x29,0x02,0x99,0x18, + 0x5c,0x2b,0x1d,0xaa,0x0f,0xf1,0x03,0xd5,0xb8,0xfc,0xf8,0xae,0x8b,0xc1,0x9a,0x5a, + 0xc1,0xe1,0x6d,0x66,0x52,0xbc,0xe1,0x13,0x21,0x57,0xe5,0x05,0x5f,0xf8,0x9b,0xa7, + 0xe1,0x5b,0x5f,0x0e,0x7f,0xb3,0xec,0x35,0x88,0x41,0x50,0xed,0x96,0x38,0xdb,0xb8, + 0x9c,0x29,0x3c,0xe7,0x1e,0x95,0xf3,0x93,0x9d,0xbe,0xb3,0x24,0xbf,0xae,0x53,0xea, + 0x63,0x0f,0x77,0x09,0x17,0xfd,0x7b,0xc5,0x0d,0x2f,0x45,0x92,0x6f,0x88,0xb7,0x2b, + 0xbc,0x4b,0x9b,0x89,0x5b,0xcb,0x71,0xe6,0x13,0x8d,0xdf,0x40,0x7e,0xbd,0x2b,0x23, + 0xc7,0x7a,0x21,0x79,0xa7,0x96,0x2b,0x52,0x63,0x49,0x64,0x67,0xbb,0x39,0x21,0xd9, + 0x9f,0xee,0x80,0xa3,0x6f,0x1f,0x5a,0xf4,0xcf,0x04,0x5e,0xda,0xdc,0xfc,0x53,0xba, + 0x6b,0xa8,0x23,0x76,0xcc,0xaa,0x86,0x55,0x2e,0x40,0xf9,0xb2,0x36,0xaf,0x1d,0xcf, + 0x4f,0x6a,0xda,0xbf,0xd7,0xf4,0xcb,0xb8,0xe4,0xb5,0xfb,0x30,0xbe,0x04,0xe1,0xa3, + 0x58,0xcb,0x29,0xeb,0xd8,0x03,0xfc,0xeb,0x9e,0x8d,0x49,0x43,0x10,0x9d,0xb6,0x8c, + 0x7f,0x51,0xe2,0xa2,0xa5,0x86,0x71,0x7d,0x67,0x27,0xf9,0x18,0xff,0x00,0x0e,0x6c, + 0x6e,0xed,0xb4,0xbb,0x0b,0x13,0xa7,0x66,0xdd,0x11,0xfe,0x79,0x5f,0x60,0x6d,0xe0, + 0x9e,0x36,0xe4,0x93,0x92,0x00,0xe9,0xda,0xba,0xd8,0xbc,0x45,0x73,0xa1,0x5f,0xde, + 0x4b,0xad,0xcf,0x1b,0x69,0x92,0x70,0x2d,0x51,0x19,0x01,0xc7,0x18,0xef,0xdb,0xdb, + 0x9a,0xc8,0xb6,0xf1,0xd3,0x69,0x17,0x56,0xc5,0x61,0x86,0xca,0x08,0x64,0x52,0x44, + 0xd3,0x25,0xbf,0xca,0x08,0xe0,0x64,0x93,0xd3,0xda,0xb1,0xfe,0x23,0xd8,0xe9,0x7e, + 0x26,0xb7,0xb8,0xd5,0xf4,0x19,0xed,0x75,0x6b,0xb8,0x9c,0x49,0x3c,0x30,0xc7,0x2b, + 0xaa,0xa6,0x39,0x3b,0xce,0x17,0x8e,0x32,0x31,0xd3,0x27,0x3c,0x57,0x25,0x68,0x42, + 0x58,0x9e,0x6a,0xea,0xca,0x4a,0xd7,0xf3,0xbf,0x7e,0x9d,0x0d,0xf0,0xf3,0xa8,0xf0, + 0xdc,0xb8,0x77,0xac,0x5b,0x6d,0x77,0x56,0xed,0xd7,0xa9,0xa3,0xa2,0x6a,0xfe,0x1d, + 0x5b,0xfd,0x43,0x59,0x92,0x33,0x2f,0xd9,0x40,0x70,0xd1,0xa2,0xa3,0x0e,0xb8,0x04, + 0xb3,0x63,0x3c,0x76,0x19,0xa9,0xbc,0x41,0xe3,0xeb,0x1f,0x13,0xf8,0x71,0x35,0x3b, + 0x7b,0x39,0x92,0x5b,0x79,0x3e,0xce,0x04,0x21,0xd0,0x37,0x4c,0x0c,0xa9,0xe7,0x82, + 0x3b,0xd7,0x96,0xf8,0x7f,0xc4,0x37,0x31,0x78,0x4f,0xc4,0xf3,0x47,0x1d,0xbc,0x12, + 0x2a,0xc6,0xb8,0x8e,0xdc,0x36,0xdc,0xb1,0x07,0x04,0x82,0x07,0xd6,0xb8,0xc6,0xf1, + 0x6e,0xa7,0x3c,0x4b,0x19,0xd4,0x26,0xda,0xa3,0x68,0x45,0x7c,0x60,0x7d,0x06,0x2b, + 0xb2,0x18,0x35,0x5a,0xbc,0xe6,0x9d,0x9c,0x5a,0xb7,0xa5,0x95,0xd7,0xce,0xe6,0x55, + 0x71,0x2b,0x0f,0x87,0xa7,0x19,0x2b,0xa9,0xc5,0xbf,0x9d,0xda,0x4f,0xe5,0x63,0xe9, + 0x1f,0x07,0x6b,0xf6,0x9a,0x87,0x87,0xe4,0x69,0x74,0x6b,0xb8,0xda,0xd5,0x77,0xcb, + 0x2a,0x29,0xf9,0xb2,0xc4,0x8c,0x16,0x6f,0x41,0xd4,0x8a,0xc4,0xb1,0xba,0xd4,0xf5, + 0xdd,0x5d,0xed,0xf4,0xab,0x28,0x85,0xb3,0x3b,0x14,0x2d,0x24,0x45,0x82,0x76,0x2c, + 0x3b,0x76,0xfc,0x6b,0x84,0xf0,0x1d,0xa4,0xda,0xa7,0x81,0xbc,0x53,0x3b,0x6e,0x95, + 0x82,0xc6,0x83,0x7b,0x12,0x7a,0x9e,0x83,0xbf,0x5f,0xc3,0xf1,0xac,0x9f,0x01,0x2c, + 0x96,0xaf,0xaf,0xf9,0xa8,0x15,0xa2,0xd3,0xe5,0x18,0x91,0xfc,0xbc,0x1e,0x3d,0x3a, + 0x9f,0x6a,0xc3,0x91,0xd2,0x78,0x89,0xc6,0x57,0xb3,0x49,0x27,0xaa,0xd5,0x2f,0xf3, + 0x3a,0x63,0x18,0x62,0x3e,0xad,0x4e,0x49,0x2b,0xa6,0xdb,0x5b,0xe8,0xdf,0xe8,0x8f, + 0x4b,0xf1,0xc9,0xd4,0xfc,0x37,0x6e,0x93,0xc7,0x71,0x63,0x73,0x6e,0x0e,0x19,0x63, + 0x96,0x32,0x54,0xe3,0xee,0x90,0x33,0xfc,0xfb,0x56,0x04,0x7a,0x2e,0xab,0xad,0x68, + 0x49,0xa9,0x1b,0x4b,0x39,0x83,0xa9,0x74,0x8e,0x17,0x8c,0xca,0x79,0x3c,0x6d,0x51, + 0x9c,0xe7,0x35,0x53,0xc2,0x7a,0x74,0xf7,0xdf,0x0b,0xf5,0x47,0x94,0x5c,0x3d,0xbb, + 0xdc,0x85,0x20,0x30,0x54,0x1b,0x48,0x27,0xeb,0xff,0x00,0xd6,0xac,0xfb,0x9f,0x10, + 0x5e,0xe8,0x5e,0x0c,0xf0,0xea,0x58,0xcc,0xd1,0x24,0xd2,0x4a,0xce,0xaa,0xa5,0x03, + 0x00,0xfc,0x02,0xdc,0x16,0x07,0x3c,0xfe,0x14,0xd5,0x6a,0xf0,0x8f,0xb3,0x8d,0x9c, + 0xd4,0xad,0x76,0xb7,0x56,0xb9,0x4b,0x09,0x86,0xa9,0x3f,0x6b,0x2b,0xc6,0x1c,0x8a, + 0x56,0x5d,0x1d,0xed,0xd4,0xe4,0x25,0xd2,0xe5,0xfe,0xd6,0xba,0xb4,0x2c,0x63,0xb8, + 0x61,0xb4,0x2c,0x6e,0x32,0x87,0xd3,0x92,0x39,0xf5,0xaa,0x11,0xcd,0xae,0x69,0xd1, + 0xfe,0xef,0x52,0xdc,0x41,0xc0,0x49,0x4e,0xec,0xfa,0xfa,0xd7,0xa1,0xde,0x59,0xc2, + 0x7e,0x2c,0x59,0xaa,0x22,0x0f,0x9e,0x39,0x1d,0x60,0x6e,0x33,0xb7,0x71,0x3b,0x8d, + 0x61,0xf8,0xa7,0xc4,0xdf,0xf0,0x93,0x6b,0x90,0x40,0x6c,0x2d,0xad,0xfc,0x99,0x99, + 0x37,0xc0,0x32,0xd2,0x82,0x40,0xf9,0x98,0xf5,0xe9,0xfa,0x9a,0xf4,0x21,0x8a,0xfa, + 0xc3,0x8c,0x5d,0x34,0xd3,0x8a,0x93,0xbd,0xb4,0x38,0xa5,0x85,0xa9,0x81,0x53,0x9d, + 0x3a,0xee,0x32,0x52,0x71,0x56,0xba,0xbe,0xdd,0x56,0xdb,0x95,0xed,0x7c,0x6b,0xab, + 0xd8,0x45,0x99,0x15,0x88,0x4f,0xbc,0x46,0x40,0x07,0xf1,0xc0,0xfc,0x2b,0x6b,0x49, + 0xf8,0xf3,0x71,0xa3,0xdc,0x29,0x5b,0x8b,0x9b,0x77,0x1f,0xf2,0xd2,0x26,0x23,0xf9, + 0x62,0xb7,0xb5,0x0b,0x2d,0x2b,0x52,0x97,0x56,0xd0,0x34,0xe4,0x93,0x4f,0xbe,0x86, + 0x36,0x75,0x54,0x73,0x24,0x72,0x10,0x01,0x20,0xe5,0xb0,0x38,0xef,0x8e,0x2b,0x83, + 0xf0,0xb7,0x83,0x47,0x89,0x85,0xcb,0xdc,0xcb,0x0d,0xa5,0x95,0xb8,0x25,0xee,0x0a, + 0xee,0x20,0xf6,0x1d,0x40,0xfc,0x49,0xae,0x28,0x7d,0x46,0xb4,0x25,0x52,0x70,0x70, + 0xb5,0xbc,0xb7,0xdb,0x6e,0xe7,0xbd,0xf5,0xfc,0xf3,0x09,0x56,0x34,0x29,0xd6,0x55, + 0x39,0xaf,0xbd,0x9a,0xd3,0x74,0xdb,0x57,0xd0,0xfa,0x13,0xe1,0xef,0xed,0xbf,0xe2, + 0x7f,0x08,0x97,0x1a,0x6f,0x89,0xdd,0x16,0x59,0x3c,0xd9,0x63,0xb9,0x55,0x90,0x48, + 0xf8,0x00,0xb3,0x6f,0x07,0x27,0x00,0x0c,0xe7,0x3c,0x57,0xb8,0x78,0x77,0xfe,0x0a, + 0x1b,0xac,0xde,0xba,0x0d,0x5e,0xde,0x0b,0xdb,0x6c,0x7c,0xcb,0x63,0x29,0xb6,0x67, + 0xf7,0x2c,0x03,0x11,0xf8,0x11,0x5f,0x9f,0x7e,0x25,0xf0,0x6a,0x78,0x77,0x53,0x96, + 0xce,0x65,0x12,0x74,0x64,0x91,0x0f,0xdf,0x04,0x64,0x11,0x83,0xfd,0x6b,0x9c,0x5b, + 0x23,0x6d,0x26,0x6d,0xee,0xe7,0x81,0xb3,0xd1,0x4d,0x74,0xc7,0x2f,0x8d,0x48,0x29, + 0x61,0xeb,0x3b,0x3d,0xba,0xaf,0xd0,0xf3,0xeb,0x67,0x54,0x9d,0x49,0x53,0xcc,0x30, + 0x50,0x72,0x5a,0x36,0xbd,0xd7,0xf7,0xab,0x9f,0xb1,0xde,0x0d,0xfd,0xb5,0x7e,0x16, + 0xea,0x86,0x2f,0xed,0x2d,0x2e,0xf3,0x4d,0xb9,0xc8,0x63,0x3c,0xc0,0x5d,0xe0,0x8e, + 0x99,0x7c,0x97,0x38,0xfa,0x56,0xb7,0xc6,0x5f,0x8a,0xbe,0x14,0xf8,0x8f,0xe1,0xcd, + 0x30,0xf8,0x73,0x57,0xb4,0xd5,0x8c,0x17,0x22,0x67,0x8d,0x42,0x79,0x89,0xf2,0x30, + 0x07,0x63,0xc9,0x13,0x8e,0xb8,0xcc,0x6d,0xbb,0x9e,0x33,0x93,0x5f,0x8e,0x76,0xda, + 0xd6,0xb7,0x6b,0x1e,0x20,0xbd,0x33,0x48,0x0f,0xdc,0x93,0x91,0xf8,0x57,0x4b,0xe1, + 0xcf,0x8a,0x9a,0xc6,0x99,0xab,0x5b,0xc3,0x74,0xc6,0x06,0xdc,0x00,0x92,0x37,0xe8, + 0x7b,0x71,0x55,0xc9,0x8c,0xa0,0xaf,0x68,0xc9,0x2e,0xda,0x33,0x38,0xd3,0xc8,0xb1, + 0xd2,0x51,0x84,0xa7,0x4a,0x4f,0x4d,0x6d,0x28,0xfd,0xfb,0x9f,0xa7,0xfe,0x1c,0xb9, + 0x94,0xf8,0x03,0xc7,0xd7,0x32,0xef,0x33,0x45,0x63,0x02,0x91,0x2b,0x4c,0x65,0x19, + 0x97,0xbf,0x9b,0x1a,0xca,0x07,0x1d,0xdd,0xc7,0x1d,0x47,0x5a,0xf9,0xbf,0x45,0x87, + 0xed,0x3f,0xb4,0x5f,0x85,0xe0,0xce,0x7c,0xbb,0x58,0xcf,0xe7,0x29,0xff,0x00,0x0a, + 0xea,0xbe,0x10,0xfc,0x60,0x8f,0x55,0xf8,0x43,0xe3,0x3d,0x1e,0xf4,0x05,0xbb,0x9e, + 0x18,0xb6,0x94,0x04,0x82,0xca,0xfb,0x87,0xc9,0xf7,0x46,0x72,0xc4,0xb6,0x33,0xc7, + 0x39,0xe0,0x57,0x96,0x78,0x1b,0x5d,0xd5,0xa4,0xfd,0xa1,0xa4,0x92,0x1c,0x4f,0xb6, + 0x68,0x6d,0xa0,0x96,0x58,0xbe,0x58,0x40,0x27,0xe5,0xdc,0x06,0x73,0x92,0x5b,0x19, + 0xaf,0x43,0x0b,0x56,0x35,0x69,0xba,0x91,0xd8,0xf9,0xdc,0xc7,0x03,0x53,0x01,0x5e, + 0x58,0x6a,0xbb,0xaf,0xc7,0xcc,0xfd,0x6c,0x1a,0x85,0xad,0x94,0x28,0x67,0xb8,0x8a, + 0x00,0xdc,0x2f,0x98,0xe1,0x72,0x7d,0x06,0x6b,0xc3,0x3e,0x37,0xdc,0x41,0x27,0x8f, + 0x6c,0x66,0x42,0x9e,0x72,0xd8,0x21,0x8d,0x81,0x45,0x97,0x99,0x24,0xfb,0xa7,0x72, + 0x49,0xdb,0xa2,0x97,0x1f,0xec,0x77,0x3c,0x94,0xfe,0x3b,0xd7,0x6c,0x75,0x48,0x84, + 0x57,0x76,0x96,0x2b,0x19,0xf2,0xe2,0x29,0x01,0x22,0x55,0xe7,0x7b,0x33,0x31,0x19, + 0x38,0xc7,0xce,0x33,0x93,0x90,0x3f,0x88,0x0e,0x8f,0xc6,0x1a,0x4e,0xab,0xe2,0x5b, + 0x9b,0x3b,0xf8,0x04,0xc7,0x4c,0x7b,0x08,0x92,0x4b,0xc9,0x6e,0x04,0x10,0x6e,0xde, + 0xfc,0x33,0x33,0xb2,0x91,0xf3,0x01,0x86,0x85,0xba,0x8e,0x79,0xa7,0xed,0x39,0x93, + 0x47,0x9e,0x91,0x0e,0xa7,0xa5,0xc3,0xa9,0xdd,0xf8,0x02,0xc2,0xff,0x00,0x4d,0x8e, + 0xea,0xda,0xe6,0x78,0x45,0xc2,0x5d,0xc2,0x4e,0x33,0x24,0xcd,0x82,0xad,0x1a,0x60, + 0x9f,0x2c,0x67,0x2a,0x0f,0xd7,0x24,0x9f,0xa3,0x61,0x8a,0x38,0x57,0x11,0xc6,0xa8, + 0xb9,0xc8,0x0a,0x31,0x5f,0x2e,0x47,0xe2,0xfd,0x11,0x7e,0x21,0xf8,0x2f,0x49,0xd3, + 0xae,0xa2,0xd6,0xee,0x34,0x8f,0x21,0x2e,0x2d,0xf4,0x4d,0x97,0x7e,0x59,0x02,0xe3, + 0x39,0x31,0x46,0x14,0x60,0xb2,0x93,0xca,0xe3,0x3f,0x77,0x8c,0x8f,0xa3,0x4e,0xa9, + 0xab,0xdc,0xff,0x00,0xc7,0xb6,0x8a,0xd1,0x03,0xfc,0x57,0xb3,0xaa,0x0f,0xc9,0x37, + 0x9a,0xe3,0xa1,0x38,0xc6,0xa4,0xdd,0xb5,0xf2,0x4d,0xf4,0x37,0x9a,0x6d,0x44,0xd6, + 0x88,0x83,0x3b,0x91,0x8c,0xed,0x1d,0x3e,0xa6,0xa2,0x9a,0x36,0x67,0xdc,0x39,0x04, + 0xe3,0x1e,0x95,0x47,0xec,0x5a,0xbd,0xc4,0x79,0x92,0xee,0x0b,0x49,0x18,0xfc,0xdf, + 0x67,0x88,0xbe,0x07,0xa0,0x2c,0x7a,0xfb,0xe3,0xf0,0xa8,0x9f,0xc2,0x50,0x5c,0x73, + 0x7b,0x7f,0x7d,0x7a,0x3a,0xe2,0x4b,0x83,0x1a,0xff,0x00,0xdf,0x31,0xed,0x07,0xf1, + 0xad,0xa5,0x09,0xd5,0x87,0x27,0x27,0x5b,0xea,0xed,0xfe,0x66,0x49,0x25,0xd4,0xe4, + 0x3e,0x2c,0x5f,0x25,0x87,0x83,0xfc,0x46,0xc6,0xe1,0x62,0x2f,0x1a,0xc1,0x1b,0x33, + 0x05,0xc9,0x6f,0x2c,0x63,0x27,0xea,0x6b,0xe7,0x5d,0x1d,0xbc,0xc7,0x8a,0x38,0x0d, + 0xba,0x64,0x86,0x77,0x2e,0x0e,0xe1,0xd3,0x93,0xfc,0x20,0x0c,0xe4,0x0a,0xf6,0x2f, + 0x8d,0x30,0x68,0xf6,0xd7,0x76,0x7a,0x38,0x4b,0x55,0xb6,0xf2,0xbc,0xd3,0x6c,0xe1, + 0x4a,0xe4,0x92,0x37,0x60,0xf7,0x38,0xeb,0x5e,0x5f,0x6f,0xe1,0x8f,0x0e,0x07,0x3b, + 0x74,0xbb,0x37,0xe4,0xe3,0x80,0x7f,0x95,0x7c,0xfe,0x2a,0xea,0xa4,0xa2,0xfa,0x1e, + 0xa5,0x04,0x94,0x6f,0xdc,0xd3,0xb6,0x9e,0x3f,0xed,0xcd,0x3e,0x46,0x78,0x20,0xb7, + 0x37,0x27,0x68,0xb7,0x89,0x4b,0x7c,0xa1,0xbe,0x66,0x2b,0xd3,0x9c,0x1e,0xbc,0xe0, + 0xfe,0x3f,0x1f,0xf8,0x9a,0x58,0xaf,0xfc,0x41,0xa8,0xdc,0x0b,0xb9,0x00,0x92,0x77, + 0x60,0x14,0x48,0x46,0x0b,0x1e,0xe1,0x48,0xfc,0x8d,0x7d,0x4f,0xab,0xfc,0x3d,0xd1, + 0x2f,0xad,0x19,0xa2,0xb4,0xfb,0x2c,0xc1,0x48,0x49,0x2d,0x6e,0x24,0x89,0xd7,0x23, + 0x1c,0x15,0x60,0x47,0x06,0xbc,0xd9,0xfe,0x09,0x05,0x6d,0xb1,0xdd,0xea,0x01,0x07, + 0x4f,0xf8,0x98,0x4e,0x7f,0x9b,0xd6,0xd8,0x2c,0x75,0x3c,0x2c,0x5c,0x64,0x9e,0xa3, + 0xad,0x41,0xd6,0x69,0xa6,0x7c,0x0f,0x71,0x76,0xb3,0xc1,0x2c,0x71,0xe1,0x9c,0xa9, + 0x03,0x6b,0xa9,0x04,0xe3,0xb7,0x35,0xe6,0xda,0x87,0x86,0x35,0x19,0x80,0x63,0x6b, + 0x29,0xd8,0x48,0xd8,0x17,0x3c,0x7f,0x9c,0x57,0x43,0x3f,0xc3,0x4d,0x66,0xd1,0xca, + 0xa3,0x4a,0x08,0xef,0x95,0x6f,0xea,0x2a,0xbb,0xf8,0x6f,0xc4,0xb6,0x58,0x28,0xf3, + 0x71,0xdc,0xa3,0x0f,0xe5,0x9a,0xfb,0x3c,0x3e,0x5d,0x0c,0x22,0x7e,0xcb,0xa9,0x86, + 0x63,0x9e,0x56,0xcd,0x9c,0x1e,0x25,0xaf,0x76,0xf6,0xb2,0xb6,0xff,0x00,0xf0,0xc6, + 0x65,0x94,0xe7,0x4d,0xb4,0x8e,0x19,0xa1,0x9a,0x37,0x5c,0xe7,0x28,0x71,0x57,0xed, + 0xaf,0xad,0x27,0x5c,0x34,0xc0,0x2a,0xfc,0xc7,0x78,0xc7,0x3f,0x88,0xa7,0x7d,0xbb, + 0xc4,0xb6,0xa7,0x0e,0xde,0x67,0xa8,0x66,0xeb,0xf9,0xd3,0x5b,0x5c,0xd4,0x71,0x8b, + 0x8d,0x2a,0x29,0x7e,0x91,0xa9,0x27,0xf2,0xae,0x87,0x46,0x4c,0xf2,0x15,0x44,0xf6, + 0x66,0xee,0x9f,0x36,0x8e,0x61,0x74,0x99,0xe5,0x52,0xfc,0x29,0x89,0x95,0xc0,0xfc, + 0x0e,0x3d,0xaa,0x3f,0x3a,0x38,0x76,0xc3,0x01,0x2c,0x82,0x4d,0xfd,0x31,0xbb,0xd3, + 0x23,0xff,0x00,0xaf,0x58,0x4d,0xab,0xd8,0x30,0xcd,0xd6,0x84,0x17,0xd4,0x80,0xc9, + 0xfc,0xaa,0x25,0xbd,0xd0,0x9b,0x22,0x35,0xba,0xb4,0xcf,0x68,0xe5,0xe3,0xf5,0xac, + 0x9d,0x22,0xd3,0xea,0x7b,0x0e,0x8d,0xe2,0xff,0x00,0x0e,0x43,0xa3,0x49,0x69,0x77, + 0x04,0xa2,0x79,0xb6,0x79,0xf2,0x47,0x16,0xe2,0xe4,0x75,0xf9,0x8b,0x9d,0xbd,0x4f, + 0x41,0xde,0xb3,0xb4,0xef,0x10,0x8d,0x1f,0xc4,0x82,0xf2,0xd2,0x28,0x5f,0x4f,0x59, + 0x18,0x44,0x93,0x44,0x1c,0xec,0x39,0x00,0x90,0x71,0x93,0x8e,0x7e,0xa2,0xbc,0xe2, + 0x26,0xd3,0xdb,0xfd,0x5e,0xb3,0x71,0x11,0xf4,0x95,0x03,0xd6,0xfc,0x1a,0x82,0xb2, + 0x2c,0x63,0x51,0xb6,0xb8,0x03,0x03,0x74,0x80,0xa9,0xfe,0x55,0xe4,0xac,0xb6,0x10, + 0xe7,0xb3,0x6d,0x4f,0x75,0x73,0xd9,0x96,0x67,0x56,0x6a,0x9f,0x32,0x49,0xc3,0x66, + 0x91,0xed,0x16,0xba,0x9d,0x96,0x8b,0xa8,0xff,0x00,0xc2,0x43,0x15,0xed,0xbc,0xa1, + 0xd0,0x95,0x81,0x4c,0x48,0xca,0x4a,0xfc,0xc0,0xaa,0x64,0x8c,0x93,0xed,0xf9,0x57, + 0x14,0x34,0xfd,0x7b,0xc4,0x2e,0xc4,0xcd,0x79,0x2c,0x2c,0x73,0xcb,0x79,0x71,0x81, + 0xf8,0x91,0x9f,0xc3,0x35,0x9f,0xa0,0xf8,0x92,0x2d,0x1a,0xe3,0xed,0x3f,0xd9,0xf1, + 0x5f,0x32,0xae,0x15,0x44,0xeb,0xc1,0xf5,0x19,0xcf,0x3c,0x7e,0xb5,0x35,0xef,0xc5, + 0x4d,0x60,0xb2,0xaa,0x69,0x12,0x43,0x18,0x3b,0x4b,0x46,0x44,0x87,0x1e,0xbd,0x6b, + 0x8b,0x0f,0x81,0xab,0x86,0x93,0x6b,0xde,0x6e,0xca,0xef,0xb2,0xd8,0xe8,0xc5,0xe3, + 0xe9,0xe2,0x94,0x57,0x2a,0x8a,0x57,0xd1,0x77,0x7d,0x4e,0x8b,0x43,0xf8,0x4a,0x75, + 0x0d,0x62,0xca,0xce,0xe6,0xee,0x3b,0x57,0x98,0x3b,0x03,0x1e,0x64,0x27,0x68,0x1c, + 0x73,0xb7,0xd6,0xba,0xad,0x2b,0xc2,0xd6,0x5e,0x08,0x4d,0x7b,0xed,0x53,0x43,0x3d, + 0xc4,0x76,0x72,0x05,0x89,0xd4,0xfc,0xc7,0x1c,0xe0,0x82,0x7f,0xc2,0xb9,0x68,0x3c, + 0x59,0xa1,0x4d,0xae,0xc7,0x35,0xcd,0xdd,0xc4,0xf2,0x47,0x08,0x2a,0xb2,0xa3,0x11, + 0xbd,0x9b,0x27,0x00,0x0c,0x0c,0x6d,0x1f,0x9d,0x66,0x7c,0x55,0xf8,0x91,0x2f,0x88, + 0xae,0xe1,0xb3,0xfb,0x5a,0x47,0x65,0x1c,0x40,0xf9,0x29,0xb6,0x3c,0x92,0x73,0xc8, + 0x5e,0x3d,0x2b,0x96,0xbd,0x0c,0x56,0x22,0xa2,0xa7,0x7f,0x75,0xda,0xfe,0x56,0x77, + 0xd3,0xb9,0xbe,0x17,0x11,0x85,0xc3,0x41,0xd4,0x6b,0xde,0x57,0xb5,0xba,0xdd,0x5b, + 0x5e,0xc3,0xa0,0x86,0xda,0xe3,0xc1,0xfe,0x23,0x30,0xa1,0x4f,0x34,0xc2,0x7c,0xb3, + 0x26,0xdc,0x61,0xbf,0xba,0x3e,0xf7,0xaf,0xa0,0xe6,0xb8,0x99,0xfc,0x31,0x35,0x8e, + 0x8a,0x9a,0x94,0xc3,0x16,0xd2,0xcb,0xe5,0xa1,0xce,0x0e,0x79,0xff,0x00,0x0a,0xeb, + 0xbc,0x09,0xae,0x7f,0x65,0x49,0x2c,0x8d,0x2c,0x52,0xdb,0x18,0xbc,0xa9,0x2d,0x44, + 0x8a,0x1a,0x50,0x47,0xa9,0x07,0x03,0xa6,0x4f,0xe1,0x58,0xff,0x00,0x10,0xbc,0x58, + 0xda,0xdd,0xe4,0x56,0x50,0x5a,0x8b,0x0b,0x2b,0x55,0x5d,0xb6,0xe4,0x6e,0x60,0x71, + 0xdc,0x9f,0xaf,0x60,0x3e,0x95,0xb5,0x38,0xe2,0x29,0x62,0x65,0x08,0xc6,0xf1,0x6e, + 0xed,0xf9,0x5a,0xd6,0xf5,0x2e,0xac,0xf0,0x95,0xf0,0x71,0x9c,0xe5,0xef,0xc6,0x36, + 0x4b,0xce,0xf7,0xbd,0xfb,0x6a,0x6d,0xf8,0x53,0x56,0x9f,0x4a,0xf8,0x6b,0xe2,0x13, + 0x68,0xf2,0xc7,0x13,0xc9,0x16,0x42,0x28,0xc1,0x3b,0x87,0x52,0x7a,0x76,0xa8,0x7c, + 0x1b,0x78,0xd7,0x9a,0x6f,0x88,0xaf,0x15,0x36,0x4a,0xd6,0x6c,0x8c,0x51,0x37,0xe4, + 0x9c,0xf4,0x3f,0xc3,0xf5,0xab,0x76,0x97,0x1e,0x15,0x7f,0x09,0xbe,0x9c,0xd7,0xd2, + 0xda,0xcb,0x28,0x8c,0xce,0x65,0xdc,0xc7,0xcc,0x55,0x19,0x0a,0x02,0xe3,0x19,0x1d, + 0xcd,0x58,0xf8,0x58,0x60,0x9e,0xcb,0x51,0xd1,0xe6,0x31,0xc4,0xba,0x82,0x04,0x59, + 0x24,0x7f,0x2c,0xee,0x19,0xc7,0x63,0x90,0x73,0xed,0xf9,0x91,0x5c,0x35,0x5b,0xf6, + 0x55,0xe5,0xc8,0xd3,0xe6,0x4f,0x6e,0x9a,0x6d,0xdf,0x63,0xd1,0xa4,0xa3,0x0a,0xd8, + 0x68,0xa9,0xc5,0xae,0x56,0xb4,0x6b,0x7d,0x7e,0xed,0xd1,0x9d,0x1a,0xcb,0x6b,0xf0, + 0xb0,0x94,0x99,0x55,0x9b,0x50,0x1c,0x07,0x25,0xc8,0xd9,0xcf,0x1d,0x31,0x5b,0x0f, + 0x67,0xa0,0x0d,0x0b,0xc3,0xc9,0xac,0xdc,0xcb,0x68,0xd1,0x42,0x25,0x89,0x64,0x25, + 0x92,0x40,0x48,0x27,0x85,0x07,0x1f,0x98,0xad,0xff,0x00,0x18,0xf8,0x4a,0x0f,0x0e, + 0xf8,0x36,0xd7,0x48,0x37,0x44,0xc8,0xf7,0x2b,0x3c,0xa5,0x50,0x18,0xc7,0x05,0x47, + 0x38,0x07,0x9c,0x8c,0x7e,0x35,0xce,0x78,0xab,0xc2,0xf2,0x6a,0xcf,0xa3,0xc1,0x07, + 0x94,0xc9,0x15,0x84,0x59,0x92,0x31,0x8e,0x49,0x23,0x9c,0xf7,0xe0,0xd7,0x3c,0x1c, + 0x71,0x2e,0x2d,0x49,0xc5,0x4a,0x52,0x77,0xeb,0x6b,0x1d,0x7e,0xd1,0xe1,0x61,0x3f, + 0x75,0x49,0xc6,0x11,0x56,0x7b,0x5e,0xe5,0x0d,0x0b,0x56,0x8f,0xc4,0xbf,0x14,0x12, + 0xfd,0xa2,0x8d,0x6d,0xd8,0xb6,0xdf,0xb4,0x0c,0x28,0x55,0x8c,0x80,0x48,0x1d,0x3a, + 0x0e,0x3f,0x53,0x59,0x57,0x5a,0x76,0x97,0x6d,0xe3,0x4d,0x36,0x3d,0x3a,0xf8,0x6a, + 0x50,0x4d,0x3a,0x33,0x3b,0x27,0x96,0xaa,0x4b,0xe3,0x69,0x1d,0x7f,0xfd,0x75,0xbb, + 0xf0,0xfb,0xc3,0x77,0x7a,0x3f,0x89,0xd6,0xe6,0x6b,0x7d,0x91,0xc7,0x13,0x9d,0xe0, + 0x07,0x1f,0x74,0xf6,0x15,0xca,0xf8,0x66,0x25,0x6f,0x1b,0xe9,0xe4,0xa2,0xc0,0x3e, + 0xd4,0x87,0x0c,0x77,0x81,0xf3,0x03,0xd3,0xbf,0xd2,0xbb,0x79,0x23,0x0a,0xb5,0x3d, + 0x9c,0xb4,0x8c,0x12,0xb7,0xde,0x70,0x46,0xa3,0xab,0x46,0x97,0xb5,0x8d,0xdc,0xea, + 0x37,0x7e,0xdf,0x0f,0xe6,0x77,0xb3,0xe9,0x17,0x5a,0x3e,0xb7,0xe2,0x3d,0x76,0xea, + 0xdd,0xa3,0xb1,0x11,0x4a,0xb0,0xba,0xfc,0xa8,0xdb,0xbe,0x55,0xc6,0x3b,0x7f,0x88, + 0xae,0x3a,0x36,0x27,0xe1,0xb5,0xcb,0x2c,0x8d,0x99,0x35,0x25,0x52,0x8a,0x30,0xbc, + 0x26,0x79,0x3f,0xd2,0xb7,0xf5,0x0d,0x4a,0xeb,0xc5,0x10,0x78,0x93,0x4c,0xb8,0xb8, + 0x92,0x54,0xb3,0x96,0x4b,0xc8,0x64,0x9a,0x42,0x02,0x05,0x62,0x0a,0x6d,0xf4,0x20, + 0xf0,0x06,0x31,0x58,0x57,0x31,0x18,0xbe,0x1a,0x5b,0xaf,0xef,0x0a,0x4b,0xa9,0x96, + 0xc7,0x44,0x04,0x47,0x8e,0x3d,0x4d,0x73,0x61,0xe3,0x24,0xa2,0xaa,0x7c,0x5c,0xd1, + 0x5a,0x76,0x4a,0xe8,0xf4,0x71,0x12,0x83,0x94,0x9d,0x2b,0xf2,0xf2,0xcd,0xeb,0xbd, + 0xdb,0xb3,0x2d,0x78,0xd8,0x44,0x34,0xfd,0x21,0x19,0x77,0xcc,0x9a,0x64,0x05,0x7c, + 0xbe,0x8a,0x4e,0x49,0xdd,0xef,0xcd,0x79,0xfe,0xd0,0xf2,0x32,0xfd,0xde,0x71,0x8c, + 0x7f,0x5a,0xf4,0x3f,0x1e,0x4a,0xa9,0x7d,0x6d,0x6b,0x24,0xa3,0xcb,0x8f,0x4e,0x85, + 0x07,0x96,0xa0,0x00,0x42,0xe4,0x7f,0x3f,0xd6,0xbc,0xfe,0xe0,0x14,0x76,0x19,0x0c, + 0x72,0x7e,0xe7,0x02,0xbd,0xec,0xbb,0xfd,0xda,0x07,0xc8,0x66,0xcf,0xfd,0xb2,0xa7, + 0x96,0x9f,0x72,0x26,0xb2,0x21,0x2e,0x92,0x33,0x26,0x14,0x11,0x80,0x39,0x00,0xfa, + 0xf5,0xf7,0xac,0x4d,0x70,0x3a,0x6a,0xf1,0xbb,0xbe,0x08,0x20,0x82,0x07,0x5e,0x78, + 0xfa,0x56,0xac,0x52,0x36,0xd6,0xc0,0xd8,0xc9,0xd0,0xa7,0xf8,0xd7,0x33,0x7d,0x3b, + 0xff,0x00,0x6a,0x22,0x3b,0x96,0xcb,0x2f,0x04,0xd7,0xa6,0xa3,0xad,0xcf,0x21,0x1f, + 0x64,0xfe,0xce,0x6f,0x2e,0xa1,0xe3,0x1b,0x4d,0x1d,0x5d,0x54,0xea,0xb1,0x9b,0x40, + 0x5d,0x8a,0x8d,0xdd,0x79,0x3d,0x86,0x01,0x1f,0x42,0x6b,0xeb,0x9f,0x86,0x7f,0xb0, + 0x26,0xb3,0xe1,0xaf,0x88,0x37,0x3e,0x2a,0xd5,0x7c,0x51,0x63,0x0b,0xcf,0x2e,0xf7, + 0xb6,0xb2,0x81,0xe6,0x2e,0xbc,0xfc,0x85,0x98,0xa8,0x03,0x90,0x7a,0x1e,0x54,0x57, + 0xc4,0xbf,0x06,0xb5,0x37,0xd2,0x7c,0x77,0xe1,0xeb,0x84,0x6d,0xac,0x97,0x91,0x60, + 0x8e,0xd9,0x20,0x1a,0xfd,0x8a,0xb7,0xf0,0xed,0xfe,0xa3,0x0c,0x72,0xdd,0xf8,0x8a, + 0xf9,0xd2,0x45,0x0d,0xe5,0x5a,0x24,0x70,0x47,0x83,0xe8,0x42,0x97,0x1f,0xf7,0xdd, + 0x7c,0xbe,0x51,0x2e,0x6a,0x73,0x85,0xaf,0xa9,0xfa,0x37,0x1a,0x52,0xe4,0xc5,0xd2, + 0xab,0xde,0x3f,0x91,0xca,0xc7,0xfb,0x3f,0xf8,0x5d,0x2f,0x7e,0xd7,0x74,0x67,0x99, + 0x82,0x80,0x62,0x59,0x04,0x71,0x8c,0x77,0x00,0x7c,0xc0,0xfb,0xee,0xec,0x2b,0x1b, + 0xc6,0x9f,0x0b,0x7e,0x15,0x6b,0xa5,0x2c,0xb5,0x8b,0xb2,0xc9,0x14,0x4b,0x02,0xe9, + 0xb1,0x6b,0x13,0x6d,0x08,0xbd,0x07,0x92,0xb2,0x73,0xf9,0x57,0xa4,0x7f,0xc2,0x01, + 0xa1,0xc9,0xcd,0xd5,0x91,0xd4,0x8f,0xae,0xa3,0x2b,0xdd,0x7f,0xe8,0xc2,0xd8,0xfc, + 0x2b,0x52,0xc7,0x4e,0xb4,0xd3,0xdd,0xe3,0xb5,0xb6,0x8a,0xda,0x20,0x00,0x09,0x0a, + 0x05,0x03,0xaf,0x61,0x5e,0xd4,0xa0,0xf4,0x8f,0x2a,0xd7,0xe7,0xfe,0x47,0xe7,0xbc, + 0xd6,0xd5,0x33,0xc5,0xbe,0x1d,0x7c,0x2f,0xf0,0x47,0xc3,0x7b,0x95,0xbf,0xf0,0xdf, + 0x85,0xb5,0x59,0xef,0xa2,0x79,0x0c,0x72,0x47,0x6f,0x24,0x43,0x6b,0x12,0x14,0x7e, + 0xf8,0xa2,0x9f,0x94,0x81,0x5e,0xa2,0x35,0x3f,0x13,0x5e,0x82,0x6d,0xf4,0x5b,0x4b, + 0x25,0x3d,0x1a,0xfa,0xf7,0xe7,0x1f,0xf0,0x08,0xd1,0x81,0xff,0x00,0xbe,0xeb,0xa0, + 0x9c,0x0d,0x83,0x8e,0xe3,0xf9,0xd4,0xa3,0x00,0x76,0xa2,0x9d,0x2e,0x46,0xe0,0x9d, + 0x97,0x90,0x4a,0x7c,0xce,0xec,0xe5,0xe5,0xd2,0xfc,0x4b,0x75,0x1f,0xfa,0x46,0xbf, + 0x05,0x98,0x27,0xa6,0x9f,0x62,0x03,0x0f,0xf8,0x14,0xac,0xe0,0xff,0x00,0xdf,0x22, + 0x9c,0xbe,0x04,0xb5,0x9b,0x26,0xff,0x00,0x50,0xd4,0xf5,0x33,0xdc,0x4f,0x78,0xe8, + 0x87,0xea,0x91,0x95,0x43,0xff,0x00,0x7c,0xd7,0x41,0x33,0x82,0x06,0x0f,0x71,0xfc, + 0xe9,0xd2,0x5c,0x47,0x14,0x65,0x9d,0xd5,0x14,0x77,0x63,0x8a,0xb5,0x08,0x73,0x3b, + 0xeb,0xea,0xc9,0xbb,0xe8,0x78,0x4f,0xc4,0x6f,0x00,0x78,0x4a,0xd3,0x4b,0xd6,0xf5, + 0x47,0xf0,0xde,0x8b,0xf6,0x9b,0x77,0x48,0xa2,0x92,0x6b,0x24,0x6c,0x64,0xf3,0xc6, + 0x39,0x27,0xd4,0xe6,0xbc,0x72,0x38,0x3c,0x24,0x9f,0xbd,0xb8,0xf0,0xce,0x92,0x8a, + 0xd1,0x92,0xa5,0x6d,0x42,0x6e,0x6f,0xf6,0x42,0x1e,0x9d,0xbb,0xe3,0xdc,0xd7,0xb2, + 0xfc,0x68,0xf1,0x35,0x85,0x97,0x83,0xef,0xd4,0xdd,0xdb,0x17,0xb9,0xbd,0x06,0x15, + 0x67,0xc8,0x93,0x6b,0xbe,0x71,0x80,0x78,0xe3,0x19,0xe9,0xef,0x5e,0x0f,0x67,0xae, + 0x5b,0x5f,0xea,0x51,0x49,0x2c,0xf6,0x70,0x44,0xa3,0x1b,0x59,0xb7,0x00,0x33,0x9e, + 0xc3,0xdf,0xa6,0x3b,0x57,0xca,0x57,0xb7,0x3b,0xe5,0xfe,0xb5,0x3d,0x6a,0x2a,0xea, + 0xcc,0xe8,0x34,0xef,0x0f,0x78,0x5b,0xc4,0x3a,0xd4,0x11,0x8f,0x0f,0x0b,0x58,0x4d, + 0x94,0xd2,0x24,0x51,0xb4,0xd0,0x89,0x25,0xc1,0x2a,0x4e,0x1f,0x3b,0x46,0x31,0xc1, + 0xa8,0x3f,0xe1,0x18,0xf0,0xb6,0x49,0x3a,0x6c,0x51,0x02,0x72,0xa1,0xb5,0x7b,0xa4, + 0xc8,0xf5,0xc0,0x9a,0xad,0x69,0xfe,0x24,0x86,0x5d,0x6e,0x7b,0x99,0x2e,0x60,0x2a, + 0xb6,0x93,0xac,0x6c,0x57,0x60,0x42,0x54,0x85,0x00,0x01,0xf8,0x0c,0x7a,0xd5,0x0d, + 0x3e,0xf6,0xd7,0xec,0xf8,0xb8,0x5b,0x67,0x90,0x1f,0xbc,0xf1,0xf3,0x8f,0xfb,0xe0, + 0xd7,0x13,0xba,0x7a,0x9d,0x09,0x2d,0x91,0xf0,0xad,0xf1,0x5b,0x9d,0xb3,0x2f,0xca, + 0xff,0x00,0xc4,0x2a,0x8a,0xca,0xa4,0x9c,0xb0,0x24,0x1a,0x98,0x4c,0x49,0x75,0xe0, + 0x1c,0x55,0x5d,0x91,0x4e,0xca,0xa5,0xd5,0x66,0x7e,0x40,0x27,0xef,0x7f,0x9e,0x6b, + 0xf6,0x56,0x92,0xdc,0xf8,0x45,0xae,0xc4,0xdf,0x2b,0x8c,0x15,0x47,0x1d,0xf3,0x50, + 0xc9,0xa6,0xd9,0x4f,0xfe,0xb2,0xca,0x06,0xcf,0xfb,0x03,0x34,0x35,0xb0,0x43,0x86, + 0xe0,0xd3,0x22,0x3b,0x77,0x61,0x88,0xe7,0x03,0x9a,0x39,0x46,0x43,0x2f,0x85,0xb4, + 0xa9,0x89,0xcd,0x90,0x4f,0xf7,0x58,0xaf,0xf5,0xaa,0x57,0x1f,0x0f,0xf4,0x99,0xc1, + 0x05,0x25,0x50,0x7d,0x18,0x1f,0xe6,0x2b,0x5b,0xcd,0x90,0x1e,0x1b,0x3f,0x5a,0x92, + 0x2b,0xa9,0xb7,0x72,0x15,0xb1,0x53,0xca,0xc2,0xec,0xe4,0x6e,0x7e,0x13,0xe9,0xd2, + 0x9c,0xc7,0x20,0x5f,0xf7,0xa1,0x1f,0xcc,0x62,0xb3,0x67,0xf8,0x40,0xbf,0xf2,0xc6, + 0x68,0xfd,0xbe,0x66,0x5f,0xf1,0xaf,0x5a,0xb2,0xd4,0x6d,0x5e,0x10,0xb3,0xa1,0x56, + 0x1d,0xf6,0xe6,0xa4,0x0d,0x61,0x2b,0x12,0x65,0x8c,0x73,0xc6,0x41,0x1c,0x7e,0x55, + 0x9b,0x4b,0xaa,0x35,0xe6,0x69,0x68,0xcf,0x11,0x9b,0xe1,0x4e,0xa3,0x1f,0x31,0x4a, + 0xe7,0xb0,0xd9,0x28,0x3f,0xcc,0x0a,0xa6,0xfe,0x08,0xf1,0x0d,0x99,0xfd,0xdc,0x97, + 0x18,0xf6,0x5d,0xdf,0xc8,0xd7,0xbe,0x0b,0x3b,0x27,0x3f,0x2c,0x88,0x7b,0xf0,0xf4, + 0xe1,0xa4,0x46,0xdf,0x75,0xcf,0xe0,0x6b,0x27,0x18,0x75,0x45,0xf3,0xd4,0xee,0x7c, + 0xf5,0x25,0xa7,0x89,0x2c,0xd7,0x0e,0xc4,0x81,0xff,0x00,0x3d,0x15,0x87,0xf3,0x15, + 0x56,0x4b,0xcd,0x54,0x13,0xe7,0x58,0x41,0x70,0x3b,0xfc,0xaa,0x4d,0x7d,0x1c,0x74, + 0x53,0x8e,0x24,0x38,0xe9,0xc8,0xaa,0xd7,0x1e,0x1f,0x8e,0x55,0xfd,0xe4,0x50,0xc8, + 0x0f,0x1f,0x3a,0x8a,0x9e,0x48,0x3e,0xa5,0x7b,0x59,0x47,0x73,0xe7,0x61,0xab,0x2c, + 0x32,0x07,0x97,0x47,0x2b,0x20,0x39,0x0c,0xa0,0x8c,0x53,0x66,0xd4,0xec,0x6e,0x67, + 0x69,0x64,0x7b,0xb8,0x64,0x63,0xf3,0x62,0x4e,0x3f,0x23,0x5e,0xf5,0x71,0xe0,0x9b, + 0x29,0x08,0x26,0xc6,0x2e,0x7a,0xed,0x18,0xaa,0x17,0x1f,0x0e,0xf4,0xf9,0x41,0x06, + 0xd1,0xd3,0x3f,0xdd,0x24,0xff,0x00,0x8d,0x66,0xe9,0xc6,0xe6,0x9e,0xdb,0xba,0x3c, + 0x81,0xb5,0x4b,0x6b,0x82,0x0a,0x6a,0x06,0x2c,0x4a,0xd2,0xe1,0xa1,0x07,0x96,0xc7, + 0x1f,0x41,0x8a,0xea,0xec,0xbc,0x5f,0x6e,0x8b,0x68,0xd1,0x3d,0xb2,0xbc,0x0c,0x08, + 0x64,0x5c,0x16,0xc7,0xd7,0xdf,0x15,0xbd,0x7d,0xf0,0x9b,0x4d,0x9c,0x1c,0x23,0x27, + 0xfb,0xc8,0x0f,0xf4,0x15,0x8b,0x73,0xf0,0x7e,0xdd,0x48,0x11,0x4a,0xa5,0xbb,0x03, + 0x95,0xfe,0xa6,0xb1,0x9e,0x1e,0x33,0x5a,0xa3,0x68,0x57,0x6b,0x63,0x76,0x6f,0x1c, + 0x45,0xac,0xc0,0x62,0xbb,0x96,0x78,0xd3,0x8f,0x9a,0x07,0x8c,0x9c,0x8e,0xfd,0x2b, + 0x52,0xd7,0xc5,0x96,0x68,0x90,0x47,0x1e,0xa5,0x7a,0xb1,0x41,0x1f,0x94,0x8b,0x73, + 0x08,0x60,0xa0,0x03,0x80,0x0f,0xa0,0x27,0x38,0xaf,0x3f,0x97,0xe1,0x0d,0xea,0xe7, + 0xc9,0xb8,0x24,0xff,0x00,0xb3,0x27,0xf8,0x8a,0xa7,0x2f,0xc3,0xbf,0x10,0xda,0x03, + 0xe5,0x49,0x23,0x63,0x9e,0x00,0x3f,0xc8,0xd7,0x1c,0xf0,0x14,0xda,0xd3,0xf4,0x3a, + 0xe3,0x8c,0x93,0xea,0x77,0x37,0x7e,0x3f,0xbb,0xd0,0x6f,0x16,0x5b,0x5d,0x4a,0xd6, + 0x61,0x22,0x14,0x20,0xa1,0x5c,0x7a,0xe7,0xa6,0x2a,0x39,0x3c,0x4b,0x2d,0xe6,0xa1, + 0xa7,0xf8,0x84,0xc1,0x66,0x5e,0xd5,0x96,0x39,0x23,0xb5,0x9b,0x0c,0xcc,0x0f,0x07, + 0xe6,0x2c,0x72,0x73,0xd7,0xda,0xbc,0xfd,0xf4,0x8f,0x13,0x59,0x9f,0x9e,0x36,0x75, + 0x1c,0x7c,0xea,0x7f,0xc2,0xa0,0x69,0x75,0x48,0x81,0x49,0x74,0xe8,0x99,0x49,0xc9, + 0x0a,0x00,0xcd,0x61,0x2c,0xb6,0x93,0x7c,0xcd,0x6a,0xd5,0xaf,0xe4,0x75,0x43,0x32, + 0xaf,0x08,0xa8,0x29,0x68,0x9d,0xd2,0xf3,0xee,0x7a,0x2e,0xa5,0xe2,0x31,0xa4,0xc7, + 0x79,0x15,0xcd,0x98,0x4b,0x8b,0xfb,0x69,0x18,0x3e,0xe0,0xe4,0x17,0x7c,0xe4,0x9e, + 0x3b,0x0c,0x66,0xa7,0xf0,0xc6,0xb1,0xa1,0x5e,0x68,0x1f,0xd9,0xba,0xe9,0x68,0xe3, + 0x8a,0x71,0x71,0x0c,0x99,0x62,0x33,0xfc,0x4a,0x42,0x83,0xe9,0x5e,0x5d,0x75,0x78, + 0x6e,0x1c,0x3d,0xd6,0x99,0x3e,0xf0,0x36,0xee,0x47,0x70,0x71,0xe9,0xc1,0xa6,0xa6, + 0xa1,0x66,0x8a,0x17,0xce,0xbd,0xb6,0xe7,0xf8,0x98,0x30,0x1f,0x81,0x15,0x8d,0x4c, + 0xae,0x12,0x83,0x8d,0xda,0x6d,0xa7,0x75,0xe5,0xd8,0xe8,0xa7,0x9a,0xd6,0xa7,0x35, + 0x3d,0x1a,0x49,0xab,0x3d,0x9a,0x6e,0xee,0xff,0x00,0x33,0xd0,0xbc,0x5f,0xac,0xc3, + 0xae,0xf8,0x8a,0xe6,0x64,0x8f,0xf7,0x5b,0x02,0x46,0x0f,0x18,0x55,0x5d,0xa3,0x8e, + 0xdd,0x8d,0x72,0x0c,0x8c,0xca,0x18,0x95,0x18,0x38,0xc0,0x1f,0x8d,0x24,0xda,0xaa, + 0x6a,0x37,0x0f,0x2a,0xea,0x51,0xab,0x37,0x69,0x20,0xc6,0x3f,0x23,0x53,0xda,0x5a, + 0xc8,0xec,0x54,0xdd,0x59,0xcc,0x84,0xe7,0x0b,0x21,0x43,0xff,0x00,0x8f,0x0a,0xea, + 0xa3,0x43,0xea,0xf4,0xe3,0x4e,0x3b,0x23,0xce,0xaf,0x5e,0x58,0x9a,0xb2,0xab,0x3d, + 0xdb,0xb9,0x25,0xa4,0x4a,0xf6,0xd2,0xb0,0x51,0xbb,0xd8,0x74,0xe3,0xad,0x71,0x92, + 0xab,0x5c,0x6b,0x01,0xb0,0x4a,0x89,0x17,0xb7,0xd2,0xbb,0xd4,0xb7,0xbb,0x87,0x70, + 0x4b,0x49,0x25,0x81,0xf2,0x18,0x43,0x22,0x39,0xc7,0xe1,0x5c,0xfc,0xba,0x55,0xdc, + 0x7a,0xa0,0x76,0xb6,0x9d,0x60,0x32,0x7c,0xa1,0xd4,0x8c,0x0e,0xd9,0xad,0x56,0x97, + 0x32,0x4b,0x54,0x7b,0x8f,0x83,0xa6,0x36,0x5a,0xc5,0x84,0xc0,0xe0,0xc5,0x22,0x37, + 0xd3,0x0c,0x0d,0x7e,0xcf,0xf8,0x73,0xc5,0x36,0x11,0x78,0x57,0x43,0x96,0xe6,0xea, + 0x28,0x0c,0xd6,0x50,0xb9,0x69,0x5b,0x6a,0xf2,0x80,0xf5,0x3c,0x57,0xe2,0xce,0x8c, + 0x47,0xda,0x10,0x82,0x0f,0x23,0x90,0x7d,0xeb,0xf6,0x37,0xe1,0x0d,0xa5,0x8b,0xfc, + 0x3b,0xf0,0xe5,0xdc,0x36,0x36,0xeb,0x3b,0xd9,0xc7,0xbe,0x54,0x89,0x43,0x31,0x03, + 0x04,0x93,0x8e,0x4f,0x15,0xf1,0x59,0x64,0xe5,0x4e,0x53,0x51,0xd0,0xfd,0x4f,0x8d, + 0x54,0x65,0x1a,0x13,0xf5,0xfd,0x0e,0x90,0xf8,0xcb,0x4d,0x72,0x7e,0xcf,0x33,0x5e, + 0x7f,0xd7,0xa4,0x12,0x4d,0xfa,0xa2,0x91,0x40,0xd6,0x6e,0xe4,0x53,0x2c,0x1a,0x4d, + 0xe4,0x81,0x9b,0x1f,0x3e,0xc8,0xb0,0x00,0xea,0x43,0x30,0x38,0xfc,0x3b,0x55,0xe9, + 0xf2,0xd2,0x42,0x3b,0x6f,0xce,0x07,0xb0,0x3f,0xfd,0x6a,0x90,0x21,0x23,0xef,0xe7, + 0x92,0x6b,0xdd,0x73,0xa9,0x37,0xab,0xfb,0xb4,0xfc,0xef,0xdc,0xfc,0xb5,0xdb,0xa2, + 0x39,0x7d,0x4f,0xc5,0x7a,0xa6,0x9d,0x7d,0x67,0x6d,0x36,0x94,0xa4,0x5c,0xa3,0xcc, + 0x3c,0x89,0xfc,0xd7,0x54,0x42,0x80,0x92,0xa4,0x28,0xea,0xeb,0xc0,0x27,0xbd,0x56, + 0x8f,0xc5,0x2d,0x38,0xff,0x00,0x4b,0xd5,0xee,0x34,0xf5,0xcf,0x2e,0xba,0x3c,0xb0, + 0xa8,0xff,0x00,0x81,0xca,0x19,0x6b,0x47,0x56,0xc3,0x78,0xcb,0x4a,0x42,0x58,0x67, + 0x4d,0xbb,0x19,0x1d,0xbf,0x79,0x6d,0x55,0x2f,0x0d,0xce,0x94,0x16,0xe8,0xf9,0x92, + 0x24,0x11,0x84,0xfb,0x34,0x11,0x8f,0xde,0x30,0x23,0x05,0x73,0x8e,0xdb,0x86,0x3d, + 0xc7,0x7a,0xf2,0xeb,0x62,0x67,0x46,0xab,0x8a,0xd5,0x7a,0xbf,0xd2,0xc6,0xd1,0x8a, + 0x92,0x2d,0x69,0xb3,0xe9,0x1a,0x8d,0xc9,0x0b,0xe2,0x36,0xd5,0x25,0x07,0x02,0x34, + 0xbc,0x4f,0x4e,0xeb,0x1e,0x3f,0x95,0x5b,0xb8,0xf0,0xe6,0x97,0x66,0xa2,0x58,0x74, + 0x98,0x6f,0xa6,0x04,0x64,0xcd,0xfb,0xc7,0x03,0xb9,0x0c,0xd9,0x39,0xf6,0xac,0xdb, + 0xdd,0x35,0x7c,0x45,0x71,0x13,0x5c,0x5b,0xc1,0x35,0xa2,0x3b,0x66,0x29,0x17,0x78, + 0x90,0x10,0x30,0x70,0x7a,0x11,0x8e,0x9e,0xfe,0xd5,0x88,0xc6,0xc7,0xc1,0xb3,0x6a, + 0x1a,0xa0,0x47,0xb6,0x82,0xdf,0x53,0x8e,0x26,0x11,0x1d,0xa8,0x22,0x68,0x23,0x04, + 0x11,0x90,0x36,0x86,0x62,0xdd,0x3a,0x8a,0xd6,0x18,0xa8,0xb6,0xd3,0x87,0xcf,0xfe, + 0x1c,0x6a,0x0d,0xec,0xcc,0xdf,0x89,0xb2,0x43,0x61,0xe1,0xab,0xc9,0x85,0x8d,0x9c, + 0xeb,0x14,0xc0,0x14,0xb8,0x89,0x4a,0x04,0x12,0xc9,0xc7,0x23,0x03,0xad,0x78,0xb5, + 0x9c,0xf6,0xb7,0x64,0x33,0x68,0x3a,0x3e,0xc2,0x4b,0x31,0x92,0x22,0xd9,0x04,0xf1, + 0x80,0x0f,0xbd,0x7a,0x57,0xc6,0xaf,0x15,0x69,0x7a,0x57,0x85,0x88,0x96,0x7b,0x67, + 0x7b,0xdb,0xc3,0xe4,0x2c,0x92,0x1c,0x38,0x12,0x12,0x58,0x63,0x93,0xc1,0xfd,0x7a, + 0xd7,0x8e,0xd8,0x78,0x9b,0x4d,0x16,0xe2,0x38,0xee,0xec,0xb7,0xb8,0x1e,0x61,0xb8, + 0x2d,0x81,0x93,0xd1,0x78,0xce,0x71,0x9c,0x9e,0xc3,0xb9,0x26,0xbc,0xfa,0xd6,0xe6, + 0x6c,0xf4,0x28,0xaf,0x74,0xe8,0x63,0xd2,0xb4,0x99,0x92,0x49,0x67,0xf0,0xae,0x9b, + 0xf6,0x70,0xc5,0x98,0x24,0x45,0x43,0x60,0x70,0x4e,0x58,0x01,0xff,0x00,0xd7,0xa9, + 0xfc,0x17,0xf0,0xe7,0xc2,0x7a,0xfd,0x85,0xdd,0xd6,0xa1,0xa6,0x20,0x97,0xed,0x4e, + 0xa8,0xb0,0x86,0x0a,0xa9,0x85,0x20,0x71,0xf5,0x35,0x42,0x1d,0x63,0x4e,0x23,0xcb, + 0x37,0xda,0x5a,0xa0,0x1b,0xe4,0xda,0xd9,0x38,0x0b,0x85,0x51,0x9e,0xfc,0xf2,0x3f, + 0xfa,0xd5,0xd8,0xfc,0x33,0xfb,0x3c,0x9a,0x04,0xce,0xe1,0x58,0xb5,0xcb,0x90,0x49, + 0x03,0x23,0x0b,0xee,0x2b,0x8e,0x4e,0xea,0xe8,0xdf,0x97,0xa2,0x3f,0x31,0xcc,0x8a, + 0x66,0x52,0x4f,0xce,0x17,0x21,0x47,0xa6,0x71,0x9a,0xf3,0x1d,0x47,0x55,0x9e,0xda, + 0x58,0xd2,0x43,0xb1,0xa1,0x91,0xd4,0x1c,0x9c,0x8f,0x98,0x9e,0x7f,0x9f,0xe3,0x5d, + 0x0c,0xda,0xc3,0xdb,0xf8,0xe7,0xec,0xcc,0xff,0x00,0x23,0x29,0x40,0x0f,0xba,0x03, + 0xfc,0xc5,0x71,0xde,0x35,0x99,0x6c,0xf5,0xab,0x98,0x80,0xdd,0xb8,0x86,0xe4,0xff, + 0x00,0x7b,0xb7,0xb7,0xff,0x00,0x5a,0xbf,0x52,0xc4,0xcb,0x9e,0x37,0x5d,0x1d,0x8f, + 0x8f,0xa2,0xac,0xf5,0xea,0x8e,0xc7,0xc2,0xfe,0x35,0x5d,0x49,0xe1,0xb1,0xbe,0x23, + 0xcd,0x3c,0x2c,0xe5,0xba,0xf5,0xc6,0x6b,0xa9,0x36,0x2c,0x84,0x91,0xeb,0xc5,0x78, + 0x23,0xdd,0xc8,0xad,0x2a,0x41,0x88,0xd1,0x06,0xe3,0x80,0x49,0x1c,0xfe,0x95,0xdd, + 0xf8,0x3b,0xe2,0x5f,0x92,0x45,0xbe,0xa7,0xba,0x78,0x81,0xc2,0xb9,0x39,0x75,0x1e, + 0xfe,0xb4,0xa8,0x62,0x5c,0x55,0xa6,0x5d,0x4a,0x09,0xeb,0x13,0xbb,0x62,0x50,0xe0, + 0x8f,0xca,0x84,0x90,0x86,0x38,0x1c,0x9e,0x84,0xd6,0x8d,0x84,0xb6,0x3a,0xc4,0x46, + 0x4b,0x39,0x92,0x75,0xea,0x76,0x9e,0x47,0xd4,0x76,0xa5,0x97,0x4f,0x21,0x87,0xcb, + 0xd0,0xd7,0xa8,0xa7,0x19,0x2b,0xa3,0x89,0xa6,0x9d,0x99,0x5a,0xd9,0xdc,0x93,0xd3, + 0xa5,0x2b,0x32,0x33,0x16,0x27,0xaf,0x60,0x2a,0xc2,0x5a,0x94,0x8d,0xc8,0x5e,0xd8, + 0xaa,0xef,0x66,0x55,0x88,0x1d,0x05,0x2d,0x18,0x87,0xa3,0xc4,0x3a,0x21,0x27,0xde, + 0x95,0xa4,0xec,0xbf,0x21,0x3d,0xd6,0xa1,0xf2,0x18,0x60,0x8f,0xd7,0xbd,0x3b,0x6b, + 0x7a,0x73,0x4d,0xa4,0x02,0x89,0xee,0x60,0xe5,0x26,0x93,0x1f,0xef,0x1a,0x7a,0x6b, + 0x37,0xaa,0x31,0xe6,0x96,0xc1,0xfe,0x20,0x0d,0x42,0xc9,0x2e,0xf5,0x65,0x72,0x00, + 0x3c,0xae,0x3a,0xd3,0xd9,0xa3,0x55,0xde,0xe5,0x50,0x0e,0x85,0xbf,0xfa,0xf5,0x95, + 0x93,0x7b,0x15,0x76,0x8b,0x0b,0xe2,0x0b,0x95,0xfb,0xdb,0x18,0x7b,0xad,0x58,0x5f, + 0x13,0xb2,0xae,0x64,0x86,0x30,0x07,0x53,0x9c,0x57,0x3d,0x33,0xca,0xc7,0x29,0x19, + 0x0a,0x4f,0xdf,0x71,0xb4,0x7e,0x5d,0x7f,0x95,0x22,0xc1,0xf7,0x5e,0x46,0x32,0x37, + 0x6c,0xf4,0x07,0xd8,0x7f,0x93,0x51,0xc9,0x1e,0xc3,0xe7,0x67,0x48,0x3c,0x4e,0xb3, + 0x29,0xdb,0x6e,0xc8,0x98,0xfb,0xf9,0xeb,0xf4,0x06,0xa0,0x8f,0x59,0x80,0xb6,0x19, + 0x30,0x09,0xe4,0x91,0x93,0x5c,0x76,0xb9,0xaa,0x79,0x6e,0xa9,0x14,0xfb,0x65,0x19, + 0xcc,0x69,0x86,0x2d,0xfd,0x3f,0x31,0x55,0xed,0xf5,0xbd,0x96,0xcc,0xb7,0x2b,0x1c, + 0x72,0xf1,0xb7,0x6f,0x7f,0xae,0x0f,0xeb,0x5c,0xee,0x50,0x8c,0xac,0x6c,0x93,0x6a, + 0xe7,0xd5,0x3f,0xb3,0x6d,0xe5,0xad,0xe6,0xa9,0xac,0x58,0x25,0xac,0x37,0x86,0x48, + 0x12,0x6d,0x92,0x46,0x0f,0xdd,0x6d,0xa7,0xa8,0xff,0x00,0x6c,0x55,0xbf,0x8f,0xbe, + 0x1c,0xd2,0xac,0xe2,0xd3,0x75,0x08,0x6c,0xa2,0xd3,0x8c,0x93,0x3c,0x32,0x79,0x70, + 0x88,0x83,0x1c,0x02,0x33,0x80,0x33,0xd1,0xab,0xe6,0xaf,0x86,0x5f,0x19,0xf5,0x6f, + 0x85,0x9e,0x24,0x3a,0xb6,0x9d,0x0c,0x37,0xac,0xf0,0x35,0xbb,0x5b,0xdd,0xee,0x28, + 0xca,0xc4,0x1e,0xcc,0x0f,0xf0,0x8a,0xe9,0xbe,0x28,0xfe,0xd4,0xd7,0xdf,0x12,0xfc, + 0x35,0x06,0x9d,0x79,0xa2,0xd9,0xe9,0x6f,0x6f,0x72,0xb3,0xa5,0xc5,0xb3,0xb7,0x24, + 0x06,0x04,0x60,0x8e,0x98,0x6f,0x5a,0xe4,0x95,0x44,0xdd,0xe2,0xcb,0x8c,0x1f,0x32, + 0xba,0x2f,0xff,0x00,0x65,0x2b,0xae,0xe4,0x39,0x52,0x38,0x23,0xa5,0x2b,0x68,0x11, + 0xce,0x0e,0xe4,0x47,0x3f,0xed,0xa8,0x35,0xc2,0xd8,0x7c,0x4a,0xb6,0x6b,0x38,0x9a, + 0xea,0x67,0xb5,0xe3,0x6e,0x48,0x3b,0x7f,0x02,0x38,0xad,0x9b,0x2f,0x88,0x56,0xd7, + 0x0f,0xb2,0x3d,0x56,0x10,0xbb,0x86,0x37,0x38,0x07,0xf0,0xcf,0x5a,0xcb,0xeb,0x09, + 0x74,0x3a,0x3d,0x9a,0x36,0xe5,0xf0,0x2d,0x95,0xc2,0x7c,0xd6,0x16,0xec,0x7d,0x42, + 0x60,0xfe,0x95,0x9f,0x71,0xf0,0xb6,0xc2,0x60,0x7f,0xd0,0x0a,0xfb,0xa4,0x87,0xfa, + 0x9a,0xd3,0xb1,0xf1,0xce,0xe9,0xc8,0x9e,0x78,0x2e,0x62,0x60,0x3e,0x44,0xc0,0xeb, + 0xda,0xba,0x68,0xbc,0x47,0x6b,0x70,0x36,0xc2,0xae,0x84,0x8e,0x19,0x80,0x20,0x7e, + 0x19,0xad,0x61,0x89,0x8c,0xba,0x90,0xe9,0x58,0xf3,0x1b,0xaf,0x83,0x1a,0x6c,0xbc, + 0x88,0x65,0x42,0x7f,0xbc,0x8a,0xdf,0xd2,0xb2,0xa7,0xf8,0x2d,0x6a,0x87,0xe4,0x9c, + 0xa7,0xd5,0x0a,0xff,0x00,0x23,0x5e,0xc8,0xfe,0x24,0xb5,0x8f,0x72,0x98,0xd8,0xba, + 0x81,0xf7,0x7b,0xe7,0xeb,0x54,0xa6,0xf1,0x34,0x73,0x44,0xc4,0x22,0xa8,0x1e,0xab, + 0x82,0x7e,0x99,0xce,0x69,0x7d,0x66,0x9b,0xea,0x54,0x61,0x24,0x78,0xe9,0xf8,0x43, + 0x74,0xa0,0x9b,0x5b,0xe5,0x62,0x3b,0x09,0x30,0x7f,0x51,0x51,0x49,0xe0,0x7f,0x13, + 0xe9,0x31,0xb3,0xc7,0x72,0xfe,0x5a,0x8c,0x92,0x1c,0x7f,0x8d,0x7a,0x45,0xf5,0xc4, + 0x32,0x87,0x9e,0xdd,0x02,0x4e,0x4e,0xe1,0xd0,0x82,0x7d,0xc7,0xff,0x00,0xae,0xb3, + 0xee,0xf5,0x09,0xe6,0x89,0xa0,0x77,0x2e,0x37,0x65,0xb9,0xfd,0x3f,0xfa,0xd5,0xce, + 0xf1,0x10,0xb6,0xa8,0xda,0xcc,0xe0,0xec,0x35,0x0f,0x11,0xd9,0xdc,0xc4,0x1a,0xdd, + 0x6e,0x49,0x20,0x0d,0xf1,0x8c,0x9f,0x4e,0x48,0x1f,0xce,0xbf,0x5d,0x3f,0x62,0x3f, + 0x88,0x37,0x1f,0x11,0x3e,0x01,0xe9,0x17,0x37,0x88,0x12,0xeb,0x4f,0xb8,0x9b,0x4f, + 0x97,0x68,0xc6,0x4a,0x10,0xc0,0x9f,0x7c,0x38,0x1f,0x85,0x7e,0x5a,0x68,0xba,0xdc, + 0x63,0xc5,0xba,0x65,0xba,0x39,0x65,0x17,0x31,0xf9,0x81,0xb9,0x18,0x0c,0x38,0x15, + 0xfa,0x41,0xfb,0x07,0xea,0xfa,0x46,0x81,0xe0,0x8f,0x19,0x78,0x76,0x6d,0x52,0xce, + 0x0b,0xfb,0x6f,0x17,0xea,0x28,0x96,0x92,0x4e,0xab,0x29,0x40,0x22,0x00,0x85,0x27, + 0x24,0x64,0x1e,0x71,0xda,0xb8,0xea,0xc1,0x54,0x49,0xd8,0xdb,0xda,0x49,0xc7,0x95, + 0xbd,0x0f,0xa8,0xf6,0x15,0xbb,0x4f,0x94,0x9c,0x2b,0x70,0x7d,0xc8,0xff,0x00,0x03, + 0x4b,0x7d,0x31,0xb4,0xb6,0x91,0xc2,0x86,0x6e,0x8a,0x99,0xfb,0xcc,0x78,0x03,0xf3, + 0x22,0x96,0x1c,0xc8,0xee,0xe4,0xf4,0x0a,0xbf,0xd7,0xfa,0xd5,0x63,0x38,0xbf,0xd4, + 0xd2,0x20,0x0f,0x95,0x6f,0x97,0x27,0xd5,0xba,0x01,0xff,0x00,0xa1,0x7e,0x42,0xb0, + 0xb2,0x51,0xd3,0x77,0xa2,0xfc,0xbf,0xe0,0x92,0x91,0xe0,0x5f,0x1f,0x3f,0x68,0xa3, + 0xf0,0x5f,0xc7,0x1a,0x5d,0xb5,0xde,0x80,0x35,0x7b,0x89,0x2c,0x24,0x78,0xe6,0xb7, + 0xbb,0xf2,0x44,0x71,0xbc,0xa0,0x60,0xab,0x23,0x64,0xfe,0xe4,0x73,0x90,0x3a,0xf1, + 0x5e,0x79,0x27,0xed,0xe3,0xa7,0xdc,0x23,0x25,0xe7,0x87,0x35,0x78,0xc1,0x39,0xc4, + 0x17,0x70,0x1c,0x73,0xc6,0x0f,0x96,0x0d,0x72,0xbf,0xb6,0xc5,0xbd,0xd7,0x89,0x3e, + 0x3f,0xe8,0x9a,0x35,0x92,0x19,0x6e,0xa5,0xd3,0x6d,0x6d,0xa2,0x8c,0x77,0x91,0xe6, + 0x97,0x03,0xf5,0x15,0xd1,0xfe,0xd4,0x3f,0x07,0xbc,0x31,0xe1,0xef,0x82,0xd6,0x12, + 0x78,0x76,0xca,0xcc,0x6a,0x7e,0x1b,0xbc,0x82,0xc7,0x53,0xbb,0xb7,0x89,0x56,0x59, + 0x0b,0x42,0x33,0xe6,0x30,0x19,0x62,0x59,0xe3,0x3c,0xff,0x00,0x7a,0xbe,0x7b,0x13, + 0x2a,0xd2,0xab,0x59,0xc2,0xdc,0xb0,0xef,0xd7,0x43,0xf5,0xcc,0xb7,0x28,0xc9,0x7e, + 0xad,0x80,0x58,0xc8,0x49,0xd5,0xc4,0x5f,0x54,0xec,0x96,0xb6,0x4d,0xfa,0xbb,0x24, + 0x69,0xdb,0xfe,0xdd,0x3e,0x0a,0x90,0x22,0xdd,0x78,0x63,0xc4,0x72,0x61,0xb7,0x7c, + 0xb3,0xc4,0xd9,0xe7,0xb8,0xf3,0x54,0x1e,0x7b,0xd6,0xa6,0x99,0xf1,0x97,0xc3,0x5f, + 0x1a,0xee,0xed,0x2d,0x34,0xad,0x0e,0xfa,0x0b,0x5f,0xed,0x2f,0x3a,0x78,0xf5,0x58, + 0xe1,0xf2,0xce,0x6d,0xca,0x28,0xc2,0xc8,0xfb,0xb1,0xb4,0x1c,0x9e,0x95,0xcb,0xf8, + 0x8b,0xf6,0x74,0xd0,0x34,0x3f,0xd9,0x76,0xe8,0x1b,0x0b,0x63,0xe3,0xdb,0x1d,0x3a, + 0x1d,0x62,0xee,0x7d,0xbf,0xe9,0x11,0xa3,0xc8,0x58,0xa1,0xf6,0x08,0xae,0xbf,0x54, + 0x35,0xe7,0x7f,0xb3,0x06,0xab,0xa7,0x68,0x8f,0x1d,0xc6,0xa3,0x7b,0x15,0x94,0x4d, + 0x75,0x28,0x32,0x5c,0x30,0x44,0xf9,0x52,0x2e,0xac,0x78,0x1c,0x33,0x0f,0xc6,0xb9, + 0xe7,0x2a,0xd4,0xad,0x4e,0xa4,0x57,0xbd,0x1b,0xe8,0xb5,0x23,0x15,0x95,0x64,0xd3, + 0xc0,0x57,0xc6,0xe0,0x1c,0xef,0x4e,0x6a,0x1a,0xbb,0xa7,0xaa,0xd5,0x79,0x35,0xb1, + 0xf4,0x47,0x89,0xb5,0x9d,0x3e,0xdb,0xc0,0xcf,0x0d,0xc5,0x8d,0xad,0xe4,0xd6,0xb7, + 0x06,0x24,0x89,0xed,0xd1,0xbf,0x77,0xf2,0x85,0xc6,0x47,0x00,0x02,0x7a,0x62,0xb8, + 0x3b,0x2d,0x1b,0x47,0xd5,0x91,0x99,0x74,0x9b,0x28,0xc7,0x99,0x82,0xee,0x36,0xed, + 0x04,0x70,0x3f,0x3c,0xd3,0xbe,0x20,0xf8,0x9b,0x4e,0x58,0x2c,0x1a,0x3b,0xeb,0x77, + 0x92,0x57,0xf3,0x40,0x12,0x2f,0x28,0x51,0x76,0xbf,0xa6,0x0f,0xf4,0xaa,0x9a,0x3f, + 0x8c,0xb4,0x99,0xf6,0xc6,0xd7,0x96,0xf0,0xa1,0x52,0x1d,0x5d,0x86,0x5b,0xf2,0xe3, + 0x9c,0xe3,0xbe,0x07,0x7a,0x57,0x76,0xb9,0xf0,0x96,0x51,0x7c,0xb6,0x35,0x2c,0xbc, + 0x03,0xe1,0xfb,0xa9,0x75,0x7b,0xa7,0xd3,0xe1,0x6b,0x7b,0x58,0x62,0x29,0x10,0x62, + 0xa0,0xb3,0xbe,0xd0,0x49,0xeb,0xfa,0x55,0x59,0xad,0x3c,0x25,0x6c,0x56,0x39,0x34, + 0x83,0x2b,0x2a,0xe3,0x28,0xf2,0x6d,0x51,0xd8,0x0f,0x98,0x7e,0xbc,0xd6,0xdc,0x3a, + 0x9e,0x99,0xfd,0x8f,0xe2,0x30,0xb7,0xb6,0xeb,0x04,0x86,0xd2,0x38,0xd9,0x24,0x00, + 0x30,0x0e,0x49,0xc6,0x3d,0x00,0xcd,0x71,0xd7,0x92,0xd9,0x5c,0x5c,0x3b,0x67,0xce, + 0x50,0x4a,0xab,0x2b,0x85,0x1b,0x41,0xc0,0xe0,0x8f,0x4a,0x95,0xbb,0xbb,0x1a,0xd6, + 0xf7,0x3f,0x33,0x3c,0x69,0x31,0xb2,0xf1,0xf5,0xbc,0xb9,0x0a,0xbe,0x64,0x6e,0x48, + 0xea,0x00,0x03,0x3f,0xd6,0xb1,0xfe,0x21,0x84,0x7d,0x79,0xa6,0x53,0xbb,0xcc,0x55, + 0xc7,0xfd,0xf3,0x90,0x6b,0x4b,0xe2,0xb1,0x16,0xfe,0x2f,0xb2,0x99,0xc0,0x28,0x56, + 0x32,0xc3,0xb6,0x37,0x1c,0xd7,0x3f,0xae,0xdc,0x3d,0xe3,0x30,0x89,0x04,0xa7,0x60, + 0x8d,0x48,0x42,0xc4,0x2e,0x77,0x02,0x3d,0x0f,0x00,0x7d,0x33,0xeb,0x5f,0xa4,0xd6, + 0x95,0xb9,0xa3,0xe6,0x7c,0xa5,0x25,0x75,0x19,0x79,0x19,0x96,0x3a,0x8c,0x4b,0x78, + 0x5a,0x66,0x2b,0x1c,0xff,0x00,0x2b,0xb0,0x39,0xfc,0xc7,0x7e,0xd4,0xe2,0xbf,0x67, + 0x90,0x43,0x2a,0x1b,0x73,0x92,0x0c,0xbc,0x9c,0xe7,0xa0,0x61,0xf8,0x74,0xaa,0x30, + 0xe9,0xf7,0x09,0x3c,0x6b,0x2a,0xac,0x2b,0x93,0x80,0xdc,0x1f,0x5e,0xf5,0xe8,0x13, + 0xc8,0x92,0xdb,0x58,0xdd,0x4c,0xd1,0x49,0x0e,0xa1,0x01,0x8a,0xf2,0x18,0xc0,0x01, + 0x9d,0x4e,0x03,0xf4,0xfb,0xdc,0x03,0xc7,0x53,0xf9,0x56,0x70,0x5d,0x0d,0x64,0xec, + 0x75,0x7f,0x0f,0x21,0xbe,0xf0,0xec,0x81,0xae,0xe0,0x31,0xc3,0x34,0xa2,0x19,0x24, + 0x41,0xb9,0x33,0x81,0xb5,0xb3,0xd9,0x4e,0x7a,0xe7,0x1e,0xd5,0xea,0x3e,0x50,0x66, + 0x2a,0xc9,0x8e,0x32,0x18,0x74,0x35,0x8f,0xe1,0x2d,0x73,0x4d,0x9a,0xc2,0xda,0xc4, + 0x4e,0x1e,0x58,0x21,0x0a,0xd2,0x36,0x48,0x60,0x38,0xfb,0xc7,0x83,0xf9,0xf7,0xe2, + 0xb4,0xad,0xb5,0xa9,0x2e,0x92,0x74,0xd0,0xb4,0x7b,0xdd,0x74,0xc1,0x92,0xcf,0x61, + 0x6b,0x24,0xc9,0x18,0x1f,0x78,0x33,0x28,0xda,0xb8,0xff,0x00,0x68,0x8a,0xeb,0x53, + 0x54,0x63,0xab,0xd0,0xe7,0x70,0x75,0x1d,0xec,0x4a,0xd6,0x23,0xc9,0x90,0x81,0xbb, + 0x38,0xe2,0xa8,0xb5,0xba,0xca,0x5f,0x60,0x2b,0x27,0x3f,0x2b,0xf0,0x47,0xd4,0x57, + 0x3d,0xe2,0x4f,0x89,0x7a,0x86,0x8f,0x00,0xfb,0x56,0x9d,0x6d,0x6d,0xe6,0x91,0xb0, + 0x1b,0xe8,0x59,0x87,0xae,0xe4,0x88,0xc8,0xca,0x79,0x1c,0x1c,0x1e,0xbe,0x86,0xb9, + 0x3b,0x6d,0x66,0x5f,0x1b,0x6b,0x2d,0x19,0xbf,0x82,0xc2,0xe1,0x09,0xf2,0x1e,0x38, + 0xa5,0x90,0x16,0x04,0x64,0x02,0xce,0x39,0xc7,0x6c,0x63,0xad,0x67,0x3c,0x6c,0x21, + 0x1e,0x66,0xee,0x8a,0x8e,0x16,0x53,0x76,0xb1,0xe9,0x01,0x23,0x64,0x5c,0xb2,0xef, + 0xc6,0x0a,0xaf,0xcc,0x41,0xfc,0x2a,0xbc,0x8a,0xd1,0x12,0xac,0xab,0xb9,0x8f,0xc8, + 0x58,0xed,0x04,0x7e,0xbc,0xd7,0x41,0xe1,0x2f,0x86,0x43,0xc6,0x16,0x04,0xeb,0x1e, + 0x21,0xbf,0x95,0x21,0x98,0xa2,0x2d,0xbc,0x51,0x40,0x7e,0x55,0x56,0xce,0x42,0x9e, + 0xed,0x8a,0xe4,0x3e,0x36,0xe9,0x5e,0x15,0xf0,0x6e,0x9f,0x05,0x85,0xbb,0x5c,0xcf, + 0xaf,0x4a,0xcb,0x21,0x37,0x72,0x4c,0xff,0x00,0xbb,0x3b,0xc6,0x72,0x70,0x9d,0x40, + 0xf7,0xaf,0x31,0x67,0x74,0xa5,0x53,0xd9,0xc2,0x2d,0xb3,0x77,0x97,0xce,0x31,0xbc, + 0x9d,0x8a,0xef,0xac,0xda,0x25,0xd1,0x8a,0xe6,0xfe,0x18,0x02,0x91,0xc4,0x67,0x07, + 0xe8,0x73,0xfd,0x2a,0xb3,0x78,0xa7,0x49,0xb3,0x69,0x24,0x81,0x67,0xbb,0x18,0x2a, + 0xce,0x91,0x92,0x41,0xfa,0xbe,0x33,0xf9,0xd7,0x93,0xd9,0xde,0x35,0xd5,0xc2,0xba, + 0x0d,0xa4,0xbe,0xd5,0x42,0x80,0x11,0xcf,0x38,0x27,0xbf,0x5a,0xbb,0x7d,0x0c,0xf6, + 0x17,0x97,0xd6,0xf7,0x73,0x95,0x36,0x92,0xb4,0x0c,0x5d,0xcb,0x2b,0x15,0x38,0x3b, + 0x47,0x19,0x1c,0x7a,0x57,0x53,0xc6,0xce,0x4e,0xc9,0x19,0x2a,0x11,0x5b,0x9d,0x1d, + 0xd7,0x8f,0x2e,0x12,0x57,0x96,0x16,0x47,0x88,0x61,0xbc,0xa6,0x2b,0x9c,0x7a,0x63, + 0x39,0xfc,0x6a,0x8c,0xbe,0x3a,0x97,0x0b,0x34,0x6f,0x87,0x00,0xab,0x2b,0x61,0x57, + 0x39,0xeb,0x8f,0xa7,0xb5,0x73,0x16,0xb1,0x5a,0x4a,0xe1,0x4a,0xce,0x84,0xae,0x57, + 0x18,0xe4,0x0e,0xf8,0xf4,0xf7,0x15,0xb3,0xa3,0xe8,0x96,0x37,0xf7,0x1b,0xa6,0x32, + 0x18,0x5f,0xfd,0x5b,0x08,0x87,0xcd,0x8e,0xa0,0x7c,0xdd,0x47,0x15,0xcf,0xf5,0x99, + 0xee,0xe4,0xcd,0x3d,0x94,0x7b,0x16,0x35,0x3f,0x10,0x43,0xae,0xa4,0x0c,0x55,0x63, + 0x98,0x28,0xf3,0x4a,0xb0,0x01,0x8e,0x78,0xe8,0x72,0x2a,0xb4,0xd7,0x04,0x09,0x0b, + 0x16,0x32,0x13,0x95,0x04,0x7c,0xa7,0xd7,0xbe,0x6b,0x4a,0x0d,0x3b,0x48,0xb4,0x0c, + 0xf3,0xd9,0xcc,0xec,0xa3,0x6e,0xd0,0xfb,0x18,0xf7,0xce,0x0f,0x51,0xee,0x09,0xef, + 0x55,0x2f,0x6d,0x6c,0x67,0xb5,0x4f,0x22,0x4c,0x4c,0x4e,0x0c,0x65,0xfe,0x52,0x3e, + 0xbf,0xfe,0xaa,0x4f,0x10,0x9e,0xa3,0xf6,0x68,0xcb,0x93,0x54,0x3f,0x72,0x30,0xdf, + 0x21,0xc8,0x28,0x72,0x33,0xdc,0x01,0xd7,0xa7,0xd6,0xb3,0xd6,0xfa,0x6f,0xb4,0x34, + 0x72,0x38,0x7e,0x92,0x12,0x41,0x3d,0xb3,0x8e,0x6a,0xda,0xd9,0x9b,0x6b,0x66,0x63, + 0x6e,0xcf,0x04,0xdf,0xea,0xdd,0x5c,0x7c,0xb8,0xf6,0xf5,0xf7,0xac,0xcb,0xbd,0x34, + 0x97,0x6d,0x86,0x56,0x56,0x19,0x5f,0x2c,0x67,0x23,0xdc,0x0e,0x9d,0x28,0x52,0x52, + 0xd4,0x76,0xb0,0xe9,0xb5,0xd9,0x24,0x08,0xd8,0x54,0x45,0x38,0x0a,0xcc,0x39,0xf7, + 0x19,0x1e,0xd5,0x2a,0xeb,0x85,0xa4,0x25,0xe0,0x0e,0x71,0xc9,0x0e,0x08,0x1c,0x7d, + 0x2b,0x2a,0xe3,0x4c,0x76,0x85,0x19,0x8c,0x63,0xe5,0xc1,0x05,0x82,0xb0,0xe7,0x1d, + 0xf0,0x6a,0xbc,0x70,0xcd,0x68,0x85,0x96,0x42,0x06,0x7a,0xa0,0xef,0xf5,0xaa,0xb0, + 0xb5,0x3a,0xa8,0x75,0x15,0x86,0x7f,0x31,0xa4,0x9e,0xdc,0xb0,0xca,0x00,0x99,0x07, + 0xe9,0x90,0x2b,0x5a,0xd3,0xc5,0x73,0x5b,0xa3,0xb4,0x79,0x19,0x18,0x0c,0xd2,0x61, + 0xb3,0xf8,0x60,0x7e,0x9d,0xeb,0x84,0xb7,0x12,0x23,0x02,0x3c,0xb2,0x0f,0x6c,0x72, + 0x7f,0x3a,0xdd,0xfb,0x4b,0x1b,0x74,0x69,0x44,0x92,0x38,0xe8,0x8d,0x82,0xa0,0x76, + 0xef,0xfd,0x2b,0x37,0x02,0xce,0xb5,0xbc,0x5f,0xa8,0x24,0x88,0x0d,0xc3,0x87,0x70, + 0x08,0x0b,0x30,0x38,0xfa,0x8a,0xea,0x6f,0x2e,0xf5,0xbd,0x1f,0x42,0xb3,0xd5,0xae, + 0x67,0xb6,0x96,0xca,0x62,0xa0,0x34,0x57,0x70,0x3b,0xe5,0x81,0x60,0x19,0x15,0xcb, + 0x29,0xc0,0x39,0xc8,0x18,0xe8,0x70,0x78,0xaf,0x30,0x2f,0x73,0x34,0x7e,0x62,0x47, + 0x22,0x67,0x82,0xcd,0xd0,0x7a,0x72,0x07,0x14,0x34,0x81,0x6d,0x53,0xcd,0x5f,0x9c, + 0x9c,0xe4,0x82,0x7e,0x98,0xc5,0x47,0x2b,0x56,0xb1,0x4a,0xce,0xf7,0x3d,0x23,0x52, + 0xf1,0x0f,0x89,0x74,0x3d,0x45,0x6c,0xf5,0x3d,0x37,0xec,0x13,0xc9,0x1f,0x9b,0x14, + 0x52,0x42,0xdb,0xe4,0x43,0x9f,0x98,0x1c,0xf2,0x38,0x3c,0x8f,0x43,0x5e,0xe7,0xf0, + 0x4f,0xe0,0x65,0xdf,0xc6,0xbf,0x0b,0xf8,0xa7,0x59,0xb6,0xf1,0x35,0xbd,0x8c,0x3a, + 0x16,0x9d,0xf6,0xf9,0x6d,0x2d,0x2c,0x9e,0xe6,0xe9,0x9b,0x12,0x91,0x0e,0xc2,0xca, + 0x03,0x1f,0x2b,0x8c,0x6e,0xce,0xe1,0xd7,0xa5,0x7c,0xf3,0xa1,0xea,0x7a,0x96,0x86, + 0xf1,0xdf,0x59,0x4b,0x73,0x67,0xa8,0x5b,0x29,0x96,0x0b,0xc8,0x72,0x92,0xc3,0xf2, + 0x75,0x0c,0x0e,0x54,0xf6,0xeb,0xde,0xbe,0xcb,0xf8,0x0f,0xfb,0x4f,0xbf,0x8a,0x35, + 0x0d,0x27,0x56,0x95,0x12,0xdb,0xc6,0x16,0xda,0x5d,0xd6,0x81,0x7d,0x15,0xac,0x6b, + 0x1a,0xea,0x21,0xa1,0x79,0x2d,0xa6,0x23,0xa6,0xef,0x32,0x35,0xcf,0x65,0xf9,0xcf, + 0x01,0xb1,0x5c,0x55,0x65,0x28,0xa4,0xd2,0xd3,0xab,0x3a,0x5d,0x1b,0x7e,0x87,0xc6, + 0x7e,0x1f,0xb9,0x92,0xdf,0x54,0x81,0xf7,0x6f,0x95,0x58,0xb9,0xf5,0xc8,0x39,0xfe, + 0xb5,0xd5,0x7c,0x70,0xd4,0x25,0xd3,0x3e,0x34,0xf8,0xa9,0xa0,0x91,0xa3,0x12,0x6a, + 0x33,0x4e,0xbb,0x4e,0x3e,0xf3,0x07,0xcf,0xfe,0x3d,0x5c,0x95,0x96,0x3f,0xb7,0x0c, + 0xd9,0x20,0x1c,0x36,0xe3,0xd7,0x07,0x2b,0x4e,0xf8,0xbf,0xae,0xcd,0xa9,0xfc,0x40, + 0xbc,0xbe,0x6d,0xaa,0xf2,0x15,0x3f,0x28,0xc8,0x20,0x47,0x18,0x07,0x9f,0x50,0x01, + 0xfa,0xd7,0xa9,0x49,0xde,0x56,0x39,0x5a,0xb1,0xf6,0xdf,0xfc,0x13,0xfb,0xf6,0x80, + 0xd6,0x07,0x8e,0x4f,0x86,0xb5,0x6d,0x5e,0xe6,0x7d,0x22,0xee,0xd5,0xc4,0x71,0x4e, + 0xed,0x24,0x70,0xca,0xa0,0x30,0x70,0x39,0xda,0x30,0x08,0x27,0xa6,0x3a,0xf4,0xc8, + 0xfd,0x18,0xd3,0xad,0x56,0x10,0xec,0xab,0x85,0x2d,0x90,0xd9,0xc9,0x6e,0x00,0xcf, + 0xe9,0xfa,0xd7,0xe1,0xe7,0xc0,0x5f,0x10,0xde,0x5b,0x78,0x8a,0x19,0x60,0x98,0xdb, + 0xdd,0xc6,0x03,0x45,0x34,0x38,0x8d,0xd4,0x82,0x79,0x0d,0xc7,0xb5,0x7e,0xbf,0x78, + 0x13,0x55,0xf1,0x45,0xf7,0xc3,0xbd,0x0c,0xb3,0x23,0xdc,0xcd,0x14,0x4d,0x2d,0xcc, + 0x28,0xbb,0xf6,0x7f,0x18,0x54,0x66,0x0a,0xad,0xe8,0x49,0x20,0x67,0xee,0x8e,0x00, + 0xe4,0xaf,0x25,0x0a,0xb6,0x6a,0xe8,0xd5,0x42,0xf0,0xba,0x3c,0x73,0xc5,0x2f,0xa2, + 0xc1,0xfb,0x5c,0xf8,0x93,0xc5,0x3a,0xf5,0xed,0xb4,0x16,0x5e,0x15,0xd2,0x22,0x9e, + 0x28,0xa6,0x95,0x55,0xa5,0x9b,0xc9,0xca,0xaa,0x02,0x7e,0x62,0x37,0x31,0xe3,0xb8, + 0x5a,0xe7,0xff,0x00,0x65,0x7f,0x19,0xd9,0xfc,0x51,0xd4,0x7e,0x21,0xe8,0xbe,0x2b, + 0x78,0xde,0x0d,0x5a,0xe6,0x2d,0x68,0xc7,0x33,0x80,0xac,0xeb,0x2e,0xe6,0x1c,0xf6, + 0xe2,0x21,0x8f,0x41,0x5c,0xc7,0xc7,0xff,0x00,0x80,0x5e,0x3c,0xf8,0x81,0xf1,0x4f, + 0x5e,0xd7,0xf4,0x4d,0x32,0x1b,0xbd,0x3e,0x63,0x12,0xc3,0x11,0xbd,0x53,0x70,0xa1, + 0x22,0x48,0xc8,0x65,0x19,0x00,0xe5,0x1b,0xb9,0xfc,0xeb,0x8a,0xff,0x00,0x86,0x46, + 0xf8,0x81,0x0c,0x6a,0x65,0x86,0xc2,0x16,0x65,0x0c,0x56,0x69,0xde,0x20,0xa4,0xff, + 0x00,0x0e,0xe7,0x45,0x5c,0xfd,0x09,0xaf,0x98,0xac,0xf1,0x30,0xc4,0x73,0xc2,0x9d, + 0xe3,0x76,0xf7,0xde,0xfa,0x7e,0x47,0xed,0x78,0x1f,0xec,0x4c,0x4e,0x56,0xa9,0x57, + 0xc6,0xa8,0x55,0x94,0x29,0xc5,0x68,0xff,0x00,0x77,0xc8,0xf9,0xb4,0xef,0x79,0x5d, + 0xbd,0x7f,0x23,0xd8,0x3e,0x16,0x7c,0x55,0x8b,0xe2,0x9f,0xed,0x29,0xe3,0xad,0x3a, + 0xe2,0x6d,0xda,0x2f,0x88,0x74,0xe9,0xf4,0xcb,0x54,0x27,0xe5,0x31,0xc4,0x30,0x84, + 0x7d,0x57,0xcc,0x6f,0xab,0x1a,0xe6,0xbf,0x67,0x1f,0x87,0xb2,0x2f,0x84,0xbc,0x63, + 0x25,0xcd,0xb4,0x6f,0xa8,0x68,0x3a,0xa2,0x32,0x34,0xa8,0x0e,0x0a,0xb3,0x24,0x83, + 0x9e,0xd8,0x4c,0xe3,0xbe,0xd1,0x5f,0x38,0xfc,0x5b,0xf0,0xae,0xb3,0xf0,0x27,0x56, + 0xd3,0x2d,0xfc,0x4b,0x18,0xb4,0x9b,0x51,0x80,0xdc,0xda,0x4b,0x67,0x3a,0x4e,0xae, + 0x80,0xed,0x27,0x72,0x31,0xc7,0x3e,0xb5,0xf6,0xaf,0xec,0x45,0xab,0xe8,0x83,0xe1, + 0x13,0xdc,0xdc,0xdd,0x20,0x3a,0x92,0x3c,0xae,0x93,0x7f,0xac,0x91,0x56,0x69,0x90, + 0x9c,0x75,0x3e,0x94,0x50,0x85,0x7a,0x8f,0xfd,0xa6,0x0e,0x3f,0x13,0xbb,0xdb,0x5b, + 0x68,0x71,0xf1,0x25,0x4c,0xb2,0x86,0x0d,0xac,0xaf,0x11,0x19,0xa9,0x7b,0x28,0xf2, + 0x2d,0xfd,0xc5,0x25,0xcd,0xf3,0x56,0x4f,0x4d,0xce,0x7a,0xfe,0x28,0x5b,0x4e,0xb2, + 0x58,0x2d,0xe3,0xb7,0x56,0x9d,0xa4,0x6f,0x90,0x11,0x21,0xda,0xbb,0xb3,0x91,0xcf, + 0x4f,0xd6,0xa3,0x8b,0x40,0xb7,0x8e,0x55,0x9d,0xed,0x6c,0xa6,0x6e,0xbb,0x25,0xb4, + 0x8d,0xd7,0xf5,0x5a,0x8f,0xc6,0xf7,0x91,0x78,0x4f,0x57,0x4d,0x36,0x77,0x6c,0x46, + 0x44,0x80,0x34,0x6c,0x01,0x04,0x0e,0x73,0x8e,0xbd,0xaa,0x85,0xaf,0xc4,0x7d,0x25, + 0xd5,0x55,0xa7,0x54,0x19,0xc6,0xed,0xc3,0x1f,0xd2,0xb3,0xb3,0x5a,0x1f,0x9d,0x5d, + 0x37,0x73,0xb4,0x57,0xb4,0x3a,0x45,0xcf,0xda,0x3c,0x2f,0xa0,0x3d,0xb4,0x09,0xb9, + 0x5a,0x3d,0x36,0x3d,0xd9,0x24,0x0e,0xa4,0x1c,0x54,0x7e,0x14,0xf8,0x7f,0xe1,0xcd, + 0x4b,0x44,0x86,0x66,0xd2,0x60,0x92,0x62,0xce,0x25,0x25,0x07,0xde,0xde,0x48,0xfa, + 0x0c,0x11,0xc0,0xac,0x05,0xf8,0x8b,0xa6,0x41,0x63,0x79,0x6e,0x97,0xb0,0xed,0xb9, + 0x40,0x84,0x17,0x5f,0x97,0x9c,0xe4,0x66,0xae,0xe8,0x1e,0x21,0xd1,0x6d,0x74,0xf0, + 0x97,0x3a,0xe4,0x76,0x72,0xee,0x27,0xcb,0x0f,0xdb,0xb1,0xe2,0xb1,0x71,0x76,0x29, + 0x35,0x7d,0x11,0xf9,0x71,0xf1,0xea,0xc1,0xec,0x35,0x6b,0x78,0xe4,0xdb,0xe6,0x24, + 0x2a,0xd9,0x8d,0xc3,0x03,0xc9,0x3d,0x41,0x20,0xd7,0x45,0xe0,0xdf,0x84,0x1e,0x11, + 0xf1,0x3f,0x87,0x85,0xfe,0xb9,0xf1,0x4b,0x4e,0xf0,0xf5,0xd0,0x8b,0xcd,0x1a,0x73, + 0xc0,0x4b,0x9c,0xa2,0xb0,0x1b,0x99,0x94,0x0c,0x86,0x03,0xbf,0x20,0xfa,0x55,0xcf, + 0xdb,0x06,0x09,0x60,0xf1,0xf4,0x3e,0x7e,0x9b,0xfd,0x93,0x29,0xb4,0x40,0xd6,0xa1, + 0x91,0x80,0x3b,0x7a,0xfc,0x84,0x8c,0x1f,0xff,0x00,0x5d,0x49,0xf1,0x43,0x5f,0x93, + 0x49,0xd1,0x7c,0x2d,0xa5,0x68,0x5a,0x9c,0xd0,0x69,0xf7,0x3e,0x1d,0xb0,0x9a,0xfa, + 0x08,0xa5,0x70,0xaf,0x72,0xd0,0xa8,0x7d,0xd9,0xeb,0xc0,0x51,0x81,0xc0,0x00,0x01, + 0xd2,0xbe,0xef,0x11,0x39,0x4d,0x2e,0x57,0x66,0xff,0x00,0xaf,0x33,0xe7,0x69,0xc5, + 0x45,0x59,0xad,0x8a,0x1e,0x11,0xf8,0x67,0xf0,0xbe,0x78,0xfc,0x27,0x71,0xa8,0xf8, + 0xa1,0xae,0x6e,0xee,0xef,0x2f,0x63,0xd4,0xad,0xa4,0xbf,0x8a,0x15,0x8e,0x38,0xed, + 0x9e,0x48,0x48,0xe3,0x29,0xbe,0x40,0x8b,0x92,0x79,0x39,0x03,0x9a,0x9b,0x57,0xf0, + 0xef,0x83,0xac,0x7e,0x11,0x69,0x77,0xd6,0x97,0x16,0xff,0x00,0xda,0x9f,0xda,0x21, + 0x25,0x99,0x2e,0x77,0xcd,0xe5,0xfd,0x9d,0x49,0x3e,0x5e,0xef,0x95,0x7c,0xc0,0xfd, + 0x87,0x41,0xea,0x33,0xdd,0x7e,0xcf,0x5a,0x26,0x97,0xe2,0x6f,0x8a,0x3f,0x0f,0xb4, + 0x4d,0x4b,0x49,0xb2,0x9e,0xcb,0xcd,0xb9,0xbb,0x76,0x96,0x04,0x63,0x26,0xcb,0x27, + 0x6d,0x8d,0x90,0x77,0x2e,0x40,0x38,0x3d,0xeb,0xec,0x7b,0xff,0x00,0x84,0xff,0x00, + 0x0b,0x27,0x82,0x38,0x2e,0x7c,0x31,0xe1,0x23,0x24,0x8e,0x4b,0x31,0xd3,0xed,0xf2, + 0xc0,0x28,0xc7,0x3b,0x7f,0xce,0x6b,0xca,0xa9,0x8b,0xf6,0x13,0x57,0x6d,0xf5,0xfc, + 0x59,0xd9,0x0a,0x5e,0xd2,0x3a,0x58,0xf8,0x1b,0xf6,0x80,0xd7,0x74,0x3b,0x3f,0x04, + 0xfc,0x2f,0xb3,0xd0,0x0c,0x06,0x49,0xb4,0x6f,0x3e,0xf2,0x3b,0x40,0xb1,0x34,0xb2, + 0x36,0xd5,0xcc,0xc1,0x39,0x2d,0xf2,0xb7,0x1d,0xfb,0xd7,0xa7,0xfe,0xcb,0x6b,0x73, + 0xa7,0x7c,0x15,0xf8,0xa2,0x85,0x14,0x4b,0x7b,0xa4,0xca,0xc6,0x26,0x8c,0x02,0x13, + 0xcb,0x94,0x70,0x3e,0x8d,0x9a,0xf2,0x7f,0x8d,0xf6,0x5a,0x17,0x86,0xbf,0x68,0x5f, + 0x11,0x69,0x76,0x9a,0x4d,0x8d,0x9d,0x84,0x17,0x49,0x6f,0x04,0x36,0xf1,0x24,0x70, + 0xc6,0x0c,0x4b,0x9c,0x05,0x51,0xdf,0x24,0xf3,0xdc,0xfa,0x57,0x75,0xe1,0xad,0x63, + 0x5f,0x3f,0x0d,0xed,0x24,0xb6,0x9c,0xda,0x5d,0xdb,0xc1,0x75,0xa6,0x5e,0x04,0x21, + 0x44,0xd0,0x39,0x77,0x21,0xb8,0xe9,0x82,0xa0,0x00,0x3b,0x7e,0x5a,0x54,0x72,0xab, + 0x4e,0x31,0xef,0xae,0xbf,0x7f,0xfc,0x03,0x48,0x46,0x31,0xbc,0x8f,0x21,0xf1,0x1e, + 0x89,0x1d,0xcc,0x76,0x88,0x66,0x58,0x7f,0x7d,0xb7,0x9c,0xe0,0x1f,0x4e,0x33,0xef, + 0x5d,0xaf,0xc2,0x9f,0x07,0xd8,0xf8,0xb7,0xc1,0xfa,0xac,0x30,0x42,0x5b,0x55,0xb7, + 0xbd,0x79,0xad,0xa4,0x96,0x4f,0x29,0xd2,0x45,0x09,0x95,0xc1,0x56,0x1c,0xe3,0x19, + 0xe7,0xe9,0xc5,0x70,0xfe,0x24,0x92,0xf0,0x5d,0x45,0x1b,0x40,0x5c,0x49,0x22,0xed, + 0x09,0xce,0x5f,0x38,0xea,0x3f,0xcf,0x15,0xea,0x3f,0x0a,0xda,0xf2,0x3d,0x2e,0xe5, + 0xc4,0x46,0x32,0x26,0x63,0x2b,0x92,0x17,0x71,0x03,0x1e,0xb9,0xce,0x00,0x1d,0x2b, + 0x2c,0x74,0xa5,0x0a,0x37,0x8b,0xec,0x5e,0x15,0xc5,0xcf,0xde,0x3b,0xcf,0x00,0x7c, + 0x55,0xd0,0xac,0xbc,0x19,0x77,0x7b,0xab,0xd9,0x35,0xac,0xf6,0x77,0xcd,0x6f,0x3d, + 0xb3,0x36,0x26,0x81,0x8a,0x2a,0xab,0x30,0x00,0x0c,0x70,0x79,0x03,0xb6,0x3b,0x57, + 0x9f,0x7c,0x60,0x97,0xc3,0xff,0x00,0x11,0xd1,0x75,0x1d,0x3d,0xa4,0xb4,0xd7,0xac, + 0x57,0xc9,0x8e,0x35,0x60,0xd1,0x4b,0x1a,0x96,0x2c,0x0e,0x72,0x41,0x39,0x05,0x4e, + 0x71,0x92,0x47,0x5a,0xe0,0x7c,0x77,0xe2,0x3f,0x33,0xc7,0x7a,0xf4,0x56,0x70,0xcd, + 0x14,0x77,0x12,0x46,0x27,0x48,0xf2,0xdb,0xca,0x80,0x0f,0x18,0x1c,0x92,0x3d,0xeb, + 0x13,0x59,0xd7,0x8a,0xe9,0xd6,0x76,0x86,0x39,0xad,0xdb,0x27,0x12,0x49,0x18,0x5c, + 0x0c,0x93,0x85,0x3d,0x7b,0xb7,0x7e,0xf5,0xc9,0x4b,0x09,0xcb,0x38,0xd6,0x8e,0x8d, + 0xff,0x00,0x90,0xea,0x62,0x13,0x52,0x84,0x95,0xfc,0xcc,0x88,0x2d,0xee,0x24,0xf2, + 0x6e,0x56,0x70,0x58,0x5c,0xac,0x66,0xdd,0xce,0xe6,0xe4,0xf5,0x03,0x18,0xc7,0x51, + 0xd6,0x9d,0xaa,0xb4,0x77,0x77,0x9a,0xa4,0xb2,0x3a,0xc9,0x39,0x77,0x91,0xce,0xd2, + 0x03,0x65,0x8e,0x79,0xce,0x38,0xff,0x00,0x1a,0xd0,0xb2,0xd6,0x44,0x1a,0xcd,0xa5, + 0xd4,0x96,0xb0,0x5d,0x2c,0x4e,0x8a,0xab,0x26,0xe0,0x5d,0x81,0x5f,0x9c,0x01,0xd4, + 0xe4,0x73,0x9e,0x0e,0x6a,0xb3,0x69,0xba,0x82,0xc7,0x7f,0x2c,0x56,0xab,0x1c,0x97, + 0x24,0xb8,0x3b,0x94,0xf1,0xc9,0xc6,0x33,0x8e,0xfe,0x86,0xbd,0xb8,0x35,0x7b,0xb3, + 0xcc,0xb5,0xf4,0x48,0xad,0x2e,0x89,0xaa,0xe8,0x3a,0x74,0x77,0xe9,0x6f,0xbe,0xc1, + 0x86,0xf1,0x28,0x75,0x24,0x02,0x71,0x9c,0x03,0xc0,0x39,0xc6,0x71,0xc9,0xa9,0xe2, + 0x92,0x24,0xb4,0x59,0x64,0xd4,0xac,0x22,0x95,0xa2,0x12,0x08,0x90,0xb3,0xb8,0x04, + 0x8f,0x94,0xe0,0x10,0x1c,0x8f,0xc7,0x8e,0xd5,0x8f,0x25,0xcd,0xfd,0xd6,0xa3,0x1d, + 0xac,0xe2,0xe2,0x49,0x30,0x22,0x68,0xda,0x63,0x82,0xc3,0x85,0x1b,0x78,0xc8,0x03, + 0x80,0x3e,0x9c,0x9e,0x94,0xd1,0x61,0x1c,0x32,0x4b,0x25,0xe5,0xac,0xb3,0xcf,0x13, + 0xb2,0xe1,0xd9,0x81,0x6f,0x5e,0x9d,0x31,0xef,0xf8,0xd5,0x59,0x3d,0xc1,0x9b,0x1a, + 0x96,0xa7,0x15,0xfd,0xec,0x2d,0x67,0x78,0x6d,0xd2,0x44,0x19,0x79,0x54,0xc6,0x01, + 0x03,0x18,0x3d,0x79,0xc0,0x1c,0xe6,0xa1,0x17,0xb7,0x02,0x38,0x51,0x0f,0x98,0xfb, + 0x77,0x0f,0x30,0xf3,0x9e,0x3f,0x0a,0xcd,0x31,0xa6,0xa1,0x6b,0xe6,0x46,0xd3,0x4a, + 0x02,0xaa,0x24,0x57,0x25,0x87,0x94,0xdc,0x64,0x8c,0xbf,0x7f,0xcb,0xe9,0x4f,0x5d, + 0x3e,0xfd,0x6c,0xd5,0xbe,0xd3,0x10,0x8e,0x1f,0x9f,0xcc,0x8a,0x65,0x24,0xf3,0xf4, + 0xef,0x8a,0x6a,0x31,0x5a,0x13,0xb9,0xa9,0xa4,0xdd,0x3c,0x70,0x6c,0x92,0x3f,0xb4, + 0x00,0x48,0xdf,0x0b,0x0c,0x71,0xe9,0xc1,0xa1,0x23,0x4b,0xbb,0x9f,0xde,0x36,0x55, + 0x0f,0xdc,0xce,0xe0,0x3e,0xa4,0x62,0x96,0xcb,0x4b,0xbf,0xb8,0xb4,0x56,0x8a,0xde, + 0x50,0x8a,0x9e,0x72,0xca,0x54,0xc8,0x85,0x73,0xfc,0x47,0xa0,0x19,0xf6,0xfa,0xd2, + 0x5a,0x42,0xad,0x2a,0x88,0x5b,0x73,0xb0,0x1c,0x32,0x61,0x43,0xf7,0x04,0xf2,0x7a, + 0xff,0x00,0x3a,0x12,0x49,0x8e,0xcc,0xee,0xbe,0x21,0x69,0x7a,0x6c,0xda,0x6f,0x86, + 0x26,0xd2,0x74,0xf8,0x61,0xb7,0xb7,0xd1,0xe1,0x8a,0xf2,0x54,0x54,0x5f,0x36,0xe8, + 0xc9,0x2b,0x16,0x27,0x82,0x4e,0xd2,0x80,0x9e,0x7a,0x63,0xb0,0xae,0x46,0xeb,0xc3, + 0x56,0xa6,0x31,0x9b,0x98,0x22,0x96,0x68,0xc4,0xd1,0xac,0x72,0x2c,0x98,0xe8,0x70, + 0x46,0xee,0x0f,0xb6,0x01,0xeb,0xc5,0x5d,0xd7,0xa1,0xb9,0xb5,0xfb,0x0a,0xde,0xf9, + 0x4e,0x1e,0xdb,0x30,0x8b,0x5c,0x38,0x20,0x31,0x38,0x7c,0xb7,0x1c,0xe7,0xf4,0xe2, + 0xad,0xf8,0x3f,0xc2,0x16,0xde,0x2f,0x6d,0x49,0x23,0xb3,0xdd,0x2d,0x9a,0x79,0xe6, + 0xd9,0x24,0xd8,0xe5,0x3f,0x89,0x81,0x27,0x07,0x1c,0x64,0x70,0x79,0xe0,0xe7,0xac, + 0x36,0xa1,0x0b,0xdf,0x44,0x6b,0x05,0xcd,0x2d,0x8a,0x1e,0x1e,0xf8,0x7a,0xda,0xfd, + 0xea,0xdb,0xc7,0x77,0x0c,0x2a,0xd1,0x19,0x22,0x9d,0xfe,0x58,0xce,0xd2,0x03,0x0d, + 0xcf,0xb7,0x91,0x91,0xf9,0xd6,0xa6,0xbb,0xf0,0xaa,0xfb,0x47,0x4b,0x79,0x7c,0xeb, + 0x59,0xed,0x64,0xc2,0xfd,0xa2,0x2b,0x84,0x70,0x0f,0x38,0xce,0x1b,0x8e,0x84,0x67, + 0xa7,0x6a,0xb7,0xa8,0x78,0x27,0xfb,0x3e,0xce,0xda,0x5b,0x4b,0x95,0xbc,0x8c,0xdc, + 0x79,0x44,0x29,0x68,0xd9,0x0b,0x70,0x13,0xef,0x1c,0x0c,0xe3,0xf3,0xef,0x57,0xa1, + 0xf0,0x74,0xfa,0x7c,0x33,0x4b,0x7d,0x19,0x8e,0x14,0x87,0x26,0x4d,0xc1,0xca,0xe4, + 0x74,0xea,0x33,0x8e,0x38,0xac,0x3e,0xb3,0x1b,0xa6,0xa5,0xbf,0x43,0xad,0xe1,0xaa, + 0x59,0xae,0x5f,0x99,0xcb,0x5f,0x78,0x6e,0xf2,0xdb,0xf7,0x4d,0x31,0xc0,0x01,0xc4, + 0x7d,0x14,0x02,0x38,0xee,0x47,0x43,0x5d,0x96,0xb3,0xf0,0x5e,0xfb,0xc3,0xbf,0x0e, + 0x34,0x4f,0x17,0x4f,0x77,0x6e,0xda,0x6e,0xa5,0x37,0x95,0x14,0x51,0x4c,0x0c,0xbb, + 0x83,0x38,0x3b,0x94,0x0e,0x3f,0xd5,0xb5,0x73,0xb7,0x77,0x72,0x69,0x21,0xed,0x64, + 0x53,0x2c,0x8a,0x41,0xf3,0x62,0x7e,0x07,0x19,0x18,0xe3,0xdf,0xaf,0x39,0xc7,0xe3, + 0x5e,0xcd,0xe2,0x6d,0x0b,0x4d,0xbd,0xfd,0x92,0xfc,0x2f,0xaf,0x43,0xa7,0x45,0x16, + 0xba,0x35,0x93,0x66,0xf7,0xaa,0x3f,0x7a,0xd1,0x31,0xb9,0x6d,0xa4,0xfa,0x7c,0x8a, + 0x7d,0x38,0xfa,0xd4,0x57,0xa9,0x38,0x72,0x79,0xbb,0x1c,0xd0,0x85,0xef,0xe8,0x7a, + 0x1e,0xb1,0xff,0x00,0x04,0xf7,0xf8,0xa7,0x61,0xe1,0x69,0xb5,0x48,0xbf,0xb0,0xaf, + 0x6d,0xc5,0xb9,0xbb,0x29,0x6d,0x7c,0x77,0xec,0xd9,0xbb,0xf8,0xe3,0x5e,0x71,0x5e, + 0x21,0xad,0x7c,0x18,0xf8,0x8f,0xf0,0x1f,0x5e,0x8e,0xfb,0x51,0xd2,0x26,0xd3,0x7c, + 0xd8,0xcc,0x1e,0x64,0x17,0x31,0x4d,0x95,0x96,0x39,0x14,0xae,0x50,0xb6,0x32,0x9b, + 0xfb,0x67,0xbf,0x1c,0x57,0xed,0x0d,0xc3,0x47,0x17,0xc3,0x87,0x49,0x43,0x34,0x47, + 0x4c,0xd9,0x23,0x2b,0x01,0xb5,0x7c,0xae,0x49,0x39,0x18,0xc7,0xb5,0x7e,0x76,0x7e, + 0xd0,0xa9,0x1c,0xbe,0x28,0x11,0xc7,0xa8,0xcf,0x76,0x92,0x5b,0xcd,0x2a,0x2a,0xb4, + 0x64,0xae,0xd2,0x51,0x79,0x00,0x64,0x60,0x9e,0x4e,0x4f,0xbd,0x62,0xaa,0x49,0x34, + 0x92,0x56,0x6b,0x53,0x68,0xfe,0xf5,0x7b,0xcf,0x6d,0x8f,0x90,0x6f,0x62,0x63,0x73, + 0x6e,0x23,0xb3,0xfb,0x3a,0x7d,0x99,0x06,0xe8,0xd8,0xb8,0x72,0xa4,0x1d,0xc4,0x9f, + 0x72,0x39,0xf7,0xf7,0xac,0xdf,0x8a,0x36,0xc1,0x7c,0x4d,0x06,0x1b,0x02,0x4b,0x58, + 0x24,0x07,0xdc,0xc1,0x11,0x3f,0xae,0x6b,0x4f,0x4a,0x9c,0xdd,0x3b,0x70,0x41,0x30, + 0xc8,0x36,0x93,0x91,0xc2,0xc4,0x47,0xf2,0xcd,0x2f,0xc4,0x7d,0x03,0x55,0xd5,0x2f, + 0x34,0xeb,0xbd,0x3f,0x4d,0xba,0xbf,0x8e,0x1b,0x18,0xbc,0xe7,0xb6,0x85,0x9c,0x46, + 0x30,0x50,0x16,0x20,0x71,0xfe,0xac,0xf5,0xf4,0xaf,0x52,0x84,0xad,0x2d,0x4c,0x2a, + 0x43,0x5f,0x74,0xb1,0xf0,0x0e,0x31,0x37,0x8d,0xf4,0xeb,0x66,0x3e,0x61,0xba,0xb9, + 0x8e,0x0c,0xb1,0xec,0x58,0x76,0xfa,0x8a,0xfd,0xb9,0x7d,0x33,0x59,0xd1,0xf4,0xfd, + 0x2a,0x1d,0x22,0x6b,0x3b,0x68,0x96,0x01,0x1c,0xdf,0x6b,0x46,0x65,0x0e,0x14,0x05, + 0xc0,0x5c,0x71,0xd7,0x3c,0xf5,0xc5,0x7e,0x29,0xfe,0xcd,0x7a,0x25,0xee,0xb1,0xf1, + 0x9b,0xc1,0xfa,0x7c,0x36,0xd2,0x19,0x64,0xd5,0xad,0x77,0xae,0x0f,0xca,0x9e,0x62, + 0xee,0x63,0xe8,0x02,0xe4,0xd7,0xeb,0x1f,0xed,0x85,0xe2,0x5d,0x4f,0x47,0xf8,0x53, + 0x14,0x3a,0x64,0x8f,0x14,0x7a,0x85,0xe2,0x5a,0xdc,0xcb,0x11,0xc3,0x08,0xf6,0x33, + 0x6d,0xc8,0xe9,0x92,0xa0,0x7e,0x9d,0xeb,0x58,0x61,0x5e,0x37,0x17,0x4f,0x0f,0x17, + 0x6e,0x6d,0x2e,0x73,0x57,0xc4,0x7d,0x57,0x0f,0x2a,0xd2,0x57,0x51,0xd4,0xd9,0x1a, + 0x28,0xbe,0xbb,0x9e,0x58,0xf4,0xdf,0x0d,0xeb,0x37,0x70,0xca,0xf2,0xb2,0x69,0xb7, + 0xa6,0x39,0x03,0x33,0xee,0xf9,0xb1,0xd3,0x24,0x2e,0x73,0xe8,0x7d,0x6b,0xb1,0xf1, + 0x16,0xb9,0x75,0x6b,0xf0,0xe7,0x5f,0xd4,0xb5,0x2b,0x11,0xa7,0x4d,0x6f,0x67,0x31, + 0x08,0x24,0x0e,0x1b,0x11,0xf0,0xc0,0x8e,0x99,0x27,0xa5,0x7c,0x73,0xaf,0xd8,0xda, + 0xfc,0x35,0xb3,0xf0,0x0d,0xdf,0x87,0xa7,0xba,0x8f,0xc5,0x90,0x48,0x60,0xb9,0x01, + 0x15,0x7c,0xe7,0x24,0x48,0x52,0x40,0xbf,0xc4,0x04,0xa8,0xa5,0x49,0x63,0x87,0x00, + 0xfd,0xda,0xfa,0x33,0xf6,0xa1,0xf1,0x34,0x9e,0x1a,0xf8,0x0d,0xe2,0x87,0x20,0x89, + 0xa7,0x81,0x60,0x8c,0x0f,0xef,0x3b,0x01,0x8a,0xbc,0xcb,0x2e,0x86,0x0b,0xd9,0xd4, + 0x84,0xf9,0xa3,0x3b,0xda,0xea,0xcf,0xdd,0x76,0x7a,0x6b,0xa3,0xdd,0x19,0x60,0xb1, + 0x72,0xc5,0x39,0x42,0x71,0xb4,0xa3,0x6d,0x9d,0xd6,0xaa,0xff,0x00,0x7a,0xea,0x7c, + 0x0b,0xfb,0x70,0x69,0x52,0xd8,0x6a,0xbf,0x0c,0xf4,0x92,0xa8,0x1e,0xd7,0xc2,0x76, + 0xf2,0xc8,0xa8,0x30,0x04,0x92,0xcb,0x2b,0xb7,0x1e,0xb9,0xaf,0xb6,0x7f,0x62,0x6d, + 0x29,0x63,0xfd,0x98,0x34,0xcb,0x56,0x25,0x49,0x86,0x4c,0xf1,0x82,0xa5,0x87,0x98, + 0x0f,0xfe,0x3f,0x9a,0xd7,0xbc,0xf8,0x05,0xf0,0xef,0xc4,0x71,0x45,0x73,0xaa,0xe9, + 0xf7,0xda,0xc4,0x90,0xc2,0x91,0x79,0xd7,0x5a,0x48,0x92,0x40,0x01,0x1b,0x42,0x9f, + 0xb3,0xee,0xc7,0x5e,0x9c,0x0c,0xf6,0xae,0xef,0xc3,0xb6,0xba,0x17,0x80,0xfc,0x23, + 0x73,0xa4,0xe8,0x3a,0x7e,0xa5,0x0d,0xac,0x51,0x33,0x45,0x6e,0xf6,0x52,0xc6,0x33, + 0xb0,0x28,0x55,0xdc,0xaa,0x3a,0x01,0xc0,0xf4,0x35,0xe5,0x4f,0x11,0x09,0xc1,0x2b, + 0xec,0x77,0x28,0xb4,0xcf,0x10,0xf8,0xa7,0xa9,0xbc,0xd6,0x7a,0x36,0xe8,0xa4,0x7b, + 0xab,0x15,0x71,0x7e,0x90,0x46,0xcc,0xdb,0x44,0x84,0x1c,0x05,0xc9,0xe8,0x41,0xfc, + 0xeb,0x87,0xd2,0xf5,0x85,0xd5,0xad,0x92,0xe6,0xdc,0xa9,0x82,0x42,0x59,0x0b,0x8f, + 0xe1,0xed,0xd7,0xa7,0x15,0xdd,0xfc,0x5e,0xd6,0x06,0x85,0xe2,0x88,0x2e,0xe1,0xd3, + 0x75,0x25,0x85,0x11,0xd2,0xe2,0x58,0xed,0x1f,0xcb,0x94,0xf9,0xae,0x4e,0x1b,0x18, + 0x24,0x0c,0x7b,0x71,0x5e,0x43,0x67,0xe2,0x6d,0x2a,0xda,0xd9,0x14,0x25,0xc4,0x11, + 0xaa,0xff,0x00,0xcb,0x38,0x25,0x0a,0x47,0xa9,0xc8,0x3f,0xa7,0x15,0xf3,0xaa,0xfb, + 0x74,0x3d,0x55,0x6e,0x44,0xd1,0xd5,0x3c,0x16,0x96,0xf1,0x5f,0x5d,0x3d,0xa5,0xbd, + 0xc3,0x79,0x88,0xb9,0x68,0x81,0xfe,0x1f,0xe5,0xcd,0x40,0xa9,0x6d,0x2a,0x87,0x6b, + 0x0b,0x40,0x5b,0x9c,0x34,0x4b,0x91,0x54,0x2c,0x3c,0x6d,0xa4,0x4d,0x05,0xd0,0x17, + 0x43,0xe7,0x95,0x4a,0x2b,0x23,0x63,0x01,0x47,0x5e,0x38,0xfa,0x1a,0xb4,0x9e,0x27, + 0xd1,0xc8,0xff,0x00,0x8f,0xa8,0x4f,0xb9,0xeb,0xfc,0xa9,0x79,0x14,0x95,0xcf,0x84, + 0xbf,0x6d,0x5d,0x4f,0xed,0xdf,0x15,0xa7,0x42,0x09,0x36,0xf1,0xac,0x2e,0xe4,0xfd, + 0xe2,0xb8,0x04,0xfb,0x0c,0xf4,0x1e,0x98,0xa9,0xfe,0x22,0xe8,0x5e,0x12,0xb9,0xb1, + 0xf0,0xe5,0xc5,0xbe,0xbb,0x67,0x6a,0xa3,0x45,0xb1,0x13,0xc1,0x05,0xc2,0x39,0x49, + 0x45,0xbc,0x7e,0x61,0x3f,0x31,0xc1,0x2c,0xc4,0x11,0x8e,0x08,0x35,0x95,0xfb,0x65, + 0xf8,0x6e,0xc7,0xc2,0x3f,0x15,0x1f,0x47,0xd3,0xfc,0xc3,0x69,0x05,0xb4,0x5b,0x0c, + 0x8d,0xb9,0x89,0x60,0x18,0xe4,0xfd,0x4d,0x75,0x5a,0x8f,0xc3,0xaf,0x0c,0xbe,0x93, + 0xa4,0x79,0x5a,0x2a,0xda,0x4a,0xd6,0x50,0x99,0x16,0x55,0x2c,0xec,0xcd,0x1a,0x96, + 0x27,0x24,0xf0,0x5b,0x2c,0x0f,0xbd,0x7d,0x5d,0x49,0x46,0x2a,0x0d,0x37,0x6f,0xf8, + 0x63,0xc9,0xa5,0x4e,0x75,0x64,0xe1,0x15,0xab,0x7f,0xe6,0x41,0xf0,0x97,0xe2,0x3f, + 0x84,0xbc,0x31,0xf1,0x57,0xc2,0x17,0x7a,0x96,0xb7,0x1c,0x5a,0x4e,0x9f,0x05,0xe2, + 0x4b,0x3e,0xc9,0x24,0x01,0x9a,0xd8,0xa4,0x61,0x95,0x01,0xdd,0x96,0x23,0x23,0x04, + 0x1e,0x73,0xc5,0x7d,0x4b,0xa8,0xfe,0xdd,0xdf,0x0d,0x74,0x6b,0x5b,0x45,0x3a,0xee, + 0xa1,0xab,0x49,0x04,0x5b,0x24,0x96,0xd3,0x4d,0x91,0x04,0x8f,0x81,0x92,0x15,0x82, + 0xe3,0x24,0x66,0xbc,0xd3,0xf6,0x5c,0xf8,0x61,0xe1,0xe7,0xf1,0xd5,0xd4,0xd3,0x68, + 0xf6,0x13,0xc7,0x15,0x8b,0x90,0x2e,0xac,0x62,0x91,0x32,0x5a,0x3c,0x10,0x18,0x10, + 0x08,0xce,0x33,0xf5,0xaf,0xae,0x6c,0xf4,0x8d,0x13,0x49,0x76,0xb7,0x86,0xc7,0x4c, + 0xb4,0xd8,0x43,0x81,0x04,0x31,0x21,0x50,0x73,0xd8,0x01,0x8e,0xd5,0xe1,0x62,0x6a, + 0x51,0x73,0xb3,0x4d,0xdb,0xcf,0xfe,0x01,0xe8,0x2a,0x15,0xa9,0x7b,0xb2,0xb2,0x7f, + 0x79,0xf9,0x33,0xf1,0xab,0xc5,0xf6,0xff,0x00,0x11,0xfe,0x25,0x6b,0x9e,0x24,0xd3, + 0x16,0x58,0x74,0xcb,0xeb,0xa3,0x2a,0x0b,0x94,0x11,0xba,0x8c,0x9d,0xb9,0x00,0x9e, + 0x71,0x9e,0x01,0xaf,0x59,0xbd,0xb5,0xf1,0x66,0xa5,0xe1,0xfb,0x6b,0x2f,0x0b,0xf8, + 0x6e,0xff,0x00,0x58,0x06,0xdd,0x5e,0xea,0xea,0xda,0x2c,0xc6,0x87,0xa7,0x27,0x04, + 0x03,0x82,0x3d,0xf1,0x9e,0xd4,0x7e,0xdc,0x1a,0x9c,0x7a,0x97,0xc6,0x8b,0x1b,0x57, + 0x58,0x96,0xde,0xda,0xca,0x28,0xe2,0x10,0xa6,0x37,0x96,0x95,0x8e,0xe6,0xf5,0x3c, + 0x91,0x9f,0x4c,0x7a,0x57,0x5f,0xa1,0x7c,0x56,0xf1,0x47,0x84,0xac,0xa7,0xf0,0xf6, + 0x8f,0x05,0xcf,0xf6,0x44,0xd2,0x23,0xdc,0x0b,0x68,0x4b,0x17,0x26,0x30,0xa4,0x16, + 0x1e,0xca,0x38,0xf7,0xaf,0x69,0x3b,0x50,0x8b,0x8c,0x7b,0x1c,0x3f,0x6d,0xa6,0xcf, + 0x0d,0xf1,0x9e,0x91,0xaf,0xe9,0xa2,0xdc,0x6b,0x96,0xf7,0x5a,0x54,0xc6,0x64,0x6d, + 0x97,0x37,0x51,0xbe,0x00,0xc8,0x3f,0x74,0x0d,0xa3,0x27,0xa1,0xe6,0xb0,0xc5,0xe7, + 0x93,0x94,0x17,0x64,0x41,0x71,0xcf,0xee,0xa5,0xce,0x72,0x71,0x86,0x5e,0xc7,0x83, + 0xd7,0x07,0x1c,0xd7,0xd3,0x9f,0xb7,0xdd,0xf4,0x53,0x78,0xbb,0xc2,0x96,0x90,0xca, + 0x92,0x44,0xd6,0x38,0x3b,0x08,0x20,0x7c,0xef,0xc7,0x1e,0xc2,0xbe,0x46,0xd0,0x6d, + 0x64,0x8f,0x53,0x9d,0x6e,0x63,0xda,0xbb,0xf8,0x0c,0x3a,0x11,0xc6,0x31,0xf8,0x0a, + 0x8a,0x72,0xf6,0xb4,0x94,0xe5,0xa1,0x55,0x23,0xcb,0x27,0x18,0x97,0x34,0xd8,0x2e, + 0x6e,0xfc,0x45,0x70,0x6c,0xae,0x12,0x29,0x63,0x00,0x6e,0x95,0x58,0xf9,0x9c,0x7b, + 0x02,0x78,0xaa,0x9a,0xfa,0xde,0x41,0x78,0x9f,0x6d,0xbe,0x49,0x63,0x59,0x08,0x45, + 0x43,0x82,0xbc,0x1d,0xa7,0x27,0xa6,0x71,0x8c,0xe0,0x75,0xe6,0xb4,0xac,0xe4,0x9a, + 0xcb,0xc5,0x5a,0x7d,0xe3,0x47,0xe6,0x42,0x66,0x40,0xc8,0xc0,0x6d,0xe4,0x80,0x40, + 0x19,0xa9,0x3c,0x4d,0xa5,0x2e,0xad,0xe2,0x15,0xb6,0x10,0x8b,0x64,0x92,0xe8,0x44, + 0x3c,0xcf,0xdd,0x20,0x63,0xd0,0x67,0xa7,0x42,0x0f,0x27,0x9a,0xae,0x6b,0x54,0x4b, + 0xa5,0x8c,0x94,0x2f,0x0b,0xf9,0x94,0x7c,0x34,0xa6,0xee,0x56,0x94,0xac,0xa2,0xe6, + 0x37,0x08,0xb1,0x04,0xcb,0xb3,0x0e,0x49,0x04,0x91,0x91,0x80,0x73,0x81,0xd7,0x15, + 0xb3,0x6d,0xaa,0x26,0xa3,0x68,0x2d,0xef,0x22,0xfb,0x53,0x2c,0x48,0x85,0xd1,0x01, + 0x78,0xc0,0x3d,0x4e,0xdc,0x64,0x63,0x03,0x2c,0x72,0x0d,0x4d,0x63,0xe1,0xdb,0xaf, + 0x07,0x78,0x98,0x45,0x77,0x67,0x73,0x14,0x72,0x0d,0x8a,0xee,0xc4,0xa3,0xe5,0x41, + 0xdc,0x4e,0x30,0xc0,0xe3,0xea,0x38,0xf4,0xac,0x9c,0x46,0xf6,0xf7,0x71,0x5a,0xbb, + 0xc4,0x0c,0x23,0x09,0x1c,0x5b,0xf7,0x00,0xc4,0xf5,0x1d,0x71,0xcf,0x24,0x76,0xa6, + 0xad,0x53,0x6d,0x89,0x77,0x85,0xae,0x66,0xf8,0x86,0xca,0xce,0x45,0xb7,0xb8,0x57, + 0x95,0x6e,0xce,0x7c,0xe4,0x57,0x12,0x24,0x43,0x8d,0x81,0x4e,0x49,0xcf,0x27,0x20, + 0xf4,0xe3,0x9e,0xa0,0x52,0x1a,0xd5,0xb4,0x8d,0x04,0x16,0xd1,0x8d,0xc3,0x9d,0xa5, + 0xb7,0x12,0xd8,0x3f,0x78,0x91,0x8c,0x64,0x7e,0xb5,0x72,0xeb,0xc2,0x77,0x5a,0x65, + 0x82,0xb9,0x49,0xbc,0xb9,0x4e,0x63,0x95,0xad,0x8b,0x09,0x06,0x33,0x80,0x4f,0xd3, + 0xad,0x6a,0x78,0x37,0x42,0x59,0xf5,0x6b,0x7d,0x3a,0xfa,0xd3,0xec,0xce,0x57,0x7c, + 0x86,0x15,0x32,0xc8,0x10,0x8c,0xe7,0x6a,0xa9,0x39,0xe3,0x1e,0xd8,0xfa,0xe6,0xb9, + 0xe2,0xa1,0xcd,0x7b,0xd8,0x95,0x09,0x4a,0x5c,0xb6,0xdc,0xe7,0x6e,0xee,0xef,0xad, + 0xd5,0x37,0x2c,0x0e,0x58,0x6e,0x02,0x1b,0x60,0x01,0x38,0xe5,0x09,0x18,0xfb,0xb8, + 0xc7,0x1f,0x9d,0x6b,0xf8,0x65,0x6d,0xde,0xdc,0x4b,0xaa,0x58,0x4d,0x70,0xfc,0x3a, + 0xc7,0x0a,0x85,0x56,0x5e,0x73,0x9c,0x7c,0xc7,0xb0,0xc7,0xd7,0xd2,0xbd,0x1b,0x4c, + 0xf8,0x41,0x68,0x2f,0xe2,0x8c,0x5f,0x3e,0xbf,0x1b,0xb6,0xd4,0xb6,0xb6,0x96,0x0b, + 0x69,0xd3,0x39,0xe5,0xfc,0xdc,0xb0,0x51,0xd3,0x80,0x4f,0xf2,0xaf,0x40,0xbe,0xfd, + 0x9f,0xe7,0x8f,0x4d,0x49,0x34,0xb8,0x63,0xb2,0xbd,0xb7,0x90,0xce,0x82,0x4b,0x83, + 0x2f,0x98,0xdb,0x0f,0x00,0xaa,0x28,0x19,0x38,0x1c,0xf4,0x07,0x20,0xe6,0xb2,0x9e, + 0x22,0x9d,0xbd,0x4d,0x55,0x19,0xde,0xcd,0x1e,0x02,0xf6,0x97,0x5a,0x4a,0x5d,0xde, + 0xc6,0xf1,0x47,0x65,0x26,0x11,0x6d,0xae,0x1a,0x44,0x90,0x72,0x4a,0xa2,0x02,0x30, + 0x71,0x82,0x3e,0x61,0x8c,0xf4,0xf5,0xab,0x36,0x1a,0x74,0xd1,0xda,0xda,0x5c,0x4d, + 0x6c,0xaf,0x6c,0xe4,0x30,0x97,0x95,0xc1,0x24,0xf0,0x1b,0x38,0x3f,0xe4,0x57,0xac, + 0xc9,0x3f,0x87,0x34,0xdd,0x3b,0x4d,0xba,0x97,0x4e,0xd5,0x75,0x89,0x2e,0xbe,0x44, + 0x82,0x68,0x61,0x9a,0x34,0x93,0x76,0x0a,0x32,0x95,0xdc,0x36,0xb9,0xda,0x7a,0xf2, + 0x3d,0x45,0x72,0xf7,0xda,0x1e,0xa5,0x2f,0x8a,0x6e,0x91,0xb4,0xe7,0xd3,0x23,0x98, + 0x3b,0x43,0x69,0x30,0x26,0x20,0xd8,0xf9,0xfc,0xbc,0xe1,0x0f,0x52,0x78,0xe9,0xce, + 0x3d,0xa6,0x35,0xdb,0xdd,0x58,0xd3,0xd8,0xae,0x8e,0xe5,0x0d,0x6e,0xc2,0x7b,0x9b, + 0x5b,0x21,0x6f,0xb2,0x05,0x58,0xc0,0x2c,0x8d,0xbb,0x20,0x96,0xcf,0x5e,0xc3,0x3d, + 0x73,0x5b,0x3f,0x0e,0xf4,0x4b,0xff,0x00,0x09,0xeb,0xf6,0xda,0xd4,0x52,0x5a,0xdc, + 0xc5,0xe5,0x32,0x49,0x6b,0xf6,0x80,0xad,0x22,0xb2,0xe3,0x04,0xf3,0x83,0x9c,0x1f, + 0xc2,0xb6,0xbc,0x67,0xe0,0x2b,0xcd,0x1f,0x45,0xf0,0x9d,0xde,0x9e,0x5b,0x50,0x13, + 0x69,0x66,0xea,0xf5,0x10,0xf9,0x89,0x0b,0x89,0xa4,0x5d,0xa7,0x63,0x65,0x4e,0xd0, + 0xa7,0x1c,0x75,0xeb,0xcd,0x72,0x07,0xc7,0x96,0xb6,0x51,0xbc,0x70,0xda,0x69,0x90, + 0xca,0x17,0x28,0xdf,0x65,0x6d,0xe5,0xbd,0x0b,0x79,0x99,0xfe,0x74,0x3e,0x7a,0x91, + 0x6a,0x9b,0xba,0x63,0x85,0xa9,0xca,0xf5,0x11,0xd5,0x78,0xad,0x1a,0x4d,0x31,0xaf, + 0x01,0x5b,0x3b,0xd8,0x19,0x09,0x85,0x65,0x0c,0x26,0x45,0x61,0x8c,0xf4,0xce,0x0e, + 0x3f,0x23,0xeb,0x5b,0x3e,0x28,0xbf,0x8b,0x50,0x8b,0x4d,0xb3,0x89,0x43,0x1d,0x42, + 0x64,0x52,0xa1,0x48,0xc4,0x63,0xe6,0x62,0x47,0xe0,0x3f,0x3a,0xe2,0xbc,0x4b,0x0b, + 0x69,0xba,0x87,0x87,0x6f,0x75,0x66,0x8e,0x7b,0x49,0x6d,0x85,0xc6,0xf8,0xf7,0x6d, + 0x7c,0xfc,0xc0,0x7c,0xc4,0xe7,0xaa,0xf5,0xae,0x8b,0x49,0x80,0xdc,0x89,0x75,0x6b, + 0xe9,0xcb,0xdc,0x94,0x2a,0x21,0x43,0x81,0x0a,0x1e,0x76,0xfd,0x71,0x8c,0xd7,0x9f, + 0x3a,0x7e,0xca,0x30,0x6d,0xed,0x7f,0xf8,0x6f,0x91,0xec,0xd3,0xa9,0xed,0x9c,0x94, + 0x56,0xf6,0xbf,0xf9,0xfc,0xf6,0x33,0x7c,0x73,0xa3,0x45,0x7b,0x21,0xd5,0xe5,0xba, + 0xb6,0x8e,0xe6,0x65,0x40,0x6d,0xa3,0x56,0x50,0x14,0x28,0x03,0x03,0x27,0x9c,0x01, + 0xc5,0x53,0xbe,0xf8,0x8b,0xa8,0x0f,0x87,0xb6,0x5e,0x0b,0x68,0x63,0x3a,0x7c,0x17, + 0xe2,0xff,0x00,0xcf,0x12,0xb9,0x93,0x70,0x57,0x01,0x0a,0x6e,0xda,0x07,0xef,0x18, + 0xe7,0x68,0x27,0xd6,0xb9,0xbd,0x43,0xc4,0xeb,0xaa,0xdc,0x85,0x19,0x8e,0x48,0xf7, + 0xb6,0x41,0xc2,0xe0,0x02,0x40,0x01,0x40,0xc0,0xc0,0xc5,0x75,0x37,0x71,0x78,0x5d, + 0xfe,0x10,0x58,0x5f,0x46,0x90,0x27,0x8c,0x65,0xd7,0x3c,0x96,0xfd,0xf9,0xf3,0x4d, + 0x98,0x83,0x76,0x7c,0xbc,0xfd,0xdd,0xf8,0xf9,0xb1,0xd4,0x91,0x9a,0xf4,0x9d,0x37, + 0x18,0x45,0x54,0xd7,0x53,0xc7,0x9c,0xd4,0xe6,0xdc,0x15,0x8f,0xd9,0xdb,0xcf,0x0b, + 0x0b,0x8f,0x00,0x3c,0x76,0xf2,0xdf,0x3c,0xb2,0xe9,0xa5,0x4a,0xcd,0x79,0x71,0x28, + 0x39,0x8f,0x18,0x09,0xbf,0x04,0xf6,0xe8,0x7e,0x87,0xa5,0x7c,0x11,0xe2,0xcf,0x87, + 0x3e,0x21,0xd2,0xfc,0x75,0x71,0xfd,0xab,0x60,0xd0,0xa1,0xb6,0x9a,0x68,0xe4,0x75, + 0xda,0x04,0x65,0xdc,0xaf,0x50,0x31,0xd7,0xa6,0x2b,0xef,0x7d,0x53,0xc6,0xb6,0x3a, + 0x0f,0xc3,0xc9,0xaf,0x5d,0xbc,0xff,0x00,0xb2,0xe9,0x8d,0x71,0xe5,0xed,0x6f,0x9c, + 0x2a,0x13,0x8e,0x14,0xf0,0x71,0xd7,0x9a,0xfc,0xdf,0xfd,0xb2,0xfe,0x2a,0x0f,0x89, + 0x52,0x59,0xea,0x1a,0x74,0x17,0x3a,0x62,0xe9,0x96,0x88,0xb2,0x79,0x73,0x3e,0x1d, + 0x64,0x7f,0x42,0x17,0x8e,0x0f,0x5a,0xf1,0x70,0xd3,0x94,0x9f,0x27,0x7b,0x1b,0x52, + 0xd1,0x36,0xfa,0x1f,0x2c,0xe8,0x57,0x6f,0x26,0xa6,0xb1,0xab,0x60,0xf9,0x52,0x36, + 0xc1,0xc7,0xfc,0xb1,0xc9,0x3f,0x8e,0x2b,0xea,0x6f,0x83,0xdf,0x14,0xb4,0x4f,0x85, + 0xb0,0x8b,0xbd,0x4e,0x19,0xaf,0x24,0xbf,0xd3,0x22,0x8a,0xc6,0xca,0xda,0xdd,0xa6, + 0x9e,0xf1,0x85,0xd5,0xc7,0xc8,0x8a,0xbd,0x48,0xe7,0x24,0x90,0x00,0x23,0xd7,0x07, + 0xe5,0x4d,0x01,0x55,0x75,0xab,0x7f,0x98,0x13,0x96,0x8b,0x9f,0xfa,0xe5,0x82,0x2b, + 0xd0,0xbc,0x69,0x73,0x69,0x0f,0x85,0x7c,0x19,0x35,0xf9,0x74,0x8a,0x2b,0x59,0xa3, + 0x2f,0x0a,0x86,0x20,0xee,0x0f,0xc0,0x2c,0xbf,0xde,0xf5,0xaf,0x7a,0x74,0xd4,0xfd, + 0xc7,0xb3,0x39,0xe3,0x51,0xc5,0xa6,0xb7,0x3e,0xb1,0xf0,0x5a,0x6a,0xfe,0x28,0xf8, + 0x93,0x07,0xc4,0x8d,0x7a,0xde,0xcb,0xc2,0x86,0xc6,0xd4,0x5a,0x69,0x7a,0x55,0xcd, + 0xc7,0x9b,0x3e,0x0c,0x85,0xda,0x69,0x8a,0xfd,0xd2,0x73,0xb4,0x2f,0x60,0x7b,0x60, + 0x67,0xd0,0xfc,0x69,0xfb,0x61,0x78,0x66,0x2b,0xa9,0xfc,0x1d,0xaf,0xe8,0x13,0x78, + 0xa6,0x27,0x00,0x4e,0x74,0x57,0x32,0x88,0xd8,0x10,0x7b,0x85,0x65,0x75,0xeb,0xf2, + 0xe7,0x04,0x75,0xcd,0x7e,0x75,0x69,0x7e,0x22,0xd2,0x6f,0xfc,0x45,0xa9,0x5f,0xe9, + 0x16,0x2d,0x6b,0x6d,0x67,0x6c,0x27,0x82,0x09,0x65,0x12,0xb2,0xb8,0xd9,0x18,0x62, + 0x73,0xfd,0xf6,0x0f,0x8e,0x83,0xa5,0x7d,0x53,0xf0,0x6f,0x46,0xd3,0xbc,0x0f,0xe0, + 0xad,0x3e,0xfa,0xe1,0x63,0x17,0xba,0x9c,0x69,0x3d,0xc5,0xcb,0x02,0xce,0xc5,0xc6, + 0xe0,0xb9,0xe4,0xe0,0x02,0x38,0xf5,0xc9,0xa9,0xa5,0x4e,0x71,0xa8,0x9a,0x96,0xdb, + 0x74,0xb1,0xe8,0xca,0x34,0xbe,0xaf,0x2a,0xb5,0x63,0x7b,0xbb,0x5a,0xfb,0xbe,0xb7, + 0xf2,0x3d,0x63,0xc1,0xdf,0x1a,0xbe,0x05,0xf8,0x67,0x57,0xb6,0xd5,0xaf,0x25,0xf1, + 0x35,0xb5,0xf4,0x37,0x4f,0x75,0x1a,0xf8,0x8e,0xde,0x47,0x8a,0x39,0x9f,0x01,0xdd, + 0x48,0x18,0x2f,0xf2,0x8e,0x58,0x93,0x95,0x15,0xe8,0xbf,0x19,0x3e,0x27,0x78,0x57, + 0xe3,0x4f,0x85,0xbc,0x2b,0x63,0xe1,0x7d,0x5e,0x1d,0x62,0xda,0xf7,0x5e,0xb6,0x12, + 0xb4,0x00,0xf0,0x23,0x26,0x42,0x08,0x23,0x3f,0xc2,0x33,0xd8,0x64,0x67,0x19,0x15, + 0xe6,0x13,0xf8,0x43,0x48,0xf1,0x36,0x9e,0xdb,0xed,0x2d,0xe6,0x49,0x57,0xe6,0x49, + 0x50,0x32,0xb0,0x3f,0x5e,0x95,0xe7,0x9f,0x03,0xb4,0x4d,0x5f,0xc2,0x5f,0x1b,0xc7, + 0x81,0xb4,0xdb,0xb9,0x21,0xd2,0x06,0xa7,0x6f,0xa9,0x4b,0x66,0xcb,0xbf,0xcc,0x8d, + 0x0a,0xb6,0xd5,0xe0,0xe1,0xb0,0xcb,0xc8,0xc6,0x76,0x0c,0xd3,0xcc,0x27,0x5a,0xbf, + 0xbd,0x39,0xb9,0x3b,0x59,0x5c,0xe4,0xc2,0x61,0xa9,0x2a,0x53,0x74,0xa3,0xcb,0xcb, + 0xad,0xbb,0xab,0xdb,0xf0,0x3f,0x4c,0x6d,0xc3,0xa4,0x10,0x05,0x38,0x51,0x1a,0x8d, + 0xa3,0xe9,0x51,0xeb,0xa4,0xb6,0x85,0xa8,0x67,0x9f,0xf4,0x69,0x3a,0xff,0x00,0xba, + 0x6a,0xa3,0x6b,0xaf,0x04,0x9f,0x67,0x1a,0x56,0xa1,0x2b,0xa2,0xe3,0x74,0x71,0xae, + 0x0f,0x6c,0x83,0xbb,0xa5,0x53,0xd6,0x75,0xab,0xa9,0xf4,0xbb,0xc8,0x93,0x44,0xd4, + 0x14,0xc9,0x0b,0x20,0x69,0x3c,0xa5,0x51,0x90,0x46,0x49,0xf3,0x3a,0x73,0x5e,0x6c, + 0x5b,0x82,0x7a,0xbf,0xc4,0xe4,0x49,0xb6,0x99,0xe3,0x5f,0x15,0x75,0x9b,0x8b,0x6f, + 0x10,0x59,0xc5,0x64,0x76,0x3b,0x23,0x33,0xb3,0x90,0x17,0x1b,0xd9,0x80,0xc9,0xc6, + 0x0f,0x5e,0x41,0xf4,0xaf,0x36,0x92,0xfb,0xfb,0x2b,0x56,0xb9,0xc0,0x5b,0xbb,0x42, + 0x00,0x76,0x31,0xe7,0x00,0xe3,0xe6,0x00,0xf7,0xce,0x7e,0x9d,0x2b,0xab,0xf8,0xb9, + 0x7f,0x79,0x3e,0xbd,0x6e,0xb1,0x68,0x3a,0xc4,0xd6,0xeb,0x0a,0x93,0x34,0x16,0xac, + 0xe9,0x2e,0x00,0x3c,0x6d,0xce,0x46,0x73,0xd7,0x15,0xc1,0x47,0x3c,0x51,0xcc,0xfe, + 0x7e,0x97,0xaa,0xc0,0x1f,0xa2,0xb6,0x9e,0xe3,0x03,0x93,0xe9,0x5e,0x43,0xb2,0x6d, + 0x9e,0xc4,0x6f,0xca,0x91,0x43,0x5c,0xd3,0x35,0x1d,0x03,0xc6,0x1a,0x6d,0xca,0x4e, + 0xe7,0x4b,0xd5,0x6d,0x1a,0x55,0x41,0x8c,0x07,0x57,0xda,0x40,0x39,0x27,0x8e,0x3f, + 0x3a,0xd0,0x92,0xfc,0xdb,0x47,0x02,0x24,0x51,0xe0,0x46,0x3a,0xb1,0x15,0x9b,0xe2, + 0x8d,0x71,0x6d,0xee,0xfc,0x3b,0x6b,0x20,0xb8,0x30,0x43,0x05,0xc4,0xd0,0x34,0xb1, + 0x36,0xe2,0xaf,0x28,0x52,0xb8,0xc6,0x41,0x0d,0x1b,0x7e,0x75,0x89,0xa9,0x78,0xb2, + 0xc9,0x2e,0x7c,0xa2,0xb7,0x65,0xa3,0x50,0x8d,0xe5,0xc2,0xd8,0xc8,0xfc,0xab,0xab, + 0x92,0x75,0x39,0x54,0x55,0xdd,0x91,0x8f,0x32,0x8d,0xdb,0xee,0x7c,0x4d,0xfb,0x62, + 0x5c,0x19,0xfe,0x2f,0xdd,0x87,0x75,0x77,0x10,0xc1,0xb8,0xa7,0xdd,0xdd,0xb0,0x67, + 0x1f,0x8d,0x7a,0xaf,0xc4,0x16,0x66,0x5d,0x35,0xc3,0x60,0xc7,0x69,0x0c,0x61,0x81, + 0xe4,0xed,0x40,0x3f,0x4c,0x57,0x8b,0xfe,0xd4,0x77,0x89,0x77,0xf1,0x5e,0xff,0x00, + 0x6e,0xd2,0x12,0x28,0x95,0xb1,0xd0,0x30,0x8d,0x4f,0xf5,0x15,0xec,0xdf,0x11,0xce, + 0x26,0xb6,0x00,0xaf,0x96,0x61,0x8c,0x26,0x3a,0x05,0xc1,0x02,0xbd,0xfa,0xe9,0x35, + 0x0b,0x7f,0x5b,0x1e,0x4a,0x93,0x8c,0x5b,0xf3,0x3d,0x8b,0xe0,0xea,0xe9,0x5f,0x0c, + 0xaf,0xac,0xfc,0xb8,0x6e,0xbc,0x49,0xac,0x6a,0x6e,0xd6,0xef,0x24,0x30,0xa0,0x8e, + 0xcf,0x60,0x8a,0x46,0xc8,0x7c,0x96,0xc6,0xec,0x96,0x07,0x90,0x2b,0xd6,0xf5,0xef, + 0x8b,0x5a,0x2d,0xb7,0x86,0x6f,0x42,0xe9,0x2d,0x27,0x8a,0x61,0x80,0x5d,0x49,0x75, + 0xf6,0x54,0x36,0xdb,0x7c,0xc0,0xbf,0x31,0xf7,0x5e,0x06,0x7b,0xd7,0x95,0x78,0x16, + 0x5f,0x2f,0xc7,0xf6,0x68,0x13,0x28,0x2f,0x35,0x4e,0x71,0x9c,0x62,0x18,0xd4,0x7f, + 0x2a,0xda,0xd6,0xe1,0xc7,0x82,0x7c,0x6e,0xca,0x30,0xc6,0xca,0xc5,0x07,0xb8,0x32, + 0x33,0x11,0xfa,0x57,0x99,0x1a,0x30,0xa9,0x37,0x29,0xae,0x87,0x52,0xab,0x28,0xc6, + 0xd1,0x67,0xc7,0x3f,0xb4,0xc5,0xf9,0xf1,0x37,0xed,0x13,0x6c,0xce,0x77,0x79,0xf1, + 0x44,0x42,0xe7,0x80,0x0c,0x8e,0xcb,0xf9,0x74,0xaf,0x58,0xf8,0x61,0x79,0x6d,0x27, + 0xc5,0x5b,0x0d,0x3f,0x59,0xd5,0x75,0x0f,0xec,0x10,0xc5,0xaf,0xb4,0xeb,0x1b,0xf9, + 0x21,0x2c,0x12,0x22,0xe7,0x0a,0x8c,0x39,0xf9,0x46,0x7d,0x47,0xb5,0x79,0x47,0xc6, + 0xbb,0x38,0x6d,0xbf,0x68,0x6d,0x28,0x84,0xf2,0x2d,0xa2,0x58,0x61,0x58,0x63,0x5c, + 0x22,0x80,0xec,0x88,0x00,0x1d,0x80,0xe3,0x03,0xa5,0x74,0x1f,0x08,0x77,0x5f,0x7e, + 0xd1,0x17,0x32,0xb0,0x38,0x5b,0x6b,0xf5,0x3e,0xff,0x00,0xe8,0x92,0x01,0x5e,0xc5, + 0xaf,0x4a,0x29,0x76,0x39,0x94,0x97,0x33,0xb9,0xdd,0xff,0x00,0xc1,0x40,0x7c,0x63, + 0xa4,0xf8,0xb7,0xc5,0xde,0x0c,0xd5,0x34,0x98,0x2e,0x2d,0xec,0x64,0xd3,0x55,0xa2, + 0x5b,0x85,0xda,0xe7,0x13,0x4c,0x09,0xc7,0xbe,0x38,0xfc,0x2b,0xe6,0x3d,0x4e,0xf4, + 0x1d,0x54,0xca,0x57,0x72,0x4b,0x87,0x5d,0xc3,0x1c,0xe0,0x67,0x35,0xf4,0x8f,0xed, + 0xa5,0xa3,0xc9,0xe2,0x2f,0x1d,0xfc,0x31,0xd0,0x2d,0xe7,0x16,0xb3,0x4f,0xa3,0xd8, + 0x5b,0x89,0x36,0xee,0xdb,0xbb,0xcd,0xe7,0x1f,0x52,0x2b,0xe6,0xaf,0x8a,0x1e,0x0b, + 0xd4,0xbc,0x03,0xaa,0x59,0xd8,0x6a,0xf2,0x41,0x75,0x2c,0x96,0xe5,0x91,0xe0,0x72, + 0xca,0xc4,0x31,0x19,0xe4,0x02,0x0f,0x18,0xe9,0x58,0x42,0x30,0x4e,0x34,0xba,0xd9, + 0x9d,0x0a,0x52,0xb3,0x9f,0x42,0xe4,0xd7,0x5b,0xb5,0x4b,0x78,0xa3,0xdb,0xe6,0x3c, + 0xaa,0x09,0xdb,0xc6,0xed,0xc3,0x9e,0x7d,0x38,0xe7,0xd8,0x54,0xda,0xce,0x8d,0x13, + 0xcb,0x75,0x7d,0xa9,0x5d,0x34,0xc4,0x06,0x9a,0x34,0x0a,0x7e,0x70,0x83,0xa8,0x18, + 0xc6,0x49,0xc5,0x73,0x3a,0xd5,0xb5,0x84,0x57,0xf6,0x73,0xbd,0x9d,0xc4,0x93,0xdc, + 0x5b,0xab,0x96,0xb7,0x93,0x80,0x41,0xc7,0x46,0xef,0xc5,0x77,0x1a,0x76,0x89,0xa7, + 0xf8,0xe3,0x52,0x44,0xb8,0x7b,0xa8,0xae,0xa5,0xc4,0x3b,0xee,0x1c,0xe1,0x72,0x0f, + 0xcf,0x8e,0x98,0x19,0x27,0x8f,0xeb,0x44,0xa0,0xa9,0xda,0x57,0x2d,0x35,0x3b,0xc5, + 0x44,0x8e,0xc2,0xe2,0x5f,0x18,0xc1,0xa7,0x6a,0x11,0xd9,0x2d,0x8e,0x9e,0x8e,0x6d, + 0xc4,0xa6,0x33,0x21,0x77,0x1f,0x2f,0x5e,0x87,0x00,0xa9,0xed,0x9e,0x07,0x3d,0x6b, + 0x14,0xda,0xcf,0xa4,0x5d,0x45,0x05,0xed,0xba,0x24,0x6b,0xe5,0x3b,0xdb,0xdc,0x13, + 0x10,0x75,0xdd,0xc8,0x6c,0x1e,0x17,0xdf,0xb7,0xe1,0x5e,0x89,0xf0,0xbb,0xc2,0xb6, + 0x11,0x78,0x3f,0x5b,0x8a,0x5b,0x59,0x1b,0x51,0x85,0xda,0x7b,0x79,0x2e,0x93,0x2f, + 0xfe,0xaf,0x1f,0x2f,0xa6,0x18,0x0f,0xce,0xba,0x6f,0x1e,0x78,0x76,0x3f,0x15,0x5a, + 0xc3,0x78,0xd7,0xf6,0xda,0x4f,0xd9,0x60,0xc4,0x6d,0x7a,0x85,0x3c,0xc2,0x4e,0xe0, + 0x01,0x24,0x64,0x7e,0x1c,0x67,0xbe,0x78,0xc1,0x55,0x50,0xa8,0xe9,0xdb,0xdd,0x2a, + 0x54,0xb9,0xa0,0xaa,0x37,0xa9,0xd4,0x5a,0x68,0x9a,0x66,0xae,0xf6,0xf7,0x17,0xb6, + 0x51,0xcd,0xe7,0x40,0x20,0x65,0x90,0xef,0x0a,0x8c,0x30,0xc0,0x76,0xe8,0x7a,0x8e, + 0xb5,0xe0,0x3e,0x10,0x8d,0x7c,0x17,0xe2,0xb9,0x6d,0xe5,0xd8,0xb7,0x3a,0x6e,0xa7, + 0x25,0xa4,0xae,0x40,0xdc,0xe8,0xc3,0x8f,0xc0,0x18,0x9f,0xfe,0xfe,0x0a,0xf4,0x2b, + 0x2d,0x5a,0xfb,0x51,0x82,0xe9,0xee,0xfc,0x63,0x04,0x17,0xac,0xc0,0xc6,0x9a,0x7c, + 0x22,0x55,0x23,0xf8,0xbb,0x13,0x9f,0xca,0xae,0x5b,0x69,0xba,0x21,0x82,0xee,0x7b, + 0xbd,0x56,0xfa,0x5d,0x4e,0xe2,0x4d,0xf2,0xdc,0x2d,0xbe,0xd3,0x27,0x03,0x96,0xf9, + 0x39,0xef,0xc9,0xf5,0xac,0xb0,0x74,0x27,0x4e,0x33,0x84,0xf5,0x4f,0xd4,0xdf,0x13, + 0x5a,0x15,0x25,0x09,0xc3,0x46,0x8f,0x50,0xd3,0xb4,0xfb,0x7d,0x6a,0xcd,0xad,0xaf, + 0xa0,0x82,0xea,0x2f,0xbe,0x91,0xcf,0x18,0x75,0x1e,0xbc,0x1e,0x3d,0x2a,0xfd,0xb7, + 0x85,0x74,0xa4,0x8c,0x47,0x1c,0x93,0x58,0xb6,0x3e,0x54,0xb3,0xbc,0x92,0x0c,0x7f, + 0xc0,0x56,0x40,0x0f,0xe2,0x2b,0xcb,0xac,0x57,0x42,0x79,0xe2,0xf3,0xb5,0x6b,0xeb, + 0x98,0xc6,0x0e,0xd9,0x6e,0xf6,0x71,0xff,0x00,0x7d,0x2e,0x3f,0x2e,0x2b,0x2f,0xc4, + 0xfa,0xdf,0x86,0xb4,0xf8,0x5a,0x6b,0x08,0x67,0xb8,0x91,0x1f,0x3b,0x64,0xd4,0x02, + 0x1c,0x10,0x41,0xc3,0x79,0x9c,0x11,0xbb,0x3c,0xf0,0x71,0x53,0x1c,0x1c,0xa1,0x1e, + 0x54,0xde,0x9f,0xd7,0x71,0xd4,0xaf,0x19,0xcb,0x9a,0xd6,0x3a,0x6f,0x11,0xe8,0xeb, + 0xe0,0x1d,0x3a,0x68,0xa1,0xba,0xb5,0xd4,0x74,0xe5,0x12,0x4c,0x23,0xd4,0xe3,0x06, + 0x64,0x2c,0xdb,0x98,0xa4,0xa3,0xef,0x1c,0xf3,0x82,0x33,0xc7,0xde,0x15,0xe7,0xbf, + 0xdb,0x36,0xfa,0xbe,0x9a,0xd3,0x8f,0x3e,0xfe,0xda,0x1b,0x85,0x91,0x15,0x91,0xb0, + 0x80,0xf1,0x22,0x30,0x39,0x00,0x15,0x3e,0xc3,0x27,0x81,0x8e,0x6b,0x3e,0x6f,0x12, + 0xf8,0x6e,0xf2,0xda,0xdd,0x21,0x79,0xaf,0x25,0x7c,0x23,0xcd,0x77,0x70,0xc3,0x6e, + 0x32,0x49,0xfb,0xe4,0x1c,0x9e,0x08,0xce,0x0f,0x07,0x3c,0x56,0x1c,0x57,0xf6,0x9a, + 0x55,0x8f,0x91,0x34,0x56,0xf2,0xcc,0xaf,0xba,0x3b,0x9b,0x49,0x83,0x6f,0x1d,0xf7, + 0x8d,0xc4,0x7e,0x02,0xbb,0x29,0x61,0x24,0xd5,0xe4,0xb5,0x39,0x2a,0x57,0xb3,0xf7, + 0x59,0xf7,0xdf,0xec,0xff,0x00,0xe0,0x1f,0x82,0xfa,0xb7,0xc3,0x7d,0x22,0xe7,0x53, + 0xbb,0xb6,0x1a,0xe5,0xd5,0x99,0x17,0xb6,0xc6,0xf8,0x7e,0xed,0x8b,0xb1,0x00,0xa0, + 0x3f,0x2f,0x18,0xec,0x38,0xed,0x57,0x3f,0xe1,0x44,0x7e,0xce,0x16,0xb2,0x11,0x3c, + 0x9a,0x39,0x64,0x25,0x59,0x5e,0xe9,0x0f,0x3e,0xf9,0xe8,0x7e,0x98,0xaf,0x8a,0x7e, + 0x1d,0x6b,0x10,0x07,0xd5,0x25,0x6b,0x48,0xe7,0x8c,0xcc,0x80,0x02,0x71,0x81,0xb4, + 0x67,0x18,0x3c,0xf5,0xef,0x5a,0x3e,0x24,0xd4,0xac,0x84,0x85,0xd2,0xde,0x41,0x6d, + 0xbf,0x7a,0xc7,0x9e,0x9e,0xa3,0x39,0xe9,0x5c,0xaa,0x8b,0x85,0x47,0x08,0xb7,0xa9, + 0xa4,0xab,0x2a,0x91,0x52,0x92,0xd4,0xdc,0xfd,0xa6,0x6c,0xfc,0x23,0x7f,0xf1,0x0a, + 0xef,0x40,0xf0,0xe5,0xea,0xc3,0xa2,0x69,0x50,0x2a,0x59,0xad,0x99,0x8d,0xd1,0x9b, + 0xc9,0xb6,0x38,0xc8,0xc6,0x13,0x0f,0x28,0xe0,0x1f,0x99,0x40,0xef,0x5e,0x99,0xfb, + 0x1a,0xda,0xe9,0x3a,0x97,0xfc,0x24,0xab,0x71,0x67,0x63,0xa9,0x35,0xa8,0xb6,0x45, + 0x96,0xf2,0xde,0x39,0xf6,0xb1,0x12,0x86,0x2a,0x5c,0x1e,0xa1,0x57,0xf4,0xf4,0xaf, + 0x94,0xfe,0xdf,0x0d,0xf7,0x8b,0xaf,0x56,0xde,0xdc,0xa3,0x2c,0x6f,0x85,0xea,0x48, + 0xc4,0x7c,0x7b,0xf5,0xaf,0x7a,0xfd,0x87,0x2f,0x6e,0x53,0xc5,0x7e,0x22,0xb2,0xb6, + 0x96,0xd6,0xd7,0xed,0x10,0x23,0x31,0xbb,0xde,0x54,0x15,0x27,0x18,0x0b,0x93,0x9f, + 0x98,0xfb,0x75,0xaa,0xc6,0x51,0xb6,0x19,0xab,0xec,0x89,0xa1,0x55,0xfb,0x4f,0x53, + 0xec,0x6b,0x6f,0x0d,0xe8,0xd1,0x0c,0xdb,0xe9,0x9a,0x5c,0x32,0x0c,0xe5,0xa2,0xb0, + 0x80,0x75,0x1d,0x38,0x4f,0x5a,0xf1,0x3f,0xdb,0x6b,0x46,0xb3,0xb7,0xf8,0x59,0xa1, + 0xdd,0x45,0x6b,0x6f,0x14,0xbf,0xf0,0x90,0x40,0x86,0x48,0xa1,0x55,0x38,0xfb,0x2c, + 0xa7,0x19,0x03,0xa7,0x4f,0xca,0xbd,0xde,0x1d,0x3b,0x52,0xdf,0xb9,0x6f,0x74,0xc1, + 0x80,0xc0,0xcb,0x12,0xcc,0x17,0x77,0x1c,0x74,0xe3,0xae,0x7a,0x62,0xbc,0x3f,0xf6, + 0xd3,0xbc,0x6b,0x6f,0x85,0x9a,0x0c,0x53,0xc9,0x61,0x72,0xa7,0x5d,0x86,0x4f,0xdc, + 0x99,0x37,0x2f,0xfa,0x34,0x8a,0xbf,0x78,0x00,0x41,0xda,0xc6,0xbe,0x67,0x09,0x29, + 0x3a,0xf0,0x57,0xea,0x7a,0x15,0x52,0x50,0x6e,0xc7,0xdf,0x9e,0x3d,0x9d,0xed,0x7e, + 0x11,0xeb,0x92,0xa0,0x52,0xd1,0xe8,0xf3,0x30,0xde,0xa1,0x86,0x44,0x24,0xf2,0x0f, + 0x04,0x57,0xe5,0x9f,0xc6,0xfd,0x4e,0xe7,0x5f,0xb0,0xf1,0x6b,0xde,0xa5,0xac,0x49, + 0x6b,0x65,0x69,0x1a,0x9b,0x78,0x96,0x23,0x82,0xdc,0x93,0x81,0xc9,0xc8,0x23,0xf1, + 0xaf,0xd3,0x0f,0x88,0x37,0xba,0xb3,0x7c,0x1d,0xd7,0xe4,0x78,0x6c,0x55,0x3f,0xb1, + 0xa6,0x63,0x89,0x9c,0x10,0x3c,0x93,0xfe,0xcd,0x7e,0x53,0xfc,0x4d,0xbe,0x32,0xda, + 0x7c,0x40,0x24,0xe2,0x40,0x6c,0xa2,0x20,0x1c,0x82,0x72,0x7a,0x7b,0x71,0x5f,0x43, + 0x19,0xaa,0x95,0x54,0x96,0xd6,0x5f,0x99,0xe6,0xd3,0xba,0x4d,0x1e,0x37,0x05,0xbd, + 0xbd,0xb9,0xb6,0x99,0x5b,0x6b,0x0b,0xbf,0x97,0x23,0xef,0x0c,0x21,0xcf,0xfe,0x3c, + 0x7f,0x3a,0xe8,0xbe,0x2b,0x15,0x1f,0x0b,0xbc,0x31,0x36,0xef,0x94,0xb5,0xd4,0x5d, + 0x73,0x82,0x16,0x25,0xe7,0xf1,0x22,0xb8,0xe9,0x26,0xf3,0xac,0xac,0x43,0xca,0x77, + 0x07,0xc9,0x40,0x0e,0x0f,0x08,0xbc,0x9f,0xf8,0x0d,0x7b,0x0f,0x84,0x7c,0x1f,0xe1, + 0xef,0x1f,0xf8,0x67,0xc2,0x5a,0x6f,0x8a,0x6f,0x5f,0x4c,0xd2,0x16,0xfa,0xf3,0xcd, + 0xbc,0x12,0x84,0xf2,0xff,0x00,0x77,0x0e,0x39,0x23,0x1d,0x78,0xfc,0x6b,0xd9,0xb5, + 0x9a,0x67,0x2a,0x7a,0x33,0xe7,0xff,0x00,0x87,0x5a,0x9c,0x1a,0x76,0xbb,0x24,0x77, + 0x32,0xac,0x16,0xd7,0xb0,0x3d,0xab,0xc8,0xdd,0x14,0xb6,0x0a,0xb1,0xf4,0x01,0xd5, + 0x49,0xf6,0x06,0xbe,0xee,0xf8,0x27,0xac,0x45,0xe2,0xbf,0x04,0xa6,0x9f,0x7d,0x00, + 0x96,0xef,0x44,0x45,0x82,0x6f,0x36,0x31,0xb7,0x00,0x10,0x84,0x13,0xc6,0x76,0x8e, + 0x7e,0x99,0xe8,0x6b,0x94,0xba,0xfd,0x8e,0x3e,0x08,0xcd,0x1e,0xfb,0x0f,0x8a,0x66, + 0x37,0x23,0x20,0x35,0xec,0x0d,0xff,0x00,0xb2,0x54,0x5a,0x17,0xc3,0x09,0x34,0xbf, + 0x07,0xea,0x1a,0x4e,0x85,0xa8,0x5c,0x78,0x83,0x4a,0xb6,0xbc,0xb9,0x5b,0xcd,0x45, + 0x27,0x20,0x1b,0x34,0x86,0x00,0x99,0xda,0x46,0x40,0x79,0xca,0x77,0xe1,0xc8,0xe9, + 0x4a,0xa4,0xd5,0x39,0x46,0x5d,0xf4,0x3d,0x0c,0x2c,0xe3,0x5e,0x8c,0xf0,0xf2,0xd9, + 0x7b,0xd7,0xed,0xb2,0x7a,0x75,0xba,0x3d,0xdd,0xfc,0x53,0xa3,0x78,0x23,0x46,0x37, + 0x57,0xb7,0x4b,0x63,0x07,0x2c,0x22,0x77,0x05,0xc9,0xf4,0x55,0x04,0x93,0xf8,0x52, + 0x7e,0xcb,0x1e,0x0b,0xd5,0x3e,0x2b,0x7c,0x46,0xd6,0xfe,0x20,0xdd,0x41,0x73,0x63, + 0xa7,0x40,0x51,0xed,0x9d,0x14,0xe6,0x4c,0x3a,0x85,0x45,0x38,0xe7,0x84,0xe4,0x8e, + 0xeb,0xef,0x5d,0x8f,0xc2,0xcf,0xd8,0x43,0xc2,0x49,0xa6,0x68,0x7a,0xe6,0xa7,0x67, + 0x7b,0xac,0x25,0xc5,0xa4,0x57,0x6d,0x69,0x25,0xea,0xc7,0x16,0x59,0x15,0xb6,0x9c, + 0x0d,0xc4,0x0c,0x9e,0x33,0x5b,0xde,0x33,0xd4,0x6c,0x2d,0x7c,0x53,0x07,0x86,0x2d, + 0x6f,0xac,0x74,0x6b,0x68,0xc9,0xdb,0xa1,0xc7,0x2a,0x2e,0x02,0x92,0x06,0x23,0x1d, + 0x7e,0x50,0x46,0x6b,0x8d,0xb9,0x62,0x25,0x66,0xac,0xbe,0x67,0x5a,0x9d,0x0a,0x34, + 0x67,0x4e,0x83,0x6d,0xcb,0x46,0xde,0x9a,0x5f,0x64,0x93,0x7b,0x9f,0x57,0x40,0x84, + 0x48,0xcc,0x3a,0xec,0x1f,0xcc,0xd4,0x3a,0xd9,0xdd,0xa3,0xdd,0x2e,0x7e,0xf2,0x15, + 0xfc,0xf8,0xfe,0xb5,0xcf,0xf8,0x26,0x5b,0xeb,0x1f,0x07,0xe8,0xb1,0x8d,0x2e,0x43, + 0xb2,0xca,0x08,0xf6,0xac,0xa9,0xc8,0x08,0x3e,0x6e,0x4f,0xe9,0x57,0x75,0x7d,0x46, + 0xe8,0xe9,0xee,0x25,0xb0,0x96,0xd9,0x1a,0x48,0xd4,0xc9,0x2c,0xb1,0xed,0x50,0x5c, + 0x64,0xf0,0xc4,0xfe,0x95,0x92,0x7c,0x94,0xda,0xd7,0x67,0xd1,0x9e,0x32,0x5e,0xf2, + 0x3e,0x7a,0xf8,0xd5,0xad,0xdf,0x59,0x6a,0xba,0x74,0x56,0xb7,0x26,0xdd,0x3e,0xcc, + 0x16,0x40,0x64,0x2a,0xac,0xa6,0x28,0x8f,0x38,0xe7,0xae,0x79,0x1e,0xfd,0x33,0x9a, + 0xf2,0xbb,0x1d,0x63,0x5a,0xb9,0xf2,0xc2,0xea,0xb7,0x80,0xf9,0xbc,0xa2,0x5c,0xb9, + 0x04,0xfa,0x63,0x71,0xe8,0x00,0xe4,0xfa,0xf5,0xae,0xe3,0xe2,0xfb,0xeb,0xba,0xbe, + 0xae,0xa1,0x3c,0x3d,0x39,0xb4,0x58,0x22,0x2b,0x24,0x6d,0x13,0xbb,0xaf,0x94,0x98, + 0xdc,0x03,0xe5,0x7a,0x74,0x3e,0xb5,0xe7,0xb6,0x1a,0xa9,0xd3,0xaf,0x52,0x17,0xd3, + 0x25,0x13,0x16,0x32,0x08,0xa5,0xf2,0x8f,0x4c,0x67,0xe5,0x2f,0xd8,0x7f,0x3e,0x6b, + 0xe7,0x27,0x52,0x10,0xbb,0x9b,0xb1,0xf4,0x54,0x30,0xf5,0x2b,0x25,0x1a,0x51,0x72, + 0xd3,0xa6,0xbf,0x91,0xa1,0xf1,0x1a,0xfa,0x44,0x97,0xc3,0x81,0x5d,0x95,0xc5,0xa5, + 0xc3,0xb1,0x5e,0xa4,0x9b,0xa9,0x7a,0xff,0x00,0xdf,0x35,0x77,0xc1,0x97,0x5a,0x36, + 0xa1,0xa2,0x87,0xd4,0xe2,0xb3,0xb8,0xbb,0x49,0x19,0x19,0xa6,0x93,0x0c,0x07,0x50, + 0x0f,0xe7,0x55,0xbe,0x21,0xd8,0xeb,0x1a,0xb5,0xf6,0x9d,0x76,0xba,0x05,0xfc,0x5a, + 0x74,0x16,0x0b,0x12,0xcc,0xb1,0xee,0x19,0x32,0xc8,0xfb,0x9b,0x91,0xb7,0x3e,0x60, + 0xc7,0x27,0xa6,0x7b,0xd7,0x27,0x2c,0x3e,0x10,0x9e,0x28,0x0e,0xa5,0xa8,0xdb,0x58, + 0x5f,0xaa,0xb2,0xcd,0x0c,0xd7,0x0b,0x1c,0x80,0x87,0x6c,0x16,0x53,0xd0,0xe3,0x1f, + 0x86,0x2b,0xd6,0xc2,0x56,0xa6,0xeb,0x46,0xf2,0x4b,0xdd,0x5d,0x7c,0x91,0xc9,0x3c, + 0x2d,0x7e,0x46,0xd5,0x36,0xf5,0xec,0xcf,0xcf,0xdf,0x8e,0x3a,0x8d,0xbe,0xb9,0xf1, + 0x0a,0xfe,0xfe,0xd2,0x68,0xe6,0xb5,0x98,0xa3,0x24,0x91,0x9c,0xab,0x01,0x1a,0x03, + 0x8f,0xc7,0x35,0xed,0x7f,0x11,0x3c,0x5d,0xa2,0xea,0x72,0xe9,0xbe,0x5e,0xb7,0xa7, + 0x1f,0xb4,0xac,0x60,0x4a,0x2e,0x17,0x60,0x1b,0x98,0x6e,0xea,0x78,0x1d,0xeb,0xe7, + 0x5f,0x12,0xf9,0xc9,0x60,0x85,0xcc,0x65,0x40,0x00,0xe0,0x73,0x8c,0xfd,0x2a,0x4d, + 0x56,0xd9,0x2f,0xfc,0x3d,0xa0,0x3b,0xaa,0xc8,0xd1,0x89,0x11,0x98,0x01,0x8c,0x2b, + 0xe7,0xf9,0x30,0xfc,0x85,0x7d,0x1b,0xa0,0xa4,0x92,0xbe,0xc7,0x83,0x29,0x5e,0xfe, + 0x6c,0xfb,0xe3,0x46,0xd7,0xfc,0x21,0x6d,0xe3,0x3b,0x79,0x20,0xf1,0x46,0x9b,0x24, + 0x26,0x2d,0x42,0xf5,0xe5,0x1a,0x94,0x24,0x07,0x67,0x5d,0xab,0x90,0x40,0xc1,0xdb, + 0xc0,0xf4,0xf5,0xe4,0x56,0x79,0xf8,0xcb,0xe1,0xcd,0x67,0x4d,0xf1,0xb6,0x8b,0x25, + 0xc4,0x51,0xc7,0x1c,0x36,0x8c,0x6e,0x1e,0x75,0xf2,0xdd,0x63,0xdc,0x1b,0x69,0x07, + 0x9e,0x0e,0x78,0xf4,0xaf,0x87,0xec,0xe2,0x79,0xe2,0x44,0x16,0x76,0xed,0xb9,0x0f, + 0x02,0x35,0x18,0x19,0xc6,0x7f,0x2a,0xa0,0x65,0x37,0xf2,0x88,0xe3,0x85,0x23,0x10, + 0x49,0x92,0xe8,0xa0,0x67,0x00,0x81,0xcf,0xe7,0xf9,0xd7,0x12,0xc2,0x72,0xcb,0xe2, + 0x35,0x55,0x6e,0xad,0xca,0x7a,0x97,0x89,0x3c,0x45,0x6f,0xf1,0x5f,0xe3,0x4d,0xb6, + 0xa1,0xa7,0xc0,0x2d,0x60,0x82,0xe1,0x59,0x1a,0x41,0x82,0x61,0x8a,0x42,0x73,0xf5, + 0x27,0xaf,0xe5,0x5d,0x5f,0xc0,0x69,0x12,0x7f,0x8d,0x5a,0xa5,0xe3,0xe1,0x42,0x5a, + 0xdf,0x36,0xe6,0x7c,0xee,0xca,0x3a,0x64,0x7a,0x75,0x1c,0x57,0x96,0x7c,0x20,0xb0, + 0xf2,0x7c,0x75,0x34,0x8e,0xc5,0x84,0x76,0xb2,0x36,0x48,0xf5,0x3d,0x3d,0xf1,0x58, + 0xba,0x7c,0x56,0xd7,0xd3,0xab,0xaf,0x98,0xac,0x5d,0xcb,0x1d,0xc4,0x99,0x18,0xb3, + 0x11,0x81,0xcf,0x50,0x40,0xae,0xce,0x55,0x18,0xa4,0x88,0x5a,0xbb,0x9f,0x59,0x7e, + 0xd7,0x1a,0xcf,0xf6,0x3f,0xc5,0x58,0x2f,0x04,0x11,0xc9,0x75,0xa4,0x69,0x56,0x11, + 0xdb,0x17,0x20,0x6d,0x3e,0x4e,0xed,0xe3,0x20,0xf2,0x0b,0xe3,0xf0,0xaf,0x9a,0x3c, + 0x7d,0xe2,0x81,0xe3,0x8d,0x4a,0xd6,0xf3,0x54,0xb8,0x56,0x9a,0xd9,0x36,0x26,0xcc, + 0x7f,0x7b,0x73,0x73,0xdf,0xa9,0xae,0x67,0xc4,0x57,0x66,0x2b,0x6b,0x04,0x79,0x66, + 0x4b,0x79,0x65,0x90,0xbe,0xf9,0x77,0x31,0xf9,0x53,0x1d,0x85,0x63,0xdb,0xc5,0x1d, + 0xac,0xd1,0x48,0xbe,0x6d,0xc2,0x48,0x46,0x16,0x5f,0xfe,0xb0,0xa8,0x54,0x62,0xa4, + 0xaa,0x75,0x35,0x53,0x7c,0xbc,0x9d,0x0e,0xf2,0xd7,0x5d,0xb0,0xb5,0xd5,0xa3,0x64, + 0xb3,0x8e,0xe6,0x71,0x0a,0xf9,0x30,0xb8,0x2d,0xb9,0x71,0xc8,0xc7,0x4c,0xe7,0x26, + 0xba,0x9f,0x05,0xf8,0xc2,0x2d,0x3f,0x54,0x95,0x13,0x43,0x97,0x50,0x92,0x66,0x0f, + 0x1a,0x2d,0x90,0x66,0x0c,0x07,0x40,0x37,0x0e,0x31,0x9a,0xf2,0x8f,0x13,0xc7,0x73, + 0x63,0x77,0x61,0x77,0x6a,0x1e,0x27,0x96,0x35,0x02,0x48,0xd4,0xfc,0xbc,0x0e,0x87, + 0xf1,0xae,0xbb,0xc2,0x5a,0xde,0xa9,0x77,0xe1,0x5d,0x6e,0x10,0x6f,0x6e,0xe5,0x68, + 0x64,0x58,0xd9,0x18,0x12,0xa4,0x10,0x01,0x51,0x8c,0xe7,0xaf,0x4a,0xc2,0xb5,0x2b, + 0xae,0x63,0xaa,0x8d,0x44,0xbd,0xd3,0xdd,0x74,0x7f,0x1e,0x78,0x9a,0xfe,0x0d,0x42, + 0x28,0x74,0x88,0x6c,0x5c,0x41,0x94,0x13,0xcd,0x1c,0x44,0xf5,0xfe,0x12,0x09,0xfd, + 0x6b,0x90,0xf1,0x0d,0xbe,0xa9,0xaa,0xf8,0x75,0x35,0x5d,0x72,0xee,0xcf,0x4c,0xb0, + 0x85,0x63,0x5f,0x3a,0x01,0x3f,0x9b,0x1a,0x83,0x80,0x03,0x2e,0x41,0xeb,0x8f,0xc6, + 0xb1,0x7c,0x07,0xe1,0xad,0x73,0x4b,0xb8,0xf0,0xfc,0xef,0xa2,0xde,0x59,0x44,0x1a, + 0x76,0xbd,0xb8,0x96,0xdf,0x6b,0x48,0xa7,0x94,0xdc,0x48,0x2c,0x7b,0xf6,0xa9,0xbc, + 0x4d,0xe3,0xad,0x06,0xfb,0xc2,0x77,0xba,0x12,0x4f,0x33,0xdf,0x3e,0x50,0x46,0x96, + 0xdf,0x2e,0xe5,0x93,0x3c,0xb8,0xc7,0xa7,0xa1,0xae,0x65,0x4f,0x96,0x4a,0x30,0xd7, + 0x6d,0xba,0x0e,0x52,0x4d,0x37,0x2d,0x0f,0x3a,0x4d,0x2e,0x59,0x25,0x32,0x59,0x5f, + 0xdd,0x5e,0x42,0xcc,0x58,0x79,0xa5,0x89,0x1f,0x51,0x93,0x8a,0x7d,0xae,0xa1,0x16, + 0x8d,0xa9,0xc4,0xf7,0x31,0xfd,0xa7,0xca,0xce,0xf8,0x5c,0x70,0xf9,0x1d,0x33,0x5d, + 0xaf,0x83,0x64,0xd2,0xec,0x34,0x89,0x22,0xbd,0xd2,0x6f,0xae,0x2f,0x7c,0xd6,0x92, + 0x39,0x6c,0xe3,0xc1,0xc1,0x50,0x30,0x49,0xeb,0xc8,0xcf,0x4a,0xc0,0xf1,0x15,0xbc, + 0xba,0xaf,0x88,0xac,0xb5,0x18,0x34,0x0d,0x48,0xdb,0xc0,0x62,0x32,0xc0,0xf6,0xfc, + 0xca,0x53,0x03,0x3c,0x63,0x82,0x2b,0xe8,0x23,0x35,0x04,0xe1,0x35,0xa7,0x73,0xce, + 0x71,0x6f,0xde,0x8b,0x28,0xbc,0xb6,0x5a,0xad,0xf1,0x16,0x88,0xf6,0xb2,0x48,0xbb, + 0xbc,0xa0,0xc0,0x82,0x31,0x9e,0x33,0xed,0xda,0xb6,0xad,0xef,0xa6,0xb2,0xf0,0xfd, + 0xc5,0xaa,0x69,0x71,0x5e,0x32,0x07,0x19,0x9e,0x19,0x01,0xe8,0x4e,0x32,0x30,0x2b, + 0x26,0xc3,0x4a,0x9b,0x4d,0xf1,0x25,0xa6,0xa3,0x0f,0x85,0x35,0xab,0xcb,0x28,0xe3, + 0xd9,0x24,0x13,0xc5,0xb5,0x99,0x80,0x21,0x48,0x60,0x08,0x1d,0x47,0x6e,0xde,0xf5, + 0xe8,0xba,0x67,0x8d,0xb5,0x6b,0x5b,0x39,0x52,0xdf,0xc0,0x7a,0x84,0x10,0xab,0x16, + 0xdd,0x71,0x29,0x39,0xcb,0x03,0xd7,0xcb,0x1d,0xeb,0x92,0xae,0x25,0xbf,0x76,0x0a, + 0xeb,0xd4,0xd6,0x14,0xfa,0xcb,0xf2,0x3c,0x6b,0x40,0xd3,0x2e,0x1a,0xdf,0x64,0xa8, + 0xc1,0xc9,0x25,0x47,0x7d,0xa7,0x9f,0xf3,0xf8,0x56,0xa2,0x59,0xcd,0xa7,0xdd,0x86, + 0x78,0x72,0x91,0xb8,0x62,0x26,0x04,0x2e,0x7d,0xfd,0xab,0xd2,0xcd,0xee,0xb3,0x6b, + 0x7f,0x2d,0xcc,0x7e,0x08,0x4b,0x57,0x3f,0x31,0x9d,0xaf,0x9d,0xdf,0x9e,0xca,0x33, + 0xf2,0xf5,0x35,0x07,0x88,0xee,0x3c,0x49,0xe2,0x68,0x66,0xb5,0x6d,0x14,0x59,0xee, + 0x04,0x97,0xfb,0x4b,0x92,0x3a,0x7c,0xa5,0x4b,0x60,0xe7,0xd3,0x15,0xa4,0x71,0x35, + 0x25,0x15,0x64,0x92,0xf5,0x44,0xba,0x30,0x8b,0x7d,0xfd,0x0e,0x2a,0x1f,0x18,0xea, + 0xf6,0xec,0xd1,0x5a,0xa4,0x76,0xe3,0x71,0xcb,0x2c,0x6b,0x18,0x3c,0x7d,0x09,0x23, + 0xf0,0xab,0x62,0x6b,0x9d,0x72,0x33,0xf6,0xad,0x59,0x16,0xe0,0x60,0xf9,0x45,0x18, + 0xf1,0xeb,0xc9,0x03,0xf2,0xac,0x9b,0x5d,0x7e,0xf7,0x4f,0xb2,0x9e,0xce,0x4d,0x36, + 0xce,0x74,0xc9,0x55,0x90,0x67,0x7c,0x67,0xbe,0x0e,0x7d,0x87,0x06,0xae,0x6a,0x1a, + 0xd3,0x6a,0x61,0x67,0x96,0xc4,0x46,0xf0,0xc6,0x90,0xe6,0x29,0x78,0x00,0x74,0xf9, + 0x4e,0x4f,0xeb,0x5b,0xa8,0x53,0x6a,0xfb,0x79,0xe8,0x62,0xdb,0x28,0xe9,0x50,0x6a, + 0x10,0xf8,0xa2,0x58,0x59,0xcc,0x66,0x14,0xf3,0x62,0x95,0x62,0xff,0x00,0x5c,0xb8, + 0x51,0xea,0x38,0xe4,0x8e,0xbd,0xab,0xd6,0xbe,0x1e,0xf8,0xbf,0x5e,0xf8,0x1f,0x25, + 0xb7,0x8d,0x23,0xb1,0xb4,0xbb,0xf0,0xf4,0x97,0xa2,0xce,0xee,0xdc,0xed,0x13,0x82, + 0x57,0x96,0x5e,0x32,0x32,0x37,0x00,0x41,0xc7,0x1c,0x8a,0xf2,0xc8,0xb5,0x29,0x16, + 0x68,0x9a,0xea,0x12,0x63,0x00,0xae,0x24,0x4c,0xa8,0x42,0x3e,0x9c,0xe6,0xa0,0x6b, + 0x6d,0x27,0x59,0xd4,0x2c,0xa0,0xbd,0x73,0xa7,0xd9,0x47,0x20,0x32,0xcb,0x6f,0x00, + 0x67,0xd8,0x5c,0x03,0xb4,0x0c,0x03,0x85,0x24,0xf3,0xdc,0x63,0xbd,0x70,0x57,0xa7, + 0xed,0x2f,0x0d,0xe2,0x74,0xc1,0xf2,0xc5,0x4b,0x69,0x1f,0xae,0x96,0xb7,0x51,0x5d, + 0x59,0xac,0xb0,0x32,0xf9,0x52,0x28,0x6c,0x1f,0x97,0x72,0xb0,0xef,0xe9,0xd3,0xf4, + 0xaf,0x9a,0x3f,0x6e,0x49,0xa0,0xb8,0xf8,0x7f,0xa0,0x8c,0xc6,0x08,0xd6,0xe3,0x2d, + 0xb4,0x8c,0x1f,0xdc,0xcd,0xc9,0x3d,0x87,0xd2,0xbc,0x03,0x48,0xf8,0x4b,0xf0,0x7e, + 0xea,0x14,0x8e,0x0f,0x8b,0x7a,0xae,0x9f,0xe7,0x1e,0x45,0xe6,0x8a,0xf9,0x3d,0x3b, + 0xab,0x90,0x3f,0xfa,0xe6,0xbd,0x47,0xc1,0x3f,0xb1,0x2e,0x93,0xe3,0x6b,0x88,0xef, + 0xbc,0x3f,0xf1,0x76,0x2d,0x4a,0xd2,0x25,0x31,0xfe,0xe7,0x4e,0x59,0x36,0x8e,0x46, + 0x18,0x79,0xd9,0x5c,0x8f,0x51,0x9a,0xf9,0x4a,0x78,0x6a,0x38,0x4a,0x8a,0xa4,0xa6, + 0xf4,0xef,0x16,0x8f,0x45,0xd4,0x95,0x68,0xf2,0xa5,0xf8,0xa3,0xeb,0xcf,0xda,0x33, + 0xf6,0xb8,0xf8,0x7d,0xe1,0x5f,0x82,0x57,0xb6,0x3a,0x36,0xbd,0xa6,0x78,0xaf,0x5a, + 0xd5,0x2c,0x8e,0x9d,0x05,0x8e,0x97,0x7f,0x14,0x9e,0x59,0x68,0x88,0x67,0x95,0x81, + 0x3b,0x11,0x79,0xe4,0xf5,0x38,0x1e,0xb8,0xfc,0xd6,0xd7,0xbc,0x7d,0x1e,0xbd,0xe1, + 0xff,0x00,0x16,0x4f,0x7a,0xd6,0xb6,0x97,0x57,0x97,0x36,0xbe,0x5c,0x71,0xcc,0x09, + 0x70,0x1a,0x42,0xdb,0x47,0x53,0x81,0x8f,0xce,0xbd,0x8f,0x57,0xfd,0x85,0x74,0xf1, + 0xaf,0x26,0x8b,0x0f,0xc5,0xcd,0x22,0x5d,0x55,0x99,0x91,0xec,0x25,0xb6,0x55,0x9c, + 0x0d,0x84,0xe0,0x44,0x26,0xdc,0x48,0xc0,0xe0,0xe3,0x8c,0x9e,0xd8,0x3e,0x21,0xf1, + 0x27,0xe0,0x5c,0xff,0x00,0x0f,0x35,0xab,0xe8,0x5f,0x5b,0x5b,0xe9,0x34,0xeb,0xe2, + 0x0c,0x91,0x42,0x54,0xc9,0x80,0x38,0xc6,0xe3,0x8e,0x7e,0xb5,0xe9,0xe1,0x7e,0xac, + 0xbd,0xd8,0x4a,0xed,0xeb,0xb3,0x39,0x9c,0x6a,0x43,0x5b,0x68,0x71,0x36,0x93,0x2c, + 0xb0,0x22,0xbb,0x0f,0xbd,0x80,0xc4,0x77,0xde,0x78,0xfc,0x96,0xbd,0x51,0xed,0xa7, + 0xd4,0x7e,0x11,0x7d,0x8e,0x06,0x61,0x34,0xb3,0xce,0xa9,0xe5,0xf0,0x46,0x1e,0xdd, + 0xb3,0xfe,0x7b,0x57,0x8f,0xd9,0x44,0x7e,0xd3,0x1c,0x08,0x77,0x49,0x24,0x81,0x94, + 0x74,0x3c,0x93,0xdf,0xea,0xd5,0xea,0x1a,0x84,0xb1,0x49,0xf0,0xa6,0xde,0x27,0xba, + 0x5b,0x13,0xe7,0x49,0xba,0x67,0xc9,0x0b,0x93,0x6f,0xe9,0xcf,0x63,0x5e,0xdb,0x4d, + 0xb4,0x97,0x73,0x92,0x2d,0x24,0xdb,0xec,0x79,0xf1,0xf0,0xd5,0xcd,0xaf,0x88,0xa1, + 0xb0,0xb8,0x9e,0x77,0x72,0xfc,0xc6,0xef,0xbb,0x2b,0xf8,0x57,0xd8,0x3f,0x03,0xae, + 0x60,0xf0,0xaf,0xc2,0xad,0x4b,0x45,0x61,0x2d,0xbd,0xf6,0xa8,0x2f,0x6d,0xed,0xe3, + 0x31,0xb7,0x1b,0x6f,0x6c,0x4b,0x6e,0x3d,0x86,0xd5,0xef,0xd7,0x23,0x15,0xf1,0xaf, + 0x87,0xe4,0x32,0x78,0x9e,0xcc,0x8b,0xd6,0x9f,0xf7,0xaa,0xa0,0xa9,0xe1,0x86,0x47, + 0x3f,0xad,0x7d,0x8b,0xf0,0xaf,0x4b,0x5b,0xcd,0x3f,0xe1,0xf2,0x12,0x55,0xa6,0xd4, + 0x35,0x21,0xc0,0xce,0x4b,0x5e,0xc4,0x06,0x7f,0xef,0xd5,0x72,0x62,0xd4,0xa3,0xec, + 0xdb,0x7b,0x4b,0xf2,0x8b,0x3b,0xb0,0x73,0x8f,0xef,0x12,0x5b,0xc7,0xf3,0x92,0x3f, + 0x52,0x3c,0x29,0x1a,0x5b,0x78,0x6b,0x47,0x82,0x31,0x88,0xd2,0xca,0x15,0x50,0x7b, + 0x01,0x1a,0xe0,0x57,0xc8,0x7e,0x28,0xf0,0x04,0x3a,0x8f,0xc5,0xb3,0xe3,0x0b,0x89, + 0x14,0xde,0xc3,0x03,0xc6,0xab,0xc1,0xdd,0x95,0x1c,0xe7,0xae,0x46,0x09,0x03,0xfd, + 0xb3,0x5f,0x5c,0x68,0x56,0x7a,0xa2,0xe8,0x3a,0x68,0xfb,0x4d,0xa1,0x6f,0xb3,0x47, + 0x95,0x30,0xb0,0xc7,0xc8,0x3b,0xef,0xaf,0x9b,0xfc,0x2f,0xe1,0x0f,0x11,0x5f,0xfc, + 0x4d,0xf1,0x26,0x85,0x7d,0x33,0xdf,0xde,0x5a,0xb2,0xcf,0x12,0xc9,0x14,0x70,0xa4, + 0x50,0x30,0x00,0x6c,0x6c,0xfc,0xe3,0xe6,0xc6,0x7f,0xd9,0x35,0xcd,0x84,0x8b,0xa7, + 0x7f,0x68,0xed,0x7d,0xbc,0xce,0x79,0x4d,0x46,0xe9,0x75,0x3e,0xa6,0xb0,0xb7,0x16, + 0x96,0x56,0xf6,0xe3,0x81,0x14,0x6b,0x18,0x1e,0x80,0x00,0x2b,0x2b,0xc5,0xc7,0x7e, + 0x92,0xca,0x7e,0xe1,0x9a,0x00,0x7d,0x3f,0xd7,0x25,0x5b,0x67,0xd5,0xf7,0x36,0xc8, + 0x2d,0x5b,0x9e,0x82,0x63,0xc0,0xff,0x00,0xbe,0x6b,0x0f,0xc5,0x57,0x9a,0x8c,0x5a, + 0x67,0xfa,0x55,0xa2,0x45,0x09,0x9a,0x2f,0x9c,0x4a,0xbd,0x9c,0x11,0xc7,0xbe,0x2b, + 0xcf,0xad,0xcd,0xcb,0x2b,0x27,0x6d,0x7a,0x05,0x35,0x79,0x23,0xe7,0xef,0x8b,0x9a, + 0xa1,0xb0,0xd7,0xd9,0x62,0x94,0x43,0x24,0xa2,0x35,0xc8,0x4c,0xbb,0x28,0x8d,0x14, + 0xa8,0xe7,0x80,0x70,0x3a,0x57,0xcf,0x97,0xde,0x27,0x87,0x46,0xd7,0xaf,0x35,0x4b, + 0xcb,0x4d,0x50,0x3c,0xb0,0x7d,0x9e,0x61,0x17,0x23,0x0a,0xc0,0x82,0x81,0x64,0xc8, + 0x1c,0x72,0x08,0xe9,0x8f,0xc7,0xd4,0x7f,0x68,0x9f,0x10,0x6b,0xda,0x04,0x7a,0xce, + 0xbc,0x3c,0x25,0x3e,0xa9,0x15,0xa3,0xab,0x45,0x0c,0x37,0x68,0x44,0x9d,0x14,0x02, + 0x10,0xee,0x1c,0xe3,0x20,0x0c,0x8e,0x6b,0xc0,0x7c,0x05,0xf1,0xae,0x4d,0x5b,0xc4, + 0xb1,0x68,0x9e,0x25,0xd1,0x2c,0xac,0x75,0x69,0xf3,0x15,0xb5,0xb4,0x6c,0x37,0xbb, + 0xee,0x23,0x08,0xac,0x41,0x39,0xc3,0x75,0x19,0xca,0xfb,0xd7,0x93,0xf5,0x6f,0xac, + 0xc1,0xbf,0x5b,0xd9,0xea,0x7d,0x86,0x1b,0x13,0x53,0x02,0x94,0xe0,0x96,0xb6,0xdd, + 0x69,0xa7,0x67,0xdc,0xf7,0x1d,0x47,0xf6,0xd1,0xf0,0x9e,0xb7,0xe1,0xdb,0xed,0x36, + 0x11,0xab,0xc1,0xba,0xda,0x28,0x44,0x72,0x58,0x9d,0x80,0xa1,0x5e,0x4b,0x64,0x9f, + 0xe0,0x61,0x8c,0x7f,0x15,0x7c,0x79,0xac,0x78,0xcb,0x4f,0xd6,0x75,0xad,0x42,0xfa, + 0xe6,0xd6,0x76,0x9a,0x7b,0x87,0x90,0xed,0xb6,0x90,0xe0,0x13,0x90,0x0e,0x01,0x19, + 0xc1,0x15,0xed,0xda,0xb7,0x82,0xe2,0xd1,0xf5,0x99,0xac,0xa4,0xd3,0xe4,0x26,0x4b, + 0x38,0x25,0x2a,0xb1,0x13,0xe5,0xb4,0x9b,0xa4,0x3b,0x89,0x27,0x9f,0x9c,0x70,0x3a, + 0x57,0x1d,0xac,0xfc,0x32,0x58,0xa7,0x8a,0xf1,0xb5,0x2d,0x32,0xc9,0x35,0x04,0x37, + 0x11,0xdb,0x4f,0x39,0x49,0x63,0x50,0xcd,0x16,0x1d,0x47,0x42,0x4c,0x44,0xfd,0x08, + 0xae,0xe5,0x97,0x51,0xc5,0x56,0xf7,0xdb,0xd2,0x2b,0x67,0xff,0x00,0x03,0xcc,0xc7, + 0x0d,0x9d,0xe2,0x32,0xea,0x4e,0x34,0x61,0x1d,0x5b,0x6e,0xe9,0xbd,0x7e,0xff,0x00, + 0x23,0xe3,0x7b,0xfd,0x1a,0x5b,0xcd,0x1e,0x5b,0xa0,0x50,0x45,0x1b,0x2a,0xb6,0x5b, + 0x07,0x9e,0xe3,0xd7,0xf9,0xf3,0x53,0xd8,0x69,0x97,0xc3,0xc3,0x11,0x41,0x6f,0x65, + 0x3d,0xd9,0xf3,0xa4,0x0a,0xde,0x4b,0x92,0x03,0xaa,0xe0,0x8d,0xa7,0xaf,0xcb,0xc7, + 0x6a,0x8a,0x58,0xe4,0x96,0xc0,0x4a,0xaa,0xcf,0x02,0x91,0xb8,0x8e,0x81,0x8f,0x4f, + 0xeb,0x5e,0xd9,0xe0,0x0d,0x67,0x36,0xba,0x14,0x62,0x66,0xfb,0x40,0x07,0xed,0x61, + 0x98,0x9d,0xa7,0x20,0x47,0x9c,0xf0,0x3e,0x5c,0xe3,0xda,0xbe,0xe5,0xa4,0x96,0x9b, + 0x9f,0x0f,0x2b,0xb7,0x63,0xc8,0x34,0xcf,0x0f,0x6a,0x50,0x3c,0x56,0xb3,0xb4,0xd6, + 0x13,0xdc,0x2b,0x04,0xfb,0x6a,0x98,0x81,0x1d,0xcf,0xcd,0xd7,0xb0,0xe2,0xb1,0x1a, + 0x69,0x6d,0x57,0x11,0x4c,0x71,0x9c,0xba,0x93,0xf7,0x49,0x27,0xa8,0xf4,0xaf,0x44, + 0xf8,0xaf,0x61,0x71,0xad,0x5f,0x68,0xd6,0x30,0x4f,0x2d,0xd4,0xd0,0xa5,0xc4,0x7b, + 0xb2,0x0b,0x10,0x26,0x72,0x49,0x3f,0x4e,0x73,0x5e,0x5f,0x69,0x73,0x22,0xa4,0x47, + 0x76,0x79,0x38,0x62,0x79,0xce,0x4f,0xf8,0xd6,0x12,0xa6,0xd1,0x51,0x97,0x32,0xb9, + 0xe9,0xff,0x00,0x06,0x2f,0x44,0x12,0x6b,0xf7,0x8e,0xa2,0x66,0x8a,0xca,0x4d,0xb9, + 0x03,0x00,0x90,0x7a,0x7e,0x59,0xff,0x00,0x39,0xae,0x5b,0xc1,0xad,0xa9,0x45,0x75, + 0x6e,0x6d,0x83,0x88,0xe0,0x9b,0xcc,0x9a,0x48,0xe3,0xc9,0x8d,0x07,0xde,0xdc,0x71, + 0xc0,0xc5,0x75,0x5f,0x0e,0x15,0x87,0x85,0x3c,0x53,0x3a,0x01,0x34,0x9b,0x0c,0x4a, + 0x54,0x67,0x27,0x04,0x67,0xf5,0xad,0x4f,0x0e,0x69,0x45,0x34,0x89,0xa2,0x9a,0xee, + 0xd3,0x4f,0x17,0x24,0xf9,0xa6,0xf0,0xf0,0xa0,0x01,0x8e,0x07,0x5e,0x72,0x3a,0xfe, + 0x15,0x94,0xd5,0x95,0x8d,0x61,0xb9,0xc3,0x78,0x8b,0xc1,0x37,0xa9,0xa7,0x68,0xe6, + 0xe1,0x56,0xd4,0x5c,0x3c,0x93,0xa9,0x23,0x3b,0x94,0x81,0xf3,0x7f,0x3f,0xca,0xa7, + 0x93,0x4e,0xb2,0x86,0x2b,0x68,0x0c,0xa3,0x11,0x9d,0x92,0x6d,0x3b,0x7a,0x63,0x24, + 0x9f,0xf0,0x3d,0xab,0xb8,0xd7,0x7c,0x37,0x15,0xeb,0x69,0x7b,0xfc,0x53,0xa5,0x43, + 0xe4,0x06,0x4d,0x81,0x24,0x01,0xd0,0x28,0x00,0xfc,0xaa,0x7a,0xe0,0x1c,0xf7,0xcd, + 0x79,0x45,0xea,0xc9,0x6d,0xa9,0x08,0xd6,0x46,0x92,0x24,0x91,0x9a,0x42,0x89,0x22, + 0x87,0xe7,0x38,0xc6,0x33,0xed,0x4d,0x5e,0x48,0xa9,0x59,0x4b,0xdd,0xd8,0xed,0x8e, + 0xaf,0x67,0x14,0x76,0x70,0xbd,0xd2,0x79,0x16,0x8a,0x7c,0xa8,0xe4,0x5c,0x9c,0x11, + 0x91,0xd7,0x3e,0xdd,0xfb,0x57,0xae,0x7c,0x39,0x7b,0x7b,0xad,0x24,0x4f,0xa7,0x87, + 0xba,0x9a,0x56,0x2a,0x15,0x57,0xcb,0xf3,0x39,0xe0,0x00,0x5b,0xa7,0xd0,0x57,0x81, + 0xcd,0xac,0xc2,0x6d,0x9a,0x5b,0x73,0x77,0x6b,0x70,0x25,0x52,0x1e,0x28,0x32,0x42, + 0xe0,0xf1,0xb8,0x8f,0x71,0xe9,0xd2,0xbb,0x7b,0x8f,0x8a,0x57,0x97,0x36,0x03,0x4f, + 0xd2,0x9f,0x5a,0x88,0xc5,0x07,0x96,0xa6,0xd4,0x4a,0xb2,0x79,0x9b,0x18,0x64,0x90, + 0x7a,0x67,0x1c,0x7b,0x57,0x14,0xe8,0x4a,0x76,0x4c,0xea,0x8d,0x48,0x45,0x5d,0x6e, + 0x7a,0xf4,0x37,0xbe,0x2b,0x95,0x5d,0xd3,0xc1,0xf3,0xb4,0x20,0xb4,0x69,0xe6,0xdc, + 0xaa,0x48,0xd8,0xe0,0x92,0x8b,0x09,0x65,0x04,0x82,0x41,0x27,0x91,0x8f,0x5a,0xf3, + 0x9d,0x76,0xef,0xc6,0x1e,0x0f,0xd2,0x6c,0xef,0xdb,0xc1,0x77,0xb6,0x56,0xf0,0x23, + 0x19,0xa5,0x8a,0x42,0x77,0x06,0xee,0xc0,0x8e,0x31,0x8f,0x4e,0xf5,0xe7,0x1a,0x9f, + 0x88,0x35,0xcd,0xe6,0xe2,0xec,0x6a,0xe2,0x60,0x5c,0x3c,0xd3,0x89,0x30,0x41,0x45, + 0x55,0x18,0x3d,0x39,0xdc,0x7f,0x11,0x5c,0xcf,0x88,0x35,0x18,0xf5,0x7b,0x49,0x04, + 0x71,0x4c,0xb2,0x61,0x37,0x48,0xe1,0x98,0x6e,0x03,0xe6,0x27,0xeb,0x5d,0x34,0xb0, + 0xd1,0x84,0xae,0x92,0x39,0xa5,0x56,0x4d,0x5a,0xe7,0xac,0x78,0x7f,0xe2,0x6f,0x88, + 0x3c,0x6b,0x2c,0x96,0x16,0x36,0x20,0xbb,0xc7,0xbc,0x97,0xb8,0x55,0x38,0x5c,0x67, + 0x07,0x6e,0x73,0xff,0x00,0xd7,0xa7,0xea,0x9a,0xaf,0x8e,0xf4,0xd8,0x74,0xf5,0x97, + 0x4b,0x78,0xe4,0xba,0x7d,0x96,0xfb,0xa6,0x8f,0xe6,0x3b,0x78,0x56,0x1d,0xf8,0x07, + 0xef,0x7a,0xd7,0x9e,0xf8,0x13,0xc7,0xb6,0x5e,0x0a,0xbd,0x86,0xf2,0x3b,0x47,0x9d, + 0x84,0x06,0x27,0xdd,0x2e,0x03,0xb6,0x54,0x92,0x32,0xa7,0x1d,0x3a,0x7b,0xd7,0x65, + 0xae,0x7c,0x6d,0xb6,0xf1,0x3b,0xe9,0xc8,0xba,0x53,0xac,0xb6,0xf7,0x09,0x3a,0x05, + 0x60,0xc5,0x88,0x18,0xc0,0x01,0x07,0x5c,0xfb,0xfd,0x2b,0xae,0x51,0x7c,0xf6,0x8c, + 0x55,0xbc,0xfd,0x08,0x8d,0xb9,0x2f,0x26,0xee,0x67,0xe9,0x9f,0x15,0xf5,0xdb,0x7d, + 0x67,0xcd,0x1a,0x5f,0xda,0x25,0x90,0xfc,0xf6,0xc6,0x45,0x21,0xb2,0x30,0x30,0xbd, + 0x17,0xb7,0x41,0xfc,0xeb,0xaf,0xba,0xf1,0xcf,0x8c,0x04,0x4e,0xef,0xe0,0x99,0xa1, + 0x8c,0x75,0x60,0xab,0xeb,0xfe,0xed,0x79,0x94,0x9a,0xf5,0x9c,0x97,0x91,0xfd,0x9b, + 0x49,0x78,0xa6,0x8d,0xb2,0xe3,0x6b,0x39,0x6c,0x77,0x20,0x8e,0x0f,0x5c,0x9e,0x9e, + 0xc2,0xbd,0x03,0x51,0xf8,0xaf,0x77,0x2d,0xb5,0xcf,0x9b,0xe1,0x4b,0xc4,0x82,0x44, + 0x20,0xb1,0x87,0x68,0x19,0xee,0x4f,0x97,0xfe,0x15,0xcb,0x8a,0xa5,0x0e,0x68,0xca, + 0x9c,0x13,0x7f,0xd6,0xc6,0x94,0x27,0x24,0x9a,0x9c,0x8d,0x9d,0x43,0xc7,0x7e,0x35, + 0xfb,0x22,0xb4,0xbe,0x0f,0x9e,0x05,0x23,0x01,0x81,0xc6,0x7f,0x21,0x58,0x9e,0x21, + 0xf8,0x9d,0xae,0xdb,0x59,0xca,0xfa,0x97,0x86,0xae,0x6d,0xe1,0xce,0x1e,0x41,0x3c, + 0x8a,0x17,0xea,0x47,0x4a,0xdb,0xba,0xf8,0xa3,0x2d,0xfd,0xaa,0x42,0xbe,0x00,0xd5, + 0x90,0x81,0x91,0xf3,0x1e,0x9f,0xf7,0xec,0x55,0x2d,0x6f,0xe2,0x63,0xc9,0x6c,0x23, + 0x8f,0xc2,0xb7,0xb0,0x4b,0x36,0x54,0xb5,0xce,0x76,0x30,0xee,0x31,0xc0,0xae,0x28, + 0x42,0x5c,0xc9,0x3a,0x6a,0xde,0xbf,0xf0,0x4d,0xdc,0xd5,0xbe,0x27,0xf7,0x1e,0x73, + 0x7d,0xf1,0x2c,0xea,0x97,0x27,0xed,0x56,0x82,0xe0,0x27,0x24,0x3b,0x7c,0xd8,0xff, + 0x00,0x7c,0x00,0x4d,0x54,0x5f,0x17,0x45,0x32,0x79,0x7b,0x24,0x28,0x3e,0xe0,0x77, + 0x0d,0xb4,0x7a,0x76,0xe3,0x3c,0xd7,0x61,0x69,0xe0,0xbd,0x4b,0xe2,0x15,0xf4,0xd6, + 0x7a,0x37,0x84,0xb1,0xa9,0x79,0x66,0x46,0x11,0x34,0x51,0x80,0x3f,0xbd,0xcb,0x00, + 0x07,0x23,0xa5,0x4f,0xff,0x00,0x0c,0xbd,0xf1,0x08,0x94,0x29,0xa0,0x2a,0x92,0xb8, + 0x60,0xd7,0xf6,0xfd,0x73,0xdb,0xf7,0x95,0xec,0x53,0xa5,0x16,0xaf,0x14,0x79,0xf5, + 0x2a,0xf2,0xbb,0x33,0x98,0xb5,0xd4,0xe4,0x7b,0x56,0x88,0x5a,0x99,0x23,0xc0,0x21, + 0xb6,0x2e,0x41,0xfc,0xe9,0x25,0x06,0x55,0x02,0x38,0x65,0x61,0xdc,0x6c,0xe7,0xdf, + 0x80,0x4d,0x7a,0xf7,0xfc,0x32,0x2f,0x8b,0xed,0xb4,0x24,0xd5,0x2c,0x6e,0xec,0x57, + 0x52,0xf2,0x95,0xdf,0x45,0x2e,0x72,0x4e,0x39,0x51,0x26,0x76,0xee,0x1f,0x5c,0x1f, + 0x5a,0xd6,0xf8,0x6b,0xf0,0x7b,0xc2,0x5e,0x38,0xb5,0x6b,0x39,0x3c,0x43,0xa8,0xe9, + 0x7e,0x2b,0x87,0x31,0xdd,0x69,0x97,0xb0,0x24,0x6d,0x6b,0x28,0x18,0x1b,0x90,0x92, + 0xce,0x99,0x23,0xe6,0x18,0xe0,0xf3,0x82,0x71,0x5a,0xfb,0x26,0x8c,0x7d,0xb2,0x7b, + 0x1e,0x1a,0x03,0xc7,0x22,0xb6,0xd6,0x89,0x76,0x80,0xae,0x54,0x82,0x0f,0xd4,0x8a, + 0xde,0xf0,0xc6,0xbd,0x7b,0xa1,0x4e,0xd2,0xe9,0xba,0xc6,0xa3,0xa5,0x49,0x30,0x30, + 0x4f,0x3d,0xa5,0xc3,0xc6,0xdb,0x09,0x1b,0x87,0xca,0x41,0x23,0xb9,0x19,0xe6,0xbd, + 0x43,0xc4,0x5f,0xb3,0x6f,0x88,0xb4,0xc7,0x68,0x1a,0x7b,0x29,0x99,0x1b,0x0c,0x77, + 0x15,0xc7,0xa7,0x51,0xce,0x7d,0xab,0x16,0xd7,0xe0,0xbf,0x88,0xf4,0xcb,0xa2,0xa5, + 0xad,0x19,0xd4,0xe4,0xc7,0x26,0xf6,0x56,0x1d,0x71,0xf7,0x08,0x3e,0xb9,0xcd,0x62, + 0xe9,0x39,0xab,0x25,0x71,0xca,0xaa,0x83,0x52,0x6e,0xc8,0xd2,0xf8,0x0d,0xe1,0x3f, + 0x09,0x9f,0x8d,0xfe,0x1f,0x6d,0x4b,0x5f,0x76,0xb4,0x86,0x75,0xbc,0x82,0xe1,0x37, + 0x42,0xb2,0x5d,0x2b,0x06,0x44,0x72,0xdd,0x01,0x23,0x24,0xe7,0x9c,0x63,0x3c,0xd6, + 0xd7,0xed,0x1f,0x34,0xf3,0x6b,0xfa,0xcc,0xd6,0xac,0x5c,0xdc,0x6a,0x8e,0xca,0xea, + 0x71,0xb8,0x01,0x9e,0x3f,0x2a,0xc5,0x4f,0x81,0x7e,0x26,0xbd,0x92,0x31,0x6b,0x04, + 0x2b,0x31,0x04,0xa9,0x59,0x0c,0x63,0x77,0xfb,0x24,0x80,0x33,0xc7,0xad,0x60,0x7c, + 0x46,0xf1,0x6d,0xfe,0xa9,0x75,0x3d,0xad,0xed,0xbb,0x5b,0x5f,0x5b,0x5c,0x83,0x38, + 0x76,0x26,0x41,0x28,0x52,0x1f,0x3e,0x87,0x3f,0x5a,0xf3,0xea,0x61,0x24,0xeb,0xaa, + 0x97,0xe9,0x63,0xb6,0x9e,0x22,0x2e,0x9b,0x89,0xe5,0xb6,0xb7,0xa0,0xea,0xf0,0x02, + 0xa1,0x64,0x46,0x8d,0xb7,0xf5,0x6c,0xaa,0x63,0xf1,0xaf,0x4b,0xd4,0xe7,0xb6,0xb5, + 0xf8,0x5e,0x16,0xe0,0xa4,0x63,0x33,0xc6,0x19,0xf8,0x1b,0x8f,0x95,0x8e,0xbe,0xf5, + 0xc1,0xda,0x68,0x33,0xdf,0x78,0x9e,0xd6,0xd6,0xc6,0xdc,0xcb,0x73,0x2c,0xa8,0x44, + 0x68,0x3e,0x62,0x00,0x20,0xf1,0xfa,0xfe,0x15,0xd7,0xf8,0xdd,0xcd,0xbf,0x80,0x74, + 0xa4,0xb9,0x40,0xe9,0x34,0xd3,0x4e,0xaa,0x83,0x77,0xc9,0xca,0x8c,0x81,0xdf,0x28, + 0x7f,0x2a,0xdd,0xa6,0xd1,0x31,0xb5,0xce,0x13,0xc1,0x29,0x61,0x17,0x88,0x2c,0xe3, + 0x8e,0x48,0x18,0xfd,0xa5,0x01,0x11,0x13,0x83,0xfb,0xcf,0x53,0x9e,0xd8,0xff,0x00, + 0xf5,0xd7,0xde,0xff,0x00,0xb3,0xc6,0x92,0x9a,0x94,0xff,0x00,0x0c,0xe3,0x2b,0xfe, + 0xac,0xea,0xf7,0x4c,0x7b,0x00,0x97,0x17,0x0c,0x09,0xfc,0x54,0x57,0xc0,0x5e,0x14, + 0xb5,0xb5,0x6f,0x17,0x5b,0xcf,0x04,0x97,0x50,0x83,0x7b,0x1b,0xac,0x41,0x08,0x8f, + 0x1b,0x81,0x39,0xe3,0xd8,0xfe,0x55,0xfa,0x15,0xfb,0x31,0x5f,0x48,0xda,0xff,0x00, + 0xc3,0x7d,0x3e,0x07,0x11,0xb4,0xba,0x4e,0xa8,0x19,0xb6,0xee,0xc0,0x7b,0x8b,0xb2, + 0x0f,0xfe,0x3a,0x2b,0x87,0x1c,0xbf,0x77,0x17,0xeb,0xff,0x00,0xa4,0xbf,0xf3,0x3a, + 0xb0,0xad,0x73,0x4f,0xe5,0xff,0x00,0xa5,0x23,0xf4,0x76,0xc1,0x36,0x5a,0xc2,0x9b, + 0x70,0xab,0x1a,0x80,0x7f,0xe0,0x22,0xbc,0x2f,0xe0,0xe5,0xdb,0xea,0xff,0x00,0xb4, + 0x3f,0xc5,0x2b,0xa6,0x95,0xa6,0x5b,0x64,0xb5,0xb7,0x8f,0x73,0x96,0x08,0xa5,0xa4, + 0x3b,0x40,0xed,0xca,0xd7,0xb4,0xc1,0x63,0x7f,0x04,0x4b,0x8d,0x45,0x65,0x21,0x40, + 0xfd,0xed,0xb8,0x3f,0xc8,0x8a,0xf9,0x87,0xf6,0x5a,0xd6,0xee,0x9b,0xe2,0x0f,0xc6, + 0x3b,0xf2,0xd1,0x31,0x6d,0x52,0xde,0x1c,0x98,0x98,0xe7,0x62,0x48,0x78,0x2a,0x78, + 0xe5,0xfd,0x2b,0x9d,0x3b,0x42,0xed,0x6d,0x6e,0xc6,0x09,0x5d,0xe8,0xcf,0xab,0xd5, + 0xfe,0x79,0x3b,0x60,0x81,0xfa,0x57,0x2f,0xf1,0x04,0x96,0xd1,0xa3,0x5e,0xa7,0xcd, + 0x56,0x00,0x9e,0xe3,0x9a,0xb3,0x06,0xa1,0xaa,0x5d,0x43,0xbe,0xde,0xde,0xd6,0x47, + 0x62,0x5b,0x6b,0x4a,0xe8,0x08,0x18,0x1c,0x12,0x87,0x3c,0xe6,0xbc,0xef,0xe3,0x4f, + 0x8b,0x35,0x0f,0x0b,0x78,0x1f,0x52,0xd7,0xb5,0x6b,0x78,0xb4,0xeb,0x1d,0x2a,0x19, + 0x6e,0x5e,0x61,0x32,0x32,0x96,0xf2,0xd9,0x51,0x47,0x39,0x24,0xbb,0x20,0x03,0x6f, + 0x53,0x5e,0x6e,0x26,0xb4,0xe5,0x07,0x4d,0x45,0xeb,0xfe,0x67,0x4e,0x1e,0x9a,0xf6, + 0x8b,0x99,0xa4,0x7c,0x7b,0xfb,0x5a,0x7c,0x5f,0x97,0x4b,0xd7,0xf5,0xaf,0x0e,0xc0, + 0xab,0xf6,0xaf,0xb5,0x4a,0x9e,0x6e,0x46,0x56,0x3f,0x30,0x9c,0x75,0xef,0x93,0xf9, + 0x57,0x80,0x6b,0xff,0x00,0x09,0x74,0x4b,0xbf,0x10,0xf8,0x2e,0xe3,0x4f,0xd7,0xdf, + 0xc4,0x5a,0xae,0xad,0x2c,0x37,0x16,0xab,0x0d,0xdc,0x6a,0xd6,0x50,0x97,0x38,0x67, + 0x51,0xbb,0x6b,0x6e,0x19,0x2b,0x8c,0x8c,0x1c,0xd7,0x97,0x78,0xef,0xe2,0x06,0xad, + 0xe3,0x9f,0x16,0xea,0xda,0x9d,0xdb,0xb5,0xcd,0xfd,0xdb,0x3d,0xc3,0x14,0x04,0xf5, + 0xc6,0x71,0x8f,0xa9,0xad,0xef,0xd9,0x1d,0x85,0x87,0xc4,0x8b,0x7d,0x52,0xf9,0x66, + 0x85,0xad,0xb3,0x23,0x19,0x70,0x3e,0x57,0x1d,0xb7,0x63,0x00,0xef,0x62,0x4e,0x78, + 0xaf,0x42,0x18,0x5a,0x94,0x70,0xeb,0x97,0xe3,0x4b,0x5b,0x75,0xeb,0x63,0xda,0xaf, + 0x8f,0xa3,0x5a,0xb3,0xa5,0x15,0xfb,0xa5,0xb5,0xef,0xba,0x49,0x39,0x79,0x5e,0xd7, + 0xf2,0x3e,0xda,0xf8,0x9f,0x32,0xcb,0xe3,0x99,0xed,0x51,0x64,0x57,0xb4,0xb4,0xb3, + 0xb7,0x91,0xdd,0xf7,0x19,0x58,0x40,0x84,0xb7,0x41,0x82,0x77,0x7f,0x5a,0xe5,0x7c, + 0x5b,0x6b,0xe0,0x88,0x86,0x8e,0x2f,0x52,0xfb,0xed,0xc6,0xc8,0x9b,0x8d,0x8a,0x0a, + 0xee,0x33,0x4b,0xd3,0xdb,0x1b,0x7f,0x5a,0xd7,0xf8,0x95,0xa9,0x34,0x7f,0x13,0xbc, + 0x40,0x23,0xb7,0x9a,0x62,0x5e,0xdc,0x86,0x8d,0x43,0x2e,0x3e,0xcf,0x17,0x19,0x07, + 0xf9,0x7e,0xb5,0xe7,0x1e,0x37,0x73,0xa8,0xea,0x36,0x92,0xb5,0x9d,0xce,0xef,0xb3, + 0x28,0x38,0x38,0xe7,0x73,0x76,0xc7,0x15,0x86,0x15,0xca,0x35,0x2f,0x6e,0x8b,0xf4, + 0x3c,0x9a,0x89,0x4a,0x3b,0xf5,0x3e,0x1a,0x85,0xaf,0xd3,0x43,0x6b,0x64,0x2e,0x20, + 0x60,0x18,0xc6,0x0e,0x37,0x10,0x3b,0xfe,0x55,0x42,0xd2,0xd6,0xee,0x18,0x65,0x32, + 0xa6,0xc2,0x5c,0x15,0x56,0x23,0xa5,0x76,0x36,0x7f,0xd9,0xb1,0xdb,0x16,0xf3,0x42, + 0x38,0xcf,0xca,0xca,0xde,0xd8,0xfe,0x7f,0xa5,0x54,0x92,0x7b,0x29,0x6e,0x14,0x4b, + 0x28,0xd8,0x0f,0x38,0x46,0xe6,0xbe,0xc9,0xc1,0x9e,0x17,0x3d,0xdd,0x8c,0x18,0x8d, + 0xe4,0x52,0xac,0xa8,0xeb,0x1c,0xf9,0xce,0xf0,0xc3,0x23,0x9f,0x5a,0xbd,0xa0,0x68, + 0xee,0xfa,0x95,0x98,0x16,0xf0,0x5d,0xc8,0x24,0x5f,0xdc,0x4a,0x49,0x57,0x6e,0x83, + 0x38,0xeb,0xcf,0x38,0xad,0x2b,0x8d,0x5f,0x4d,0x52,0x56,0x14,0x1b,0xb2,0x7f,0x78, + 0xd1,0x13,0x8f,0xa6,0x45,0x3e,0x2d,0x72,0xcd,0x10,0x09,0x2e,0x09,0x0a,0x38,0x0b, + 0x19,0xe0,0xfa,0xf4,0xeb,0x50,0xe3,0x29,0x2b,0xb4,0x6c,0xe4,0xa2,0xed,0x13,0xac, + 0x5d,0x52,0x18,0x34,0x9d,0x6b,0x48,0xb6,0x92,0xde,0xd6,0x6b,0x87,0x5f,0x9a,0x24, + 0x08,0x87,0x18,0x07,0x90,0x38,0xe4,0x37,0x41,0xe9,0xd7,0xad,0x62,0xdf,0xe8,0x96, + 0xf6,0xda,0x24,0x2e,0x75,0x05,0x9e,0xf0,0xb3,0x0c,0x45,0xe6,0x3b,0x01,0xc7,0x04, + 0x6d,0xe3,0x3c,0x9c,0xe4,0xfe,0x15,0x4a,0x3f,0x13,0x59,0x5b,0xc7,0xfb,0xbd,0xc1, + 0x57,0x81,0x85,0xff,0x00,0x1a,0x43,0xe3,0x3b,0x55,0x3c,0x09,0x3f,0xef,0x91,0xfd, + 0x4d,0x43,0xa7,0xa6,0x80,0xa5,0xa9,0xbc,0x74,0xbb,0x49,0x6c,0xec,0x2f,0x16,0xfd, + 0xbe,0xd2,0x9b,0x14,0xc0,0x61,0x2a,0x46,0x48,0x52,0x07,0x7e,0x95,0x97,0x24,0x16, + 0xa2,0x4b,0x4b,0x56,0xbb,0x65,0x86,0xe6,0x55,0x6b,0x89,0x01,0x2b,0xf2,0xf3,0x95, + 0xce,0x3d,0xf3,0xf9,0x55,0x36,0xf1,0xcd,0xba,0xf4,0x2e,0x0f,0x6f,0xb9,0xd7,0xf3, + 0xaa,0x17,0xbe,0x25,0xb8,0x99,0x0a,0x22,0x7d,0x9e,0x33,0xf3,0x07,0x7c,0x16,0x3f, + 0x4c,0x1a,0x95,0x49,0xde,0xef,0x62,0x9c,0xd5,0xb4,0x3a,0xab,0xdb,0x2f,0x0d,0x5b, + 0x5b,0xec,0x8e,0x60,0xa8,0x32,0x49,0x69,0x98,0xe4,0xfe,0x03,0x9f,0xff,0x00,0x5d, + 0x60,0x69,0x9e,0x2a,0x5d,0x25,0xbc,0xcd,0x31,0x4c,0x57,0x00,0x90,0xf7,0x93,0x93, + 0xb7,0x19,0x38,0xc2,0x7f,0xfa,0xeb,0x91,0xbf,0xd5,0xe3,0x8d,0xc9,0x77,0x69,0x65, + 0xff,0x00,0x6c,0xe4,0xff,0x00,0xf5,0xa9,0x2d,0x75,0x6b,0x41,0xf3,0xdc,0x6f,0x96, + 0x4f,0x42,0x57,0x6a,0xfd,0x06,0x7f,0x5f,0xe5,0x4d,0x42,0x29,0x5b,0x71,0xf3,0x49, + 0xbb,0xec,0x75,0x09,0xa6,0xdc,0xf8,0xa6,0xfe,0x39,0xaf,0xe5,0x9e,0x54,0xb8,0x62, + 0x1a,0xee,0xeb,0x38,0x3c,0x12,0x76,0x22,0x8c,0x01,0xc7,0x60,0x6b,0x7a,0x3f,0x0b, + 0xf8,0x74,0x0f,0x27,0xc9,0x4f,0x31,0x5b,0x61,0x92,0x77,0x71,0xf8,0xfc,0xbc,0x63, + 0xf0,0xae,0x10,0x78,0x8e,0xd5,0x17,0x0a,0x84,0xff,0x00,0xbd,0x20,0xa8,0xc7,0x89, + 0x21,0xc0,0x07,0x70,0xf5,0xc3,0x8a,0x39,0x5e,0xe8,0x77,0xb7,0x43,0xa8,0xd6,0x2c, + 0x2c,0x74,0x0b,0xd1,0xf6,0x18,0xd2,0xe2,0x43,0x10,0x21,0x50,0x6f,0x55,0x25,0x88, + 0x23,0x92,0x79,0xc0,0xcf,0xe3,0x4b,0xa1,0x68,0x60,0xeb,0xf6,0x53,0xa8,0x75,0x91, + 0x24,0x59,0x24,0x6c,0xe3,0x81,0x82,0x47,0x4c,0x70,0x05,0x73,0x51,0x78,0xa6,0x08, + 0x07,0xc8,0xad,0xc9,0xe4,0x33,0x03,0xfd,0x2a,0xed,0xb7,0xc4,0x21,0x6b,0xbc,0xa4, + 0x08,0x59,0x94,0xa9,0x25,0xbb,0x1e,0x0f,0x6f,0x7a,0xce,0xa4,0x65,0x28,0x4a,0x29, + 0x6a,0xc7,0x09,0x28,0xc9,0x49,0xec,0x8d,0x3b,0x3b,0x37,0xf3,0xe4,0xba,0x49,0x1d, + 0x1e,0x62,0xc7,0xcc,0x69,0x39,0x00,0x93,0x91,0x80,0x39,0xcf,0xbd,0x6f,0xeb,0xda, + 0xcc,0x77,0xf6,0x12,0xdb,0xf9,0x97,0x52,0x06,0x51,0xf7,0x9f,0x23,0xae,0x7d,0x2b, + 0x87,0x5f,0x1d,0x08,0xd4,0x08,0xed,0xe2,0xe3,0xb6,0xe6,0xa3,0xfe,0x16,0x03,0xff, + 0x00,0xcf,0xbc,0x23,0xdb,0x0d,0xfe,0x34,0x9d,0x36,0xda,0xd3,0x61,0xdc,0xdf,0xd2, + 0x35,0x69,0xa0,0x67,0x53,0x98,0xbe,0x5c,0x02,0xbc,0x67,0xeb,0x5b,0x09,0x71,0x15, + 0xd4,0x58,0x9a,0x56,0x63,0x8c,0xe0,0x9e,0xf5,0xc3,0x1f,0x1e,0x49,0xb7,0x02,0xde, + 0x2f,0xfb,0xe4,0xff,0x00,0x8d,0x43,0xff,0x00,0x09,0xcc,0x84,0xf1,0x0a,0x03,0xec, + 0xbf,0xfd,0x7a,0xaf,0x67,0x77,0x72,0x53,0x3b,0x9b,0x0b,0xfb,0xad,0x13,0x52,0x82, + 0xf3,0x4e,0xb8,0x92,0xde,0x68,0xce,0x63,0x95,0x1c,0x87,0x53,0xf5,0x15,0xf5,0x37, + 0xc1,0xdf,0x8a,0x8f,0xf1,0x07,0x48,0x36,0xd7,0x8c,0x91,0xeb,0x96,0xa0,0x19,0x54, + 0x0c,0x09,0x97,0xb3,0xa8,0xf5,0xf5,0x03,0xfa,0xd7,0xc3,0xdf,0xf0,0x99,0xcc,0xb9, + 0x38,0xeb,0xec,0x2a,0xff,0x00,0x87,0xbe,0x27,0xea,0xfe,0x17,0xd5,0x61,0xd4,0xb4, + 0xcb,0x96,0xb5,0xbc,0x8b,0x21,0x5c,0x00,0x47,0xd0,0x82,0x30,0x7f,0x1a,0xe9,0xa7, + 0x27,0x13,0x9e,0xa5,0x2e,0x7d,0x4f,0xd1,0x1d,0x7e,0x4d,0x71,0x74,0xf8,0xe4,0xd2, + 0x9a,0x36,0xb8,0x4c,0xe6,0x17,0x18,0xf3,0x06,0x7b,0x13,0xd0,0xd7,0x87,0xfc,0x4f, + 0xf8,0x49,0xe2,0xcf,0x19,0xdd,0x2f,0x88,0xed,0x04,0x3a,0x57,0x8a,0x2c,0xa3,0xdc, + 0x92,0x43,0x37,0x97,0x24,0xdb,0x7a,0x46,0x4a,0xf1,0x9e,0xb8,0x6c,0x8c,0x74,0x39, + 0x07,0x8f,0x12,0x9b,0xf6,0xb4,0xf8,0x8f,0x38,0x3f,0xf1,0x3c,0x54,0xf7,0x4b,0x48, + 0x07,0xfe,0xc9,0x59,0x3a,0x97,0xed,0x1b,0xe3,0xed,0x51,0x0a,0x4d,0xe2,0x2b,0x9d, + 0xa7,0xfe,0x79,0x85,0x43,0xf9,0xa8,0x15,0xac,0xaa,0x27,0xa3,0x30,0x8d,0x19,0x47, + 0x54,0x7b,0x3f,0x80,0x7f,0x68,0x4b,0x3f,0x16,0x88,0x3c,0x33,0xf1,0x25,0xae,0x34, + 0xfb,0xeb,0x59,0x3e,0xce,0x9a,0xc2,0x13,0x1b,0xc2,0xd9,0xc6,0xcb,0x84,0x1d,0xb3, + 0xfc,0x58,0xe3,0xd0,0x72,0x4f,0xd2,0xda,0x57,0xc2,0xb8,0x20,0xd2,0x73,0x6f,0x3c, + 0x4f,0x64,0x32,0xf0,0xdd,0x3d,0xd8,0x90,0x48,0x0e,0x0e,0x43,0x0c,0xe4,0x1c,0xe4, + 0x63,0x8e,0x4d,0x7e,0x5c,0xeb,0x1a,0xde,0xa5,0xa8,0xea,0x92,0x6a,0x73,0xdc,0xc9, + 0x77,0x74,0xff,0x00,0xeb,0x64,0x99,0xd9,0xda,0x41,0xdb,0x24,0x93,0x9c,0x0a,0xed, + 0x3c,0x2d,0xf1,0x77,0xc4,0x76,0x3a,0x3a,0xe9,0xfa,0x67,0x88,0x75,0x2b,0x2b,0x44, + 0x3b,0x85,0xac,0x37,0x2c,0xaa,0x8d,0xea,0x06,0x7a,0x57,0x33,0x6e,0x32,0xe6,0x8b, + 0xd4,0xe9,0x95,0x25,0x38,0xf2,0xcb,0x6e,0xc7,0xe8,0xcc,0x1f,0x0b,0xee,0x05,0xda, + 0xcc,0x97,0x71,0xc6,0xca,0x80,0xac,0x82,0xeb,0x68,0xdc,0x71,0xc8,0x18,0xf4,0xf5, + 0x1c,0xf1,0x5e,0x71,0xfb,0x42,0x7c,0x38,0xb4,0x93,0xfe,0x2a,0x3b,0x74,0x86,0x46, + 0x5f,0x2e,0x3d,0x47,0x69,0x04,0xc8,0x8a,0xca,0x44,0x9c,0x63,0x9c,0x0d,0x84,0x8f, + 0x51,0xd0,0x0a,0xf8,0xd2,0xe3,0xe2,0xaf,0x8c,0x5d,0x88,0x97,0xc4,0x7a,0x93,0xe0, + 0x90,0x33,0x76,0xe7,0x23,0xdb,0x9e,0x95,0x9f,0x71,0xe3,0x9d,0x72,0xfc,0x30,0xb8, + 0xd5,0x6f,0x27,0xdc,0x30,0xc1,0xe6,0x62,0x08,0xf7,0xe6,0xa3,0x91,0xde,0xf7,0x14, + 0x61,0x6b,0x79,0x1e,0xcd,0xe1,0x3d,0x0a,0x5b,0x7f,0x88,0x36,0x13,0xd8,0x09,0x1c, + 0xa4,0xc7,0x79,0x50,0x41,0x11,0xef,0xc1,0xcf,0xb6,0x0e,0x0f,0xd7,0xde,0xb1,0x3c, + 0x49,0x2c,0x52,0x78,0x73,0x46,0x43,0xb2,0x47,0x8f,0x68,0x97,0x76,0x48,0x51,0xfb, + 0xce,0xa0,0x76,0x3f,0x28,0xcd,0x79,0xa6,0x9f,0xac,0xdd,0x89,0xc3,0x8b,0xb9,0x91, + 0xdb,0x20,0x91,0x23,0x02,0x47,0xbf,0x35,0xdc,0x78,0x48,0x4d,0x78,0xda,0x8c,0x06, + 0x79,0x9a,0x33,0x69,0x33,0x6c,0x32,0x31,0x07,0x11,0x31,0x03,0x19,0xf6,0xac,0x9b, + 0xe4,0xd4,0xe8,0xb7,0x36,0x87,0x2f,0xf6,0x71,0x6b,0xaa,0x45,0x7a,0x97,0x08,0xaa, + 0xae,0x87,0x62,0xa1,0xc1,0x23,0xae,0x3e,0xb9,0xfd,0x6b,0xef,0x3f,0xd8,0xda,0xee, + 0x2b,0xff,0x00,0x8a,0x3e,0x06,0x57,0x52,0x52,0x0d,0x22,0x73,0x8f,0x4c,0x86,0x6f, + 0xe7,0x35,0x7c,0x05,0x7e,0xe2,0x06,0x28,0x24,0x2a,0x33,0xc8,0x07,0x03,0xf9,0xd7, + 0xe8,0x07,0xec,0x2b,0xe0,0xbd,0x44,0x6a,0xfa,0x47,0x89,0xd9,0xa3,0x6d,0x36,0xcb, + 0x4c,0x58,0x64,0x79,0x1f,0x0d,0xe6,0x48,0xd6,0xf8,0x00,0x1f,0x6c,0x8f,0xca,0xb8, + 0x73,0x09,0x2f,0x63,0x29,0x49,0xff,0x00,0xc3,0xb3,0x6c,0x2c,0x39,0x65,0xcb,0x05, + 0xb9,0xfa,0x51,0xa9,0x5e,0x8b,0x3d,0x32,0xe6,0x7f,0xf9,0xe5,0x13,0x39,0xc7,0xb0, + 0x27,0xfa,0x57,0xca,0xdf,0xb0,0x7f,0x8b,0x8c,0xbe,0x13,0xf1,0xfe,0xab,0x35,0xb4, + 0xd7,0x31,0x5c,0x78,0x96,0x60,0x25,0x86,0x2c,0x9f,0x96,0x28,0xfe,0xf7,0xfd,0xf5, + 0xfc,0xeb,0xda,0x3c,0x7b,0xe2,0xb2,0xbe,0x0b,0xf1,0x09,0x86,0x41,0x01,0x16,0x37, + 0x18,0xdf,0xd7,0x3e,0x5b,0x01,0x8f,0xc7,0x15,0xe2,0x1f,0xb0,0x83,0x27,0x85,0xbe, + 0x0c,0x6a,0x50,0xac,0x8b,0x2c,0x73,0xf8,0x82,0xf2,0x51,0x33,0xae,0xd2,0xc3,0xe4, + 0x5c,0xf7,0x1f,0xc1,0xeb,0x5e,0x1d,0x2c,0x6b,0x85,0x19,0x55,0xf3,0x4b,0xf3,0x36, + 0x58,0x79,0xdf,0x95,0xa3,0xea,0x3b,0x2d,0x66,0x4d,0x46,0xf2,0xee,0x47,0xb7,0xfb, + 0x3d,0xbc,0x6a,0x0c,0x7b,0xf8,0x66,0x04,0x64,0x93,0xf9,0x57,0xcd,0x7f,0xf0,0x50, + 0x9d,0x49,0x13,0xf6,0x6a,0xd6,0x80,0x98,0xaf,0x99,0x77,0x69,0x19,0x55,0x38,0xdd, + 0x99,0x41,0x39,0x03,0xe8,0x3a,0xfa,0x7b,0x57,0xbf,0x5c,0x78,0x94,0x14,0x72,0xbb, + 0x4a,0x96,0xdb,0x8c,0x73,0xce,0x6b,0xc2,0xff,0x00,0x68,0x69,0x34,0x8f,0x11,0x7c, + 0x3e,0xd7,0x34,0xdd,0x7a,0x18,0xef,0x6c,0x4a,0xac,0xd1,0xc2,0xcc,0xeb,0xf3,0xa1, + 0x05,0x0e,0x54,0x82,0x48,0x61,0xd3,0xb9,0xec,0x6b,0xcf,0xfa,0xc3,0xaf,0x88,0x8c, + 0xda,0xea,0x8e,0x98,0x61,0xa5,0x66,0xde,0x87,0xc2,0x1f,0xb2,0x4e,0xb3,0xa6,0x68, + 0x5a,0x37,0x8b,0xa7,0x92,0xd6,0xda,0x7b,0xcf,0xb5,0x5a,0x46,0x6e,0xef,0xa1,0x67, + 0x82,0x18,0x7f,0x79,0xbb,0x73,0xf4,0x51,0x9d,0xd9,0xe8,0x48,0xfc,0x31,0x91,0x77, + 0xe0,0x9b,0x3d,0x67,0xe2,0xc7,0x8b,0x0a,0xa4,0x11,0x38,0x11,0x5d,0xdb,0x4f,0x1c, + 0x26,0x38,0xf9,0x54,0x60,0xc0,0x77,0x56,0xc7,0x27,0xf8,0xb2,0x4e,0x4e,0x73,0x5d, + 0xd7,0xc3,0xcb,0xfd,0x03,0xe1,0xb7,0x84,0xf5,0x88,0xae,0xa6,0x10,0x47,0xab,0xdd, + 0xcd,0x73,0x35,0xba,0xa3,0x0f,0x2a,0x3f,0xb9,0x1a,0xbb,0x63,0x6a,0x0e,0x0f,0x07, + 0x1f,0x7b,0x8a,0xc7,0xf8,0x6d,0x73,0xe0,0x43,0xe2,0x8b,0xed,0x37,0x4c,0x4d,0x4a, + 0xfb,0xfb,0x46,0x03,0x93,0x75,0x29,0x8a,0x38,0x23,0x0c,0x4b,0x6c,0xc0,0xdc,0x40, + 0x1f,0x28,0xe4,0x0f,0x9f,0xaf,0x19,0x1e,0x86,0x17,0x32,0x8d,0x3c,0x7d,0x57,0x38, + 0xb7,0x15,0xa6,0x8b,0xb1,0xf6,0x38,0xde,0x1d,0x9a,0xc9,0x68,0xd6,0x8c,0x92,0x93, + 0xd5,0xdd,0xdb,0x47,0xaa,0xb7,0x9d,0xba,0x75,0x3b,0xff,0x00,0x0e,0xcd,0x14,0x73, + 0x04,0x87,0x71,0x4d,0x91,0x2a,0x6f,0x6e,0x70,0xb1,0x46,0xa7,0xf0,0xc8,0x38,0xaa, + 0x9f,0x10,0xe0,0x07,0xc4,0x40,0x79,0x6f,0xc5,0xbc,0x3d,0x06,0x3a,0xa0,0x3f,0xd6, + 0x9a,0xd1,0x43,0xa0,0x78,0xc3,0x53,0xd2,0xed,0x65,0x92,0x5b,0x4b,0x2b,0xc9,0x2d, + 0xad,0xde,0x66,0xcb,0xed,0x53,0xea,0x00,0xcd,0x7d,0x4b,0xfb,0x34,0x7c,0x3e,0xd0, + 0x7e,0x27,0x78,0x3b,0x59,0xd4,0xf5,0xcd,0x32,0xd2,0xfe,0xea,0xdf,0x57,0x92,0xc6, + 0x39,0x6e,0x20,0x59,0x18,0x47,0x1c,0x10,0x85,0x19,0x3d,0xb9,0x3f,0x9d,0x74,0x35, + 0xcd,0x5e,0x72,0x87,0x5f,0xf3,0x3e,0x26,0x5e,0xed,0x28,0xa9,0x1f,0x87,0xed,0x7f, + 0x3b,0x0f,0x9a,0x57,0x3f,0x52,0x6a,0x16,0xb8,0x90,0xb7,0xdf,0x38,0xfa,0xd3,0x58, + 0xfb,0xf4,0xa6,0xe7,0x3f,0x5a,0xfb,0x63,0xc4,0xd0,0x79,0x99,0xb1,0xd4,0xfe,0x26, + 0x90,0xc8,0x48,0xe4,0x91,0xed,0x51,0xb1,0xc0,0xa6,0x17,0xc0,0x20,0x73,0x59,0xe8, + 0xca,0xd4,0x9c,0xc8,0x13,0x06,0x49,0x96,0x3c,0xf2,0x03,0x12,0x4f,0xe4,0x01,0xa9, + 0x2d,0xec,0xee,0xae,0xa4,0xc2,0x8d,0xb0,0xf7,0x94,0xf2,0x3f,0x0a,0xab,0xa7,0xb8, + 0xb7,0xbc,0xf3,0x65,0x51,0x22,0x9c,0xe1,0x9b,0xa6,0x6b,0x57,0x50,0xf1,0x09,0x7b, + 0x7f,0x2a,0x30,0x33,0x9e,0xbe,0x95,0x12,0x9f,0x44,0x68,0xa3,0xdc,0xb7,0x69,0xf6, + 0x3d,0x3a,0x1f,0x33,0x05,0xa6,0x52,0x43,0x49,0x2f,0x24,0x11,0xe8,0x3a,0x0a,0xa5, + 0x7b,0xae,0x49,0x70,0xc4,0x45,0x90,0x0f,0xf1,0xb7,0x53,0x59,0x0d,0x23,0x4c,0xdb, + 0x98,0xe4,0xfa,0xd4,0xb1,0xae,0xf0,0x2a,0x77,0xdc,0x36,0xd8,0x72,0x92,0x49,0x66, + 0x39,0x6e,0xb9,0x34,0xe0,0xc7,0xa7,0x5a,0x57,0x4d,0x84,0xf2,0x38,0xc5,0x37,0x39, + 0xcf,0x23,0x14,0x5d,0x58,0x4a,0xf7,0x1f,0x82,0x4f,0x00,0xf1,0xd7,0x34,0x67,0x07, + 0xa5,0x22,0x6f,0x91,0xb0,0x39,0xfa,0x55,0xc8,0xb4,0xbb,0xe9,0x80,0xf2,0xac,0xee, + 0x24,0xcf,0xf7,0x22,0x66,0xfe,0x42,0xa1,0xd4,0x84,0x77,0x66,0xca,0x13,0x96,0xc8, + 0xaa,0x0e,0x7a,0x0f,0xd2,0x80,0x6b,0x5a,0x2f,0x08,0x6b,0xd7,0x07,0xf7,0x5a,0x2e, + 0xa2,0xde,0xeb,0x6a,0xe7,0xfa,0x55,0xb8,0x7e,0x1c,0xf8,0xa6,0x62,0x36,0xe8,0x17, + 0xd9,0x3c,0x8d,0xd0,0x95,0xfe,0x78,0xae,0x69,0x62,0xf0,0xf0,0xf8,0xaa,0x25,0xf3, + 0x47,0x44,0x70,0x98,0x89,0x7c,0x34,0xdb,0xf9,0x33,0x05,0x5b,0x14,0x33,0x31,0xe7, + 0xf0,0xae,0xba,0x0f,0x84,0x9e,0x2f,0x9b,0x1f,0xf1,0x24,0x95,0x7d,0x9e,0x48,0xd7, + 0xf9,0xb5,0x5f,0x4f,0x82,0x3e,0x2d,0x93,0x6e,0xeb,0x08,0xa1,0x2d,0xd3,0x7d,0xcc, + 0x7f,0xd0,0x9a,0xe6,0x96,0x67,0x82,0x8e,0xf5,0xa3,0xf7,0xa3,0x68,0xe5,0xb8,0xc9, + 0x6d,0x46,0x5f,0x73,0x38,0x3d,0xc4,0x75,0x34,0x06,0xf6,0xc7,0x6e,0x2b,0xd0,0x6d, + 0x7e,0x07,0xeb,0xf7,0x77,0x32,0x5b,0x2d,0xd6,0x97,0xf6,0x84,0xe5,0xe3,0xfb,0x56, + 0xe7,0x5f,0xa8,0x55,0x38,0xad,0x1b,0x5f,0xd9,0xff,0x00,0x59,0x9a,0xe6,0x4b,0x7f, + 0xed,0x2d,0x3b,0xcf,0x40,0x19,0xe2,0x47,0x76,0x65,0x07,0xa1,0x23,0x6f,0x19,0xc5, + 0x65,0x3c,0xe3,0x01,0x0d,0xea,0xa3,0x78,0x64,0xf8,0xe9,0xea,0xa9,0x33,0xcc,0x33, + 0x9e,0x45,0x38,0x73,0xce,0x33,0x5e,0xbd,0x6b,0xfb,0x39,0x6a,0x12,0x96,0x07,0x59, + 0x80,0x32,0x9c,0x30,0x5b,0x76,0x38,0x3f,0x89,0x15,0xa5,0x0f,0xec,0xd1,0x36,0x33, + 0x26,0xb4,0xc4,0x7f,0xb1,0x69,0xff,0x00,0xd9,0xd7,0x24,0xf8,0x8b,0x2c,0xa7,0xa3, + 0xab,0xf8,0x3f,0xf2,0x3a,0xa1,0xc3,0xf9,0x8c,0xf6,0xa7,0xf8,0xaf,0xf3,0x3c,0x3d, + 0x47,0xb6,0x29,0xea,0x3d,0xbf,0x3a,0xf7,0xc8,0x3f,0x66,0x8b,0x61,0xfe,0xb7,0x53, + 0xbc,0x6f,0xf7,0x63,0x55,0xff,0x00,0x1a,0xb3,0xff,0x00,0x0c,0xe9,0xa4,0xc1,0x16, + 0xe3,0x36,0xa1,0x70,0x7f,0xba,0x65,0x45,0xcf,0xfe,0x39,0x5c,0xcf,0x8a,0x72,0xcb, + 0xda,0x33,0x6f,0xe5,0xfe,0x67,0x42,0xe1,0xac,0xc6,0xd7,0x71,0x4b,0xe7,0xfe,0x47, + 0xcf,0x2e,0x37,0x1e,0x98,0xaa,0x92,0x5b,0xbc,0x32,0x2c,0xd6,0xc4,0xc5,0x30,0x39, + 0xe9,0xc1,0xaf,0xa8,0x20,0xfd,0x9f,0x3c,0x3c,0xab,0x96,0x82,0xe2,0x43,0xe8,0xf7, + 0x07,0xfa,0x62,0xad,0x47,0xf0,0x23,0xc3,0xa8,0x46,0x34,0xd2,0x7f,0xde,0x96,0x43, + 0xff,0x00,0xb3,0x57,0x2c,0xb8,0xb7,0x00,0xb4,0x4a,0x4f,0xe4,0xbf,0xcc,0xe9,0x8f, + 0x0a,0xe3,0x9e,0xf2,0x8f,0xde,0xff,0x00,0xc8,0xf9,0xca,0xd2,0xf9,0x6e,0xac,0xe3, + 0x4b,0x98,0xf6,0xc8,0x0e,0x4b,0x53,0x14,0x91,0xdf,0x03,0x3d,0x6b,0xea,0x2b,0x4f, + 0x83,0x1e,0x1e,0xb7,0x23,0x1a,0x2c,0x0d,0x8f,0xef,0xc7,0xbb,0xf9,0xd6,0xdd,0x9f, + 0xc3,0x1d,0x2a,0xdd,0x71,0x16,0x91,0x69,0x1f,0xa1,0x5b,0x74,0x1f,0xd2,0xb9,0x1f, + 0x17,0xe1,0xa3,0xf0,0xd3,0x6f,0xfa,0xf9,0x9d,0x31,0xe1,0x3a,0xef,0xe3,0xa8,0x97, + 0xf5,0xf2,0x3e,0x52,0xb0,0x8e,0x59,0x25,0x02,0x18,0xde,0x63,0x9e,0x91,0xa9,0x6f, + 0xe5,0x5f,0x49,0x7e,0xcb,0x9f,0x0e,0x35,0xff,0x00,0x14,0xfc,0x41,0xb0,0x96,0x3b, + 0x19,0x6c,0x60,0x84,0x17,0x79,0xef,0x63,0x31,0x2e,0x02,0x9e,0x80,0x82,0x4e,0x7e, + 0x84,0x7a,0xd7,0xa2,0x7c,0x36,0xf0,0x3a,0xa7,0x88,0x35,0xdb,0x68,0xad,0xc2,0x39, + 0x8e,0xde,0xe1,0x50,0x0c,0x6e,0x4f,0x9d,0x72,0x3e,0x85,0x7f,0x51,0x5e,0xcf,0xe0, + 0x83,0x37,0xc3,0xcd,0x42,0x6d,0x62,0xee,0xc6,0x79,0x2c,0xa2,0x42,0xb2,0x18,0x00, + 0x2c,0x33,0xc0,0xc6,0x6b,0xea,0x29,0xe2,0x5e,0x33,0x0d,0x1a,0xf0,0x5a,0x49,0x5c, + 0xf9,0x6a,0xd8,0x75,0x84,0xc4,0xca,0x84,0x9d,0xf9,0x59,0xda,0xaf,0xc1,0x6b,0xd9, + 0x18,0x85,0x8e,0xc2,0xf4,0x75,0xf9,0x4e,0xd2,0x7f,0x32,0x95,0x5b,0xe0,0x85,0x86, + 0xa9,0x73,0xe0,0x4d,0x60,0x59,0x58,0x3b,0x43,0x75,0xac,0xa3,0xac,0x91,0x0c,0x9c, + 0x2d,0xcc,0x25,0x80,0x00,0xf0,0x02,0xa9,0x39,0xf6,0xab,0xe3,0xe3,0xcf,0x86,0xe6, + 0xb3,0x9d,0xb7,0xdf,0x41,0x2e,0xc6,0x2a,0x24,0x84,0x75,0xc7,0x03,0x22,0xb2,0x3e, + 0x08,0x7c,0x42,0xf0,0xff,0x00,0x87,0x7e,0x1f,0x69,0xb6,0x57,0x97,0xd2,0x45,0x79, + 0xba,0x49,0x25,0x55,0x89,0x8e,0x09,0x91,0xb1,0xce,0x39,0xe3,0x15,0xe7,0x4e,0x9b, + 0x74,0x9a,0x92,0xea,0xbf,0x53,0xa2,0x0e,0x31,0x9a,0xe5,0x7d,0x19,0xde,0xfc,0x7d, + 0xd6,0x75,0x3f,0x0c,0xfc,0x15,0xf1,0xa5,0xe4,0xae,0xde,0x7a,0xd8,0x38,0x40,0xf9, + 0xe3,0x38,0x03,0xae,0x33,0xd4,0xd6,0x17,0xec,0x85,0x1b,0xc5,0xfb,0x3f,0x78,0x70, + 0xcb,0xb0,0x19,0xda,0xea,0x67,0x91,0x98,0x0c,0xb3,0x5c,0x49,0xff,0x00,0xd6,0xae, + 0x6f,0xf6,0x9a,0xf8,0xab,0xa3,0x6a,0x3f,0x01,0x3c,0x61,0x65,0x63,0xa8,0xcd,0x2d, + 0xc4,0xd6,0xab,0x1a,0x46,0x51,0xd4,0x1c,0xca,0x99,0xed,0xe9,0x56,0x3f,0x65,0xef, + 0x88,0x3a,0x55,0x87,0xc0,0x4f,0x07,0x59,0xdd,0x99,0xa4,0x9e,0x2b,0x77,0x66,0x1f, + 0x66,0x2e,0x01,0x32,0xb9,0xc8,0xf9,0x4f,0xad,0x73,0x4b,0x0f,0xfe,0xcb,0x6f,0xef, + 0x7e,0x87,0x47,0xb5,0x4a,0xbf,0xcb,0xf5,0x3d,0xe2,0xe2,0xec,0x5b,0x3e,0x58,0x06, + 0x8d,0x01,0x6d,0xd1,0xb7,0x4c,0xfd,0x39,0xcf,0x5f,0xce,0xbe,0x39,0xfd,0xb5,0xbe, + 0x27,0x78,0xaf,0xc2,0x96,0xd6,0x3a,0x7e,0x8f,0xa1,0xdc,0x38,0xbd,0xc4,0x91,0xea, + 0x4d,0x11,0x74,0x51,0x82,0x30,0xbc,0x11,0x91,0x82,0x4e,0xe2,0x07,0x4e,0x08,0xaf, + 0xa8,0xe4,0xf1,0xce,0x93,0xa9,0x03,0x1e,0xc9,0xdd,0x3a,0xff,0x00,0xc7,0x8c,0x83, + 0x1f,0x8a,0xad,0x79,0xdf,0xc5,0x1f,0x87,0x1a,0x17,0xc4,0x8b,0xdb,0x39,0xf5,0x0b, + 0xe7,0x8c,0x5a,0xc0,0x20,0x84,0x08,0x59,0x19,0x54,0x63,0x03,0x78,0x01,0xc8,0x18, + 0xe8,0xc4,0x8e,0xbc,0x73,0x51,0x85,0xa7,0x1a,0x35,0x39,0xe6,0xae,0x55,0x79,0xb9, + 0xc3,0x96,0x27,0xc9,0xfe,0x34,0xf1,0xcc,0x09,0xf0,0x8b,0x46,0x4d,0x2a,0xc6,0x79, + 0xef,0xbc,0x94,0xb7,0x92,0x5b,0x86,0x5c,0x24,0x81,0x76,0xbc,0xa0,0x83,0xc9,0xdc, + 0x32,0x0e,0x3f,0x8b,0x3d,0xab,0xce,0xb4,0x8f,0x11,0xdd,0xf8,0x03,0xc5,0x7e,0x16, + 0x11,0x79,0x81,0x6f,0x88,0xb7,0xba,0xf2,0x54,0xe0,0x29,0x21,0x54,0x82,0x7b,0x82, + 0x58,0xe7,0xd3,0xd2,0xbd,0x13,0xe2,0x0d,0xbd,0x94,0x1a,0xb7,0x88,0xbc,0x2d,0xa4, + 0x42,0x9e,0x56,0x8f,0x2a,0xb7,0x97,0x86,0x0b,0x30,0x63,0xcb,0x2a,0x86,0x18,0xe4, + 0x77,0xe0,0x64,0x73,0xcd,0x7b,0xa7,0x84,0x74,0xcf,0x85,0x56,0x7a,0x0d,0xb5,0xd6, + 0xb1,0xa4,0x59,0x8b,0xf7,0x96,0x2b,0x84,0xb6,0xbf,0x0e,0x5e,0x12,0x01,0x05,0x18, + 0x23,0x49,0xb9,0x7a,0x1c,0x06,0xdb,0xc0,0x24,0x1a,0xe5,0xca,0xd2,0x8d,0x5a,0xfc, + 0xd1,0xdd,0xbf,0xb9,0xec,0x7d,0xe7,0x16,0x4d,0xbc,0x06,0x02,0x34,0xe7,0x74,0xe0, + 0x9b,0xd5,0x3b,0x49,0x59,0x3f,0xce,0xc7,0x8a,0xeb,0x9a,0x93,0x8f,0x1d,0xf8,0x86, + 0x16,0x6c,0x3a,0x6a,0x97,0x3f,0x30,0x6f,0xfa,0x6a,0x47,0xf4,0xaf,0xb9,0x7f,0x61, + 0x82,0xfa,0x77,0xc2,0x9d,0x76,0x3b,0xa6,0x02,0x56,0xf1,0x05,0xcc,0x83,0x3d,0xd5, + 0xa1,0x80,0xa9,0xfc,0x41,0x06,0xbe,0x6c,0xf1,0x97,0x86,0xbc,0x17,0xe2,0xdd,0x55, + 0x6e,0x6d,0xae,0xb4,0x4d,0x2a,0x28,0xc1,0x0b,0x1d,0x8c,0x17,0x68,0xcf,0x93,0x92, + 0xd2,0x10,0x41,0x76,0x27,0xb9,0x3f,0x40,0x2b,0xd6,0xbe,0x16,0xf8,0xba,0xdf,0xc2, + 0x5e,0x1d,0x96,0xcf,0x4f,0xbf,0x86,0xe2,0x06,0x9f,0x7e,0xeb,0x74,0x91,0x14,0x11, + 0x1a,0x20,0x18,0x76,0x2d,0x9c,0x22,0xf2,0x4f,0x35,0xee,0x46,0x12,0xe6,0x6e,0x27, + 0xe6,0x53,0xe5,0x94,0x6c,0xcf,0x8b,0x2e,0x3f,0x66,0x6f,0x05,0x31,0x22,0x3d,0x32, + 0xf0,0x67,0xfe,0x9a,0x8f,0xe8,0xa2,0xb3,0xee,0xff,0x00,0x65,0xff,0x00,0x0b,0x88, + 0xa4,0x31,0x59,0x5d,0xa1,0x00,0xe0,0x97,0x26,0xbf,0x41,0xae,0xbc,0x05,0xa3,0x42, + 0x3f,0xd5,0xa9,0x3e,0xa0,0x0c,0x56,0x35,0xff,0x00,0x84,0xb4,0xd3,0x1c,0x91,0x2d, + 0xba,0x61,0x94,0x8c,0xd7,0xd3,0xba,0x33,0x6b,0x73,0xc2,0x55,0xe3,0xd8,0xfc,0xc7, + 0xd1,0x7e,0x03,0x68,0x1a,0xce,0x99,0x05,0xec,0x8f,0xa8,0xc6,0xf3,0x02,0xc6,0x38, + 0xa6,0x5d,0x8b,0xc9,0xe9,0x95,0x27,0xf5,0xad,0x01,0xfb,0x3c,0xf8,0x79,0x46,0x41, + 0xd4,0x58,0xfb,0xce,0xbf,0xd1,0x6b,0xdb,0x3c,0x19,0xa2,0xa5,0xbe,0x91,0x71,0x61, + 0x2a,0x0f,0xb4,0x69,0x97,0x97,0x16,0x52,0x92,0x39,0xdc,0x92,0xb0,0xfe,0x58,0xad, + 0x96,0xd3,0x23,0x8d,0x3e,0xe0,0xfc,0x05,0x7e,0x25,0x8e,0xcd,0xf3,0x0a,0x58,0x9a, + 0xb4,0xfd,0xb3,0x49,0x49,0xaf,0xc4,0xfd,0xbb,0x05,0x95,0x60,0x2a,0xe1,0xa9,0xd4, + 0xf6,0x49,0xb7,0x14,0xff,0x00,0x03,0xe7,0x63,0xfb,0x3f,0x68,0x0a,0x46,0xd8,0xae, + 0xdb,0xd4,0x3c,0xf9,0xfe,0x95,0x6e,0xdf,0xe0,0x56,0x85,0x1e,0x07,0xf6,0x6b,0x48, + 0x47,0x77,0x95,0xff,0x00,0xa1,0xaf,0x75,0x6b,0x05,0x63,0xc2,0xe0,0x7a,0x11,0x8a, + 0x16,0xc3,0x20,0x8c,0x7e,0x95,0xc7,0xfd,0xaf,0x8d,0x92,0xd6,0xb3,0xfb,0xce,0xcf, + 0xec,0xac,0x14,0x5d,0xd5,0x18,0xfd,0xc8,0xf1,0xeb,0x6f,0x82,0xbe,0x1f,0x5d,0xbf, + 0xf1,0x22,0x80,0x9e,0xe5,0xcb,0x1f,0xe6,0x6b,0x5a,0xdb,0xe0,0xe6,0x80,0xa4,0x11, + 0xa0,0x69,0xe3,0x1f,0xde,0x85,0x5b,0xf9,0xd7,0xa8,0x45,0xa6,0xef,0x19,0x18,0xfc, + 0x6a,0xd4,0x56,0xaa,0x01,0x0d,0x80,0x6b,0x9a,0x79,0x8e,0x26,0x5b,0xd5,0x97,0xde, + 0xce,0x98,0x60,0x70,0xd0,0x5a,0x52,0x8f,0xdc,0x8f,0x37,0x5f,0x85,0xda,0x5c,0x00, + 0x1b,0x7d,0x17,0x4c,0x46,0xce,0x39,0xb4,0x8f,0xfc,0x2b,0x66,0xcf,0xc0,0xf6,0x50, + 0x20,0xdb,0x63,0x6d,0x19,0xff,0x00,0x62,0x14,0x1f,0xd2,0xbb,0x25,0x89,0x7d,0x45, + 0x48,0x23,0x41,0xc9,0xc6,0x3e,0xb5,0xc9,0x53,0x15,0x52,0x4a,0xce,0x4c,0xe9,0x8e, + 0x1e,0x9c,0x5d,0xe3,0x14,0x73,0x29,0xe1,0x68,0x97,0xee,0xa0,0x5f,0x61,0x81,0xfd, + 0x2a,0x75,0xf0,0xe2,0x8e,0x0b,0x71,0xe9,0xb8,0xd7,0x41,0xba,0x25,0x03,0x25,0x47, + 0xbe,0x69,0x44,0xd0,0x77,0x2b,0x5c,0x6e,0xaa,0x7b,0xb3,0x65,0x14,0xb6,0x31,0x57, + 0xc3,0x70,0x63,0xe6,0x19,0xe3,0x8c,0x93,0x4c,0xb7,0xf0,0xd4,0x50,0x82,0xb9,0xdc, + 0x01,0xfe,0x2e,0x6b,0x73,0xed,0x70,0xf6,0x61,0x81,0xfe,0xcf,0xf8,0xd2,0x7d,0xb6, + 0x15,0xe8,0x19,0xbb,0xfc,0xa0,0x1a,0xcf,0xda,0xa4,0x9a,0xbe,0x8f,0xcc,0x2c,0x9b, + 0xbf,0x53,0xc7,0x75,0xcf,0x06,0x3c,0xbe,0x2a,0xd6,0x6e,0x6e,0xbc,0x3b,0xa8,0x6a, + 0xf6,0xaa,0xd1,0xbc,0x4f,0x0d,0xc1,0x85,0x15,0x04,0x6b,0x9d,0xab,0x91,0xbc,0xe7, + 0x3c,0x0a,0x97,0x55,0xb7,0xf3,0xb5,0x7f,0x0f,0x78,0xaa,0xd3,0x53,0x96,0xe7,0x4e, + 0xbc,0x92,0x4b,0x48,0x91,0xe2,0x44,0x5b,0x53,0x22,0x15,0x5e,0x83,0xb3,0x8c,0x12, + 0x7d,0x2b,0xbc,0xd7,0x34,0xb8,0xb5,0x5b,0xbf,0xb5,0xdb,0xea,0x57,0xba,0x55,0xd6, + 0xcf,0x29,0xa5,0xb5,0x90,0x00,0xeb,0xe8,0x55,0x81,0x19,0xf7,0xc6,0x6a,0x2b,0x3f, + 0x0a,0xe9,0x09,0xe1,0x31,0xe1,0xe5,0x8d,0xe6,0xb1,0x1c,0x92,0xd2,0x1f,0x30,0xb6, + 0xed,0xdb,0xb7,0x0c,0x60,0xe7,0xd2,0xbe,0xa2,0x19,0xb6,0x16,0x30,0xa7,0x29,0xea, + 0xd2,0x51,0x6a,0xcf,0xe1,0x6a,0xcf,0x77,0x6b,0xec,0xd7,0x2d,0xaf,0xad,0xcf,0x9e, + 0xa9,0x97,0xd7,0x72,0x9a,0x8e,0xcd,0xf3,0x27,0xa7,0xc5,0x7b,0xad,0xb5,0xb6,0xe9, + 0xde,0xf6,0xd2,0xc7,0x9e,0x59,0x68,0x56,0xba,0x77,0xc3,0xab,0x5f,0x10,0x59,0x44, + 0x61,0xd7,0x74,0x69,0xcb,0x5e,0x13,0x81,0x2b,0xb0,0x7c,0x4b,0x1c,0x87,0xbe,0x41, + 0xcf,0x3e,0xd5,0xd1,0x68,0xde,0x1f,0xb6,0xf0,0xbf,0x8f,0x6d,0xdd,0x25,0xb9,0xb8, + 0xb3,0xd7,0xad,0x32,0xb3,0x5d,0x4c,0x5d,0x8c,0xc9,0xf3,0x00,0x49,0xf5,0x43,0xc0, + 0xf6,0xae,0x8f,0x59,0xf0,0x8e,0x85,0xac,0xdc,0x79,0xf7,0xd6,0xa8,0x66,0x60,0xbe, + 0x61,0xf3,0x59,0x04,0xd8,0xe9,0xbc,0x2b,0x00,0xdf,0x88,0xad,0x3b,0xc6,0xb3,0xba, + 0xfb,0x37,0x9c,0xb6,0xd2,0x7d,0x99,0xc4,0xb0,0xe5,0x33,0xe5,0xb8,0x1c,0x15,0xe3, + 0x8a,0xc6,0xbe,0x71,0x46,0xa4,0x5a,0xb3,0x7c,0xdc,0xd7,0xdb,0x44,0xec,0xd2,0x4e, + 0xfa,0xa8,0xcb,0x55,0xb6,0x85,0xd1,0xcb,0x67,0x4e,0x49,0xdd,0x2e,0x5e,0x5b,0x6f, + 0xab,0x5a,0x37,0xb6,0x97,0x8e,0x8f,0x73,0x44,0x69,0x30,0xc6,0x41,0x11,0x28,0x3e, + 0xb9,0xa7,0xae,0x9e,0x98,0xe1,0x10,0x56,0x54,0x9a,0xeb,0xe7,0x89,0xb7,0x63,0xd0, + 0x62,0xa3,0x3a,0xe4,0xb8,0xfb,0xdf,0xad,0x7c,0xbf,0xb5,0x5b,0x28,0x9f,0x45,0xc9, + 0xcc,0x6e,0x0b,0x05,0xeb,0x85,0x1f,0x85,0x28,0xb0,0x40,0x09,0x20,0x7d,0x31,0x5c, + 0xef,0xf6,0xc5,0xc3,0x1f,0xf5,0x98,0xfd,0x6a,0x23,0xa9,0xcc,0xc4,0xfe,0xf4,0xd3, + 0x55,0xa4,0xf6,0x45,0x38,0x25,0xd4,0xe8,0xda,0xd5,0x54,0x60,0x30,0x1f,0x5a,0x48, + 0xe1,0x8a,0x2c,0xef,0x95,0x1b,0xd0,0x02,0x2b,0x9b,0x17,0xf2,0xe7,0xfd,0x69,0xfc, + 0xeb,0x85,0xf8,0xc9,0xe2,0x0b,0xfd,0x2f,0xc2,0x22,0x5b,0x1b,0xc9,0x6d,0x6e,0x1a, + 0xe1,0x13,0xcc,0x89,0xb0,0xdb,0x48,0x24,0xf3,0xf8,0x0a,0xeb,0xc2,0x53,0xab,0x8c, + 0xc4,0x42,0x84,0x34,0x72,0x76,0x39,0x71,0x35,0x61,0x85,0xa1,0x3a,0xd3,0xd5,0x45, + 0x5c,0xf6,0x03,0x35,0x9a,0x72,0x5d,0x73,0xf5,0xa3,0xfb,0x66,0xc2,0x01,0x96,0x65, + 0xe3,0xde,0xbe,0x7f,0xf8,0x07,0xe1,0xb3,0xf1,0x3f,0x56,0xd4,0xe1,0xd7,0xf5,0xbd, + 0x45,0x6d,0xed,0x52,0x36,0x0e,0xfa,0xa3,0x40,0x83,0x71,0x7c,0xee,0x62,0x1b,0x8f, + 0x94,0x74,0x15,0xed,0x3a,0x57,0xc1,0x5f,0x02,0xda,0xeb,0x0b,0x6c,0xda,0x7d,0xcf, + 0x89,0xa2,0x72,0x18,0x5d,0xc7,0x75,0x23,0x46,0x41,0xce,0x00,0xdc,0x7e,0x6e,0x31, + 0xce,0x07,0xd2,0xbe,0xf5,0x70,0x96,0x21,0x3b,0x4e,0xba,0xf9,0x2f,0xf8,0x27,0xc3, + 0xcb,0x8a,0xe8,0xbf,0x86,0x93,0xfb,0xcb,0x49,0xf1,0x1b,0x49,0xf0,0xb7,0x89,0xf4, + 0x3d,0x5c,0x5d,0x5b,0xc4,0xb1,0xdc,0x7d,0x92,0xe4,0x3c,0xaa,0x03,0x5b,0xcb,0xf2, + 0xb6,0x79,0xe8,0xac,0x11,0xf3,0xdb,0x69,0xf5,0xaf,0x46,0x93,0xf6,0x87,0xf0,0xae, + 0xaf,0x37,0xf6,0x3d,0xb5,0xe5,0xae,0xa6,0xf7,0x23,0xc8,0x58,0xad,0x98,0xca,0x49, + 0x3d,0x39,0x50,0x40,0x23,0xaf,0x27,0xb5,0x64,0x5c,0x7c,0x29,0xf0,0x06,0x94,0xd0, + 0x2d,0x9f,0x85,0xde,0xd9,0xb8,0xc8,0xba,0x86,0x32,0x0b,0x01,0x9f,0x4c,0xe3,0xfa, + 0x57,0x35,0xaf,0x59,0xe9,0xba,0x7f,0x8d,0x74,0x41,0x6c,0x62,0x8e,0x17,0x59,0x18, + 0x08,0x22,0x08,0x17,0xf7,0x6c,0x9c,0x71,0xd4,0x57,0xda,0x65,0xb8,0x6a,0x99,0x76, + 0x17,0xea,0xce,0x7c,0xc9,0x36,0xf6,0xb7,0xc8,0xf8,0xdc,0xc3,0x15,0x0c,0xc7,0x13, + 0xed,0xd4,0x39,0x6e,0x92,0xde,0xe6,0x9e,0xb4,0x12,0xd7,0x4b,0xbd,0x60,0x0e,0x44, + 0x4d,0x82,0xc3,0x1d,0xb8,0xab,0xde,0x14,0x10,0xa6,0x87,0x63,0xb9,0x55,0x89,0x89, + 0x58,0xe7,0xdc,0x67,0xfa,0xd7,0x9d,0x4f,0xe1,0xed,0x5e,0x54,0x6f,0xb3,0xf8,0x92, + 0x4b,0xe8,0xd9,0x4c,0x6d,0x6b,0x71,0x81,0xb8,0xe3,0xd7,0xb6,0x38,0x3d,0x2a,0xe5, + 0x95,0x97,0x8e,0xb4,0xbb,0x58,0x62,0x56,0xd3,0xee,0x82,0x28,0x50,0xb7,0x31,0xec, + 0x61,0x8c,0x70,0x08,0xcf,0x4a,0xef,0x70,0x4d,0x58,0xe0,0x53,0x69,0xde,0xc7,0xa2, + 0x78,0xab,0x4a,0xb0,0xf1,0x0e,0x85,0x71,0xa7,0x5d,0x40,0xb2,0x5b,0xce,0x00,0x74, + 0xc9,0x19,0xc1,0x07,0xb1,0x1d,0xc5,0x68,0xf8,0x2e,0x38,0x7c,0x33,0xa0,0x59,0xe9, + 0xd6,0x17,0x13,0xda,0x5b,0x5b,0x2e,0xd4,0x89,0x25,0x62,0x14,0x67,0x3f,0xd6,0xbc, + 0xc8,0x78,0xcb,0xc5,0x16,0xe5,0x92,0xeb,0xc3,0x9e,0x66,0xd5,0xe4,0x41,0x78,0xbc, + 0xfd,0x01,0x3f,0xa6,0x2b,0x43,0x4e,0xf8,0x88,0x63,0x75,0x4b,0xdd,0x27,0x52,0xd3, + 0x58,0x9c,0x07,0x9e,0xdc,0x34,0x64,0xff,0x00,0xbc,0x2b,0x17,0x45,0xf2,0xf2,0xa3, + 0x45,0x55,0x5f,0x98,0xf6,0x35,0xf1,0x86,0xa9,0x10,0x22,0x1d,0x4a,0x52,0x07,0x66, + 0xc3,0x7f,0x3a,0x82,0x6f,0x88,0x1a,0xd4,0x7c,0xb4,0xcb,0x30,0x1e,0xab,0x8f,0xe5, + 0x5e,0x79,0x6b,0xf1,0x3b,0x47,0xb9,0x77,0x8c,0x6a,0xf6,0x51,0x32,0x70,0x43,0xe5, + 0x7f,0x5e,0x45,0x5b,0x1e,0x20,0xb6,0xd4,0x62,0xf3,0x21,0xbe,0xb3,0xb9,0x5f,0x58, + 0x6e,0x14,0xff,0x00,0x3c,0x56,0x1e,0xc1,0xa7,0xaa,0x36,0xf6,0xcb,0xa3,0x37,0xb5, + 0xdf,0x15,0x59,0xf8,0x8a,0xda,0x4b,0x7d,0x67,0x40,0xb7,0xbe,0x46,0x18,0x2c,0xb2, + 0xbc,0x4f,0x8c,0x60,0x80,0xc3,0x91,0xf9,0xd5,0x6d,0x1f,0x52,0xf0,0x8e,0x97,0x6f, + 0x0d,0xbc,0x7e,0x19,0x96,0x18,0x21,0x50,0xb1,0xa0,0xbc,0x79,0x02,0x01,0xd0,0x00, + 0xc6,0xb0,0xe4,0x77,0x99,0xb0,0xaa,0x78,0xf4,0xe7,0xf9,0x55,0x77,0x59,0x13,0x3b, + 0x95,0x80,0xf7,0x18,0xad,0xe1,0x49,0x2d,0xc7,0x3a,0x9c,0xf6,0xf2,0x3d,0x06,0x3d, + 0x53,0xe1,0xfd,0xd3,0x87,0x9f,0x43,0x64,0x93,0xfb,0xcd,0x18,0x63,0xfc,0xe9,0x93, + 0xeb,0x7a,0x05,0x94,0xcd,0x16,0x96,0xeb,0x6f,0x6b,0xc1,0xd8,0xdf,0x29,0xce,0x39, + 0xe0,0xd7,0x9e,0x9e,0x47,0x52,0x0f,0xd7,0x35,0x24,0x71,0x02,0xa3,0x2f,0xcd,0x5c, + 0x69,0xa8,0xbb,0xa6,0x62,0xfd,0xe5,0x63,0xdf,0x35,0x3f,0xda,0x4b,0xe1,0x3c,0x2a, + 0xcd,0xff,0x00,0x09,0xa6,0x8c,0xde,0xc2,0xf1,0x0f,0xf5,0xae,0x4b,0x52,0xfd,0xac, + 0x7e,0x13,0xdb,0xe4,0x0f,0x15,0x69,0xcf,0x8e,0x9b,0x65,0x06,0xbe,0x47,0xd0,0xbe, + 0x12,0x78,0x28,0x5d,0xdd,0x2e,0xa9,0xa2,0x0d,0x90,0x7c,0x98,0x84,0xb0,0xcb,0xf5, + 0xc6,0x4b,0x73,0xf8,0x7a,0x57,0xa2,0xd9,0x7c,0x35,0xf8,0x3b,0x6b,0xa7,0x92,0x9e, + 0x14,0xba,0x79,0x82,0x9c,0x19,0xf6,0xed,0xdd,0x8e,0x3d,0x78,0xaf,0x73,0xeb,0x0f, + 0xa1,0xe2,0xfb,0x04,0x71,0x5a,0xdf,0xc6,0xff,0x00,0x07,0x2f,0xc4,0x7f,0x1a,0xdd, + 0xd9,0x6a,0xf6,0xe3,0x4b,0xbe,0xbb,0x86,0xea,0xdd,0xb2,0x76,0xb3,0x34,0x2b,0xe6, + 0x91,0xc7,0x3f,0x38,0x35,0x4a,0xe7,0xf6,0x81,0xf0,0xba,0x7f,0xcc,0x4c,0x49,0x8e, + 0xd1,0xc1,0x23,0x7f,0x4a,0xf5,0x2b,0x1f,0x87,0x5e,0x03,0xb8,0x96,0x35,0xb0,0xd0, + 0xa0,0xb4,0xdc,0x06,0x41,0x85,0x0e,0xe3,0xf5,0xc5,0x75,0x5e,0x27,0xf8,0x57,0x61, + 0xa3,0xf8,0x5a,0x3b,0xed,0x37,0x4b,0x81,0x24,0x8d,0xc2,0xa2,0xc3,0x0f,0xce,0xec, + 0x79,0x00,0xf1,0x9c,0x70,0x49,0xf6,0x06,0xbe,0x1f,0x15,0xc3,0x78,0x6c,0x6e,0x26, + 0x75,0xe7,0x36,0x9c,0xb5,0xb2,0x6b,0xfc,0x8f,0xb7,0xc3,0x71,0x2e,0x27,0x09,0x87, + 0x85,0x08,0x41,0x35,0x15,0x6b,0xbb,0xff,0x00,0x99,0xf3,0xd7,0xfc,0x2f,0xbd,0x22, + 0xe5,0x8a,0xda,0x5b,0x6a,0x37,0x9f,0xf5,0xc2,0xc9,0xcf,0xf3,0xac,0x9d,0x6b,0xf6, + 0x8d,0xb6,0xd1,0x36,0x09,0xf4,0x2d,0x5d,0x3c,0xc3,0x84,0xf3,0xa1,0x58,0xc3,0x7d, + 0x32,0xd5,0xf4,0x97,0x85,0x45,0xca,0x69,0xcb,0x77,0xab,0xe9,0x9a,0xcd,0xf6,0x9f, + 0x1b,0x79,0x57,0x10,0xda,0xdb,0xfd,0x9a,0xdd,0xd0,0x67,0x86,0x71,0xf3,0x30,0xce, + 0x38,0x23,0x1e,0x95,0xf2,0xdf,0xed,0x9b,0x31,0x9f,0xc5,0x5a,0x2b,0xa6,0x94,0xda, + 0x45,0xb4,0x81,0xa4,0xb7,0xb6,0x23,0x91,0x17,0xcd,0xb0,0xfb,0xe4,0x73,0xd2,0xa6, + 0x9f,0x0a,0xe0,0x39,0xac,0xf9,0x9f,0xcf,0xfc,0x90,0xe7,0xc5,0x38,0xf6,0xb4,0x51, + 0x5f,0x2f,0xf3,0x65,0x7b,0x9f,0xda,0x9e,0x65,0x6f,0xf4,0x6d,0x00,0x91,0xd8,0xcb, + 0x72,0x07,0xf2,0x53,0x5e,0xa5,0xe1,0xff,0x00,0x15,0x5e,0xeb,0x3a,0x64,0x17,0x57, + 0x02,0x3b,0x66,0x99,0x16,0x41,0x1a,0x36,0x40,0x04,0x67,0xae,0x2b,0xe3,0x56,0x63, + 0x80,0xb8,0xaf,0xac,0x3c,0x39,0x85,0xd0,0x74,0xe0,0x3a,0xfd,0x9a,0x3f,0xfd,0x04, + 0x57,0xce,0x71,0x3e,0x55,0x85,0xcb,0x69,0xd2,0x58,0x68,0xd9,0xc9,0xbb,0xea,0xde, + 0xd6,0xee,0xcf,0xa5,0xe1,0xcc,0xcf,0x13,0x98,0xce,0xaf,0xd6,0x25,0x75,0x14,0xad, + 0xa2,0x5b,0xdf,0xb1,0xd5,0x9d,0x48,0x8f,0xbd,0x23,0x37,0xd0,0xd3,0xd7,0x56,0x8c, + 0x2e,0x0c,0x3b,0xcf,0xa9,0x6a,0xc8,0x46,0x6c,0x71,0x80,0x69,0xc5,0x9c,0x74,0x61, + 0x8a,0xfc,0xf3,0x92,0xda,0xd8,0xfb,0x83,0x57,0xfb,0x6e,0x40,0x3e,0x48,0x10,0x7a, + 0x75,0xa6,0x9d,0x62,0xe4,0xf0,0x02,0xaf,0xe1,0x59,0x44,0x48,0x7b,0x9a,0x4f,0x9f, + 0x39,0xe4,0x8a,0x2c,0xc7,0xa1,0xa0,0x6f,0xe7,0x39,0xe3,0x19,0xf4,0x5c,0x54,0x96, + 0x42,0xe3,0x52,0xbe,0x82,0xd9,0x65,0x0a,0xf2,0xb6,0xc5,0x2f,0x9c,0x66,0xb3,0x44, + 0x8e,0xbe,0xbc,0x1a,0xd1,0xf0,0xf5,0xe2,0x43,0xe2,0x0d,0x3d,0xee,0x26,0x58,0x60, + 0x12,0x12,0xd2,0x48,0xdb,0x40,0xf9,0x4f,0x52,0x7a,0x57,0x5e,0x0e,0x84,0x2b,0xe2, + 0x69,0xd2,0xa9,0xb4,0x9a,0x4f,0xd1,0xb3,0x97,0x15,0x56,0x54,0x70,0xf5,0x2a,0x41, + 0x6b,0x14,0xda,0xfb,0x8d,0x39,0x3c,0x39,0x71,0x1d,0xb6,0xa7,0x27,0xda,0x62,0x26, + 0xc1,0xf6,0x4b,0x1a,0xe7,0x27,0xe5,0x0d,0x91,0xc7,0x4c,0x37,0xe8,0x6a,0xcd,0x87, + 0x85,0x45,0xe3,0x44,0xb2,0xdf,0x79,0x0c,0xf6,0xa2,0xe8,0xaf,0x96,0x58,0xaa,0x93, + 0xc7,0x71,0xef,0xf9,0x55,0xcb,0x7d,0x6b,0x45,0x83,0x51,0xd6,0xd2,0x6d,0x5a,0x36, + 0x86,0xfd,0x02,0x82,0x8a,0xcc,0x17,0x00,0xae,0x77,0x63,0x04,0xfc,0xdf,0xa5,0x47, + 0x1f,0x8c,0xf4,0x4b,0x5d,0x6a,0xea,0xe1,0x2e,0x6e,0x36,0x34,0x02,0xde,0x36,0x5b, + 0x76,0x21,0x02,0xf4,0xc7,0x73,0xc9,0x27,0xa6,0x2b,0xef,0xe1,0x92,0xe5,0x54,0xe6, + 0xa5,0x51,0xab,0x6a,0xac,0xe5,0xd9,0xbd,0x77,0xea,0xac,0x7c,0x34,0xf3,0x6c,0xd2, + 0xa4,0x1c,0x69,0xc5,0xdf,0x47,0x75,0x17,0xd5,0x2d,0x36,0xe8,0xee,0x43,0xa4,0xf8, + 0x7f,0x4d,0xd5,0xae,0xe6,0xf2,0xb5,0x39,0x64,0xb5,0xb7,0x8b,0xcc,0x95,0xcc,0x0d, + 0x1b,0x64,0x9e,0x00,0x0d,0xdb,0x00,0x9c,0xf3,0xd3,0xde,0x97,0x4b,0xd3,0x34,0x2d, + 0x42,0x2d,0x42,0xf6,0x37,0xbd,0x92,0xd2,0xce,0x20,0xde,0x5b,0x80,0xac,0xed,0xf3, + 0x13,0xdb,0xa6,0x00,0xe3,0x82,0x49,0xea,0x31,0x55,0xe1,0xf1,0xae,0x9b,0x61,0x73, + 0x71,0x21,0xfe,0xd1,0xd4,0xc5,0xd4,0x62,0x29,0xa4,0x91,0x51,0x0e,0xd1,0x9c,0x60, + 0x71,0xea,0x7f,0x3a,0xa9,0x67,0xe2,0xdd,0x2f,0x4a,0x59,0xe0,0xb3,0xd2,0xe7,0x92, + 0xce,0xe5,0x36,0xcc,0x2e,0x27,0x0a,0xe7,0xaf,0x40,0x32,0x3b,0xfa,0x8f,0xd2,0xa5, + 0x61,0xf2,0x9a,0x6e,0x3f,0xc3,0xb5,0xdd,0xee,0xdb,0xd7,0xec,0xf5,0x7a,0x77,0x34, + 0x75,0x73,0x4a,0x8a,0x56,0xe7,0xe9,0x6b,0x24,0xb4,0xfb,0x57,0xd1,0x6b,0xdb,0x62, + 0x7d,0x56,0xca,0xc6,0x5d,0x12,0xd7,0x53,0xb2,0x8a,0x6b,0x65,0x92,0x43,0x1b,0x41, + 0x2b,0x02,0x47,0x2c,0x33,0x9f,0xf8,0x09,0xef,0x58,0x21,0xf0,0x7a,0x1a,0xbd,0xad, + 0x78,0xac,0x6a,0xd6,0xd6,0xd6,0x90,0x5b,0x25,0x85,0x9c,0x1c,0xac,0x6a,0xdb,0x8b, + 0x36,0x3a,0x93,0x8f,0x73,0xf5,0xcd,0x65,0xfd,0xa4,0x02,0x47,0x98,0x0f,0xbe,0x2b, + 0xe4,0x33,0x55,0x87,0x96,0x23,0xfd,0x99,0x2b,0x59,0x5e,0xca,0xca,0xfd,0x6d,0xe4, + 0x7d,0x56,0x5a,0xb1,0x10,0xa1,0x6a,0xf7,0xbd,0xdd,0xae,0xee,0xed,0x7d,0x2e,0xfb, + 0x96,0x0c,0xab,0x8e,0x49,0x06,0x93,0x7f,0x19,0xdf,0x54,0xde,0xfd,0x17,0x39,0x60, + 0x47,0xb0,0xa6,0xa6,0xa5,0x11,0x5c,0x96,0x23,0xf0,0xaf,0x29,0x53,0x76,0xbd,0x8f, + 0x51,0xbb,0x97,0x19,0x87,0xf7,0x89,0xfa,0x0a,0xf3,0xdf,0x8d,0x52,0x13,0xe1,0x48, + 0x86,0x33,0xfe,0x92,0x9c,0x1f,0xa1,0xae,0xc1,0xf5,0x28,0xb1,0xcb,0xf3,0xf5,0xae, + 0x73,0xc5,0xf6,0xfa,0x7f,0x88,0xf4,0xb7,0xb3,0xb9,0xbb,0x6b,0x60,0x19,0x5d,0x24, + 0x40,0x1b,0x04,0x1e,0xe0,0x91,0x9e,0x33,0xde,0xbd,0x7c,0xa9,0xac,0x3e,0x36,0x95, + 0x69,0xec,0x9a,0x6c,0xf3,0x73,0x1a,0x72,0xaf,0x84,0xab,0x4a,0x1b,0xb4,0xd2,0x3b, + 0x2f,0xd8,0x4f,0x55,0xb6,0xd1,0xe6,0xf1,0xc4,0xd2,0xdb,0x69,0x57,0x77,0x2b,0x6f, + 0x6a,0xd0,0xc1,0xab,0xc5,0xbe,0x19,0x70,0x66,0x05,0x33,0x91,0xb4,0x9d,0xc3,0x07, + 0xd4,0x01,0x5d,0x4d,0xef,0x8b,0xa6,0x17,0x09,0x14,0xd7,0x36,0xbe,0x1b,0x8a,0x23, + 0xb7,0xca,0x8a,0xec,0xc6,0xbf,0x2e,0x47,0xb9,0x03,0x8e,0xe2,0xbe,0x6e,0x83,0x4e, + 0xf0,0xb6,0x86,0x92,0x0b,0x9f,0x10,0xcf,0xf3,0x0c,0x3a,0xa5,0xda,0x40,0x18,0x0e, + 0x80,0xe0,0x13,0xfa,0xd5,0x4b,0x9f,0x13,0xfc,0x38,0xb3,0x3f,0x38,0x4b,0xc3,0xe9, + 0x71,0x73,0x3d,0xc6,0x7f,0xf1,0xec,0x7e,0x95,0xfa,0xec,0xb3,0x8a,0x52,0x7f,0xba, + 0xa5,0x39,0x7a,0x44,0xfc,0xa1,0x64,0x75,0xe2,0xbf,0x7d,0x52,0x11,0xf5,0x91,0xf4, + 0x8e,0xb1,0xf1,0x5b,0x4a,0xd1,0xed,0x8c,0x57,0x7e,0x29,0xb5,0xb9,0x19,0x0c,0xae, + 0x97,0x9e,0x60,0x5c,0x0c,0x0c,0x82,0x07,0x38,0xf5,0xae,0x56,0xdf,0xc6,0x56,0x5e, + 0x39,0xf8,0x85,0xa5,0xb6,0x8f,0x34,0xf7,0xf1,0xaa,0x30,0x91,0xb6,0x8d,0xa1,0x88, + 0x6f,0xe2,0x51,0x8c,0x72,0x39,0x38,0xea,0x78,0xe2,0xbc,0x40,0xfc,0x5b,0xf0,0xbe, + 0x9f,0x35,0xb3,0x69,0x1a,0x0d,0xb9,0x68,0xdf,0x7f,0xfa,0x25,0x84,0x61,0x88,0xc7, + 0x4c,0x91,0x93,0x93,0x8e,0xb5,0xe8,0x5f,0x0e,0x7e,0x23,0x6b,0x5e,0x3a,0xd7,0x16, + 0xd6,0xeb,0x4a,0xd4,0xf4,0xdd,0x2b,0x6e,0x56,0x56,0x38,0x52,0x7d,0x0a,0xfa,0x7d, + 0x01,0xae,0xca,0x78,0x95,0x3a,0x5e,0xd2,0xa4,0x1c,0x3d,0x77,0x39,0x27,0x80,0xa8, + 0xab,0x2a,0x58,0x77,0xed,0x3c,0xe3,0xb1,0xec,0xd0,0xdb,0xb3,0xdb,0x4a,0xc6,0xe6, + 0x56,0xc6,0xe3,0xbc,0x60,0xee,0x19,0x27,0xfc,0x91,0x57,0xe7,0x6b,0xe6,0x4b,0x69, + 0x16,0xea,0x71,0x19,0x38,0x65,0xc8,0xc1,0xc8,0xf5,0xe6,0xa8,0x4f,0x12,0x4d,0x6a, + 0x60,0x0c,0xdb,0x71,0x8d,0xdd,0x4d,0x4a,0xb7,0x7b,0xe3,0x89,0x64,0xca,0x88,0xdb, + 0x24,0xa9,0x03,0x3e,0x84,0x72,0x7d,0xaa,0xb5,0x6a,0xe8,0xe5,0xb7,0x2b,0xe5,0x7d, + 0x07,0xc7,0x64,0x64,0xb8,0x91,0x24,0x41,0x33,0xe4,0x14,0x67,0x73,0x9c,0x7e,0x43, + 0xb8,0xed,0x57,0x63,0xba,0x9e,0x2b,0x2b,0x79,0x48,0x2f,0x2c,0x67,0x12,0x21,0xc8, + 0x18,0xe8,0xd8,0x1d,0x6a,0xb7,0xf6,0xa4,0x52,0x5d,0xa4,0x8c,0xcc,0x00,0x42,0xa7, + 0x7b,0x0e,0x79,0x1f,0x9f,0xe1,0x42,0xea,0x98,0xbb,0xbb,0x58,0xe5,0x18,0x65,0x56, + 0xc2,0xe1,0xb1,0xc6,0x0f,0x1f,0x80,0xa4,0xe4,0xf6,0xb0,0x24,0x93,0x26,0xb8,0xb9, + 0xfb,0x4c,0xd2,0x43,0x73,0x67,0x0b,0xac,0xa3,0x29,0xe7,0x44,0x1b,0xea,0x06,0x33, + 0x9f,0xc6,0xb3,0x8f,0x87,0xf4,0x8b,0xbc,0x49,0x36,0x93,0x6b,0x0b,0xc6,0x70,0xc1, + 0x14,0xa9,0x61,0xeb,0xc6,0x07,0x23,0xf5,0xa9,0x6d,0x25,0xcc,0x0d,0x17,0x9a,0xcd, + 0xe5,0x1c,0x29,0xc1,0xe9,0xd4,0x1a,0x63,0xea,0x8b,0x2c,0x26,0x42,0x76,0x3a,0x9c, + 0x3a,0xb6,0x7a,0xf7,0xc5,0x54,0x59,0x2f,0xb9,0x9d,0x71,0xa1,0xe8,0xb0,0xba,0x3c, + 0x09,0x71,0x6e,0x8f,0xc2,0xb4,0x17,0x2c,0x31,0x9f,0xab,0x10,0x3f,0x2a,0x7d,0xa5, + 0xb2,0xa1,0x61,0x6f,0xad,0x6a,0x68,0xf8,0xc8,0x8e,0x47,0x12,0x60,0x7e,0x55,0x65, + 0x6f,0x23,0x7d,0xb2,0x2b,0x16,0x56,0x38,0x23,0x04,0x11,0xef,0x4f,0x69,0xc7,0x75, + 0x67,0xc9,0x3b,0x5f,0xa6,0xdf,0x6f,0x7f,0xfe,0xb5,0x5d,0xd9,0x9b,0xdf,0x42,0x2c, + 0xeb,0x90,0x80,0x63,0xd7,0xbc,0xe5,0xec,0x2e,0xac,0xc0,0x3f,0x89,0xa9,0xf1,0xe2, + 0x13,0xfe,0xac,0xe8,0xf3,0x0f,0xef,0x15,0x65,0x24,0xfd,0x01,0xa8,0xcc,0xca,0xea, + 0xc4,0xc5,0xb9,0xc7,0x07,0x27,0x19,0x1f,0x43,0x52,0x5a,0x49,0x1b,0x40,0xa4,0x65, + 0x73,0xc9,0x56,0xe4,0xaf,0xb7,0x34,0x0b,0x7d,0x8c,0x5d,0x07,0xc6,0x5a,0x0c,0x5a, + 0x03,0xe9,0x92,0xc4,0xd1,0xdd,0x16,0x2e,0x1e,0x51,0x93,0xbd,0xb1,0x92,0x72,0x4f, + 0x7f,0x4e,0xc2,0xb0,0x6f,0xfc,0x4d,0x71,0x65,0xa8,0x5b,0xc9,0x1d,0xda,0x6a,0xb6, + 0xbb,0x72,0xc8,0x90,0xb2,0xa2,0x93,0x83,0x8e,0x9c,0xe3,0x1d,0x6b,0xcf,0x8f,0x83, + 0x7c,0x7d,0x1d,0xc4,0x73,0xff,0x00,0xc4,0x86,0x27,0x43,0x90,0xd2,0x6a,0xf0,0x3e, + 0x3f,0x00,0x5a,0xb7,0xa0,0xba,0xf8,0xa7,0x6b,0x65,0x25,0xb4,0x7e,0x2f,0xf0,0xfd, + 0x94,0x32,0x2e,0xd6,0x45,0x91,0x9f,0x8f,0x4f,0x96,0x0a,0xf4,0x23,0x4e,0x31,0xb9, + 0xca,0xe4,0xd9,0xea,0xbe,0x07,0xf1,0xf4,0xba,0x46,0x24,0xfb,0x26,0xe2,0x5c,0xb1, + 0x56,0x8d,0xb0,0x32,0x7a,0x03,0xc1,0x1d,0xba,0x1e,0xd5,0xea,0x1e,0x1c,0xf8,0xaf, + 0x69,0x1e,0xa3,0x09,0xb8,0x8d,0x5a,0x29,0x57,0xc9,0x91,0x5d,0xfe,0x54,0xdc,0xa5, + 0x77,0x64,0x63,0x07,0x24,0x72,0x73,0xd4,0xd7,0xc4,0xcc,0xfe,0x36,0xd4,0x2f,0x2f, + 0x2d,0x67,0xf1,0xac,0x0a,0xd6,0x72,0xf9,0x4c,0xd6,0xd1,0x4a,0x51,0x89,0x50,0xd9, + 0x5f,0xbb,0xd9,0x87,0x50,0x29,0xcf,0xe1,0x8d,0x4a,0xf5,0xcb,0xea,0x1e,0x33,0xbc, + 0xb8,0x73,0xc9,0x22,0x12,0x7f,0xf4,0x39,0x0d,0x78,0x35,0xf3,0x1c,0x0e,0x1e,0xaf, + 0xef,0x65,0xef,0x47,0xc9,0xff,0x00,0x91,0xef,0xd0,0xca,0xb1,0xd8,0x8a,0x49,0xd3, + 0x87,0xbb,0x2f,0x35,0xfe,0x67,0xdb,0xbf,0x1a,0x7c,0x77,0xaf,0xf8,0x66,0x25,0xb7, + 0xf0,0xe7,0x8b,0x6e,0x6e,0x34,0x6b,0xf8,0x44,0x97,0x36,0x6d,0x70,0x85,0xe2,0x72, + 0x58,0x32,0xba,0xf5,0x52,0x08,0xed,0xfe,0x04,0xfc,0x4b,0xfb,0x5a,0x78,0xde,0x4f, + 0x1f,0x78,0xab,0xc3,0x73,0xb3,0x46,0xd2,0xda,0xe9,0xd1,0x5b,0x4a,0x22,0x65,0x65, + 0x05,0x37,0xae,0x78,0xee,0x78,0x3c,0xf3,0xcd,0x44,0x7c,0x0d,0xa4,0x9c,0xb5,0xce, + 0xb7,0xa9,0x4a,0x4f,0x53,0xba,0x24,0xcf,0xfe,0x38,0x4d,0x52,0xbc,0xf0,0xa7,0x82, + 0x62,0x28,0xf7,0x72,0x4f,0x2b,0x20,0xe1,0xa6,0xbf,0x2b,0x8f,0xcb,0x15,0x8f,0xfa, + 0xc3,0x84,0x4f,0xdc,0x52,0x7e,0x8b,0xfc,0xce,0xa5,0xc3,0x58,0xe6,0xbd,0xfb,0x2f, + 0x56,0x79,0x33,0xc4,0x42,0x83,0xeb,0x5f,0x54,0x69,0x39,0x8b,0x45,0xd3,0xd4,0x82, + 0x3f,0xd1,0xe3,0xff,0x00,0xd0,0x45,0x79,0x28,0xb8,0xf8,0x75,0xa5,0x3a,0xb9,0xfb, + 0x24,0x8c,0xa4,0x10,0x26,0xbb,0x92,0x5e,0x7e,0x9b,0xb1,0xfa,0x56,0xbe,0xa5,0xf1, + 0xf3,0x41,0x90,0xaf,0x99,0x7c,0x24,0x28,0x36,0xa8,0x8a,0x23,0x80,0x3d,0xb0,0x2b, + 0xe6,0x73,0xea,0xd5,0x73,0x9f,0x66,0xb0,0xf4,0x65,0x68,0xdf,0x75,0xde,0xc7,0xd3, + 0xe4,0x78,0x5a,0x79,0x3f,0xb4,0x78,0x9a,0xd1,0xbc,0xad,0xb3,0xed,0x7f,0x4e,0xe7, + 0xa6,0xfd,0xa3,0x07,0xa9,0xfc,0xea,0x44,0xb9,0x38,0xeb,0x5e,0x2d,0x37,0xc7,0xfd, + 0x29,0x4f,0xee,0x61,0xbb,0x9f,0xd3,0x6c,0x78,0xcf,0xe6,0x6a,0xa3,0xfc,0x70,0xbf, + 0xb9,0x6c,0x58,0xf8,0x76,0xfe,0x7c,0xf4,0x3b,0x48,0xfe,0x40,0xd7,0xcc,0xc7,0x23, + 0xc7,0x4b,0x78,0x5b,0xd6,0xcb,0xf3,0x3e,0x9f,0xfb,0x5b,0x05,0x7b,0x2a,0x89,0xfa, + 0x5d,0xfe,0x57,0x3d,0xdb,0xed,0xa0,0x70,0x58,0x53,0x7f,0xb4,0x40,0xe8,0x46,0x07, + 0x6a,0xf0,0x91,0xf1,0x07,0xc7,0x17,0xe7,0x36,0xbe,0x18,0x78,0xb3,0xd0,0xca,0x4f, + 0xf5,0xc5,0x21,0xbd,0xf8,0x9f,0xa8,0x7d,0xdb,0x5b,0x3b,0x25,0x3f,0xde,0x23,0x23, + 0xf5,0x35,0xa4,0x72,0x0a,0xdf,0x6e,0x71,0x5e,0xb2,0x5f,0xa1,0xa2,0xc7,0x73,0x7f, + 0x0e,0x8c,0xe5,0xe9,0x09,0x7e,0xa9,0x1e,0xea,0x35,0x31,0xfd,0xe1,0xf8,0xd4,0x52, + 0xeb,0x09,0xb4,0xe6,0x45,0x1f,0x8d,0x78,0x69,0xf0,0xd7,0xc4,0x0b,0xe1,0xfe,0x93, + 0xe2,0x1b,0x7b,0x5c,0xf6,0x8c,0xff,0x00,0x80,0xa4,0x3f,0x0c,0x35,0x8b,0xac,0xfd, + 0xbb,0xc6,0x17,0x2c,0x0f,0x55,0x8f,0x77,0xff,0x00,0x15,0x5b,0x47,0x23,0xa6,0xbe, + 0x3a,0xeb,0xe4,0x9b,0xfd,0x0d,0x55,0x5c,0x6c,0xfe,0x0c,0x24,0xbe,0x6e,0x2b,0xf3, + 0x67,0xb3,0x49,0xe2,0x3b,0x68,0x3e,0xf4,0xe8,0xb8,0xf5,0x22,0xb3,0x6e,0xbe,0x22, + 0xe8,0xb6,0x87,0xf7,0xda,0x9d,0xb4,0x78,0xfe,0xf4,0xab,0xfe,0x35,0xe5,0x6b,0xf0, + 0x5f,0x4a,0x6e,0x6e,0xb5,0x8b,0xeb,0x93,0xdf,0x2c,0x06,0x7f,0x4a,0xbf,0x6b,0xf0, + 0x87,0xc2,0x90,0xf2,0xd6,0xf3,0x5c,0x11,0xde,0x59,0x88,0xfe,0x55,0xd0,0xb2,0xac, + 0x0c,0x7e,0x2a,0xad,0xfa,0x2f,0xf3,0x65,0x2a,0x39,0xac,0xf6,0xa3,0x18,0xfa,0xcf, + 0xfc,0x93,0x3a,0xdb,0xbf,0x8d,0x3e,0x1a,0xb6,0xc9,0x6d,0x56,0x27,0x23,0xb4,0x79, + 0x6f,0xe5,0x58,0x57,0xbf,0xb4,0x1f,0x87,0xa3,0xf9,0x63,0x69,0xe7,0x3d,0xbc,0xb8, + 0x88,0xfe,0x78,0xa7,0xdb,0xf8,0x1b,0xc2,0xb6,0x6c,0x36,0xe9,0x36,0xa4,0x8e,0xf2, + 0x02,0xf5,0xa1,0x05,0x96,0x93,0x68,0x3f,0x71,0x61,0x6b,0x11,0x1d,0xd2,0x11,0x5a, + 0x47,0x05,0x96,0xc3,0xec,0xca,0x5f,0x34,0xbf,0x43,0x6f,0xa8,0x66,0xb2,0xd1,0xd4, + 0xa7,0x1f,0x45,0x27,0xfa,0xa3,0x9b,0x93,0xe3,0xe8,0x9b,0xe5,0xb2,0xd1,0xaf,0xae, + 0x4f,0x6c,0x20,0xe7,0xf2,0xcd,0x47,0xff,0x00,0x0b,0x63,0xc5,0xd7,0xe0,0x8b,0x3f, + 0x09,0xdc,0x80,0x7a,0x19,0x4b,0x0f,0xe8,0x2b,0xb1,0xfe,0xd3,0xb7,0x80,0x64,0x61, + 0x00,0xf4,0x55,0x5a,0x61,0xd6,0xbc,0xd5,0xcc,0x6e,0x4a,0xf4,0xfb,0xd9,0xad,0xd5, + 0x3c,0x0c,0x7e,0x1c,0x3f,0xde,0xdf,0xfc,0x02,0xd6,0x4d,0x8a,0x93,0xb4,0xf1,0x6f, + 0xe5,0x14,0xbf,0x3b,0x9c,0x77,0xf6,0xef,0xc4,0xdd,0x43,0x1e,0x5e,0x93,0x6b,0x66, + 0x0f,0x79,0x18,0x71,0xff,0x00,0x8f,0x52,0x9d,0x23,0xe2,0x4d,0xf0,0xc4,0xfa,0xd5, + 0x95,0x92,0x1e,0xc9,0x8c,0x8f,0xfc,0x76,0xba,0x96,0xbc,0x95,0xff,0x00,0x8d,0x89, + 0xa6,0x6f,0x90,0x8e,0x49,0x35,0xa2,0xaf,0x08,0xff,0x00,0x0e,0x8c,0x17,0xca,0xff, + 0x00,0x99,0xd3,0x1e,0x1f,0xa3,0x6f,0xde,0xd7,0xa9,0x2f,0xfb,0x7a,0xdf,0x92,0x47, + 0x2a,0xff,0x00,0x0e,0xfc,0x43,0x7b,0x9f,0xb7,0x78,0xd2,0x65,0x07,0xa8,0x87,0x70, + 0xfe,0xa2,0x9b,0x1f,0xc1,0xfd,0x36,0x55,0x22,0xf7,0x5b,0xd4,0x2f,0x58,0x9e,0x79, + 0x1c,0xfe,0x79,0xae,0xaf,0x73,0x67,0xd3,0xf1,0xa8,0xa6,0x95,0xd1,0x0e,0x08,0x0d, + 0x8c,0x02,0x79,0xc5,0x6c,0xb1,0x95,0xd6,0x90,0x69,0x7a,0x24,0xbf,0x42,0xbf,0xb0, + 0x32,0xd4,0xaf,0x3a,0x6e,0x5e,0xb2,0x93,0xfc,0xd9,0x91,0x6d,0xf0,0x87,0xc2,0xb6, + 0xd8,0xdd,0x69,0x71,0x70,0xdf,0xf4,0xd6,0x62,0x33,0xf9,0x56,0xbd,0xaf,0x83,0x3c, + 0x3b,0x62,0x33,0x16,0x89,0x67,0xc7,0x19,0x93,0xe7,0x35,0x8f,0xad,0xde,0x5d,0x59, + 0x69,0xcf,0x22,0x5c,0xbf,0x9a,0x48,0x55,0xc2,0x80,0x07,0x35,0xca,0x36,0xa7,0xa8, + 0x4f,0x9f,0x32,0xf6,0x76,0xff,0x00,0x75,0xf6,0xff,0x00,0x2c,0x57,0xa7,0x87,0xc3, + 0xe3,0x31,0xb1,0xe7,0xf6,0x9a,0x7a,0xb3,0xe7,0x33,0x0c,0xc3,0x26,0xc8,0xea,0xaa, + 0x3f,0x56,0x4e,0x56,0xbe,0x91,0x8f,0xe6,0xfd,0x0f,0x50,0x6b,0xab,0x6d,0x2e,0xdd, + 0x8d,0xbd,0xbd,0xad,0xa0,0x41,0x91,0xe5,0xc4,0xab,0xd3,0xde,0xa7,0xff,0x00,0x84, + 0xd2,0x04,0x00,0x1b,0xa6,0x9d,0xc7,0xf0,0xa1,0x2f,0xf9,0x81,0x5e,0x69,0x79,0xbc, + 0xf8,0x5b,0x73,0xe5,0xe5,0x24,0xe2,0x46,0xe5,0x88,0xdd,0xeb,0x58,0x6b,0xab,0x5e, + 0xcd,0xb6,0x25,0xb8,0x91,0xb1,0xc0,0x54,0xef,0xf9,0x56,0xd8,0x4c,0xb1,0x56,0xe6, + 0x75,0x27,0xf0,0xbb,0x18,0x66,0xdc,0x4d,0x2c,0x1a,0xa5,0x1c,0x3d,0x2f,0x8e,0x2a, + 0x5d,0xad,0x7f,0x24,0x8f,0xb3,0x7c,0x1d,0xa8,0xae,0xbd,0xa4,0x42,0xd1,0x16,0x92, + 0x68,0xa2,0x43,0x32,0x9e,0x4a,0x96,0x07,0x19,0xfc,0x8d,0x6c,0x32,0x6d,0xe1,0xc1, + 0x07,0xe9,0x5e,0x4b,0xf0,0x12,0xde,0xfb,0xc3,0x7a,0x5d,0xe5,0xc6,0xa3,0x04,0xb1, + 0x7d,0xac,0xc6,0xd1,0x16,0x3f,0x3e,0xd0,0x1b,0x9f,0x6f,0xbd,0x5e,0xc7,0x6b,0xe2, + 0xf8,0x6e,0x00,0x5f,0x39,0xb6,0x8e,0x71,0x32,0x2b,0x83,0xff,0x00,0x7d,0x03,0x5e, + 0xeb,0x5c,0x9e,0xea,0xd5,0x23,0xf2,0x59,0x4b,0xda,0xc9,0xce,0x5a,0x36,0xee,0x53, + 0xca,0x91,0x82,0x01,0x1e,0xf4,0xc6,0x85,0x0a,0xb0,0x3c,0xe7,0xae,0x79,0x15,0xba, + 0x2f,0x2c,0x6f,0x4f,0xef,0x2d,0x2c,0xa5,0x27,0xf8,0xa0,0x66,0x89,0x87,0xe4,0x58, + 0x7e,0x82,0x9a,0x74,0xbd,0x32,0x62,0x76,0xcf,0x73,0x6a,0xdd,0x70,0x55,0x65,0x1f, + 0xa1,0x07,0xf4,0xa5,0xce,0xba,0x91,0xec,0xd9,0x80,0x88,0xf0,0x42,0xc9,0x13,0xac, + 0x7c,0xe7,0x90,0x7f,0xa1,0x15,0x1a,0xda,0xb2,0x17,0xf2,0xa7,0x21,0x5c,0x96,0x70, + 0xe9,0xbb,0x9f,0x6f,0x98,0x7e,0xb9,0xad,0xbf,0xf8,0x46,0x5e,0x77,0x22,0xd2,0xfe, + 0xd2,0x77,0xff,0x00,0x9e,0x66,0x5f,0x2d,0xc7,0xe0,0xe0,0x55,0x5b,0xcd,0x07,0x52, + 0xb0,0x05,0xae,0x2d,0x65,0x8d,0x3a,0x09,0x0c,0x7f,0x29,0xfa,0x37,0x4a,0xae,0x64, + 0xfa,0x90,0xd3,0x46,0x51,0x8e,0x4b,0x7d,0xc1,0x97,0xcd,0x52,0x4e,0x1b,0x80,0x70, + 0x7d,0x6a,0x17,0xba,0x61,0x6d,0x24,0x72,0x83,0x19,0x04,0x85,0x25,0x8f,0x4e,0xdf, + 0x37,0x4a,0xb7,0x9e,0xbd,0x7f,0x0a,0x40,0x54,0x67,0x0a,0x0f,0x1d,0x4d,0x5d,0x91, + 0x0d,0xb2,0x0b,0x6b,0xff,0x00,0xb4,0x46,0x9b,0xa6,0x55,0x9a,0x3c,0x61,0x99,0x87, + 0x3c,0x7f,0x23,0x53,0x6c,0xb4,0xbc,0x26,0x46,0x84,0x33,0x67,0x69,0x20,0xe3,0x91, + 0x4d,0x9d,0x56,0xe0,0x2e,0xf0,0x18,0x81,0x8d,0xdd,0xea,0x15,0xb3,0x8c,0x67,0x85, + 0x14,0xec,0x49,0xf2,0xcb,0x6b,0x7f,0x13,0x65,0x3c,0x68,0xf6,0xf1,0x67,0xd4,0x0f, + 0xfe,0x2a,0x9a,0x1b,0xe2,0x7d,0xc8,0xe4,0xda,0xdb,0x03,0xdf,0x8f,0xfe,0xbd,0x75, + 0xa7,0xc4,0x12,0xb8,0x3b,0xee,0x01,0x19,0xf5,0xc5,0x56,0x93,0x5d,0x55,0x18,0x6b, + 0xb5,0xc7,0xbc,0x95,0xf2,0xcf,0x36,0xc4,0x3d,0x14,0x57,0xe3,0xfe,0x67,0xee,0x31, + 0xe0,0xdc,0xb6,0x3f,0x15,0x49,0x3f,0x9a,0xff,0x00,0xe4,0x4e,0x46,0xd3,0xc2,0xbe, + 0x39,0x79,0xee,0x90,0xeb,0x10,0x5b,0x48,0xed,0xe6,0xc8,0x47,0x25,0x89,0xe3,0x3d, + 0x3f,0xd9,0xfd,0x2a,0x63,0xf0,0xdb,0xc4,0x97,0x07,0x17,0x5e,0x2d,0x65,0xcf,0xf7, + 0x09,0xff,0x00,0x11,0x5b,0x11,0xeb,0x90,0x35,0xf4,0x85,0x6e,0x15,0xc7,0x96,0x01, + 0xda,0x73,0xdc,0xd2,0x5e,0x78,0x9e,0xce,0xc7,0x06,0x69,0x1d,0x77,0x74,0x1e,0x5b, + 0x1c,0xfe,0x95,0xcd,0x2c,0x4e,0x22,0xa4,0xfd,0xd8,0x2b,0xbf,0xee,0xab,0xfe,0x47, + 0x6c,0x32,0x3c,0xab,0x0f,0x47,0x9a,0xa4,0xdf,0x2a,0xef,0x36,0x97,0xe0,0xd2,0x32, + 0x47,0xc1,0xb8,0xe6,0xe6,0xf7,0xc4,0xd7,0x12,0x9e,0xe0,0x7f,0xf5,0xc9,0xab,0x30, + 0x7c,0x19,0xf0,0xd2,0x9f,0xdf,0x5d,0xde,0x5c,0x1e,0xe7,0x76,0x07,0xf2,0xa4,0x97, + 0xc7,0xb6,0x7f,0xc1,0x1c,0xcf,0xfe,0xea,0x01,0xfc,0xcd,0x40,0xbe,0x3d,0x12,0x4e, + 0x89,0x1d,0xb4,0x88,0x1d,0x82,0xee,0x77,0x1c,0x67,0xe9,0x5b,0xff,0x00,0xc2,0x93, + 0x57,0xb3,0x4b,0xd2,0xc7,0x34,0x63,0xc3,0x10,0x92,0x87,0xb9,0x26,0xf4,0xdd,0xcb, + 0xf5,0x66,0xcc,0x1f,0x0c,0xfc,0x1f,0x6a,0x3f,0xe3,0xc9,0xa6,0x23,0xbc,0x92,0x13, + 0x9f,0xd6,0xaf,0x5b,0xf8,0x77,0xc3,0x56,0x98,0xf2,0xb4,0x5b,0x4e,0x38,0xc9,0x8c, + 0x13,0xfd,0x6b,0x38,0xdc,0x5e,0x38,0xe1,0xa2,0x4f,0xc0,0x9a,0x9e,0xdd,0xe5,0x0b, + 0xfb,0xd6,0x0e,0xc7,0xb8,0x18,0xaf,0x32,0x75,0xeb,0x4b,0xe2,0x9b,0xfb,0xcf,0xaa, + 0xa3,0x80,0xc1,0x53,0x7f,0xbb,0xa1,0x15,0xff,0x00,0x6e,0xa3,0x6a,0x29,0xec,0xad, + 0xb0,0xb0,0x59,0x5b,0xc4,0x07,0x4d,0xb1,0x01,0x53,0xa6,0xb5,0xb4,0x90,0x06,0x07, + 0xa0,0x00,0x56,0x19,0x90,0x11,0xd3,0xf1,0xa6,0x96,0xe3,0xbd,0x73,0x36,0xde,0xec, + 0xf4,0xa3,0x68,0xe8,0x95,0x8d,0xc9,0x35,0xa6,0x1f,0xc2,0x3f,0xe0,0x4d,0x9a,0x84, + 0xea,0xee,0xc7,0xf8,0x2b,0x27,0x07,0xd7,0x8a,0x3a,0x8e,0x2a,0x6c,0x3b,0x9a,0x33, + 0xea,0xb2,0x47,0x1b,0x48,0xd2,0x2a,0xa0,0x19,0x24,0x0e,0x95,0x4b,0xfb,0x4e,0xee, + 0x6f,0xb9,0x6b,0x21,0xcf,0x42,0xec,0xab,0xfa,0x75,0xaa,0xb7,0x64,0x88,0x90,0x03, + 0xff,0x00,0x2d,0x13,0xff,0x00,0x42,0x15,0x6e,0x12,0x4c,0x8a,0x3d,0xc5,0x69,0x08, + 0xc7,0x4d,0x37,0x30,0xab,0x39,0x24,0xf9,0x5e,0xc8,0xd0,0xd0,0x34,0x4f,0x10,0xf8, + 0xaa,0xf5,0xad,0xb4,0xbb,0x24,0xb9,0x99,0x53,0xcc,0x2a,0x8c,0xcf,0x85,0xc8,0x19, + 0xe8,0x06,0x39,0x1d,0xfb,0xd7,0x5f,0x6d,0xf0,0x1f,0xc7,0xb7,0x40,0x34,0x90,0x5b, + 0xda,0x27,0x72,0xec,0x99,0x1f,0xf8,0xf9,0xfe,0x54,0x78,0x10,0xdd,0xe8,0xba,0x7c, + 0xd7,0x51,0xca,0x21,0x37,0x56,0x11,0xc9,0x19,0x17,0x8d,0x6b,0x94,0xfb,0x4a,0xa1, + 0x06,0x45,0xe5,0x32,0x51,0xba,0x75,0x1f,0x5a,0xf6,0x4d,0x36,0x3b,0x8d,0x56,0xd7, + 0xc4,0xf1,0xdc,0x5d,0xcf,0x24,0x4b,0x2d,0xbb,0xaf,0xdb,0x2d,0x5a,0x61,0x24,0x4b, + 0xb5,0xd9,0x4c,0x6a,0x72,0x41,0x98,0x5c,0xa3,0x2f,0x5c,0x0c,0x74,0x02,0xbf,0x47, + 0xc6,0x70,0xf6,0x17,0x05,0x57,0xd9,0xa6,0xde,0x88,0xfe,0x7c,0xa1,0xc7,0x59,0xa6, + 0x3a,0x97,0x3f,0xbb,0x1d,0x5e,0xc9,0xff,0x00,0x99,0xe4,0xd1,0x7c,0x03,0xd4,0x51, + 0xe4,0x5d,0x4b,0xc5,0xba,0x55,0x9b,0x44,0xca,0xb2,0x47,0xf6,0xa5,0xdc,0x8c,0xdf, + 0x74,0x11,0xb4,0x60,0x9e,0xc3,0x3c,0xd4,0xba,0xd7,0xc0,0xed,0x1b,0x45,0xd1,0xaf, + 0xaf,0x6e,0x3c,0x58,0xb7,0x77,0x10,0x42,0xd2,0x24,0x31,0xa3,0xb2,0xbb,0x7c,0xb8, + 0x04,0x87,0xe8,0x4c,0x91,0xf6,0xfe,0x21,0x5e,0x8f,0xa3,0xf8,0x7f,0x55,0xb2,0x82, + 0xda,0x58,0x2d,0xb5,0x15,0xd4,0x22,0x8a,0xc7,0x12,0x18,0xa0,0x45,0x8e,0x65,0xb6, + 0x78,0xca,0xe5,0x86,0x5a,0x11,0xbc,0x96,0x1c,0xb0,0x67,0x38,0xe7,0x38,0xe4,0xf5, + 0x8f,0x0f,0x6b,0x3a,0x42,0x8b,0xbd,0x6f,0x54,0xd3,0x61,0xb1,0xb4,0xd4,0x2e,0xee, + 0x27,0xb3,0x69,0x63,0x2f,0x73,0x67,0xb6,0xdf,0xc8,0x88,0x29,0xea,0xd9,0x88,0xe4, + 0x77,0xc0,0xf5,0xa5,0x47,0x2e,0xc2,0xc6,0x71,0x4e,0x3d,0x51,0xc7,0x5f,0x88,0xf3, + 0x5a,0xb0,0x7f,0xbe,0x7f,0x24,0xbf,0xc8,0xf1,0x7d,0x43,0x48,0xb7,0xd3,0xf5,0x07, + 0x81,0xa0,0xb7,0x62,0xa8,0xad,0xb9,0x57,0x76,0x49,0xcf,0x73,0x9f,0x4a,0xad,0x0a, + 0x2d,0xbd,0xd4,0xa6,0x24,0x08,0x19,0x14,0x90,0xa3,0x03,0x39,0x3c,0xd6,0xdf,0x89, + 0xef,0xf4,0xcd,0x4b,0x5c,0x79,0xb4,0x8b,0x63,0x6b,0x65,0xe4,0xa2,0x84,0x2d,0x9c, + 0xb6,0x58,0x93,0xd4,0xfa,0x8e,0x33,0x58,0x73,0xcc,0xb0,0xdc,0x1c,0x9c,0x7c,0xa3, + 0xf9,0x9a,0xf9,0x3c,0xe2,0x94,0x69,0xe3,0xaa,0xd3,0xa3,0xf0,0xab,0x7e,0x4b,0xd7, + 0xaf,0x99,0xfb,0x47,0x0d,0x56,0xa9,0x57,0x28,0xa1,0x5f,0x13,0x7e,0x77,0x7b,0xb7, + 0xbe,0xee,0xdb,0xdb,0xa1,0x70,0x4a,0xde,0xb8,0xa0,0x31,0xcf,0x5f,0xd6,0xb3,0x9f, + 0x51,0x8d,0x39,0xde,0x38,0xf7,0xa8,0x24,0xd6,0xe0,0x8f,0xfe,0x5a,0x0f,0xa5,0x78, + 0xf1,0xa3,0x37,0xb2,0x3e,0x8e,0x78,0xaa,0x50,0xd6,0x52,0x46,0xb0,0x73,0xd2,0x9c, + 0x85,0x09,0x1b,0xd8,0x85,0xee,0x57,0x9a,0xc9,0x82,0xfa,0xe2,0xf0,0xff,0x00,0xa3, + 0x5a,0x5c,0x5c,0x67,0xa7,0x95,0x13,0x36,0x7f,0x21,0x5b,0x3a,0x77,0x83,0xfc,0x53, + 0xad,0x91,0xf6,0x4d,0x1a,0x52,0x0f,0x46,0x95,0xd2,0x3f,0xfd,0x08,0x83,0x5d,0x31, + 0xc2,0x55,0x7a,0xf2,0x9e,0x55,0x6c,0xeb,0x05,0x4b,0x49,0x55,0x5f,0x79,0x5e,0xfe, + 0xda,0xca,0xf6,0xdd,0xa1,0x91,0xa6,0x21,0x88,0x3b,0x97,0x00,0x8c,0x1c,0xfb,0xd5, + 0x08,0xb4,0x6d,0x32,0x2e,0xb0,0x33,0xf7,0xcc,0x92,0x93,0xfc,0xb1,0x5d,0xbd,0x9f, + 0xc0,0xff,0x00,0x16,0x5e,0x73,0x71,0x3d,0x8d,0x9a,0xf7,0x0d,0x2b,0x3b,0x7e,0x40, + 0x63,0xf5,0xad,0x41,0xfb,0x3f,0x5d,0xf9,0x39,0x6d,0x74,0x49,0x20,0x23,0x31,0xa4, + 0x3b,0x01,0xf5,0xf9,0x89,0x3f,0x9e,0x3f,0x0a,0xf4,0x68,0xd1,0xc4,0x41,0x72,0x42, + 0x76,0x5e,0xa7,0xc9,0xe3,0x33,0x7c,0x9a,0xb5,0x4f,0x6b,0x5a,0x0a,0x72,0x5a,0x6d, + 0x73,0xce,0x2f,0x26,0x81,0xed,0x7c,0x83,0x1c,0x42,0x2f,0x95,0x76,0x05,0x18,0xc6, + 0x69,0x74,0x3d,0x1e,0x3b,0xab,0xf8,0xed,0xec,0x6d,0x4c,0xb2,0x33,0x00,0xa9,0x12, + 0x57,0xa4,0x5a,0xfc,0x28,0xb5,0xd0,0xae,0x0c,0x97,0xba,0x64,0x9a,0x9a,0xa9,0xc8, + 0xdf,0x3b,0x15,0x1f,0x5d,0x83,0x2d,0xff,0x00,0x7c,0x57,0x73,0xa1,0x6b,0x1a,0x4e, + 0x98,0xa2,0xda,0xdf,0x4b,0x5b,0x06,0xc7,0x29,0x04,0x3f,0x33,0x7b,0xed,0x5c,0xb6, + 0x3d,0xdb,0x15,0xdb,0x4f,0x03,0x28,0xaf,0x7a,0x57,0x3c,0x2c,0x5f,0x13,0xd1,0x9b, + 0xfd,0xcd,0x2d,0x76,0x4d,0xf4,0x2a,0x41,0x63,0x25,0x8d,0xad,0xbc,0x0e,0x36,0x48, + 0xaa,0x17,0x95,0xc6,0x70,0x28,0x8e,0x4d,0x8c,0x41,0x7d,0xc3,0xb0,0x3c,0x1f,0xe5, + 0x5d,0x4c,0x1a,0xa5,0x95,0xfe,0xe0,0x8c,0x8e,0x57,0xa8,0xdc,0x08,0x5f,0xae,0x38, + 0x15,0x24,0x9a,0x7d,0x94,0xeb,0x81,0x02,0x85,0x61,0xc1,0x43,0x8e,0x7f,0x0e,0x2b, + 0xd5,0x55,0x12,0xd1,0xa3,0xf3,0xf9,0xc1,0xca,0x4e,0x57,0x39,0x90,0xcf,0xb7,0x72, + 0x95,0xe3,0xee,0xe0,0xf2,0x4d,0x58,0x83,0x5f,0xbc,0xb7,0x5c,0x89,0x5c,0x6d,0xc6, + 0x72,0x43,0x63,0xfa,0xd6,0x8c,0x9e,0x1c,0x0e,0x41,0x4c,0xa6,0x09,0x20,0x85,0xc7, + 0xd6,0xa9,0xdd,0x68,0x17,0x71,0xc6,0xdb,0x17,0x72,0xf7,0xe0,0x1a,0xd1,0x4a,0x32, + 0x33,0x71,0x94,0x4b,0x09,0xe2,0x7b,0xa6,0x53,0xe6,0x45,0x1c,0xab,0x8c,0xe0,0x13, + 0x9f,0xca,0xae,0xd9,0xf8,0x98,0xdb,0xb6,0xf8,0x9a,0x7b,0x4e,0x39,0xf2,0x9c,0xa8, + 0xfd,0x0f,0xf4,0xae,0x5a,0x6d,0x3e,0x7b,0x60,0x43,0x2b,0x82,0xb8,0xc7,0xca,0x47, + 0xd6,0xa2,0xdc,0x54,0x85,0x65,0x27,0x6f,0xf7,0xc6,0x6a,0x9d,0x38,0xb1,0x29,0xc9, + 0x1d,0xcb,0x6b,0xa2,0xef,0x26,0x57,0x86,0xe1,0xcf,0x1f,0xbe,0x8c,0x6e,0xfc,0xc6, + 0x0f,0xeb,0x4d,0xdf,0x6b,0x20,0xc3,0x44,0xd1,0x93,0xde,0x27,0xdd,0xfa,0x1f,0xf1, + 0xae,0x20,0x5c,0x79,0x6d,0x90,0xcc,0x3e,0x99,0xe4,0x53,0x97,0x51,0x92,0x16,0x20, + 0x12,0xa0,0xf5,0xc9,0xa1,0x53,0x69,0x68,0x3f,0x68,0x9e,0xe8,0xeb,0xe4,0xb3,0x89, + 0x89,0xf2,0xee,0x00,0xf6,0x91,0x0a,0xfe,0xa3,0x22,0x98,0xba,0x6b,0xe0,0xed,0x28, + 0xe3,0xd4,0x48,0xa7,0xfa,0xd6,0x02,0x6b,0x73,0x42,0x87,0x8d,0xf8,0x1d,0x4f,0x19, + 0xfc,0xaa,0x6f,0xed,0xb0,0xdd,0x63,0x52,0x7f,0xda,0x34,0xd4,0x64,0x85,0xee,0x33, + 0xe2,0xf7,0xf1,0x02,0xe7,0x29,0x6a,0xa3,0xea,0x6a,0x16,0xd7,0xa5,0x3f,0x76,0x24, + 0x5f,0xc0,0xd7,0x3a,0x97,0x52,0xc8,0xc0,0x16,0xfc,0x85,0x5c,0xb6,0x84,0xce,0xdf, + 0x34,0xae,0x3e,0x98,0xff,0x00,0x0a,0xed,0x72,0xa5,0x0f,0xb3,0xf8,0x22,0xa3,0x2c, + 0x4d,0x6d,0x1d,0x46,0xfd,0x5b,0x3a,0x9f,0x0a,0xea,0x73,0xcf,0xa9,0x32,0xb1,0x50, + 0xbb,0x79,0x0a,0x31,0x9a,0xb5,0xe2,0x90,0xcf,0xaa,0x2f,0x98,0xd8,0x43,0x1a,0xec, + 0xcf,0x43,0xd7,0x34,0xdf,0x05,0x69,0xf1,0x43,0xa8,0xce,0x4e,0xe9,0x08,0x8d,0x48, + 0xde,0x7a,0x64,0x9f,0x4f,0xa0,0xae,0xce,0xe1,0xa3,0x9d,0x55,0x64,0xb7,0x81,0xc2, + 0xf2,0x03,0xc6,0x1b,0x1f,0x9d,0x7c,0xbe,0x23,0x19,0x1c,0x3e,0x3b,0xda,0xf2,0xdf, + 0x4b,0x1f,0xaa,0x65,0xd9,0x3d,0x5c,0x7e,0x45,0xf5,0x47,0x52,0xcd,0xca,0xf7,0xdf, + 0x66,0x79,0xa9,0x28,0x0e,0x03,0x06,0x3e,0xd5,0xa7,0xa3,0x68,0xd7,0x3a,0x9d,0xe4, + 0x29,0x1c,0x12,0x79,0x61,0x83,0x33,0x94,0x21,0x40,0x1c,0x9e,0x6b,0xb3,0x49,0xda, + 0x3c,0x88,0xc2,0xc6,0x07,0x40,0x8a,0x17,0xf9,0x52,0x34,0xd2,0x33,0x73,0x23,0x1f, + 0xa9,0xa5,0x5b,0x3a,0x72,0x83,0x8c,0x21,0x6b,0xf9,0x8b,0x07,0xc1,0x70,0xa3,0x56, + 0x35,0x2b,0x56,0xe6,0xe5,0x69,0xd9,0x2b,0x5e,0xde,0x77,0x2f,0x0d,0x3e,0x72,0x72, + 0x54,0x28,0xff,0x00,0x69,0x80,0xa2,0xe2,0x35,0x85,0xc2,0x87,0x0f,0xc7,0x25,0x4f, + 0x15,0x43,0xce,0x62,0x70,0x4e,0x78,0xcd,0x34,0xb9,0xcf,0xe3,0x5f,0x2f,0x6e,0xa7, + 0xea,0x1c,0xf6,0x2d,0xee,0x1f,0x85,0x26,0xf1,0xff,0x00,0xd6,0xac,0xe7,0xb8,0x7c, + 0xf5,0xef,0x8a,0xa7,0x35,0xec,0xaa,0x78,0x35,0x4a,0x9d,0xcc,0xe5,0x5d,0x47,0xa1, + 0xba,0x25,0xf5,0x3c,0x53,0x4d,0xca,0x01,0xf7,0xb8,0x15,0xca,0x5c,0xea,0xb7,0x0a, + 0x18,0x86,0x1c,0x7b,0x56,0x45,0xe6,0xbb,0x76,0xa3,0x21,0xc7,0x4c,0xf4,0xae,0xb8, + 0x61,0x1c,0xfa,0x9e,0x6d,0x6c,0xce,0x14,0x17,0x33,0x8b,0x3b,0xb9,0xaf,0x11,0xb6, + 0x2e,0xe0,0x3e,0x75,0xff,0x00,0xd0,0x85,0x59,0x3a,0x95,0xbc,0x0e,0x09,0x95,0x38, + 0x39,0xc6,0x6b,0xc5,0xf5,0x0f,0x13,0xdf,0xa9,0xe2,0x41,0xf2,0x9e,0x38,0xa9,0xb4, + 0x0d,0x52,0xe7,0x56,0xbd,0xf2,0x6e,0x24,0x25,0x5b,0xba,0xf0,0x47,0x15,0xe9,0x47, + 0x2a,0x93,0x49,0xf3,0x1f,0x25,0x5f,0x8b,0xe8,0xd3,0xe6,0x8f,0xb2,0x6e,0xfe,0x87, + 0xba,0xe8,0x3f,0x16,0xaf,0xbc,0x28,0xe8,0xd6,0x97,0xb0,0x96,0x8e,0xdf,0xec,0xc9, + 0xe6,0x40,0xae,0x11,0x37,0xef,0xe0,0x36,0x46,0x77,0x12,0x7f,0x1a,0xb9,0x77,0xf1, + 0xf3,0xc5,0xba,0xb6,0x42,0xeb,0x5a,0x84,0xa4,0x9e,0x96,0xa8,0xb1,0xff,0x00,0xe8, + 0x0a,0x2b,0xcb,0x34,0x29,0x7c,0xab,0x97,0x5d,0x88,0xdb,0x1b,0x01,0x99,0x41,0x35, + 0xe8,0x36,0x77,0xd2,0x85,0x00,0x60,0x0c,0x74,0x02,0xbd,0x7c,0x44,0xb1,0x35,0x65, + 0xcf,0x5a,0xb3,0x93,0xfb,0x8f,0x86,0xa5,0x98,0xe5,0xf4,0x23,0xcb,0x86,0xc1,0x41, + 0x2f,0x3d,0x7f,0x3b,0x89,0x26,0xb9,0xe2,0xff,0x00,0x10,0x1c,0x3a,0x6a,0x77,0x60, + 0xff,0x00,0xcf,0xe5,0xc3,0x63,0xff,0x00,0x1f,0x6a,0x7d,0xb7,0x82,0x7c,0x4b,0x77, + 0xf7,0x96,0xce,0xc4,0x1e,0x49,0x96,0x4c,0xe3,0xfe,0xf9,0x06,0xb4,0x21,0xbd,0x95, + 0x08,0xda,0xd8,0xfa,0x13,0x56,0xe4,0xd7,0x2f,0x0c,0x4d,0x19,0x93,0xe5,0x23,0xb8, + 0xae,0x2f,0xab,0xa9,0x3f,0x79,0xdf,0xd5,0xb3,0xa1,0x67,0xf8,0x98,0xaf,0xdd,0x46, + 0x30,0x5e,0x51,0x48,0xb5,0xa5,0xfc,0x18,0xbf,0xd4,0x5d,0x45,0xc7,0x89,0x20,0x89, + 0x48,0xe4,0x43,0x03,0x31,0xcf,0xa7,0x24,0x57,0x5b,0x61,0xfb,0x3a,0x68,0x0a,0xea, + 0xf7,0x7a,0xf5,0xed,0xcb,0x9c,0x65,0x32,0xa8,0xbf,0x4e,0x06,0x7f,0x5a,0xe7,0x74, + 0x4d,0x62,0xf0,0xe7,0x13,0xb2,0x14,0x1c,0x14,0x38,0x3d,0x2b,0xbb,0xd0,0x35,0x29, + 0xb5,0x16,0xf2,0xe7,0x21,0xf6,0x90,0x03,0x63,0xe6,0xed,0xce,0x6a,0x95,0x38,0x53, + 0x76,0xe5,0x47,0x1d,0x4c,0xd7,0x1d,0x5d,0x7b,0xd5,0x59,0xbb,0xa6,0x7c,0x09,0xf8, + 0x78,0x96,0xf9,0x3a,0x71,0x92,0x60,0x39,0x33,0xcf,0x23,0x83,0xf9,0xb6,0x3f,0x4a, + 0xb8,0x3e,0x0a,0xe9,0x96,0xb0,0x09,0x34,0x6b,0x6b,0x7b,0x66,0xcf,0x29,0x34,0x0b, + 0xc7,0xaf,0xcc,0xbf,0xd7,0xfa,0xd3,0x60,0xb9,0x9a,0xd7,0x25,0x24,0x6c,0xa1,0xc0, + 0xcf,0x7a,0xeb,0xf4,0x8d,0x42,0x4c,0x2b,0xed,0x5d,0xcb,0x8c,0x1c,0xb7,0x7f,0x6c, + 0xe2,0xba,0xa3,0x68,0xec,0x79,0x13,0xab,0x52,0xa7,0xc7,0x26,0xfe,0x67,0x9b,0xea, + 0xfe,0x06,0xd5,0x34,0x60,0xae,0xf6,0x8e,0xc0,0x74,0x92,0xd4,0x02,0x98,0xf5,0xc8, + 0xe4,0x63,0xe9,0x58,0x4e,0xb3,0xd9,0xb6,0x37,0x30,0x71,0xc8,0x51,0xc9,0x1e,0xbd, + 0x39,0xfd,0x2b,0xdc,0xad,0x7c,0x51,0x7f,0x23,0xc8,0xac,0xe8,0x55,0x72,0x06,0x50, + 0x67,0xf3,0xeb,0x5e,0x63,0xe2,0xbf,0x16,0xdd,0xea,0x4d,0x25,0xbc,0xb0,0x5a,0xaa, + 0x83,0xb4,0x3a,0x45,0x86,0xc0,0xc8,0xeb,0x9a,0xea,0x8b,0x91,0xc9,0x25,0x63,0x16, + 0x1f,0x10,0xea,0x16,0x64,0xa8,0xb8,0x38,0xe3,0x89,0x17,0x76,0x47,0xe3,0x5a,0x50, + 0x78,0xb5,0x9d,0x01,0x96,0x10,0xc3,0xf8,0x8a,0x13,0xd3,0xd7,0x1f,0xfd,0x7a,0xe6, + 0x1b,0xf7,0x93,0x85,0x63,0x90,0x40,0xfd,0x71,0x51,0xb1,0x31,0xca,0x81,0x4e,0x07, + 0x7f,0x7e,0x71,0x57,0xec,0xe1,0x2e,0x84,0x2a,0x93,0x8e,0x97,0x3b,0xb8,0x35,0xbb, + 0x4b,0x81,0xf2,0xc8,0x15,0xb3,0xfc,0x5c,0x53,0xae,0x6d,0xed,0x2f,0xd5,0x44,0xf0, + 0xc7,0x38,0x1c,0xe1,0x86,0x45,0x70,0xc4,0xe5,0x03,0x63,0x04,0x9c,0x12,0x3d,0xbf, + 0xfd,0x75,0x6e,0xda,0xea,0x68,0x89,0x09,0x2b,0x28,0x03,0x8c,0x1a,0x9f,0x63,0xfc, + 0xac,0xd1,0x57,0xfe,0x64,0x74,0x92,0x68,0xb1,0x3c,0xa1,0xe2,0xb8,0x78,0xd9,0x7a, + 0x47,0x32,0x2c,0xd1,0x8f,0x65,0x57,0x04,0x2f,0xd5,0x70,0x69,0x5a,0x3b,0x9b,0x45, + 0x24,0x5b,0x6e,0xc7,0x57,0xb3,0xb8,0x65,0x2d,0xee,0x56,0x5f,0x30,0x9f,0xa2,0xb2, + 0x0a,0xa9,0xa2,0x6a,0x53,0xdd,0xb8,0x49,0x48,0x6e,0xbc,0xe3,0x07,0xef,0x11,0x5b, + 0x79,0x21,0x41,0x0c,0x54,0xfb,0x56,0x4d,0xca,0x2e,0xcc,0xd1,0x59,0xab,0xa2,0x8c, + 0x7a,0xe3,0xae,0x04,0x97,0x49,0x01,0xf4,0xbd,0x85,0xa2,0xfc,0x01,0x1b,0xd0,0x7d, + 0x5a,0x45,0xad,0x08,0xf5,0x4b,0x85,0xb5,0x6b,0x96,0xb7,0x2f,0x68,0xbf,0xf2,0xf5, + 0x03,0x89,0xe0,0x1f,0x59,0x50,0x94,0xfc,0x37,0x1a,0x6a,0xa8,0x9e,0x25,0x2e,0x01, + 0x3c,0x8e,0x95,0x95,0x71,0xa0,0x5a,0x40,0xdf,0x6e,0xb7,0xf3,0x2c,0xef,0x07,0x22, + 0x7b,0x59,0x0c,0x52,0x0f,0xf8,0x12,0xe0,0xfe,0xb4,0x7b,0xad,0xda,0xc4,0xb7,0x25, + 0xd4,0xd6,0x17,0xd6,0xb7,0xb0,0xae,0x1d,0x5d,0x5f,0xd3,0xf8,0xbe,0x9e,0xbf,0x85, + 0x41,0x75,0xa7,0xdb,0xc9,0xfc,0x18,0x3d,0x8a,0x9c,0x57,0x19,0xad,0x78,0x8a,0xf7, + 0x4c,0x6f,0x32,0x46,0x5d,0x40,0xb7,0x56,0xba,0x5f,0xde,0x1f,0xac,0xc9,0xb6,0x53, + 0xf8,0xb9,0xad,0xbd,0x66,0x59,0x74,0x5f,0x0e,0xe9,0xda,0x8d,0xbc,0xac,0x5e,0xe5, + 0x41,0x30,0xbf,0x31,0xa7,0xd3,0xb9,0xeb,0xdc,0x9a,0xd1,0x41,0xc5,0xe8,0xc4,0xa4, + 0xa5,0xb9,0x3d,0xce,0x8b,0x0e,0xd2,0x53,0xe6,0x6c,0xf1,0xb8,0xd5,0x19,0x74,0x7f, + 0x2d,0x40,0x0a,0xdc,0x82,0x72,0xa7,0x35,0x6e,0xde,0xed,0x9d,0xe0,0x52,0x91,0xe6, + 0x48,0xcb,0xb3,0x05,0xc1,0xcd,0x69,0x32,0xed,0x4f,0x94,0x95,0xfa,0x55,0xf3,0x35, + 0xa0,0xb9,0x23,0x2d,0x51,0xc9,0x3d,0x8c,0xf1,0x11,0xb5,0x76,0x8c,0x71,0x9e,0xbf, + 0x4a,0x42,0xf2,0xa7,0x0c,0xc1,0x0f,0x70,0x40,0x15,0xd5,0x83,0xb8,0x00,0x40,0x35, + 0x5e,0x45,0x50,0xd9,0xda,0x0e,0x46,0x79,0xad,0x39,0xfb,0x90,0xe9,0xb5,0xd4,0xff, + 0xd9}; diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/st_peters.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/st_peters.h new file mode 100644 index 0000000..dffa105 --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/st_peters.h @@ -0,0 +1,1845 @@ +// +// st_peters +// +const uint8_t st_peters[] PROGMEM = { 0xff,0xd8,0xff,0xdb,0x00,0x43,0x00,0x04,0x03,0x03,0x04,0x03,0x03,0x04,0x04,0x03, + 0x04,0x05,0x04,0x04,0x05,0x06,0x0a,0x07,0x06,0x06,0x06,0x06,0x0d,0x09,0x0a,0x08, + 0x0a,0x0f,0x0d,0x10,0x10,0x0f,0x0d,0x0f,0x0e,0x11,0x13,0x18,0x14,0x11,0x12,0x17, + 0x12,0x0e,0x0f,0x15,0x1c,0x15,0x17,0x19,0x19,0x1b,0x1b,0x1b,0x10,0x14,0x1d,0x1f, + 0x1d,0x1a,0x1f,0x18,0x1a,0x1b,0x1a,0xff,0xdb,0x00,0x43,0x01,0x04,0x05,0x05,0x06, + 0x05,0x06,0x0c,0x07,0x07,0x0c,0x1a,0x11,0x0f,0x11,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, + 0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0xff,0xc0,0x00,0x11, + 0x08,0x01,0x40,0x00,0xf0,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,0x01,0xff, + 0xc4,0x00,0x1d,0x00,0x00,0x01,0x05,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x04,0x02,0x03,0x05,0x06,0x07,0x08,0x01,0x00,0x09,0xff,0xc4, + 0x00,0x42,0x10,0x00,0x02,0x01,0x02,0x05,0x03,0x02,0x04,0x04,0x04,0x04,0x04,0x05, + 0x04,0x03,0x00,0x01,0x02,0x03,0x04,0x11,0x00,0x05,0x12,0x21,0x31,0x06,0x13,0x41, + 0x22,0x51,0x07,0x14,0x61,0x71,0x23,0x32,0x81,0x91,0x08,0x42,0xa1,0xc1,0x15,0x52, + 0xb1,0xf0,0x24,0x33,0xd1,0xe1,0x16,0x25,0x43,0x62,0xf1,0x34,0x72,0x92,0xa2,0x26, + 0x82,0xc2,0xff,0xc4,0x00,0x1b,0x01,0x00,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x03,0x04,0x05,0x06,0x07,0xff, + 0xc4,0x00,0x32,0x11,0x00,0x01,0x04,0x01,0x03,0x02,0x04,0x05,0x03,0x04,0x03,0x01, + 0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x03,0x11,0x21,0x04,0x12,0x31,0x41,0x51,0x05, + 0x13,0x61,0xf0,0x22,0x71,0x81,0x91,0xa1,0x14,0xb1,0xd1,0x32,0x42,0xc1,0xe1,0x06, + 0x15,0x52,0xf1,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11,0x00,0x3f, + 0x00,0xde,0x1f,0x26,0x86,0x9e,0xf6,0x81,0x01,0xd5,0xc9,0x4d,0xc6,0xf8,0x83,0xeb, + 0x5e,0x86,0xa4,0xcf,0x32,0xc8,0xce,0xa6,0x86,0xa1,0x2f,0xda,0x95,0x46,0xca,0x7e, + 0xa3,0xc8,0xc6,0x8f,0x9c,0x65,0x72,0xc8,0xc1,0xe1,0x62,0x15,0x6f,0x75,0xb7,0xf5, + 0xc0,0x15,0x2a,0xe9,0x97,0x90,0xca,0xd6,0x0b,0x71,0xb7,0xf6,0xc7,0x64,0x3c,0x83, + 0x61,0x73,0x08,0x07,0x0b,0x8f,0x6a,0xe1,0x7a,0x79,0xe5,0x8a,0x40,0x35,0xa3,0x15, + 0x6d,0x26,0xe2,0xe0,0xda,0xe3,0xe8,0x79,0xc0,0xc7,0x16,0xfe,0xbb,0xcb,0x63,0xa3, + 0xea,0x1a,0xa4,0x8a,0x74,0x92,0xe5,0x49,0xd2,0x00,0xb6,0xa1,0x7b,0x5b,0x15,0x39, + 0x13,0x4b,0x10,0x0e,0x3b,0x6c,0x76,0xe0,0x0a,0xe7,0x38,0x51,0x48,0x02,0xf8,0x50, + 0xd8,0xe3,0xc5,0xc1,0x31,0x45,0xa9,0x75,0x94,0x25,0x7c,0x90,0x2f,0x87,0xba,0x4a, + 0x97,0xa5,0xa3,0x55,0x63,0x71,0xf5,0xfa,0xe2,0x4a,0x82,0xa1,0xa4,0x95,0x63,0x91, + 0xa4,0x05,0x8d,0x81,0x4e,0x6f,0xf6,0xc0,0xab,0x33,0x28,0x2c,0x09,0xdd,0x6c,0x47, + 0x8f,0xdb,0x04,0xd3,0x44,0x86,0x48,0x99,0x1f,0xb2,0xea,0x35,0x5c,0x7b,0xf8,0xc5, + 0x67,0x21,0x58,0x30,0xac,0xed,0x93,0xc8,0x66,0x14,0xea,0xe2,0x60,0xc9,0x74,0x63, + 0xe9,0x24,0x9f,0xa7,0x83,0x89,0xde,0x98,0xc8,0x27,0x8a,0xb8,0x3d,0x4e,0xb8,0xe2, + 0x45,0x37,0x75,0x6d,0xc3,0x7d,0x70,0xe7,0x48,0xe4,0x6b,0x9b,0x47,0xdf,0x9c,0x09, + 0xa4,0x08,0x50,0x36,0xa3,0xb0,0xbd,0x89,0xfb,0xff,0x00,0xd3,0x1a,0xe6,0x51,0xd3, + 0x6b,0x0c,0x08,0x92,0x01,0x29,0x55,0xb1,0x63,0xcb,0x63,0x03,0xe4,0xac,0x2d,0x4d, + 0x6f,0x55,0x19,0x98,0x65,0x12,0xd3,0x43,0x0f,0xc8,0xc6,0x67,0x8a,0x4b,0x36,0x95, + 0x36,0x2a,0x4f,0xf9,0x6f,0xf5,0xf1,0x85,0x53,0x64,0xeb,0x5c,0xc3,0x51,0x60,0xe8, + 0xa0,0x9b,0x0d,0xef,0xf7,0xfb,0x8b,0x62,0xf6,0x28,0x99,0x20,0x55,0x8c,0x00,0x11, + 0x2c,0x07,0xb6,0xd8,0x1f,0x2e,0x80,0xeb,0x66,0x90,0x0e,0xdc,0x87,0x75,0xb7,0xef, + 0x8c,0xdb,0xd5,0x94,0xa3,0xc6,0x50,0x90,0xd1,0xa9,0x9a,0xe8,0xc0,0x5f,0x57,0xb7, + 0xd3,0x11,0x79,0x94,0x26,0x32,0x52,0x5f,0x5a,0xaa,0x03,0xaa,0xf6,0x0c,0x0e,0x2f, + 0xcf,0x44,0xb2,0xc1,0x22,0x28,0xe5,0x6f,0x72,0x71,0x58,0x93,0x29,0x14,0xf3,0x91, + 0x3a,0x96,0x8d,0xc9,0xf3,0xe3,0x6f,0x18,0x8d,0x72,0x84,0x20,0x72,0xba,0x64,0x57, + 0x8e,0x90,0x40,0xa3,0xb6,0x35,0x23,0x69,0x1b,0x8f,0x3f,0xeb,0x8b,0x1d,0x6c,0x91, + 0x51,0x96,0x10,0xa8,0x11,0xf6,0xc5,0xd5,0x79,0xf6,0xb8,0xc0,0x95,0x54,0x91,0x51, + 0x3c,0x55,0x10,0x36,0x8b,0xaf,0xa8,0xfb,0x0f,0x18,0xad,0x67,0x0f,0x26,0x61,0xdd, + 0x9e,0x95,0xc2,0x4d,0x11,0x31,0xa8,0x2c,0x46,0xb0,0x70,0xe3,0xe2,0x29,0x78,0x47, + 0x66,0x95,0xed,0x47,0x32,0xd1,0xca,0x83,0xb5,0x21,0x28,0x1b,0x92,0x86,0xdb,0x9f, + 0xae,0x2b,0xd4,0x95,0x70,0xd0,0xd4,0xcd,0x4c,0x41,0x9a,0x19,0x59,0x95,0xd0,0x1d, + 0x96,0xe7,0x62,0x2f,0xc6,0xc7,0xfa,0x60,0x7c,0xc3,0x36,0x90,0x01,0xdc,0x0c,0xb3, + 0x46,0x34,0xca,0x1f,0x72,0x0f,0x8f,0xef,0xc6,0x30,0x3c,0xdb,0xf8,0x89,0xa4,0xa1, + 0xce,0xf3,0x40,0xb9,0x25,0x55,0x45,0x3c,0x52,0x4b,0x08,0x70,0x3b,0x4d,0x2b,0x84, + 0x51,0x18,0x0d,0x72,0x09,0x69,0x18,0xdc,0x7e,0x65,0x55,0x37,0x5b,0xde,0xcd,0x24, + 0xd1,0xe9,0x9a,0x0c,0x9d,0x7e,0xbf,0x5f,0x92,0xae,0x9c,0xf3,0xf0,0xab,0x67,0xc5, + 0x5a,0xea,0x6e,0x9e,0xe9,0x3e,0xa5,0x92,0xa2,0x5b,0x03,0x45,0x24,0x30,0xe8,0x46, + 0x76,0xd6,0xeb,0x65,0x3a,0x55,0x83,0x59,0x6e,0x09,0x6b,0x80,0xa0,0x5c,0xfb,0x1e, + 0x36,0xcc,0x5a,0xa6,0x4c,0xcf,0x2e,0x76,0xa7,0xa9,0xa5,0x86,0x3a,0x68,0xea,0x53, + 0xf1,0x19,0xcc,0xda,0xd4,0x99,0x6a,0x49,0x7b,0x0f,0xc6,0x91,0x4e,0xe0,0x71,0xa4, + 0x0b,0x80,0x09,0xb7,0xd4,0xe7,0x39,0xc7,0x57,0x75,0x0e,0x69,0x9c,0x57,0xb5,0x3d, + 0x16,0x65,0x5f,0x10,0x72,0xb2,0x4a,0x22,0x82,0x9d,0x08,0x08,0xc8,0x5d,0xb7,0x50, + 0x55,0x55,0x02,0x9d,0xc8,0x53,0x7d,0xc8,0xc7,0xdd,0x5c,0xd5,0x59,0xa7,0xc3,0xfc, + 0xb1,0x69,0x92,0x5a,0xca,0x9e,0x9e,0xa8,0x92,0x9b,0x3c,0xa5,0x99,0x04,0xb2,0x65, + 0x42,0xe4,0x44,0x10,0x8e,0x21,0x21,0x24,0xd4,0x09,0xd2,0x18,0x29,0x36,0xb8,0xbf, + 0x07,0x53,0xab,0x93,0x5c,0xf7,0x00,0x28,0x01,0x8e,0xe4,0x5f,0x3f,0x63,0xd3,0xb7, + 0xa2,0xbe,0x38,0xfc,0xa1,0xf3,0x54,0xd8,0x33,0x1a,0x58,0x2b,0x8d,0x44,0x8e,0x44, + 0x74,0x0e,0x19,0x29,0xc0,0x90,0xb4,0x8c,0x41,0xb2,0xab,0x8f,0xca,0x41,0x17,0x07, + 0x90,0x6c,0x6e,0x78,0xc3,0x59,0xdc,0x33,0x6b,0x49,0xa6,0x4a,0x88,0x75,0x5d,0xae, + 0x2f,0x20,0x62,0x00,0x5d,0x3a,0xae,0x74,0x9d,0x85,0xc1,0xdf,0x8b,0xf2,0x31,0x1c, + 0xcc,0x92,0xac,0x55,0x31,0x3b,0x58,0xc6,0x5c,0x5d,0x4e,0xa2,0x46,0xc2,0xff,0x00, + 0x5b,0x01,0xfd,0xaf,0x87,0x72,0xda,0xe3,0xdc,0x8a,0x2d,0x71,0x53,0x47,0x34,0x1f, + 0x27,0xae,0x74,0x12,0x24,0x69,0x25,0x95,0xdc,0x82,0x36,0x20,0x1d,0x57,0x1e,0xa1, + 0x60,0x41,0xb8,0x18,0xe5,0x06,0x7c,0x40,0x85,0xa6,0xd0,0x0b,0xa5,0x35,0xa9,0x84, + 0x4c,0x35,0xea,0x2c,0xa0,0x83,0x6f,0xa1,0xbf,0xd6,0xc0,0x1f,0x27,0x7f,0x6c,0x6b, + 0x19,0x5f,0x56,0x66,0x74,0xfd,0x0c,0xf2,0x64,0xb4,0xfd,0x35,0x35,0x36,0x57,0x54, + 0xf3,0x50,0x24,0xe5,0xa2,0xae,0xca,0xd6,0x73,0x28,0xb4,0x32,0xd9,0x18,0xf6,0x9c, + 0x17,0x59,0xda,0x42,0x35,0xb2,0xa8,0xf5,0x16,0x4c,0x55,0x3a,0x37,0xa4,0x33,0xde, + 0xa5,0xea,0x29,0x68,0xfa,0x3f,0x2d,0xa3,0xea,0x09,0x72,0xd1,0x3d,0x44,0x91,0x55, + 0x15,0xec,0xd4,0x22,0x02,0x01,0x2a,0x58,0x03,0xa8,0x13,0xa5,0x43,0x0e,0x2f,0x7d, + 0xb0,0x1b,0x52,0xc7,0x06,0x51,0x98,0x43,0x2f,0x51,0xba,0x43,0x49,0x3b,0x25,0x36, + 0x5d,0x4f,0x09,0x97,0xba,0xdf,0x84,0xa3,0x5c,0xe1,0x44,0x7a,0x19,0x4c,0xa2,0xfa, + 0x8d,0x9a,0x21,0x75,0xb3,0x86,0x1d,0x18,0x1c,0xe6,0x5b,0x87,0xc9,0x0a,0x07,0x0a, + 0xfd,0xd0,0xb4,0xfd,0x21,0x9a,0xe4,0x39,0x9d,0x2f,0x51,0x75,0x4d,0x47,0x47,0xf5, + 0x1d,0x45,0x09,0xa3,0x95,0x73,0x39,0x04,0x70,0xc4,0xe2,0xec,0xf3,0x10,0x8b,0xdc, + 0x70,0xc0,0x2a,0xac,0x25,0x56,0xc5,0xc9,0xd5,0x20,0xd9,0x68,0x31,0x66,0x71,0xcb, + 0x52,0xd9,0x7e,0x50,0xcc,0xb4,0xd3,0xf6,0xd6,0x48,0x8c,0xc7,0xfe,0x2d,0x90,0x6a, + 0x66,0x53,0xb1,0x20,0xb2,0xb1,0x51,0x60,0x4f,0xa4,0x5a,0xf8,0x89,0xa4,0xaa,0x31, + 0xc9,0x2a,0x4d,0x1d,0x2d,0x78,0x92,0x09,0x04,0xa2,0xa1,0x59,0x96,0x20,0x53,0x42, + 0xba,0xd9,0x83,0x83,0x1f,0xa4,0xae,0xfb,0x10,0x2e,0x0a,0xdc,0x60,0xcc,0xb7,0x31, + 0xea,0x0a,0x5e,0x9d,0xac,0x34,0x8e,0xab,0x95,0x3c,0xb1,0x47,0x57,0x50,0x90,0x6a, + 0x36,0x00,0x91,0x16,0xb2,0x47,0xa5,0xb4,0x12,0x50,0x1b,0x13,0x60,0x6d,0x7b,0x63, + 0x3b,0xb6,0x90,0x31,0x5e,0xfe,0xc8,0xd6,0x56,0x85,0xd1,0xfd,0x4a,0x99,0x24,0x94, + 0xb9,0xcf,0x54,0x65,0xd4,0x75,0xbd,0x2b,0x02,0xd4,0x41,0x24,0x39,0x9c,0x4a,0x3e, + 0x76,0x69,0xe9,0xec,0x26,0x08,0x6e,0x58,0x04,0xd2,0xa1,0x57,0xfe,0x5a,0xb2,0xb5, + 0xc9,0x66,0x26,0xd1,0x92,0xfc,0x60,0xc9,0xfa,0x38,0xe4,0xd9,0xdd,0x7c,0x15,0xf9, + 0x97,0x52,0x41,0x4e,0x64,0xaa,0xa3,0x97,0x2f,0x68,0xc5,0x4d,0x0c,0xc8,0xc0,0xc0, + 0x2a,0x9a,0x3e,0xe2,0xa2,0xa5,0x80,0x7d,0x2c,0x34,0x33,0x69,0x23,0xce,0x21,0x43, + 0x15,0x56,0x65,0x9a,0xd2,0xd7,0xe6,0xb1,0x4f,0x3c,0x52,0xe6,0x1d,0xe9,0x23,0xa6, + 0xed,0xd2,0xb9,0x25,0xc3,0xb7,0x6f,0x6e,0xdc,0x4c,0xdc,0x0d,0x2b,0x65,0xf4,0xdf, + 0x6b,0x03,0xb3,0x67,0x9d,0x51,0x95,0xff,0x00,0x8f,0x47,0xd6,0x95,0xb4,0x03,0x24, + 0xcd,0x5e,0x8e,0xbe,0x94,0xc1,0x97,0xd5,0x54,0x66,0x75,0x7f,0x38,0xac,0xa2,0x9a, + 0x7a,0x99,0xeb,0x5c,0x89,0x51,0xc1,0xd2,0x4a,0x17,0xf4,0xa9,0x0d,0xce,0x85,0xa6, + 0x48,0x9a,0xe1,0xe6,0x17,0x65,0xbc,0x74,0xe7,0x1d,0x8f,0x38,0xfb,0x58,0xe1,0x11, + 0x41,0x65,0xb9,0x9d,0x45,0x21,0x92,0x79,0x5a,0x07,0xa3,0x85,0xd8,0x4b,0x05,0x34, + 0x61,0x82,0xd2,0xc7,0xaa,0xc2,0x33,0x23,0x0d,0x52,0x00,0x2c,0xb7,0x20,0x13,0xcd, + 0xf6,0xde,0x3f,0xe7,0x3e,0x56,0xae,0x09,0x67,0x5a,0x67,0x04,0x87,0x78,0xbb,0xbd, + 0xc8,0xd9,0x54,0xea,0x55,0x7e,0x35,0x26,0xd6,0x2b,0x71,0x70,0x6d,0x7e,0x31,0x2f, + 0x9c,0xe5,0x14,0x2f,0x56,0x94,0xd9,0x55,0x6e,0x61,0x99,0x46,0xd4,0xe4,0x2c,0x95, + 0xd4,0x69,0x06,0xa9,0xbf,0x98,0x22,0x2c,0x8d,0x68,0xc1,0x0d,0x67,0x62,0x0b,0x5c, + 0x1b,0x6f,0x8a,0xbc,0x29,0x0d,0x4d,0x69,0x58,0x7b,0x6b,0xde,0x71,0x1c,0x48,0xec, + 0x4e,0x92,0x4e,0xc0,0x9b,0x7b,0x01,0x7b,0x62,0xa1,0x56,0x7d,0x3b,0x25,0x36,0xbf, + 0x66,0xbb,0x22,0x45,0xbd,0xaf,0x81,0x2a,0xf2,0xc4,0x9a,0x22,0xac,0xb7,0x07,0xc6, + 0x15,0x43,0x5e,0x8e,0x8a,0x2f,0x89,0x68,0xca,0xc8,0x3d,0xf1,0xea,0x38,0x54,0x2e, + 0x77,0xeb,0x1f,0x87,0x14,0xd0,0x66,0x75,0xd3,0x53,0xc6,0x62,0x19,0x85,0x83,0x9b, + 0xdc,0x06,0xf7,0xdf,0xc7,0xd3,0x18,0x9e,0x69,0xd3,0xb5,0x19,0x76,0x62,0xf4,0x52, + 0x80,0xb2,0x28,0xf2,0x76,0x3b,0x1b,0x1b,0xfd,0x6d,0x8e,0xe2,0xcd,0xf2,0x98,0x6b, + 0x62,0x65,0x92,0x30,0xe0,0x8d,0xae,0x31,0x8d,0xf5,0xbf,0xc3,0x7a,0x7c,0xec,0xc9, + 0x2a,0x3c,0x91,0x4b,0xa4,0xa8,0x2a,0x7f,0x9b,0xc1,0x38,0xdb,0x0c,0xe5,0xb8,0x2a, + 0x97,0xc7,0xbb,0x85,0xcc,0xd8,0x91,0xa1,0x0a,0xf1,0x95,0x67,0xb5,0x8e,0xa0,0x3d, + 0xc5,0xb7,0xc7,0x99,0xbe,0x57,0x55,0x95,0x56,0x49,0x05,0x62,0x10,0xca,0x6c,0x1a, + 0xdb,0x36,0x05,0x81,0xda,0x36,0xba,0xf3,0x62,0x31,0xd6,0xc3,0x86,0x16,0x2e,0x0e, + 0x54,0xb7,0x6a,0x27,0xb3,0x12,0x42,0x69,0xd4,0x74,0xda,0xfa,0x7c,0x91,0xfa,0xe1, + 0xd8,0x63,0xa5,0x4f,0x51,0x62,0xc4,0x31,0xb0,0x3c,0x9f,0x6d,0xb1,0xe5,0x24,0x67, + 0x30,0xa2,0x48,0x62,0xa7,0x0d,0x34,0x44,0xfa,0x97,0xf3,0xe9,0x3f,0xea,0x2f,0x87, + 0x46,0x43,0x5e,0x95,0x2a,0x25,0xa6,0x78,0xa2,0x36,0xf5,0xc8,0x2c,0x00,0xf3,0xea, + 0xc5,0x58,0xe0,0x95,0x66,0x7a,0x2d,0x37,0xa0,0xb3,0x47,0x2c,0x62,0x65,0xed,0x82, + 0x0b,0x12,0x12,0xc0,0x82,0x7d,0xbd,0xf1,0xb4,0xe4,0x75,0xd1,0xd4,0xc4,0xa5,0x4e, + 0xeb,0xb1,0x07,0x9c,0x60,0x99,0x1d,0x31,0xcb,0x6a,0x23,0x94,0x48,0xe9,0xdc,0x16, + 0x4b,0x9b,0x8d,0xb9,0x07,0x1b,0x27,0x4c,0xd4,0xc4,0xc9,0x19,0x7f,0x4b,0x95,0x06, + 0xc7,0x6d,0xf1,0xce,0x94,0x0b,0xb5,0xa9,0xbc,0x2b,0xb9,0x52,0xe5,0x08,0xd8,0x13, + 0xb8,0xc1,0x15,0x34,0xaa,0x23,0x50,0xbe,0x96,0xb5,0xef,0x6c,0x35,0x03,0x2a,0x32, + 0xeb,0xdc,0x93,0x82,0xa7,0xa8,0xd5,0xb0,0x1c,0x63,0x29,0xe5,0x5a,0x9b,0xa1,0x56, + 0x0d,0x67,0x37,0x5b,0x6f,0xf7,0xc3,0x95,0x94,0x51,0xcd,0x3a,0x29,0x03,0x7d,0xed, + 0xef,0x6c,0x7d,0x11,0x11,0x82,0x79,0xbe,0xe7,0x09,0x15,0x2a,0xd5,0x01,0xc8,0xdc, + 0x6c,0x09,0xf0,0x30,0x28,0xdd,0xa8,0xab,0x9d,0x4d,0x48,0x25,0x80,0x53,0xc5,0xaa, + 0xe5,0xb8,0x5e,0x76,0xc5,0x5a,0x2a,0x77,0x8e,0x0a,0x99,0xaa,0x2c,0xed,0x1d,0x88, + 0x0a,0x3f,0x30,0xe3,0x71,0x8b,0xfe,0x6d,0x22,0xda,0x49,0x58,0x5b,0x4a,0xd8,0x62, + 0x02,0x94,0x45,0xa9,0xc7,0x6d,0x54,0x2c,0x7a,0x59,0x40,0xb8,0x20,0x8c,0x68,0x69, + 0xc2,0x42,0xb2,0x6c,0xff,0x00,0x32,0xa7,0x49,0x4a,0x28,0x24,0xc9,0xea,0x3e,0xa0, + 0xc4,0x6f,0x7f,0x3e,0x37,0xc7,0x20,0x7c,0x44,0xe9,0x1a,0xbe,0x9a,0xcd,0x69,0x28, + 0x72,0xfa,0x1c,0xba,0x9e,0x8a,0xa2,0xb2,0xa3,0x32,0xa5,0xad,0x6a,0x9e,0xc0,0x06, + 0x46,0xd0,0x61,0xfc,0x46,0xed,0xa2,0xa8,0x0a,0x01,0xb5,0xef,0x7f,0x56,0xf6,0x1d, + 0x51,0xf1,0x0a,0x8a,0xbb,0xa7,0xe1,0xcc,0x2b,0x62,0xa1,0x4a,0x81,0x04,0x6e,0xd0, + 0xa9,0x93,0x48,0x75,0x41,0xa8,0x82,0xde,0xfa,0x6f,0xf7,0xb6,0x38,0xdb,0xad,0x33, + 0xe7,0xeb,0x6a,0xa3,0x98,0xcb,0x45,0x3a,0xe7,0xa9,0x50,0xd1,0x25,0x38,0x8c,0x10, + 0xd4,0xce,0x1d,0xb4,0x30,0xb0,0x2a,0x62,0x1e,0x90,0xc6,0xe4,0xea,0x37,0xb1,0x03, + 0x14,0xf8,0x94,0x91,0x36,0x10,0xc3,0xc9,0xcf,0xa5,0x75,0xcf,0xb2,0xab,0x80,0x3f, + 0x79,0x3d,0x10,0xb4,0x79,0x74,0x73,0x55,0xac,0x29,0xd4,0x34,0x70,0xe5,0xf1,0xcf, + 0x2b,0x9a,0xda,0x5a,0x23,0x32,0x24,0x43,0x47,0x71,0xe4,0x8c,0xae,0xa7,0x40,0x2e, + 0x06,0xa2,0x45,0xc7,0x00,0x5c,0xe3,0x4e,0xcc,0x2a,0x3a,0x9b,0xa8,0xb2,0x8c,0xd3, + 0xa0,0xfa,0x27,0xa7,0xe3,0xe9,0x18,0x73,0x24,0x19,0xad,0x34,0x10,0xa7,0xe1,0x57, + 0xd1,0x34,0x7f,0x8a,0xb3,0xca,0xfc,0x4c,0x08,0x8c,0x8d,0x22,0xc0,0x8d,0x17,0x1a, + 0x16,0xed,0x45,0xf0,0xf7,0xa8,0xba,0xab,0xa4,0xa0,0xa6,0xea,0x68,0xe8,0x32,0xea, + 0xdc,0x89,0x16,0x9f,0x20,0x69,0xa6,0x0b,0x23,0x5c,0xab,0x9f,0x44,0x6e,0x13,0x52, + 0x85,0xd2,0x35,0x11,0xbb,0x31,0x6b,0x6d,0x8d,0x27,0xa0,0xfa,0xc0,0x65,0x19,0x74, + 0x5d,0x37,0x35,0x26,0x71,0x9d,0x2d,0x14,0x2d,0x3a,0xd7,0x65,0x14,0x7f,0x3b,0x1b, + 0x26,0xaf,0x5f,0x72,0x38,0x9d,0x99,0x34,0xc8,0x5d,0x14,0xae,0xb5,0x70,0xa2,0xd6, + 0x20,0xa8,0xaf,0x47,0xa5,0x31,0x92,0x24,0x76,0xd0,0xfe,0x30,0x01,0xf5,0x6f,0x7f, + 0x63,0xba,0x79,0x64,0x04,0x5b,0x45,0x91,0xee,0xd7,0x36,0x75,0xdf,0x46,0x66,0x7f, + 0x0f,0x7a,0x82,0x0c,0x93,0x35,0xcc,0x20,0xcc,0xaa,0x12,0x9e,0x09,0x75,0x65,0xec, + 0x59,0x04,0xce,0xa6,0xca,0x08,0xb1,0x04,0x1d,0x4b,0xf7,0x1a,0xad,0xb8,0xc5,0x79, + 0x68,0xa0,0xaf,0xaf,0x8d,0x18,0x4d,0x14,0x0a,0xbe,0xb9,0xe2,0xa7,0x0e,0x51,0x89, + 0xd2,0x09,0xb1,0x00,0x8d,0x44,0x0e,0x76,0xbf,0xd3,0x1d,0x11,0xf1,0xf5,0xfa,0x2b, + 0x3d,0xe9,0x7a,0x6c,0xf7,0xa6,0xeb,0x72,0xac,0xc3,0xa9,0xa3,0xa9,0x8d,0x24,0xf9, + 0x39,0x87,0x7d,0xa0,0xd2,0xc0,0x99,0xe3,0xd6,0xae,0x81,0x2e,0x2c,0x59,0x2f,0xa9, + 0x94,0x1b,0x63,0x10,0x39,0xcc,0xb4,0x7d,0x17,0x06,0x4d,0x97,0xc3,0x12,0x2c,0x19, + 0x9c,0xd5,0xaf,0x52,0x26,0x7d,0x55,0x7a,0xa1,0x58,0xd6,0x27,0x51,0x60,0x04,0x7a, + 0x5c,0x83,0x7d,0xcb,0x9d,0x80,0xdf,0x1c,0x6d,0x54,0x22,0x19,0x9c,0xc0,0xef,0x97, + 0xf8,0x57,0xc6,0xf2,0xf6,0x82,0x54,0x46,0x53,0x51,0x5d,0x93,0x57,0x2c,0xf9,0x5c, + 0x52,0xd5,0xce,0x63,0x92,0x9a,0x68,0xa1,0xac,0x92,0x2e,0xec,0x4c,0x34,0xc8,0x8c, + 0x63,0x2a,0xda,0x59,0x6e,0xa5,0x6f,0x63,0xbd,0xc1,0x02,0xd8,0x92,0x8e,0x04,0x8c, + 0xd6,0x64,0x19,0x7e,0x7c,0x29,0xf2,0xfa,0x99,0x44,0xcb,0x05,0x55,0x43,0x25,0x21, + 0xb4,0x64,0x83,0x39,0x56,0x31,0x87,0x50,0x00,0x5f,0x4b,0x12,0xc5,0x45,0xd6,0xd8, + 0x67,0x26,0xa8,0x87,0xa7,0x3a,0x8a,0x96,0xbe,0x9a,0xbe,0x92,0xa1,0xe8,0x64,0x49, + 0x92,0x43,0x4e,0xd5,0x30,0x19,0x04,0x77,0x0a,0x50,0x85,0x32,0x5a,0xfa,0x2c,0x6c, + 0x2f,0xcd,0xc5,0xef,0xb4,0xb7,0x52,0x7c,0x26,0x8b,0x26,0xed,0x74,0x97,0x49,0x65, + 0x95,0x39,0xe2,0xd3,0xc6,0x6a,0x67,0xcd,0xa8,0xa7,0x14,0xec,0x8f,0x1b,0x47,0x2a, + 0xc4,0x0c,0xa4,0x99,0x86,0xa5,0x62,0xe4,0x05,0x66,0x1e,0x91,0xb8,0x00,0xc2,0x1a, + 0xe6,0x97,0x39,0xe0,0x01,0xdf,0xfc,0x7b,0xff,0x00,0x6c,0xe7,0x6d,0xc5,0x5a,0xe7, + 0xca,0x3a,0x06,0xab,0xb4,0xe9,0x55,0x0f,0x7b,0xb4,0xcd,0xd9,0x96,0x32,0xcc,0xfa, + 0x50,0xb8,0x11,0x28,0x56,0xdc,0x05,0x00,0x96,0xb7,0x23,0x7b,0x5c,0x82,0xf2,0x89, + 0x62,0xcc,0x2b,0xa8,0x11,0x32,0x94,0xae,0x98,0x42,0x61,0x45,0xa7,0xa8,0x78,0xdd, + 0xe6,0x24,0x88,0xa6,0x62,0xe4,0xad,0xc3,0xb2,0x1b,0x0b,0x2b,0x05,0xb5,0x96,0xf7, + 0xc1,0xff,0x00,0x2b,0x9c,0x64,0x11,0xd3,0x66,0x39,0x7d,0x64,0x34,0xf5,0x10,0x24, + 0x12,0x35,0x76,0x5b,0x2b,0x77,0x62,0x90,0xdd,0x7b,0x6a,0x41,0x0c,0x1b,0xd5,0xa5, + 0x99,0x7d,0x37,0xb0,0x04,0x8c,0x25,0x69,0x22,0x81,0xaa,0x1a,0xcf,0x0d,0x1b,0x30, + 0x67,0xa4,0x8e,0x73,0xdb,0x0a,0xaf,0x74,0x0c,0xdf,0x98,0xaa,0x8f,0x7b,0x13,0xfe, + 0x99,0x1c,0xf0,0x3a,0xe5,0x59,0x61,0x5b,0xba,0x12,0xab,0x2a,0xaa,0xea,0x9c,0x91, + 0xba,0xfd,0xa3,0x8f,0x2d,0x6a,0x98,0xa6,0xcd,0x51,0x22,0x59,0x19,0xc2,0x79,0x28, + 0x2c,0x7d,0x45,0x50,0x36,0x96,0x17,0x17,0xdc,0x5e,0xd8,0x4f,0x5c,0x75,0xe4,0xbd, + 0x65,0x2e,0x59,0x3e,0x6d,0x4b,0x43,0x4d,0x36,0x5b,0x95,0xa5,0x25,0x3c,0x14,0x10, + 0x32,0x43,0x14,0x4b,0x2c,0xb2,0x2e,0x84,0xd5,0x68,0xc8,0xee,0x85,0x54,0x5b,0x05, + 0x0a,0xa7,0x9c,0x42,0x8a,0xda,0xfa,0x3c,0xbe,0x58,0x5a,0x69,0xcd,0x24,0x85,0x27, + 0x48,0x15,0x14,0x44,0x64,0xd0,0x54,0xcc,0x6e,0x0d,0xde,0xc4,0xef,0x7d,0x86,0xc6, + 0xfe,0x2b,0x15,0x75,0x55,0x48,0xa8,0xd1,0xbc,0x7d,0xd4,0x91,0x90,0x28,0x2a,0xcc, + 0x0f,0xd0,0x7d,0x37,0xfd,0x48,0xc5,0x11,0x92,0xef,0x87,0xa2,0x1e,0x88,0x88,0x33, + 0x42,0xed,0x54,0x51,0x67,0x50,0xeb,0xdb,0x95,0xd5,0x3b,0x92,0x7b,0x9f,0x24,0x03, + 0xb9,0x1b,0xed,0xb7,0x17,0xc2,0xf2,0xaa,0x6a,0x78,0x2b,0xa1,0x96,0x48,0x22,0x6a, + 0x78,0x1c,0x87,0x88,0xb3,0x6a,0x28,0x6e,0xba,0xc1,0x00,0x82,0x54,0xfa,0xbc,0x5a, + 0xd6,0x18,0x51,0x31,0x2c,0xf7,0x86,0xf1,0x2a,0xc5,0xb4,0x85,0xc1,0x2c,0xd6,0x00, + 0xde,0xdb,0x7e,0x97,0xdb,0x6f,0x6c,0x01,0x33,0x9c,0xc2,0x66,0x55,0x2a,0x1d,0x63, + 0x00,0xc8,0xcf,0xa0,0x85,0x1b,0x59,0x97,0xea,0x48,0xb6,0xf7,0x38,0xb4,0x53,0xf0, + 0x05,0x04,0x17,0xeb,0x0e,0x5f,0x58,0x54,0x80,0x4e,0x2d,0xf9,0x6d,0x5e,0xb5,0x17, + 0x38,0xcd,0xa8,0x2a,0x09,0x61,0x73,0xc6,0x2d,0xb9,0x6d,0x55,0xad,0xbe,0x3d,0x49, + 0x0b,0x32,0xbb,0x29,0x12,0x2d,0xb1,0x03,0x9b,0xe5,0x23,0xfe,0x6c,0x77,0x37,0x3e, + 0xa4,0x1c,0x1c,0x48,0x51,0xcf,0x7b,0x6f,0x83,0x65,0x22,0x44,0x23,0x15,0x70,0x53, + 0xf2,0x17,0x36,0x75,0xe7,0xc3,0xc8,0x26,0x59,0x5a,0x10,0x41,0xd4,0x59,0x09,0xfc, + 0xe0,0x11,0xef,0xe7,0xdb,0xf6,0xc6,0x15,0x2c,0x12,0x51,0x54,0xc9,0x0c,0xea,0xcb, + 0x24,0x4e,0x55,0x83,0x0d,0x37,0xb7,0xd3,0x1d,0xb5,0xd4,0x59,0x77,0x71,0x1d,0xe3, + 0x17,0x00,0x6e,0xa7,0xc8,0xf3,0x8e,0x6c,0xf8,0xa1,0x90,0x98,0xeb,0x65,0xaf,0x88, + 0x6d,0x60,0x18,0x5b,0x72,0x07,0x1f,0xd0,0xe3,0xab,0xa6,0x9b,0x3b,0x4a,0xc9,0x2b, + 0x3a,0x85,0x46,0xc9,0x85,0x4c,0x99,0x85,0x22,0x51,0xef,0x2f,0x70,0x00,0x0f,0x9f, + 0xbe,0x36,0x0c,0x9d,0x59,0xcc,0x94,0x95,0x72,0xaa,0x54,0xae,0xea,0xe4,0x59,0x49, + 0xdf,0x62,0xbe,0xd8,0xc8,0xfa,0x6d,0xcc,0x19,0xed,0x2c,0x8a,0xe6,0x32,0x85,0x89, + 0x23,0xe8,0x31,0xb5,0x65,0xc2,0x46,0x61,0x34,0x89,0xa8,0x3d,0xec,0x6d,0xc2,0x9c, + 0x59,0xa8,0xc1,0x42,0x2e,0x13,0xd4,0xf4,0xa2,0xa2,0x0f,0x94,0xac,0x89,0x29,0xe6, + 0x17,0x31,0x32,0x2e,0xc7,0x6f,0xfa,0xdf,0x13,0x19,0x55,0x4d,0x45,0x0c,0x29,0x04, + 0xf3,0x77,0x00,0x6f,0x4b,0x80,0x36,0x1e,0xc7,0x04,0x65,0xd0,0x17,0x55,0xf9,0x9b, + 0x2b,0x0f,0xf9,0x6f,0xc9,0x1b,0x70,0x70,0x5d,0x25,0x3c,0x31,0x44,0x56,0x75,0x5d, + 0x77,0xdd,0xb1,0x8a,0xd5,0xea,0xcd,0x92,0xd5,0x4d,0x5c,0xa1,0xa6,0x25,0x55,0x76, + 0x22,0xe3,0x16,0x0a,0x54,0x8c,0xca,0x53,0x55,0xed,0xf5,0xc5,0x0a,0x80,0x9a,0x49, + 0xd1,0x10,0x96,0x88,0xb5,0x99,0x83,0x5c,0xe2,0xdb,0x4d,0x2f,0x6d,0xd5,0x9b,0x8f, + 0x0c,0x3f,0xbe,0x2b,0x21,0x32,0x97,0xae,0xb4,0x48,0xc1,0x76,0x00,0x62,0x26,0xa5, + 0x9a,0x08,0x1a,0xae,0x29,0x41,0x52,0x2f,0xa5,0xbd,0xc6,0x1c,0xcc,0x33,0x48,0x5b, + 0x4c,0x62,0x5b,0x48,0xdb,0x8b,0x73,0x8a,0xf4,0x99,0x9c,0x94,0x69,0x69,0x6c,0xf0, + 0x19,0x00,0x52,0x0e,0xf7,0x3c,0x93,0xfa,0x62,0x34,0x1a,0x50,0x95,0x37,0x05,0x78, + 0xaf,0xa7,0x02,0x4f,0x50,0x75,0xd5,0x62,0xb6,0x3f,0x4c,0x47,0xb3,0x45,0x03,0xbc, + 0x8a,0xbd,0xb6,0xb0,0x16,0xfa,0x7b,0x62,0xbb,0x9b,0xf5,0x04,0x34,0xd3,0x23,0x25, + 0x48,0x56,0x6d,0x8c,0x60,0xef,0x87,0x6a,0x73,0x88,0x6a,0x74,0x91,0x27,0xa8,0x2e, + 0xc0,0x70,0x47,0x9b,0xe2,0xe0,0xc2,0x92,0xd6,0x51,0xfc,0x43,0x53,0x36,0x61,0xd2, + 0xf9,0x9e,0x5b,0x49,0x51,0x3a,0x3d,0x5d,0x2e,0xae,0xe5,0x35,0x33,0x55,0x49,0x66, + 0x75,0x0d,0x18,0x89,0x48,0x2c,0x48,0xf6,0xe0,0x13,0xcf,0x18,0xe3,0x5c,0xab,0x27, + 0xce,0x7a,0x8f,0x31,0x8f,0x28,0x97,0x5d,0x09,0xab,0xfc,0x26,0xef,0x44,0x63,0x8a, + 0x1a,0x88,0xee,0x51,0x46,0x95,0x36,0x72,0xe1,0xb6,0xf3,0x76,0x27,0x7d,0xc7,0x74, + 0x75,0xb5,0x9f,0x2d,0xa7,0xa8,0xd2,0xab,0x32,0xca,0x57,0x56,0xaf,0x56,0x9f,0x1f, + 0xdf,0x19,0x14,0x3d,0x03,0x91,0x0e,0xaf,0x6e,0xaa,0x58,0x6a,0x13,0x35,0x32,0x2c, + 0xb6,0x8e,0x62,0x90,0x89,0x02,0x69,0x2f,0xa0,0x0b,0x6a,0x3b,0x12,0x7d,0xc7,0xd4, + 0xe2,0xbd,0x5e,0x81,0xda,0xb6,0xb5,0xcc,0xab,0x18,0xca,0xad,0xb3,0x08,0xc9,0x05, + 0x54,0x32,0x28,0x33,0xfc,0xff,0x00,0xa7,0xa8,0x3a,0xa3,0xa8,0x12,0x01,0x04,0x27, + 0xe7,0x6a,0x27,0xa8,0x90,0xd1,0xcd,0x51,0x0d,0x95,0x9d,0x61,0xd0,0x15,0x62,0x8a, + 0xeb,0xaa,0xed,0x63,0x23,0x6a,0xd4,0xd6,0xd3,0x71,0x2a,0x6b,0xba,0x8b,0x27,0xeb, + 0x79,0x26,0xe9,0x58,0xcd,0x1c,0x79,0xf4,0xc9,0x5a,0xb2,0xd1,0xd1,0x34,0xee,0x62, + 0x99,0x2c,0x75,0x1f,0xf9,0x22,0x54,0x29,0x6b,0x82,0x15,0x75,0xff,0x00,0xf8,0xee, + 0x09,0xf8,0xda,0x96,0x60,0x25,0x12,0x29,0x57,0x56,0xdc,0x30,0x22,0xc4,0x1f,0xd3, + 0x0d,0x64,0xbd,0x23,0x45,0x43,0x53,0x96,0xc3,0x97,0xd5,0x57,0x65,0xf9,0x4d,0x15, + 0x23,0xd1,0x47,0x94,0x41,0x3e,0x9a,0x22,0x8f,0x7d,0x4c,0xd1,0xdb,0x53,0x39,0xb9, + 0x25,0x8b,0x12,0x4f,0x38,0xba,0x5f,0x0c,0x3c,0xb1,0xe6,0xf1,0x9e,0xb6,0x31,0x7f, + 0x6f,0xd8,0x61,0x54,0x35,0x03,0x82,0x31,0xd9,0x73,0x67,0x5b,0x66,0x59,0x95,0x7e, + 0x57,0x2e,0x49,0x94,0x67,0xff,0x00,0xf8,0xa5,0xe8,0x33,0x08,0x92,0xb2,0x55,0x65, + 0x95,0xea,0x2a,0x25,0xfc,0x30,0xf0,0xb9,0x01,0xe4,0x5d,0xb4,0xb6,0xe5,0x55,0x8f, + 0x9d,0x5a,0xb1,0x9f,0x43,0x90,0x66,0x99,0x9e,0x5b,0x32,0xa2,0xa3,0x88,0x64,0x58, + 0xa5,0x51,0x29,0xd6,0xa9,0xea,0xf5,0x32,0xdb,0xf2,0x02,0xae,0x0b,0xde,0xd7,0x52, + 0x0f,0x8b,0xf4,0xe7,0xf1,0x0d,0x93,0x64,0xfd,0x39,0x2f,0x45,0x35,0x3d,0x36,0x6b, + 0x57,0x57,0x48,0x2a,0x97,0x2d,0xa4,0x85,0x0f,0xca,0x29,0x04,0x76,0xf5,0x2d,0xbc, + 0x48,0xf7,0x2a,0xac,0x08,0x00,0x6d,0xc1,0xc7,0x35,0xe7,0xd9,0xf6,0x6c,0x99,0x5c, + 0x34,0xa3,0x30,0x76,0x8a,0x68,0xc8,0xd0,0xfa,0xd5,0x99,0x5c,0xea,0x90,0x36,0xe4, + 0x85,0x2e,0x3f,0x2f,0x07,0x4d,0xc8,0x1b,0xe3,0xc7,0xea,0xa2,0x7c,0x33,0xf9,0x77, + 0x67,0x19,0xc9,0xcf,0xd7,0x38,0xf5,0x5d,0x28,0xdc,0x1c,0xdb,0xa5,0x5a,0xa9,0x99, + 0x62,0x8c,0xc2,0xd0,0x0e,0xfb,0xaa,0x90,0xd1,0xb8,0xb4,0x66,0xf7,0x1e,0xf7,0xda, + 0xc2,0xdb,0x5a,0xe7,0x0f,0xe4,0xd5,0xac,0x64,0x6a,0x62,0xcc,0x86,0x74,0x24,0x59, + 0x42,0x02,0xe3,0x7b,0x9f,0xd2,0xff,0x00,0xbe,0x22,0x67,0x91,0x05,0xcd,0x34,0xf6, + 0x23,0x7d,0x7a,0xac,0x1d,0x87,0x2d,0x6f,0x03,0x9b,0x7f,0x5c,0x4a,0xe5,0x94,0x60, + 0x9f,0x9e,0xac,0x8c,0xbc,0x51,0x0b,0x46,0x0f,0xe6,0x95,0xbc,0x14,0x03,0xcf,0x1c, + 0xf3,0x7c,0x2c,0x81,0xbb,0x0d,0xa6,0xa5,0x39,0x49,0x5f,0x21,0xa2,0xa8,0xa6,0x48, + 0xe8,0x50,0x15,0x8d,0xa6,0xa8,0x90,0x0d,0x61,0x23,0x2c,0xca,0xa8,0xe7,0x74,0xb9, + 0x3b,0x85,0xfc,0xd6,0x17,0xc0,0xd4,0x25,0xa8,0x8d,0x4b,0x55,0xb2,0x3a,0xf6,0x82, + 0xa7,0x70,0x33,0x17,0x70,0xdb,0x94,0x61,0xb0,0x1c,0x73,0xcd,0xf0,0x1d,0x44,0xfd, + 0xb2,0x4f,0x6e,0x5d,0x2d,0xf9,0x84,0x8a,0x41,0x55,0xb6,0xe0,0x83,0xfa,0xfe,0xd8, + 0x67,0x5b,0xd5,0xc3,0xa6,0xfd,0xf8,0x50,0x90,0xfa,0xce,0x95,0x09,0x61,0x60,0xa4, + 0x1f,0x1a,0x79,0xbf,0x9c,0x51,0xb2,0xc7,0xa2,0x96,0xbd,0xcc,0xea,0x27,0xcd,0x02, + 0xf6,0x16,0x57,0x2c,0x0f,0xe0,0xc4,0xc6,0x46,0x64,0xbd,0xcd,0xc0,0xf1,0x7e,0x47, + 0xbd,0xf0,0xd5,0x35,0x21,0xa4,0x29,0xf3,0x68,0xe1,0x0e,0xb5,0xd2,0x1d,0x75,0x6e, + 0x2c,0xc6,0xc4,0xdf,0x7b,0x9d,0xf6,0x3e,0x41,0xdb,0x0b,0xa2,0x44,0xa9,0xa5,0x99, + 0x44,0x91,0x40,0x46,0xfd,0xf5,0x20,0x38,0x51,0x63,0xe7,0x7b,0x5c,0x7e,0xa7,0xed, + 0x8f,0xa7,0x45,0xa7,0x55,0x95,0x12,0x5a,0x9a,0x89,0x9b,0x53,0x4b,0x61,0x22,0x2d, + 0xdb,0x50,0xd2,0x06,0xf7,0xba,0xf9,0xbf,0x9c,0x58,0x31,0xf0,0x85,0x02,0x44,0xc2, + 0x14,0x28,0x94,0xcc,0x63,0xa7,0x2c,0x15,0xd2,0x13,0xea,0x66,0x6b,0x7a,0x45,0xf6, + 0xb9,0xdb,0x7f,0xdf,0x07,0xcb,0x32,0x54,0x3c,0x45,0xe9,0xc8,0x00,0x39,0xed,0x1b, + 0x1b,0x6d,0xc1,0xf6,0xb7,0xed,0x89,0x4c,0x8e,0x80,0xd3,0xd4,0x43,0x2d,0x67,0x6f, + 0xe6,0xcc,0x6c,0x62,0x84,0x0d,0x7d,0xbd,0x2b,0xcf,0xb5,0xf7,0x37,0xb7,0xb8,0xe7, + 0x10,0x15,0x59,0x84,0x2d,0x40,0xdf,0x27,0x03,0x03,0x33,0xaf,0x7a,0xa8,0xc6,0x57, + 0x57,0x27,0x48,0x63,0xc0,0xc5,0x40,0x97,0x90,0x06,0x7d,0x54,0x5f,0xa6,0xb9,0x7b, + 0x07,0xb1,0x5c,0x59,0x68,0x99,0x97,0x15,0xdc,0x9e,0x12,0x40,0xdb,0x6c,0x5a,0xe9, + 0xe0,0xb2,0xa9,0xc7,0xb2,0x72,0xce,0x14,0xf5,0x0c,0xc6,0xc3,0x13,0x0b,0x2e,0xa5, + 0xb6,0x2b,0xd4,0x46,0xc4,0x03,0x89,0xe8,0x54,0x15,0x1b,0xe2,0xa2,0x99,0x45,0x66, + 0xd2,0x48,0x8c,0xaa,0xa3,0x5a,0x10,0x75,0x03,0x8c,0x1f,0xe2,0x0f,0x50,0xa5,0xe6, + 0x4a,0x58,0xa3,0xef,0x23,0x15,0xb4,0x8b,0x75,0xdb,0xfa,0x13,0xf4,0xc7,0x43,0x54, + 0xd3,0x86,0x61,0xf4,0xc6,0x2b,0xf1,0x63,0xa3,0xfb,0x19,0x5d,0x6e,0x6d,0x45,0x17, + 0x72,0x78,0x24,0x13,0x38,0x17,0xbb,0x28,0xfc,0xc0,0xfd,0x2d,0x8d,0x10,0x6d,0xde, + 0x2d,0x56,0xfb,0xac,0x2c,0x02,0x88,0x19,0xf3,0x68,0xd1,0xcb,0x46,0xf2,0x48,0x55, + 0xb4,0x8d,0xc1,0xf3,0x8d,0xf7,0x2d,0x68,0xc5,0x30,0x0d,0xe9,0x2b,0xb1,0x07,0xc6, + 0x30,0x5c,0xaa,0xaf,0xe5,0x2b,0x85,0x43,0x8b,0xde,0xe4,0x91,0xc8,0xbf,0xb6,0x34, + 0x2a,0x2e,0xa1,0x69,0xd2,0x77,0x43,0xf9,0x80,0x6b,0x83,0xc5,0xbf,0xf8,0xc7,0x47, + 0x50,0xc2,0xea,0x59,0x62,0x70,0x0b,0x58,0xa0,0xa8,0x84,0x39,0x49,0x4e,0xf6,0xd8, + 0x9c,0x05,0x99,0xcf,0x2d,0x3c,0xab,0x25,0x20,0xd6,0xcd,0xca,0xea,0xb0,0x23,0x15, + 0x2c,0x97,0xa9,0xd5,0x2a,0xed,0x23,0xa7,0xfc,0xb0,0x6e,0xfb,0x12,0x4e,0x0a,0xcc, + 0xf3,0x73,0x3b,0x6a,0xa2,0x0c,0xc4,0xf2,0xc0,0xec,0x06,0x31,0x6c,0x20,0xad,0x1b, + 0x85,0x2b,0xae,0x59,0x5b,0x1a,0x98,0x8b,0xa8,0x40,0xc7,0xc9,0xe0,0x9c,0x58,0x73, + 0x1a,0x85,0x14,0xba,0x51,0xb4,0x90,0x2e,0x08,0x36,0xdf,0x18,0xdd,0x37,0x51,0xfc, + 0xac,0xca,0xb2,0x3b,0xca,0x97,0xbd,0x88,0xe3,0xfd,0x9c,0x5b,0xa8,0xf3,0x9a,0x8a, + 0x88,0xcc,0xea,0x23,0x96,0x1d,0x24,0x15,0x07,0x7f,0xbe,0x03,0x98,0x42,0x81,0xd6, + 0xbe,0xcc,0x33,0xda,0xea,0xa9,0xe9,0x96,0x92,0x98,0x4b,0x30,0x56,0x66,0xb1,0xb5, + 0xec,0x38,0x1f,0xd7,0x10,0xd5,0x5d,0x4d,0x55,0x53,0x97,0xa4,0x54,0x70,0x99,0x25, + 0x91,0xf4,0xad,0xce,0x9d,0x27,0xdf,0x7f,0xbe,0x03,0x83,0x3c,0x34,0xf9,0xba,0xb7, + 0xaa,0x35,0x53,0x62,0xc4,0xdc,0xb0,0xfe,0xd8,0x51,0xaa,0xa7,0x85,0xe5,0x9e,0x89, + 0xbb,0x45,0xda,0xf2,0x06,0x5d,0xce,0x2e,0x6b,0x6b,0xa2,0x52,0x6f,0xaa,0xa8,0x66, + 0xa7,0x32,0xa5,0xab,0x0b,0x98,0xeb,0x32,0xb2,0x77,0x0e,0xa1,0xe2,0xe7,0x61,0xf6, + 0xc4,0xa3,0x54,0x15,0xa7,0xee,0x47,0x34,0x91,0x32,0x5b,0x47,0x90,0xde,0x6d,0x86, + 0xba,0x97,0x36,0x7a,0xc8,0xe3,0xd6,0x43,0x83,0x70,0xa4,0x9d,0xc5,0xfc,0xe2,0x06, + 0x2a,0xb9,0x44,0x7a,0x0b,0xdd,0x07,0x00,0xef,0x6c,0x6f,0x68,0x2e,0x02,0xd6,0x57, + 0x10,0x0a,0x97,0xce,0x33,0x59,0xab,0x9a,0x18,0xa5,0x93,0x54,0x70,0xa6,0xc0,0x71, + 0xa8,0xf2,0x70,0x14,0x47,0xdb,0x02,0x16,0x67,0x6d,0xf0,0xfc,0x37,0xbe,0x34,0x34, + 0x50,0xa0,0xa8,0x26,0xcd,0xa9,0x13,0x55,0x15,0x1d,0x34,0xb5,0x55,0x72,0x08,0x60, + 0x85,0x4b,0x3b,0x9f,0x03,0xfb,0x93,0xc0,0x1e,0x4e,0x22,0xba,0xa7,0xae,0xd7,0x22, + 0xe8,0x26,0xea,0x2c,0xbe,0xea,0xcc,0x21,0x68,0x4c,0x94,0xe2,0x57,0x8c,0xbb,0x03, + 0xa6,0x48,0xb5,0x02,0x2e,0x2e,0xa6,0xdb,0xa6,0xab,0x90,0x6d,0x63,0xee,0x7d,0x4f, + 0x57,0x59,0x92,0x54,0xc3,0x96,0x50,0x51,0x66,0x55,0x63,0x4b,0xc7,0x4f,0x59,0xf9, + 0x4b,0x29,0xd4,0x0a,0x8b,0x10,0x5c,0x30,0x1a,0x75,0x7a,0x6f,0xf9,0xb6,0xb8,0x38, + 0x46,0x7d,0x36,0x6f,0x95,0xe6,0xd9,0x8f,0x4e,0x51,0x50,0xe6,0x74,0x15,0x54,0x13, + 0x54,0x4b,0x94,0xd3,0xc3,0xa9,0x58,0xa4,0xb1,0xac,0x55,0x12,0xab,0x3b,0xdb,0xb7, + 0x29,0xd6,0x75,0x9d,0x46,0xce,0xf6,0x00,0x36,0xdc,0xaf,0x10,0xd5,0x3f,0x4f,0x80, + 0x30,0x45,0x63,0xb9,0xf5,0xf4,0x16,0xb4,0x41,0x10,0x93,0x27,0xd8,0x41,0xf5,0xe7, + 0xc4,0x7c,0xc7,0xe2,0x4e,0x63,0x1d,0x26,0x7d,0x99,0x55,0xae,0x57,0x41,0x55,0x2c, + 0xf4,0x14,0x0f,0x18,0x89,0xe1,0xd4,0x5b,0xfe,0x65,0xac,0x01,0x54,0xd2,0xb7,0x20, + 0x9f,0x1e,0xf8,0xce,0xeb,0x2a,0xe2,0x86,0x8c,0xd3,0xa4,0x70,0x54,0x95,0x89,0x60, + 0x0a,0x91,0xe8,0x98,0x30,0x42,0x23,0x7b,0xaf,0x3b,0xb9,0x24,0x72,0xc5,0x56,0xf8, + 0x3e,0xba,0xad,0xb2,0x68,0xea,0x28,0xb3,0x0c,0x9a,0x5a,0x3c,0xc2,0x96,0x46,0x57, + 0x82,0xad,0xb5,0x38,0x63,0xa4,0x31,0x6b,0xd9,0xc3,0x7a,0x7f,0x29,0xe2,0xc0,0x9f, + 0x37,0x82,0xa9,0x83,0xbd,0x35,0x45,0x46,0x55,0xdc,0x64,0xa7,0x92,0x29,0x1a,0x48, + 0x63,0x28,0x54,0xb2,0x82,0xa6,0xfc,0x8b,0x35,0xc5,0xfd,0xc7,0xd4,0x63,0xc4,0xbb, + 0xcc,0x74,0x84,0xbc,0xda,0xeb,0x00,0x1a,0x28,0x21,0x0c,0xb0,0x66,0x2f,0x51,0x3d, + 0x55,0x45,0x3c,0x2d,0x4d,0x0a,0x1e,0xdf,0x68,0xc7,0xde,0x28,0xca,0xbd,0xa5,0x08, + 0x84,0x2b,0x69,0xf5,0x5d,0xac,0x3d,0x06,0xfb,0x90,0x0c,0x85,0x62,0xd3,0xd0,0x28, + 0xa0,0xa7,0x88,0x49,0x6d,0xe5,0x95,0xa3,0x28,0xcc,0x4a,0xee,0xe4,0x1f,0xca,0x10, + 0x7a,0x76,0xdb,0x66,0x6b,0x0d,0x43,0x11,0xcd,0x59,0x2b,0xc1,0x05,0x35,0x50,0x8d, + 0x84,0x1d,0xd7,0x87,0x61,0xa8,0x96,0xdd,0x87,0x91,0x6b,0xee,0x76,0xf1,0xf7,0xc1, + 0x59,0x45,0x5b,0xc2,0xff,0x00,0x37,0x57,0x54,0x88,0xf6,0x92,0x35,0x79,0x5d,0xc4, + 0x84,0xe9,0x00,0x8b,0x8d,0xb7,0xbd,0xae,0x6f,0xba,0x8f,0xbe,0x19,0xde,0x89,0x89, + 0x4a,0x8a,0x29,0x69,0x73,0x28,0x69,0x6b,0x29,0xe4,0x92,0xe3,0x80,0xba,0x06,0xb0, + 0x09,0xb8,0x1c,0x37,0xef,0x73,0x71,0xf6,0xc2,0xa2,0xa4,0xab,0x79,0x1f,0xb6,0xf1, + 0x46,0x80,0x37,0x70,0xbb,0x7a,0x5a,0xfc,0x12,0x37,0x3b,0xed,0xbf,0x1e,0x70,0x5c, + 0x2d,0x34,0xf3,0xd4,0xa3,0xa3,0x38,0x55,0x25,0x24,0x66,0x0c,0xc1,0x80,0xd2,0x58, + 0x7d,0x6f,0x6d,0xed,0xe7,0x13,0x59,0x74,0x74,0x54,0x10,0x43,0x53,0x52,0xcf,0x2d, + 0x5c,0x94,0xa5,0x64,0x69,0x09,0x32,0x46,0xfb,0x02,0x16,0xe3,0x4a,0x8b,0x81,0xe7, + 0xeb,0xee,0x31,0x95,0xce,0x23,0xa6,0x52,0xda,0x1f,0x2d,0x9e,0x0a,0x68,0x5d,0x5e, + 0x05,0x99,0xd5,0x49,0x69,0x5a,0x3d,0x28,0xaf,0xb7,0xa5,0x05,0xfe,0xff,0x00,0x5f, + 0xe9,0x81,0xe4,0xcc,0x7b,0xfa,0x4a,0xc2,0xb4,0xfa,0xe5,0x2e,0xe6,0x05,0x0a,0xc5, + 0xf4,0x90,0x38,0xb5,0xb6,0x3e,0x7d,0xf0,0xba,0xa5,0x97,0x4a,0xc5,0x34,0xee,0xcb, + 0x0c,0x37,0x75,0x20,0x11,0xdc,0x26,0xeb,0x63,0xb0,0x07,0xfa,0x9b,0xf8,0xc4,0x4b, + 0x4b,0x2a,0x49,0x3c,0xbd,0xc5,0xf5,0x3e,0x96,0xf4,0x81,0x76,0xf6,0x3f,0x5d,0xf9, + 0xc5,0x02,0x36,0xb8,0x92,0x39,0x53,0x94,0x52,0xbc,0xe6,0xa8,0x24,0x4f,0x28,0x29, + 0x19,0x25,0x51,0xf5,0x33,0x6e,0x0d,0x85,0xad,0x7d,0xb6,0xb6,0xdc,0x7b,0xe2,0x46, + 0x79,0xa6,0x3d,0xa5,0xaa,0x08,0x22,0x52,0x34,0x51,0xa4,0x57,0x76,0x16,0xb9,0xb9, + 0xb9,0xb0,0xf2,0x40,0xe3,0x6f,0x38,0x82,0xcb,0xaa,0x1a,0xa5,0x9e,0xaa,0x39,0x0c, + 0x28,0xa5,0x86,0xab,0x0b,0x9d,0xbe,0xbc,0x8b,0x5e,0xe7,0xf4,0xc7,0x95,0x35,0x3a, + 0x6a,0xc3,0x48,0xc8,0xd2,0xad,0x95,0x7b,0x8c,0x15,0x6c,0x6c,0x6e,0x6c,0x78,0xdc, + 0x1b,0x6d,0x7d,0xb1,0xa1,0xa2,0x9e,0x2c,0x5d,0x28,0x7d,0x57,0xe9,0xf6,0x47,0x54, + 0xaf,0x02,0xea,0xb1,0x27,0x92,0x31,0x67,0x8e,0x75,0xd2,0x31,0x46,0xc9,0x1d,0x20, + 0x1d,0xa4,0xbe,0x95,0x36,0xdf,0x91,0x8b,0x6d,0x3f,0xa8,0x02,0xb7,0xc7,0xb1,0x78, + 0xca,0xce,0x0e,0x14,0x82,0x56,0xac,0x6c,0x37,0xb6,0x25,0x20,0xcd,0x57,0x4f,0x38, + 0xa8,0xe6,0x0c,0xf1,0x90,0x46,0xdb,0xef,0x8f,0xa3,0xab,0xd0,0x97,0x27,0x15,0xed, + 0xb4,0x6d,0x5d,0x96,0xb4,0x4a,0x37,0x6b,0x62,0x37,0x3e,0x0b,0x3e,0x57,0x59,0x1f, + 0x26,0x48,0x99,0x7f,0x71,0x88,0x9a,0x1c,0xc8,0x33,0x59,0xd8,0x7d,0xf0,0x3e,0x79, + 0x9f,0xd3,0xd3,0x21,0x49,0x58,0x00,0x45,0x8d,0xfe,0xb8,0x60,0xd3,0x6a,0x5e,0x17, + 0x2d,0x2e,0x4f,0x3a,0x55,0x49,0x4c,0x0a,0xf7,0x23,0x72,0xbb,0x1e,0x4f,0x8b,0x0c, + 0x5b,0x7a,0x56,0x28,0x7e,0x66,0x6a,0x4a,0xe4,0x01,0x88,0x00,0xf8,0xb8,0xe7,0x0a, + 0xea,0xe8,0xa9,0xb2,0xbc,0xf4,0x55,0xd1,0x0f,0x4d,0x40,0x60,0xc3,0xeb,0x6d,0x88, + 0xf6,0xff,0x00,0xe3,0x11,0xf4,0x19,0x82,0xc9,0x58,0xd3,0xcf,0x72,0xe2,0x3b,0x47, + 0xe7,0x7f,0xaf,0xe9,0xb6,0x3b,0x66,0xe4,0x65,0xae,0x78,0xa6,0xb9,0x11,0xd5,0x0a, + 0x99,0x7d,0x78,0x7a,0x77,0x46,0x8a,0x41,0xa9,0x46,0x9d,0xc5,0xbc,0x7d,0xbe,0xb8, + 0xfb,0xfc,0x4a,0xb2,0x1c,0xb2,0xfa,0x1a,0x13,0x21,0x16,0x37,0xb1,0xb5,0xb9,0x18, + 0x32,0xa2,0x37,0xad,0xa2,0xef,0x94,0x45,0x65,0x7d,0x05,0x67,0x3e,0xa1,0xf5,0x0b, + 0xe3,0xdf,0x11,0xb2,0xd5,0xac,0x51,0x49,0x12,0xb1,0x99,0x23,0xb2,0xd9,0xf7,0x24, + 0x7b,0xdf,0x08,0x05,0x80,0x11,0x26,0x8d,0xa4,0xd0,0x67,0x26,0x91,0x98,0x55,0xa7, + 0x78,0xde,0xeb,0xe2,0xc7,0xea,0x71,0x6c,0xcb,0x33,0x7e,0xec,0x4e,0x32,0xf8,0x5d, + 0x4b,0xee,0x6c,0xba,0x82,0xfe,0xdb,0x0c,0x51,0x23,0x8e,0x29,0x88,0x2e,0xc5,0x6c, + 0x77,0xfb,0x63,0x44,0xe8,0xfa,0xca,0x2a,0x08,0x24,0xa0,0x79,0x56,0x48,0xa7,0x62, + 0x56,0x40,0xba,0x49,0x3f,0x53,0x81,0x2b,0x40,0x17,0x48,0xc6,0xe2,0x4d,0x28,0xea, + 0xc9,0xa3,0x96,0x9a,0x46,0x52,0x35,0xa1,0xb5,0x8a,0x80,0x41,0xbd,0xf9,0xc4,0x3a, + 0x66,0xec,0x5a,0x38,0xe4,0x53,0xa0,0x1f,0x53,0x5f,0x7c,0x4d,0x75,0x2e,0x42,0x99, + 0x62,0x7c,0xc5,0x19,0xd4,0xb2,0x38,0xd3,0xa4,0xdc,0x0f,0xb8,0xc5,0x60,0x3a,0x86, + 0x0b,0x3c,0x56,0xd3,0xe0,0x1b,0x61,0xa3,0x68,0x23,0x08,0x3c,0x90,0x51,0x92,0xca, + 0x65,0xd4,0xb2,0x22,0xbc,0x41,0xc9,0x53,0xed,0x7f,0x63,0xe3,0x03,0x48,0x54,0x49, + 0x60,0x34,0x28,0xda,0xc7,0xfb,0xe1,0xda,0x60,0x1d,0xd5,0x09,0x52,0x37,0x17,0x3f, + 0xdf,0x1a,0x47,0x4d,0xaa,0x50,0xd0,0x49,0x03,0x76,0xe6,0x69,0x94,0x02,0x64,0x8d, + 0x58,0x93,0xc0,0x04,0x6f,0x7d,0xb6,0xc5,0x8e,0x77,0x96,0x38,0x48,0x06,0xf5,0x9c, + 0x04,0x5b,0x5d,0x6f,0x7c,0x3d,0x1c,0x60,0xfd,0x0e,0x2f,0xf5,0x5f,0x0c,0xab,0x67, + 0x76,0x92,0x82,0x90,0xd3,0x46,0xc4,0x69,0x52,0x76,0x5e,0x2f,0xfd,0x31,0x1f,0xff, + 0x00,0x81,0x2b,0xa1,0xd6,0x75,0xc7,0xe8,0x52,0xc5,0x49,0xf5,0xed,0xf4,0xf6,0xfa, + 0xe1,0x9b,0x34,0x67,0xaa,0x53,0x1b,0x87,0x44,0x06,0x5f,0x4f,0xde,0x68,0xd9,0x29, + 0xda,0x69,0x22,0x1a,0x9d,0x87,0x00,0x7d,0x6d,0xfe,0xce,0x32,0x8e,0xb6,0xe8,0xae, + 0x83,0xf8,0x75,0x9e,0xc5,0x99,0xe5,0xf9,0x1d,0x17,0x50,0x66,0xb9,0x85,0x74,0x12, + 0xc3,0x92,0xb5,0x77,0xff,0x00,0x40,0x8b,0x7b,0x3c,0x54,0xaa,0x0c,0xb3,0x21,0x73, + 0xff,0x00,0x2f,0x4b,0x01,0x6b,0xda,0xc2,0xe3,0x68,0xcb,0x67,0xac,0xcb,0x5d,0xa1, + 0x45,0x56,0x32,0xa6,0x85,0x52,0x7d,0x24,0xdb,0x6d,0x40,0x6f,0xcd,0xb6,0xc7,0x32, + 0xfc,0x4a,0xeb,0x7e,0xa1,0xcc,0xba,0xaf,0x2b,0xa4,0x32,0xd2,0xd5,0xcb,0x43,0x58, + 0xf1,0xe5,0xb3,0x65,0x06,0x38,0x2a,0xe7,0x9d,0x75,0x44,0x65,0x12,0xa9,0x2f,0x00, + 0x66,0x24,0x2c,0x64,0x9e,0x0b,0x6c,0x58,0x1c,0x73,0x7c,0x49,0xec,0x63,0x03,0x9c, + 0x2c,0xf4,0xc5,0xf6,0xf7,0xfe,0xd6,0x8d,0x38,0x24,0xd5,0xfc,0xfa,0x2a,0x5f,0xc4, + 0xfa,0x59,0x73,0x6c,0xe2,0xb3,0x37,0xe9,0x9e,0x9d,0xce,0x20,0xca,0x0d,0x39,0x39, + 0x85,0x7c,0x8f,0x2d,0x5c,0x32,0xce,0xae,0x12,0x43,0xae,0xc0,0x46,0xab,0xe9,0x42, + 0x8d,0x66,0x07,0x9b,0x02,0x31,0x42,0xcb,0xe2,0x0b,0x3d,0x3a,0x54,0x8f,0x95,0x64, + 0x91,0x6c,0xef,0x1e,0xbd,0x16,0x60,0xc0,0x08,0xef,0xa5,0xc9,0x1c,0x07,0xb6,0xe2, + 0xd8,0xb7,0xe6,0x5d,0x51,0x2c,0xb4,0x2d,0x47,0x0c,0x50,0xad,0x53,0xd3,0x54,0x49, + 0x59,0x53,0x14,0xef,0x19,0x56,0x9c,0x9f,0x98,0x81,0x9e,0xf6,0x70,0xd6,0xb9,0x0c, + 0x0f,0xe6,0x20,0x1f,0x48,0x26,0xa7,0xa2,0x1a,0x9a,0x99,0xa6,0x84,0x77,0xa4,0x48, + 0x0b,0xab,0xcb,0x25,0x87,0x70,0x0b,0xb9,0xd3,0x63,0x7b,0x5e,0xdb,0x5a,0xfc,0xdf, + 0xc6,0x3c,0x8c,0xcf,0x69,0x93,0x73,0x3e,0x65,0x74,0x99,0x6d,0x14,0x81,0x93,0x32, + 0x9e,0x86,0xbe,0xac,0x51,0x28,0xb4,0xe1,0xe3,0x61,0x51,0x08,0x3a,0xd6,0xe6,0xea, + 0x53,0x85,0xb8,0xb5,0xc0,0xfb,0x71,0x83,0xaa,0x3a,0x75,0x8e,0x4b,0x94,0xd5,0x53, + 0xcb,0x42,0xf4,0xb5,0x9d,0xd7,0x11,0xad,0x6a,0xc9,0x52,0x85,0x08,0x59,0x0b,0xc4, + 0x3d,0x48,0x2e,0x7d,0x37,0xfc,0xc1,0x6e,0x09,0xdf,0x0d,0xcc,0x1f,0x44,0x74,0xcd, + 0x20,0x24,0xde,0xe0,0x5b,0x48,0x16,0x16,0xdc,0x9e,0x7d,0x86,0x3d,0xcb,0xaa,0x62, + 0x9b,0xe6,0xa3,0x85,0xe2,0x89,0x22,0x8d,0x98,0xb3,0x12,0xd2,0x31,0x27,0xc1,0xb6, + 0xf7,0x27,0xcf,0x1f,0x5c,0x67,0x2e,0xf8,0x6c,0x23,0x69,0xe2,0x23,0xa7,0x59,0xa3, + 0x24,0xca,0xae,0x91,0xa8,0x06,0x41,0x64,0x53,0xee,0x00,0x37,0x24,0xdf,0xdb,0xfa, + 0x6e,0x14,0x3d,0x45,0x57,0x06,0x5b,0x2c,0x66,0x5b,0xc6,0xba,0x95,0x55,0x23,0x3d, + 0xd3,0x1d,0xbc,0xc9,0xc2,0x81,0xbd,0x8d,0x89,0xe7,0xc5,0xb0,0xcd,0x54,0xd6,0xa2, + 0x15,0x00,0xcf,0x11,0x63,0x66,0x62,0x07,0xe5,0x1f,0xcb,0x71,0xef,0x7e,0x77,0xfa, + 0xe0,0x7a,0x01,0x34,0x35,0x59,0x7d,0x43,0xb8,0x82,0x39,0xdd,0x87,0x76,0xa0,0x68, + 0x46,0x4e,0x0d,0x89,0xe7,0x6f,0x3e,0xe4,0x61,0x5a,0xc1,0x44,0x9c,0xa2,0xde,0xe5, + 0x4e,0x97,0x94,0x52,0x9f,0x94,0x44,0x9a,0x4f,0xc3,0x31,0x2b,0x1b,0xdc,0xda,0xe5, + 0xb7,0xd2,0x0b,0x0d,0xb6,0xb0,0xf3,0x6c,0x7b,0x2d,0x13,0xc2,0x41,0xcd,0x1c,0xba, + 0x4d,0x11,0x9d,0x83,0x1d,0x0a,0x92,0x13,0x73,0x19,0xf1,0xb0,0xdc,0x83,0xe7,0xec, + 0x30,0x5c,0x15,0xf3,0x43,0x35,0x72,0xd4,0x34,0x72,0x1d,0x02,0x40,0xb1,0x82,0xcc, + 0x41,0x3c,0x13,0xc5,0xff,0x00,0x7f,0xa0,0xf7,0x0a,0x1a,0xc9,0x58,0xcd,0x04,0x86, + 0xd3,0x53,0xdd,0x40,0x9c,0x83,0xa5,0x8d,0x80,0x26,0xe2,0xdc,0xff,0x00,0xa6,0x2a, + 0xcf,0x40,0x12,0xe5,0x09,0x58,0xd3,0x31,0x2e,0xb3,0x24,0xba,0x4e,0x98,0xd6,0x9d, + 0x43,0x6a,0x16,0xfc,0xde,0x06,0xdb,0xfe,0xd8,0x8b,0x31,0x37,0xcc,0x2c,0x42,0x06, + 0xee,0x8b,0x97,0x46,0x03,0x6d,0x85,0x8f,0xd4,0x9e,0x7f,0x6c,0x3d,0x22,0x57,0xab, + 0xb8,0x9c,0x34,0x15,0x25,0xc2,0x6c,0xbe,0xfb,0xeb,0x2d,0xc0,0xe3,0xc7,0xf4,0xc3, + 0x35,0x10,0xc9,0x4f,0x32,0x8a,0x79,0x5a,0xb1,0xda,0xeb,0x3c,0x8b,0x19,0xd2,0x1c, + 0x9d,0x86,0xae,0x0f,0x23,0xf5,0x36,0xc6,0x96,0xd8,0xc7,0x74,0xf4,0xbf,0x49,0x72, + 0x9c,0xc6,0x11,0x7a,0x80,0x6e,0x5e,0xc5,0x85,0xf7,0x18,0xb9,0xe5,0xd9,0xdc,0x2a, + 0xa0,0x96,0x0c,0xb6,0xda,0xc7,0x19,0x54,0x19,0x92,0xc4,0xe5,0x66,0x1a,0x5a,0xde, + 0xa0,0x47,0x3f,0x4b,0xe2,0x6e,0x86,0x55,0x72,0x9f,0x28,0x09,0x8c,0x8f,0x7e,0x31, + 0xed,0xe4,0x87,0xba,0xe6,0x36,0x45,0xa6,0x4b,0x3d,0x35,0x6a,0xd8,0xb0,0xb9,0xe3, + 0x11,0x72,0x03,0x11,0x2b,0x7b,0xae,0x23,0xa8,0xe1,0x66,0x55,0x91,0x25,0x60,0xc4, + 0x5b,0x6c,0x01,0x5d,0x9a,0x4d,0x47,0x53,0xdb,0x90,0x13,0x7f,0xca,0x47,0x0d,0x8c, + 0xc2,0x3c,0xd0,0x56,0x97,0x61,0x7b,0x36,0x70,0x68,0x2b,0x0d,0xee,0xc8,0x64,0xd1, + 0x61,0xe0,0xe0,0x4e,0xa7,0xce,0x25,0xaa,0xcb,0x97,0xe5,0xe0,0x2d,0x24,0x8d,0xa5, + 0x4f,0x95,0x38,0x47,0xce,0xac,0x8c,0xf2,0xb6,0xfd,0xc6,0xe0,0xef,0xbe,0x3d,0x9e, + 0x68,0xd6,0x99,0xa6,0x60,0x1a,0xfb,0xaf,0x9b,0x1c,0x69,0x0c,0x00,0x83,0x4a,0xb2, + 0xeb,0x0a,0x91,0x99,0x65,0x95,0x59,0x8c,0x51,0x09,0xe4,0x01,0xc6,0xea,0x34,0x6e, + 0x3e,0x87,0xf5,0xc4,0x54,0x59,0x5d,0x4c,0x4a,0xe6,0x68,0xc4,0x41,0x00,0xd5,0xa8, + 0x5f,0x9f,0x63,0x8d,0x71,0x5e,0x1c,0xc6,0x86,0x2b,0xaa,0x6b,0xbe,0xa0,0xd6,0xe1, + 0xbc,0x8b,0xe2,0x1f,0x3a,0xca,0x0c,0xf4,0x0d,0x2d,0x3c,0xba,0xbb,0x76,0xd4,0x02, + 0x5c,0x85,0xbf,0x8b,0x7d,0xff,0x00,0xa6,0x34,0x32,0x5f,0xed,0x55,0x16,0x0e,0x54, + 0x0d,0x0d,0x21,0xab,0xa0,0x49,0x90,0x82,0xdb,0xdf,0x40,0x37,0x24,0x7d,0x0f,0x91, + 0x81,0xe4,0xe9,0x82,0x94,0x89,0x35,0x33,0x34,0xaf,0x29,0xf5,0x5b,0x80,0x3c,0xdf, + 0xed,0xce,0x2c,0xdd,0x2c,0xb0,0x54,0xd2,0xbd,0x3d,0x5c,0x5a,0x26,0x86,0x5d,0x2c, + 0x54,0x9d,0x2c,0x3c,0x37,0xed,0x8b,0x98,0x8e,0x08,0x07,0xe4,0x42,0x84,0x69,0x36, + 0x1b,0x62,0xb7,0x48,0x58,0xea,0x09,0x83,0x43,0x85,0xac,0x2a,0xa3,0x23,0xae,0xa6, + 0x52,0xcf,0x01,0x00,0x1b,0x6d,0xed,0xe0,0xe0,0x7a,0x79,0x9e,0x37,0x52,0xa4,0x8d, + 0x26,0xf6,0xc6,0x8d,0x9f,0x98,0xc3,0x4e,0xb2,0x5b,0x4b,0x7e,0x55,0xfe,0x56,0x1e, + 0x71,0x43,0xa8,0x8e,0x30,0xea,0xd1,0xa8,0x52,0xfb,0xec,0x76,0x1f,0x4c,0x6c,0x8d, + 0xc5,0xe3,0x2b,0x3b,0x9b,0xb4,0xe1,0x4b,0x2f,0x51,0x54,0x59,0x04,0xe9,0x1c,0xc8, + 0x2e,0x77,0x1b,0xef,0x88,0xc9,0x43,0xd4,0xca,0xd2,0x90,0x48,0x63,0x61,0xf6,0xf6, + 0xc3,0xb4,0x94,0xd1,0x48,0x1a,0x29,0x5c,0x21,0x3b,0x86,0x3f,0xdb,0x16,0x1c,0xb7, + 0x20,0x42,0x89,0x30,0x97,0xb9,0x1e,0xc1,0xc9,0x16,0x1c,0xec,0x3d,0xf7,0xc4,0xf8, + 0x63,0x53,0x2e,0x55,0xc8,0x13,0x41,0xdd,0x49,0x20,0xf1,0x7b,0x5c,0x0e,0x71,0xad, + 0xf4,0x61,0x5b,0xa0,0x64,0x12,0x4d,0x21,0x56,0x21,0x86,0xc0,0xf3,0xcf,0x38,0x94, + 0xa2,0xe8,0xfa,0x5e,0xd5,0x24,0x0f,0x4c,0x95,0x10,0xc8,0x64,0x3a,0xa4,0x92,0xfa, + 0x1b,0x4d,0xec,0xab,0x6d,0xfc,0xdf,0x71,0xc0,0xe7,0x17,0x7c,0x9f,0xa5,0xe9,0xa8, + 0x68,0xe9,0xe2,0x8c,0x5c,0xc4,0x2c,0x0d,0xf8,0x17,0xe3,0x18,0x26,0xd4,0x31,0xc2, + 0x96,0x98,0xe2,0x2d,0x36,0xa5,0xf2,0xdd,0x4f,0x00,0xef,0x58,0x13,0xbd,0x81,0xbd, + 0xb1,0x50,0xeb,0x88,0x3e,0x56,0x1e,0xf5,0x39,0x78,0x1d,0x5b,0x76,0x55,0xb8,0x20, + 0xe2,0xe1,0x02,0x1a,0x57,0x21,0xb7,0x07,0x8c,0x05,0x9f,0x40,0x33,0x0c,0xbe,0x45, + 0x04,0x2c,0x80,0x7a,0x4e,0x30,0xc6,0xea,0x7d,0xf4,0x5a,0x1c,0x2d,0xb4,0xb9,0x8f, + 0xe2,0x6f,0x57,0x4b,0xd1,0xd9,0x48,0xcf,0x29,0x20,0x57,0x73,0x98,0x53,0x42,0xd0, + 0xb5,0x3b,0x4a,0x48,0x72,0x75,0x69,0x55,0x65,0x3a,0x8d,0xb6,0xe7,0x7b,0x0b,0x6f, + 0x8e,0x2d,0xea,0x39,0xcc,0xf3,0x56,0xd7,0xe9,0x15,0x30,0x56,0x57,0xd4,0x1b,0xd5, + 0x84,0x4a,0xad,0x5a,0x99,0xac,0xea,0x87,0xd2,0xf6,0x73,0xb8,0xf4,0x93,0x70,0x37, + 0x06,0xdd,0xf9,0xd5,0xdd,0x1d,0x49,0x9b,0x64,0x92,0xd2,0x67,0x34,0x4f,0x35,0x2b, + 0xcd,0x1f,0x79,0x4b,0x15,0xdd,0x58,0x32,0x15,0x20,0x83,0x70,0xc0,0x10,0x7e,0x98, + 0xe1,0xaf,0x89,0x23,0x2d,0x7e,0xb5,0xea,0x38,0xe9,0x2b,0x1b,0x32,0x91,0xb3,0x09, + 0x5c,0xc6,0x6a,0x7e,0x65,0x55,0xf5,0x9f,0xfd,0x4b,0x5e,0x53,0x6e,0x76,0x1a,0x6c, + 0x54,0xea,0xe4,0xd3,0xe2,0xec,0x73,0x9a,0xc7,0xdf,0xc2,0x3f,0x75,0x5e,0x98,0x80, + 0x48,0xac,0xa0,0xeb,0xea,0x29,0xe7,0xc9,0x7a,0x64,0x38,0xac,0xa8,0x34,0xb4,0x6c, + 0x73,0x15,0x8e,0x08,0xb5,0x46,0x1e,0xa5,0x8c,0x7f,0x90,0x13,0x27,0xa0,0x81,0x79, + 0x74,0xee,0xca,0xa2,0xc1,0x46,0x23,0x04,0xd4,0xb4,0xb5,0x52,0x1c,0xa2,0xa1,0xd6, + 0x92,0x70,0xfa,0x24,0x54,0x31,0x7f,0xc3,0xdc,0x10,0xac,0x35,0x31,0xf0,0x09,0x56, + 0x2c,0x2f,0x7d,0xcf,0x26,0x06,0x35,0xa8,0x86,0x46,0x88,0x4b,0x25,0x00,0x58,0xce, + 0xb9,0x51,0x8a,0x82,0x83,0xd4,0xa3,0x63,0xef,0xfe,0x83,0x0e,0x54,0xd5,0x43,0x1d, + 0x14,0x6b,0x09,0x69,0x10,0xa0,0xf5,0x48,0xd6,0x3f,0xa0,0x1e,0xd6,0x23,0xdb,0x1e, + 0x6d,0xe2,0xea,0x96,0xec,0xa1,0x2b,0xb3,0x48,0x25,0x90,0xfe,0x11,0x92,0x08,0xc6, + 0x98,0xef,0x25,0x98,0x81,0xb9,0x26,0xdc,0xdc,0xff,0x00,0xaf,0xe9,0x84,0xe4,0xb3, + 0x27,0xcd,0xcb,0x24,0xba,0x75,0x34,0x65,0x62,0x40,0xb7,0x7d,0x5b,0x58,0x0b,0x0b, + 0x01,0xa4,0x9b,0x9f,0xa5,0xb1,0x11,0x25,0xe4,0x72,0xc8,0x77,0xb5,0xec,0x7d,0x86, + 0x27,0x32,0xec,0xb4,0x46,0xaf,0xf3,0x08,0x63,0xab,0xd0,0x5e,0x35,0xd4,0x41,0x54, + 0xdb,0x73,0x63,0xc9,0x07,0x60,0x6d,0x7d,0xae,0x6c,0x71,0x63,0x9a,0xd6,0xb2,0x95, + 0x84,0x00,0x11,0xd9,0x25,0x3b,0x7f,0x8e,0xfe,0x05,0x5d,0x24,0x23,0x4b,0xb9,0x9a, + 0xa5,0x03,0x22,0x71,0x62,0xa0,0x90,0x35,0xee,0x00,0xc4,0xcd,0x5d,0x4a,0x4b,0xdc, + 0xcb,0xa9,0x62,0x86,0x48,0x5c,0xc6,0x15,0xa3,0x90,0x2a,0xc4,0x47,0xe7,0x31,0x9b, + 0xdd,0x6e,0x09,0x63,0x6b,0xda,0xe4,0x5c,0xdf,0x00,0x7f,0x86,0xd2,0xc8,0xd5,0x14, + 0xe6,0x2a,0x68,0x29,0xa0,0x8c,0xcc,0xd3,0x98,0x99,0x89,0x22,0xde,0x96,0x63,0xf9, + 0x4f,0x3f,0xb9,0xb0,0xc3,0x95,0x32,0x3d,0x3e,0x5c,0x94,0xd1,0x0e,0xcd,0x33,0x33, + 0x48,0xf2,0x21,0xb6,0xa3,0xc6,0x85,0x04,0x82,0x14,0x8e,0x01,0x17,0xe7,0x19,0x6e, + 0xdc,0x0f,0xbf,0xba,0x4b,0xc2,0x77,0x34,0x96,0xae,0x8c,0x25,0x5d,0x18,0x99,0x62, + 0x2c,0x51,0x6a,0xd6,0x2b,0x85,0x62,0x6d,0xb0,0xdc,0xef,0x6b,0x0f,0x7d,0xf0,0x15, + 0x34,0xf4,0xf5,0x14,0xcf,0x25,0x51,0xed,0x95,0xe5,0xd4,0xb5,0xae,0x39,0x73,0x7d, + 0xef,0x6e,0x00,0xf2,0x48,0xe4,0xe1,0xf9,0x6a,0x6a,0x32,0xbc,0xb9,0x29,0x3b,0x8b, + 0x4c,0xcf,0x50,0x44,0x50,0x89,0x14,0xb5,0xac,0xa4,0x96,0x3b,0x69,0x17,0x1b,0x5f, + 0xf4,0x38,0x1b,0x34,0xfc,0x68,0x69,0x66,0x79,0x44,0xa3,0x48,0x0c,0xe0,0xde,0xec, + 0x77,0xda,0xdb,0x7d,0x8e,0xf8,0x56,0x6e,0x68,0xe3,0xea,0x82,0x8c,0x9e,0xa6,0x5b, + 0x39,0x86,0x46,0x8e,0xf6,0xba,0x97,0xe7,0xd8,0x37,0xb9,0xff,0x00,0x63,0x1e,0x2d, + 0x59,0x95,0xe9,0xd5,0xed,0x34,0xc2,0x32,0x15,0x42,0x95,0x00,0x16,0xbd,0xac,0x0e, + 0xf6,0xb5,0xef,0xb6,0x1a,0x12,0xbc,0x86,0xec,0xd2,0x01,0x13,0x5c,0x21,0x1a,0x8b, + 0x9b,0xdc,0x8b,0x5f,0xde,0xf8,0x22,0x58,0xcc,0x0f,0x32,0x2b,0xab,0xc6,0xb7,0x2a, + 0xda,0xb4,0x89,0x05,0xb9,0xb1,0xde,0xc3,0x8b,0x11,0xf4,0xc6,0xc0,0x28,0x26,0x3c, + 0x2e,0xf1,0xad,0xa8,0x56,0xa5,0x30,0xe8,0x66,0x2c,0x03,0x16,0x07,0x7b,0xe0,0x2c, + 0xba,0xb6,0x6a,0x69,0x00,0x49,0x4d,0xb8,0xde,0xfb,0x7d,0x6d,0x86,0xda,0xa6,0x49, + 0x24,0x2f,0x70,0x58,0xdb,0x72,0x30,0x87,0x91,0x9a,0x41,0x20,0xf4,0xb7,0x9b,0x63, + 0xe9,0x82,0x3c,0x52,0xf3,0x65,0xf9,0xb5,0xa5,0xe5,0xb9,0xc9,0x68,0x06,0xa3,0xea, + 0xb6,0xfb,0x62,0x0b,0x3b,0xcc,0x2a,0x26,0x91,0x40,0x2b,0xa4,0x5f,0xd7,0x72,0x3f, + 0xa6,0x2b,0xf4,0xb5,0xe6,0x35,0x1d,0xc2,0xee,0x47,0x00,0x1b,0x61,0x13,0xd7,0xcd, + 0x35,0x81,0x36,0x51,0xb8,0x1c,0xef,0x8c,0xed,0xd3,0xed,0x75,0xab,0x4c,0xd6,0x29, + 0x4a,0xd2,0x54,0xd6,0xc9,0x22,0xb2,0xba,0x04,0x53,0x76,0x20,0xf2,0x3d,0xc8,0xc4, + 0xb5,0x5d,0x51,0x5c,0xb1,0xe3,0xee,0x6a,0x71,0x72,0x4f,0xb8,0xb6,0x29,0x41,0xdd, + 0x6f,0xa5,0xad,0x7c,0x1e,0xf9,0x93,0x98,0x3b,0x76,0x07,0xd1,0xa2,0xf6,0xe0,0x61, + 0xdd,0x0d,0x90,0x52,0x89,0x30,0xa6,0x68,0x73,0xe6,0xa7,0xa2,0x45,0x7d,0x80,0x17, + 0xb0,0x3b,0x9d,0xf9,0xc7,0xa7,0xa8,0xd6,0x14,0x74,0x84,0x91,0x7b,0xff,0x00,0x36, + 0xdb,0xe2,0xb4,0x25,0x1a,0x19,0x48,0xbd,0xfd,0xf0,0x33,0x02,0x0e,0xdc,0x61,0xbc, + 0x86,0x95,0x3c,0xd2,0x14,0xcd,0x3e,0x66,0xcd,0x3c,0x67,0x5c,0x91,0xbb,0x3d,0x8b, + 0x23,0x1f,0x3e,0xf8,0xb5,0x54,0xf5,0x18,0x08,0xa6,0x26,0x36,0x26,0xc7,0xdb,0x19, + 0xec,0x77,0x46,0x05,0x49,0x07,0xdf,0x04,0xac,0xac,0x54,0x29,0x26,0xc2,0xf8,0x8e, + 0x80,0x38,0xa0,0xd9,0x48,0x52,0x99,0xa5,0x7f,0x7e,0x40,0x5f,0x76,0xbd,0xcd,0xcd, + 0xec,0x71,0x0f,0x21,0xbb,0xec,0x36,0xc3,0x8d,0xea,0x38,0xf0,0x46,0x4e,0xe0,0x5e, + 0xd8,0x76,0xb0,0x34,0x25,0x2e,0xb4,0xed,0x3a,0x92,0xe0,0x0d,0xfe,0x96,0xc5,0xfb, + 0xa7,0xea,0x23,0x29,0x12,0x40,0xfe,0xb0,0x6d,0x22,0x3e,0xc4,0x81,0xe4,0x62,0x9b, + 0x0e,0x59,0x50,0x63,0x8a,0x60,0x17,0x4b,0xf0,0x03,0xfa,0xad,0x7b,0x71,0xce,0x34, + 0x4e,0x98,0xe9,0x63,0x4d,0x56,0xa7,0x36,0xee,0xd3,0x30,0x5d,0x80,0xb0,0xf5,0x7d, + 0xfd,0xf1,0x9a,0x7d,0xa1,0xbc,0xab,0xe2,0xbb,0x57,0x15,0xac,0xff,0x00,0xcf,0x3a, + 0x66,0x95,0x8c,0x48,0x5d,0x2b,0x65,0x08,0xf0,0xab,0xb3,0xac,0x70,0xa5,0x8a,0xb1, + 0xdd,0x6c,0xce,0x38,0xbd,0xf8,0xc5,0xc2,0x9b,0x30,0xb1,0x55,0x0d,0xce,0x31,0x7a, + 0x8c,0xfa,0x04,0xf8,0xf1,0x94,0xe5,0xc2,0x57,0x34,0xd9,0x56,0x47,0xda,0x3f,0x88, + 0x00,0x59,0x67,0x3d,0xd6,0xbd,0xff,0x00,0x37,0xa0,0xc3,0x70,0x3d,0xf1,0xa2,0x57, + 0x4c,0x69,0xa7,0x56,0x81,0xc0,0x4f,0xbd,0xc0,0xc7,0x9f,0x65,0x48,0xf7,0x05,0xd3, + 0x77,0xc2,0xd0,0x55,0xbe,0x52,0xd5,0x4b,0xa6,0x25,0x66,0x7f,0xfd,0xa2,0xe7,0x18, + 0xef,0x5c,0xfc,0x69,0xe9,0xbe,0x84,0x35,0x54,0xf5,0x59,0x8f,0xf8,0xa6,0x61,0x15, + 0x2c,0xf3,0xad,0x36,0x5e,0xa6,0xa4,0xb3,0x46,0xba,0xbb,0x2c,0xe8,0x19,0x23,0x72, + 0x2e,0x46,0xa2,0x2c,0x15,0x89,0xb0,0x1b,0xc6,0x7c,0x6d,0xcc,0xe5,0xa9,0xf8,0x63, + 0x9a,0x66,0x90,0x66,0x95,0x39,0x54,0x9d,0x3d,0x51,0x4b,0x9b,0x77,0x29,0xe4,0x65, + 0x13,0x08,0xa6,0x5b,0xc6,0xda,0x4a,0xb5,0x9b,0x56,0xd6,0x23,0xd5,0x6f,0x17,0xc7, + 0x3e,0xf4,0x24,0xdd,0x37,0xf1,0x20,0xd2,0xf4,0xfc,0xd9,0xae,0x5f,0x94,0xcf,0x9b, + 0x67,0xb5,0x95,0x99,0x7e,0x59,0x4d,0x49,0x24,0xd5,0x34,0xf4,0xb3,0x0b,0xd5,0xa4, + 0xaa,0xba,0x92,0x29,0x74,0x8b,0x44,0xc0,0xb3,0x0b,0xfa,0xc9,0xd2,0x31,0x5b,0xde, + 0xe8,0xa4,0xf2,0xc0,0x45,0xa0,0x3c,0x6e,0x53,0x3f,0x17,0xbf,0x89,0x3c,0xc3,0x32, + 0xc9,0x27,0xa7,0xe8,0xba,0xee,0xcd,0x16,0x6c,0xa3,0xe4,0xe7,0x5a,0x56,0xa5,0xae, + 0xa3,0x11,0x3a,0x77,0x19,0xdc,0xea,0x56,0x59,0x07,0x71,0x51,0xd3,0xc5,0xef,0x62, + 0xbb,0xf2,0x37,0x52,0xf5,0x56,0x63,0xd4,0x99,0x95,0x56,0x63,0x98,0xd5,0xbd,0x55, + 0x75,0x4c,0x9a,0xea,0xea,0x3b,0x69,0x1f,0x71,0xf5,0x5a,0xf6,0x40,0x07,0x03,0xdb, + 0x93,0x82,0xb3,0x5c,0xcd,0xb3,0x4a,0x9a,0xe6,0x35,0x13,0x2a,0xa3,0xb0,0x48,0xdc, + 0x97,0x5a,0x78,0xf5,0x9b,0x28,0x22,0xcb,0x60,0x00,0xd8,0x2a,0xf9,0x3b,0x5f,0x10, + 0x73,0xd1,0xc5,0x2d,0x60,0x32,0x10,0xe8,0xf2,0xd9,0x63,0x59,0x40,0x3b,0x83,0x62, + 0xc4,0x02,0x07,0xd8,0x0c,0x72,0x24,0x95,0xd2,0x9f,0x88,0xab,0x9a,0xd0,0x0a,0x7a, + 0x95,0x27,0xa8,0x12,0x19,0x67,0x28,0xb1,0x3f,0x73,0x44,0xad,0x60,0x16,0xf7,0x2d, + 0x6b,0x7a,0xb8,0xe3,0xfe,0xb8,0xf2,0xa6,0xb2,0x23,0x36,0x84,0x13,0x4a,0xef,0xa4, + 0xbc,0x81,0x8c,0x8c,0x47,0xf9,0x40,0xf0,0x37,0x3e,0x7c,0xe0,0xed,0x1f,0xe2,0x0f, + 0x0e,0x5f,0x4e,0x81,0x09,0x72,0xcc,0x7d,0x56,0x23,0x6b,0xb3,0xed,0x72,0xb7,0xda, + 0xff,0x00,0x51,0x8f,0xb2,0xfc,0xa6,0xa0,0x14,0x54,0xef,0x51,0xcd,0x19,0x79,0x9a, + 0x75,0x99,0x80,0x10,0x8d,0x21,0x53,0x55,0xec,0x6e,0xc0,0xed,0x60,0x7e,0xb6,0xe3, + 0x30,0x70,0x39,0x3d,0x13,0x82,0x10,0xb5,0x59,0x5d,0x14,0x71,0x95,0xfc,0x45,0x97, + 0xd6,0xcf,0xf8,0x8b,0x29,0x8a,0xd6,0x3a,0x54,0x2d,0xb5,0xb5,0x86,0xe7,0x8d,0xc9, + 0xf1,0x89,0x58,0x56,0x99,0xa9,0xe0,0x8a,0x69,0x66,0xa4,0xd4,0x09,0x08,0xac,0x1e, + 0x46,0xb9,0xba,0xeb,0x24,0xda,0x3b,0x82,0x36,0x16,0xb5,0x89,0x3b,0xd8,0x62,0x3e, + 0x4a,0x86,0x86,0xab,0xe7,0x5a,0x91,0xd8,0x3b,0x90,0x26,0x93,0x52,0xae,0x92,0x48, + 0xb6,0xf6,0xd8,0x83,0xc5,0xb0,0x64,0x13,0x09,0x29,0xa5,0x8c,0xc2,0xc1,0xa5,0xfc, + 0x47,0x10,0x1b,0x77,0x54,0x0b,0x20,0x7b,0xee,0x08,0x60,0x78,0xd8,0xfe,0xe7,0x00, + 0x59,0xab,0x28,0x12,0x57,0x93,0x4c,0xc8,0xc6,0x2a,0x09,0x41,0x80,0x00,0x01,0x8d, + 0x6c,0xc3,0xd5,0x61,0xbb,0xd8,0xdc,0x91,0xf9,0xb7,0xfb,0xd8,0x62,0x1b,0x30,0x86, + 0xaa,0x4f,0x4b,0x15,0xa9,0xd8,0x2a,0x49,0x1b,0x0b,0x6a,0x2d,0xc1,0xbd,0x89,0xff, + 0x00,0x5f,0x27,0x12,0xb9,0x8d,0x70,0x48,0xda,0x33,0x2e,0xa9,0x4d,0xd5,0x8a,0x20, + 0x8c,0x96,0x3e,0x08,0x1b,0x11,0x6b,0xe2,0x12,0x9e,0xa0,0xa4,0x7d,0xd7,0x99,0xb5, + 0x12,0x54,0x28,0x23,0x83,0xcd,0xfe,0x86,0xdf,0xaf,0x18,0x0d,0xb3,0x90,0x10,0x1d, + 0xc2,0x98,0xce,0x62,0x54,0xed,0x99,0x92,0x16,0xac,0x95,0x50,0xb4,0x10,0x2d,0x96, + 0x0d,0xad,0xa4,0x9e,0x06,0xd6,0x36,0xde,0xd7,0xfb,0xe1,0x99,0x2a,0xe1,0xaf,0x82, + 0xfa,0x5d,0x2a,0xe5,0x70,0x8a,0x3b,0xd7,0x57,0x23,0x62,0xe5,0xfe,0xfb,0x69,0x00, + 0x6d,0x6b,0x6d,0x86,0xe2,0x9a,0x9a,0xaa,0x69,0x1c,0x43,0x24,0x8c,0x80,0x14,0x32, + 0x2d,0xf5,0x80,0x40,0xd4,0x6d,0xe6,0xfc,0x0e,0x00,0xf7,0xc3,0x15,0xa9,0x1c,0xcc, + 0xe4,0xa2,0xa9,0x11,0xe9,0x0a,0x91,0x15,0x2b,0x63,0xc9,0xfb,0xf8,0xfb,0x0c,0x06, + 0xb4,0x03,0x47,0xa2,0x23,0xd5,0x1c,0xc9,0x23,0xc7,0x59,0x25,0x2c,0x4f,0x23,0x28, + 0x69,0x24,0x98,0x2d,0xd5,0x11,0xdd,0x55,0x58,0x00,0x36,0xdc,0x80,0x0e,0xf7,0xbe, + 0xd8,0x8a,0x9e,0x19,0x24,0x51,0x6b,0x69,0x43,0xa5,0xca,0x82,0x77,0x27,0x65,0xd4, + 0x46,0xdf,0xf7,0xc3,0xf4,0xd3,0x23,0xbc,0x0b,0x34,0x06,0x69,0x14,0x94,0x0a,0xcd, + 0x76,0xba,0xad,0x90,0x71,0xb5,0xbd,0x87,0xdc,0x9d,0xb0,0x4d,0xbf,0xe1,0xe5,0x98, + 0xc4,0xc6,0x14,0x65,0x1f,0x82,0xe0,0x28,0x26,0xf6,0x17,0x3b,0x8b,0x91,0x7b,0xef, + 0xc6,0x2e,0xb0,0xda,0x47,0x20,0xae,0xd8,0x41,0x6c,0x2c,0xa5,0xce,0x1c,0x09,0x85, + 0x84,0xc7,0xd6,0x0b,0x57,0x92,0xb4,0xc8,0x5b,0x71,0x85,0x5a,0xfc,0xe1,0xdd,0x18, + 0xfb,0x46,0x17,0x6a,0x96,0x99,0x64,0xdb,0x09,0xd1,0x82,0x74,0x63,0xcd,0x18,0x9b, + 0x54,0x43,0x69,0xc7,0xdd,0xbb,0xf8,0xc1,0x3d,0xbc,0x7c,0x23,0xc4,0xda,0xa2,0x1d, + 0x63,0xc3,0xaa,0x98,0x74,0x47,0x85,0x88,0xf0,0x0b,0x51,0xb2,0x9a,0x0b,0x82,0x29, + 0x63,0x53,0x3a,0x89,0x09,0x0a,0xd7,0x17,0x1e,0x30,0xe7,0xcb,0x8b,0x2d,0x98,0x31, + 0x61,0x70,0x07,0x8f,0xbe,0x3c,0xd0,0x63,0x37,0x1c,0xe1,0x36,0xa6,0x0e,0xa5,0x2d, + 0x92,0x66,0x11,0x65,0x92,0x48,0xf3,0x29,0xd6,0x37,0x8d,0x94,0x06,0x20,0xfd,0x6f, + 0x8b,0xb6,0x4d,0xd5,0x90,0x54,0x38,0x49,0xee,0x5e,0x59,0x02,0x5c,0x8e,0x09,0x38, + 0xcd,0x43,0x17,0x16,0x63,0x73,0xe3,0x02,0xe6,0xf9,0xc1,0xe9,0xfc,0x8f,0x34,0xcd, + 0x18,0xdb,0xe4,0x69,0x25,0x9d,0x7f,0xfb,0x82,0xfa,0x7f,0xfd,0x8a,0xe3,0x34,0x90, + 0x31,0xc0,0xb9,0xca,0xe6,0x4a,0xe0,0x68,0x21,0x3a,0x47,0xa8,0x07,0x54,0xf5,0xdf, + 0x51,0xf5,0x0f,0xc9,0x6b,0x8a,0xb7,0x36,0xaa,0x68,0x26,0x6a,0x8d,0x0c,0xb1,0x22, + 0x2c,0x31,0xc6,0x10,0xf9,0xd3,0x08,0x62,0x4f,0x1c,0x62,0xe8,0xbd,0x4d,0x57,0x56, + 0xa9,0x2c,0x73,0xc8,0x88,0xd7,0xdb,0x71,0x6b,0x12,0x0e,0xc7,0x7e,0x41,0xc6,0x3b, + 0xf0,0xc7,0xfe,0x13,0xff,0x00,0x0f,0xd2,0xb0,0x2e,0x57,0x2f,0x2d,0x31,0xb8,0xbd, + 0xe4,0x46,0x72,0x7f,0x5b,0xff,0x00,0x5c,0x6a,0x35,0x2d,0x7a,0x99,0x48,0x24,0x82, + 0x43,0x6e,0x41,0xe4,0x03,0xe3,0x6f,0x38,0xe0,0xf8,0x51,0x0f,0x9d,0xed,0x3d,0x45, + 0xfd,0x8f,0xfb,0x5d,0x5d,0x70,0x2d,0x89,0xa4,0x74,0x35,0xf8,0xff,0x00,0x4b,0x2d, + 0xf8,0xd2,0x6a,0xaa,0xf3,0x8c,0xb6,0x4a,0xee,0xb9,0xff,0x00,0x0f,0xa2,0x30,0xbd, + 0x5d,0x0e,0x48,0xd1,0xcd,0x19,0x69,0xa1,0x00,0x97,0x57,0x8d,0x58,0x12,0x5b,0x60, + 0xcf,0xbc,0x7a,0xb5,0xa8,0xb2,0x13,0x8c,0x2f,0xa7,0xba,0xdf,0x33,0xe9,0x6c,0xce, + 0x5c,0xce,0x9b,0x3b,0xce,0xb2,0xfa,0x8c,0xc2,0x43,0x35,0x5d,0x5e,0x5d,0x50,0x7b, + 0xba,0x19,0x83,0x4b,0xa0,0x1b,0x34,0x85,0x99,0x50,0x1d,0x6c,0x01,0x0a,0x49,0x06, + 0xe2,0xdd,0x1f,0xd7,0x9f,0x0e,0x69,0xba,0xee,0x6c,0xb6,0xa2,0x3a,0x86,0xa0,0xcc, + 0xe9,0x64,0x58,0xfe,0x64,0x4c,0xeb,0xaa,0x94,0xeb,0x2f,0x0a,0x8d,0xd5,0x4b,0x96, + 0x00,0xb9,0x56,0xb0,0xf0,0x6d,0x63,0xca,0x59,0xfe,0x51,0x57,0x94,0x66,0xb5,0xf0, + 0xd7,0xd3,0x56,0x65,0xe2,0x1d,0x42,0x28,0x26,0x47,0xee,0x4a,0xaa,0xc4,0x20,0x0c, + 0x55,0x4b,0x2d,0xd7,0xf3,0x69,0x17,0xb7,0x03,0x81,0x87,0xc5,0xe1,0x92,0x09,0xbc, + 0xc0,0x28,0x13,0xdf,0xdd,0x29,0xa5,0x91,0xaf,0x65,0x5e,0x54,0x2d,0x74,0xef,0x1c, + 0x50,0x45,0x18,0x3a,0x63,0x8d,0x56,0xe6,0x3d,0x22,0x30,0x45,0xc8,0x16,0xdc,0x9b, + 0xef,0xb9,0xbe,0x1b,0xa6,0x9a,0x7d,0x71,0xa5,0xcc,0x7d,0xdd,0x5f,0x8d,0x24,0x67, + 0x53,0x58,0x01,0x6d,0xbc,0x1f,0x4f,0xeb,0x85,0xcd,0x51,0x1e,0xa9,0x5c,0xb9,0x2e, + 0x4e,0xa3,0x62,0x6c,0xcd,0xb5,0xc9,0x6f,0x3f,0xd3,0xce,0x03,0x9a,0xa5,0xda,0x9e, + 0x30,0xce,0x04,0x40,0xfa,0x09,0x6b,0x86,0x51,0xb6,0xca,0x38,0x1c,0xe3,0x82,0xde, + 0x2a,0x96,0xe0,0x8d,0xcb,0xf2,0x9c,0xd2,0xba,0x8e,0xbb,0x36,0xa0,0x65,0x5a,0x2c, + 0xad,0x83,0x55,0x4e,0x2b,0x22,0x85,0xd4,0x35,0xc0,0xf4,0x3b,0x02,0xcc,0xc0,0x90, + 0x00,0x06,0xfb,0xf3,0xbe,0x0d,0xab,0xa8,0xbe,0x57,0x08,0xa4,0x90,0xd4,0x53,0xc6, + 0x59,0x5c,0x19,0x4d,0xd9,0xb5,0x79,0x03,0x70,0x2d,0xc0,0xdb,0xc1,0xdb,0x15,0x68, + 0xa7,0x96,0x09,0xe3,0x92,0x94,0xe8,0x99,0x6f,0x66,0x51,0xbd,0xc8,0xb1,0x38,0x90, + 0xca,0x5b,0x4b,0xd4,0xb3,0xc4,0x9a,0x56,0x1d,0x0f,0xa9,0xed,0xa4,0x1d,0xbf,0x29, + 0xfc,0xc7,0xfd,0x30,0xd2,0x81,0xb4,0x57,0x44,0xc5,0xa8,0x83,0x9b,0x4b,0x24,0x85, + 0x27,0x8e,0x39,0x23,0x1b,0xe9,0x90,0xea,0xd4,0x00,0x1e,0xfc,0x9c,0x2a,0xae,0x78, + 0x9e,0x25,0x77,0x55,0x97,0x51,0x21,0x65,0x91,0xb4,0x30,0x1e,0x54,0x11,0xb5,0x87, + 0x1b,0x83,0x84,0x97,0x49,0xc1,0x48,0x61,0x80,0x12,0xda,0x40,0x68,0xc0,0xf1,0xcd, + 0xfe,0xc0,0xf1,0xfd,0xf0,0x2a,0xc4,0x27,0x45,0xd7,0xa7,0xb4,0x97,0x28,0x5b,0x6d, + 0x27,0xff,0x00,0x77,0xfb,0xdb,0x15,0xd0,0xe5,0x28,0x01,0x3c,0x73,0x27,0xa2,0xa9, + 0xa5,0x31,0xd3,0xa2,0xf6,0x00,0xd1,0x05,0x4c,0x41,0xd0,0x6f,0xb1,0x2a,0x4f,0xaa, + 0xfb,0xde,0xfb,0x7d,0x0e,0x13,0x5e,0x61,0xaf,0xce,0x2a,0x64,0xa3,0xcb,0xd2,0x9a, + 0x0a,0x86,0x33,0x43,0x4d,0x18,0x60,0xb1,0x83,0xe1,0x59,0xb7,0x2b,0xf5,0xe3,0xda, + 0xd8,0x0a,0xa4,0x12,0xd2,0x85,0x76,0x95,0x09,0xd4,0x5a,0x55,0xf5,0x1f,0xfa,0x79, + 0xfe,0x98,0xf6,0x73,0x51,0x52,0x1c,0xcc,0xcc,0xd2,0x1b,0x2f,0xac,0x9b,0x90,0x2c, + 0x00,0x1f,0xa5,0xb6,0xf6,0x18,0xbb,0x76,0x29,0x38,0xa0,0x89,0x8c,0xaa,0xc8,0xd0, + 0xa8,0xed,0xa6,0x8d,0x61,0x4d,0xca,0x93,0xb6,0xe4,0xf9,0x17,0xff,0x00,0x7b,0x63, + 0xda,0x98,0xfe,0x5e,0x46,0x57,0x93,0xf1,0x6e,0x17,0xd0,0xd6,0x08,0x9c,0x9b,0xf8, + 0x27,0xc0,0xfe,0xb8,0x72,0x9a,0x8e,0x78,0xe0,0x5a,0xb2,0x08,0x47,0x52,0x15,0xa4, + 0x65,0xf5,0x0b,0xda,0xe0,0x93,0x7b,0x5f,0x6b,0xf1,0x87,0x28,0xbb,0x12,0x39,0x39, + 0xcd,0x4b,0x53,0x50,0x45,0x04,0x83,0xb7,0x18,0x5e,0xf3,0xbd,0xad,0xdb,0x17,0x16, + 0x17,0x62,0xb7,0x3e,0x17,0x7f,0xa6,0x29,0x3c,0xa8,0x06,0x50,0x34,0x52,0xc3,0x15, + 0x5b,0x1b,0x97,0x8c,0x3d,0xc2,0xb2,0x06,0x06,0xcc,0x2d,0x7b,0xdc,0x7d,0xff,0x00, + 0xe9,0xbe,0x0e,0xcd,0xa4,0x6a,0x7a,0xbe,0xc5,0x5c,0xa2,0x49,0xa0,0x91,0x92,0x64, + 0x48,0xd1,0xbb,0x64,0x82,0xa5,0x41,0xbe,0x92,0x41,0x1f,0xa5,0xee,0x08,0xc3,0x14, + 0x79,0x54,0xb1,0x24,0x95,0x35,0x34,0xce,0x61,0x48,0x75,0x3d,0xa4,0xd2,0x35,0x11, + 0x75,0x0d,0xb1,0xd8,0xda,0xe4,0x6d,0xb7,0x91,0x89,0x6c,0xd7,0x21,0xf9,0x1e,0x91, + 0xca,0xb3,0x39,0x32,0xf4,0x81,0x6b,0x2a,0xe7,0x64,0xad,0x59,0xc3,0x89,0xd1,0x74, + 0xaf,0x6c,0x05,0xba,0xc7,0x62,0xac,0x74,0xb7,0xa9,0xb5,0x5f,0xf2,0x81,0x7b,0x36, + 0xd9,0xf9,0x29,0x80,0x57,0x6f,0x76,0xb1,0xf7,0x6f,0x7c,0x13,0xdb,0xc7,0xda,0x31, + 0xf5,0xca,0x5e,0x2c,0x26,0x3b,0x67,0x1f,0x18,0x8e,0x09,0xd3,0xf4,0xc7,0xba,0x7e, + 0x98,0x94,0xa2,0x13,0xb5,0x8f,0x44,0x67,0xdb,0x04,0x85,0xc2,0xc4,0x63,0x02,0x94, + 0x42,0x68,0x38,0xf4,0x26,0x0b,0xed,0xe3,0xee,0xd8,0xc0,0xa5,0x2d,0x0c,0x13,0x0b, + 0x11,0xe1,0xfe,0xd8,0xc7,0xda,0x2d,0x81,0x49,0xad,0x36,0x17,0x4f,0x1c,0xe1,0x2f, + 0x77,0x20,0x9d,0xf6,0xb6,0x1e,0x03,0x1e,0x14,0xc0,0xa4,0x77,0x26,0x42,0xe2,0x83, + 0xf1,0x9e,0xb8,0xd2,0xf4,0x47,0xc8,0xc7,0x6e,0xf6,0x6d,0x5b,0x15,0x3a,0x8b,0xf2, + 0xab,0xf8,0x8d,0xfd,0x42,0x0f,0xd7,0x1a,0x28,0x4c,0x63,0xbf,0x15,0xab,0x17,0x30, + 0xeb,0xee,0x97,0xc9,0x47,0xae,0x3a,0x34,0x49,0xe5,0x5f,0x05,0xa5,0x90,0x35,0x8f, + 0xff,0x00,0xd2,0x25,0xff,0x00,0xf2,0xc6,0x0f,0x10,0x7f,0x95,0xa6,0x71,0xef,0x8f, + 0xbf,0xfa,0x5a,0xf4,0x8d,0xdf,0x3b,0x47,0x6c,0xab,0x1f,0x4b,0x11,0x1f,0x54,0x51, + 0xa2,0x46,0x58,0xa1,0x10,0x8d,0x3b,0x5a,0xc8,0x57,0x63,0x6f,0xa5,0xb1,0xa1,0xcf, + 0xc5,0x39,0x2d,0xa9,0x9a,0x04,0xd5,0x7e,0x41,0x17,0x5d,0xff,0x00,0x45,0x1f,0xbe, + 0x33,0x9e,0x93,0x3a,0xfa,0x9e,0x86,0x74,0x05,0x48,0xa9,0x2c,0x7b,0x6a,0x1b,0x51, + 0xb1,0xdb,0x8d,0xf7,0x1f,0x7e,0x79,0xc6,0x9b,0x34,0x21,0x61,0xa4,0x1a,0x58,0x36, + 0x87,0x04,0x9e,0x0f,0xa8,0x11,0xf6,0xe4,0xed,0xf5,0xc7,0x96,0xf0,0xb7,0xed,0xd7, + 0x34,0x77,0x04,0x7e,0x2f,0xfc,0x2e,0xde,0xb9,0xb7,0xa6,0x71,0xec,0x41,0xff,0x00, + 0x09,0x84,0x47,0x20,0xb2,0x42,0xf3,0x69,0xdf,0x4a,0x1b,0x13,0xf4,0x04,0xed,0x7f, + 0x6c,0x71,0x6f,0xc5,0x3e,0xb5,0xae,0xeb,0xee,0xa1,0x5a,0xac,0xc2,0x9e,0x2a,0x41, + 0x0c,0x09,0x4f,0x4a,0x02,0x32,0x84,0x88,0x39,0x37,0x25,0xac,0xcd,0x76,0x27,0x9f, + 0xd0,0x01,0x8e,0xa3,0xeb,0x9c,0x8b,0xa9,0x6b,0x2a,0x72,0xdc,0xd7,0xa2,0x6b,0xe0, + 0xa4,0xad,0xcb,0x60,0xa8,0x1d,0xb9,0x89,0x3d,0xd3,0x26,0x95,0x05,0x54,0x90,0x9a, + 0x91,0x4b,0xb8,0x66,0xe0,0x8d,0x81,0x27,0x1c,0x9d,0xd5,0x14,0xb9,0x4c,0x82,0x99, + 0x68,0xdd,0xe2,0xcd,0xa0,0x6d,0x15,0xd1,0x49,0xad,0xe2,0x79,0x8d,0xd8,0xb4,0x6d, + 0x21,0x2c,0x00,0x1a,0x41,0x0c,0x49,0xbf,0x85,0xe4,0xee,0xf1,0xd9,0x1e,0x40,0x8f, + 0x80,0x3f,0x3c,0x71,0xf2,0xce,0x17,0x3f,0x40,0xd6,0xe5,0xdc,0x9f,0xd9,0x55,0x63, + 0x13,0xc7,0x31,0x99,0x82,0x3c,0x71,0x92,0x47,0x71,0xac,0x0b,0x00,0x00,0xd2,0x07, + 0x1b,0xf1,0xf6,0xc3,0x55,0x75,0x52,0x4c,0x6f,0xe2,0x35,0xd3,0xc0,0x3f,0xf6,0x3e, + 0x6e,0x7c,0xdf,0x0b,0xae,0x73,0x3c,0xad,0x1b,0x6a,0x76,0x8c,0x69,0x17,0x16,0x16, + 0x03,0x91,0xfb,0x63,0xc8,0xe9,0x69,0xa4,0xa2,0x95,0x9a,0xb9,0xe3,0xab,0x59,0x11, + 0x22,0x81,0xa3,0xf4,0x4a,0x8d,0xab,0x5b,0x19,0x2f,0xe9,0xb1,0x0b,0xb1,0x06,0xf7, + 0x26,0xe2,0xdb,0xf9,0x30,0x2f,0x2b,0xb2,0x3b,0x94,0xba,0x4d,0x71,0xc2,0xb1,0x88, + 0x15,0xe6,0x77,0x06,0x11,0x12,0x5d,0xd8,0xb0,0xb1,0x1b,0x72,0x36,0xd8,0x0d,0xef, + 0x7c,0x4e,0x27,0x46,0xe7,0x07,0xa3,0x2b,0x3a,0x95,0xea,0x56,0x1c,0x9a,0x0a,0xaa, + 0x78,0xcb,0xa0,0x2f,0xad,0xa4,0x52,0x48,0xd4,0x36,0x0e,0x80,0xa5,0xd1,0x88,0x27, + 0x58,0x23,0x83,0x8a,0xed,0x4c,0x3d,0x8a,0xc7,0x84,0x4d,0x03,0x98,0xae,0xaf,0x34, + 0x4f,0xad,0x01,0x1e,0x15,0x85,0xee,0x2e,0x0d,0x88,0x3b,0xdc,0x11,0xce,0x2e,0x99, + 0x7e,0x6d,0x57,0x45,0xd3,0xf4,0x5f,0xf9,0x9d,0x36,0x61,0x94,0x4f,0x17,0xca,0x55, + 0xc1,0x51,0xeb,0x7a,0x21,0xea,0x36,0x58,0x18,0x9d,0xc2,0xc9,0xe9,0xa8,0x09,0x70, + 0x5c,0x88,0xcd,0xd0,0x9c,0x68,0x89,0x8d,0x25,0xdb,0xc2,0x8e,0xbe,0x42,0x84,0xaa, + 0x8a,0x9a,0x04,0x1a,0x6a,0xd1,0xa1,0x64,0xee,0x47,0x24,0x8e,0x19,0xdd,0x2c,0x74, + 0x8f,0x45,0xc0,0x90,0x9d,0x8a,0x7f,0x29,0x06,0xed,0x7d,0xf1,0x0f,0xf8,0x91,0x86, + 0x8f,0x41,0x50,0xc7,0x6d,0x62,0xf6,0x00,0xdf,0x6f,0x6b,0xff,0x00,0xdb,0x13,0x99, + 0xad,0x7e,0x58,0xd5,0xeb,0x0e,0x4d,0x4d,0xdb,0xa5,0x44,0x58,0xee,0xf1,0xaa,0x2a, + 0xc9,0xa5,0x44,0x81,0x08,0x79,0x35,0x8d,0x44,0xd8,0x86,0xf5,0x02,0x09,0xb6,0x22, + 0xa2,0x8c,0xba,0xf6,0xfb,0xb1,0x9d,0x6c,0x74,0x48,0x1f,0x4e,0xb3,0xa7,0x71,0xf5, + 0x03,0xc9,0xc6,0x47,0x7c,0x0e,0x21,0x11,0xc2,0x00,0x03,0x30,0xd0,0xd2,0x73,0x72, + 0x37,0x23,0xea,0x4d,0xf8,0xc4,0x86,0x53,0x92,0x54,0x67,0x95,0xb4,0xb4,0x99,0x7d, + 0x44,0x66,0xa2,0xa2,0xa1,0x22,0x8f,0xe6,0x25,0x54,0x40,0xce,0x48,0x0c,0xcc,0x6c, + 0x00,0xb8,0xe7,0xed,0xef,0x85,0x44,0xa6,0x49,0x5c,0xb4,0x41,0xa0,0x03,0x44,0x8c, + 0xa0,0xdd,0x0b,0x02,0xba,0xbc,0x6e,0x2f,0x7b,0x79,0x20,0x0b,0xe2,0xd5,0xd3,0xd4, + 0xd0,0x53,0x56,0x49,0xd4,0xed,0x43,0x51,0x53,0xd2,0xf9,0x7d,0x74,0x7a,0x52,0xbc, + 0xe8,0x7a,0x88,0xd1,0x89,0x4a,0x76,0x75,0x42,0x0b,0xb2,0x8b,0x90,0xa3,0x4f,0xa7, + 0x72,0x2e,0x30,0xcd,0x69,0x7f,0x05,0x42,0x68,0x5a,0x98,0xcd,0xa2,0xac,0xe9,0x64, + 0x8b,0x2a,0xce,0x72,0xfa,0x19,0x25,0x9a,0xa9,0xa9,0xea,0x69,0x25,0x96,0x58,0x12, + 0xa6,0x24,0x91,0xd4,0x2c,0x82,0x21,0xa6,0xcb,0x34,0x41,0x81,0x12,0x96,0x23,0x48, + 0x51,0x66,0x6b,0xd4,0xb3,0x6c,0xa6,0x78,0x62,0xcc,0xab,0x04,0xd4,0x30,0xd1,0x89, + 0x9f,0xb6,0x24,0x66,0x32,0xd4,0x15,0x3d,0xbb,0xc6,0x24,0x44,0x76,0x17,0x66,0x04, + 0xdb,0x90,0x6e,0x01,0x18,0x77,0xaa,0xba,0x99,0x3a,0xa3,0xa8,0xa5,0xcc,0x3e,0x56, + 0x8f,0x24,0xa3,0x92,0x55,0x58,0x20,0xa4,0x8d,0x92,0x0a,0x24,0x5b,0x5b,0xb4,0xaa, + 0x01,0xf1,0xc9,0x1a,0x8d,0xc9,0x37,0x24,0x9c,0x2f,0x32,0xca,0xe4,0xc8,0xba,0x4e, + 0x80,0xbd,0x4d,0x14,0xb3,0x67,0x32,0xad,0x42,0xc0,0x64,0x2f,0x51,0xd9,0x54,0x2c, + 0x09,0x42,0xb7,0x8d,0x75,0xb3,0x02,0x49,0x05,0xc8,0xba,0x86,0x4d,0xf1,0x69,0x0c, + 0x37,0xb4,0x60,0x71,0xdf,0xeb,0xf3,0x41,0xa4,0xd6,0x7a,0xa0,0x29,0x23,0xcd,0x73, + 0xfc,0xd2,0x25,0xa9,0x92,0x49,0xe5,0xae,0x24,0xcc,0x62,0x89,0x7b,0xaf,0x18,0x61, + 0xa8,0xec,0x18,0x8d,0xc5,0xf8,0x03,0xc9,0xdb,0x7c,0x47,0x55,0xe5,0xad,0x91,0x67, + 0x35,0xb4,0x79,0x8c,0x31,0xc9,0x3d,0x34,0xce,0x8c,0x24,0x2c,0x51,0xad,0x7b,0x36, + 0xd6,0x6b,0x1d,0x88,0x3b,0x5c,0x11,0xe0,0xe2,0x4b,0x20,0xea,0x9c,0xdb,0xa3,0xab, + 0xea,0x6a,0xb2,0x3a,0xb6,0x41,0x59,0x4a,0x68,0xea,0x2e,0x10,0x34,0x91,0x38,0x02, + 0x45,0x0c,0x41,0x31,0xdf,0x70,0x19,0x48,0x60,0x0d,0xae,0x2e,0x6f,0x75,0xf8,0xa7, + 0xd3,0x59,0x7e,0x53,0x47,0x47,0x51,0x91,0x57,0x52,0x55,0x09,0x16,0x2a,0xda,0x88, + 0xe2,0x8a,0x99,0xbb,0x71,0xce,0xa0,0xa0,0x6a,0x84,0x92,0xf2,0x3f,0x70,0xc8,0xbd, + 0xa0,0xa7,0x40,0x8e,0xe5,0x8a,0xd8,0x90,0x00,0x2c,0x2e,0x1c,0xde,0x7d,0xfb,0xec, + 0x8e,0xe2,0x0d,0x2e,0xbf,0x60,0x8b,0xf9,0x9d,0x07,0xa8,0x2e,0xed,0x6f,0x57,0xb7, + 0xdf,0xe9,0x8f,0xb4,0xaf,0x3a,0x97,0x6e,0x77,0xfe,0xd8,0xa7,0x43,0x5d,0x22,0x26, + 0xb3,0x32,0x98,0x94,0x69,0x11,0x0d,0xf4,0xa9,0x04,0xab,0x00,0x6e,0x4d,0x82,0xdf, + 0x6f,0x6e,0x45,0x8e,0x1c,0x9b,0x39,0x75,0xa3,0x7e,0xf4,0x8b,0x1f,0x65,0x9c,0xa3, + 0x46,0x01,0xbc,0x80,0x6f,0xeb,0xf3,0xc8,0x3f,0xbf,0xd2,0xfd,0x46,0xff,0x00,0xcb, + 0x5c,0xe0,0x49,0x8c,0x0f,0x4e,0x73,0xf3,0xb1,0xfb,0x7d,0x17,0x28,0xf8,0x53,0x47, + 0xf7,0x7b,0xfb,0x2b,0x60,0x0a,0xd6,0x21,0x87,0x17,0xb1,0x36,0x36,0xc2,0xbb,0x78, + 0x85,0xa5,0xcd,0x23,0x34,0x09,0x22,0x54,0x68,0x33,0xaa,0xb2,0x48,0x6c,0x44,0x84, + 0x91,0xc6,0xdc,0x6f,0x6b,0x11,0xcf,0xf5,0x94,0xa7,0xad,0x95,0x85,0xe7,0x8f,0xd2, + 0xa4,0xab,0x37,0x04,0x69,0x04,0x93,0x61,0xb0,0x1c,0x5b,0x1d,0xcd,0x37,0xfc,0x82, + 0x29,0x1a,0xc3,0x20,0xe7,0x92,0x3a,0x1f,0x51,0xcf,0xae,0x2f,0xd2,0xd6,0x39,0x7c, + 0x3d,0xcd,0x27,0x69,0xe3,0xdf,0x29,0xfd,0x1b,0x63,0xdd,0x18,0x7c,0x28,0x3f,0x94, + 0xab,0x73,0xc1,0xbf,0x18,0xfb,0x46,0x3d,0x43,0x5c,0x1e,0x37,0x34,0xd8,0x5c,0xb2, + 0x0b,0x4d,0x14,0xc8,0x5c,0x7b,0xa7,0x0e,0x69,0xc7,0xda,0x70,0x69,0x4b,0x4d,0xdb, + 0x1f,0x05,0xbe,0x1c,0xd1,0x8f,0x42,0x60,0x52,0x96,0x9b,0xd1,0x8f,0x7b,0x78,0x78, + 0x26,0x15,0xa7,0x6e,0x30,0x29,0x1b,0x4c,0xa4,0x26,0x47,0x54,0x51,0xea,0x62,0x00, + 0xfd,0x71,0xcd,0xf3,0x66,0x69,0x9f,0x7c,0x53,0xce,0xf3,0x60,0xea,0x60,0x8e,0x7a, + 0x8e,0xc9,0x61,0x7b,0x47,0x0a,0x76,0x90,0xfd,0xb6,0xbf,0xeb,0x8e,0x82,0xea,0x7c, + 0xea,0x3e,0x99,0xe9,0xbc,0xdb,0x38,0x95,0xc2,0x1a,0x4a,0x57,0x30,0xdc,0xdb,0x54, + 0xcc,0x34,0xc4,0xa3,0xea,0x5c,0xa8,0x03,0x1c,0xbd,0x92,0xe5,0xf2,0x64,0x99,0x65, + 0x44,0x55,0x9d,0xb9,0x2a,0xf3,0x0a,0x55,0x87,0xb6,0x37,0x31,0xa1,0x20,0x9b,0xfd, + 0x58,0xfe,0xd8,0xf3,0x7e,0x35,0x26,0x1b,0x17,0xd7,0xfc,0x7f,0x2b,0xb3,0xe1,0xac, + 0xcb,0x9f,0xf4,0xf7,0xf8,0x5b,0x1e,0x41,0x0c,0xd4,0x99,0xbe,0x5c,0xd5,0x33,0x01, + 0x15,0x64,0xf1,0xbc,0x67,0xb9,0x70,0x6c,0x6f,0xaa,0xe2,0xe7,0x6b,0xdb,0xed,0xb5, + 0xb6,0xc6,0x89,0x4d,0xad,0xe1,0xa7,0x2b,0xa4,0xc2,0xae,0xc0,0x1d,0x5f,0xe6,0x06, + 0xc6,0xc3,0x8b,0x91,0xfd,0x0f,0xb6,0x32,0x3a,0x2c,0xde,0xba,0x89,0x68,0xd6,0x5a, + 0xa9,0x33,0x3a,0xd8,0x66,0xee,0x04,0xa9,0x95,0x12,0xdb,0x83,0xda,0x53,0x1a,0x0d, + 0x80,0x50,0x37,0x04,0xdc,0x93,0xbf,0x18,0xd2,0xb2,0x3c,0xd3,0x2c,0xcd,0xb2,0x49, + 0x33,0xac,0x9e,0x72,0xd0,0xc6,0xad,0x2c,0xb0,0x4b,0x11,0xef,0xc6,0xc9,0xbb,0x44, + 0x55,0x41,0xbc,0x80,0x03,0x60,0x3f,0x36,0xc4,0x73,0x8f,0x33,0x04,0x9e,0x4e,0xa2, + 0x39,0x0f,0x00,0x8b,0xf9,0x5e,0x7f,0x0b,0xb7,0x2b,0x3c,0xc8,0x5e,0xc1,0xd4,0x14, + 0x9e,0xa9,0x19,0xc5,0x25,0x34,0x39,0xc7,0x4f,0xe6,0xcb,0x40,0xf9,0x4a,0xcb,0x3d, + 0x45,0x25,0x44,0x1d,0xda,0x7a,0xc8,0xf4,0x6e,0x1c,0x0f,0x56,0xa5,0xdd,0x96,0xc7, + 0x9d,0xac,0x71,0xc7,0x1d,0x67,0x43,0x4b,0x47,0x9f,0x37,0x62,0xa6,0x2a,0xfa,0x2a, + 0xc2,0xf5,0x11,0x32,0xdb,0xbc,0xea,0xfb,0xe8,0x94,0x7e,0x6e,0xe8,0x27,0xd4,0x08, + 0x04,0x1b,0x80,0x48,0x18,0xee,0xe3,0x16,0x96,0x23,0x63,0x63,0x8a,0xa7,0x51,0x7c, + 0x38,0xca,0x73,0xc4,0xea,0x4a,0xaa,0x4a,0x7a,0x4a,0x3c,0xff,0x00,0x3d,0xa5,0x10, + 0x4b,0x99,0x4f,0x4a,0xb5,0x26,0x32,0x36,0xd6,0x8a,0xdf,0x91,0x8a,0xfa,0x49,0x52, + 0x2f,0xb1,0x37,0x20,0x63,0xd7,0x78,0xa7,0x86,0xbb,0x58,0x2d,0x87,0x23,0xf8,0xe9, + 0xd3,0xb7,0x6e,0xf6,0xbc,0xce,0x97,0x54,0xd8,0x70,0xe0,0xb8,0x56,0xa9,0x5f,0x44, + 0x92,0xd6,0xb8,0x62,0x01,0x05,0x98,0xdc,0x36,0xd6,0x00,0x0f,0xd0,0x62,0x32,0x33, + 0xa2,0xd7,0x88,0xbf,0x21,0x83,0x86,0xd2,0x4d,0xf6,0x20,0x03,0xcf,0xef,0xf6,0xc6, + 0xa1,0xf1,0x43,0xe1,0x75,0x47,0xc3,0xda,0xea,0x2a,0x69,0xa7,0x7a,0xd3,0x3a,0xb2, + 0xc5,0x5b,0xa5,0x60,0x8e,0x76,0xda,0xca,0xaa,0xcc,0x48,0x1b,0x91,0x76,0xb0,0x3a, + 0x4d,0xaf,0x66,0xb5,0x1b,0x25,0x6c,0xae,0x5c,0xe6,0x9a,0x2e,0xab,0xa8,0xad,0xa7, + 0xcb,0x8b,0x98,0xe6,0x7a,0x05,0x59,0x25,0x8a,0xed,0x62,0xc1,0x5b,0x63,0x6d,0xc9, + 0x1c,0x9b,0x5b,0x6b,0xdc,0x78,0x67,0x42,0xf8,0x5e,0x63,0x90,0x51,0x5e,0x8a,0x37, + 0x87,0x37,0x73,0x72,0x11,0x14,0xa0,0x56,0x56,0xcd,0x15,0x12,0xc9,0x95,0xb4,0x90, + 0x2c,0x64,0xc6,0xed,0xb3,0x69,0x0a,0xcc,0xe7,0x9b,0x30,0x0e,0x58,0x02,0xaa,0x35, + 0x9f,0xe5,0x5b,0x60,0x9a,0x3e,0x91,0xea,0x5c,0xcd,0x69,0xf2,0xfc,0x9e,0x0a,0xac, + 0xc2,0x92,0x6a,0x81,0x47,0xdd,0xa4,0x46,0x92,0x00,0xd6,0x59,0x0a,0x92,0x05,0xec, + 0x35,0x6a,0x24,0xd8,0x7a,0x49,0xb9,0xb5,0xf1,0x2f,0xd7,0xc3,0x2e,0x83,0xaa,0x16, + 0x93,0xa7,0x72,0xea,0x4a,0x5c,0xac,0xc3,0x1b,0x41,0x48,0xbd,0xc8,0x9a,0x4d,0x2b, + 0x6e,0xe3,0xa3,0x92,0x61,0x9a,0x45,0x01,0x98,0x6a,0xb0,0xb8,0x22,0xf7,0x18,0xbc, + 0xf4,0x8b,0x66,0xd5,0x79,0xbe,0x51,0x9b,0xf4,0x55,0x55,0x76,0x57,0xd2,0x0f,0x99, + 0xc4,0x4d,0x2d,0x16,0x71,0x19,0x7a,0x4a,0x91,0x10,0x94,0xc7,0x31,0x91,0x17,0xba, + 0x00,0xa7,0x8e,0x46,0x25,0x19,0x40,0x21,0x2e,0x48,0x38,0xd5,0x1c,0x21,0xcf,0x2d, + 0x76,0x73,0xd3,0xdf,0x09,0x5c,0xf2,0xd6,0xd8,0xfc,0xaa,0x7e,0x51,0xd0,0x47,0xa8, + 0x7a,0x85,0xba,0x59,0x2a,0xa3,0xca,0x6a,0xa8,0xc5,0x45,0x4b,0xd5,0x66,0x37,0x86, + 0x37,0x58,0xe2,0x2d,0xb4,0x41,0x49,0x55,0x3a,0x79,0x66,0xb9,0xd5,0xc0,0x26,0xc6, + 0xbd,0xd4,0x94,0xd9,0x74,0x74,0x99,0x72,0x64,0xb9,0xab,0x67,0x6e,0xf1,0x39,0x7a, + 0x85,0xa1,0x7a,0x70,0x02,0x80,0x02,0xa8,0x3f,0x9a,0xd6,0x3a,0x9a,0xc0,0x9b,0x0b, + 0x83,0xc9,0xd1,0xba,0xd7,0xe2,0x19,0xea,0x7c,0xab,0x33,0x81,0x60,0xa8,0xff,0x00, + 0xf9,0x04,0x89,0x99,0xe6,0x31,0x32,0x41,0x51,0x2a,0x11,0x00,0x30,0x40,0x34,0x20, + 0xb4,0x40,0x2a,0x36,0xa5,0x21,0xb6,0x72,0xc0,0x1d,0xb1,0x56,0x3d,0x53,0x5f,0xd7, + 0x39,0xae,0x55,0x43,0x9d,0xd5,0x53,0x0c,0xb2,0x8d,0x56,0x86,0x98,0x53,0xa4,0x94, + 0xc9,0x43,0x4e,0xe5,0x17,0x5a,0x98,0xd0,0xd8,0x5c,0xdc,0x97,0x0d,0x7d,0x46,0xf7, + 0x3a,0x6c,0x25,0x64,0x39,0x63,0x32,0x6f,0x9f,0x67,0x14,0x3f,0x8f,0x54,0x1a,0x5e, + 0x72,0xec,0x7a,0x2a,0x65,0x54,0x62,0x16,0xa6,0x86,0x72,0xf0,0xdd,0x01,0x69,0xe4, + 0xd6,0xb7,0x24,0x9b,0x3d,0x80,0xbe,0x9d,0x2c,0xbc,0x5f,0x82,0x77,0xbe,0x2e,0x1d, + 0x43,0x9c,0x66,0x34,0xcb,0x1d,0x08,0xea,0x0a,0x73,0x94,0xc1,0x40,0x68,0x12,0x4c, + 0xa6,0x42,0x60,0xa9,0x85,0x64,0xb8,0x89,0xb6,0x05,0x75,0x2a,0x87,0x3a,0xb5,0x10, + 0x0a,0x86,0xdf,0xd2,0x27,0x7e,0x31,0x43,0x90,0x36,0x64,0x99,0x57,0x42,0x65,0xc9, + 0x96,0x50,0xe5,0xcd,0x51,0x18,0xa7,0x8c,0x2b,0x2c,0xae,0x92,0x39,0x9e,0x56,0x76, + 0x3a,0xd8,0xad,0x92,0x21,0x7e,0x44,0x6d,0xa4,0x5b,0x76,0x7f,0xe1,0x1e,0x61,0x97, + 0x53,0x75,0x65,0x16,0x5b,0x53,0xd3,0xf9,0xad,0x6d,0x26,0x65,0x2b,0x52,0xcb,0x4b, + 0x4d,0x54,0xd1,0x5e,0x4b,0xc6,0x10,0xdc,0x5b,0x59,0x47,0x25,0xda,0xc0,0x14,0xb8, + 0x23,0xf2,0xe2,0x9f,0x23,0x64,0xde,0x4d,0xf5,0xe7,0xa7,0xbc,0xa3,0xbf,0xe0,0xdf, + 0x5f,0x45,0x55,0xa1,0xc8,0x68,0x73,0x2c,0xf3,0x46,0x57,0x98,0x7c,0xb5,0x6b,0x4e, + 0xb3,0xd2,0xa0,0x54,0xab,0x81,0x23,0xd4,0x35,0x09,0x25,0x60,0xa1,0x84,0x71,0x87, + 0x63,0x25,0x8a,0x92,0x85,0x74,0x8b,0x92,0x20,0x33,0x89,0x68,0x9e,0xbe,0x17,0xc8, + 0xd2,0xa6,0x38,0xd2,0xda,0xa1,0x90,0xac,0x84,0xc8,0xac,0x47,0xa4,0x82,0x75,0x29, + 0x50,0xb6,0x04,0x93,0xc8,0xdc,0x01,0x8e,0x87,0xeb,0x8f,0x86,0xb9,0xf6,0x4b,0x3e, + 0x70,0x99,0x4d,0x1d,0x07,0x50,0xe7,0x75,0x14,0xd5,0xf5,0xbd,0x43,0x4b,0x46,0x85, + 0x68,0xe8,0x19,0xe1,0x7e,0xdb,0x98,0xc0,0x29,0x0b,0x85,0x92,0x46,0x45,0x27,0x51, + 0x5d,0x4c,0xe0,0x06,0x5b,0xe4,0x59,0x5f,0x40,0xd5,0x67,0xf9,0xb5,0x75,0x1e,0x48, + 0x2a,0xea,0xba,0xad,0x2b,0x97,0xe5,0xf2,0x6a,0x7a,0x46,0xec,0xc3,0x1f,0x78,0x2b, + 0x34,0xf2,0x33,0x2e,0x88,0xc0,0x70,0x3d,0x20,0xd8,0x30,0xd5,0xa4,0x5e,0xd7,0x3f, + 0x4a,0xf6,0x1d,0x95,0xc9,0xf7,0x4a,0x36,0x56,0xb8,0x6e,0xbc,0x29,0xaf,0x86,0x59, + 0x6f,0x49,0x55,0xdb,0x3b,0xcf,0x7a,0x83,0x21,0xe9,0xfc,0x83,0x2a,0x99,0x7b,0xf4, + 0xd9,0xac,0x6d,0x5b,0x59,0x39,0x2a,0xe5,0x62,0x4a,0x54,0x16,0xa8,0x41,0x21,0x0d, + 0xa9,0xc2,0xef,0xe9,0x6b,0xa8,0xb6,0x23,0xb3,0xea,0x0a,0x57,0x34,0xbd,0x3b,0xd2, + 0x99,0xff,0x00,0x4f,0x75,0x65,0x0e,0x63,0x3a,0xe6,0x02,0xae,0x9b,0x2b,0x92,0x96, + 0x68,0x6a,0xe5,0xfc,0x03,0x08,0xd7,0x1e,0xb0,0x03,0x59,0xc4,0x48,0x0d,0xd2,0x30, + 0xd6,0x1c,0x62,0xd9,0xf1,0x50,0xf5,0x14,0x3d,0x51,0x2d,0x07,0x5c,0xcd,0xd2,0x9f, + 0xe1,0x63,0x30,0xa7,0xae,0xcd,0x21,0xe9,0xda,0x7f,0x9a,0x83,0x2f,0x9b,0xb3,0xd8, + 0x8f,0xbd,0x35,0x8c,0xab,0x60,0xa4,0x76,0x4b,0xd8,0xf6,0xcd,0x85,0xca,0x16,0xc8, + 0xf2,0x6c,0x9e,0xb3,0x39,0x58,0xd3,0xa7,0xfb,0xf3,0x57,0xc3,0xdb,0x99,0x9d,0x51, + 0xc3,0xc2,0xfa,0xbb,0x6a,0x3b,0x83,0x61,0xae,0x49,0x10,0x29,0x60,0x05,0xca,0xad, + 0xc1,0xe6,0x38,0x06,0x1d,0x80,0x7f,0x25,0x16,0xfc,0x5f,0x19,0x3c,0xfd,0x97,0x42, + 0x65,0xb9,0x93,0x49,0x9e,0xd3,0x53,0xe6,0x66,0x65,0xa4,0x59,0x5a,0x18,0x94,0xc6, + 0x59,0x5e,0xda,0xb5,0x07,0x3b,0x34,0x71,0x82,0xa7,0x7d,0xfd,0x5b,0x58,0x03,0xab, + 0x13,0x35,0x30,0x54,0xc7,0x93,0xd3,0xc7,0x47,0x13,0xd6,0x52,0x4b,0x4e,0x3b,0x73, + 0x34,0xc2,0x46,0x54,0x01,0x8f,0xa6,0x35,0x2a,0xec,0x34,0x9d,0xc8,0xdc,0x8f,0xbd, + 0xf1,0x49,0xeb,0x0a,0x79,0x68,0xea,0x28,0xa7,0x55,0xa4,0xa2,0xa8,0x65,0x64,0xac, + 0xac,0x92,0xb7,0xbe,0xee,0x0b,0x10,0x15,0x52,0x37,0xee,0x49,0xa5,0x6d,0x70,0x55, + 0x4f,0xe5,0xe7,0xc8,0xe3,0x3a,0x5a,0x2c,0xfe,0x09,0x28,0x63,0x8a,0x7c,0xc1,0x35, + 0xc4,0x22,0x88,0xe8,0x26,0x22,0xba,0xac,0xce,0x14,0x38,0x7f,0x4e,0xa3,0x6d,0xef, + 0xcf,0x24,0x63,0xca,0x16,0x97,0x9d,0xcd,0x5a,0x2e,0xb9,0x5a,0xae,0x5d,0x99,0xc8, + 0xf9,0xa5,0x3e,0x5a,0x63,0x32,0x3d,0x2d,0x38,0xa7,0x67,0x91,0xbb,0x65,0x27,0x21, + 0xc9,0x65,0x53,0xe9,0xd1,0xa5,0x35,0x05,0xe0,0x06,0x17,0x22,0xc4,0xe2,0x58,0x67, + 0x54,0xff,0x00,0xe2,0x8d,0x92,0xc2,0xb3,0x1e,0xd4,0x01,0x9e,0x49,0x63,0xd7,0xde, + 0x46,0x02,0xe3,0x52,0x82,0x48,0x0c,0x09,0xb8,0xb2,0x9b,0x11,0xee,0x71,0x9d,0x47, + 0x9f,0xc3,0x4f,0x55,0x44,0x52,0x82,0x79,0x73,0x29,0x24,0x8e,0x10,0x8d,0x48,0xcd, + 0x2c,0x68,0xcf,0xaa,0x56,0x8e,0x26,0x21,0xc2,0xdc,0x15,0xd4,0xc3,0x4b,0x59,0x85, + 0xec,0x06,0x35,0xec,0x8f,0x20,0x87,0x25,0xa4,0x9e,0x64,0x92,0x64,0xa9,0x99,0x3f, + 0x16,0x59,0x6a,0x02,0x33,0x36,0xa6,0x25,0x6f,0xab,0xd4,0x54,0xd8,0x59,0xad,0x60, + 0x83,0xdb,0x7e,0x9e,0x80,0x3e,0x46,0x08,0xae,0x80,0x36,0x4e,0x05,0x00,0x3a,0x72, + 0x72,0x40,0x07,0xa0,0xc2,0xcb,0x33,0x83,0x0e,0xee,0x7a,0x57,0xbe,0xca,0x52,0x8e, + 0x58,0xe5,0xd1,0x23,0x98,0xe1,0x1a,0x03,0x04,0x0f,0xb8,0xb9,0x37,0xbf,0xd8,0x9b, + 0x7b,0x1c,0x48,0x68,0xbf,0x1b,0xe0,0x16,0xf9,0x97,0x82,0x9e,0x3a,0xe9,0xde,0x08, + 0xd6,0xcd,0x23,0xb4,0xd1,0xbb,0xc8,0xdc,0x85,0x24,0x0d,0x2d,0x7b,0x92,0x2d,0xed, + 0x73,0xe3,0x05,0x06,0xb2,0xc6,0xdd,0xd8,0xe0,0x85,0x41,0x5f,0x5b,0x85,0xd8,0x1f, + 0x00,0xfe,0x9b,0xf1,0x8f,0xa1,0xf8,0x5e,0xad,0xe0,0x08,0xe4,0x38,0x00,0x73,0xc8, + 0x3d,0x8e,0x78,0x1c,0x5d,0x0e,0x29,0x70,0xb5,0x51,0x0b,0xdc,0xde,0xa7,0xdf,0xf3, + 0xf5,0x4e,0x76,0x89,0xc7,0xdd,0xaf,0xa6,0x0a,0x8d,0x43,0xa2,0xb2,0xee,0x08,0xc3, + 0xbd,0xaf,0xa6,0x3d,0x10,0x70,0x70,0xb0,0xb9,0xa7,0x18,0x40,0x88,0x8f,0xb6,0x1e, + 0x5a,0x4d,0x50,0x99,0x10,0xec,0xa7,0xd4,0x0e,0x0c,0x40,0x52,0xfa,0x7c,0x8c,0x27, + 0x41,0xb1,0xb7,0x9e,0x70,0x2c,0xa8,0x81,0xed,0x1c,0x7a,0x22,0x3e,0x06,0x0b,0x11, + 0xe1,0x6b,0x11,0x90,0x85,0x51,0x73,0xf4,0xc3,0x28,0xb2,0x7f,0x88,0xd5,0xd0,0x54, + 0x67,0x54,0x59,0x4e,0x63,0x96,0x66,0xf3,0xc3,0x48,0x82,0xae,0x36,0xa7,0x68,0x04, + 0x0f,0x23,0x82,0x16,0x42,0x5a,0x40,0xc1,0x96,0xcc,0xa2,0xe3,0x6b,0xb1,0x17,0xe7, + 0x14,0xba,0x3a,0x1c,0xa6,0x9e,0xaa,0x4a,0x9a,0x9a,0x0c,0xfe,0x5a,0x89,0x80,0x31, + 0xb9,0x9a,0x8a,0x15,0x8d,0x7f,0x98,0x0d,0xf9,0x3b,0x0b,0x9d,0xad,0xe2,0xe6,0xf8, + 0xb9,0x7c,0x45,0x82,0x49,0xfa,0x9e,0x1a,0x8a,0x60,0x4d,0x2c,0xb4,0x71,0x76,0x24, + 0x2d,0x71,0x30,0x17,0x05,0x94,0x73,0xa7,0x51,0x20,0x37,0x0d,0x63,0x6d,0xb7,0xc5, + 0x33,0x32,0xa7,0xaa,0x19,0x5e,0x64,0x23,0x1f,0x88,0x29,0x1c,0x46,0x4a,0xb1,0x00, + 0xed,0x71,0x60,0x09,0x1c,0xf2,0x2e,0x45,0xb6,0x18,0xf9,0x7f,0x88,0x6a,0x1f,0x26, + 0xad,0xe5,0xae,0xb1,0x74,0x17,0xb5,0xd2,0x46,0xd6,0x40,0xc0,0x45,0x61,0x1c,0xdf, + 0xe0,0xf5,0x08,0x42,0x65,0x39,0xcc,0xad,0xea,0x7d,0x0b,0x9b,0xd2,0x02,0x3d,0x87, + 0x06,0xde,0x39,0xfe,0x98,0x7f,0x25,0xad,0xa7,0xe9,0xec,0xd6,0xa2,0xa7,0x21,0xe9, + 0xfc,0xf1,0xeb,0x2a,0x90,0x47,0x35,0x31,0xcf,0x29,0x4a,0x54,0x93,0x7d,0x20,0x03, + 0x15,0xc3,0x86,0x37,0x06,0xff,0x00,0xeb,0x8a,0xc7,0x45,0xc5,0x5b,0x0d,0x05,0x72, + 0xce,0x6a,0x6a,0x27,0x69,0xd1,0x8c,0x92,0x46,0x54,0x8b,0xa7,0x1b,0xdb,0x60,0x76, + 0xe0,0x7d,0xaf,0x7b,0xdb,0xb2,0x29,0x29,0x93,0xaa,0x72,0x24,0xcc,0xab,0xa1,0xcb, + 0x10,0xd7,0xc0,0xcb,0x35,0x61,0x2b,0x10,0x2b,0x22,0x9f,0x5b,0xef,0xa0,0x11,0x7b, + 0x31,0x16,0xb8,0xb1,0x22,0xf7,0xc7,0x3d,0xcf,0x94,0x58,0x25,0x6c,0x01,0x87,0x2b, + 0x65,0xa1,0x9a,0x3c,0xc2,0x86,0x92,0xb2,0x0b,0x98,0xaa,0xa0,0x8e,0x64,0xbf,0xb3, + 0x28,0x3f,0xde,0xd8,0x7e,0x4d,0x10,0x44,0xf2,0xcc,0x42,0x46,0xbb,0xb1,0x3c,0x0c, + 0x42,0xf4,0x75,0x7c,0x23,0xe7,0x7a,0x7a,0x48,0xa4,0xa7,0xae,0xca,0xaa,0x27,0xed, + 0xa3,0x59,0x92,0x5a,0x46,0x9d,0x9a,0x19,0x23,0x91,0x49,0x56,0x5d,0x0e,0x83,0x63, + 0xed,0x8a,0x87,0xc5,0xce,0xb6,0xcc,0xba,0x72,0xb6,0x96,0x8b,0x28,0x96,0xb2,0x90, + 0x22,0x89,0x2a,0xdf,0xe5,0x41,0x46,0x42,0xa4,0x6c,0xc4,0xee,0x34,0xb5,0xfe,0x8e, + 0x8b,0xc7,0x9f,0xa4,0x9f,0x13,0x89,0xba,0x36,0xea,0x5d,0xd6,0xbb,0x72,0x7e,0xdc, + 0x2f,0x16,0x74,0x8f,0x1a,0x83,0x0f,0x6f,0xdb,0xfd,0xab,0x4e,0x5d,0x9e,0xf4,0xef, + 0x5a,0x54,0x7c,0x83,0xd1,0x0a,0xd3,0x0e,0xa9,0x61,0x5a,0xfa,0x00,0xc9,0x72,0x19, + 0x0b,0x2e,0xa0,0x74,0xbd,0x83,0x8b,0x10,0x08,0x00,0xf8,0xc6,0x65,0xfc,0x42,0xfc, + 0x3d,0xe9,0x68,0xf2,0x29,0xba,0xa1,0x93,0x2d,0xc9,0xb3,0x48,0xc5,0xbd,0x0d,0xd9, + 0x7a,0xd6,0xb1,0x0b,0x1c,0x71,0x86,0x09,0xac,0x97,0x2c,0xcd,0xa5,0x89,0x0b,0xbd, + 0x86,0xf8,0x80,0xe9,0x8c,0xde,0x4a,0xde,0xaa,0x8f,0xa9,0x73,0x2c,0xe2,0x3f,0x97, + 0x8e,0x58,0xa4,0x9e,0xa6,0x8e,0x13,0x1b,0xf7,0x5c,0x5c,0xaa,0xc2,0x41,0x12,0xdc, + 0x93,0x21,0x52,0x76,0x1a,0xc0,0x03,0x4a,0xe2,0xdf,0xf1,0x43,0xe3,0x6d,0x04,0x3d, + 0x33,0x2c,0x9d,0x2a,0xc8,0x33,0x0a,0x7c,0xc9,0x40,0x69,0x8a,0x19,0xe1,0x40,0xaa, + 0xc9,0x53,0x14,0x45,0x4e,0xb8,0xde,0xf2,0x46,0xc4,0x32,0xba,0xee,0x45,0xc5,0xef, + 0xc1,0x67,0x88,0xc3,0xac,0xd3,0x48,0xdd,0x49,0x1b,0xba,0x63,0x24,0x77,0xae,0xe0, + 0xe1,0x6d,0x3a,0x77,0xc3,0x33,0x4c,0x57,0x5d,0x57,0x2f,0x74,0xff,0x00,0x5b,0x35, + 0x0e,0x4f,0x9a,0x65,0x59,0xeb,0x47,0x99,0xe5,0x75,0x74,0x2a,0xb1,0xd1,0xbd,0x2a, + 0x48,0x8b,0x34,0x68,0x7b,0x2c,0x64,0x57,0x47,0x40,0xa7,0x4d,0xc8,0x62,0x5b,0x4a, + 0x86,0x57,0x08,0x06,0x24,0xbe,0x1d,0xfc,0x39,0xac,0xea,0x1c,0xfb,0x27,0xa6,0xa8, + 0xca,0xeb,0x68,0xe2,0xcd,0xa1,0x2f,0x43,0x5c,0x29,0xbb,0x91,0x84,0xf5,0x46,0x67, + 0x90,0x12,0xa1,0x22,0x0f,0x63,0xdc,0xd5,0x75,0x20,0x58,0x35,0xf6,0x3b,0xaa,0xe5, + 0xc8,0xf3,0x2c,0xe7,0x38,0xcc,0xe9,0x65,0xc9,0x85,0x2d,0x6d,0x19,0x5c,0xbb,0x2a, + 0xcb,0x97,0xbf,0xf2,0xb2,0x82,0x83,0xb4,0x75,0x47,0x19,0x41,0x72,0xe5,0x0c,0x6b, + 0xbf,0xb3,0x0b,0xde,0xc3,0xf0,0xdf,0xa8,0xf3,0x9e,0x8c,0x96,0x7a,0x5a,0x5c,0xb2, + 0x29,0x73,0x08,0x28,0xeb,0xa3,0xcd,0x62,0x6c,0xc7,0xb5,0x23,0xc1,0x0c,0x6e,0xc6, + 0x78,0x2a,0x35,0x85,0x8f,0xb6,0x41,0x03,0xb2,0x41,0x27,0x50,0x21,0xb8,0xc7,0x26, + 0x36,0xb4,0xca,0xd1,0x21,0xb0,0x3b,0x7c,0xd7,0x4d,0xee,0x76,0xc2,0x59,0x82,0x56, + 0xc7,0xf3,0xdd,0x0d,0x57,0x58,0xb9,0xae,0x62,0xf9,0x43,0x47,0x93,0xa3,0xd1,0xe4, + 0xf3,0xfc,0xaf,0x72,0xb4,0xc7,0x1b,0x2d,0x3a,0x53,0x53,0xa8,0x55,0x5a,0xd9,0x09, + 0xbb,0x6a,0xb4,0x8a,0x82,0x60,0x1c,0x31,0x6b,0x2e,0x01,0xd7,0x52,0x74,0xfe,0x7b, + 0x5a,0x73,0xc7,0xcd,0xe9,0xaa,0xcd,0x5d,0x62,0x50,0x54,0x45,0x2d,0x29,0xa4,0x9f, + 0x2d,0x8d,0x15,0x10,0x49,0x2c,0x51,0x80,0x64,0xb2,0x2e,0xc2,0x21,0xa4,0x69,0xbb, + 0x6e,0x42,0x60,0xaf,0x84,0x39,0x34,0x39,0x97,0x5c,0x64,0x75,0x19,0x7e,0x55,0x9a, + 0xd7,0x55,0x4c,0xc8,0xb0,0xc4,0x99,0xb1,0xa4,0x51,0xa8,0x13,0x34,0x46,0x5d,0x3d, + 0xc0,0x04,0x4c,0xce,0xcc,0x84,0xed,0x20,0xd5,0x65,0x63,0x8e,0x87,0xca,0xbe,0x17, + 0x57,0xfc,0x34,0xeb,0x1e,0x9f,0x3d,0x15,0x91,0xd2,0xf5,0x0e,0x45,0x58,0xad,0x4f, + 0x5b,0x53,0x98,0x94,0x9e,0xab,0x2a,0x06,0xda,0xc4,0x6e,0xca,0xa3,0xb6,0xc8,0x19, + 0x45,0xef,0x76,0x24,0x9d,0x3e,0x91,0x8e,0xa8,0x12,0x6b,0x63,0xfe,0x90,0x05,0xf6, + 0x27,0x3d,0x0f,0xbe,0x02,0xc6,0x4b,0x34,0xaf,0x22,0xcd,0xd7,0xa7,0xbf,0xe5,0x33, + 0x94,0x7f,0x0c,0xdd,0x03,0x92,0xd0,0x65,0xf5,0x15,0x91,0x66,0x95,0xd5,0x74,0xd0, + 0xba,0xcf,0x34,0x06,0x6a,0x71,0x53,0xae,0x37,0x8d,0x64,0x34,0xec,0x4b,0x23,0x28, + 0x75,0x6f,0xcc,0x2e,0x53,0x75,0x00,0x95,0xc3,0xbd,0x3f,0xd0,0x55,0xdf,0x0b,0xe9, + 0xba,0xab,0xaa,0x8d,0x5d,0x76,0x69,0x35,0x1e,0x5b,0x53,0x2e,0x59,0x5d,0x99,0x2c, + 0x11,0x54,0x53,0x4a,0x69,0x84,0x6f,0x34,0xec,0xd2,0xb6,0x95,0x26,0x28,0xca,0xd8, + 0x16,0x3c,0x10,0xc4,0x81,0x8d,0x77,0x32,0x99,0xa9,0xe2,0x96,0xa2,0xaa,0xb1,0xe9, + 0xa4,0x70,0x56,0x08,0x62,0x75,0xb3,0x1e,0x05,0xf5,0x29,0x2e,0x6e,0x6e,0x48,0x02, + 0xc0,0x58,0x02,0x79,0xcd,0x3a,0xdf,0x22,0xeb,0x6a,0x5c,0xd7,0xa6,0xeb,0x72,0x9a, + 0xbc,0x9b,0x31,0xca,0x12,0xb6,0x31,0x15,0x2f,0x51,0x19,0xaa,0xa5,0xa7,0xac,0x70, + 0xc2,0x24,0x48,0x12,0xd1,0xca,0x58,0xaa,0x95,0x2c,0xac,0xd1,0xc8,0xec,0x6e,0xa8, + 0x9a,0x87,0x5a,0x6d,0x34,0x10,0x32,0xd8,0xcc,0x8f,0x76,0xb9,0xf1,0xcd,0x24,0xa6, + 0x9e,0xee,0x7b,0xfe,0xca,0x43,0x35,0xe8,0xb1,0x59,0xf0,0xda,0x9b,0x22,0xab,0xae, + 0x4f,0xf0,0x6a,0x58,0xe9,0xa5,0xcc,0x72,0xd8,0x09,0xa5,0x93,0x30,0x89,0xac,0x5e, + 0x7a,0xc9,0x3d,0x53,0x07,0x7b,0x8a,0x96,0x00,0x02,0x74,0x15,0x25,0x8e,0xe3,0x1e, + 0xe9,0xce,0xb5,0xa2,0xf8,0x09,0xd0,0x92,0xae,0x59,0x51,0x5b,0x9f,0xe7,0x39,0xcd, + 0x55,0x35,0x7d,0x34,0x89,0x41,0x12,0x52,0xd0,0x09,0x62,0xbc,0xd1,0xc5,0xae,0x42, + 0xce,0xcc,0x23,0x54,0x62,0x17,0x48,0xb0,0xb9,0x66,0x8c,0x8c,0x55,0x3a,0x8b,0xad, + 0x3a,0xba,0x93,0x2f,0xea,0xce,0xa4,0xcb,0xf2,0x8a,0xac,0x95,0xf3,0xba,0xb3,0x0d, + 0x5d,0x5b,0xcf,0x05,0x4c,0xb0,0x99,0x1e,0x68,0xe5,0xa6,0x8e,0xa9,0xa3,0x13,0x00, + 0xcf,0x03,0x05,0x88,0x33,0x5a,0x34,0xb9,0x36,0xd2,0x71,0x95,0x57,0x75,0x13,0xd5, + 0x7f,0x83,0xc1,0x36,0x5b,0x34,0xf4,0x51,0xa5,0x33,0xb3,0x48,0xa1,0x6a,0x27,0x54, + 0x41,0x1b,0x76,0xdc,0x2f,0xa1,0x0a,0xa8,0x00,0x00,0xc4,0x14,0x07,0x51,0x20,0xe3, + 0x85,0xa8,0xd5,0xb0,0x10,0x5a,0x29,0xd5,0xca,0xea,0x45,0xa7,0x34,0x5a,0xf3,0x62, + 0xd0,0x1d,0x4b,0x9e,0xc9,0xd4,0x79,0xb5,0x7e,0x7d,0x53,0xd8,0x49,0x33,0x6a,0xba, + 0x9a,0xa9,0xe0,0x86,0x32,0x88,0x8e,0xec,0x59,0x85,0xad,0xa7,0x97,0x20,0x6e,0x4d, + 0x80,0xbd,0xb6,0xc5,0x8f,0xa2,0x24,0x7e,0x88,0x49,0xba,0xb2,0x9f,0xaa,0x5f,0x23, + 0xcf,0x29,0x92,0x27,0xca,0xf2,0xc8,0xa9,0xa4,0x69,0x33,0x48,0xde,0x46,0x57,0x1a, + 0x88,0x0a,0xa8,0x3b,0x7c,0x9d,0x5b,0xd8,0x81,0x75,0xc5,0x36,0x8a,0xa1,0xde,0x3a, + 0x58,0x6b,0x65,0x9e,0x6c,0xa5,0x27,0x69,0x1e,0x05,0x67,0x7e,0xda,0x9d,0x06,0x47, + 0x54,0xd4,0xab,0x76,0x50,0x01,0xdc,0x13,0xa6,0xd7,0x1b,0x1c,0x5d,0x33,0x9e,0xba, + 0xea,0x1e,0xb1,0xa0,0x9e,0x9d,0xfa,0x82,0x4c,0xce,0x88,0x4c,0x66,0x9e,0x9e,0x58, + 0xa0,0xa5,0x73,0x4d,0x4b,0x1e,0x98,0x59,0x82,0xda,0xca,0x11,0xd8,0x2c,0x28,0xcc, + 0xaa,0x6f,0xa6,0xe4,0xdf,0x1c,0x98,0xcd,0x12,0xfe,0xbd,0x3e,0x7f,0x75,0xd0,0x2d, + 0xc5,0x74,0x52,0x74,0x2f,0x55,0xd5,0xfd,0x6b,0x33,0x28,0x69,0xb3,0x3c,0xce,0x76, + 0x71,0x1d,0x1c,0x61,0x14,0x38,0x56,0x27,0x70,0xc9,0x66,0x00,0x29,0x5d,0xfc,0x6f, + 0x8d,0x42,0x2e,0x9c,0xcb,0x2b,0x72,0xd6,0xcd,0x73,0x98,0x23,0x88,0x54,0x4e,0xec, + 0x92,0xa5,0x53,0x14,0x81,0x1d,0x14,0x3c,0x01,0xc0,0x8f,0x62,0x15,0xd6,0x42,0x41, + 0x25,0x98,0x10,0x77,0x27,0x11,0xbd,0x63,0xd2,0x19,0x5d,0x1d,0x15,0x7d,0x76,0x52, + 0x3b,0x13,0xe4,0x75,0x0b,0x35,0x2b,0x4f,0x0b,0x09,0xe9,0x44,0x4e,0x8a,0xcc,0xe5, + 0x10,0xa1,0x88,0xb2,0x39,0x0a,0x54,0x05,0xb9,0x0b,0x7b,0x36,0x21,0xcd,0x7e,0x65, + 0x92,0x52,0x64,0x39,0x8e,0x74,0x61,0xcc,0x32,0x5a,0xa5,0x3a,0x26,0xca,0x5d,0xa0, + 0x9e,0x48,0x64,0x60,0xb7,0x0c,0x41,0x48,0x7f,0xf4,0xd6,0xc7,0x7f,0x48,0xd8,0x10, + 0x6f,0xc2,0x99,0x84,0x81,0xb4,0xd7,0xbf,0x5a,0x56,0x37,0x82,0xac,0x10,0xd1,0xe4, + 0x74,0xb5,0x27,0x2c,0xc8,0xe9,0xb3,0x33,0x2d,0x38,0x2d,0x49,0x5b,0x04,0x49,0x2b, + 0x34,0x4d,0x22,0x02,0x11,0x81,0xba,0x59,0x4b,0xaf,0xa4,0x12,0x2d,0xaa,0xe7,0x49, + 0x38,0xb8,0xd2,0xe7,0xf9,0xd6,0x6c,0xf0,0xe4,0xff,0x00,0xe1,0x34,0x99,0x5c,0x30, + 0x37,0x71,0xea,0xea,0x43,0x34,0x92,0x2e,0xa5,0xd7,0x02,0x69,0x05,0x9e,0xda,0xb7, + 0x91,0x48,0x1e,0x90,0x6e,0x43,0x1c,0x50,0xf2,0xca,0xd6,0x7c,0xf6,0xa7,0x2e,0xa4, + 0xa7,0x7a,0xfa,0x22,0x15,0x2b,0x63,0x98,0xac,0x55,0x48,0xb1,0xb9,0x4b,0x4b,0xa4, + 0xaf,0x69,0xd4,0x31,0x36,0x04,0xee,0x7c,0x6d,0x8d,0x23,0x20,0xcb,0x68,0xb2,0x1a, + 0x6c,0xc9,0x85,0x32,0xc3,0x3c,0xd0,0x85,0x82,0x75,0x62,0x5a,0x99,0x62,0xb0,0x0b, + 0x18,0x0e,0xda,0x15,0x48,0xd4,0xd6,0x24,0x10,0x49,0xc2,0x43,0x20,0x8d,0xf4,0xe7, + 0x10,0x08,0xce,0x4f,0xe6,0xb3,0xf8,0x55,0x3d,0xa5,0xc2,0xeb,0x2a,0x6c,0x41,0x2e, + 0x52,0x92,0xc7,0x2c,0xd3,0xe6,0x55,0x51,0x47,0xde,0x49,0x98,0x2f,0x72,0xeb,0xab, + 0xd0,0xb6,0x01,0x51,0xb4,0x58,0x82,0x05,0xaf,0xe4,0xf3,0x80,0x72,0xee,0xbc,0xab, + 0xa6,0xae,0x78,0xea,0xaa,0xa0,0x08,0xaa,0xc0,0xc7,0x36,0xb9,0x82,0xa8,0xb6,0xe0, + 0xa8,0xbb,0x92,0x4e,0xd6,0x00,0x1b,0x80,0x4a,0x8b,0xd9,0xa8,0x03,0x9a,0x8b,0xd7, + 0xa3,0xbd,0x3d,0x64,0x71,0x2e,0xaa,0x6f,0xc3,0x12,0xb5,0xef,0xab,0x6b,0xaa,0x8d, + 0xc0,0xd8,0xef,0x6d,0xed,0xe2,0x43,0xe6,0x16,0x0a,0x69,0x6b,0x23,0xcb,0x82,0x12, + 0xe1,0xe4,0x10,0x40,0x08,0xd5,0x6d,0x2a,0xe5,0x6c,0x50,0x32,0xd8,0xa8,0x2d,0xb7, + 0x3b,0x8b,0xe0,0xc1,0xaf,0x3a,0x6d,0x56,0xe6,0xfc,0x22,0xc7,0x17,0xfb,0x5e,0x7d, + 0x7b,0xa6,0x7c,0x4d,0x92,0x2d,0xa7,0x3f,0x3f,0xfe,0x2d,0x0b,0x2b,0xcc,0x69,0xb3, + 0x8a,0x71,0x51,0x46,0x4a,0xa9,0xf5,0x08,0xdc,0x81,0x22,0xa1,0xfc,0xa5,0x94,0x1f, + 0x45,0xc6,0xe0,0x1d,0xed,0x6c,0x48,0x68,0xc6,0x6f,0xd3,0x5d,0x71,0x95,0x65,0x75, + 0x99,0x7e,0x58,0x63,0x5a,0x5a,0x7c,0xce,0x45,0xff,0x00,0x8d,0x34,0xef,0xdb,0x9e, + 0xa5,0xd3,0x50,0x22,0x4d,0x47,0xb8,0x64,0x50,0x34,0x85,0xbd,0xbc,0x9e,0x17,0x1a, + 0x91,0x88,0xab,0x15,0x22,0xc4,0x6c,0x71,0xf5,0xfd,0x06,0xba,0x2d,0x74,0x02,0x46, + 0x3a,0xfb,0xf4,0xcf,0xc9,0x79,0x0d,0x44,0x2e,0x82,0x4d,0xa4,0x52,0x17,0xb5,0xf4, + 0xc7,0xa6,0x3d,0xb6,0xc4,0xcd,0x1c,0x34,0xbd,0xb6,0xf9,0x81,0xea,0xbf,0x25,0xad, + 0xb6,0x07,0xab,0x58,0x5a,0x62,0x69,0xc1,0x0a,0x79,0xbf,0xbe,0x36,0x87,0xdb,0xaa, + 0x95,0x45,0xb4,0x2e,0xd0,0x34,0xd4,0x13,0x56,0x4c,0xb1,0x53,0x26,0xb7,0x60,0x48, + 0xb9,0x00,0x6d,0xf5,0x38,0x86,0xf8,0x9b,0x93,0xcf,0x95,0x74,0x15,0x79,0xad,0x92, + 0x96,0x29,0xf3,0x73,0x1e,0x5d,0x96,0x42,0x65,0xd4,0xd5,0x75,0x12,0xb8,0xb2,0x28, + 0x1b,0x00,0x14,0x33,0x31,0x3b,0x00,0x31,0x62,0x44,0xd0,0xc1,0x87,0x20,0xf8,0xc5, + 0x67,0xe2,0x6d,0x7c,0xf9,0xae,0x67,0xf0,0xcf,0x27,0x17,0x1d,0xdc,0xf9,0xa4,0xb0, + 0xe1,0x74,0xa2,0x0f,0xd0,0x58,0x9f,0xdf,0x1c,0x9f,0x18,0x9e,0x58,0x34,0x8f,0x73, + 0x2a,0xab,0x3f,0x55,0xbf,0xc3,0xe3,0x8e,0x59,0xda,0xd7,0x73,0x6b,0x2c,0xea,0xba, + 0x58,0xa1,0xad,0x83,0x2a,0x3d,0xa7,0x4c,0xa3,0x2c,0xa3,0xa2,0xd4,0xb1,0xd9,0x0b, + 0x24,0x64,0xb3,0x01,0xe0,0x5d,0x8e,0xde,0x31,0x11,0x4b,0x97,0x7c,0xed,0x54,0x14, + 0xf4,0xb4,0xf0,0x77,0x9e,0xc6,0xfa,0x00,0x00,0x0b,0x02,0x58,0xf0,0xa3,0x71,0xb9, + 0xf3,0x61,0xb9,0xc1,0x39,0xf5,0x43,0x57,0x67,0x59,0x9d,0x49,0x75,0xd2,0xf5,0x6f, + 0xa9,0x80,0xd5,0xb0,0xb8,0x5d,0xad,0xc5,0x97,0x1f,0x64,0x59,0xb4,0xf9,0x26,0x62, + 0xb2,0x23,0x5e,0x39,0x19,0x52,0x68,0x98,0x5d,0x5c,0x58,0xef,0x6f,0x24,0x0b,0xed, + 0xc1,0x04,0xf0,0x6c,0x47,0xcd,0x23,0x6b,0x6c,0x07,0x70,0xbd,0x9c,0x8e,0x34,0x4b, + 0x53,0x39,0xa6,0x54,0xd9,0x45,0x48,0xa6,0xa8,0xa5,0x82,0x5b,0xdd,0x95,0x9d,0x34, + 0x87,0x1c,0xdd,0x49,0xe2,0xc7,0x90,0x78,0xe3,0x10,0xf9,0xeb,0xd1,0x65,0x35,0x19, + 0x35,0x4d,0x3d,0x2a,0x46,0xb4,0xf3,0xad,0x44,0xdd,0xab,0x07,0x90,0x23,0xa3,0x10, + 0x4f,0x1c,0x0d,0xaf,0xb6,0xf8,0xb1,0x75,0x16,0x72,0xd9,0xdd,0x52,0x24,0x01,0x69, + 0x28,0x69,0xb4,0x88,0x61,0x45,0xd2,0xbb,0x22,0x81,0xb7,0xd0,0x6c,0x07,0xb7,0xb9, + 0xc5,0x6f,0xaa,0x18,0x30,0xa4,0x42,0x60,0x68,0x64,0x85,0xd4,0x99,0x63,0x12,0x01, + 0x75,0xb5,0xed,0x71,0x63,0x7b,0x6f,0x70,0x7e,0xa3,0x16,0x3f,0x64,0x6f,0x71,0x6e, + 0x42,0xa8,0x17,0x16,0x02,0xee,0x55,0xfb,0xe2,0x8f,0x5e,0xe4,0x59,0x26,0x78,0xc9, + 0xd3,0xd3,0x53,0x89,0x6b,0xe8,0x69,0x66,0x0a,0xa8,0xd4,0x8c,0x84,0x49,0x23,0xc8, + 0xae,0x85,0x6d,0xad,0xa1,0x9c,0x1b,0x1b,0x82,0x00,0x20,0xf1,0x8c,0xc7,0x30,0xa5, + 0xcd,0x7a,0xaa,0x9f,0x37,0xa1,0xcd,0x6a,0x68,0x2a,0x23,0x6a,0x11,0x53,0x25,0x5c, + 0xb0,0x16,0x73,0x98,0x23,0xf6,0xd5,0x63,0x94,0xdb,0xb6,0x64,0x88,0x06,0x08,0xc5, + 0x93,0x60,0x06,0x92,0xc0,0x0f,0xaa,0xf3,0x45,0xea,0xba,0x9c,0xc2,0x93,0xa8,0x5a, + 0xb0,0xc5,0x32,0x43,0x0a,0x2d,0x35,0xe7,0x58,0x1e,0x20,0xa8,0x92,0xc2,0xc5,0x41, + 0x52,0x96,0x53,0xa5,0x8e,0xe3,0xd2,0x0f,0x23,0x14,0x6c,0xd2,0x70,0x32,0x7c,0xd6, + 0x86,0x0c,0xd5,0x73,0x08,0x69,0x6a,0x4f,0x65,0x6a,0x22,0xf9,0x69,0xe4,0x4d,0x7a, + 0x5a,0xca,0x35,0x21,0x1a,0xaf,0xe9,0xd6,0x58,0x5e,0xe0,0x58,0x0c,0x26,0x96,0x69, + 0x03,0x76,0x01,0x8e,0xd7,0xf9,0xff,0x00,0x1d,0xd6,0x79,0xc0,0x7b,0xf7,0x75,0x56, + 0x48,0xeb,0xa3,0xae,0x92,0xa6,0xba,0x86,0x68,0xc5,0x35,0x41,0x8e,0x47,0xa4,0x82, + 0x94,0x45,0x1d,0x3c,0x89,0xa7,0x51,0x48,0xcb,0x2d,0xd5,0xec,0xda,0x88,0x03,0x7f, + 0x16,0xc0,0x15,0xca,0x5d,0xa3,0x39,0x74,0x6f,0x45,0x9d,0xa4,0x1a,0x61,0xa9,0x03, + 0x5c,0xd0,0x31,0x7d,0x32,0x2b,0x3f,0x2b,0x66,0x2a,0x14,0x03,0xe9,0xb3,0x6f,0x6e, + 0x47,0xc9,0x6a,0xf2,0x78,0xf3,0x4a,0x4f,0x97,0xaa,0xae,0x83,0x5a,0x87,0x9c,0x54, + 0x20,0x63,0x1b,0x12,0x01,0x2c,0x40,0x17,0x05,0x6e,0xb6,0x02,0xc3,0x51,0x22,0xd7, + 0xb6,0x00,0xcc,0x16,0xab,0x26,0xd1,0x43,0x4e,0x8d,0x55,0x4d,0x2c,0xaf,0xeb,0x11, + 0x18,0x9b,0xb6,0x1c,0x22,0xb1,0x7b,0x9d,0x2c,0xcc,0x01,0xd7,0x75,0xb9,0xdc,0xdc, + 0x5a,0xf9,0x68,0xb9,0xf6,0x4e,0x7d,0x7a,0xa9,0xd1,0x56,0xdf,0xa1,0xb3,0x9a,0x79, + 0x6a,0x22,0x10,0xc6,0xd3,0x6a,0x34,0xc8,0xc9,0x53,0x6b,0x3b,0x02,0x5c,0x47,0xa7, + 0x9b,0xaa,0x95,0x3a,0xac,0x3d,0x44,0x7d,0x70,0x04,0xf5,0x19,0x96,0x4d,0x2d,0x24, + 0x79,0x9a,0xd5,0x08,0x60,0x32,0x34,0x54,0x6c,0x3f,0xe5,0xdf,0x8b,0xad,0xc0,0x0a, + 0x76,0xff,0x00,0xda,0x42,0x9d,0x88,0xdb,0x1a,0x15,0x12,0x00,0xec,0x94,0xd0,0x54, + 0xca,0xf4,0x33,0xc9,0x31,0x07,0x54,0x0f,0x31,0x61,0xa4,0xdc,0xfe,0x50,0x14,0x0e, + 0x7f,0x96,0xc7,0x6b,0x5c,0xe2,0xad,0xd5,0x54,0xf2,0xd1,0xf5,0x13,0xbd,0x6c,0x8b, + 0x57,0x15,0x64,0x62,0x65,0x92,0xc3,0xb8,0x55,0x0f,0x69,0x90,0xec,0x00,0x20,0xa3, + 0x0e,0x2d,0xb0,0x3b,0xe3,0x53,0x1e,0xf0,0x69,0xc5,0x03,0x54,0xb4,0x9e,0x86,0xf8, + 0x91,0x55,0xd0,0xdd,0x42,0x33,0x9c,0x93,0xa3,0xf2,0xe3,0x96,0x66,0x11,0x45,0x06, + 0x6c,0xb4,0xf2,0x76,0x6f,0x06,0xe5,0x55,0x2e,0xec,0x23,0x75,0x37,0xe0,0x58,0x88, + 0xed,0xbe,0xe7,0x1b,0xaf,0x49,0xfc,0x68,0xa5,0xcd,0xb3,0xec,0xb7,0xa7,0xb3,0x68, + 0xa1,0xcb,0xa4,0xae,0x59,0xa3,0xa6,0xad,0x6a,0x8b,0xfe,0x2c,0x65,0x42,0xa3,0x06, + 0x50,0xac,0x5f,0x50,0x01,0x85,0xbd,0x5e,0x0d,0xf1,0xc6,0x92,0x66,0xf5,0x30,0xd0, + 0x22,0x43,0x11,0x2f,0x1d,0x4b,0x76,0xea,0x16,0x45,0x25,0x94,0x28,0x03,0x50,0x5e, + 0x48,0xbe,0xd7,0x1c,0x36,0x18,0x19,0xcc,0xd5,0x81,0xa5,0x93,0x34,0x6a,0x2a,0x8a, + 0x38,0xcc,0xf0,0xc5,0x1c,0x04,0x97,0x9c,0x5e,0xca,0x45,0xac,0x09,0xbd,0xef,0xc6, + 0xf8,0xe9,0xe9,0x3c,0x47,0x53,0xa7,0x20,0x07,0x7c,0x3d,0x96,0x39,0x74,0xb1,0x4d, + 0x92,0x33,0xdd,0x7e,0x92,0x54,0xb5,0x1e,0x45,0x4d,0x3d,0x76,0x65,0x51,0x1d,0x2c, + 0x6a,0xba,0xe6,0xaa,0xaa,0x71,0x72,0x17,0x7e,0x7c,0xdb,0xc2,0xa8,0xfb,0x0b,0x9c, + 0x56,0xba,0xdf,0xaf,0xba,0x73,0xa0,0xfa,0x5e,0x9f,0xad,0x73,0x59,0x1f,0x33,0xa4, + 0x75,0x55,0xca,0x92,0x94,0x16,0x33,0x97,0x21,0x59,0xa1,0x62,0x34,0xa1,0x28,0xe4, + 0x97,0x62,0x2e,0xa2,0xc0,0xfa,0xb7,0xe2,0x67,0xf8,0xd3,0xd5,0x99,0x55,0x36,0x79, + 0x43,0x45,0x9b,0x4f,0x59,0x41,0x9e,0x1a,0x98,0xaa,0x05,0x6c,0x8d,0x24,0xb5,0x09, + 0x51,0x0c,0x70,0xb6,0xad,0x57,0x70,0x15,0x22,0x88,0x21,0x04,0x10,0x63,0x1b,0x91, + 0x75,0xc5,0x1b,0xa8,0xf3,0x85,0xce,0xab,0x9e,0xa2,0xa2,0xba,0xb5,0xe6,0x92,0x35, + 0x32,0xcd,0x5c,0xdd,0xe6,0xa8,0x95,0x54,0x29,0x92,0xd7,0x21,0x76,0x1a,0x46,0xed, + 0xb2,0xdb,0x6e,0x31,0xde,0x9b,0xc6,0x4b,0x9a,0x43,0x1b,0x4b,0x24,0x7e,0x1a,0x01, + 0xb7,0x39,0x6c,0x3f,0xc4,0x1f,0xc7,0x0c,0xbf,0xe2,0xb4,0x39,0x64,0x39,0x25,0x46, + 0x65,0x06,0x5f,0x4b,0x3c,0xda,0x29,0x26,0xa2,0x58,0xe2,0x21,0x95,0x0a,0xc9,0xaf, + 0x5b,0x31,0x94,0x9b,0xa9,0xd8,0x6c,0x2e,0x3f,0x31,0xc6,0x0f,0x2d,0x5f,0xcd,0xcb, + 0xdd,0x9d,0x54,0xca,0x3f,0x28,0x42,0x63,0x0a,0x2f,0xc0,0x02,0xc0,0x79,0xd8,0x7d, + 0x70,0x46,0x5d,0x51,0x48,0xd2,0x88,0x6b,0x1e,0xa1,0x60,0xdc,0x49,0x2c,0x65,0x59, + 0x80,0xff,0x00,0x30,0x56,0xfc,0xd6,0x36,0x24,0x02,0x3f,0x2f,0x8e,0x43,0xb2,0xe5, + 0x10,0xd5,0x19,0xe4,0x7c,0xea,0x88,0xcb,0x1c,0x71,0x4a,0xa1,0xc3,0x8e,0xee,0xb5, + 0xbe,0x90,0x40,0xbe,0xb1,0xc1,0x16,0xe4,0xf3,0xe7,0x1e,0x72,0x49,0x0c,0x8e,0x2f, + 0x77,0x25,0x75,0x99,0x18,0x63,0x43,0x46,0x02,0x88,0x49,0xcb,0xb9,0x13,0x49,0x3c, + 0x34,0xee,0x42,0x4a,0xc8,0x35,0x59,0x6f,0x7b,0x69,0xb8,0x0d,0xc0,0x36,0x24,0x6e, + 0x06,0xe3,0x16,0x1c,0xde,0xb5,0x3f,0xc5,0x5e,0x59,0xeb,0xea,0xf3,0x53,0x62,0x63, + 0x35,0x51,0x96,0x95,0x41,0xbe,0x94,0x66,0x24,0x71,0xcd,0x87,0xa6,0xfc,0x7b,0xe2, + 0x32,0xb6,0x8a,0x68,0x1d,0x0e,0x64,0x22,0x88,0xb2,0x86,0x11,0xc2,0xaa,0xba,0x97, + 0xdc,0xe9,0xfd,0xbd,0xef,0x81,0x0c,0x8b,0x21,0x52,0x8a,0x13,0x48,0xb0,0x04,0x5d, + 0x7e,0x84,0xdf,0x61,0xce,0x10,0x83,0x4a,0xdc,0x1c,0x05,0xdc,0xdd,0x35,0x45,0x26, + 0x43,0x4b,0x9b,0x51,0x45,0x5d,0x1d,0x5d,0x0d,0x6d,0x3e,0x8a,0x3a,0x5a,0xd1,0x27, + 0xcb,0x43,0x1b,0x17,0x63,0x0a,0xc6,0xc6,0xc3,0xd6,0x77,0x27,0x8d,0x17,0xb0,0x0c, + 0x6f,0x5f,0xad,0xf8,0x7d,0xff,0x00,0x97,0x2e,0x5f,0x49,0x32,0xe5,0xd4,0x33,0x48, + 0xf0,0x54,0xd3,0x53,0x52,0xd3,0xc3,0x4e,0xfa,0x8a,0xb8,0x01,0x64,0x26,0xed,0xdc, + 0x52,0x75,0x29,0x52,0x55,0x15,0x6f,0xb0,0xc4,0x6c,0x3d,0x63,0x9b,0x53,0xc9,0x9a, + 0x2e,0x6b,0x20,0xab,0xa4,0xa1,0x8f,0xe6,0xdd,0xd2,0x07,0x7a,0xb6,0xa4,0x8d,0xe3, + 0x43,0x2a,0xa3,0x05,0x06,0x00,0xda,0x94,0x11,0xac,0xae,0x83,0x71,0x63,0x71,0x6e, + 0xc8,0xfa,0x8f,0xff,0x00,0x10,0xe5,0xd1,0x66,0x39,0x35,0x65,0x3d,0x4d,0x1b,0xa9, + 0x83,0xb9,0x03,0x5d,0xfb,0xa5,0x03,0x94,0x78,0xc1,0xb2,0x48,0x06,0x91,0xb9,0xb9, + 0x01,0x81,0xe3,0x7f,0x39,0x2c,0x9a,0x96,0x80,0x1e,0x70,0x38,0xf4,0xf7,0xea,0x83, + 0x58,0xd1,0x65,0xbd,0x55,0x67,0x2f,0xa5,0xca,0x72,0xac,0x9a,0x92,0x9f,0x35,0x58, + 0x63,0xf9,0x09,0xe5,0x9e,0x28,0x69,0x2b,0x26,0x99,0x15,0x1d,0x8b,0x3f,0x76,0x19, + 0x1c,0x3e,0xc0,0xdb,0x50,0x20,0x79,0x03,0x63,0x7f,0x32,0x39,0x28,0x11,0x2a,0xe9, + 0x21,0xaa,0x92,0x48,0x68,0xe4,0x74,0xee,0x7c,0xb7,0x76,0x23,0x7d,0x94,0x91,0xe5, + 0x7c,0x69,0x20,0x0e,0x39,0x6d,0xcc,0x97,0x50,0xd7,0x74,0xb5,0x5e,0x6b,0x55,0x94, + 0xe7,0x53,0xe5,0xd4,0xd5,0xe9,0x34,0x75,0x75,0x0f,0x52,0x02,0x85,0x89,0xe1,0x1a, + 0x81,0x94,0x6c,0xe6,0xc4,0x00,0xd6,0xd1,0x74,0x00,0x8f,0x65,0x55,0x47,0x02,0x65, + 0x11,0x53,0x43,0x04,0x2d,0x03,0xe9,0xf9,0xa9,0x94,0x2c,0x67,0x47,0xa5,0xbb,0xc0, + 0xae,0xa0,0xbb,0xab,0x58,0x6c,0x03,0x1d,0x88,0x06,0xd8,0xa4,0xb8,0x91,0x9b,0xca, + 0x39,0x05,0x48,0x4d,0x93,0xd2,0xd4,0x54,0x8a,0xe8,0xd6,0xa2,0x19,0xa5,0x58,0xe4, + 0xd0,0x95,0x7b,0x23,0xd8,0xb1,0x66,0x5d,0x80,0x16,0xb1,0xb5,0xbd,0x23,0xc0,0x1b, + 0xe1,0x50,0x56,0x56,0x65,0xf9,0x83,0x09,0xe5,0x96,0xbe,0x38,0x51,0x26,0x49,0x48, + 0x31,0xac,0x88,0xd6,0xe0,0x0b,0xd8,0x83,0x64,0xbd,0xc0,0x21,0x5a,0xe0,0x05,0xc3, + 0x34,0x19,0x49,0xa8,0x68,0xe9,0xe9,0xe7,0x95,0xeb,0xe2,0x32,0xcf,0x97,0xe6,0x51, + 0x57,0x85,0x95,0xe5,0x0a,0x03,0x96,0x51,0xa4,0x85,0xd2,0xd6,0xb3,0x06,0x1b,0x93, + 0xb1,0x18,0xcf,0x60,0xeb,0xa7,0xe9,0x38,0x29,0x6a,0x26,0xab,0xcc,0x21,0xa6,0xa9, + 0xa9,0x10,0x49,0x2d,0x54,0x97,0x13,0x4d,0x7d,0x4d,0x2c,0x6e,0x85,0xa3,0xbe,0xa3, + 0xea,0x07,0x81,0xb8,0x03,0x08,0xc6,0x99,0x6d,0xa3,0x3e,0x89,0xf8,0x5a,0xde,0x5d, + 0x55,0x52,0xd2,0xc9,0x97,0x50,0x08,0x60,0x6a,0xaa,0x58,0xcc,0x2d,0x32,0x68,0x94, + 0x28,0x27,0xd3,0xac,0xaf,0xa0,0x06,0xb0,0x16,0x17,0x1b,0x90,0x2c,0x71,0x7b,0xcb, + 0x3a,0x8b,0xbb,0x91,0xe5,0xd3,0x40,0x62,0xa9,0x2d,0x10,0x49,0x26,0x1b,0x02,0xcb, + 0xe9,0x6b,0x28,0xe3,0x71,0x6b,0x1f,0x3e,0x05,0xf1,0x8f,0xd4,0xe6,0x19,0x76,0x6e, + 0xd3,0x07,0x93,0xbe,0x8d,0x48,0xef,0x4c,0x23,0x92,0x47,0x6a,0x66,0x1a,0x59,0xd5, + 0x60,0x1b,0x5f,0x4f,0x95,0xdd,0xae,0x36,0x3a,0x76,0xb3,0x54,0xe6,0xc6,0x87,0xa4, + 0xeb,0xaa,0x62,0xcd,0x21,0xa6,0x92,0x9d,0x96,0x9f,0xb6,0x60,0xd0,0x45,0x89,0x56, + 0x56,0x17,0xba,0x5f,0xd3,0xea,0xde,0xcd,0x6b,0x8d,0xf1,0xe8,0xfc,0x1f,0x5e,0xfd, + 0x16,0xfd,0xb7,0xb6,0xb8,0xf5,0xaf,0x53,0xfb,0x0b,0x58,0x35,0x30,0x36,0x7a,0xbe, + 0x56,0x81,0x47,0xd4,0x6e,0xc1,0x25,0xac,0xde,0x16,0x04,0x5a,0x28,0x1b,0x56,0xaf, + 0xfa,0x0d,0xee,0x7c,0x9d,0x86,0x27,0xa8,0xea,0x69,0xf3,0x2a,0x75,0xa8,0xa3,0x91, + 0x66,0x85,0xb8,0x65,0xff,0x00,0x42,0x3c,0x1f,0xa6,0x29,0x74,0x49,0x0d,0x63,0xc7, + 0x53,0x21,0xf9,0x78,0x2c,0x44,0x74,0xe5,0xc8,0x94,0x05,0xf4,0x0d,0x40,0x0d,0xaf, + 0x6f,0x40,0x5b,0xea,0x0c,0x09,0xb7,0x18,0xbe,0x74,0x16,0x5f,0x95,0xc7,0x5b,0x56, + 0x33,0x19,0xe8,0xa4,0x7a,0xa2,0x3f,0x0c,0xca,0x23,0xb3,0x16,0x21,0x46,0xc4,0x5d, + 0x86,0xe0,0x81,0x7f,0xbd,0xf1,0xec,0x74,0x3a,0xfd,0x43,0x40,0x7b,0xc8,0x2c,0xfa, + 0x93,0xf7,0x27,0xdf,0xa7,0x07,0x97,0x3e,0x9a,0x37,0x9a,0x6e,0x0f,0xe1,0x07,0x9b, + 0x66,0x79,0x7f,0x4f,0x65,0x55,0x79,0xae,0x79,0x52,0x29,0x32,0xfa,0x45,0x0d,0x34, + 0xa4,0x5c,0xee,0x6c,0xaa,0xab,0xcb,0x3b,0x1b,0x05,0x51,0xb9,0x27,0x18,0x57,0x4e, + 0xf5,0x4e,0x67,0xd7,0x7f,0x12,0x13,0xa8,0xf3,0x55,0x6a,0x5c,0xa7,0x24,0xa5,0xa8, + 0xab,0xa0,0xa0,0x46,0x0c,0x20,0x8d,0x22,0xbd,0x89,0xf3,0x23,0x17,0x56,0x77,0x1e, + 0x54,0x2a,0xec,0x06,0x24,0xbf,0x8b,0x19,0xea,0xa0,0xeb,0x5e,0x9f,0xca,0xa9,0xe9, + 0xe4,0xa7,0xc9,0xe1,0xcb,0x1a,0xaa,0x15,0x13,0x21,0x82,0xa2,0x72,0xe5,0x5a,0x55, + 0x45,0x25,0x83,0x22,0xd9,0x2e,0xfe,0xe7,0x48,0x00,0xb1,0x34,0x5f,0x87,0x33,0x76, + 0xb2,0x5e,0xa9,0x94,0x6a,0x27,0xfc,0x2b,0xb0,0x36,0xdf,0x54,0xd5,0x31,0x21,0x17, + 0xb7,0xf9,0x55,0xb1,0xcc,0xf1,0x8f,0x10,0x7e,0xa8,0x79,0x4d,0xc3,0x7f,0x75,0xd2, + 0xf0,0xed,0x23,0x60,0x3e,0x63,0xb2,0x7f,0x64,0xb4,0x77,0x05,0x5a,0x42,0x5c,0xb0, + 0x2c,0xcd,0xa4,0x9f,0x1b,0x9f,0xeb,0x81,0xcb,0x8e,0xcc,0xb5,0x35,0x52,0x4d,0x1d, + 0x32,0xcc,0xc8,0xaa,0x9a,0x57,0x53,0x05,0xb8,0x55,0xd8,0x91,0x65,0x0c,0xc4,0x9d, + 0xbf,0x5c,0x15,0xda,0xa6,0xa9,0xa8,0x3f,0x35,0x1a,0xc9,0xa4,0xed,0xa9,0x8a,0x90, + 0x6d,0xc0,0xb1,0x03,0xfd,0x9c,0x56,0x3a,0xaa,0xb1,0xa9,0x12,0x8e,0x9e,0x98,0x35, + 0x34,0x02,0x4a,0xc9,0x3b,0x6a,0xc4,0x0f,0xf9,0x04,0x6f,0xef,0xb9,0xc7,0x00,0x37, + 0xcc,0x7e,0xd5,0xd7,0xbd,0xad,0xb5,0x23,0x0d,0x67,0xcd,0x0a,0x59,0x68,0xe4,0x9e, + 0x64,0x67,0x4f,0x43,0x30,0x1c,0xc7,0xac,0x0e,0x07,0x22,0xc4,0x7e,0xa3,0x9b,0xe2, + 0x23,0xab,0xf3,0x6a,0x49,0x68,0xa8,0xe8,0xbe,0x75,0x45,0x78,0xd4,0x92,0x53,0xa0, + 0x67,0x93,0xd4,0x7f,0x2e,0xc2,0xc0,0x9d,0xb6,0x3e,0x3e,0x98,0x06,0x17,0xae,0xa8, + 0xc9,0xf3,0x11,0x96,0xcc,0x05,0x44,0x0f,0x4a,0xd1,0x87,0x75,0x00,0x05,0xa7,0x5b, + 0xdb,0x57,0xa7,0x72,0x6d,0xe2,0xf7,0xc6,0x79,0x9b,0xcf,0x2a,0xd6,0xbd,0x43,0xc2, + 0x28,0xe9,0xe6,0x25,0x84,0x4c,0x8f,0xa0,0xdf,0x70,0x05,0xce,0xc0,0x9d,0x5b,0xdf, + 0x6f,0x57,0x8b,0x60,0x3a,0x32,0xd7,0x90,0xaa,0x74,0x96,0xce,0x15,0x91,0xb5,0x53, + 0xe5,0x92,0xcd,0x91,0x4d,0x59,0x58,0x2a,0x21,0x47,0xa9,0x4a,0x7f,0x4c,0x71,0xc8, + 0x84,0x7a,0x24,0x1e,0x4a,0x5c,0x7a,0x88,0x0a,0x0b,0x6c,0x49,0xc3,0x55,0x03,0x37, + 0xaa,0xa8,0xa4,0x96,0x47,0x33,0x53,0x66,0x92,0x27,0xcb,0x08,0x0f,0x68,0xc9,0x50, + 0x6d,0xa4,0xea,0x2a,0x50,0x0d,0x57,0x53,0xc1,0x37,0x22,0xf6,0x38,0x83,0xa1,0xa8, + 0x8f,0x2e,0xad,0xad,0x95,0xe6,0xa8,0xf9,0xa7,0x17,0xa5,0xf9,0x3a,0xa6,0xa7,0x0c, + 0xea,0x54,0x82,0x4a,0x58,0x9b,0x58,0x9d,0x88,0x3a,0x93,0x93,0x6d,0xca,0xca,0x24, + 0x3a,0xaa,0x28,0xe6,0xcc,0x1a,0x96,0x09,0xcf,0x7a,0xa5,0xe5,0x8c,0x31,0xb6,0xab, + 0x99,0x22,0xdc,0x12,0xf7,0x07,0x6e,0x46,0xe4,0x1f,0x18,0x76,0x82,0x30,0xc3,0x95, + 0x99,0xc4,0x1c,0xa3,0x28,0xb2,0x38,0xaa,0xb2,0xe9,0x6b,0x60,0xaa,0x9e,0x7a,0xe5, + 0x96,0x46,0xf9,0x74,0x8e,0x3f,0x4b,0x05,0xf5,0x46,0x7f,0x99,0x58,0x00,0x46,0xa3, + 0xb1,0x27,0x6d,0xc1,0x24,0xba,0x08,0x69,0x33,0x2c,0x9a,0x9e,0x9e,0xa2,0xb3,0xf3, + 0xd1,0x98,0x6a,0x22,0xa8,0x8a,0x4f,0xc2,0x94,0x17,0x74,0x20,0x06,0x07,0x72,0xe3, + 0xf3,0x6e,0x0a,0xec,0x4e,0xd8,0x84,0x9b,0x2f,0x39,0x7d,0x6e,0x67,0xf2,0x75,0xb1, + 0x1a,0x8a,0x3a,0x95,0x82,0x41,0x21,0x1a,0x1e,0x29,0x40,0x22,0x54,0x6b,0xd9,0x45, + 0xc6,0xed,0xea,0xb6,0xa0,0x6f,0x63,0x81,0x2a,0x33,0x3a,0x69,0x18,0x9a,0x39,0x21, + 0x8a,0x9f,0xb8,0x42,0x2d,0xcc,0xa1,0x08,0x52,0xa2,0xcc,0x6e,0x2c,0x4e,0xf6,0xff, + 0x00,0xae,0x2a,0x73,0x1f,0x90,0x4f,0x05,0x11,0x5c,0xab,0x76,0x67,0x97,0xd4,0x65, + 0x94,0xb5,0x3d,0x3f,0x52,0x68,0xb2,0xf9,0x12,0x6f,0x9b,0x4e,0xc2,0x3c,0x61,0xc0, + 0xb2,0x00,0x9f,0xca,0x41,0x0a,0xad,0xc8,0xb9,0xbd,0xcf,0x8c,0x67,0xf9,0x85,0x0f, + 0xca,0x4f,0x51,0x49,0x0c,0xb3,0xcb,0x2c,0x32,0x59,0x52,0x64,0x75,0x93,0x46,0xe6, + 0xe6,0xfe,0xf7,0xf1,0x71,0xb8,0xdc,0xf3,0x89,0x8a,0xbc,0xfe,0xa6,0xab,0x2b,0x8a, + 0x82,0xa6,0xaa,0x59,0x44,0x04,0x4c,0x19,0x98,0xb6,0xe7,0x73,0xb3,0x1f,0x4f,0x00, + 0x01,0x6f,0x7f,0x7c,0x57,0x5e,0x58,0xe4,0x8e,0xa5,0x3e,0x61,0xcc,0x6c,0x7d,0x25, + 0x9e,0xec,0x78,0xdc,0x8e,0x6f,0x6d,0xb9,0x00,0x5b,0x0f,0x16,0xfa,0xf8,0x8a,0x86, + 0xba,0x26,0x22,0x7a,0x8a,0xc9,0xe1,0xa5,0x11,0x49,0xdd,0x63,0xe8,0x50,0x06,0xb2, + 0x2d,0xb2,0x8d,0xef,0xbd,0xc6,0x03,0x9c,0xd4,0x51,0xd4,0x48,0x93,0xc2,0x69,0xa5, + 0x46,0x2a,0xe8,0xfb,0x3a,0x10,0x6d,0x62,0x39,0xb8,0xc3,0x85,0x20,0x0b,0x1a,0x19, + 0x03,0x28,0x42,0xa1,0x6c,0x75,0x5c,0xf2,0x47,0xbd,0xce,0x0c,0xa0,0x8e,0x91,0xb2, + 0xf9,0xd2,0xa2,0x2a,0xc6,0xcc,0xe3,0x91,0x64,0x8e,0xa1,0xa3,0x62,0x91,0x43,0xfc, + 0xc4,0xa0,0xfa,0xd8,0xdf,0x70,0x46,0xdb,0x6c,0x71,0x78,0xc2,0x34,0x10,0x22,0x1a, + 0x88,0xda,0x91,0x04,0x73,0x05,0x99,0x35,0x29,0x40,0xc4,0xbf,0x3b,0xd8,0x73,0x6b, + 0x1d,0xb1,0xf3,0x41,0x58,0x52,0x26,0x9a,0xe9,0x13,0x2f,0xe1,0xb9,0x1a,0x75,0x5c, + 0x91,0x70,0x6d,0xf7,0xdc,0xe2,0xf1,0xd1,0x31,0xa1,0x66,0x97,0x2c,0xcd,0xf3,0x19, + 0x73,0x79,0x10,0xad,0x0d,0x0d,0x04,0xb0,0x99,0x27,0x77,0xb8,0x75,0x65,0x97,0x4e, + 0x82,0xca,0xa2,0xdd,0xb1,0x23,0x1f,0x4a,0xda,0xe4,0x62,0xb7,0x53,0x93,0x56,0x55, + 0xd1,0x9c,0xcb,0x33,0x9f,0x2f,0xa0,0x06,0x46,0xa6,0x45,0x92,0x55,0x89,0xd4,0xc4, + 0x2c,0x50,0xc2,0x9e,0xa5,0xb0,0xb0,0xb9,0x00,0x13,0xb5,0xcb,0x62,0x03,0x7c,0x23, + 0x4a,0x07,0xb2,0x62,0x31,0xd8,0x2c,0x8e,0x7c,0x01,0x7b,0x8f,0x16,0xf2,0x4e,0x0d, + 0xa5,0x9e,0xa0,0x21,0x8e,0x18,0x13,0x52,0x42,0xea,0xd2,0xac,0x2a,0xcc,0xaa,0xc6, + 0xf7,0x26,0xc3,0x72,0x49,0x17,0x24,0x9b,0x1b,0x0b,0x0c,0x7b,0x17,0xcd,0x51,0xcf, + 0x52,0xb4,0x93,0x4c,0x62,0x74,0x29,0x23,0x22,0x08,0xd9,0x91,0xb9,0x1b,0xdc,0xad, + 0xc6,0xdf,0xd3,0x04,0xc2,0x8f,0x4b,0x14,0x72,0x35,0x34,0xf0,0x51,0x4f,0x12,0x8e, + 0xd2,0xb1,0xbd,0x43,0x0d,0x4b,0xa8,0x1b,0x02,0x45,0xc9,0x06,0xd7,0xf3,0x63,0xe0, + 0x4b,0x46,0xd2,0xb2,0x45,0xc9,0xd2,0xad,0x1b,0x30,0x06,0x7a,0x78,0xc6,0xb9,0x23, + 0x91,0xc4,0x28,0xfb,0x7e,0x52,0x40,0xd4,0x77,0xbf,0x16,0x3b,0x6c,0x0e,0x0f,0xa9, + 0xcb,0x97,0x4d,0x7c,0xab,0x4a,0xf4,0xf6,0x97,0xb9,0x45,0x10,0x8c,0x31,0x0a,0xf7, + 0x6d,0xd9,0x01,0xd6,0xc3,0x48,0x16,0x24,0x05,0xdc,0xf3,0x71,0x83,0x0f,0x66,0x16, + 0xa4,0x9e,0x4a,0x55,0x65,0xa6,0x86,0x15,0x68,0xe4,0x20,0x84,0xd0,0x49,0xb1,0x0d, + 0xc7,0xeb,0xf5,0xbd,0xf6,0xc3,0x99,0xe4,0x93,0x65,0xed,0x2a,0xc0,0xd4,0x91,0xb4, + 0x32,0x19,0x17,0xfc,0x39,0x95,0x0a,0x92,0xc4,0x30,0x91,0x2d,0xb1,0xb0,0xf0,0x00, + 0x20,0x13,0x62,0x0e,0x09,0xba,0xb4,0x2d,0x6d,0xbf,0x14,0xa3,0xe9,0xda,0xee,0x87, + 0x56,0xcd,0x23,0xaa,0x86,0x4a,0x69,0x25,0x6a,0x6a,0x9a,0x79,0x94,0xcf,0x14,0x93, + 0x6c,0xf1,0x95,0x73,0xf8,0x91,0x13,0xfc,0x80,0xad,0xbf,0xcd,0xb1,0x26,0xb7,0xd0, + 0xb9,0xdd,0x34,0x72,0x57,0xcf,0x9c,0x85,0xa0,0xa5,0x92,0x9d,0x3f,0xc3,0x6a,0x6b, + 0x63,0xec,0xac,0xf4,0xd0,0x48,0x43,0xa3,0x76,0xce,0x89,0x24,0x0a,0xda,0x83,0x32, + 0xb3,0x0d,0xac,0x40,0x37,0xc2,0xbe,0x2c,0x3d,0x3d,0x3e,0x5f,0x54,0x90,0x9a,0x73, + 0x25,0x5e,0x6c,0x12,0xb0,0xce,0x19,0xdc,0x24,0x63,0x5a,0x22,0x69,0x5d,0x48,0x1c, + 0xab,0x5b,0x41,0xd2,0x47,0x36,0x23,0x6a,0xaf,0x4f,0x64,0xd9,0x4e,0x6b,0x57,0x9b, + 0x4b,0x55,0x51,0x49,0x96,0x64,0x82,0x99,0xaa,0xc9,0xaa,0xa9,0x34,0xb0,0xcd,0x18, + 0x1f,0xf2,0xe3,0xd4,0xa0,0x99,0x08,0x2a,0xab,0xa4,0x12,0x4a,0xee,0x79,0xc7,0x33, + 0x0f,0x8b,0xad,0x7d,0xd4,0x60,0x73,0x9c,0x00,0xe5,0x1b,0xd6,0xdd,0x6b,0x4f,0xd7, + 0x31,0xc1,0x57,0x55,0x94,0x99,0x28,0xf2,0xd9,0xa7,0x8a,0x9e,0xa5,0x04,0x51,0x55, + 0x1a,0x6b,0xaf,0x64,0x48,0xa4,0x90,0x10,0x1b,0xb1,0x16,0x20,0xb1,0x61,0xe9,0xf3, + 0x37,0xd2,0x7d,0x63,0x2e,0x6b,0x3d,0x21,0xea,0x3c,0xab,0x30,0x8e,0xb5,0x23,0x5a, + 0x79,0xe6,0xa4,0x89,0xe1,0x86,0x54,0xee,0x5d,0x4b,0x32,0x06,0x24,0x9d,0x62,0xea, + 0xc0,0xad,0xc2,0x90,0x31,0x96,0xd7,0xe6,0xbd,0x3d,0x45,0x99,0x47,0x36,0x5d,0x92, + 0x35,0x0c,0xb4,0xb5,0x05,0xc4,0x15,0xb2,0xc9,0x50,0xac,0x6e,0x34,0xa4,0xa1,0x82, + 0xfa,0x39,0x24,0x15,0x37,0x02,0xde,0x70,0xff,0x00,0x50,0xe6,0xb4,0x90,0xbd,0x1d, + 0x6f,0x4e,0xe7,0x94,0x52,0x85,0x60,0x63,0xa6,0xcb,0xa9,0xa6,0xa3,0x92,0x09,0xb6, + 0x67,0x72,0x2c,0x05,0xaf,0x6d,0x27,0x51,0xe2,0xde,0x31,0x61,0x81,0xa5,0xa1,0x80, + 0x2b,0x0b,0x76,0x9e,0x6d,0x74,0xd6,0x5b,0x1c,0x90,0x66,0x55,0xd5,0x2d,0xd5,0xd5, + 0x14,0x48,0xbf,0xf0,0xf0,0xa3,0xc0,0x8c,0xca,0xc0,0x17,0x69,0x15,0xf9,0x72,0xb6, + 0x24,0x01,0x7d,0x9c,0xdc,0x90,0x06,0x2a,0x7d,0x6f,0xd0,0xb0,0xd6,0x53,0xcb,0x5d, + 0xf2,0xb4,0x0c,0xdf,0xe2,0xb4,0x6e,0x33,0x4c,0xbe,0x0e,0xc4,0xb5,0x46,0x76,0x2a, + 0xc2,0x5d,0x2e,0x55,0x6f,0xf8,0x4e,0x00,0x5b,0x5f,0x56,0x92,0x2e,0x46,0x2a,0xdd, + 0x01,0xd5,0xf4,0xdd,0x3f,0xd2,0x47,0x2f,0xa8,0xa3,0xab,0xcf,0xa9,0xab,0xa0,0x86, + 0x78,0xe8,0x5e,0x38,0xe5,0xec,0xc8,0xbb,0x1f,0x55,0x8d,0x96,0xdb,0xad,0xd4,0x1f, + 0x17,0xda,0xf8,0xd3,0xf2,0x8e,0xbf,0xa3,0xa0,0x35,0x33,0xe5,0xbd,0x27,0x9f,0x49, + 0x4f,0x53,0x1d,0xd2,0x21,0x97,0x2a,0x6a,0x3a,0xf5,0xe9,0xee,0x33,0x01,0x75,0x56, + 0x36,0xff,0x00,0x28,0xb1,0x16,0xf3,0xca,0x31,0xcb,0x0c,0x96,0xd1,0x7f,0x60,0x96, + 0xc1,0xc2,0x0d,0xa8,0x85,0x6d,0x55,0x73,0xd2,0xc5,0xdb,0xa9,0x7a,0xc7,0x92,0x1a, + 0x84,0x76,0x12,0x92,0x03,0x21,0xb2,0xb3,0x06,0x2b,0xb5,0x81,0x02,0xc4,0x7f,0x9a, + 0xdb,0x54,0x2a,0x3e,0x20,0x49,0x55,0x4d,0x63,0x1c,0x52,0x24,0xec,0x88,0x59,0x67, + 0xed,0x29,0x5e,0x55,0x02,0xb0,0xd4,0x1a,0xde,0xc6,0xe0,0xee,0x47,0x8c,0x4d,0xcf, + 0xf1,0x06,0x7c,0xb2,0xa4,0x1a,0x4e,0x9d,0x49,0x2b,0xe5,0x82,0x34,0x30,0x36,0x5f, + 0x2a,0x0a,0x73,0xdd,0x66,0xb3,0x3e,0x9d,0x7b,0x2e,0x9e,0x01,0x0c,0xce,0xc4,0x00, + 0x4e,0x03,0xcf,0x7e,0x20,0xa4,0x86,0xb6,0x29,0xfa,0x2a,0x1a,0xd8,0x6a,0xa6,0x8a, + 0x6b,0xcf,0x4b,0x2a,0x47,0x51,0x2c,0x67,0xd2,0xec,0x5d,0x4b,0xab,0x00,0x81,0x6e, + 0x34,0x96,0x00,0x06,0xda,0xd8,0xbd,0xa1,0xc4,0xfc,0x51,0xdf,0xd4,0x24,0x18,0x5a, + 0x2f,0x4f,0x66,0xf9,0xaf,0x4f,0x64,0x75,0x44,0xe5,0x4d,0x57,0x99,0xac,0x2a,0x69, + 0xbb,0x92,0xbd,0x4a,0xc5,0x33,0xa5,0x95,0x2e,0x58,0x69,0x55,0xb0,0x3c,0x69,0xdb, + 0x8f,0x50,0xbe,0x49,0x55,0x9d,0xf5,0x57,0x59,0xf5,0x17,0x51,0x56,0x4e,0xc6,0x6c, + 0xcf,0x28,0x55,0x8a,0xa5,0x22,0x04,0x2c,0x69,0x1b,0xe9,0x40,0x06,0xd6,0x25,0x95, + 0x6d,0x61,0x73,0xb1,0xbd,0xee,0x70,0xe4,0x5d,0x69,0xd4,0x39,0x87,0x50,0x31,0x8f, + 0x2c,0x14,0x14,0xec,0xd2,0x34,0xb4,0x60,0xb5,0x82,0x1b,0x00,0x08,0x25,0x2e,0x03, + 0x0f,0x1e,0x01,0xc1,0x94,0xdd,0x5d,0xd5,0x09,0x54,0x2a,0x5f,0x27,0x53,0x51,0x26, + 0xd2,0x3c,0x5a,0x53,0x58,0x25,0x75,0x10,0x55,0xb9,0x24,0x03,0x7d,0xfe,0xe7,0x8c, + 0x68,0x63,0xf5,0x4c,0x88,0xb1,0xa2,0xc1,0x37,0x5e,0xaa,0x16,0xb5,0xce,0xdd,0x59, + 0xe1,0x47,0x67,0xb5,0xb9,0xf5,0x6c,0x59,0x6c,0x59,0xfc,0xb3,0x54,0x1a,0x1a,0x63, + 0x4b,0x47,0x24,0xab,0x64,0x8e,0x1d,0x5a,0xac,0x1e,0xdb,0x80,0x5b,0x7e,0x4a,0x83, + 0x6f,0x18,0xd1,0x7a,0x3b,0xa7,0xe9,0xf2,0x0e,0x88,0xea,0xda,0xbc,0xf9,0xd8,0x56, + 0xc7,0x5b,0x05,0x0c,0x50,0xa3,0x90,0x82,0x55,0x1a,0x94,0x11,0xe6,0xcd,0x23,0x39, + 0x3c,0x1d,0x2b,0xfa,0xd3,0xeb,0xb3,0xbe,0xb0,0xcd,0x65,0xae,0xef,0x52,0x4b,0x0e, + 0x56,0xcc,0xae,0xb4,0xbf,0x24,0x18,0x2b,0x2d,0xad,0xa4,0xb3,0x05,0x46,0x23,0x9f, + 0x16,0x3b,0xec,0x6d,0x8b,0x2e,0x63,0xd6,0xbd,0x4c,0x29,0xd6,0x2c,0xb3,0x20,0xcb, + 0xe7,0x8d,0xd9,0x84,0xd1,0xd5,0xd6,0xc5,0x12,0xbc,0xa2,0x38,0xc7,0x74,0x11,0x31, + 0x07,0x65,0x23,0x62,0x06,0xc3,0x8b,0xe1,0xdd,0x36,0xa0,0xed,0x0e,0x6f,0xcf,0x3f, + 0xca,0xb6,0x32,0x1b,0x78,0x4c,0x54,0xc5,0x22,0x30,0x90,0xc4,0xda,0x25,0x46,0x91, + 0x48,0x5b,0xfa,0x16,0xde,0xab,0x78,0x16,0x37,0x3f,0x42,0x0f,0x9c,0x43,0x66,0xf9, + 0x34,0x75,0x28,0x95,0x35,0x89,0x1c,0xeb,0xa9,0x91,0x10,0xb9,0x56,0x02,0x44,0xb5, + 0xc8,0xb8,0x3b,0x80,0x47,0xd3,0xf5,0xc1,0x99,0x8e,0x7d,0xd5,0x92,0x52,0xe5,0xc3, + 0x2f,0xf9,0x5a,0x4c,0xd4,0x34,0x8b,0x2b,0x45,0x14,0x45,0x12,0x6d,0x5a,0x75,0x77, + 0x9e,0x5d,0x2c,0x96,0x0b,0xa7,0x4d,0x88,0xb6,0xf7,0x18,0x81,0xcd,0x33,0x5e,0xb0, + 0xcd,0x2a,0x57,0xe6,0xe3,0xa6,0xee,0xc6,0xc5,0x99,0xa3,0x11,0xc8,0xf3,0x29,0x3e, + 0x9f,0x51,0x6f,0x72,0x48,0x02,0xdb,0x1f,0xa6,0x1e,0x39,0x25,0x2e,0xbd,0xb4,0x89, + 0x7d,0xe0,0x84,0xfd,0x2d,0x05,0x14,0x51,0xce,0x8d,0x04,0x3f,0x2f,0x50,0x80,0x49, + 0x1c,0xad,0x75,0x91,0x80,0x00,0x0d,0xcf,0x20,0x28,0xe3,0xdb,0x14,0x2e,0xb5,0xa0, + 0x34,0xf5,0x62,0x28,0xe2,0x99,0xd6,0x55,0x88,0x40,0xcd,0x19,0x11,0x85,0xb1,0x05, + 0x4e,0xc2,0xfe,0x0e,0xcd,0x7f,0x1a,0x76,0xc4,0xcd,0x64,0x1d,0x4f,0xa5,0x98,0xc7, + 0x52,0xf0,0x30,0x65,0xd6,0x0d,0x3a,0x05,0x5b,0x8f,0x50,0x1a,0xce,0xe1,0x89,0x07, + 0x7b,0x7d,0xae,0x30,0x56,0x5f,0x43,0x9a,0x4f,0x01,0xff,0x00,0x1f,0xa4,0x82,0x62, + 0x1c,0x2a,0x29,0x95,0x18,0xe9,0xd3,0x6e,0x03,0x5a,0xe4,0x72,0x7f,0xae,0xf8,0xbc, + 0x6f,0x73,0xac,0x84,0xbb,0x81,0x1b,0x69,0x51,0xa9,0xf2,0xe1,0xd4,0x34,0xe1,0x29, + 0xa8,0xe3,0xcb,0x24,0xa5,0x8a,0x38,0x63,0x82,0x2a,0x8e,0xe3,0x4f,0x3a,0x80,0xa3, + 0xf0,0x4d,0xe5,0x0e,0xf6,0x66,0xb8,0xb2,0x2d,0xac,0x00,0xc4,0x4d,0x6e,0x55,0x5b, + 0x43,0x97,0xfc,0xf4,0x94,0xeb,0x40,0x76,0x98,0x99,0x1e,0xcd,0x2c,0x65,0x8a,0x82, + 0x82,0xfb,0x0b,0xa9,0xb8,0x36,0xde,0xc7,0xf9,0x85,0xfa,0x2b,0xa9,0x23,0xe8,0xf9, + 0xfe,0x05,0x41,0xd3,0xd9,0x14,0x39,0x75,0x1f,0x59,0x53,0x53,0xd3,0x3b,0x43,0x4f, + 0x44,0xd1,0xd4,0x34,0xe9,0x31,0x33,0x09,0x2a,0x0e,0xa5,0x60,0x51,0xc8,0xb8,0x71, + 0x73,0xa4,0x5e,0xc0,0x8c,0x64,0x05,0xfa,0xf7,0xe5,0xc5,0x13,0x66,0x59,0xa5,0x46, + 0x5e,0x82,0x35,0x58,0x25,0xce,0x3b,0xb0,0x88,0xc0,0x3b,0x69,0x67,0x2b,0x65,0x0a, + 0xb6,0x5b,0x60,0xb0,0x39,0xd6,0x48,0xac,0xf5,0x56,0x96,0x30,0x0c,0x9b,0x54,0x3a, + 0x1a,0x90,0x95,0xb5,0x0d,0x0c,0x7f,0xf0,0xdd,0xb7,0x90,0x32,0xb6,0x9b,0x10,0xb7, + 0x24,0x6c,0x45,0xc5,0xfc,0xed,0xbe,0x09,0xad,0xce,0x29,0x6a,0x74,0xd4,0xda,0x63, + 0x98,0xbc,0xc1,0xcc,0x61,0x0b,0xab,0x21,0xd8,0x2b,0x02,0x74,0xf8,0x16,0xb6,0xfb, + 0xfd,0x31,0x37,0x92,0x74,0x5e,0x6f,0x0f,0x50,0x51,0x0c,0xf3,0x29,0x92,0x6c,0x9c, + 0xce,0xaf,0x56,0x21,0x99,0x48,0x28,0x77,0x20,0x30,0x60,0x4f,0x8b,0x8d,0xb7,0x18, + 0x99,0xce,0x7a,0x36,0xa7,0xa7,0xf3,0xe9,0x92,0x83,0x29,0x5c,0xf2,0x86,0x9e,0x56, + 0x31,0xf6,0x64,0x52,0x93,0x12,0xaa,0x55,0x99,0xc1,0xd5,0xe9,0x66,0x20,0x81,0x63, + 0xb1,0xb1,0x1c,0xe1,0xb0,0x64,0xdb,0x5d,0x3e,0x8a,0x82,0x3a,0xaa,0x44,0x35,0xdd, + 0xf8,0x92,0x93,0xe5,0x74,0xcd,0x24,0x97,0x89,0x8b,0x6a,0x31,0x9f,0x37,0x5b,0x73, + 0x6d,0xb9,0xdb,0xf4,0xc4,0x4c,0xf3,0x40,0xd2,0x22,0x46,0x04,0x8d,0xe9,0x05,0x0d, + 0xf7,0x36,0xdb,0x6f,0xaf,0x9f,0x6c,0x58,0x33,0xcc,0x83,0x3c,0xa0,0xa7,0x6a,0x8a, + 0xcc,0xae,0xae,0x90,0x77,0xc8,0x32,0x0d,0xd0,0xea,0xbd,0x90,0x58,0x92,0x47,0x23, + 0xde,0xc3,0x06,0x65,0xff,0x00,0x0d,0xb3,0xbe,0xa4,0xa5,0x59,0x3a,0x53,0x2e,0xae, + 0xae,0xcc,0xa2,0x9a,0xf5,0x34,0xa9,0x09,0x42,0x23,0x22,0xeb,0x20,0x0c,0x05,0x80, + 0x21,0x94,0xee,0x6f,0xb1,0xf2,0x70,0xe1,0xbb,0x4a,0x80,0x5a,0xaa,0xad,0x61,0x85, + 0x6f,0x49,0x14,0x71,0x8f,0xcc,0x48,0x16,0x24,0xdc,0x7f,0xfe,0xac,0x3e,0xd8,0x91, + 0xa1,0xcc,0xf3,0x0c,0xaa,0xb5,0x1e,0x8e,0x55,0x8a,0x51,0x19,0x00,0xa8,0x25,0x55, + 0x49,0x17,0x52,0x0d,0xc1,0x1c,0x7f,0xda,0xd8,0xb6,0x27,0xc0,0x8f,0x89,0x75,0x70, + 0xc8,0xa9,0xd1,0xd5,0xe0,0xac,0xaa,0xf2,0x6b,0x28,0x8a,0x43,0x1e,0x43,0x16,0xb1, + 0xdf,0x73,0x6d,0x80,0x17,0x3b,0x71,0x66,0xa3,0xfe,0x1e,0xba,0xe1,0x2a,0x60,0x35, + 0x79,0x6e,0x5e,0xd4,0x8a,0x43,0x48,0xe3,0x36,0x86,0xcd,0x6d,0x3e,0x9b,0xdc,0xef, + 0x72,0x41,0x3b,0x81,0xb9,0xf0,0x2f,0x54,0x92,0xc4,0xdc,0x39,0xc3,0xee,0x89,0x00, + 0x72,0x84,0xca,0xf2,0x8c,0x9a,0x7c,0x82,0x8e,0xb7,0x3e,0x6a,0x0a,0x91,0x3e,0x64, + 0xd4,0x95,0xf4,0xd9,0x7a,0x45,0x0d,0x54,0x09,0x24,0x41,0xa3,0xaa,0x57,0x6d,0x45, + 0x42,0xc8,0x40,0x2c,0x14,0xad,0xb5,0x70,0x6f,0x8a,0xad,0x1e,0x5d,0x1d,0x34,0x46, + 0x21,0x49,0x1b,0xd7,0x24,0xa2,0x20,0xee,0x0e,0xbd,0x7c,0x8d,0x2a,0xdb,0x93,0x6b, + 0x9d,0xb8,0xbf,0x82,0x77,0xd3,0xeb,0xfe,0x0a,0xf5,0xcd,0x4d,0x05,0x54,0x47,0x2f, + 0xc8,0x7b,0xf3,0x5d,0x51,0xc6,0x6c,0xa6,0x48,0xaf,0x62,0x10,0x39,0xe4,0x7a,0x02, + 0x91,0xc1,0xbf,0xdc,0x89,0x7c,0xb7,0xe0,0x07,0x51,0x4f,0x06,0x63,0xf3,0xd9,0x86, + 0x5f,0x4d,0x55,0x99,0x50,0xc1,0x1c,0x69,0x21,0x23,0xe5,0x99,0x98,0x19,0x43,0x6a, + 0x89,0xaf,0x62,0xaa,0xa0,0xa3,0x29,0xb1,0x36,0x36,0x04,0x15,0x6e,0xa2,0x10,0x28, + 0xb8,0x25,0xa2,0x78,0x58,0xb5,0x2e,0x47,0x5f,0x9a,0x4f,0x48,0x20,0xa6,0x9c,0xcb, + 0x54,0xe2,0x38,0x74,0x45,0xac,0xc8,0xcd,0xf9,0x41,0x6b,0xd8,0x5e,0xf7,0xde,0xd6, + 0x1b,0xe2,0xd6,0x32,0xb3,0x97,0xe4,0xf4,0xf5,0xd4,0x52,0xe5,0x95,0xb4,0xdd,0xf8, + 0x23,0xab,0xa8,0x90,0x3b,0x4b,0x97,0x86,0x32,0x81,0x4e,0x23,0x92,0x44,0x25,0x1c, + 0x6b,0x91,0x8a,0x29,0x17,0xd0,0x19,0x81,0x36,0x37,0x6c,0xbf,0xe0,0x07,0x5a,0xc7, + 0x57,0x1c,0xa6,0xbf,0xa6,0x29,0xe6,0x81,0x3b,0x4a,0x64,0xcc,0xa5,0x50,0x81,0x3d, + 0x0d,0x6b,0x43,0xc6,0xfe,0x92,0x4e,0xd7,0xe7,0x03,0xc5,0xfc,0x3a,0xf5,0x5f,0xcd, + 0x49,0x4f,0x3d,0x7f,0x4b,0x53,0xac,0x31,0xc9,0x0a,0x46,0xd9,0x8c,0xc4,0xe8,0x2c, + 0x40,0xff,0x00,0xd2,0x17,0xde,0xdb,0xb1,0xb1,0xd8,0x90,0x4e,0x2c,0x1a,0x88,0xbf, + 0xf4,0x13,0x88,0xdd,0xd9,0x50,0x6a,0x3a,0x6e,0xa9,0x3a,0x45,0xb3,0xea,0x4c,0xd2, + 0x39,0xe8,0xe2,0xcd,0x2a,0x32,0xe9,0x95,0xeb,0x4a,0x4b,0x51,0xa6,0x01,0x51,0x1b, + 0x0a,0x42,0xba,0x95,0x42,0xac,0x80,0x16,0x36,0x2d,0x65,0xf4,0x9e,0x43,0xae,0xd3, + 0x4d,0x0d,0x04,0x55,0x33,0xb6,0x6c,0x69,0x03,0x47,0xac,0x37,0xa2,0x0d,0xc0,0x54, + 0xd5,0x72,0x0a,0x85,0x0a,0xc1,0x94,0xdb,0xd6,0x54,0xa8,0x2b,0xbe,0x93,0x57,0xfc, + 0x3d,0xf5,0xec,0x8c,0x63,0xf9,0x6e,0x93,0x8a,0x5a,0x5e,0xdf,0x75,0xe1,0xcd,0x57, + 0xbb,0x2b,0x2f,0x70,0xab,0xbb,0xdb,0x92,0xae,0x41,0x3b,0x5f,0x42,0x92,0x3c,0x96, + 0xf2,0x5f,0xe1,0x97,0xaa,0xea,0xea,0x22,0x4c,0xde,0xa3,0x25,0xca,0xa8,0x22,0x0a, + 0x66,0x92,0x1c,0xc5,0x27,0x72,0xe9,0x7b,0x02,0x80,0x5c,0xde,0xe4,0x91,0xbd,0xc0, + 0x1e,0x71,0x0e,0xa2,0x1a,0xfe,0xa0,0x98,0x44,0xf3,0x80,0x10,0x59,0x8f,0x4a,0x66, + 0xd9,0xee,0x5b,0x41,0x40,0xf9,0xe5,0x6f,0x50,0xac,0x75,0x0d,0x5a,0x20,0x93,0x2b, + 0x58,0x5a,0xe5,0x34,0x10,0x1d,0x24,0x62,0xb1,0x80,0x09,0x03,0x48,0xe4,0xec,0x0e, + 0x34,0x1c,0x93,0xa3,0xba,0xc2,0x6c,0xb2,0x1c,0xbf,0x29,0xa1,0xcd,0x06,0x4f,0x04, + 0x04,0x22,0x24,0x4d,0x04,0x2c,0x1c,0xdd,0xc0,0x4d,0x81,0x52,0x49,0xba,0xf2,0x45, + 0xaf,0x7b,0x03,0x8e,0xab,0x35,0xf5,0x0a,0xaa,0xb1,0x88,0xe2,0x8e,0xc0,0x5a,0x08, + 0x54,0x59,0x47,0x80,0x6d,0x8f,0xa5,0xcc,0xea,0x5f,0x53,0x77,0xa6,0x66,0x1e,0xa1, + 0xf8,0x83,0xf4,0xfe,0xa3,0x1e,0x71,0xfa,0xe0,0x45,0x06,0xae,0x88,0xd2,0xc6,0xde, + 0x72,0xb1,0x28,0x3a,0x63,0xad,0xea,0x44,0xf1,0x66,0xcb,0x0d,0x5c,0x46,0x25,0x82, + 0x78,0xaa,0x28,0xfb,0x82,0x68,0x41,0x3a,0x75,0x92,0x7d,0x5f,0x99,0xac,0x05,0xc8, + 0xb0,0x1b,0x79,0x6b,0x3b,0xf8,0x33,0x3f,0x55,0x4f,0x4d,0xff,0x00,0x88,0x3a,0x6e, + 0x86,0xa8,0x68,0x54,0x92,0x45,0xa4,0x85,0x2a,0x1f,0x4b,0x29,0x1a,0xa5,0x1e,0xa0, + 0xa0,0x0d,0x21,0x41,0x16,0x17,0xdf,0xc6,0x37,0x29,0x2b,0x0d,0x4b,0x05,0x62,0x51, + 0x80,0xf0,0x77,0x17,0x1b,0xef,0x80,0x64,0x91,0x98,0x01,0xdd,0x74,0xb3,0x10,0x08, + 0x62,0x6f,0xec,0x0f,0xfa,0x63,0x27,0x9e,0xe0,0x6d,0xa2,0xbe,0x89,0xfc,0xa8,0xc1, + 0x14,0xd5,0x91,0x52,0x7f,0x0c,0xdd,0x39,0x48,0xd1,0xb4,0x54,0x73,0x50,0xcb,0x1e, + 0xf1,0x98,0x9e,0xe2,0x32,0x41,0xb8,0x20,0x92,0x0f,0x3e,0x79,0xdb,0xda,0xf8,0x36, + 0xaf,0xf8,0x7b,0xca,0x33,0x08,0x04,0x35,0x95,0x95,0xd2,0x15,0x20,0xc0,0xe9,0x65, + 0x28,0x00,0xb7,0x3b,0x82,0x49,0xb9,0xbf,0x3b,0xfe,0xfa,0xa4,0x71,0x8e,0xe2,0xca, + 0xf5,0x9a,0x0d,0xc2,0x82,0x49,0x20,0x01,0xb7,0x1b,0x6f,0xcf,0xf4,0xc3,0x92,0xce, + 0x14,0xd8,0xcb,0x1b,0xee,0xda,0x75,0x0e,0x7e,0xb6,0xff,0x00,0x7c,0x61,0xff,0x00, + 0x55,0x28,0xfe,0xe5,0x36,0x44,0x6e,0xc5,0x2c,0x7e,0x9b,0xf8,0x7e,0xca,0xf2,0xe9, + 0x92,0x5e,0x9f,0xaf,0xaf,0xcb,0xe5,0xee,0x96,0x69,0x26,0x91,0x9c,0xb2,0x8e,0x14, + 0xe9,0x2b,0xb5,0xcd,0xfe,0xb8,0x32,0x6f,0x83,0xe1,0xca,0x41,0x2f,0x52,0x66,0x55, + 0x12,0xbd,0x9b,0xbb,0x24,0xec,0xc2,0xf7,0x26,0xd7,0xbf,0x91,0xfb,0x58,0x7b,0x63, + 0x54,0x35,0x4d,0x33,0x15,0x6d,0x3a,0x85,0xbf,0x29,0xd4,0xa6,0xd7,0xdf,0xfd,0x70, + 0xd0,0xa9,0x75,0x4b,0xc8,0x80,0x84,0xdf,0x49,0x50,0x07,0xdf,0x7c,0x0f,0xd6,0x4c, + 0x78,0x71,0x44,0x47,0x10,0xc0,0x16,0xb2,0xf8,0x3e,0x03,0x89,0x2a,0x0a,0xc5,0xd4, + 0x52,0x11,0x19,0x2b,0x51,0x2b,0xa3,0x6a,0xa9,0xb8,0xb8,0x20,0xdc,0x90,0x05,0xed, + 0x62,0x7c,0x7d,0x70,0xdb,0x7f,0x0f,0xff,0x00,0x2d,0x1c,0xa4,0xe7,0x94,0xd3,0x4d, + 0x24,0xa4,0xac,0xc6,0x9d,0x95,0xc5,0xce,0xfc,0x35,0xb8,0x24,0xf1,0xc8,0xfd,0x31, + 0xb0,0xad,0x76,0xa8,0xec,0x8c,0x16,0xdc,0x70,0x07,0x36,0xd8,0xff,0x00,0x4c,0x30, + 0xb5,0xd2,0x95,0x60,0xa1,0x92,0x4d,0xcd,0xb7,0x25,0x87,0x37,0xdb,0xeb,0x87,0xfd, + 0x4c,0xc4,0x7f,0x52,0xb0,0xc5,0x1d,0x70,0xb2,0xf3,0xfc,0x3f,0x65,0x33,0x18,0xbe, + 0x73,0x39,0x9d,0x91,0x17,0x6e,0xd5,0x30,0x8e,0xe2,0xfb,0xee,0xc4,0x90,0x76,0xe7, + 0xeb,0x84,0x0f,0x80,0x59,0x74,0x35,0x31,0xcd,0x06,0x64,0xd4,0xc9,0x0a,0x9e,0xd2, + 0xf6,0x15,0x98,0x1b,0xec,0x7d,0x88,0xb5,0xad,0xb7,0x8c,0x6a,0x52,0x57,0x56,0x10, + 0x77,0xd4,0x8b,0xb2,0x15,0x17,0x36,0xb7,0xfb,0xfd,0xb0,0xd4,0x72,0xcc,0xf2,0x1b, + 0x33,0x2b,0x5e,0xdb,0x83,0x7f,0xb5,0xbf,0x5c,0x21,0xd5,0xcd,0xdd,0x03,0x1c,0x7d, + 0x96,0x4e,0xff,0x00,0x02,0x69,0x27,0xab,0x81,0x9b,0x39,0xa9,0xab,0x58,0xed,0xe8, + 0x78,0x59,0x6f,0xc5,0xc0,0xde,0xeb,0x82,0xe5,0xf8,0x0f,0x43,0x24,0x2b,0x1d,0x66, + 0x79,0x53,0x1e,0x8d,0x25,0x34,0x52,0xa9,0x36,0x17,0xbd,0xf7,0xdc,0x92,0x79,0x38, + 0xd3,0x0c,0xf2,0xb3,0xe8,0x91,0xae,0xcc,0x80,0xdd,0x9b,0x7b,0xde,0xf7,0xbf,0x8c, + 0x2d,0xd2,0x49,0xae,0x23,0x3a,0x3d,0x57,0x37,0x37,0xd2,0x7f,0xdf,0xe9,0x83,0xfa, + 0xe9,0x4f,0xf7,0x25,0x11,0x44,0x73,0x4b,0x32,0x8f,0xf8,0x78,0xc8,0x3b,0x7f,0x8b, + 0x9a,0x56,0xcc,0xec,0xba,0x47,0xfc,0x2c,0x48,0x37,0xde,0xe2,0xc2,0xe4,0xdf,0xdf, + 0xd8,0x7b,0x0c,0x2e,0x93,0xf8,0x7a,0xe9,0xd8,0xe4,0x67,0xcc,0x33,0x3a,0xfa,0x94, + 0xb1,0x58,0xc2,0xc7,0x1a,0x15,0x06,0xfb,0x12,0x06,0xff,0x00,0xf6,0xbf,0xd3,0x1a, + 0x6b,0xd2,0x31,0x75,0x78,0xe6,0x91,0x80,0xb8,0x3b,0xe1,0x0c,0x9f,0x2e,0x17,0x5b, + 0x11,0xaa,0xc6,0xc0,0x93,0xab,0x6b,0x8b,0x0f,0xb6,0xff,0x00,0x6b,0xe1,0xbf,0x59, + 0xa8,0x3c,0x39,0x37,0x95,0x17,0x34,0xb3,0xc9,0x7f,0x87,0xee,0x92,0x77,0x95,0x23, + 0xaf,0xcc,0x61,0x33,0xa8,0x50,0x54,0xa0,0x31,0x8e,0x75,0x01,0x6b,0x13,0xb0,0xe7, + 0xc6,0x1e,0x9b,0xf8,0x7a,0xe8,0x57,0xa5,0x11,0x4a,0xf9,0x97,0x7c,0xa9,0x3d,0xd8, + 0xe6,0xdf,0x57,0x3a,0x82,0xf1,0xb6,0xfb,0x0f,0x7c,0x68,0x14,0xf3,0xc1,0x50,0xb1, + 0xf6,0x2a,0x96,0x45,0x70,0x1e,0x32,0xad,0x7b,0x8b,0x80,0x3e,0xdb,0xfb,0xfe,0xb8, + 0x1e,0x3a,0xf8,0x64,0x69,0x74,0x16,0x91,0xa2,0x6b,0x34,0x76,0xb1,0x6e,0x2e,0x41, + 0xfa,0x5c,0x7e,0xff,0x00,0x4c,0x27,0xeb,0x35,0x3f,0xfa,0x28,0x06,0xc2,0x3a,0x2c, + 0xe8,0xff,0x00,0x0f,0x5d,0x27,0x25,0x54,0xd2,0x7c,0xfe,0x6e,0xb4,0xf2,0xb8,0x22, + 0x18,0xc4,0x4a,0x00,0xff,0x00,0x28,0x36,0x26,0xd7,0xfd,0x71,0xea,0x7f,0x0e,0x1d, + 0x23,0xc7,0xf8,0x96,0x75,0x60,0x40,0x37,0x96,0x21,0xa9,0x47,0xf2,0x9f,0x4f,0xfa, + 0x5b,0x17,0xb7,0xea,0x5a,0x58,0x5d,0xe2,0xa8,0x47,0x49,0x23,0x2c,0xac,0xd2,0x11, + 0x62,0x00,0xb8,0xdc,0x72,0x4d,0xb6,0x1e,0x7f,0x7c,0x37,0x27,0x50,0x47,0x4c,0xae, + 0xd5,0x34,0xd2,0x91,0x03,0x2a,0x35,0xf6,0xbe,0xae,0x0e,0xfc,0x81,0xb5,0xfd,0x81, + 0x18,0x3f,0xaa,0xd5,0x75,0x25,0x56,0x7c,0x90,0x68,0x85,0x96,0xe7,0x9f,0xc3,0x2e, + 0x51,0x5f,0x97,0xcd,0x47,0x07,0x54,0x57,0x52,0x24,0xae,0x8c,0x1e,0x5a,0x44,0x96, + 0xda,0x6f,0x6d,0xc1,0x1b,0x12,0xdf,0xa7,0xbe,0x21,0x32,0x0f,0xe1,0xb3,0x28,0xe9, + 0xf1,0x53,0x4f,0x9e,0x67,0x15,0x19,0xc4,0xd3,0x30,0x65,0x6f,0x97,0x44,0x89,0x6d, + 0x7f,0xe5,0x66,0x37,0xde,0xfe,0x71,0xb7,0x26,0x6d,0x24,0x93,0xb4,0x49,0x09,0x46, + 0x0b,0xa8,0xe9,0x42,0xcc,0x00,0x3b,0x92,0x00,0x24,0x5b,0x8f,0xf6,0x30,0xd5,0x4b, + 0xf7,0xc8,0xd3,0xa6,0x49,0x34,0x89,0x51,0x2d,0xa7,0xb8,0xa4,0xdb,0x6f,0x1b,0x1f, + 0x7f,0xed,0x80,0xfd,0x6e,0xa8,0x01,0x44,0xfd,0x87,0xf0,0xb3,0xc9,0xb6,0xbe,0x00, + 0xa9,0xb0,0x7c,0x21,0x5a,0x99,0xa9,0x53,0xff,0x00,0x10,0x48,0x99,0x6d,0x3e,0x85, + 0x8e,0x8a,0x8a,0x9d,0x61,0xed,0xa8,0x16,0x00,0x4b,0xbd,0xed,0x7b,0xee,0x2c,0x74, + 0x80,0x76,0xbe,0x0d,0x83,0xe0,0xc5,0x35,0x2a,0x54,0xb6,0x61,0x9e,0xe6,0x19,0x9d, + 0x4b,0x31,0x68,0x66,0x90,0x88,0x84,0x44,0xa8,0x53,0xf8,0x6a,0x34,0xdf,0x60,0x41, + 0xf0,0x6f,0xf6,0xc5,0x82,0x92,0xa6,0xa6,0x96,0x66,0xf9,0xaf,0xf8,0x7d,0x0f,0xb2, + 0xc4,0xd7,0xd4,0xbb,0x58,0xb0,0xb6,0xde,0xd8,0x91,0x7c,0xea,0x9a,0x39,0x96,0x32, + 0xec,0x25,0x71,0x60,0x24,0x25,0x75,0x0e,0x46,0xe4,0x7b,0x63,0x37,0xeb,0x5e,0x2c, + 0x5a,0xad,0x86,0x1a,0xf8,0x9a,0xa2,0x07,0xc3,0xda,0x6e,0xe4,0x6a,0xa1,0x1a,0x05, + 0xb0,0x64,0x92,0x43,0x7b,0x0f,0xf2,0xb5,0xf6,0xdc,0x03,0xfb,0xfb,0xe2,0x51,0x7a, + 0x3a,0x96,0x38,0x80,0x35,0x15,0x0c,0xa1,0x19,0x2c,0x92,0x81,0xa4,0x93,0xce,0xde, + 0x7d,0xbf,0xad,0xf1,0x1f,0x5d,0xd6,0xd9,0x6e,0x59,0x3c,0x71,0xd5,0x92,0x1e,0x5b, + 0xa0,0x24,0x90,0x01,0xb5,0xd0,0x1b,0x8d,0xf5,0x1d,0xae,0x38,0xdb,0xed,0x8a,0xe9, + 0xf8,0xc1,0xd3,0x8b,0x5c,0x22,0x0c,0xe8,0x0b,0xe8,0x1a,0x9c,0x85,0xbd,0xce,0xad, + 0xc0,0xda,0xc7,0xcf,0xeb,0xb8,0xe2,0x33,0xce,0x97,0xe2,0x0d,0xb0,0xaf,0xdd,0x0d, + 0x70,0x15,0xb4,0x74,0x4e,0x5d,0xf3,0x33,0x3b,0xbd,0x7d,0xa5,0x5f,0x5a,0xb5,0x67, + 0xa5,0xbd,0x3a,0x75,0x0d,0xae,0xa4,0x80,0x3e,0x9b,0x71,0x89,0x06,0xe9,0xec,0xae, + 0xa2,0x47,0x67,0x89,0xe5,0x66,0x26,0xd7,0x90,0xb0,0x06,0xc6,0xf6,0x3f,0xdb,0xdc, + 0x62,0x94,0x9f,0x16,0xb2,0x37,0x9b,0xb3,0x4d,0x20,0x59,0x17,0xf2,0x86,0x1b,0x0b, + 0xed,0x6b,0x7b,0x7f,0x6f,0xbd,0xf0,0x83,0xf1,0x97,0x28,0xcb,0x27,0x8a,0x29,0x6a, + 0x20,0x25,0xd9,0xc4,0x9d,0xb9,0x4f,0xa1,0xd7,0x6f,0x6d,0x81,0xb1,0xdb,0x8b,0x5b, + 0x16,0x6d,0x98,0x9f,0xe9,0xfc,0x28,0x24,0x88,0x74,0x0a,0xe0,0xbd,0x2d,0x93,0xc1, + 0x56,0x6a,0xa1,0xa5,0x65,0x9c,0x69,0xbd,0xea,0x5c,0x02,0x40,0xb0,0x24,0x71,0x7e, + 0x77,0xc3,0x75,0x19,0x0d,0x3c,0xf4,0xcf,0x4e,0x63,0xab,0x86,0x9d,0xc5,0x88,0x8a, + 0xa2,0xd7,0x1e,0x54,0xed,0xe4,0x62,0x9f,0x55,0xf1,0xbb,0x28,0xa4,0x96,0x31,0xdd, + 0x86,0xa8,0x32,0x35,0xda,0x32,0x6f,0x19,0x06,0xfa,0x9a,0xc3,0xf2,0xf2,0x2c,0x3d, + 0xbd,0xb0,0x34,0xdf,0x1b,0xe8,0x55,0x7e,0x62,0x37,0x68,0x9d,0x89,0xed,0x32,0xc7, + 0xaa,0xde,0xe0,0xdc,0x5b,0x6b,0x7f,0xfb,0x0b,0xda,0xd8,0x43,0x1e,0xa9,0xd9,0xdb, + 0xf8,0x55,0x99,0x23,0x3c,0x2d,0x15,0xd3,0xe5,0xda,0x11,0x31,0x8d,0x44,0x8d,0xcb, + 0x37,0x20,0x29,0x24,0xfd,0x00,0xb7,0xf4,0xc3,0x89,0x00,0xa8,0x10,0xbc,0x25,0x11, + 0x65,0x1a,0xd5,0x1d,0x06,0xaf,0x1b,0x11,0xe3,0x63,0x7c,0x67,0xd0,0x75,0xc4,0x55, + 0x99,0x85,0x22,0xa0,0x74,0x98,0xc1,0xaa,0xd2,0x36,0xa0,0x49,0x21,0x4e,0x9e,0x41, + 0x3b,0x7b,0x7e,0x5d,0xb9,0xe5,0x35,0xbf,0x10,0x17,0x2f,0xa5,0x15,0x14,0xfa,0x2a, + 0x9a,0x39,0x3b,0x71,0xc9,0x13,0x5b,0xbc,0x8e,0xfe,0x36,0xba,0x90,0x05,0xc7,0xd5, + 0x77,0xf6,0x36,0x88,0xa5,0xba,0xa5,0xd0,0x12,0xc6,0x05,0x2d,0x11,0xe9,0x60,0x45, + 0xd3,0x50,0xe0,0x13,0xf8,0x7a,0x49,0x23,0x83,0xc1,0xf6,0x3b,0x5b,0xea,0x71,0xf2, + 0xb5,0x3d,0x3c,0x8e,0xa2,0xc8,0x03,0x6a,0x2b,0xa8,0x8f,0x51,0x17,0xde,0xff,0x00, + 0x7b,0xdb,0x18,0x31,0xf8,0x85,0x5d,0x19,0xa1,0xa1,0x4a,0xe3,0x54,0xb0,0xd5,0xc7, + 0xaa,0xa1,0x89,0x1f,0x86,0x62,0x60,0xc0,0x80,0x7f,0xcd,0x23,0x6f,0xe2,0xcb,0xe7, + 0x07,0xcf,0xf1,0x56,0x57,0x92,0xa9,0xe2,0xa7,0x48,0xc8,0x94,0x93,0x26,0xe5,0xc8, + 0x04,0x14,0x04,0x0b,0x6c,0x01,0x3b,0x7b,0x6f,0x8b,0xce,0x8e,0x6e,0x81,0x53,0xe7, + 0x46,0x72,0x56,0xce,0x2b,0x23,0x58,0xc2,0xa9,0xd2,0x85,0x05,0xee,0xbc,0xf9,0xbe, + 0xdf,0xa8,0xf7,0xdb,0x0c,0x49,0x3d,0x34,0x41,0x2f,0xa1,0x49,0xbb,0x28,0x1e,0x17, + 0x55,0x80,0xbd,0xfe,0xff,0x00,0xdf,0x9c,0x60,0xcb,0xf1,0x22,0xbd,0xa8,0x94,0x4f, + 0x2c,0x89,0x24,0xae,0x41,0x48,0xec,0x00,0x60,0x00,0xb8,0x27,0x7e,0x3d,0xbe,0x87, + 0x9b,0xe0,0x0c,0xcb,0xae,0x6b,0xb3,0x29,0x24,0xee,0x05,0x8c,0x24,0x61,0x02,0x86, + 0x27,0x70,0x47,0xaa,0xf6,0xe7,0x60,0x7e,0xf8,0x61,0xa2,0x94,0x9a,0x2a,0xa3,0xa8, + 0x6d,0xf0,0xb6,0x5e,0xa0,0xeb,0x5c,0xb3,0x22,0xcb,0x62,0xad,0x8c,0xa4,0xc1,0xe5, + 0x48,0x0c,0x70,0xbf,0xab,0xd4,0x4a,0xeb,0xb5,0xbc,0x35,0xcf,0xff,0x00,0x23,0x0f, + 0x43,0xd5,0x79,0x74,0xf9,0x6d,0x25,0x4c,0x93,0x43,0x0b,0xcd,0x12,0xb5,0x9c,0x1b, + 0x03,0xc1,0x1e,0x6d,0xbd,0xf1,0xcf,0x35,0xd9,0x85,0x6d,0x74,0x12,0xc5,0x3d,0x45, + 0xfb,0xcc,0x19,0xbd,0x24,0x5a,0xc4,0x1b,0xdb,0xee,0x06,0xd8,0x0f,0xe6,0x1c,0x08, + 0xed,0x3c,0xc1,0x51,0x34,0x9f,0xc4,0xb0,0xb6,0xe3,0x61,0xc5,0xb7,0xe3,0x1a,0x87, + 0x87,0x12,0x28,0xb9,0x21,0xd4,0x13,0xc2,0xe9,0x7a,0x9e,0xa6,0xa2,0x86,0x39,0x1b, + 0xe6,0xe0,0x13,0x12,0x14,0x58,0xdc,0x2e,0xda,0xb7,0x3e,0xdf,0xef,0x63,0x6c,0x57, + 0xb3,0x6f,0x8a,0x74,0x19,0x56,0x62,0xd0,0xc2,0xa2,0xa2,0x17,0xa7,0x2c,0x9a,0x64, + 0xbe,0x86,0x0c,0x01,0x5f,0xa0,0x65,0x20,0x8f,0xb1,0xc6,0x06,0x73,0x06,0x60,0x8c, + 0x5e,0x46,0x64,0x4b,0x6e,0x7d,0xb8,0xdb,0x9f,0x3f,0xd7,0x03,0x54,0x55,0xac,0x95, + 0x31,0x06,0x46,0x21,0x81,0x24,0xda,0xdb,0x71,0x6f,0xeb,0xe2,0xd7,0xfd,0xf0,0xcd, + 0xf0,0xe6,0x8f,0xea,0x75,0xaa,0x5d,0x33,0xbb,0xad,0xec,0xfc,0x5a,0xa2,0x94,0xd8, + 0x54,0x04,0x47,0x2c,0xbf,0xf2,0xc8,0x61,0xb0,0x3c,0xfb,0x6f,0xed,0xc8,0xc0,0xf3, + 0x7c,0x56,0x82,0x42,0x4a,0xd4,0x22,0xaf,0x82,0x0e,0x96,0x8c,0xef,0xbd,0xb7,0x1c, + 0xf8,0x3e,0x39,0xf1,0x8c,0x2b,0xe7,0x14,0xc9,0x25,0x9c,0x0d,0xec,0x58,0x1f,0xfd, + 0xbe,0xdf,0xae,0x3c,0x96,0xa9,0x4a,0xd8,0x49,0x63,0x18,0xd4,0x14,0xad,0xee,0x0f, + 0x3f,0xef,0xfd,0x30,0xff,0x00,0xf5,0xf1,0x04,0x9e,0x6b,0xfb,0xad,0xa6,0x2f,0x8a, + 0xcf,0x14,0xac,0xb2,0xd4,0x2c,0xa3,0x4d,0x94,0xad,0x85,0xed,0xed,0x6f,0x36,0x6f, + 0xe9,0xb0,0xc4,0x7b,0xfc,0x64,0xed,0x98,0x18,0xf7,0x25,0x8b,0xb6,0xc9,0x2e,0xb4, + 0x06,0xe7,0x57,0xb6,0xde,0x09,0x1e,0x3c,0x71,0x6c,0x63,0x72,0x55,0x2f,0x6c,0x90, + 0x3f,0x2d,0xc5,0xd4,0x81,0x60,0x46,0xdf,0xd7,0x0c,0x3d,0x54,0x7d,0xb6,0xe6,0x4b, + 0x70,0x5b,0x8e,0x76,0xbf,0xed,0x8b,0x3f,0x41,0x0f,0x64,0x0c,0xee,0xee,0xb6,0x39, + 0x7e,0x31,0x55,0x18,0x99,0x02,0xae,0xa4,0x6e,0xea,0x48,0x81,0x89,0x2c,0x2f,0xb1, + 0xdf,0x8d,0x3b,0x7f,0x6d,0xf6,0xad,0x57,0xfc,0x4b,0xcd,0x2b,0xaa,0x4c,0xb1,0xcc, + 0x4a,0x59,0x74,0xf7,0x08,0xd4,0x8c,0x06,0xdc,0x71,0xbe,0x9e,0x3f,0xbe,0x28,0x51, + 0x00,0x5b,0xb7,0xac,0xdf,0x72,0xba,0x4e,0xa0,0x7c,0x9f,0xd7,0xef,0x86,0xea,0x03, + 0x59,0xd2,0x39,0x4a,0x84,0xba,0x12,0xdc,0x0b,0x83,0xbf,0xb8,0xf6,0xc5,0x8d,0xd3, + 0x44,0xcc,0x80,0xab,0x33,0x3c,0xf5,0x56,0xb8,0x3e,0x21,0x66,0x59,0x70,0xa4,0x14, + 0xf5,0x05,0x52,0x34,0x96,0x14,0x5d,0xae,0x85,0x8e,0xad,0xcf,0xf3,0x79,0x17,0xe7, + 0x8f,0x6c,0x58,0xe8,0xbe,0x2b,0xe7,0x75,0x13,0xa4,0x0f,0x50,0x52,0x30,0xe4,0x2b, + 0x9f,0xe4,0xb9,0x04,0x1b,0xed,0xbd,0xc0,0xdf,0xff,0x00,0x8c,0x64,0x73,0x46,0xaa, + 0x97,0x42,0xd2,0x29,0x6f,0xcc,0xc6,0xe3,0x63,0xbd,0xad,0xf4,0x36,0xc2,0x97,0x78, + 0xf5,0x43,0x23,0x47,0x6b,0x95,0x62,0x75,0x00,0x34,0xed,0x61,0xe7,0xef,0x88,0xe8, + 0x18,0xee,0x42,0xaf,0xcd,0x78,0xea,0xb5,0x9a,0xdf,0x8b,0x59,0x88,0xcc,0x1e,0xa5, + 0xd5,0x64,0x9d,0xb8,0x2b,0x60,0x01,0x06,0xea,0x58,0x58,0x82,0x6f,0xbe,0xdf,0xde, + 0xd8,0x91,0x8b,0xe2,0xd5,0xe0,0x76,0xcc,0x62,0x61,0x52,0xc1,0x87,0x72,0x37,0x0d, + 0x70,0x00,0x20,0xdf,0x7b,0x1b,0x5c,0x5f,0xf4,0x38,0xc3,0x96,0xa5,0x04,0xea,0xa5, + 0x92,0x53,0x28,0xba,0xeb,0x36,0x27,0x7b,0x91,0xb7,0x9b,0x8f,0xd8,0xe1,0xc8,0xab, + 0x35,0x48,0x7b,0x93,0x2c,0xa5,0x8a,0xad,0x8a,0x10,0x75,0x9e,0x6f,0x7f,0xd6,0xff, + 0x00,0x4b,0x62,0xbf,0xd3,0xc4,0x45,0x52,0x22,0x47,0x77,0x5a,0xae,0x6d,0xf1,0x9e, + 0xb5,0xff,0x00,0xfa,0x56,0xec,0x92,0x44,0x91,0xaa,0xa0,0x08,0xae,0x1a,0xe0,0x85, + 0x3b,0x02,0x45,0xbd,0x40,0x1e,0x30,0xfe,0x59,0xf1,0xb3,0xf1,0x23,0x39,0x82,0x82, + 0xf6,0x64,0xee,0x69,0x6f,0x55,0xb7,0xd2,0xc7,0xca,0x9b,0x01,0x61,0xc1,0x37,0xc6, + 0x32,0xad,0x1d,0x44,0x6a,0xc5,0xdd,0x26,0x54,0x73,0xab,0x92,0x3e,0x82,0xe7,0xd8, + 0x5e,0xff,0x00,0xf7,0xc4,0x79,0x35,0xb4,0x8b,0x26,0xa7,0x01,0x24,0x74,0x95,0x2c, + 0xbb,0x1b,0x83,0xa9,0x48,0xe4,0x11,0xb6,0xfe,0x77,0xc1,0xfd,0x3c,0x45,0xb5,0x48, + 0x79,0xae,0x5b,0xfd,0x6f,0xc6,0x14,0x35,0x2e,0xf9,0x6e,0x65,0x25,0x3e,0x98,0x18, + 0x80,0x49,0x31,0xb3,0xfa,0xb4,0x8b,0x30,0xd8,0x1d,0xb6,0xfa,0x8f,0x63,0x8a,0xe5, + 0x7f,0xc4,0xca,0xdc,0xcd,0x02,0xf7,0x84,0x09,0xa4,0xa4,0x9d,0x85,0xd5,0xdc,0x60, + 0x3d,0x2c,0x63,0x36,0xdc,0x10,0x40,0xb1,0xb0,0x1c,0xdc,0xdf,0x19,0x22,0x57,0x35, + 0xa2,0x2e,0x55,0xa4,0x92,0xca,0x51,0x49,0x04,0x0b,0x80,0x6f,0x7f,0xbf,0x38,0x79, + 0x73,0x35,0xee,0x04,0x72,0xb1,0xa8,0xd9,0x55,0x8d,0xaf,0xb8,0x04,0xfd,0x0f,0x8c, + 0x54,0x34,0x50,0x91,0xc2,0x4d,0xd6,0xa7,0xb3,0x7e,0xa1,0xaa,0xcc,0xea,0x8c,0xf5, + 0x52,0x3c,0x3a,0xde,0xd6,0x91,0xc9,0x61,0xa4,0x00,0x37,0xff,0x00,0x28,0x1b,0xdf, + 0x8c,0x00,0xd9,0x8b,0x4c,0xc8,0x63,0x66,0x66,0x22,0xe4,0x11,0x62,0x3e,0xc3,0xdc, + 0x62,0x2e,0xa3,0xe4,0xea,0xc5,0xaa,0x53,0x8b,0xeb,0x46,0x95,0x82,0x9b,0xec,0x6f, + 0x63,0xbf,0xd3,0x09,0x44,0x54,0x42,0x81,0x54,0x43,0x1a,0x69,0x8c,0x2d,0xc9,0x07, + 0xeb,0xbf,0x3e,0x2f,0x8d,0x2c,0x61,0x63,0x40,0x0a,0x02,0xa6,0x7f,0xc4,0x1d,0x80, + 0xbc,0xa1,0xc9,0x41,0xab,0xd5,0x7d,0xbc,0xed,0xfb,0x63,0xc7,0xcd,0xac,0x4a,0x44, + 0x10,0x6a,0x24,0xae,0xb2,0x05,0xed,0xed,0xe2,0xd8,0xae,0x54,0x55,0xa2,0x2c,0x4c, + 0xa8,0x23,0x00,0x16,0x0f,0x71,0x63,0xef,0xc7,0xfb,0xfd,0x70,0x0b,0x55,0x41,0x1a, + 0x83,0x13,0x1b,0x10,0x4f,0xe6,0xd4,0x40,0xf7,0x23,0xdb,0xda,0xdf,0xae,0x2c,0xa2, + 0x79,0x50,0xb9,0x59,0xff,0x00,0xc5,0x44,0x24,0x2a,0x3a,0x36,0xc1,0x01,0xf2,0x45, + 0xee,0x6f,0xe3,0x8c,0x22,0x2c,0xd4,0x00,0x91,0x4b,0x2b,0xe8,0x17,0xd1,0xea,0x37, + 0xf1,0x6f,0xfe,0x71,0x53,0x6a,0xe6,0x71,0xf9,0x98,0x31,0xdb,0xd0,0x4e,0xe7,0x62, + 0x7f,0x5e,0x31,0xf5,0x63,0x49,0x77,0xee,0x13,0x1b,0x17,0x2c,0x4f,0x04,0xdc,0x82, + 0x06,0xdc,0x1f,0xe9,0xbe,0x0e,0xc0,0x79,0x42,0xd7,0x41,0x51,0xd7,0x54,0x50,0x3e, + 0xaa,0x59,0x1d,0x15,0x0e,0xce,0xce,0x35,0x06,0x3c,0x5b,0xd8,0x81,0xb5,0xfe,0x98, + 0x12,0xa2,0xa0,0xa2,0x2c,0x65,0xda,0x5d,0x27,0xd2,0x58,0xee,0x17,0xfd,0xdf,0xff, + 0x00,0x9c,0x45,0xbb,0x16,0x81,0x47,0xa8,0x4b,0x2b,0x33,0x6a,0x2e,0x0e,0xe7,0x7f, + 0xcc,0x36,0x23,0x61,0x63,0xf5,0xb6,0x18,0x28,0xb3,0xf7,0xae,0x1b,0xb9,0xe8,0x0d, + 0x26,0x92,0x34,0x80,0x01,0x17,0x3c,0x11,0x7d,0xbd,0xef,0x7c,0x35,0x0e,0x69,0x69, + 0xdc,0x4a,0x92,0x8e,0xbe,0x37,0xef,0xcd,0x13,0xad,0x86,0xa3,0xac,0xf0,0x6c,0x38, + 0xfe,0xdb,0xf3,0x71,0x7c,0x29,0xb3,0x0e,0xc4,0xa6,0x20,0x55,0xee,0x75,0x33,0x03, + 0xa5,0xb8,0xe0,0x82,0x7d,0xad,0xfd,0x31,0x17,0x2c,0x5d,0x99,0x2a,0x5a,0x05,0xee, + 0xc4,0xc8,0x4c,0xbf,0x8a,0x19,0x5d,0x2c,0xbe,0x06,0xea,0xc2,0xff,0x00,0x7f,0xcd, + 0x84,0x8a,0xa8,0xda,0x37,0x75,0xd1,0xad,0x89,0x32,0x96,0x1c,0x80,0xa0,0x2b,0x6d, + 0xb8,0x36,0xf7,0xc3,0x0f,0x54,0x96,0x54,0x93,0x66,0x1d,0x98,0xe5,0x05,0x2c,0x89, + 0x70,0xdb,0x7a,0x40,0xbf,0xfa,0x6d,0xfe,0xb8,0x6a,0x4a,0xb6,0x65,0x32,0x4c,0xb6, + 0xd2,0x3d,0x57,0x6b,0x17,0x16,0xdc,0x71,0xc9,0xc4,0x44,0xf5,0x7a,0x9c,0x47,0xdb, + 0x78,0xa4,0x41,0xe0,0x6a,0x42,0xdb,0x83,0x71,0xf5,0xbd,0x8f,0x8b,0xf1,0x81,0xa5, + 0xab,0x30,0x98,0xa5,0x05,0xbb,0x91,0xfe,0x29,0x93,0x4d,0xc0,0x43,0xb6,0xc4,0xf8, + 0xbd,0x81,0xbf,0x9b,0xe0,0xee,0x08,0x17,0x00,0xa4,0x24,0xab,0x92,0x94,0xc6,0x6a, + 0x01,0x87,0xb8,0x0e,0x80,0x6d,0xab,0x63,0xc6,0xc7,0xdb,0x7b,0xf9,0xbe,0x19,0x15, + 0xb7,0x74,0xef,0x30,0x25,0x95,0xb5,0xb2,0xb6,0xa4,0x52,0x05,0xed,0x6f,0x1e,0xd8, + 0x01,0x83,0x55,0xc0,0xff,0x00,0x86,0xfd,0xc7,0x3f,0x84,0xac,0x6c,0xba,0xc1,0xdc, + 0x5c,0xf8,0x2b,0xc5,0xbc,0xfd,0xb0,0xc0,0x81,0xa3,0x88,0xb2,0xaa,0xb8,0x92,0x2f, + 0x43,0x12,0x54,0x3a,0x82,0x18,0x7e,0xb7,0x53,0xed,0xe7,0x8d,0xb1,0x2d,0x2d,0x9a, + 0xb4,0x5b,0x66,0x0a,0xba,0x34,0xf7,0x51,0x99,0x76,0x37,0xb0,0x0a,0x09,0xf3,0xfa, + 0x0e,0x36,0xc2,0x5a,0xa9,0xe5,0x8c,0xc8,0xcf,0xd9,0x8d,0x94,0xd9,0x9d,0xbd,0x36, + 0xf3,0x7f,0x6b,0x8e,0x3e,0xd8,0x5b,0xda,0x41,0x08,0x02,0x35,0xf4,0x17,0x2c,0x00, + 0x61,0x19,0xbd,0xc7,0xfa,0x8d,0xfe,0xa7,0x02,0xa8,0xf4,0x18,0xa4,0x7d,0x52,0x03, + 0xe9,0x65,0x0c,0xc6,0xe2,0xc2,0xd6,0x1c,0xfb,0xf9,0xc2,0xee,0x4a,0x4a,0x72,0x6a, + 0x81,0x1b,0x58,0x92,0xec,0xe6,0xe4,0xab,0x7e,0x5d,0xad,0xbf,0xd0,0xe1,0x7d,0xd1, + 0x1b,0x6a,0x90,0xab,0x68,0xd2,0xa0,0xdc,0x37,0x3b,0x73,0xe7,0x8b,0x78,0xe7,0x0c, + 0xe8,0x0a,0xd5,0x0f,0x4c,0x0b,0xab,0x20,0x60,0xd1,0x9f,0xca,0x2e,0x78,0xb6,0xdf, + 0xf6,0xfa,0xe1,0x50,0x25,0xea,0x0b,0x77,0xa3,0x74,0x91,0x95,0x59,0x95,0x2c,0x4d, + 0xf9,0x1a,0x6d,0xec,0x3c,0xfe,0xf8,0x3b,0x91,0xb5,0xf6,0xa7,0x32,0xd9,0x88,0x45, + 0x12,0x11,0xea,0xbe,0xdb,0x03,0xfa,0x8f,0xbf,0xdf,0x0d,0x09,0x65,0xd4,0x1d,0x4c, + 0x8c,0x85,0x0e,0xbd,0x3e,0x2c,0x79,0xbf,0xd7,0xfe,0x98,0x4c,0xac,0x03,0x33,0x10, + 0x1a,0x06,0x72,0x14,0x1b,0xa9,0x71,0x6d,0x22,0xdf,0x4b,0x83,0xbf,0xd7,0x0e,0xcc, + 0x20,0x8a,0x16,0x91,0x04,0x71,0x37,0x2f,0xeb,0xd5,0xab,0x7b,0xdc,0x8d,0xed,0x71, + 0xb5,0xfe,0x98,0x04,0x92,0x96,0xc9,0xe1,0x10,0x65,0xa9,0x31,0x8d,0x12,0xbc,0x25, + 0x7d,0x46,0x35,0x37,0x0d,0xbf,0x03,0x9f,0xb6,0xf8,0x12,0x4a,0x99,0xa3,0x94,0x33, + 0x8d,0x4f,0xa6,0xee,0x87,0x7b,0xa9,0x1c,0x5e,0xdb,0xff,0x00,0xd2,0xd8,0x18,0xd5, + 0xac,0x32,0xc2,0x8d,0xdc,0x91,0x9c,0x32,0xa3,0x06,0x50,0xe4,0x80,0x08,0x20,0xf0, + 0x79,0xb1,0xfd,0x0f,0xd7,0x0d,0x7c,0xbf,0x7a,0x68,0xc4,0x90,0xc9,0x4d,0x3c,0xa9, + 0xae,0x30,0xcd,0xea,0x71,0xaa,0xde,0x95,0xe6,0xdb,0x6f,0xb8,0x1b,0x62,0x74,0x42, + 0xd3,0xdf,0x38,0x25,0x7d,0x36,0x50,0xea,0x2c,0x23,0x16,0x6d,0x5e,0xc3,0x9b,0xe0, + 0x67,0x91,0xc2,0x2c,0x51,0x85,0x3a,0x4b,0x95,0x50,0x49,0x24,0x93,0x72,0x02,0xdf, + 0x63,0x73,0xfb,0xe1,0xb9,0xa2,0x13,0xb4,0xb1,0xd3,0xa3,0x86,0x45,0x2a,0x5e,0x41, + 0xa6,0xdb,0x6e,0x09,0xe3,0xfe,0xf8,0x76,0x78,0x62,0xa1,0x68,0x8b,0x4a,0xd0,0xc8, + 0x13,0x4b,0xea,0xb6,0x91,0xc6,0xc0,0xf3,0x70,0x47,0x38,0xaf,0x94,0xa7,0x29,0xbe, + 0xe4,0x94,0xb5,0x2c,0x34,0x68,0x8c,0xdc,0x34,0x81,0x35,0x15,0x22,0xd6,0xe3,0xdc, + 0xf3,0x83,0x0d,0x64,0xed,0x4f,0x57,0x15,0x43,0xb0,0x74,0x3a,0x58,0x89,0xfd,0x12, + 0x6e,0x74,0x86,0x4b,0x78,0x24,0x90,0xdf,0x5b,0x7d,0xa3,0xe7,0x88,0xa4,0x2d,0x5d, + 0x34,0x2e,0xda,0xa5,0x5d,0x4b,0x7f,0x41,0x53,0x7b,0x90,0x6d,0xf9,0x89,0xd3,0xee, + 0x0e,0xfe,0xf8,0x0a,0x69,0x0c,0x32,0x54,0xc6,0xf1,0xc9,0x3b,0xaa,0xfa,0x64,0x46, + 0x01,0x18,0x13,0xb8,0xf7,0xf3,0xb1,0xbd,0x8e,0x00,0xb7,0x7c,0x90,0xb2,0x11,0xf2, + 0x56,0x49,0x2c,0x6a,0xc2,0x45,0x55,0x55,0x09,0xa4,0x91,0xe0,0x6d,0x7d,0xb6,0x16, + 0xbd,0xff,0x00,0x7f,0x18,0x19,0xa4,0x9b,0xb6,0x57,0xb8,0x08,0xed,0x85,0x5f,0xe6, + 0xde,0xe6,0xc4,0x5f,0x7d,0xaf,0xe3,0x7d,0xfe,0xb8,0x57,0xa1,0x65,0x71,0x25,0xa9, + 0xd6,0x22,0x03,0xb0,0x50,0x41,0xdf,0xd2,0xde,0xfe,0x76,0x23,0x1e,0x55,0xe9,0xfc, + 0x3d,0x41,0x08,0x70,0x01,0xf1,0x7f,0x57,0x20,0xfd,0x3f,0xdd,0xf1,0x36,0xe1,0x1a, + 0xc5,0xa0,0xda,0x25,0x63,0x1c,0x84,0xad,0xaf,0xa8,0xa9,0x3c,0xaf,0x16,0xdf,0xeb, + 0x87,0x66,0x2d,0x1d,0x32,0x06,0x3f,0x30,0xd7,0x3e,0x96,0x8c,0x86,0x3b,0x01,0xcd, + 0xec,0x7d,0xee,0x3d,0xf0,0x1d,0x6d,0x4c,0x70,0x56,0x08,0x19,0x3b,0x92,0x22,0x95, + 0xd5,0xab,0x95,0xb9,0x37,0xbf,0x9b,0x0d,0xf8,0xfb,0xe1,0xa3,0x98,0x9a,0x95,0x57, + 0x82,0x68,0xdc,0x3f,0xe5,0x41,0xe9,0x25,0x41,0xe7,0x9f,0xdc,0xec,0x2f,0x87,0x6b, + 0x68,0x25,0x4e,0x3e,0x62,0xa9,0x75,0x8e,0xd2,0xc4,0xc2,0xe0,0xdf,0xc9,0xda,0xdf, + 0x43,0xfd,0x30,0xe2,0x4c,0xf3,0x21,0x68,0xe3,0x71,0x1a,0xf0,0xca,0x0e,0x9b,0xde, + 0xd6,0xf6,0x18,0x18,0xc5,0xf3,0x2a,0xe9,0x33,0x69,0x3a,0x86,0x97,0x43,0xb8,0xb9, + 0xbf,0xed,0x7e,0x77,0x38,0xf2,0x2a,0x87,0x56,0xec,0x36,0x92,0x8d,0xac,0xdd,0x97, + 0x48,0x37,0x1c,0x02,0x38,0x1b,0x62,0xc0,0x02,0x8b,0xe9,0xaa,0x8e,0xbb,0x37,0xa1, + 0x88,0x1a,0x6d,0xb5,0xc5,0xbf,0xef,0x81,0x44,0x91,0x97,0xb4,0x6c,0xac,0xe1,0xb6, + 0xd4,0x77,0xff,0x00,0x5d,0xb8,0xfd,0x70,0xaa,0xc6,0xa7,0x5d,0x11,0xcf,0x15,0x44, + 0x4c,0x13,0x52,0x8e,0xe0,0x2a,0x9b,0x71,0xe6,0xd7,0x3e,0x37,0xc3,0x15,0x6e,0x27, + 0x68,0x45,0xd0,0x3c,0x6b,0xc3,0x92,0x7f,0x4d,0x88,0x1e,0xfc,0x7d,0x70,0x68,0x23, + 0xc2,0x6f,0xe7,0x23,0x59,0xe3,0x8e,0xa0,0xcc,0x8a,0xb2,0x33,0xf7,0x52,0x2d,0x45, + 0xbd,0xc8,0x3f,0xa7,0xd7,0x0d,0x4f,0x5a,0xcd,0x53,0x24,0x6c,0x11,0x2c,0x49,0xd8, + 0x9d,0x26,0xe0,0x6e,0x36,0xfb,0x60,0xaf,0x97,0x54,0x40,0xc6,0x0d,0x74,0xc0,0x37, + 0xe4,0xb8,0x64,0x26,0xf6,0x56,0xb9,0xe3,0xf6,0xbf,0xb9,0xc7,0x95,0x94,0x25,0xf5, + 0x4d,0x15,0x23,0xc3,0x2b,0xc6,0x42,0x96,0x52,0xa3,0x58,0x51,0xb7,0xb7,0xdf,0xf5, + 0x38,0x60,0x01,0x44,0x2d,0xda,0x57,0x89,0x5a,0x38,0xa1,0x4e,0xd4,0x9f,0xf3,0x7b, + 0x65,0x34,0x80,0x3c,0xb6,0xfe,0xfe,0x3e,0x96,0xfa,0x61,0x21,0xc4,0x8b,0x0c,0x61, + 0x9e,0x18,0x98,0x10,0x3c,0x09,0x14,0x01,0x70,0x6f,0xb7,0xd7,0xc6,0xe4,0xe3,0xe9, + 0xe6,0x0d,0x2b,0xca,0xac,0x63,0x65,0xfc,0xfa,0x4f,0xe6,0xdf,0x6b,0x9f,0x6b,0x81, + 0xcf,0x18,0x1f,0x5f,0xcb,0xd4,0x24,0x0f,0xe8,0x21,0x4d,0x80,0x50,0x15,0x96,0xe1, + 0x81,0x1b,0x79,0x0d,0xfd,0xf1,0x4e,0xe5,0xa6,0xe9,0x36,0x06,0xb4,0xf9,0xb8,0x92, + 0x28,0xcb,0x23,0x02,0xaa,0x4b,0x5c,0x80,0x00,0x16,0xbd,0xec,0x40,0xf2,0x3d,0xc5, + 0xf0,0xdc,0x34,0xdd,0xd0,0xd1,0xf7,0x0b,0x26,0x8f,0x51,0x26,0xe6,0xd6,0x16,0x24, + 0x9f,0x3f,0xaf,0x8d,0xf1,0x20,0x62,0x96,0x55,0x1a,0x5c,0x15,0x68,0xcd,0xc1,0xdc, + 0xa8,0x3b,0x6a,0x07,0xc7,0xb1,0x38,0x16,0x46,0x8c,0x06,0x88,0xa2,0x22,0x37,0xad, + 0xb7,0x3b,0x82,0xd7,0x27,0xea,0x3f,0xe9,0x89,0x69,0x6d,0x32,0xee,0xdf,0x2b,0xb1, + 0x48,0x98,0x82,0xb2,0x8b,0x0d,0x23,0xd5,0xa8,0x92,0x39,0x07,0x6e,0x37,0x1e,0xde, + 0x70,0x9a,0xb8,0x52,0x51,0x50,0x08,0x47,0x4a,0x85,0x28,0x64,0x57,0x2b,0xa0,0x92, + 0x6f,0xb6,0xe3,0x93,0x7b,0x5f,0xfd,0x30,0x9a,0x8a,0x86,0x8e,0xae,0x59,0x54,0x2a, + 0x5a,0xe5,0x87,0xf9,0x90,0x82,0xd7,0xdf,0x6b,0x72,0x31,0x1e,0x33,0x17,0x7b,0x5c, + 0xee,0xd2,0x1d,0x51,0x03,0x70,0x2d,0xb0,0xb0,0xf3,0xe3,0x02,0xfb,0xaa,0xc9,0x44, + 0xe6,0x0d,0x32,0xd0,0x18,0xdd,0x64,0x12,0x6a,0x76,0x22,0x45,0x07,0x4a,0xda,0xfb, + 0x1f,0x06,0xd7,0x3b,0xed,0xbd,0xf0,0x2a,0x98,0x99,0x60,0x63,0x0c,0xdd,0xb9,0x63, + 0x65,0x88,0x87,0xf4,0x86,0x24,0x9d,0x47,0x72,0x3d,0x81,0x1c,0xee,0x48,0xc3,0xd3, + 0x54,0x22,0xea,0x49,0x96,0x39,0x60,0x90,0x69,0x06,0xc4,0x97,0x1b,0x58,0x86,0xf6, + 0x20,0x9b,0xfb,0xd8,0x0c,0x39,0x64,0x0a,0xc8,0xa8,0xb1,0x44,0xc7,0x5a,0x06,0x22, + 0xea,0x7f,0x4f,0xd7,0xf7,0xc4,0xb5,0x39,0x40,0xc9,0x49,0xdb,0x68,0xd2,0x99,0x41, + 0x86,0x11,0xa2,0xa1,0x81,0xb1,0xb1,0x16,0xdf,0xd8,0x6f,0xce,0xfc,0x5f,0x6c,0x21, + 0xef,0x1d,0x51,0x2b,0x32,0xba,0x33,0x0f,0x5b,0x13,0xe9,0x20,0x5d,0x4d,0x87,0xd0, + 0x10,0x70,0x6b,0x44,0x8f,0xa1,0x7b,0xc2,0x58,0xa6,0x52,0x48,0x3c,0x87,0xb0,0xbe, + 0xfc,0x81,0xc7,0xf5,0xc3,0x62,0x92,0x24,0x95,0x52,0x6b,0x02,0xa2,0xe1,0x5d,0x2d, + 0xe8,0x3c,0xef,0xc5,0xfe,0xfb,0xee,0x39,0xdf,0x0a,0x4a,0x05,0x46,0x44,0xb2,0xc4, + 0xef,0x34,0x2a,0xc4,0x12,0x4b,0x82,0x3d,0x25,0x4e,0xe1,0x87,0xed,0x7f,0xda,0xd8, + 0x32,0x39,0x24,0x7a,0x99,0x22,0x8a,0x36,0x90,0x5b,0xd2,0x5d,0x80,0x36,0x51,0xc0, + 0x36,0xde,0xf6,0x23,0x7f,0xfa,0xe1,0x11,0x94,0xed,0x3c,0x31,0x92,0x10,0x8b,0x19, + 0x0b,0x80,0x6e,0x2d,0xe9,0x37,0xe7,0xd2,0x2f,0xbe,0x09,0x95,0x19,0x48,0xed,0x15, + 0x3a,0x26,0x00,0xc6,0x13,0xd7,0x62,0xcc,0x6c,0x1b,0xca,0xfa,0xbf,0x5c,0x46,0xa0, + 0x02,0x62,0xaa,0x44,0xd1,0x35,0x91,0x3b,0x6c,0x6e,0x11,0xc6,0x8e,0xcb,0x6d,0xbf, + 0x16,0xfd,0x07,0x3c,0xdb,0x0c,0xa2,0x23,0x8f,0x96,0x99,0x5a,0x05,0x2a,0x59,0x18, + 0xcb,0xab,0x4b,0x83,0x60,0x54,0xdb,0xde,0xd7,0xb9,0xde,0xf8,0x1e,0x6d,0x7e,0xa9, + 0x12,0x54,0x10,0xbb,0x1b,0x7a,0xee,0x35,0x58,0x6d,0xfb,0x1f,0x3e,0xff,0x00,0x5c, + 0x2e,0x08,0xd6,0x09,0x99,0x76,0x4b,0x22,0xa8,0x71,0xcd,0x8b,0x5f,0x50,0xf6,0xfa, + 0x9f,0x38,0x6b,0xca,0x23,0x9b,0x48,0x6a,0x74,0xa8,0x96,0x67,0x92,0x26,0x8a,0x33, + 0x09,0x8f,0xf1,0x23,0x00,0xea,0x00,0xea,0xb1,0x1b,0x5f,0x8f,0x16,0xb0,0xfb,0x8c, + 0x3f,0x1d,0x50,0xcb,0x22,0x93,0xb1,0x3c,0x55,0x0a,0x4a,0x1e,0xec,0x77,0x8f,0x41, + 0x71,0x67,0x04,0x5e,0xc7,0x6f,0x36,0xde,0xfe,0x41,0xc3,0xf5,0xc8,0x91,0xc4,0xb1, + 0x9b,0xf7,0x95,0xd6,0xc4,0xb0,0x1d,0xc1,0xc1,0xbd,0xb9,0xda,0xd6,0x3f,0x4c,0x45, + 0xa4,0xea,0x20,0xed,0xa2,0xc8,0xab,0xa9,0x5f,0xd2,0xc3,0x4d,0xcf,0x92,0x0f,0x8d, + 0xbc,0x71,0xfa,0x60,0x6e,0xcd,0xa1,0xfd,0x28,0xea,0x80,0x5a,0x65,0xd2,0x89,0x24, + 0x22,0xea,0xbb,0xec,0x1b,0xc8,0x3b,0xde,0xf6,0x00,0xdf,0xfa,0x8e,0x70,0xda,0xda, + 0x60,0x15,0x19,0x62,0x89,0x1c,0x69,0x08,0x34,0x48,0x7d,0x27,0x6b,0xf2,0xdf,0x5b, + 0x1b,0x9f,0x18,0x12,0xb2,0x56,0xa6,0xa7,0x9d,0xcb,0x9d,0x6a,0xca,0x76,0xb1,0x53, + 0xba,0xd8,0x7d,0x6e,0x0e,0xde,0x70,0x34,0xf3,0x32,0xb3,0xf6,0xa5,0x31,0xa0,0x1a, + 0xb4,0xff,0x00,0x30,0x51,0xb9,0x20,0x91,0xcf,0x9d,0x3f,0xd3,0x7c,0x30,0x39,0x4c, + 0x4d,0x70,0xa5,0x9a,0xae,0xa1,0x61,0x9a,0x13,0x2c,0x71,0x14,0x91,0x48,0x0c,0xba, + 0x81,0xf4,0xec,0x41,0x03,0xc6,0xfb,0x7d,0x78,0x38,0x8a,0x9d,0x20,0x8d,0xa6,0x54, + 0xa5,0x56,0x69,0x35,0x80,0x63,0x20,0xe8,0xd4,0x07,0xa7,0x8d,0xd4,0x9f,0xbf,0xd2, + 0xd7,0xc0,0xef,0x58,0xb1,0x2a,0x3c,0xe6,0x28,0xde,0x69,0x55,0xd9,0x34,0xff,0x00, + 0x2e,0xa0,0xa5,0x88,0xdb,0x81,0xcf,0xdf,0x03,0xd4,0x02,0xb5,0x6d,0x0c,0x52,0x2c, + 0x88,0x7f,0x23,0x06,0xd5,0xb7,0x27,0x49,0x5f,0xb1,0xfd,0x2e,0x7c,0x61,0x6a,0xb8, + 0x48,0x78,0xb4,0xf4,0x91,0x45,0x24,0x0d,0x10,0xee,0xc2,0xe5,0xfd,0x60,0xb1,0x2d, + 0x7f,0xf3,0x2f,0xb5,0xbc,0x8c,0x34,0x1a,0x14,0x90,0x09,0x5d,0x9c,0xaa,0xe9,0x1e, + 0xb0,0xa5,0xae,0x36,0x6f,0x3b,0xff,0x00,0x6d,0xef,0x8f,0xa9,0xcb,0x3c,0xdd,0xaa, + 0xc7,0xd3,0x29,0x5b,0x99,0x4b,0x5c,0x16,0x16,0xfc,0xde,0x38,0xe4,0xf3,0xfb,0x61, + 0x80,0xd5,0x51,0x95,0x11,0xb7,0x62,0x20,0xc1,0x38,0xd2,0x12,0xc7,0x7d,0x40,0x8f, + 0x73,0x7f,0xa5,0xcf,0x83,0x82,0x0f,0x74,0x13,0xfd,0xa8,0x25,0xa7,0x96,0x2a,0x86, + 0x1a,0xb5,0x13,0x1f,0x78,0xde,0xfb,0x6f,0x63,0xca,0xf3,0x6b,0xff,0x00,0xad,0xb0, + 0x3d,0x46,0x47,0x1d,0x3c,0xb1,0x4b,0x4f,0x4a,0xba,0x5d,0x0d,0xc2,0x48,0x01,0x0e, + 0x38,0x00,0x70,0x46,0xe7,0x61,0xc9,0x07,0x8d,0x86,0x13,0xa9,0xa0,0x97,0xbb,0x34, + 0xd7,0x73,0x76,0x20,0x5c,0xb3,0x6c,0x2c,0x40,0x1b,0xdb,0x8f,0xa7,0xf5,0xc7,0xcf, + 0x32,0x6a,0xee,0x99,0x82,0x33,0x1d,0x57,0x08,0x46,0xa2,0x06,0xec,0x3d,0xbd,0xb7, + 0xfe,0xb7,0xc3,0x87,0x56,0x14,0xb4,0x80,0xe4,0xaa,0x2c,0x60,0x3b,0xc8,0xc5,0x4e, + 0xc4,0x11,0xb7,0x36,0x22,0xc2,0xff,0x00,0xae,0xd8,0x1d,0x51,0x6f,0xdd,0x42,0x21, + 0x70,0x0a,0x9f,0x0a,0xc3,0xee,0x76,0xbf,0xdb,0xc1,0xd8,0xe0,0x90,0xda,0xe3,0x3f, + 0xc8,0xff,0x00,0x9b,0x51,0x24,0x9b,0x01,0xb7,0x27,0x6d,0xfc,0x8b,0x1e,0x30,0xd5, + 0x4c,0xc9,0x33,0xac,0xf2,0xe8,0x0c,0x54,0x05,0x57,0x05,0x40,0x20,0x70,0x46,0x00, + 0x4b,0xc2,0x7e,0x30,0x1e,0x86,0x55,0x63,0x26,0xa1,0x17,0x70,0x6c,0x3d,0x20,0x72, + 0xa4,0x1d,0xad,0xf5,0xb8,0x23,0xf5,0xd9,0xa3,0x1a,0xcc,0xa5,0xdd,0x5b,0x50,0xf4, + 0xc6,0x18,0x5c,0xad,0xcd,0xc8,0xb1,0x1c,0xdb,0xe9,0x8f,0x26,0xcc,0x4a,0xcb,0xa2, + 0xe0,0xc8,0xbb,0x0d,0x7b,0x86,0x02,0xc4,0x02,0x3c,0xf1,0xe7,0x6d,0xb1,0xed,0x6d, + 0x5c,0x7d,0xc3,0xdd,0x74,0x57,0x75,0xd4,0x34,0x9d,0x40,0x03,0xb8,0x1b,0x6c,0x08, + 0x04,0x7f,0xa6,0x0d,0x77,0x46,0xd2,0xd2,0x4e,0xc4,0x11,0xeb,0x8e,0x29,0xc1,0x7d, + 0x44,0xc8,0x8b,0x6b,0x71,0xbd,0xbf,0xd3,0x8d,0xf0,0xdb,0x4a,0xac,0xd2,0xe9,0x96, + 0x52,0x65,0x05,0x89,0x43,0xf9,0xae,0x7d,0x87,0xf4,0xc2,0x63,0x48,0xeb,0x6a,0xa3, + 0x8a,0x47,0x5a,0x64,0x60,0x43,0xb8,0x1a,0x82,0x5b,0x92,0x00,0xfd,0x3f,0xa9,0xc1, + 0xb5,0xe3,0xb7,0x14,0x91,0xd7,0x49,0x4d,0x31,0x36,0x30,0xcc,0x4b,0x17,0xdf,0xca, + 0xdb,0xf2,0x0b,0x71,0x7d,0xb6,0xb6,0x0b,0x51,0x19,0x0b,0x57,0x7a,0x95,0x41,0xa9, + 0xe9,0x9e,0x1a,0x73,0x6b,0x80,0xac,0x09,0xf5,0x03,0xa8,0x0d,0xc9,0xb6,0xfe,0x39, + 0xd8,0x78,0x18,0x19,0x99,0xb5,0x44,0xa2,0x49,0x59,0x95,0x09,0x45,0x0c,0x6c,0xc0, + 0x0f,0x7f,0xe6,0x36,0xdc,0x5c,0x7d,0xbd,0xb0,0xaa,0xb8,0x8c,0x93,0x2b,0x49,0x2d, + 0x9a,0x38,0x94,0x14,0x90,0x06,0xd8,0x1d,0xad,0xc7,0xa7,0x63,0x6e,0x6c,0x38,0xe7, + 0x0d,0x84,0x31,0xa4,0x15,0x51,0xaa,0xd3,0xc2,0xa0,0x77,0x22,0xb3,0x14,0xed,0xd8, + 0xd8,0x58,0x8e,0x77,0x00,0x0c,0x55,0x4a,0xdb,0x29,0x68,0x1e,0x5f,0x9d,0xae,0x88, + 0x13,0x1a,0x93,0x62,0xd2,0xea,0xb1,0x2d,0xc1,0x53,0x66,0x20,0x8b,0x0d,0x5c,0x5c, + 0x5b,0x7c,0x30,0x47,0xcc,0xcc,0x24,0x2e,0xa5,0xca,0x80,0xe4,0xc8,0x74,0x84,0xb1, + 0x1a,0x4d,0xb7,0x04,0x81,0x61,0xe0,0xdc,0x79,0xc2,0x25,0x8e,0x48,0xcb,0xc5,0x5a, + 0x20,0x62,0x54,0x84,0x70,0xc1,0x80,0x8c,0x90,0x56,0xd7,0xb5,0xc5,0x8f,0xde,0xc2, + 0xde,0x30,0x3d,0x3d,0x5b,0xaa,0x35,0x83,0x0d,0x08,0xc3,0x4c,0xdb,0x0d,0x4b,0xe7, + 0xe9,0xce,0xdf,0x6f,0xae,0xe1,0x04,0xfd,0x6b,0xa4,0x70,0x52,0x4e,0x46,0xa4,0x63, + 0xa2,0xe4,0x92,0x40,0xb5,0x8a,0xb1,0xb8,0xdc,0x12,0x4f,0xb6,0xf8,0x00,0x44,0xcc, + 0xcf,0x0d,0x1c,0xaa,0x91,0xb1,0x2c,0xcb,0xc6,0xa1,0xf9,0x6e,0x0f,0xde,0xc0,0x5c, + 0xed,0x83,0x7b,0x92,0x53,0x53,0x2c,0x32,0x46,0xec,0x2e,0x49,0xba,0x83,0x62,0x45, + 0xf6,0xf7,0xf6,0xfb,0xe0,0x44,0xae,0x27,0x30,0x88,0x24,0x8a,0x89,0x2f,0xa3,0x59, + 0x3a,0x5d,0xbc,0x90,0xad,0xc5,0xc8,0x27,0x7f,0xb9,0xdf,0x8c,0x02,0x7b,0x25,0x24, + 0x03,0x49,0x6d,0x07,0x6e,0x12,0x64,0x1a,0x1e,0xc1,0xe2,0x01,0x8a,0x9d,0x89,0xbd, + 0xc9,0xd8,0xaf,0x1f,0xb7,0xd7,0x0b,0x4b,0xd5,0x2a,0xcb,0x4f,0x1a,0x47,0x10,0x60, + 0x3b,0x71,0x2e,0x9d,0x0f,0x60,0x06,0xd6,0xe2,0xe2,0xd7,0x17,0xe3,0x7d,0xf0,0xc5, + 0x45,0x29,0x58,0xda,0x3a,0x7d,0x6f,0x04,0x70,0x31,0x11,0xcc,0x6c,0xdb,0xec,0x74, + 0xb0,0xda,0xfb,0xdb,0xea,0x2e,0x46,0x16,0x2b,0x52,0x56,0x86,0x09,0x54,0xc1,0x19, + 0x62,0x23,0xfc,0x56,0x55,0xe5,0x6e,0x34,0xfd,0xce,0xff,0x00,0xa6,0x00,0xf5,0x40, + 0x25,0xbb,0x32,0xca,0xba,0x48,0xd5,0x23,0x6c,0x09,0xdd,0xd8,0x8b,0x5a,0xde,0x08, + 0xb3,0x70,0x37,0xb8,0xc3,0x1b,0x89,0x8b,0x4a,0x64,0x20,0x0b,0x20,0xd3,0x70,0xa6, + 0xf7,0xb7,0xdb,0xcd,0xce,0x1d,0x92,0x86,0x69,0x59,0xd9,0x95,0x4c,0xa9,0x21,0x78, + 0xfd,0x44,0x69,0x1e,0xeb,0xf5,0xdc,0x11,0xfe,0xec,0x0a,0x03,0x35,0x7a,0xb2,0xd5, + 0x44,0xb2,0x3a,0x5d,0x51,0xe4,0xd1,0xa8,0x06,0xe7,0x7d,0xae,0x2c,0x49,0xfa,0x1c, + 0x43,0x94,0x09,0x3c,0x22,0x6a,0x21,0x84,0x6b,0x55,0xb1,0x51,0xa5,0x91,0x88,0xb8, + 0xb7,0x16,0xbf,0xde,0xc7,0xec,0x70,0x05,0x4a,0xca,0x40,0xb2,0xb8,0x94,0x5d,0xb4, + 0x09,0x08,0xb5,0xb9,0x1f,0xfe,0xa0,0xff,0x00,0x7e,0x70,0x55,0x3d,0x50,0x85,0xcc, + 0x55,0x11,0xfa,0x15,0x49,0x45,0x00,0x06,0x8c,0x8d,0xac,0x2f,0xe0,0x5e,0xe3,0xdc, + 0x61,0x25,0x9a,0x12,0xf5,0x31,0xcd,0xa5,0xf6,0x59,0x03,0x1b,0xa9,0x6e,0x41,0x1c, + 0x5e,0xf7,0x1b,0x1f,0x38,0x03,0xd1,0x0b,0x41,0xe8,0xd6,0xb1,0x09,0x02,0x4b,0x2c, + 0x91,0x69,0x56,0x06,0xdb,0x93,0xfd,0x37,0xdb,0x6f,0xef,0x82,0x4b,0x49,0x14,0x71, + 0x99,0x40,0xee,0x85,0x55,0xd1,0x6d,0x24,0x02,0x48,0x04,0x7e,0xdf,0xbe,0x17,0x21, + 0xef,0x36,0x89,0x57,0x53,0x2e,0xa0,0x80,0xa8,0xd8,0xed,0xb5,0x87,0xd2,0xc3,0xce, + 0x3e,0xa1,0xa3,0x69,0xd3,0x4d,0x43,0x08,0xa6,0xd0,0xe2,0x24,0x24,0x10,0x5a,0xe6, + 0xea,0xd6,0xb1,0x1c,0x83,0xfa,0x9d,0xbc,0xe1,0x72,0x4a,0x9f,0x24,0xcd,0x61,0xd7, + 0xdb,0x5f,0xfd,0x31,0xa5,0x95,0xad,0xab,0x4a,0xea,0x20,0x5f,0xf5,0xf4,0xe0,0x58, + 0x75,0xa4,0x51,0xb0,0xf9,0x73,0x34,0x6c,0xb2,0x0d,0x5f,0x9d,0x85,0xaf,0xb0,0xe0, + 0x8b,0x6f,0x63,0xbf,0xb5,0xf8,0xc4,0xc4,0x90,0x41,0x1d,0x3c,0x2e,0xb0,0x88,0x04, + 0xeb,0xb3,0x45,0x3b,0xb4,0x5a,0x4d,0x95,0xec,0xaf,0xea,0x00,0x72,0x45,0xf6,0x6f, + 0x71,0x70,0x01,0xf9,0x60,0xba,0xe2,0x57,0xed,0xbc,0x0a,0x8c,0x80,0x9b,0x6a,0x5b, + 0x8b,0x7d,0xc7,0xbf,0xd0,0xfd,0x30,0xdc,0x28,0x54,0x76,0x67,0x44,0x24,0xca,0x21, + 0x96,0x15,0x70,0xc9,0x50,0x21,0x90,0xfa,0x58,0x11,0x6b,0xab,0x58,0x1d,0xb6,0xbd, + 0xc1,0xe3,0x6f,0x7d,0x85,0xa6,0x9c,0x4d,0x4f,0x40,0xf3,0x69,0x90,0x17,0x28,0xc8, + 0x36,0x2a,0xdc,0x32,0xdf,0x9d,0xb9,0xbf,0x9f,0xe9,0x89,0x12,0x16,0x59,0x6a,0x1e, + 0x56,0x31,0x77,0x62,0xb3,0x82,0xb6,0x04,0x82,0x19,0x6c,0x47,0x91,0xfd,0x78,0xc4, + 0x45,0x3d,0x0c,0xd4,0xfd,0xc7,0x0c,0x5d,0x63,0x73,0xa7,0xb4,0xe0,0xad,0xd9,0x5b, + 0xf3,0x2f,0x27,0x7b,0x9d,0xbf,0xb6,0x18,0x10,0x8d,0xda,0x72,0x1d,0x6b,0x15,0x28, + 0xa7,0x90,0x05,0xdd,0x5d,0x38,0x25,0x43,0x1b,0x8b,0xf8,0x36,0xdf,0x6f,0x6c,0x79, + 0x98,0x21,0x8e,0x9a,0x1f,0x95,0x95,0x5c,0xc1,0x2a,0x58,0xba,0x05,0x6f,0x6e,0x57, + 0x90,0x4b,0x7d,0xc5,0xce,0x25,0xe8,0x22,0x96,0xb6,0x9d,0x54,0xc3,0x14,0xd3,0x42, + 0xe0,0xa0,0x0c,0x23,0x2c,0x0e,0xdb,0xf1,0xa9,0x40,0xb3,0x5f,0xc7,0xd4,0x5c,0x61, + 0x8a,0x68,0xa2,0x66,0x96,0x32,0x9f,0x27,0x30,0x9e,0xc8,0xee,0x49,0xb1,0x37,0x05, + 0x48,0xe6,0xf7,0x1c,0x8f,0xa1,0xe3,0x04,0x12,0xa7,0x2a,0x2a,0x58,0x94,0x3b,0xbc, + 0x65,0xfb,0x63,0x4b,0x6e,0xf7,0x62,0x42,0xe9,0xff,0x00,0xf2,0x17,0x37,0xf1,0xb0, + 0xd8,0x5f,0x05,0xac,0x69,0x2a,0x0e,0xdc,0x92,0x2a,0x54,0x04,0x63,0xb6,0xa5,0x46, + 0x50,0x75,0x15,0x6f,0xfe,0xdb,0x5c,0x7d,0x7e,0x98,0x4d,0x4d,0x23,0x30,0x94,0x8a, + 0x72,0x03,0xfa,0xa4,0x42,0x84,0x3d,0x98,0xf1,0x71,0x7b,0x5b,0x9f,0xb1,0xc2,0xe1, + 0x91,0xe8,0x50,0x45,0xde,0x75,0x62,0xc5,0xd8,0xad,0x95,0x1c,0xdc,0x69,0x36,0x17, + 0xff,0x00,0x5f,0x27,0xdc,0xe1,0x46,0x0e,0x51,0x06,0x94,0x45,0x44,0x93,0xd1,0xca, + 0xb1,0x54,0xea,0x5b,0xb7,0xa1,0x03,0x6a,0x04,0x31,0xd8,0xf3,0xb8,0x26,0xfc,0xe1, + 0x99,0xd5,0xe6,0x8a,0x21,0x4c,0xe0,0x33,0x59,0x9d,0x5e,0x4d,0x66,0x30,0x4d,0xef, + 0x61,0x6b,0xee,0x36,0xfb,0xfd,0x31,0x36,0x60,0x10,0x4d,0x23,0x46,0x44,0xf0,0x4a, + 0xb6,0x7b,0xa6,0xa0,0x11,0xec,0x46,0xaf,0xf2,0xee,0x0e,0xde,0x2e,0x71,0x12,0x62, + 0x55,0x81,0x5e,0x2d,0x1a,0x43,0x8b,0xb0,0x36,0x65,0x28,0x2c,0x01,0xbe,0xe0,0xde, + 0xc0,0x79,0xb1,0x36,0xdf,0x0c,0x30,0xa0,0x34,0x69,0x7c,0xf0,0xf7,0xa9,0xda,0xa0, + 0x2a,0x08,0xd5,0x3f,0x29,0x24,0xb2,0xb0,0xb5,0x9b,0xf5,0x07,0x9d,0xcd,0xf6,0x3b, + 0xf2,0x33,0x54,0x4e,0x92,0x83,0x24,0x2f,0x02,0x03,0x76,0xee,0xa1,0x0a,0xbc,0x6e, + 0x58,0xf9,0xb1,0x1b,0x73,0xbe,0x24,0x21,0x41,0x3c,0x90,0x33,0x6a,0x49,0x63,0x00, + 0x49,0x1c,0x65,0x49,0x60,0x41,0x21,0x80,0x3b,0x1d,0xc5,0xae,0x7d,0xaf,0xf4,0xc1, + 0x15,0xb5,0x2b,0x28,0x32,0x2c,0x82,0x5a,0x69,0x57,0xf0,0xd1,0xd0,0x1d,0x3e,0x08, + 0x6b,0xf3,0xa4,0x9d,0xb7,0x04,0xdb,0x6f,0xa5,0xc0,0x22,0x45,0xe5,0x42,0xc8,0xc2, + 0xa2,0x12,0x10,0xb5,0x34,0xe3,0x62,0xa5,0xb4,0xa9,0xf6,0x24,0xb6,0xe2,0xe3,0x7b, + 0x13,0xb7,0xb6,0x06,0x7a,0x1a,0xa8,0xad,0x0d,0x44,0x36,0x67,0x6d,0x70,0xbb,0x30, + 0x21,0xdb,0xc5,0xad,0xee,0x31,0x2d,0x1e,0x5d,0x35,0x53,0x81,0x98,0x55,0x77,0x9c, + 0xb2,0x24,0x10,0x14,0x29,0xde,0x24,0x0d,0xd1,0x6d,0xa4,0x93,0x71,0xe9,0x62,0x0f, + 0xe8,0x30,0xb9,0x29,0x57,0x2e,0xac,0x5a,0x68,0xe5,0x6b,0xa8,0x62,0x63,0x90,0x69, + 0x31,0xf2,0x2c,0x45,0xae,0x6c,0x6f,0xcd,0xbc,0xed,0x82,0x55,0x75,0x4a,0xbe,0x6b, + 0x3b,0x01,0x2b,0x24,0x55,0x3f,0x87,0x61,0x1f,0x8b,0x91,0x6b,0x12,0x0d,0xed,0x7b, + 0xdc,0x0f,0xa6,0xe3,0x0e,0xf7,0x63,0x78,0xd2,0xa1,0x4b,0x49,0x4d,0x76,0x56,0xd2, + 0xc2,0xca,0x41,0x1a,0x88,0x04,0x93,0xa4,0x7f,0x5e,0x71,0x2f,0x1e,0x48,0x90,0xbb, + 0xb1,0x92,0x36,0x8d,0xb7,0xed,0xd8,0x86,0x17,0x04,0x30,0x26,0xd6,0xb1,0xdb,0x6f, + 0xeb,0x81,0x69,0xb2,0x5a,0x4a,0x55,0x78,0x29,0x6b,0x9b,0x5a,0xb1,0x92,0x3b,0x05, + 0xbb,0x73,0xb7,0x9e,0x37,0xdf,0xe9,0xf5,0xc4,0x04,0x27,0xc6,0xd5,0xa5,0x55,0x54, + 0x89,0x2a,0xf4,0xab,0x2b,0x36,0xa5,0x0a,0xde,0x58,0x16,0x01,0xb5,0x78,0xb6,0x9f, + 0xb0,0xc1,0xd3,0x4c,0x26,0xb7,0x67,0x5d,0x1d,0x41,0x5d,0x50,0x08,0x9b,0x65,0x02, + 0xde,0x9b,0x9f,0xa3,0x1b,0xdb,0x8d,0xf1,0xec,0x94,0xf1,0xe6,0x14,0x74,0xb5,0xd4, + 0x63,0xb7,0x3c,0x54,0xc3,0xbe,0x00,0x01,0x08,0x05,0x48,0x36,0x1c,0x36,0x96,0x37, + 0xf1,0xb8,0x36,0xf1,0x80,0x92,0xaf,0xf0,0xcc,0x57,0xee,0x2c,0x73,0x77,0x89,0x71, + 0xaf,0xd2,0xed,0xb8,0xdf,0x7b,0x69,0xe2,0xdf,0x94,0x81,0xe2,0xf8,0xac,0x04,0xe0, + 0x52,0x90,0xec,0x2c,0x0d,0x45,0x24,0x52,0x46,0x59,0xa9,0x47,0xe3,0xa4,0x97,0x5b, + 0x6a,0x37,0x37,0xde,0xf6,0x24,0x7e,0xc4,0x61,0xa6,0x8b,0xb7,0xda,0x9e,0x09,0x25, + 0x30,0x88,0x43,0x3b,0xbb,0xad,0xc8,0xf2,0x01,0x26,0xf6,0xdf,0xdb,0x6e,0x70,0x9a, + 0x49,0x0c,0x13,0xb4,0x3d,0xb3,0x3d,0x29,0x81,0x66,0x48,0xde,0x3d,0x60,0xa9,0xe4, + 0xa8,0x3b,0x83,0xbd,0x8f,0x3b,0xae,0x1b,0x8d,0x0c,0x31,0x46,0xd5,0x0d,0xdc,0xa5, + 0x96,0x50,0x85,0x91,0xc3,0x58,0x5a,0xe4,0x03,0xfe,0x61,0xa6,0xc4,0x1e,0x3e,0xb7, + 0x18,0x54,0xc5,0x15,0x00,0xb5,0x6a,0xc3,0x3a,0x88,0x8f,0xcc,0x29,0x2e,0xc7,0x75, + 0x04,0x15,0xb1,0xdb,0xff,0x00,0x78,0x3b,0x73,0x63,0x80,0x23,0xa5,0x93,0xb4,0xcb, + 0xd8,0x8e,0x37,0x88,0xb9,0x30,0x68,0x22,0xe7,0x55,0xae,0xb7,0xbe,0xd6,0x04,0x8d, + 0xfe,0xd8,0x79,0x9c,0x47,0x50,0xe0,0x86,0xa9,0x82,0x58,0xc8,0x92,0x40,0x86,0xd1, + 0x3b,0x32,0xaa,0x39,0x07,0xf9,0x75,0x69,0xe3,0xdf,0x9e,0x46,0x1a,0xad,0xd0,0x29, + 0xa4,0x0b,0x23,0xfe,0x0a,0x92,0x43,0x90,0x34,0x30,0xdb,0x7b,0x73,0xe6,0xe3,0xe9, + 0x85,0x72,0x47,0x70,0x93,0x0a,0x77,0x27,0xaa,0x10,0x32,0xe9,0x8e,0x33,0x22,0xc6, + 0x0e,0xe2,0x23,0xbd,0xc0,0xf3,0x6b,0x5f,0xdc,0x6c,0x6d,0xce,0x3d,0x9e,0x05,0x58, + 0x66,0x31,0xc8,0x62,0xac,0xed,0x17,0x4b,0xd9,0xb5,0xdc,0x73,0x63,0xb6,0xd6,0xb6, + 0xdc,0x86,0xb6,0xfb,0x60,0x5a,0x97,0x32,0x49,0x38,0x40,0x88,0xdd,0x93,0x22,0x28, + 0x5f,0x20,0x00,0x77,0x1b,0xf3,0xe3,0xd8,0x8c,0x3b,0x51,0x34,0x68,0xe6,0xef,0x1c, + 0xce,0x2c,0xc1,0xa2,0x6b,0x91,0xc5,0xad,0xf7,0xe3,0xf5,0xc2,0x83,0xd5,0x57,0x78, + 0x5e,0xd4,0x54,0x4c,0xd4,0xdd,0xe8,0xe2,0x68,0x15,0xe3,0xd4,0xea,0x1b,0x4d,0x94, + 0x9b,0x12,0x05,0xc0,0x24,0x1f,0xe5,0xfb,0x62,0x30,0xac,0x10,0x33,0x4a,0x1e,0x69, + 0xd4,0x2e,0xa9,0x84,0x71,0x77,0x04,0x45,0x0f,0x36,0xe7,0xf5,0xb0,0xf3,0x89,0x08, + 0xa9,0x51,0x29,0xea,0x23,0x12,0x05,0x46,0xd2,0xe6,0x20,0xc4,0x69,0x2c,0xa7,0x50, + 0x06,0xfe,0x2d,0x6b,0x73,0xc6,0x19,0x45,0x44,0xbd,0x4b,0xa1,0x99,0x19,0xc9,0x90, + 0x04,0xbf,0xa6,0xd6,0x2b,0x71,0xe0,0xdc,0x8e,0x7f,0x98,0x9f,0x18,0xb0,0x1c,0xa8, + 0x72,0x53,0x95,0x30,0x4e,0xb5,0x72,0xab,0xc3,0x24,0xb1,0x47,0x52,0xa4,0xb7,0x6c, + 0x31,0x7d,0x47,0x7f,0x50,0xbf,0x9b,0x0b,0x71,0xce,0x3c,0xac,0x8d,0x0c,0xc6,0x18, + 0xa5,0x12,0x86,0x1b,0x34,0x60,0xbe,0xa0,0x14,0x32,0x80,0x47,0x9e,0x0f,0xb8,0x38, + 0x72,0x92,0x57,0x02,0x7d,0xde,0x29,0x4c,0x4a,0x19,0x48,0xe4,0xea,0x1a,0x48,0xbe, + 0xf7,0x1e,0x1b,0xe9,0x81,0x25,0x99,0xe4,0xae,0x5d,0x53,0x6a,0x98,0xb8,0x6b,0x90, + 0x40,0x75,0x16,0x0a,0x49,0x1e,0x78,0xdf,0x6d,0xfe,0xf8,0xac,0x90,0x05,0xa8,0x40, + 0xa4,0x85,0x8d,0xc4,0xef,0x28,0x32,0x53,0x33,0x03,0xa0,0xb1,0x37,0x0c,0x6d,0xb8, + 0x06,0xc7,0x8d,0xad,0xf5,0xc3,0xd0,0xc2,0x93,0xc7,0x51,0xd8,0x31,0x1d,0x69,0x78, + 0xf9,0x12,0x6b,0x17,0x04,0x0f,0x16,0x37,0xfc,0xa7,0x92,0x45,0xbc,0x8c,0x3d,0x3d, + 0x4c,0x72,0x46,0xa4,0xfe,0x24,0x71,0x36,0xb6,0xb9,0x25,0xd8,0x03,0x66,0xfd,0x8e, + 0xf7,0xe4,0x82,0x0f,0xd9,0x48,0x6e,0xc6,0x2a,0x5b,0xc7,0x47,0x32,0xac,0x92,0xc3, + 0x72,0xed,0x20,0x5b,0x5e,0xc6,0xd7,0x2d,0xfe,0x5e,0x7f,0x28,0xf2,0x70,0x80,0x02, + 0x50,0x01,0x11,0x12,0x4d,0x3c,0x8f,0x51,0x2c,0x55,0x12,0xd3,0x22,0x90,0xc7,0x4b, + 0x32,0x10,0x6c,0x75,0x5b,0x80,0xc2,0xe3,0x7e,0x78,0xb9,0xc4,0x7e,0xa6,0x0d,0x46, + 0x4b,0x77,0x62,0x8c,0x58,0x12,0x75,0xc6,0x2e,0x2c,0x1b,0x71,0xb7,0xb1,0x1e,0xeb, + 0x7c,0x19,0x96,0x07,0x81,0xbf,0xe2,0x51,0xd6,0x64,0x71,0x34,0x0d,0xa8,0x10,0xcd, + 0xa0,0x1d,0x24,0x8f,0xca,0xf7,0x1e,0x4e,0xf6,0x1e,0xf8,0x7e,0x2a,0x83,0x52,0xe6, + 0x39,0xbb,0x62,0x47,0xb1,0x8d,0xa4,0x83,0x5a,0x6b,0x5d,0x37,0xb9,0xd8,0xdb,0xed, + 0xc5,0xef,0x6c,0x39,0xca,0x7e,0x79,0x55,0xda,0x89,0x91,0xa2,0x11,0x04,0x80,0x4c, + 0xd1,0x9b,0xac,0x60,0x21,0x17,0x3a,0x6d,0x7b,0xef,0x70,0x0d,0x85,0xb8,0x00,0x8f, + 0x37,0x2e,0xa1,0x20,0x8a,0x68,0x7b,0xb2,0xc6,0x89,0x3c,0x7a,0x52,0x50,0x81,0x23, + 0xb9,0x00,0x86,0x75,0x6b,0x15,0x60,0x4f,0x23,0xef,0xbd,0xf1,0xf6,0x67,0x1c,0x53, + 0xc8,0x92,0x26,0x9a,0x7d,0x43,0xe6,0x54,0x9b,0x48,0xcb,0x20,0x7f,0x5a,0x96,0x02, + 0xcc,0x01,0x00,0xaf,0xd0,0x0b,0x73,0x85,0xc9,0x01,0x95,0xa3,0x8e,0x76,0x66,0x89, + 0x42,0xcc,0x58,0x9d,0x40,0x70,0x09,0x55,0x27,0x62,0x08,0xb9,0x1b,0xde,0xe7,0x10, + 0x61,0xc9,0x47,0x28,0x1a,0x28,0x9a,0x29,0x4c,0x1f,0x2e,0xdd,0xe8,0x37,0x68,0x9d, + 0xec,0x54,0x82,0x6e,0xa0,0xff,0x00,0x37,0x9e,0x3f,0xae,0x14,0x69,0x8c,0x55,0x28, + 0x61,0x45,0x31,0xc6,0xa1,0x5d,0x5a,0xc3,0x72,0x2c,0x6c,0x0d,0xb9,0x5f,0x17,0xc2, + 0x2a,0x69,0xd8,0xcb,0x18,0xac,0x12,0xcd,0x11,0x60,0x45,0x40,0xb9,0x27,0x49,0xb7, + 0xdc,0x81,0x72,0x2f,0xc8,0x20,0x60,0xbf,0x96,0x35,0xf0,0xc5,0x2c,0x93,0x33,0x86, + 0x40,0x35,0x91,0xf9,0xd4,0x86,0x2b,0xfb,0x1b,0xe2,0x55,0x25,0xaa,0x29,0xa3,0x43, + 0x09,0x87,0xb7,0xdd,0xed,0xbc,0x3c,0x90,0x4d,0x80,0xb0,0x06,0xff,0x00,0x4e,0x47, + 0x9d,0xf9,0xc3,0xf0,0xd3,0xc1,0xdb,0x8d,0x69,0xdc,0x07,0x6b,0x68,0xbe,0x8b,0x86, + 0x16,0x04,0x05,0x06,0xfc,0xfd,0x4f,0x9d,0xb0,0x2b,0x40,0xd1,0x25,0x3f,0x78,0x87, + 0x76,0x36,0x64,0x0e,0x00,0x4f,0x04,0x91,0xe7,0x71,0xc8,0xe7,0xec,0x70,0xc5,0x45, + 0x35,0x4c,0x54,0xd3,0x4f,0x4e,0x2f,0x1a,0x10,0x74,0xa3,0xdd,0x8a,0xe9,0xb8,0x6b, + 0x6c,0x2d,0x7d,0xb6,0xbe,0x2c,0x6a,0xb1,0x22,0x57,0x14,0x73,0x68,0x0a,0x83,0xd4, + 0x49,0x2a,0xfc,0x1f,0xca,0x48,0x23,0x7b,0xdb,0x6d,0xcf,0x8f,0xbe,0x1e,0xcc,0x28, + 0xe3,0x92,0x9e,0x66,0xee,0x53,0xbe,0x99,0x1b,0x57,0x70,0x15,0x91,0x97,0xc0,0xf2, + 0x2d,0xf7,0xc7,0x95,0xd5,0xf4,0xd0,0xa4,0x91,0xd5,0xfe,0x1b,0xbb,0x77,0xb4,0x38, + 0x2c,0xaf,0xec,0x4b,0x71,0xfc,0xd6,0xfe,0xe3,0x01,0xd2,0xd4,0xc2,0xcf,0xae,0x37, + 0x5e,0xd8,0xb2,0xd8,0x6f,0x71,0xbe,0xc7,0xc8,0x3b,0x61,0xd4,0xe1,0x03,0x47,0x45, + 0x1b,0xd3,0xb1,0x59,0xc4,0x4c,0xde,0x90,0xd7,0x00,0x44,0xa4,0x5b,0x51,0xda,0xcc, + 0x6f,0x7b,0x01,0xc7,0x3b,0x6c,0x70,0xeb,0x54,0xd3,0x88,0xa6,0xa6,0x96,0x66,0x9a, + 0x02,0x3b,0xc4,0x29,0x2a,0x8c,0xd7,0xd2,0x08,0x3b,0x05,0x6b,0x30,0xd8,0xdd,0x4d, + 0xb9,0x3b,0xda,0x5c,0x50,0x53,0x55,0x22,0x40,0x24,0x30,0x4e,0x5c,0x76,0xde,0xe4, + 0x80,0xf7,0x24,0x73,0xb8,0xfd,0xec,0x71,0x1a,0x72,0x86,0x59,0x87,0xcc,0x29,0x8c, + 0x93,0xa0,0xc8,0x06,0xa5,0x00,0xee,0x2c,0x79,0x2b,0x66,0xda,0xdc,0x6f,0xc0,0xc4, + 0x69,0xda,0x38,0x50,0x5d,0x55,0x25,0x54,0xb4,0xb0,0x46,0x23,0x78,0x56,0x60,0xbb, + 0xac,0x9e,0x9f,0x58,0xb7,0xa4,0xb0,0xe4,0x8e,0x0d,0xed,0xfa,0xe3,0xd8,0x63,0x30, + 0xbb,0xa4,0x0c,0xb2,0xd4,0xf6,0x89,0xd3,0x34,0xac,0x5a,0xfc,0xb2,0xa0,0x23,0xd4, + 0xff,0x00,0xca,0x2f,0xf5,0x02,0xe7,0x11,0x95,0xd4,0x3a,0x54,0x56,0x52,0x46,0x52, + 0x7a,0x67,0x00,0xc5,0xa8,0x95,0x95,0x45,0xbd,0x5e,0x48,0x23,0x7b,0x8e,0x3d,0x57, + 0x1e,0xc1,0xee,0xe7,0xcc,0xe5,0x0e,0x93,0xcc,0x5a,0x48,0x77,0x49,0x14,0x10,0xcb, + 0x6e,0x48,0xbe,0xed,0xa4,0xe8,0xdb,0xf5,0xc3,0xdd,0xa1,0x5b,0x93,0x73,0xb2,0x24, + 0x74,0x93,0x54,0x48,0xc6,0x99,0xe1,0xfc,0x54,0x63,0x79,0x0f,0x3a,0x94,0xed,0xb1, + 0xdd,0x74,0xdf,0xdc,0x1f,0x71,0x86,0xdd,0xe5,0xa3,0x57,0x53,0xa2,0xa2,0x9d,0xdc, + 0x15,0xb0,0xd2,0x83,0x55,0x8a,0x38,0x20,0xea,0x50,0x56,0xde,0x76,0x23,0x7b,0xe3, + 0xc9,0xea,0xde,0x66,0x95,0xe1,0x89,0x14,0xcd,0xa5,0x54,0x3d,0xd5,0x1a,0x41,0x7b, + 0xbb,0x16,0x36,0x03,0xf5,0xe4,0x9f,0x7c,0x26,0x29,0x67,0xcb,0xe5,0x85,0x26,0x96, + 0x4a,0x59,0xcc,0x77,0x24,0xcb,0xa7,0x40,0xdc,0x85,0x20,0x78,0x00,0x8f,0x50,0xb7, + 0x38,0x0e,0xf4,0x4b,0x4b,0xff,0xd9}; diff --git a/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/tulips.h b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/tulips.h new file mode 100644 index 0000000..edd8e2d --- /dev/null +++ b/Microcontroller Code/lib/JPEGDEC-1.2.1/test_images/tulips.h @@ -0,0 +1,3504 @@ +// +// tulips +// +const uint8_t tulips[] PROGMEM = { 0xff,0xd8,0xff,0xc0,0x00,0x11,0x08,0x01,0xe0,0x02,0x80,0x03,0x01,0x22,0x00,0x02, + 0x11,0x01,0x03,0x11,0x01,0xff,0xc4,0x00,0x1f,0x00,0x00,0x01,0x05,0x01,0x01,0x01, + 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05, + 0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4,0x00,0xb5,0x10,0x00,0x02,0x01,0x03,0x03, + 0x02,0x04,0x03,0x05,0x05,0x04,0x04,0x00,0x00,0x01,0x7d,0x01,0x02,0x03,0x00,0x04, + 0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81, + 0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82, + 0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36, + 0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56, + 0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76, + 0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95, + 0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3, + 0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca, + 0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, + 0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xc4,0x00, + 0x1f,0x01,0x00,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0xff,0xc4, + 0x00,0xb5,0x11,0x00,0x02,0x01,0x02,0x04,0x04,0x03,0x04,0x07,0x05,0x04,0x04,0x00, + 0x01,0x02,0x77,0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51, + 0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23, + 0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18, + 0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45, + 0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65, + 0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84, + 0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2, + 0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9, + 0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7, + 0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5, + 0xf6,0xf7,0xf8,0xf9,0xfa,0xff,0xdb,0x00,0x43,0x00,0x02,0x02,0x02,0x02,0x02,0x02, + 0x03,0x02,0x02,0x03,0x04,0x03,0x03,0x03,0x04,0x05,0x04,0x04,0x04,0x04,0x05,0x06, + 0x05,0x05,0x05,0x05,0x05,0x06,0x08,0x06,0x06,0x06,0x06,0x06,0x06,0x08,0x08,0x08, + 0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x0b,0x0b,0x0b,0x0b,0x0b, + 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0xff,0xdb,0x00,0x43,0x01,0x02, + 0x02,0x02,0x03,0x03,0x03,0x05,0x03,0x03,0x05,0x0d,0x09,0x07,0x09,0x0d,0x0d,0x0d, + 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, + 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d, + 0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0xff, + 0xdd,0x00,0x04,0x00,0x28,0xff,0xda,0x00,0x0c,0x03,0x01,0x00,0x02,0x11,0x03,0x11, + 0x00,0x3f,0x00,0xfc,0x75,0xb8,0x88,0x2f,0xcc,0x3f,0x5a,0xcf,0x7f,0x41,0x57,0x2e, + 0x6e,0x17,0xa0,0xeb,0x59,0x8e,0xe1,0xbe,0x6f,0x4a,0xf0,0xe5,0xa1,0xcf,0x07,0xa9, + 0xaf,0xa7,0xcb,0x87,0x19,0xfc,0x2b,0xd0,0xad,0x2e,0x80,0x80,0x0c,0xf4,0xaf,0x30, + 0xb5,0x6d,0x8c,0x18,0xd6,0xf4,0x57,0xfb,0x78,0xdd,0x8a,0xc1,0xc9,0xdc,0x55,0x23, + 0x73,0xb5,0x92,0x7f,0x4a,0xc5,0xbd,0x97,0x72,0x9c,0xd6,0x57,0xf6,0x8e,0xec,0x8c, + 0xf4,0xef,0x50,0x9b,0x93,0x37,0x4e,0xb5,0xcf,0x51,0x6b,0x76,0x55,0x38,0xb4,0xc9, + 0x6d,0xd7,0x74,0x9f,0xca,0xb5,0x13,0x83,0xcf,0x15,0x52,0x04,0xc6,0x1b,0xd6,0xad, + 0xa8,0x6e,0x48,0xc8,0xc5,0x44,0x67,0x64,0x6c,0xcd,0xdb,0x35,0x1b,0x73,0x8e,0xb5, + 0x34,0xed,0x8e,0x07,0x7e,0x0d,0x65,0x25,0xcf,0x96,0x81,0x68,0x5b,0x8c,0xb0,0xe7, + 0x35,0xa3,0xd5,0x68,0x8e,0x7b,0xfb,0xda,0x9a,0x76,0xe8,0xa0,0xf4,0xeb,0x5d,0x0d, + 0x84,0x59,0x20,0xf6,0xee,0x2b,0x02,0xd9,0x80,0x5d,0xef,0x5b,0xd6,0x73,0x05,0xe4, + 0xf3,0x5e,0x7c,0xb5,0x96,0x84,0xcc,0xed,0x2d,0x24,0x48,0xd7,0x8a,0x75,0xde,0xa4, + 0xaa,0xb8,0x06,0xb9,0xa9,0x2f,0xc4,0x69,0x80,0x7d,0xcd,0x60,0x5e,0xea,0xa4,0xee, + 0x39,0xe9,0x5d,0x34,0x68,0x36,0xf4,0x39,0xb9,0x5f,0x35,0xcd,0x2d,0x43,0x54,0xc8, + 0x38,0x35,0xe7,0x9a,0xb6,0xa0,0x5b,0x3c,0xd3,0xaf,0xf5,0x02,0x41,0x20,0xe7,0xd2, + 0xb8,0x8d,0x42,0xeb,0x39,0xaf,0x67,0x0d,0x85,0x4b,0x73,0xae,0x9c,0x3a,0x99,0x7a, + 0x95,0xe1,0x90,0xe0,0x1a,0xe5,0xe4,0xe5,0x8d,0x6a,0x4e,0x4b,0x12,0x5b,0xe9,0x59, + 0xaf,0xc7,0x22,0xbd,0x38,0xc3,0x95,0x58,0xe9,0x48,0xaa,0x46,0x2a,0x26,0x5f,0x4a, + 0xb0,0x41,0xce,0xd3,0x50,0x91,0xeb,0xd0,0x55,0x5a,0xe3,0xb9,0x03,0x0e,0xe2,0xa1, + 0x2b,0xcf,0x15,0x39,0x19,0x15,0x13,0x71,0xc1,0xe6,0x95,0x84,0x42,0x4e,0x29,0x9f, + 0xd2,0xa4,0xc6,0x38,0xa8,0xdb,0xa0,0x26,0xa9,0x00,0x94,0x52,0x51,0xd2,0xa8,0x96, + 0xc7,0x00,0x7b,0x74,0xa9,0x00,0xc7,0x02,0xa3,0x03,0x07,0x1d,0xea,0x65,0xaa,0x8e, + 0x8f,0x52,0x18,0xf0,0xbd,0xba,0xd3,0xd7,0x38,0xc7,0x6a,0x60,0x07,0x19,0x35,0x2a, + 0xfd,0xda,0xd3,0xcc,0x68,0x91,0x73,0xda,0xa7,0x51,0xc0,0xa8,0x57,0xa6,0x7d,0x6a, + 0x45,0xce,0x69,0xdd,0x0e,0xc4,0xa0,0xe3,0xbe,0x3a,0x54,0x80,0x72,0x6a,0x21,0x52, + 0xa9,0x60,0x2a,0x5c,0xfb,0x02,0x44,0xa3,0xdf,0xad,0x28,0xe0,0xe6,0x99,0x9c,0x9a, + 0x70,0x39,0xa3,0x9d,0x0e,0xc3,0xc2,0xfa,0xd3,0xb1,0x93,0xc8,0xe9,0xd2,0x99,0x9f, + 0x5a,0x78,0x39,0x14,0x73,0x26,0x3e,0x54,0x29,0xe4,0x62,0x8c,0x7a,0x73,0x8a,0x29, + 0x4f,0x07,0xd2,0x9f,0x3a,0x0b,0x0e,0x24,0x8c,0x1a,0x76,0x3a,0x67,0xb0,0xa6,0x1c, + 0x8f,0xbd,0x4b,0x9f,0xc7,0x34,0xee,0x85,0x61,0xdc,0xe6,0x82,0x0e,0x70,0x7f,0x0a, + 0x3f,0x0a,0x78,0xc1,0x3c,0x76,0xa5,0x7b,0x02,0x43,0x4a,0x9e,0xe2,0x9d,0xb3,0x1c, + 0x66,0x9c,0x07,0x71,0x4e,0x19,0xcd,0x2b,0x6e,0xae,0x3b,0x08,0x10,0x1a,0x04,0x60, + 0xff,0x00,0x2a,0x9b,0x19,0xfa,0xd4,0x80,0x1e,0x28,0xb0,0xc8,0x3c,0x9c,0x52,0x79, + 0x3d,0xaa,0xe8,0x5c,0x9e,0x47,0xeb,0x4e,0x0b,0xed,0x47,0x27,0x60,0x28,0x79,0x34, + 0x9e,0x51,0x03,0x35,0xa5,0xb3,0x18,0x03,0xf1,0xa8,0xca,0x0c,0xf5,0xa7,0xca,0x80, + 0xcd,0x31,0x91,0xfd,0x2a,0x36,0x42,0x30,0xb5,0xa2,0x57,0x9e,0x7a,0xd4,0x0e,0xa3, + 0x1d,0x2a,0x79,0x7a,0xb0,0x28,0x14,0xc7,0xb6,0x6a,0x33,0xc7,0x15,0x69,0xc6,0x3f, + 0x0a,0xae,0xc0,0xa9,0xf4,0xf4,0xfc,0x6a,0x2d,0xd5,0x01,0x0b,0x71,0xc8,0xe7,0xda, + 0xa0,0x24,0x8e,0xdd,0x6a,0x76,0x1c,0xfd,0x6a,0x36,0xc8,0xe4,0x7e,0x34,0x80,0x8f, + 0x14,0x01,0x91,0x8a,0x3e,0x9c,0xd2,0x73,0x9a,0x0a,0x57,0x6c,0x7e,0xde,0x31,0x8c, + 0x54,0xa8,0x07,0xe5,0x50,0x73,0x52,0xae,0x4f,0x20,0xe6,0x83,0x62,0xd2,0xe7,0xa7, + 0xf5,0xa7,0xe3,0x18,0xc8,0xa8,0xd3,0x9a,0x94,0x7c,0xbd,0x45,0x69,0x18,0xa6,0x86, + 0x90,0xab,0x80,0x48,0xc6,0x29,0xe3,0x3d,0x38,0xa5,0xc6,0x69,0xc3,0xdf,0xbd,0x2e, + 0x4d,0x6c,0x3e,0x83,0x76,0x9c,0xe2,0x9d,0x82,0x30,0x00,0xc5,0x2e,0x4e,0x07,0x14, + 0xb4,0xf9,0x09,0x13,0x04,0xe7,0x3d,0x29,0x06,0x7a,0x63,0x14,0xee,0x83,0xd4,0xd1, + 0xed,0x59,0x34,0x03,0x7a,0x7a,0x0a,0x8c,0xf3,0xc8,0xe2,0xa4,0x38,0x1c,0xe3,0xfa, + 0x54,0x44,0xe3,0x3c,0xfe,0x5d,0xab,0x36,0x93,0x13,0x7a,0x11,0xe6,0x98,0x72,0x45, + 0x3f,0x8e,0xa6,0xa2,0x27,0x38,0x15,0x95,0x8c,0xb9,0x80,0x9e,0xe3,0xf2,0x35,0x19, + 0xe3,0x8e,0xc6,0x95,0xb3,0x9f,0x5a,0x6f,0x4e,0xdc,0xd0,0xd5,0x85,0x70,0xe9,0x4d, + 0xf9,0xbb,0x53,0xf1,0x9e,0x46,0x2a,0x41,0xc9,0xfa,0x7e,0x14,0xbd,0x01,0x76,0x21, + 0x50,0x70,0x09,0x14,0xf0,0xac,0x73,0x81,0x81,0x53,0xa8,0xf4,0xeb,0x52,0x2a,0x8c, + 0x72,0x05,0x22,0x9c,0x59,0xff,0xd0,0xfc,0x4d,0x37,0x1b,0xbe,0xa6,0xad,0x44,0x41, + 0xc7,0x6a,0xc4,0x59,0x09,0xe2,0xb5,0xad,0xd8,0x6d,0xe0,0x57,0x8b,0x35,0x73,0x08, + 0x23,0x44,0x7a,0x8a,0x9c,0x23,0x63,0x3f,0xfd,0x6c,0xd1,0x6d,0x17,0x9a,0x72,0x7a, + 0x56,0xda,0xc0,0x1c,0x05,0x51,0xcf,0x35,0x9c,0x7a,0xa2,0xcc,0x98,0xe3,0x6c,0xfa, + 0xd6,0x9d,0xa4,0x04,0x72,0x7a,0x55,0xe8,0x6c,0x72,0xc0,0x62,0xb5,0xe0,0xb2,0x21, + 0x80,0xdb,0x5c,0x98,0xa5,0x65,0xa3,0x2a,0x24,0xb6,0x16,0x2d,0x27,0x40,0x6b,0x56, + 0x5d,0x31,0x91,0x4f,0x04,0x7a,0xd7,0x4f,0xa1,0xd8,0x29,0x51,0x91,0x93,0xd6,0xba, + 0x2b,0xad,0x3d,0x02,0x1e,0x3a,0xd6,0x38,0x5a,0x4e,0x57,0x93,0x22,0xa4,0xed,0xb1, + 0xe3,0x97,0x50,0x98,0xf3,0xf4,0xfe,0x75,0x95,0x04,0xdb,0x5f,0xf1,0xae,0xdb,0x58, + 0xb2,0x08,0xa4,0xe2,0xb8,0x20,0xbb,0x67,0xf9,0x45,0x69,0x5a,0x9b,0x4d,0x22,0x61, + 0xdc,0xe9,0xad,0xa6,0x67,0xdb,0xc7,0x15,0xb3,0x1c,0xc5,0x00,0xe7,0x18,0xac,0x0b, + 0x60,0x17,0xb7,0xbd,0x5d,0x79,0xb0,0x38,0xfd,0x6b,0xa3,0x0f,0x84,0xbd,0x9b,0x14, + 0xec,0x58,0xb8,0xba,0x73,0x9f,0x61,0x58,0x17,0x73,0x9e,0x72,0x6a,0x69,0xa5,0xc0, + 0x23,0xaf,0xad,0x63,0xcf,0x23,0x30,0x35,0xeb,0xd1,0xc3,0x28,0xea,0xc5,0x05,0xad, + 0xd9,0x99,0x77,0x2f,0x5c,0x74,0xae,0x76,0xe0,0x82,0x4f,0xa8,0xad,0x99,0xf0,0x57, + 0x35,0x8b,0x36,0x17,0xfa,0x57,0x5a,0x49,0x1d,0x0b,0xb9,0x91,0x2e,0x32,0x78,0x23, + 0xbf,0x3e,0xf5,0x41,0xc6,0x7f,0xad,0x68,0xcd,0xb4,0x9a,0xcf,0x73,0x92,0x7e,0xb4, + 0x9e,0xc3,0x2b,0x11,0xd8,0xd4,0x45,0x73,0xf8,0xff,0x00,0x4a,0x98,0x9c,0x9c,0xd4, + 0x27,0xad,0x2d,0xc0,0x8d,0x86,0x7a,0xff,0x00,0x9f,0x4a,0x84,0xa8,0x1c,0xd5,0x8c, + 0x7f,0x0f,0xeb,0x51,0x9c,0xe7,0xda,0xaa,0xc0,0x55,0x23,0x07,0x15,0x1e,0x39,0x03, + 0x26,0xac,0x37,0xd3,0x3c,0xd4,0x78,0xf5,0xe2,0x8b,0x08,0x83,0x04,0x1d,0xb4,0xf0, + 0x0f,0x04,0xf4,0x15,0xaf,0x61,0xa4,0xdd,0x6a,0x12,0x05,0x89,0x0f,0xd7,0xad,0x77, + 0xd6,0x7f,0x0d,0x2f,0xee,0x22,0xde,0xc0,0x83,0xf4,0xac,0x2a,0xe2,0xe9,0x53,0xd2, + 0x52,0x3d,0xdc,0xb7,0x86,0x73,0x2c,0xc2,0x2e,0x58,0x5a,0x2d,0xa3,0xcb,0x14,0x63, + 0x9f,0x5a,0x93,0x81,0x9c,0x0c,0x62,0xbb,0xdb,0xff,0x00,0x00,0x6a,0x76,0x7c,0xa8, + 0x2c,0x3d,0xc5,0x72,0x77,0x5a,0x65,0xe5,0x99,0xdb,0x34,0x78,0x1e,0xb5,0x54,0x71, + 0x74,0x6a,0xbb,0x46,0x66,0x79,0x87,0x0e,0xe6,0x38,0x2f,0xf7,0x9a,0x0d,0x7c,0x8a, + 0x35,0x20,0xe3,0x8a,0x12,0x39,0x1f,0x2a,0xaa,0x4d,0x68,0xc7,0xa5,0xdf,0x48,0x37, + 0x2c,0x4c,0x7f,0x0a,0xe8,0xa9,0x56,0x2b,0x79,0x1e,0x65,0x2c,0x35,0x6a,0x9f,0xc3, + 0x83,0x7e,0x8a,0xe5,0x25,0xe3,0xaf,0x4a,0x7e,0xe1,0x81,0xfa,0x56,0x9c,0x7a,0x26, + 0xa4,0xe7,0x1f,0x67,0x7e,0x7d,0xaa,0x69,0x34,0x1d,0x4e,0x15,0xdd,0x24,0x0c,0x06, + 0x3a,0xe3,0xa5,0x60,0xf1,0x34,0x93,0xb7,0x3a,0x3b,0x56,0x4f,0x8e,0x71,0xe6,0x54, + 0x25,0x6f,0x46,0x65,0x03,0x9f,0x6a,0x78,0xea,0x29,0x8e,0x92,0x46,0xdb,0x24,0x52, + 0x31,0xd8,0x8c,0x52,0x83,0x93,0x80,0x2b,0x4e,0x64,0xf6,0x67,0x9f,0x28,0x4a,0x2f, + 0x95,0xad,0x49,0x43,0x7e,0x15,0x22,0xe7,0xae,0x3a,0xf7,0xa4,0x58,0xe4,0x23,0x24, + 0x1f,0xca,0x93,0x95,0xf6,0xa5,0xcc,0x81,0xc5,0xad,0xd1,0x2d,0x3c,0x64,0x0e,0x05, + 0x30,0x73,0xc0,0xa7,0xa9,0xe3,0x20,0xf3,0x54,0x48,0xff,0x00,0x61,0x47,0x41,0xd7, + 0xad,0x1f,0x4a,0x32,0x07,0xf5,0xa0,0x00,0x8e,0xf4,0x94,0xe3,0xcf,0x6a,0x43,0xf4, + 0xa0,0x05,0x00,0xe7,0xd2,0x9c,0x0e,0x6a,0x31,0xf5,0xc5,0x3b,0x76,0x0f,0x3d,0x69, + 0x73,0x01,0x2e,0x73,0x9c,0xf7,0xa9,0x57,0x39,0xe8,0x7d,0xaa,0xb8,0x6c,0x60,0x93, + 0xd7,0xf4,0xa7,0xe7,0xa7,0xb5,0x30,0x2d,0x03,0xc7,0x4f,0x4a,0x90,0x7a,0xfa,0xd5, + 0x75,0x61,0x8e,0x7a,0x67,0xb5,0x4c,0x1c,0x6e,0xe4,0x67,0x35,0x71,0x7a,0x81,0x61, + 0x46,0x38,0xef,0x53,0x01,0xfa,0x54,0x0a,0xdd,0x8d,0x4a,0xac,0x0e,0x2b,0x50,0x1f, + 0xd3,0xad,0x45,0x80,0x0f,0x27,0x14,0xed,0xc3,0xb5,0x30,0xb0,0xc8,0xcd,0x00,0x31, + 0xb8,0x1c,0x55,0x67,0x03,0x27,0x15,0x3b,0x11,0x9f,0x5c,0xd5,0x77,0x24,0x8e,0x68, + 0x60,0x57,0x61,0x93,0xeb,0x55,0x9f,0x8e,0x33,0x56,0x1c,0xe7,0x8a,0xae,0xdd,0x0e, + 0x4d,0x64,0xd2,0xee,0x34,0x57,0x6e,0xb4,0xc6,0x5e,0x78,0xa9,0x89,0xe3,0xd2,0xa0, + 0x62,0x7b,0xff,0x00,0xfa,0xea,0x04,0x46,0x41,0xcf,0x1d,0x29,0x31,0x8e,0x7b,0xd3, + 0xa8,0xa0,0x69,0x8a,0x3d,0x3f,0xfa,0xd5,0x2a,0x12,0x41,0xe7,0xad,0x45,0x8c,0xf4, + 0xa9,0x97,0x8c,0x9a,0x7a,0x1b,0x24,0xba,0x16,0x17,0xd6,0xa4,0x07,0x27,0x26,0x98, + 0xa0,0xf0,0x3b,0xd4,0xa3,0x3d,0xc5,0x6b,0x17,0xa1,0x43,0x81,0x04,0x64,0x50,0x07, + 0x6c,0x66,0x93,0xa0,0xe7,0xf0,0xa5,0xce,0x07,0xd6,0xa8,0x1b,0x0f,0x9b,0x1e,0xd4, + 0xbb,0x8d,0x26,0x79,0xc8,0xa4,0xce,0x46,0x0f,0x18,0xe7,0xe9,0x49,0x88,0x71,0x39, + 0x06,0x8c,0xe7,0x8c,0xd3,0x33,0x8c,0xf3,0x48,0xcd,0x8e,0x01,0xe9,0xda,0xb0,0x62, + 0x7d,0xd0,0xec,0xfa,0xd4,0x24,0xe3,0x9e,0xb4,0xe2,0xc7,0xe8,0x2a,0x26,0x6e,0x2b, + 0x36,0x29,0x3d,0x35,0x06,0xc7,0x6e,0x4d,0x30,0x90,0x38,0xa5,0x39,0xfa,0xd4,0x7b, + 0x8d,0x43,0x5d,0x4c,0xc0,0xf5,0xa3,0x1c,0xf1,0x46,0x72,0x7d,0x33,0x4f,0x1c,0x8c, + 0x73,0xf5,0xa8,0x91,0x21,0x80,0x47,0x4e,0x95,0x22,0xa8,0x3d,0x7f,0x3a,0x45,0x53, + 0x90,0x6a,0x61,0xe8,0x6a,0x4d,0x16,0xd6,0x41,0x80,0x47,0x1d,0x69,0x72,0x40,0xcf, + 0x5f,0x7a,0x55,0xce,0x31,0x4a,0x69,0x5c,0xa4,0xad,0xa1,0xff,0xd1,0xfc,0x3d,0x8a, + 0x22,0x79,0x3c,0x0a,0xd1,0xb7,0x18,0xa8,0xb0,0xaa,0x31,0xe9,0x52,0x20,0xf9,0xb0, + 0x3a,0xf5,0xc5,0x78,0x72,0xd9,0x92,0x91,0xd2,0x58,0x37,0x38,0xc7,0x3d,0xff,0x00, + 0xc2,0xbb,0x8d,0x3a,0xcc,0xcc,0x01,0xc7,0xd6,0xb8,0x7d,0x34,0x00,0xc0,0x9e,0x79, + 0xcd,0x7a,0xae,0x8c,0xb9,0x45,0xe9,0x9a,0xe7,0xe7,0x7b,0x03,0x44,0xd0,0xe9,0xaa, + 0x07,0x6e,0xb5,0x69,0x2d,0xd5,0x64,0x02,0xb6,0x19,0x76,0x27,0xca,0x39,0x35,0x4c, + 0x00,0x8f,0xb9,0x87,0xe1,0x53,0x57,0xdf,0x12,0x67,0x45,0xa5,0xed,0x89,0x43,0x30, + 0xe8,0x05,0x5f,0xba,0xb9,0x40,0x33,0x91,0xc0,0xe9,0x5c,0xbf,0xdb,0x76,0x77,0xc5, + 0x50,0xbd,0xd4,0x88,0x52,0x33,0x5b,0x50,0x8a,0x8c,0x6c,0x8c,0x6a,0x2b,0xc8,0xab, + 0xad,0x5c,0x2c,0xaa,0xe3,0xa0,0xae,0x00,0x80,0x67,0xe9,0x5a,0xf7,0x57,0x65,0xf3, + 0xce,0x47,0x35,0x92,0xa4,0x19,0x89,0x3d,0xfa,0xfb,0xd5,0xc2,0x17,0x9d,0xd9,0x51, + 0x5c,0xa8,0xd8,0x8b,0x00,0x7b,0x53,0xe4,0x6e,0xa0,0x7e,0x35,0x1c,0x67,0x00,0x63, + 0xad,0x0e,0xc4,0x1c,0x8e,0xd5,0xea,0xd2,0x8a,0x48,0x8b,0x95,0x24,0x39,0xcf,0xa9, + 0xac,0xa9,0xc7,0x07,0xf1,0xed,0x5a,0xb2,0x60,0xa9,0xea,0x31,0x59,0x33,0xfc,0xc0, + 0xe0,0xf5,0xad,0x93,0x2a,0x09,0x98,0xf3,0x91,0xdb,0xe9,0x58,0xd3,0xf0,0x0d,0x6c, + 0x5c,0x64,0xf0,0xd9,0xff,0x00,0x1a,0xc5,0xb8,0xe7,0xa7,0x6a,0xa3,0x74,0x65,0x4a, + 0x49,0x3f,0xd2,0xb3,0xdf,0x39,0xe3,0xbd,0x5e,0x97,0x81,0xfc,0xeb,0x3e,0x4c,0x83, + 0xd6,0xa5,0xb4,0x32,0x33,0xc1,0xc5,0x31,0xb2,0x45,0x2f,0x39,0xf5,0xa8,0xcf,0x06, + 0x92,0x01,0x31,0xeb,0xcd,0x30,0xae,0x06,0x4f,0x1c,0x54,0x9e,0xf4,0x80,0x60,0x62, + 0xaa,0xe0,0x57,0x2b,0xf8,0xd6,0xc6,0x93,0xa5,0x4b,0x7f,0x32,0xae,0xd3,0x8c,0x8a, + 0xa9,0x0c,0x4d,0x34,0xaa,0xa0,0x71,0x9a,0xf7,0x1f,0x05,0x68,0xaa,0x36,0x48,0xe3, + 0x9c,0x0f,0xf3,0xd6,0xbc,0xfc,0xc7,0x18,0xa8,0x53,0xf3,0x3e,0xd7,0x82,0x38,0x62, + 0x59,0xce,0x3a,0x34,0x6d,0xee,0xf5,0x3a,0xaf,0x06,0x78,0x3e,0x28,0x84,0x6d,0x22, + 0x82,0x7e,0x95,0xef,0x96,0x1a,0x3d,0xa2,0x44,0x01,0x51,0xc0,0xc7,0x4a,0xe4,0xec, + 0x7c,0xbb,0x48,0x41,0x5c,0x70,0x2b,0x46,0x2d,0x4a,0x56,0x3c,0x37,0x1e,0xc6,0xbf, + 0x35,0xcc,0x73,0x3a,0x8d,0xbe,0x53,0xfb,0xf7,0x84,0x38,0x3f,0x07,0x82,0xc3,0x46, + 0x9c,0x60,0xb4,0x34,0x35,0x3f,0x0f,0xda,0xcc,0xa4,0x04,0x04,0x63,0x8a,0xf2,0x6f, + 0x10,0x78,0x0e,0x0b,0x80,0x71,0x1f,0xe4,0x31,0x5e,0xcb,0x6b,0x76,0x5c,0x72,0x72, + 0x29,0xd7,0x69,0x1c,0xb1,0x92,0x79,0xcd,0x79,0xb8,0x4c,0x6e,0x21,0x4b,0x9a,0xf6, + 0x3d,0xfc,0xdb,0x84,0xf2,0xec,0x5d,0x17,0x4a,0xad,0x34,0xef,0xe4,0x7c,0xcb,0x65, + 0xe0,0x18,0xa2,0x9f,0x0c,0xbc,0x7a,0x62,0xbd,0x4b,0x44,0xf0,0x45,0x99,0x0a,0x1d, + 0x01,0xae,0x8e,0x4b,0x55,0x56,0xf9,0x57,0x26,0xb5,0x6c,0x6e,0x5e,0x0c,0x65,0x47, + 0x07,0xd2,0xbb,0x31,0x39,0xcd,0x59,0xbd,0x59,0xe0,0x65,0x5e,0x1a,0x65,0x78,0x45, + 0x6a,0x74,0x52,0xf9,0x23,0x52,0xcb,0xc0,0x1a,0x6c,0x88,0xbb,0xa3,0x5c,0xf5,0xe8, + 0x2a,0xed,0xcf,0xc3,0x9d,0x32,0x58,0x0e,0x11,0x49,0xfa,0x54,0xd0,0xeb,0x92,0x40, + 0xb9,0xc7,0x35,0x62,0x3f,0x13,0x96,0xf9,0x5e,0xb8,0x5e,0x3d,0xc9,0x9e,0xff,0x00, + 0xfa,0xa7,0x83,0x49,0xae,0x45,0xf7,0x23,0xc4,0xfc,0x41,0xf0,0x8a,0xd2,0x57,0x6f, + 0x2e,0x15,0xe7,0xdb,0x15,0xcc,0x59,0x7c,0x1c,0x85,0x26,0x04,0xc7,0xd4,0xf4,0xc6, + 0x6b,0xe9,0x9f,0xed,0x58,0x27,0xe5,0x88,0xf7,0xa8,0x66,0xd5,0x2d,0x20,0x1b,0xf8, + 0x15,0xea,0x61,0x73,0x7a,0x8a,0x36,0xe7,0x76,0x3e,0x2b,0x33,0xf0,0xa3,0x29,0xc4, + 0x56,0xf6,0xd2,0xc3,0xc6,0xfe,0x87,0x9e,0x69,0x7f,0x05,0x6d,0x2e,0xa0,0xc9,0x85, + 0x49,0xfa,0x73,0x5c,0x67,0x8b,0xbe,0x03,0xc9,0x67,0x1b,0x4d,0x6d,0x11,0x1d,0x48, + 0xc5,0x7d,0x43,0xe1,0xaf,0x15,0xd8,0x99,0x55,0x33,0xd4,0xe0,0xe7,0xa5,0x7b,0x3a, + 0xdb,0xe9,0xda,0xd5,0xa6,0xdc,0x2b,0x06,0x15,0xb4,0x33,0x8a,0x8a,0x77,0x8c,0x9d, + 0xcf,0x3b,0x1f,0xe1,0x4e,0x55,0x5e,0x8b,0xa7,0x3a,0x0a,0xde,0x87,0xe3,0x1e,0xbb, + 0xe1,0xad,0x47,0x44,0x9d,0xa3,0x9d,0x0e,0xd0,0x48,0xce,0x3a,0x62,0xb9,0xe0,0x4f, + 0x41,0x5f,0xa5,0x3f,0x14,0x7e,0x17,0x5a,0xdc,0xc1,0x2c,0xb1,0x46,0x08,0x20,0x9e, + 0x05,0x7e,0x7f,0x78,0x9f,0xc3,0xb3,0xe8,0x57,0xd2,0x44,0xca,0x42,0xe7,0x8a,0xfb, + 0x7c,0xa7,0x37,0x8e,0x25,0x72,0x4b,0xe2,0x3f,0x93,0xbc,0x46,0xf0,0xda,0xbe,0x43, + 0x55,0xd6,0xa0,0x9b,0xa4,0xff,0x00,0x03,0x9b,0xa7,0xfc,0xc4,0x54,0x6b,0xd3,0x15, + 0x28,0x07,0x39,0xcd,0x7b,0xc7,0xe4,0xa1,0xf7,0x47,0xad,0x34,0x83,0x8e,0x6a,0x5c, + 0x70,0x0f,0xe7,0x41,0x53,0x9c,0x7e,0xb4,0x01,0x09,0x0c,0x07,0x4e,0x29,0xbc,0xd4, + 0xc5,0x79,0xa6,0x6d,0x39,0xf6,0xfe,0x74,0x98,0x0c,0x39,0x3e,0xd4,0xfc,0x90,0x30, + 0x3e,0xb4,0x85,0x4f,0x6a,0x00,0x1d,0x33,0xcf,0xa5,0x34,0x03,0xc3,0x90,0x33,0x52, + 0x87,0x23,0xf1,0xaa,0xf8,0xec,0x69,0x79,0x53,0x40,0x17,0x56,0x42,0xa7,0xf9,0xd4, + 0x82,0x5c,0x0a,0xcf,0xdf,0xcf,0x4a,0x51,0x26,0x3a,0x53,0xb8,0x1a,0x26,0x52,0x3a, + 0x53,0x0c,0xbe,0x95,0x4b,0xcc,0x34,0x17,0xf7,0xe7,0xd6,0xaf,0x9c,0x0b,0x46,0x4c, + 0x73,0x50,0xbb,0xe4,0x75,0xa8,0x0b,0xe4,0xf5,0xeb,0x4d,0x2d,0xf8,0xd2,0xe6,0x7d, + 0xc0,0x73,0x37,0x6c,0xf6,0xa8,0x4f,0xaf,0xe9,0x46,0xe3,0x4d,0x39,0x3c,0xd4,0xdc, + 0x06,0x37,0xde,0xa8,0xdb,0xa5,0x48,0x57,0x39,0xe7,0x35,0x13,0x67,0xf3,0xa3,0xd4, + 0x06,0x72,0x31,0x47,0x34,0x11,0x9e,0x05,0x1c,0xd2,0x2a,0x2d,0x75,0x0c,0x9e,0x95, + 0x32,0x03,0x9e,0x9c,0x54,0x3d,0x78,0xa9,0x80,0xec,0x28,0x35,0xf3,0x2c,0xa3,0x1f, + 0xca,0xa5,0x05,0xbd,0x33,0x9a,0x85,0x4f,0x4f,0x6a,0x97,0x90,0x0f,0x6a,0xd2,0xf7, + 0x5a,0xb1,0x8f,0xa4,0x39,0xa6,0xee,0xa4,0x2c,0x7a,0xd5,0xdc,0x3a,0x8a,0x77,0x73, + 0x8a,0x6e,0x78,0xc7,0xe9,0x41,0x3c,0xf3,0x4c,0x3d,0x2b,0x39,0x7a,0x80,0xbb,0xb1, + 0xd2,0x9a,0x4f,0xbd,0x21,0x6a,0x84,0xb9,0xc1,0xf6,0xac,0xa4,0x64,0xe5,0xa9,0x31, + 0x6a,0x66,0xe2,0x7b,0x53,0x32,0xdd,0x3f,0xcf,0xf3,0xa6,0xe4,0xe3,0xfa,0xd4,0x90, + 0x3f,0x24,0x63,0xfa,0xd2,0x1e,0x95,0x1f,0x6c,0x0a,0x52,0xdd,0xba,0x8a,0xc5,0xbd, + 0x75,0x1d,0xc7,0x82,0x69,0xeb,0x9c,0x63,0x14,0xc0,0x3d,0x05,0x4c,0xab,0xcf,0xad, + 0x3d,0x47,0xb6,0xc4,0x8b,0xd0,0x66,0xa6,0x55,0x34,0x8a,0xb8,0xeb,0xd6,0xa6,0x03, + 0xff,0x00,0xd5,0x50,0xca,0x8b,0xbb,0x1a,0x01,0xc8,0x3d,0x69,0x4a,0x62,0xa6,0x55, + 0x3d,0xa9,0xfb,0x4f,0x42,0x40,0xa5,0xca,0x3e,0x6d,0x4f,0xff,0xd2,0xfc,0x45,0x04, + 0x1f,0xad,0x58,0x89,0x79,0xf5,0xcd,0x51,0x57,0x22,0xae,0xc0,0xc4,0x9c,0x7e,0x95, + 0xe3,0x34,0x47,0x31,0xd2,0xe9,0xd8,0xf3,0x00,0x1d,0x07,0x5a,0xf5,0x5d,0x14,0x61, + 0x14,0xfe,0x15,0xe5,0x9a,0x68,0xf9,0xc5,0x7a,0x76,0x99,0x28,0x48,0xc5,0x70,0x57, + 0x7c,0xb2,0xb2,0x2a,0x3e,0xf1,0xd5,0x49,0x2a,0xaa,0x8e,0xf8,0xac,0xb9,0xee,0x77, + 0x1c,0xe7,0xa5,0x36,0x4b,0x8d,0xdc,0x0e,0xf5,0x91,0x2c,0xd8,0x27,0x9a,0xca,0x9d, + 0x5b,0xe8,0x37,0x1b,0x12,0xb5,0xc1,0x24,0x93,0x9e,0x2b,0x1e,0xfe,0xe4,0xaa,0xed, + 0xce,0x2a,0x67,0x97,0x3c,0xf7,0x15,0x89,0x7f,0x36,0xe6,0xc0,0xfc,0x6b,0xae,0xed, + 0x22,0x6d,0x72,0xab,0xca,0x59,0xb0,0x49,0xab,0x16,0xea,0x3a,0xd5,0x05,0x52,0x71, + 0xea,0x78,0xad,0x58,0x14,0x85,0x07,0xbf,0xf8,0x56,0xf4,0x13,0x66,0x35,0x37,0x2f, + 0x0e,0x80,0x74,0x26,0x86,0xe8,0x73,0x48,0x32,0x7a,0x0c,0x7a,0x73,0x48,0xc0,0xf7, + 0x39,0xaf,0x52,0x9c,0x19,0x09,0x37,0xb1,0x59,0xf2,0x06,0x05,0x66,0x4b,0x92,0x0e, + 0xea,0xd2,0x95,0x4a,0xf4,0xac,0xc9,0x41,0xc6,0x0d,0x75,0x46,0x9f,0x73,0x75,0xd8, + 0xc7,0x9c,0x64,0x7b,0x76,0xac,0x6b,0x80,0x00,0x3f,0x95,0x6d,0xce,0x08,0xc9,0x15, + 0x87,0x70,0xbc,0x1c,0xf3,0x53,0x25,0xae,0x86,0x88,0xc7,0x9b,0xf9,0xd5,0x07,0x00, + 0x74,0xab,0xf3,0xe7,0xa6,0x7a,0x76,0xac,0xe9,0x57,0x9c,0x67,0xf2,0xac,0xdb,0x01, + 0x94,0xc3,0xcf,0x1d,0x29,0x0f,0x5e,0x69,0x29,0x00,0x67,0x8a,0x71,0xc6,0x33,0x8a, + 0x6d,0x2a,0xf5,0xe7,0x8f,0x6a,0x7e,0x60,0x6f,0xe8,0x76,0xde,0x6d,0xc0,0x27,0x9c, + 0x1a,0xfa,0x0f,0x40,0x41,0x6f,0x02,0x9c,0x62,0xbc,0x6b,0xc3,0x96,0xff,0x00,0x32, + 0x93,0xed,0x5e,0xc3,0x69,0x21,0x48,0x80,0x15,0xf1,0x7c,0x41,0x89,0xbc,0xb9,0x4f, + 0xea,0xef,0x04,0xf2,0x55,0x4a,0x8f,0xd6,0x24,0xb5,0x67,0x5a,0x2f,0x8b,0x9d,0xa0, + 0xe6,0xb6,0x2d,0xc4,0xdb,0x43,0x63,0x8a,0xcf,0xf0,0xf6,0x9a,0xd7,0x72,0xa9,0x3c, + 0xe7,0xf4,0xaf,0x53,0x7d,0x0d,0x2d,0xed,0x77,0xb0,0xc7,0x15,0xf1,0x73,0xa1,0x29, + 0xea,0x7f,0x54,0xe1,0x71,0x5c,0xa9,0x24,0x71,0x0b,0x7a,0x60,0x38,0x63,0x83,0x56, + 0x06,0xa6,0x18,0x63,0x27,0x9a,0xe6,0xf5,0x89,0x56,0x39,0x4a,0xa9,0xe7,0x35,0x97, + 0x1d,0xcb,0x8c,0x10,0x79,0xeb,0x58,0xb4,0xf9,0x6c,0x8f,0x56,0x96,0x21,0x37,0x76, + 0x7a,0x14,0x12,0xa3,0x60,0xe7,0x93,0xd6,0xb4,0x90,0x28,0x03,0x15,0xc0,0xdb,0x5f, + 0x90,0x46,0x4d,0x74,0xb6,0x97,0x9b,0x80,0xe7,0xe9,0x9a,0xe2,0xad,0x4d,0xee,0x7a, + 0xd4,0xeb,0x46,0x4a,0xc6,0xe1,0xe4,0x53,0x63,0xb6,0x69,0x64,0xda,0x9d,0x7a,0x52, + 0xc6,0xde,0x60,0xe3,0xad,0x74,0xba,0x4d,0xa6,0x5c,0x31,0x19,0xf5,0x35,0x95,0x3a, + 0x72,0x93,0xe5,0x47,0x3d,0x7a,0x8a,0x0a,0xec,0x7d,0xb7,0x86,0xe7,0x96,0x3d,0xe3, + 0x27,0xe9,0x5c,0xb6,0xbd,0xa2,0xdd,0xda,0xa9,0x38,0x6a,0xf7,0xbb,0x0b,0x8b,0x4b, + 0x78,0x47,0x99,0x85,0xe3,0xbd,0x73,0xda,0xf9,0xb4,0xbe,0x89,0x82,0x81,0xd3,0xb7, + 0x7a,0xf4,0xa3,0x84,0xe5,0xeb,0xa9,0xe7,0x7d,0x72,0x52,0x7b,0x1f,0x37,0xd9,0xea, + 0x33,0x59,0x5c,0x03,0xc8,0x39,0xe6,0xbe,0x81,0xf0,0x47,0x8c,0x58,0x05,0x8d,0x9f, + 0x8f,0xad,0x78,0xae,0xb7,0xa3,0xba,0x4e,0xce,0x83,0xad,0x37,0x46,0xba,0x9a,0xc6, + 0x75,0x1c,0x8c,0x1a,0x7e,0xce,0xce,0xec,0xd2,0x52,0x4d,0x1f,0x64,0x6a,0x0f,0x0e, + 0xab,0x66,0xd9,0xc1,0xc8,0xfa,0xd7,0xc6,0x7f,0x16,0x7c,0x0b,0x1d,0xc2,0xca,0xf1, + 0xc7,0xcf,0x24,0x1c,0x7e,0x35,0xf4,0x6f,0x86,0x35,0xe5,0xb8,0x89,0x63,0x76,0xed, + 0xdc,0xd4,0x7e,0x2a,0xd3,0xe1,0xbe,0xb6,0x72,0x40,0x39,0x53,0x5d,0x98,0x3c,0x54, + 0xa8,0xd5,0x4d,0x33,0xe3,0xf8,0xa3,0x87,0xa8,0x66,0x78,0x3a,0x94,0x2a,0xc2,0xe9, + 0xa3,0xf2,0x9e,0xfe,0xca,0x4b,0x0b,0xa7,0xb7,0x90,0x60,0xa9,0xa8,0x06,0x3b,0x73, + 0x8a,0xf6,0xdf,0x89,0xbe,0x17,0xfb,0x2d,0xc3,0x5c,0x46,0x98,0x39,0xe6,0xbc,0x6e, + 0x3b,0x69,0xa4,0x38,0x45,0x27,0xe8,0x2b,0xf5,0x8c,0x06,0x2a,0x35,0xa9,0x29,0xb6, + 0x7f,0x9d,0x3c,0x5f,0xc3,0xd5,0x32,0x6c,0xca,0xae,0x0e,0x6b,0x44,0xf4,0xf4,0x21, + 0xc9,0xe8,0x07,0x5a,0x90,0x60,0x9e,0x7d,0x2a,0xd4,0x96,0x17,0x11,0x2e,0xe6,0x53, + 0x8e,0xd5,0x5c,0x2f,0x24,0x1e,0xd5,0xde,0x94,0x5e,0xa9,0x9f,0x30,0x34,0x80,0x47, + 0x3d,0xa9,0x36,0x8e,0x38,0xa9,0x82,0x91,0xcf,0x6a,0x36,0xf7,0x1f,0x85,0x57,0x2a, + 0x60,0x41,0xb7,0xa0,0x1f,0x9d,0x47,0x8c,0x71,0xd2,0xae,0x6d,0xda,0x29,0xa5,0x0f, + 0xf1,0x1c,0xd4,0xf2,0x30,0x2a,0x10,0x08,0xa6,0xe0,0x0a,0xb2,0x50,0x0c,0xf3,0xd4, + 0xf1,0x4c,0x2b,0xe9,0x49,0xc5,0xa0,0x2b,0x9c,0x75,0xa6,0x67,0x9c,0x67,0x02,0xa6, + 0x2b,0xcf,0xd6,0xa1,0x39,0x23,0x9e,0xd5,0x20,0x21,0x62,0x39,0xed,0x49,0xb8,0xf7, + 0xa3,0x14,0xcd,0xc3,0xad,0x00,0x38,0x90,0x3a,0xf1,0x4d,0x63,0x82,0x30,0x69,0xb9, + 0x1d,0x71,0xfa,0xd2,0x50,0x04,0x84,0x8a,0x07,0x53,0xde,0xa3,0xc6,0x7a,0x53,0xc1, + 0x02,0x81,0x83,0xe3,0xd3,0x9a,0x89,0xba,0x53,0xce,0x05,0x44,0x4f,0x39,0xa6,0x21, + 0xbf,0x85,0x26,0x41,0x19,0x34,0xa7,0x9e,0xb4,0xce,0x71,0xc7,0x4a,0x40,0x3e,0xa5, + 0x53,0x81,0xc5,0x40,0x0e,0x3a,0x9a,0x91,0x4e,0x29,0x75,0x35,0xbd,0x91,0x68,0x13, + 0xd3,0xb7,0xa5,0x48,0x0e,0x39,0xf4,0xa8,0x41,0xc8,0x19,0xef,0x52,0x29,0xe8,0x3a, + 0x55,0xc5,0xd8,0xa8,0xbb,0xa1,0xc7,0xaf,0x19,0xa4,0x2d,0x8a,0x69,0x38,0xe8,0x78, + 0xa4,0xcf,0x4a,0x4d,0x8a,0x4d,0x06,0xe3,0x4c,0x2d,0x9f,0xad,0x0d,0xd3,0xeb,0xe9, + 0x51,0x96,0xe3,0x34,0x88,0x72,0x7d,0x18,0x16,0xc5,0x43,0x91,0xd6,0x95,0x9a,0xa3, + 0xcd,0x45,0x89,0xbf,0x71,0xe0,0xe6,0x94,0x9c,0x71,0x51,0x52,0x9c,0x9a,0x4d,0x01, + 0x26,0x7a,0xd2,0x82,0x39,0xf5,0xa6,0xa9,0x27,0x93,0x4f,0x03,0x3c,0xf5,0xf6,0xac, + 0xf9,0x6c,0xf4,0x11,0x20,0x07,0x38,0x1f,0x85,0x59,0x51,0xc0,0x3d,0xea,0x14,0x19, + 0xe9,0xf8,0x55,0xb4,0x53,0x81,0x8a,0xbb,0x77,0x02,0x45,0x15,0x69,0x01,0x27,0x9f, + 0xe5,0x51,0xae,0x09,0xab,0x6b,0x91,0xd2,0xa3,0x93,0x52,0xf9,0xac,0xac,0xc4,0x54, + 0xc7,0x51,0xf8,0xd3,0xf6,0x54,0xc8,0x06,0x39,0xa0,0x8c,0xfe,0x35,0xa2,0x44,0xdd, + 0x1f,0xff,0xd3,0xfc,0x3c,0x1c,0x1a,0xb5,0x11,0xda,0x7a,0x8a,0xa3,0x91,0x9c,0x13, + 0xd7,0xf0,0xa9,0xa3,0x71,0x9c,0x0a,0xf2,0x0e,0x79,0x26,0x75,0xfa,0x74,0xbb,0x5c, + 0x03,0xd6,0xbb,0xfb,0x09,0xc6,0xdf,0x5c,0x57,0x98,0x59,0xb8,0xc8,0x3f,0x85,0x77, + 0x76,0x13,0xfc,0x81,0x4e,0x6b,0x83,0x12,0xb5,0x36,0xa3,0x23,0xa7,0x69,0x4f,0x5a, + 0xcc,0x9e,0x7f,0x98,0xe7,0xa5,0x06,0x53,0x8c,0x0a,0xcd,0x9a,0x5e,0xa7,0xb7,0xd6, + 0xb9,0xe9,0x53,0xbc,0x8d,0xaa,0x3d,0x07,0xc9,0x71,0x8f,0xe7,0x59,0x4e,0xfb,0xc9, + 0x63,0x8c,0x9a,0x86,0x69,0x42,0x93,0xcf,0x5e,0xd5,0x5e,0x37,0x32,0x1e,0x3b,0x1a, + 0xec,0xe5,0x6e,0x4a,0x26,0x37,0x34,0xe1,0x52,0xcd,0xd3,0x8a,0xd7,0x8e,0x31,0xb7, + 0x3d,0x3d,0x3d,0xaa,0x95,0xac,0x64,0x00,0x3a,0x7b,0xfa,0xd6,0xa0,0x52,0x71,0xe9, + 0xfe,0x15,0xec,0xe1,0xe8,0xe8,0x88,0xe5,0xbb,0x05,0x4e,0x07,0xb7,0x4a,0x56,0xc0, + 0xed,0x4f,0xc7,0x4f,0xe5,0x4d,0x6c,0x81,0xc7,0x43,0x5e,0x94,0x62,0x90,0xd2,0xb6, + 0xc5,0x29,0x09,0x03,0xfc,0xf4,0xac,0xb9,0xb2,0x4e,0x08,0xad,0x59,0xbf,0xc8,0xac, + 0xa9,0xce,0x46,0x28,0x93,0x43,0xb1,0x91,0x3e,0x6b,0x16,0x65,0xc9,0xc7,0x7a,0xdc, + 0x9b,0xa1,0xf7,0xe2,0xb1,0x2e,0x17,0x1f,0x85,0x61,0x27,0xa9,0x68,0xc6,0x98,0x70, + 0x49,0xac,0xd9,0x0d,0x69,0xcc,0x07,0x5a,0xcb,0x94,0x60,0xe0,0x1a,0xca,0x40,0x56, + 0xe3,0x27,0xb8,0xa0,0xe3,0xb5,0x21,0x07,0x38,0xe9,0x8a,0x50,0xa4,0xf4,0xfc,0xe8, + 0xb8,0x01,0xc7,0x6a,0x92,0x30,0x0b,0x0c,0x8e,0xf4,0xdd,0xa4,0x0c,0x9c,0x7d,0x2a, + 0x48,0xb8,0x65,0xfa,0xd2,0x6f,0x42,0xe9,0xfc,0x49,0x1e,0x97,0xe1,0xb8,0xc0,0x55, + 0x22,0xbd,0x2e,0xdd,0x73,0xb5,0x4f,0x35,0xe7,0x1e,0x1e,0x38,0xc7,0xa8,0xaf,0x47, + 0xb4,0x3c,0xae,0x2b,0xf3,0xcc,0xe6,0x57,0xac,0xee,0x7f,0x70,0xf8,0x5f,0x08,0xc7, + 0x2c,0x82,0x47,0xb3,0xf8,0x26,0x34,0xf3,0x14,0x1c,0x64,0xd7,0xb2,0x6a,0x76,0x0d, + 0x3e,0x9f,0x88,0x86,0xec,0xae,0x32,0x2b,0xe7,0xad,0x03,0x51,0xfb,0x1c,0xaa,0xd9, + 0x38,0xe3,0x8a,0xfa,0x37,0xc3,0xfa,0xcd,0xa5,0xdd,0xa7,0x96,0xec,0x36,0xb0,0xe7, + 0x9a,0xf1,0x67,0x59,0x28,0xf2,0x1f,0xb1,0x45,0xfb,0xaa,0x47,0xca,0x5a,0xf5,0xad, + 0xcd,0x9e,0xa1,0x22,0x4f,0x9c,0x12,0x71,0x9e,0x38,0xac,0x94,0x7c,0xd7,0xb5,0x7c, + 0x49,0xd2,0xe0,0x6d,0xd3,0x42,0x39,0xed,0x8a,0xf0,0xf8,0x11,0xe4,0x71,0x1a,0x75, + 0x3c,0x57,0x2d,0x36,0xdc,0x6c,0xf7,0x37,0x85,0x6b,0x33,0x4a,0x37,0x3d,0x73,0x83, + 0x5b,0x56,0x57,0x2d,0x90,0xb4,0xeb,0x4f,0x0d,0x5d,0xcc,0x9b,0xd4,0x13,0xe9,0x4e, + 0x1a,0x45,0xe5,0xa3,0xf2,0xa7,0x19,0xf4,0xa5,0x52,0x9e,0x8b,0x99,0x58,0xf5,0x68, + 0x62,0x8f,0x44,0xd0,0x94,0x4e,0xc9,0x9e,0x6b,0xd6,0xac,0x6c,0x63,0x58,0x83,0x0c, + 0x63,0x15,0xe4,0x9e,0x1b,0x56,0x4c,0x66,0xbd,0x46,0x0d,0x47,0xca,0x40,0xb9,0xe2, + 0xbd,0x0c,0x16,0x1a,0x11,0x8f,0x3b,0x5a,0x9c,0x18,0xdc,0x74,0xa7,0x2b,0x5f,0x41, + 0x9a,0x9c,0x12,0x2e,0x4a,0x93,0xed,0x5c,0xf2,0xcd,0x22,0x92,0xaf,0xd4,0x56,0xfc, + 0xda,0x94,0x72,0x9d,0x84,0xf5,0xe9,0x58,0xf3,0xc6,0x18,0xee,0x4e,0xb5,0xcb,0x89, + 0x8d,0xa7,0x74,0x76,0xe1,0x55,0xe0,0x8a,0xb3,0xda,0xc5,0x70,0xb9,0x7a,0xe0,0x75, + 0x4b,0x41,0x0c,0x85,0xd0,0x63,0x1d,0x2b,0xb5,0x9e,0x77,0x44,0x3e,0xdd,0x6b,0x8b, + 0xd4,0x66,0x32,0x31,0xcf,0x7e,0x94,0xe3,0x52,0x2d,0x59,0xa0,0x9c,0x65,0x16,0x59, + 0xd0,0xf5,0xa7,0xb6,0x94,0x21,0x6c,0x63,0x8e,0x6b,0xd6,0xad,0xf5,0x31,0x7b,0x6d, + 0xb4,0x9c,0xe4,0x57,0xce,0x2d,0x33,0x45,0x36,0xe5,0xe9,0xe9,0x5e,0x81,0xe1,0xfd, + 0x5c,0x8d,0xaa,0x49,0xe6,0xb8,0xea,0x7b,0xaf,0x43,0x54,0xd3,0x89,0x5f,0xc6,0x3e, + 0x13,0x3a,0xd0,0x68,0xd5,0x78,0x6e,0xbc,0x57,0x99,0x59,0xfc,0x31,0x96,0xdc,0xb2, + 0x88,0xbb,0xf5,0xc5,0x7d,0x5d,0xa7,0x24,0x17,0x48,0xbb,0x86,0x49,0xf5,0xf7,0xae, + 0x85,0xb4,0x8b,0x44,0x88,0x92,0xa3,0x38,0xeb,0x5d,0xb8,0x3c,0xf6,0xad,0x24,0xe0, + 0x9e,0x87,0xf1,0xef,0x8e,0xf9,0x44,0x25,0x89,0x86,0x22,0x31,0xd4,0xf8,0x57,0xc4, + 0x7e,0x0d,0xfe,0xcf,0x84,0x9d,0xbc,0x01,0xdc,0x57,0x85,0xea,0x36,0xe9,0x0d,0xd3, + 0x22,0xf4,0xaf,0xb2,0xfe,0x2a,0xde,0xd8,0x69,0xf1,0x3c,0x6a,0xc0,0xb6,0x08,0xc0, + 0xe6,0xbe,0x2c,0xbd,0x9b,0xce,0xba,0x91,0x8f,0x27,0x35,0xfa,0x37,0x0e,0x62,0xaa, + 0x62,0x29,0xb9,0xcb,0x63,0xf9,0x93,0x13,0x05,0x17,0x64,0x45,0xdb,0x9a,0x76,0x38, + 0xa8,0xd4,0x9c,0x71,0xcf,0xe9,0x4f,0xfa,0x57,0xd3,0x1c,0xe4,0x98,0x04,0x9a,0x69, + 0x5f,0xca,0x90,0x1e,0x72,0x69,0xd9,0xed,0xd7,0x34,0x01,0x19,0x5e,0xc6,0xa3,0x23, + 0x93,0x53,0x12,0x71,0x51,0x9c,0x7e,0x34,0x3d,0x80,0xae,0xca,0x0d,0x40,0xc3,0x8c, + 0x91,0xf4,0xab,0x2d,0xd4,0x9a,0xac,0xfc,0x8c,0xd6,0x73,0xb0,0x10,0x30,0xcf,0xe3, + 0x51,0x90,0x09,0xa9,0x8e,0x7b,0x54,0x44,0x67,0xf1,0xa8,0x60,0x47,0x83,0x49,0x8e, + 0xb4,0xed,0xbd,0x68,0xc7,0xa0,0xe2,0x90,0x06,0x38,0xf7,0xa3,0x07,0xa8,0xa4,0x00, + 0x9f,0x7c,0xfb,0xd2,0x91,0x80,0x29,0xa6,0x02,0x1e,0xb9,0x34,0xc6,0xe3,0xfa,0xd3, + 0x8f,0x1d,0x06,0x6a,0x33,0xcf,0x7f,0xc2,0x85,0x6e,0xa0,0x47,0xcf,0x51,0xf9,0x51, + 0x90,0x71,0x41,0x07,0xeb,0xef,0x4c,0xa1,0xf9,0x0c,0x50,0x70,0x0e,0x79,0xa7,0xab, + 0x1c,0x71,0x51,0xf0,0x07,0xb5,0x28,0xe3,0xbf,0x15,0x37,0x29,0x68,0xac,0x5c,0x52, + 0x7a,0x7f,0x9c,0xd3,0xea,0xb2,0xf5,0xff,0x00,0xeb,0xd4,0xbc,0x75,0xfd,0x28,0xb8, + 0xde,0x9a,0x22,0x4a,0x4c,0x8a,0x60,0xc8,0x1c,0x53,0x7a,0x8e,0x38,0xa7,0x71,0x37, + 0xd1,0x8e,0x27,0xa9,0xed,0x50,0x1c,0xe3,0xd8,0x53,0xdb,0x07,0x18,0xa8,0x9b,0x3f, + 0x81,0xa0,0x80,0x63,0xc5,0x44,0x4e,0x7e,0x5a,0x53,0xc9,0xe7,0x1c,0xfe,0xb5,0x1e, + 0x3a,0x67,0x8a,0x06,0x98,0xf5,0xc9,0x1c,0xd3,0xf8,0xc0,0xa6,0xa8,0x27,0xa7,0xe5, + 0x4e,0x1e,0xfc,0xe6,0xa5,0xd8,0x44,0x9d,0xb9,0xe2,0xb5,0x6c,0x74,0xe9,0xef,0x58, + 0x24,0x4b,0x9f,0xa5,0x66,0x22,0xe7,0xaf,0x5a,0xfa,0x67,0xe0,0xff,0x00,0x83,0x06, + 0xb3,0x24,0x65,0xd3,0x39,0x23,0xb7,0xad,0x78,0xd9,0xde,0x6d,0x4f,0x2f,0xc3,0x3a, + 0xf3,0x67,0x76,0x5d,0x82,0x96,0x2a,0xb2,0xa5,0x13,0xc8,0x1f,0xc1,0xba,0xca,0xc3, + 0xe7,0xc7,0x0b,0x30,0x03,0xd2,0xb9,0xf3,0x1b,0xc4,0xe5,0x64,0x05,0x58,0x71,0xf4, + 0xaf,0xd9,0x8f,0x0b,0xfc,0x0d,0xb1,0xbd,0xd3,0x14,0x49,0x02,0x93,0xb7,0x9e,0x2b, + 0xe5,0x5f,0x8d,0x9f,0xb3,0x8d,0xc6,0x9b,0x24,0xfa,0x8e,0x93,0x09,0x56,0x5c,0x92, + 0x00,0xc0,0x3e,0xd5,0xf9,0xbe,0x49,0xe2,0xd6,0x03,0x13,0x8b,0xfa,0xae,0x21,0xda, + 0xfb,0x33,0xe9,0xf3,0x0e,0x0e,0xaf,0x4a,0x8f,0xb5,0xa3,0xad,0xba,0x1f,0x09,0xae, + 0x73,0x56,0x57,0x8e,0x79,0x34,0xeb,0xab,0x2b,0x8b,0x0b,0x97,0xb6,0xb9,0x42,0x92, + 0x46,0x70,0xc0,0xf0,0x45,0x44,0xa7,0xb5,0x7e,0xc1,0x0a,0x91,0x9a,0x52,0x8b,0xba, + 0x67,0xc6,0x4a,0x2e,0x2e,0xd2,0xdc,0xb2,0xac,0x7a,0xd2,0x93,0x9c,0xf3,0x51,0xe7, + 0xb1,0x1c,0xd0,0x7f,0xfd,0x75,0xa2,0xb7,0x52,0x4f,0xff,0xd4,0xfc,0x2f,0x2f,0x93, + 0x53,0x44,0x73,0x8a,0xa7,0x8e,0xf8,0xe6,0xac,0x42,0x3e,0x60,0x3d,0x6b,0xcf,0x9c, + 0x15,0xae,0x63,0x28,0xdc,0xea,0x34,0xe1,0x9c,0x73,0x5d,0xb5,0x9a,0x9c,0x03,0x5c, + 0xa6,0x93,0x11,0x2a,0x0d,0x76,0xd6,0xd1,0xed,0x51,0xf9,0x9a,0xf2,0xf1,0x05,0xc5, + 0x13,0x33,0x1c,0x66,0xb2,0xae,0x66,0x03,0xa5,0x68,0x5c,0x7c,0xa9,0x93,0x5c,0xed, + 0xd4,0xb8,0x24,0xe3,0xeb,0xcd,0x69,0x85,0xa6,0xac,0xd9,0x4d,0x14,0xe6,0x95,0x8b, + 0x6d,0x07,0x15,0x7a,0xd1,0x39,0x18,0x1f,0x5a,0xca,0x8f,0xe7,0x93,0xd4,0x7e,0x75, + 0xd1,0x59,0x2e,0x3a,0xfe,0x15,0xd5,0x4e,0x0b,0x98,0x96,0x6e,0x5b,0x81,0xb4,0x70, + 0x07,0xf9,0xef,0x56,0x41,0xe7,0x9e,0x7f,0x4a,0xac,0xa5,0x57,0x1d,0xf1,0xf9,0x52, + 0x6f,0xe7,0xae,0x6b,0xd8,0xa5,0x68,0xad,0x58,0x16,0xcb,0x0c,0xf5,0xcf,0xf5,0xa8, + 0x4b,0x92,0x7a,0xf4,0xa4,0x39,0x61,0xcf,0x02,0x98,0x54,0x8c,0xe3,0xae,0x28,0x75, + 0x93,0x76,0x44,0x39,0x2d,0x8a,0xf2,0x37,0x35,0x9f,0x2e,0x39,0xab,0xd2,0x06,0x39, + 0x3d,0x6a,0x94,0xaa,0xd8,0xc7,0x73,0x52,0x52,0x32,0xa7,0x3d,0x47,0xf9,0x35,0x91, + 0x30,0x38,0x27,0x06,0xba,0x65,0xb4,0x2f,0xce,0x33,0x4a,0x74,0xb6,0x93,0x9d,0xbc, + 0x54,0xca,0x69,0x6e,0x3e,0x74,0xba,0x9e,0x7f,0x70,0x87,0xb0,0xac,0xf6,0xb6,0x99, + 0xcf,0x03,0x8e,0x95,0xea,0x1f,0xf0,0x8f,0xb3,0x9c,0x04,0x27,0xd2,0xac,0xc7,0xe1, + 0x9c,0x7c,0xce,0xb8,0xae,0x5a,0xb8,0xb8,0xc7,0x41,0xa9,0x1e,0x53,0x16,0x9a,0xef, + 0x9d,0xc3,0xeb,0x56,0x5a,0xc7,0x62,0xe0,0x76,0xaf,0x4c,0x9b,0x49,0x8e,0x20,0x46, + 0x30,0x3d,0xeb,0x9c,0xbd,0x80,0x46,0x08,0x1c,0x11,0x5c,0xbf,0x59,0x72,0x7b,0x94, + 0xe2,0xec,0x71,0x32,0x44,0x10,0x8e,0x9f,0x95,0x55,0x43,0x89,0x00,0x26,0xb4,0x6e, + 0xce,0xd3,0xd4,0x56,0x4a,0xb9,0x32,0x03,0xd8,0x1a,0xec,0xa7,0x77,0x16,0xc7,0x4b, + 0xe2,0x47,0xa6,0xf8,0x79,0xb0,0xa3,0xf3,0xaf,0x4f,0xb4,0xc1,0x0a,0x7b,0x75,0xcd, + 0x79,0x2f,0x87,0xe6,0x39,0x51,0xdf,0x3f,0xa5,0x7a,0xe6,0x9c,0x37,0x05,0x35,0xf0, + 0x79,0xba,0xb5,0x56,0xcf,0xed,0xcf,0x0b,0x6b,0xaa,0x99,0x7c,0x20,0x8e,0x92,0xdf, + 0x72,0xa8,0xc7,0x6a,0xec,0xb4,0x5d,0x66,0x7b,0x63,0xb7,0x77,0x1e,0xdf,0xe3,0x5c, + 0xac,0x0b,0xc0,0xad,0x6b,0x78,0x81,0x61,0xb6,0xbe,0x71,0xd4,0x5c,0xc7,0xee,0x54, + 0xf0,0xcd,0xc3,0x73,0xa2,0xd7,0x75,0x27,0xbd,0xb6,0x3b,0x8e,0x78,0xc5,0x71,0xde, + 0x1e,0xd3,0x44,0xb7,0xff,0x00,0x30,0xfb,0xcd,0x5d,0x6c,0x56,0x0f,0x70,0xbb,0x71, + 0x91,0xe9,0x5d,0x1e,0x8f,0xa2,0x08,0x24,0x0e,0x57,0x15,0xdd,0x42,0x2a,0x72,0x4e, + 0xc7,0x35,0x5a,0x52,0x8b,0xb2,0x67,0xa9,0xe8,0x1a,0x1d,0xa7,0xd8,0xd4,0xb8,0x00, + 0xe3,0xa5,0x17,0xbe,0x14,0xb6,0xb9,0x72,0xe8,0xa3,0x9e,0x9c,0x55,0x28,0x75,0x0f, + 0xb3,0x2a,0xa0,0x38,0x00,0x76,0xe2,0xb5,0xed,0x75,0xf4,0x38,0x0e,0x46,0x07,0x39, + 0xaf,0x5f,0x11,0x0a,0x75,0x20,0x95,0x8c,0xe9,0x39,0xc2,0x57,0x6c,0xe7,0x1b,0xc2, + 0xef,0x6a,0x77,0x20,0xc6,0x0f,0xa5,0x66,0xde,0x47,0x73,0x10,0x61,0x8c,0xe0,0x7f, + 0x2a,0xf5,0x51,0xaa,0x5a,0xcc,0x9b,0x49,0x04,0x9f,0x7a,0xc4,0xbf,0xb6,0xb5,0xb9, + 0x53,0x8c,0x03,0x5e,0x67,0x2c,0xe9,0xad,0x19,0xd5,0x28,0xa9,0xea,0x78,0xe4,0x97, + 0xef,0x1c,0x98,0x27,0x15,0xbb,0x65,0x78,0x26,0x50,0xbd,0x4d,0x45,0xae,0xe8,0xb8, + 0xcb,0xa0,0xce,0x3a,0x57,0x27,0x6b,0x3c,0xd6,0x92,0xec,0x63,0xc0,0x35,0xc7,0x2b, + 0xb7,0xb1,0xd7,0x87,0xa9,0xc9,0xa1,0xd9,0x5e,0x40,0x1c,0x16,0x1e,0xff,0x00,0x85, + 0x79,0xfe,0xa4,0xa6,0x36,0x21,0xba,0x7a,0xd7,0x77,0x15,0xc2,0xcd,0x16,0xec,0xe6, + 0xb9,0x2d,0x69,0x07,0x20,0x77,0xe6,0xb3,0xf6,0x76,0x67,0x55,0x6a,0x89,0xa3,0x84, + 0xba,0x27,0x39,0xe3,0x35,0x73,0x4c,0xbc,0x31,0xc8,0xbc,0xd6,0x65,0xdb,0x61,0x8a, + 0xf3,0x55,0xa0,0x90,0xa3,0xf5,0x35,0x35,0x23,0x7d,0x4e,0x78,0x55,0xb1,0xef,0xba, + 0x16,0xb1,0xb1,0x17,0x2d,0xd3,0xfa,0x56,0xa6,0xbd,0xe3,0x34,0xb3,0xb1,0x73,0xbf, + 0x07,0x07,0xa5,0x79,0x5e,0x97,0x78,0x44,0x63,0x9f,0xc2,0xb0,0x7c,0x57,0x74,0x5a, + 0xd5,0xb7,0x37,0x6f,0x5a,0xe5,0xa5,0x81,0x55,0x2a,0xa3,0xf1,0xaf,0x17,0xb2,0x88, + 0xe2,0x72,0xe9,0xd4,0x4b,0x54,0x79,0x1f,0x8e,0x7c,0x47,0x26,0xa1,0x2c,0x92,0xbb, + 0xe7,0x24,0x90,0x0f,0x6a,0xf1,0x96,0x93,0x73,0x17,0x27,0xad,0x6e,0xf8,0x82,0xeb, + 0x32,0x32,0x13,0xd4,0xd7,0x2a,0x1b,0xb1,0xfa,0xe6,0xbf,0x62,0xca,0x30,0xea,0x8d, + 0x05,0x14,0x7f,0x07,0xd5,0x6f,0x99,0xdc,0xbe,0xaf,0xc5,0x48,0x1f,0xa0,0xcf,0x4a, + 0xa0,0x1b,0xf1,0xfc,0x69,0xe1,0xbb,0xd7,0xab,0x19,0x77,0x33,0x2f,0xee,0xe3,0xaf, + 0x3e,0xf4,0xec,0x8e,0xbe,0x95,0x48,0x39,0x1c,0xd4,0x8a,0xc4,0xf4,0xe4,0x9a,0x7c, + 0xc8,0x2c,0x4e,0x4e,0x46,0x33,0x9a,0x6b,0x11,0xdc,0xd6,0xe6,0x99,0xe1,0xfd,0x43, + 0x54,0x20,0x40,0x84,0xe4,0xf1,0x80,0x79,0xab,0xfa,0x9f,0x81,0xfc,0x43,0xa7,0x01, + 0x23,0xda,0xc8,0xc8,0x7b,0x85,0x35,0x4f,0x6e,0x6e,0x87,0x44,0x70,0x95,0x9c,0x79, + 0x94,0x1d,0x8e,0x45,0x88,0xc7,0x18,0xaa,0xc7,0xa1,0xab,0xb7,0x16,0x77,0x76,0xff, + 0x00,0x2c,0xd1,0x3a,0x1e,0xe0,0x8c,0x56,0x7b,0x0c,0x1c,0x54,0x39,0xa6,0xb4,0x66, + 0x32,0x84,0xa3,0xf1,0x22,0x32,0x7b,0x7e,0x94,0xc3,0x8e,0xc3,0x14,0xe2,0x46,0x29, + 0xb8,0x3d,0xbb,0xd6,0x6d,0x92,0x07,0xda,0x93,0xa8,0xc8,0x3d,0x6a,0xd4,0x56,0x57, + 0x37,0x04,0x08,0x91,0xb9,0xe9,0x5d,0x2d,0x87,0x84,0x75,0x0b,0xb2,0x32,0x84,0x67, + 0xb6,0x0d,0x2b,0xa3,0xb2,0x86,0x03,0x11,0x59,0xfe,0xee,0x0d,0x9c,0x76,0x31,0x4b, + 0xce,0x31,0xde,0xbd,0x70,0x7c,0x37,0xd4,0x24,0x80,0xc8,0xb1,0x37,0x4e,0xe2,0xb8, + 0x0d,0x57,0xc3,0xda,0x8e,0x9b,0x31,0x8e,0x68,0x9b,0x68,0x3c,0x11,0xe9,0x57,0x28, + 0x4a,0x3b,0xa3,0x7c,0x4e,0x4f,0x8b,0xa1,0x1e,0x6a,0x94,0xdd,0x8c,0x12,0x72,0x3a, + 0xd4,0x0c,0x30,0x71,0xda,0xb7,0xac,0xb4,0x4d,0x43,0x50,0x7d,0x96,0xd0,0xb3,0x12, + 0x71,0xd2,0xa6,0xbf,0xf0,0xa6,0xb7,0xa7,0x27,0x9b,0x75,0x6b,0x22,0xae,0x3a,0x90, + 0x71,0x4a,0xcc,0xe1,0x54,0x2a,0x35,0x7e,0x56,0x73,0x18,0xe7,0x8a,0x8c,0xf3,0xd6, + 0xa7,0x74,0x2b,0xc3,0x0c,0x1e,0xe2,0xa3,0xdb,0xfa,0xd0,0x67,0x66,0x33,0xeb,0xde, + 0x94,0x1c,0x1a,0x5d,0xa4,0xfb,0x50,0x17,0x9e,0x6a,0x19,0x71,0xee,0x4a,0x32,0x39, + 0xa7,0x8f,0x4c,0xd3,0x10,0x54,0x80,0x73,0xc5,0x48,0x34,0xf6,0x48,0x39,0xa6,0x67, + 0x23,0x3f,0x95,0x3b,0x69,0x03,0xa6,0x3e,0xb4,0xc2,0x39,0xc0,0xaa,0xb9,0x2e,0x2d, + 0x0d,0x35,0x19,0xe6,0xa4,0x23,0x3d,0x2a,0x2e,0x7b,0x51,0xa0,0x72,0xb1,0x08,0x1d, + 0x4f,0x6a,0x41,0xf3,0x1f,0xe9,0x4b,0xdb,0x1d,0x69,0x51,0x77,0x10,0x07,0x53,0xe9, + 0x43,0x7e,0x61,0xb6,0xe3,0xe2,0x89,0xa4,0x3b,0x10,0x12,0x7e,0x95,0xad,0x1e,0x8d, + 0xa9,0x48,0xbb,0x92,0xdd,0xca,0xf5,0xe1,0x6b,0xd8,0xbe,0x15,0xfc,0x38,0xba,0xf1, + 0x1d,0xd4,0x6c,0xd1,0x92,0xac,0x41,0x3c,0x57,0xe9,0xaf,0x80,0xbf,0x66,0x8b,0x3b, + 0xad,0x31,0x0c,0xb6,0xc0,0xb3,0x0e,0xeb,0x5f,0x9a,0xf1,0x4f,0x88,0xb8,0x4c,0xa2, + 0xa7,0xb2,0x6b,0x99,0x9f,0x4d,0x95,0x70,0xcd,0x6c,0x64,0x7d,0xa3,0x76,0x47,0xe3, + 0x96,0x9f,0xa3,0xdd,0xcb,0x77,0x1c,0x12,0x44,0xca,0x59,0x87,0x04,0x1a,0xfd,0x24, + 0xfd,0x9d,0xbc,0x1c,0xf1,0xf9,0x0e,0xf1,0xf5,0xc1,0x39,0x15,0xed,0x3a,0xff,0x00, + 0xec,0xb3,0x63,0x65,0x2f,0xda,0xd2,0xdc,0x06,0xdd,0x91,0x85,0xaf,0x67,0xf8,0x4f, + 0xf0,0xf0,0x68,0xe5,0x13,0xcb,0xfb,0x84,0x0e,0x98,0xe9,0x5f,0x90,0x71,0xdf,0x89, + 0xb8,0x7c,0xcb,0x01,0xec,0xa8,0x2b,0x1f,0x67,0xc3,0xdc,0x2f,0x2c,0x25,0x77,0x52, + 0x6e,0xe7,0xd2,0x7e,0x0d,0xd0,0xe0,0x8b,0x4e,0x42,0x50,0x03,0xb6,0xb1,0xfc,0x6d, + 0xe0,0x3b,0x4d,0x62,0xce,0x54,0x31,0x06,0x2c,0x0f,0x6a,0xf4,0xcd,0x36,0x01,0x6b, + 0x02,0x20,0xed,0x5b,0x0f,0x12,0x4e,0x98,0x61,0xc1,0xaf,0xe6,0x9f,0xaf,0xd4,0x8d, + 0x6f,0x69,0x07,0xa9,0xfa,0x24,0xe1,0x1b,0x72,0xc9,0x68,0x7e,0x18,0xfe,0xd1,0x5f, + 0xb3,0xfc,0xf6,0x53,0x4d,0xac,0x69,0x30,0x6d,0x74,0xc9,0x60,0x07,0xde,0x1f,0x85, + 0x7c,0x0d,0x3d,0xbc,0xd6,0xb3,0x3c,0x33,0xab,0x23,0xa1,0x20,0xa9,0x1d,0xeb,0xfa, + 0x60,0xf8,0x8b,0xe0,0x3b,0x3d,0x6e,0xc6,0x60,0x63,0x0d,0x90,0x7b,0x66,0xbf,0x1a, + 0xbe,0x3f,0x7c,0x0b,0xd4,0x34,0xdd,0x5d,0xf5,0x0d,0x1e,0xdd,0xb6,0xbb,0x7c,0xe0, + 0x0e,0xd9,0xeb,0x5f,0xd5,0xde,0x13,0x78,0x9a,0xaa,0xc2,0x39,0x6e,0x61,0x3f,0x46, + 0xff,0x00,0x23,0xf2,0xfe,0x2c,0xe1,0x8d,0x5e,0x2b,0x0c,0xbd,0x51,0xf1,0x80,0x6c, + 0xd3,0x89,0xcd,0x7b,0x36,0x93,0xf0,0x53,0xc4,0xda,0x86,0x09,0x89,0x95,0x4f,0xb5, + 0x7a,0xce,0x83,0xfb,0x33,0xea,0x77,0x0c,0xa6,0xe1,0x59,0xb3,0xd4,0x60,0xd7,0xec, + 0x98,0xee,0x39,0xc9,0xf0,0x97,0xf6,0x95,0xd3,0xb7,0x63,0xe2,0xe8,0x70,0xf6,0x3a, + 0xb3,0xf7,0x69,0x9f,0xff,0xd5,0xfc,0x2c,0xc7,0x61,0x56,0xed,0x94,0xb3,0x80,0x05, + 0x35,0x62,0x24,0xe7,0x06,0xb6,0x74,0xdb,0x52,0xf2,0x83,0x8e,0xfc,0x57,0x15,0x59, + 0xa5,0x1d,0x48,0xd0,0xea,0xf4,0x98,0x0e,0x06,0x47,0x5a,0xed,0x22,0x87,0x0b,0xcf, + 0x15,0x9b,0xa6,0xd9,0x10,0xa3,0x23,0x1f,0x4a,0xe8,0x76,0x00,0x0d,0x78,0x35,0x6a, + 0x5d,0xe8,0x6b,0x18,0xf5,0x39,0xeb,0xe3,0xc1,0xef,0x5c,0x95,0xce,0x49,0x24,0xf7, + 0xae,0xce,0xf6,0x2c,0xee,0xc7,0x27,0xa5,0x73,0xf2,0xda,0xfa,0x83,0xf4,0xae,0x8a, + 0x35,0xa3,0x18,0x58,0x52,0xdd,0x99,0x36,0xeb,0xb7,0xaf,0xe5,0x5d,0x05,0xb6,0x7a, + 0x8e,0xff,0x00,0xd2,0xa8,0xad,0xa9,0x1d,0x06,0x6b,0x5a,0xd2,0x12,0x47,0x03,0xa5, + 0x74,0x53,0xc4,0x25,0x7b,0x98,0xc9,0xd8,0x98,0x96,0x62,0x17,0xfc,0x9a,0x96,0x35, + 0x07,0x92,0x3f,0xfa,0xd5,0x61,0x6d,0xf9,0x04,0xe7,0x03,0x8a,0x93,0x62,0xaf,0x34, + 0xe7,0x98,0x59,0x5a,0xe6,0x4e,0x4c,0x55,0xf4,0xa9,0xd6,0x2d,0xdd,0xaa,0x38,0x8e, + 0xe9,0x30,0x06,0x05,0x6c,0x5b,0xc6,0x87,0x93,0xfc,0xaa,0x29,0xe2,0xdb,0x33,0xb9, + 0x8c,0xd6,0xd9,0x3f,0x2d,0x46,0x2c,0x58,0xfd,0x6b,0xa9,0x10,0x27,0x07,0xbf,0xb5, + 0x39,0x62,0x40,0x70,0x07,0x23,0xf1,0xfd,0x6b,0x79,0xe3,0x39,0x56,0xe3,0x52,0x6f, + 0x46,0x62,0x5a,0xe9,0x8e,0xe7,0x95,0xeb,0xfc,0xab,0xa8,0xb3,0xd0,0xd4,0xe0,0xba, + 0xe6,0x96,0x17,0x8d,0x08,0x6e,0xd8,0xad,0x64,0xd4,0xa2,0x8d,0x3b,0x57,0x15,0x4c, + 0x64,0xa4,0xcd,0x21,0x1b,0xea,0x03,0x4d,0x86,0x2e,0x40,0x18,0xac,0xab,0xb8,0xa3, + 0x45,0xcf,0x19,0xf7,0xa2,0xf7,0x5e,0x8d,0x32,0x01,0xe9,0xd6,0xb8,0x2d,0x5f,0xc4, + 0x83,0x04,0x6e,0xfc,0x2b,0x04,0xe7,0x27,0x74,0x75,0xc6,0x36,0xd5,0x93,0x6a,0xd7, + 0x31,0x20,0x6c,0xe2,0xbc,0xcb,0x55,0xd4,0x13,0x07,0xbd,0x43,0xa9,0xeb,0xa6,0x42, + 0x42,0x9e,0x6b,0x92,0x96,0x67,0x9d,0xb7,0x13,0x9c,0xd7,0xa5,0x86,0xc3,0x3d,0xe6, + 0x39,0x4a,0xfa,0x0d,0x9e,0x76,0x95,0xb9,0xe3,0x15,0x5b,0xb8,0xfa,0xd3,0x8a,0xfa, + 0x73,0x51,0xe4,0x03,0x5e,0x9c,0x52,0xb1,0x2b,0x73,0xb8,0xd0,0xa4,0xc3,0xa9,0xe9, + 0x5e,0xd9,0xa4,0x30,0x31,0xa9,0x03,0xf1,0xeb,0x5e,0x01,0xa4,0x4a,0x04,0x8a,0x4f, + 0xaf,0x4a,0xf6,0xfd,0x0a,0x60,0x55,0x73,0xe8,0x2b,0xe2,0x38,0x82,0x95,0xa5,0x74, + 0x7f,0x58,0xf8,0x37,0x98,0xa7,0x4b,0xd9,0xb6,0x7a,0x14,0x07,0x81,0xce,0x73,0xd6, + 0xba,0x5d,0x36,0x03,0x2b,0x01,0xef,0x5c,0xbd,0xa3,0x6e,0x00,0xd7,0x75,0xa3,0x6c, + 0x46,0x56,0x35,0xf1,0xf1,0x85,0xe5,0x66,0x7f,0x53,0xd0,0xa9,0xee,0x23,0xb8,0xd3, + 0xac,0x52,0x38,0xc3,0x11,0x93,0x8a,0xb9,0x2c,0xc2,0x1e,0x17,0xa0,0xa8,0x12,0xed, + 0x3c,0xac,0x29,0xe3,0xd2,0xb2,0x2e,0x6e,0x79,0xe3,0xb5,0x7a,0x1f,0x5a,0x8d,0x35, + 0xca,0x91,0xab,0xc2,0xf3,0x7b,0xe5,0x89,0xee,0xd8,0x83,0xcd,0x52,0x1a,0x83,0x27, + 0x39,0xe9,0x55,0xda,0x5c,0xa9,0xc1,0xe4,0xd6,0x64,0xbd,0x73,0xf8,0xd7,0x75,0x3a, + 0xe9,0xc4,0xf3,0x71,0x11,0xb3,0x68,0xe9,0x93,0x5a,0x91,0x7a,0x31,0xe9,0x53,0x2f, + 0x89,0x24,0x53,0xf3,0x36,0x6b,0x89,0x69,0x08,0x3e,0xd5,0x56,0x49,0x8e,0x79,0xce, + 0x6b,0x1a,0xd5,0x17,0x73,0x28,0x4a,0xc7,0xa5,0xbe,0xb1,0x15,0xcc,0x7b,0x58,0x8f, + 0xc6,0xb9,0x2d,0x4a,0x20,0xcd,0xbe,0x21,0x58,0x71,0x5c,0x95,0x7e,0xb5,0xd7,0x69, + 0xb1,0xad,0xd0,0x0a,0x7b,0xd6,0x1c,0xdc,0xde,0xeb,0x34,0xe7,0x4c,0xc9,0xb3,0xb8, + 0x96,0x35,0xda,0xd9,0xe3,0x81,0x9a,0xa3,0xa8,0xce,0x1b,0x83,0xd3,0x15,0xe8,0x32, + 0x68,0x4a,0xcb,0xbd,0x07,0x18,0xae,0x0f,0x5c,0xb1,0x92,0x0c,0xe3,0xad,0x65,0x52, + 0x0e,0x3b,0xa2,0xdc,0xdd,0xac,0x79,0xed,0xf3,0x61,0x8b,0x0a,0xcb,0x49,0x70,0xdc, + 0x55,0xcb,0xd6,0x3b,0x8e,0x4d,0x63,0x87,0xc3,0x70,0x6a,0x1c,0x74,0x30,0x55,0x55, + 0xce,0xd7,0x4e,0xba,0xda,0x98,0xac,0x4f,0x13,0x5c,0x93,0x68,0xc0,0xf4,0xc1,0xa6, + 0x59,0x4d,0xd7,0x9f,0xa5,0x51,0xf1,0x03,0x97,0xb2,0x71,0xdf,0x15,0xb6,0x0a,0x3f, + 0xbd,0x57,0x47,0xcb,0x71,0xa5,0x35,0x57,0x2d,0xa9,0x1f,0x26,0x7c,0xdd,0xad,0x4a, + 0x5a,0xf1,0xc7,0xfb,0x44,0xd6,0x50,0x7c,0x7a,0x0a,0xbb,0xac,0x71,0x78,0xe7,0xd6, + 0xb3,0x33,0x82,0x41,0x35,0xfa,0xae,0x1d,0xaf,0x67,0x1b,0x1f,0xe7,0x76,0x61,0x4b, + 0x93,0x13,0x52,0x2b,0xbb,0x2c,0x79,0x9e,0xf4,0xf0,0xfc,0x75,0xaa,0x99,0xcf,0x14, + 0xfd,0xe0,0x1e,0x6b,0x6e,0x63,0x8e,0xc6,0x9d,0xaa,0x49,0x71,0x28,0x8e,0x3e,0x4b, + 0x10,0x2b,0xdf,0xbc,0x05,0xf0,0x9a,0xef,0x5e,0xdb,0x33,0x46,0x58,0x70,0x7a,0x57, + 0x92,0x78,0x32,0xdd,0x6e,0x35,0x18,0xf7,0x60,0xfc,0xc2,0xbf,0x4f,0xfe,0x15,0x59, + 0xd8,0x58,0xe9,0x31,0x3b,0x01,0x9d,0xbd,0x31,0xea,0x2b,0xdb,0xc9,0x32,0xd8,0x63, + 0x2a,0xb5,0x51,0xe8,0x8f,0xb7,0xe1,0x7c,0x86,0x9e,0x2b,0xf7,0xb5,0x36,0x39,0x1f, + 0x07,0x7c,0x2c,0xb2,0xd1,0x1a,0x23,0x76,0x80,0x11,0x83,0xc8,0x15,0xf5,0x36,0x97, + 0xf0,0xef,0xc3,0x1a,0xf5,0xbc,0x71,0xcf,0x0a,0x36,0x06,0x3a,0x0a,0xf3,0x0d,0x77, + 0x51,0x67,0x93,0x10,0x0d,0xa0,0x7a,0x57,0x49,0xe1,0x6f,0x11,0xcf,0x6e,0x55,0x77, + 0xe0,0x66,0xbe,0xff,0x00,0x0f,0x80,0xc3,0xc1,0x7b,0x05,0x15,0x63,0xf5,0x5a,0x39, + 0x75,0x1a,0x34,0x6d,0x18,0x9d,0x36,0xb7,0xfb,0x2b,0xf8,0x4b,0x5c,0xb7,0x63,0x14, + 0x08,0x09,0x1d,0x94,0x77,0xaf,0x85,0xfe,0x30,0xfe,0xc9,0x3a,0xaf,0x87,0x04,0xb7, + 0xda,0x1a,0x33,0x22,0xe5,0xb6,0x81,0x91,0x5f,0xaa,0x9e,0x1a,0xf1,0x9e,0xf4,0x54, + 0x66,0x0c,0x0e,0x32,0x2b,0xaf,0xbf,0xb7,0xd3,0x35,0xeb,0x56,0x8a,0x65,0x57,0x0e, + 0x39,0x04,0x66,0xb8,0x33,0x2e,0x14,0xa1,0x51,0x73,0x51,0x8d,0x9f,0x91,0xe4,0x62, + 0xf2,0x5c,0x26,0x26,0x2e,0x15,0x60,0x7f,0x33,0x77,0xba,0x3d,0xfd,0x8d,0xeb,0xd8, + 0xdd,0x44,0xd1,0xca,0x8d,0xb4,0xa9,0x18,0xf6,0xae,0xbf,0xc3,0xfe,0x09,0xba,0xd4, + 0x5d,0x77,0x21,0x39,0xf6,0xaf,0xd3,0xff,0x00,0x8c,0x9f,0xb3,0x5d,0x8d,0xfd,0xf3, + 0xeb,0x3a,0x5c,0x01,0x5c,0x12,0xc7,0x68,0xaf,0x37,0xf0,0x9f,0xc3,0xc8,0xb4,0xd7, + 0x10,0xcd,0x10,0x56,0x53,0xce,0x47,0xa5,0x7c,0x15,0x5c,0xb6,0xbd,0x1a,0x8e,0x9d, + 0x65,0xff,0x00,0x04,0xf2,0x32,0x8f,0x0f,0xe3,0x2c,0x43,0x75,0x25,0x78,0x9e,0x3b, + 0xe0,0xef,0x83,0xed,0x71,0xb3,0xcd,0x8f,0xaf,0xb5,0x7d,0x65,0xe0,0xcf,0x80,0xb6, + 0x72,0x79,0x66,0x48,0x07,0x6e,0x48,0xaf,0x54,0xf0,0x87,0x85,0x20,0x8d,0x16,0x4f, + 0x2c,0x00,0x31,0xda,0xbd,0xc7,0x4e,0x9a,0xdb,0x4e,0x8c,0x05,0x00,0x15,0xc0,0x15, + 0xf4,0xb9,0x4f,0x0f,0xba,0xab,0x9a,0xa2,0xb2,0x3e,0xf6,0x54,0x70,0x59,0x7c,0x7d, + 0x9d,0x18,0x6a,0x79,0xd5,0xb7,0xec,0xf3,0xa3,0xc9,0x6d,0xb7,0xca,0x40,0x76,0xfa, + 0x57,0xce,0x5f,0x11,0x7f,0x67,0x2b,0x5b,0x3b,0xc3,0x22,0x45,0x98,0xd8,0x9c,0xf1, + 0xc6,0x2b,0xef,0x64,0xf1,0x5a,0xc4,0x9c,0x30,0x00,0x57,0x1b,0xe2,0x4d,0x7e,0xca, + 0xfd,0x0a,0xcd,0x86,0xeb,0xcd,0x7b,0x58,0xde,0x1c,0xa4,0xe9,0x7e,0xef,0x73,0x9f, + 0x0f,0x5e,0x18,0x89,0x72,0x55,0x85,0xd1,0xf2,0x4f,0x80,0x3e,0x01,0x68,0x70,0x3a, + 0xdd,0x5d,0x42,0xa1,0x47,0x3c,0x81,0xcd,0x7a,0x4f,0x8b,0x7e,0x11,0xf8,0x3e,0xff, + 0x00,0x4f,0x6b,0x61,0x6d,0x1e,0x4a,0xe3,0x20,0x0a,0xdb,0x9b,0x5e,0x30,0x96,0x82, + 0xd1,0xb0,0xa3,0x8e,0x0d,0x54,0x6d,0x52,0x67,0x1c,0xb1,0x3f,0xca,0xae,0x8d,0x4c, + 0x36,0x1e,0x92,0xc3,0xa8,0x2f,0x33,0x07,0xc2,0xf4,0xdc,0xa5,0x28,0xc7,0x46,0x7e, + 0x7f,0xfc,0x40,0xfd,0x99,0x19,0x6e,0xa4,0xb9,0xd1,0xb3,0x82,0x4f,0x00,0x7f,0x4a, + 0xf0,0xed,0x4f,0xe0,0x47,0x89,0x2c,0x63,0x67,0x48,0xdc,0xe3,0xd4,0x57,0xeb,0xb4, + 0x2f,0x05,0xc1,0x1e,0x72,0x8e,0x7b,0xd6,0x8d,0xf6,0x83,0xa2,0xdc,0xd9,0x11,0xb1, + 0x09,0x23,0xd0,0x57,0xcb,0xe6,0x99,0x3d,0x06,0xdd,0x5a,0x0f,0x97,0xc8,0xf2,0xff, + 0x00,0xd4,0x7c,0x1d,0x79,0x35,0x38,0xd9,0xb3,0xf1,0x87,0x44,0xf8,0x59,0xa9,0x5c, + 0x5d,0xfd,0x96,0xea,0x16,0x0d,0x9c,0x57,0xa0,0xea,0xbf,0x00,0x6f,0xa2,0xb3,0x37, + 0x10,0xc4,0x41,0xc6,0x78,0x15,0xf7,0xa5,0xef,0x84,0xf4,0x9b,0x4d,0x4b,0xed,0x31, + 0xc6,0xbc,0x1e,0xc2,0xba,0xc8,0xec,0xac,0xf5,0x08,0xd6,0xde,0x34,0x18,0xc6,0x0d, + 0x7c,0xfa,0xc3,0x41,0x3e,0x59,0xbb,0xb3,0xdc,0xc2,0xf8,0x69,0x83,0x8e,0x1d,0xaa, + 0x91,0xf9,0x9f,0x90,0xa3,0xe1,0x87,0x88,0x9a,0xff,0x00,0xec,0x62,0x07,0xc6,0x71, + 0x9c,0x57,0xd0,0x3e,0x0d,0xfd,0x98,0xb5,0xad,0x51,0x63,0x9e,0xe2,0x26,0x21,0xb1, + 0xc1,0x1c,0x57,0xe8,0xc6,0x87,0xf0,0xaf,0x49,0x9a,0xe5,0x6e,0xe6,0x81,0x70,0x0e, + 0x79,0x1d,0x6b,0xd9,0x23,0x93,0x42,0xd0,0x6d,0x84,0x11,0x22,0x65,0x06,0x38,0x03, + 0xb5,0x7d,0x06,0x07,0x86,0x3d,0xa4,0x3d,0xad,0x69,0x69,0xd1,0x1f,0x25,0x4f,0x83, + 0x30,0x94,0x2b,0xc9,0x35,0x74,0x7e,0x54,0xf8,0xdf,0xf6,0x60,0x9b,0x44,0xd2,0x9e, + 0xf1,0x14,0x06,0x45,0x24,0x8c,0x7a,0x57,0xc3,0x5a,0xa6,0x9f,0x2e,0x9f,0x7b,0x2d, + 0x9c,0x9f,0x2b,0x44,0xc5,0x79,0xe2,0xbf,0x76,0x3e,0x23,0x6b,0x70,0xea,0x96,0x12, + 0x5b,0x22,0x80,0x08,0x22,0xbf,0x2a,0xbe,0x33,0xf8,0x0c,0x69,0xf2,0xbe,0xad,0x6a, + 0x0f,0x2c,0x58,0xe3,0xd3,0xbd,0x73,0x67,0x39,0x5c,0x28,0x25,0x2a,0x31,0xb2,0x5b, + 0x9e,0x5f,0x14,0xf0,0xc4,0x29,0xd1,0xfa,0xc6,0x1a,0x3b,0x6e,0x7c,0xd0,0x4f,0x61, + 0xd6,0x99,0xdb,0xeb,0x4f,0x61,0xcf,0x5e,0x2a,0x30,0x0f,0x7e,0xb5,0xf3,0xf7,0x3f, + 0x2f,0x76,0xd9,0x87,0x5c,0x8a,0xef,0xfc,0x11,0xe1,0x89,0xb5,0xcd,0x46,0x25,0x55, + 0x25,0x4b,0x01,0xd2,0xb8,0xcb,0x1b,0x57,0xbd,0x9d,0x21,0x8c,0x67,0x71,0x1f,0xce, + 0xbe,0xfd,0xf8,0x05,0xf0,0xeb,0xcd,0x92,0xde,0x57,0x8f,0x24,0x91,0xda,0xbe,0x3b, + 0x8c,0xf8,0x82,0x19,0x66,0x06,0x73,0xbf,0xbc,0xcf,0x67,0x22,0xcb,0x1e,0x2b,0x10, + 0x93,0xd9,0x1f,0x52,0xfe,0xcf,0x7f,0x0a,0x52,0xd9,0x60,0x92,0x48,0x47,0x18,0xed, + 0x5f,0xa8,0xbe,0x18,0xf0,0xed,0xa6,0x9f,0x60,0x88,0x23,0x03,0x0a,0x2b,0xc5,0xbe, + 0x19,0x78,0x72,0x0d,0x2e,0xce,0x26,0xd8,0x06,0xd0,0x31,0xc5,0x7d,0x09,0x6d,0x74, + 0xa1,0x30,0x31,0x8a,0xfe,0x27,0xce,0xb3,0x8a,0x98,0xdc,0x44,0xaa,0xd4,0x77,0xb9, + 0xfb,0x35,0x0c,0x3a,0xa3,0x49,0x42,0x99,0xce,0xf8,0x8f,0x4a,0xb6,0x96,0x32,0xa1, + 0x01,0x3f,0x4a,0xe4,0xb4,0xbd,0x1e,0x2b,0x1f,0x9c,0x28,0x07,0xaf,0xa5,0x76,0x9a, + 0x95,0xd0,0x66,0xe3,0x9a,0xc3,0x67,0x24,0xf3,0xde,0xbe,0x0b,0x17,0x8b,0x94,0xa4, + 0xe3,0x7d,0x0f,0xa0,0xc2,0xd1,0xb4,0x53,0x92,0xd4,0xbb,0x1b,0x0c,0xe6,0xb4,0xa0, + 0x7c,0x74,0xac,0x48,0xcf,0x38,0xf4,0xad,0x7b,0x6e,0x4e,0x2b,0x86,0x32,0x5d,0x59, + 0x75,0xe2,0xac,0x58,0xba,0xb6,0x4b,0x84,0x2a,0x46,0x72,0x2b,0xc6,0xfc,0x5b,0xf0, + 0xc2,0xc7,0x5c,0x24,0xc9,0x12,0xb6,0x7a,0x82,0x07,0x7a,0xf7,0x54,0xc6,0x31,0x48, + 0xca,0x9d,0xc5,0x77,0xe1,0xf1,0xb3,0xa0,0xf9,0xa0,0xec,0x79,0xdc,0xe9,0xfb,0xb2, + 0x57,0x3e,0x6c,0xd1,0xfe,0x0b,0x69,0x56,0x6a,0x33,0x0a,0x8c,0x7b,0x57,0x77,0x69, + 0xf0,0xf3,0x4a,0xb5,0x03,0x11,0x2f,0x1e,0xd5,0xe9,0xef,0x22,0x2f,0x00,0x55,0x29, + 0x25,0x27,0xbd,0x56,0x23,0x3b,0xc4,0x54,0x7a,0xcd,0x9d,0x14,0xe2,0xbe,0xcc,0x4f, + 0xff,0xd6,0xfc,0x87,0xb8,0xf0,0x55,0xe5,0x87,0x32,0x46,0x48,0x1c,0xf4,0xab,0x5a, + 0x6e,0x94,0x51,0xc0,0x2b,0x8a,0xfb,0xff,0x00,0xc7,0x3f,0x0d,0x61,0xb6,0x81,0xb6, + 0x44,0x31,0x83,0xd0,0x57,0xcb,0x17,0x5e,0x1b,0x9a,0xce,0xf9,0xe3,0x2b,0x85,0xcf, + 0x15,0xf9,0xd6,0x27,0x34,0xa9,0x09,0xba,0x55,0x1e,0xa7,0xe8,0x3c,0x5d,0xc0,0x18, + 0x9c,0xa9,0xc6,0x74,0x93,0x71,0x66,0x25,0x9d,0x92,0xa2,0x02,0x07,0x1f,0xca,0xac, + 0xbd,0xba,0x85,0xc8,0xe7,0x3c,0x57,0x40,0xb6,0x42,0x34,0xe7,0xad,0x67,0xdc,0x61, + 0x07,0x4f,0xce,0xb9,0xe3,0x8c,0x94,0x8f,0x86,0xc4,0x60,0xab,0xd0,0x8d,0xea,0x46, + 0xc7,0x3c,0xf6,0x4a,0xc7,0x01,0x7a,0xd4,0x47,0x4c,0x46,0xe7,0x6d,0x6b,0x09,0x50, + 0x1c,0x91,0xd6,0x9a,0x6e,0x93,0x91,0x8f,0xfe,0xb5,0x3f,0x6f,0x3e,0xa7,0x9c,0xe6, + 0xd9,0x8c,0x74,0xd5,0x53,0x90,0x31,0x52,0x25,0x90,0x50,0x38,0xfc,0xab,0x47,0xcd, + 0x52,0x00,0xa8,0xda,0x55,0x5c,0xd7,0x55,0x3a,0xd2,0xb1,0x32,0x93,0x2a,0x3c,0x48, + 0x06,0x7f,0x95,0x63,0xdc,0xb2,0xa7,0xd3,0x35,0x7a,0xea,0xe9,0x76,0xf5,0xe2,0xb9, + 0xbb,0xa9,0x8f,0x4c,0xf1,0x5a,0x29,0x49,0xea,0x46,0xe5,0xa8,0xee,0x30,0x70,0x0e, + 0x7d,0x6b,0x6e,0xda,0xe0,0x11,0xf4,0x15,0xc4,0x47,0x36,0xd6,0xce,0x6b,0x56,0x1b, + 0xa2,0x17,0xaf,0x5f,0xcf,0x35,0xe8,0x61,0x60,0xe4,0x1c,0xba,0x5c,0xec,0x0d,0xd8, + 0x50,0x49,0x3f,0xad,0x54,0x7d,0x48,0x0e,0x73,0xdb,0xa5,0x60,0x3d,0xc1,0xc1,0xc1, + 0x35,0x42,0x5b,0x86,0x63,0xde,0xbd,0x48,0x60,0x64,0xfd,0xe9,0x1b,0x42,0x16,0xd4, + 0xea,0x4e,0xa2,0x4a,0xe7,0x35,0x9d,0x77,0xac,0x88,0xc1,0x25,0xbb,0x74,0xac,0xbc, + 0x4a,0xeb,0x90,0x7a,0x7f,0x5a,0xc5,0xd4,0x22,0x7c,0x1e,0xb4,0xa5,0x87,0x8a,0x66, + 0xca,0x5d,0x8a,0xba,0x97,0x88,0x1c,0x93,0x82,0x72,0x7d,0xeb,0x8d,0xbc,0xd4,0x67, + 0x9c,0x9c,0xb1,0xeb,0xeb,0x53,0x5f,0x0d,0xb9,0xcd,0x63,0x13,0xb9,0xab,0xbe,0x95, + 0x18,0x28,0xdc,0xd2,0xed,0x80,0x06,0x47,0xc7,0xad,0x6b,0x41,0x60,0xce,0xbd,0x2a, + 0xce,0x99,0xa7,0x99,0x98,0x64,0x75,0xaf,0x4c,0xb0,0xd0,0x43,0x46,0x0e,0x31,0xc5, + 0x73,0x62,0x31,0x4a,0x0f,0x96,0xe4,0xb6,0x79,0x5c,0xd6,0x2c,0xa3,0xa6,0x2b,0x1e, + 0x48,0x48,0x70,0x3a,0x66,0xbd,0x93,0x53,0xd1,0x7c,0xb4,0xc8,0x5e,0xde,0x95,0xc5, + 0x1d,0x24,0xbd,0xce,0x00,0xc8,0xcd,0x4d,0x1c,0x6a,0xb5,0xc4,0x57,0xd1,0xec,0x66, + 0x66,0x52,0x01,0xc6,0x6b,0xd6,0xb4,0x78,0x64,0x85,0x57,0x20,0x8a,0xbb,0xe1,0x8f, + 0x0b,0x3c,0xa8,0x08,0x5c,0xf1,0x9f,0xc2,0xbb,0xb9,0x3c,0x39,0x25,0xb4,0x79,0x2b, + 0x8e,0x2b,0xe5,0xf3,0x8c,0x52,0xa8,0x9a,0x3f,0x60,0xf0,0xc3,0x3a,0x78,0x4c,0x54, + 0x62,0xde,0x85,0x6b,0x19,0x07,0x19,0xe2,0xba,0xdb,0x4b,0x9f,0x29,0x46,0x0e,0x08, + 0xf5,0xae,0x12,0x12,0x60,0x98,0xa1,0xea,0x0f,0x02,0xb6,0xa3,0x98,0x85,0x19,0x39, + 0xaf,0x9c,0x8a,0x4b,0x53,0xfb,0x6b,0x2e,0xc7,0x2a,0x94,0xe3,0x2b,0x9e,0x83,0x6d, + 0x7e,0x59,0x70,0x4f,0xe7,0x52,0xcb,0x73,0x93,0x9c,0xd7,0x0f,0x05,0xe3,0x0e,0xf8, + 0xad,0x01,0x7b,0x91,0x83,0xd6,0xb8,0xe7,0x4d,0xb9,0x6a,0x7d,0x2c,0x31,0xf0,0xe5, + 0x3a,0x1f,0x39,0x7a,0xe7,0x8f,0xe7,0x50,0x3c,0xaa,0x7b,0xf3,0x58,0x7f,0x6d,0x3f, + 0x8d,0x35,0xae,0xbb,0x8e,0x2b,0xd3,0xc3,0xa9,0x72,0x6a,0x78,0xd8,0x9c,0x6c,0x39, + 0x9b,0x46,0x9c,0xb2,0x0e,0xa7,0xbd,0x67,0x49,0x20,0xfa,0x7f,0x9e,0x6a,0xb7,0x9e, + 0x7b,0xd5,0x47,0x94,0x9e,0xf5,0xab,0xa5,0x75,0x73,0x8d,0xe3,0x16,0xe5,0xd5,0x97, + 0x2e,0x3d,0xab,0xbb,0xd0,0xa5,0xc0,0x53,0xe9,0x5e,0x62,0xb2,0xfc,0xd9,0x06,0xba, + 0xdd,0x37,0x52,0x58,0x90,0x03,0xc1,0xc5,0x6b,0x87,0xa4,0x9c,0xbd,0xe3,0x9e,0xb6, + 0x35,0xa6,0xb9,0x4f,0x55,0xfe,0xd5,0x44,0xc2,0x31,0xc6,0x7b,0x57,0x3f,0xac,0xbc, + 0x37,0x31,0x33,0x2d,0x71,0xd7,0x3a,0xa1,0x77,0x18,0x34,0x7f,0x69,0x19,0x13,0x69, + 0x3d,0x29,0x55,0x56,0x93,0x89,0xd9,0x43,0x16,0xa7,0x4e,0xf2,0xdc,0xe1,0x35,0x84, + 0x58,0xe5,0x20,0x57,0x2e,0xef,0x86,0xe4,0x75,0xae,0xaf,0x59,0x1e,0x63,0x33,0x29, + 0xae,0x2e,0x57,0xc3,0x75,0xae,0x37,0x16,0x72,0x54,0xad,0xae,0x86,0xbd,0xb4,0xb8, + 0x23,0x26,0xab,0x6b,0x13,0xee,0xb5,0x61,0xed,0x50,0x45,0x26,0x06,0x73,0x59,0x9a, + 0xc4,0xf8,0xb6,0x60,0x6b,0x5c,0x1c,0x7f,0x7a,0x8f,0x17,0x89,0x6b,0xdb,0x2f,0xa9, + 0x7e,0xc7,0x86,0xeb,0x44,0x7d,0xb1,0x8f,0xd7,0xf9,0xd6,0x36,0x6b,0x43,0x57,0x72, + 0xd7,0x6d,0x81,0x59,0x65,0xbd,0x7b,0xd7,0xea,0x14,0x3f,0x86,0x8f,0xf3,0xef,0x35, + 0x92,0xfa,0xe5,0x57,0xe6,0xc9,0x37,0x0a,0x50,0x7b,0x1c,0xe6,0xa2,0xe3,0xf2,0xa0, + 0x1e,0xe2,0xb6,0x3c,0xee,0x67,0xb9,0xea,0x3e,0x00,0x5c,0xdf,0x46,0x7d,0xc7,0xf3, + 0xaf,0xd1,0xaf,0x07,0x4c,0xf1,0xe9,0x71,0x00,0x71,0x95,0x15,0xf9,0xeb,0xf0,0xca, + 0xca,0x4b,0x9d,0x46,0x15,0x8d,0x49,0x25,0x86,0x00,0x1e,0xf5,0xfa,0x5d,0xa7,0xf8, + 0x43,0x5d,0xd0,0xbc,0x3d,0x67,0xa9,0xea,0x36,0x72,0x41,0x6b,0x73,0x84,0x8e,0x47, + 0x18,0x56,0x38,0xce,0x06,0x7d,0xbd,0xab,0xe9,0x72,0x19,0x38,0x46,0x73,0x3f,0x6d, + 0xe0,0x3c,0x3a,0x78,0x74,0xa5,0xd7,0x62,0xdc,0xcb,0xe6,0xa6,0xe3,0xcd,0x66,0xc5, + 0x74,0xd6,0xf2,0x61,0x7b,0x7a,0x76,0xab,0xbe,0x70,0xd9,0xb7,0xdb,0x15,0x89,0x27, + 0x33,0x63,0xb5,0x7d,0x0a,0xc7,0x38,0xb5,0x2b,0x9f,0xa6,0x4f,0x04,0x9d,0xa2,0x7a, + 0x5f,0x86,0xfc,0x43,0x2c,0x72,0x00,0x58,0xf5,0xe3,0x9a,0xf7,0xcf,0x0f,0xf8,0x82, + 0x46,0x0a,0x09,0xfa,0xd7,0xcc,0xbe,0x1d,0xd3,0x2e,0xaf,0xae,0xd2,0x0b,0x54,0x2c, + 0xcc,0xd8,0xe0,0x66,0xbe,0x92,0x8b,0x4c,0x87,0xc2,0x3a,0x7c,0x72,0x5e,0x2f,0x9f, + 0x7b,0x20,0xca,0xc1,0x9c,0x05,0xf7,0x73,0xd7,0xf0,0xaf,0x7f,0x07,0x98,0xa9,0x52, + 0x73,0x9e,0xcb,0x76,0x78,0xb9,0x86,0x0d,0x29,0xc6,0x10,0xf8,0x9f,0x43,0xaf,0xd5, + 0x3c,0x43,0x69,0x6d,0x6c,0x53,0x50,0x85,0x58,0x4d,0x88,0xd0,0xb7,0x76,0x3d,0x48, + 0xf5,0xc7,0x7a,0xe4,0xf5,0x2f,0x00,0xdb,0xc8,0xf1,0x6a,0x16,0xea,0x36,0x48,0x03, + 0x82,0xa3,0x83,0x9e,0x78,0x35,0xe4,0x5a,0xdd,0xfe,0xa3,0xa9,0xea,0x46,0xea,0xfa, + 0x52,0xe4,0x1c,0x22,0x03,0x85,0x41,0xe8,0xa3,0xd2,0xbd,0x77,0xc1,0xfe,0x30,0xd4, + 0x6c,0xad,0x52,0xc6,0xe4,0xad,0xcd,0xb8,0xff,0x00,0x96,0x6e,0x33,0x8c,0xfa,0x1e, + 0xa3,0xf0,0x35,0xf3,0xb5,0xf3,0x2c,0x36,0x2b,0x10,0xd5,0x48,0xe9,0xd1,0x9d,0xb4, + 0xb2,0x7c,0x45,0x0a,0x3c,0xd1,0x95,0xe5,0xd4,0xd5,0x86,0xcd,0x2c,0x20,0x11,0x80, + 0x05,0x61,0xea,0x97,0x6c,0x01,0x11,0xb7,0x35,0xe8,0x57,0x9a,0x52,0x6b,0x76,0xcd, + 0x73,0xa1,0xbe,0xf9,0x31,0xb9,0xad,0xdb,0x1b,0xc7,0xae,0xdf,0xef,0x0f,0xa5,0x79, + 0x86,0xa7,0x61,0x73,0x6d,0x60,0x9a,0x89,0x91,0x65,0x0d,0x24,0x91,0xcd,0x1a,0x83, + 0xba,0x06,0x46,0x0a,0x3c,0xc1,0xe8,0xdd,0x88,0xee,0x30,0x79,0xaf,0x45,0xe2,0xdc, + 0x74,0x8a,0xd3,0xcb,0x63,0x96,0x8e,0x16,0x9c,0xa4,0xbd,0xa3,0xd5,0x9c,0xcd,0xde, + 0xab,0x75,0x19,0x28,0x09,0xc1,0xae,0x72,0xea,0xf6,0x79,0xb7,0x02,0xc7,0x06,0xb6, + 0xa4,0x02,0x62,0x48,0x19,0x3e,0x95,0x8d,0x79,0x0f,0x96,0xa4,0xe3,0x1c,0x9a,0x72, + 0xc7,0x49,0xc1,0xa6,0xcf,0x45,0x60,0x61,0x09,0x2b,0x22,0x95,0xb2,0x49,0x21,0xe0, + 0x12,0x4e,0x6b,0x42,0x5b,0x6b,0xd8,0x57,0x7c,0x90,0xba,0xaf,0xa9,0x53,0x5b,0x7e, + 0x11,0x7b,0x78,0x6e,0x8b,0xcd,0x82,0x40,0xc8,0x0c,0x33,0xcd,0x7b,0x15,0xa7,0x88, + 0x2d,0x9a,0x2f,0x2e,0x65,0x46,0x52,0x30,0x41,0x00,0x8c,0x7d,0x0d,0x78,0x95,0x67, + 0x06,0xef,0x29,0x6a,0x7a,0xad,0x4d,0x68,0xa3,0x73,0xc9,0xbc,0x2f,0x65,0x6d,0xa8, + 0x5c,0x7f,0xa5,0x49,0xb1,0x41,0xe8,0x3a,0x9f,0x61,0x5d,0xfe,0xad,0xe1,0x9b,0x39, + 0xad,0xf7,0xe9,0x32,0x18,0xe4,0x0a,0x4e,0xc7,0x6e,0x1f,0x8e,0x80,0xf6,0x3e,0x95, + 0xc2,0xf8,0x9f,0x53,0xd2,0xb4,0x7d,0x4c,0xcf,0xa7,0x5b,0x3a,0xb4,0xb8,0xca,0xc6, + 0x71,0x12,0xe4,0xf2,0xd8,0xeb,0xf8,0x74,0xad,0x49,0x3c,0x40,0x8c,0x2d,0xc7,0x99, + 0x94,0x91,0x73,0x8f,0xad,0x44,0xab,0x28,0xb5,0x1b,0xdd,0x33,0x86,0xae,0x12,0xa4, + 0xa5,0xed,0x63,0x74,0x79,0x16,0xb3,0x05,0xd2,0xdc,0xed,0xc1,0xeb,0xc8,0xaf,0x40, + 0xf0,0x8e,0x8d,0x90,0xb3,0x4c,0x38,0x18,0xeb,0x5d,0x29,0xd2,0x2d,0xf5,0x98,0x57, + 0x51,0x45,0x01,0xb7,0x84,0x97,0x1e,0xa7,0xa3,0x7e,0x23,0xf5,0xad,0xb9,0x2d,0xa3, + 0xd3,0x2c,0xfc,0xb8,0xf8,0x38,0xab,0xc0,0xe4,0xf4,0x95,0x6f,0x6e,0xf5,0x8f,0x41, + 0x62,0xb3,0xba,0xb3,0xa3,0xec,0x63,0xa4,0xb6,0x1f,0x7f,0xab,0xc1,0x65,0x6e,0x62, + 0x88,0x80,0x71,0x8a,0xf2,0x0d,0x67,0x59,0x96,0x59,0x1d,0x83,0x9a,0xb3,0xad,0x5d, + 0x4a,0x18,0x9c,0xfa,0xd7,0x9d,0xea,0x7a,0x86,0x03,0x64,0xfa,0x8a,0xfa,0x4a,0x98, + 0xa4,0xa3,0x65,0xa1,0xe3,0xd1,0xc2,0xd9,0x73,0x37,0x76,0x66,0xea,0x7a,0x9b,0xca, + 0xcc,0xac,0x72,0x2b,0xc0,0x3e,0x28,0xda,0xc7,0x79,0xa1,0xdc,0x23,0xa8,0x24,0x29, + 0xeb,0x5e,0xb7,0x3d,0xc0,0x66,0x24,0x9a,0xf2,0xdf,0x1f,0x48,0x3f,0xb2,0xe7,0x0d, + 0xdd,0x4d,0x7c,0xae,0x3a,0xb2,0x9c,0x26,0xd9,0xc5,0x9a,0xc1,0x4b,0x0f,0x38,0x3e, + 0xc7,0xe7,0x5d,0xda,0x18,0x6e,0x24,0x8c,0x7f,0x0b,0x11,0x55,0x38,0xcf,0xad,0x69, + 0xea,0xe3,0x1a,0x8c,0xe0,0x7f,0x7c,0xd6,0x60,0xfb,0xd8,0xf5,0xaf,0x89,0x8e,0xc7, + 0xf3,0x9d,0x68,0xf2,0xd4,0x92,0x5d,0x0f,0x52,0xf8,0x6d,0xa2,0x8d,0x47,0x52,0x8f, + 0x2b,0x91,0xb8,0x57,0xec,0x1f,0xc0,0xcf,0x09,0xc3,0x6f,0x6b,0x0c,0x81,0x30,0x70, + 0x3a,0x8a,0xfc,0xcc,0xf8,0x27,0xa5,0x89,0x2f,0xa1,0x72,0xbf,0xc4,0x33,0x5f,0xb1, + 0x7f,0x0b,0x2d,0x92,0xda,0xc2,0x12,0x30,0x30,0xa0,0x8a,0xfe,0x5c,0xf1,0x8f,0x37, + 0x94,0xb1,0x0e,0x8c,0x5e,0x87,0xea,0x1c,0x21,0x83,0x8c,0x68,0x7b,0x4e,0xa7,0xd2, + 0x5a,0x40,0x4b,0x78,0x92,0x34,0xe8,0xa0,0x57,0x65,0x0c,0xb8,0x4a,0xe0,0x74,0xf9, + 0x47,0x15,0xd5,0xc3,0x36,0x50,0x0a,0xfe,0x77,0xa9,0x2d,0x19,0xf6,0xf0,0x8d,0xdd, + 0x86,0x5c,0xb9,0x32,0x1a,0xa8,0x5b,0x27,0xde,0x9f,0x70,0xd9,0x7a,0xa9,0xf3,0xd7, + 0xcb,0x55,0xbf,0x33,0xb9,0xef,0xc3,0x63,0x42,0x26,0xad,0x48,0x66,0x0b,0xf8,0x57, + 0x38,0x24,0x91,0x39,0xc1,0xa4,0x17,0x64,0x1c,0x13,0x59,0x73,0x04,0xa9,0x73,0xe8, + 0x76,0x22,0xe9,0x31,0x8f,0x4a,0x6b,0x5c,0xe7,0x8a,0xe6,0xa3,0xba,0x38,0xe6,0xad, + 0x2c,0xdc,0x54,0x39,0xa3,0x9d,0xe0,0x92,0xd4,0xd3,0x79,0x72,0x6a,0xa3,0x3f,0x35, + 0x07,0x9a,0x48,0xa6,0x96,0x24,0xe0,0xd3,0x8e,0xa6,0x91,0xa5,0x63,0xff,0xd7,0xe9, + 0x3c,0x67,0x6b,0x0d,0xdc,0x2c,0x02,0x8e,0x95,0xf2,0x4f,0x89,0xfc,0x3f,0xb2,0x77, + 0x72,0x31,0xd6,0xbe,0xa3,0x9f,0x54,0x5b,0x95,0xc3,0x1c,0xf1,0xde,0xbc,0xa7,0xc5, + 0x16,0x6b,0x3a,0x16,0x41,0x9e,0xbd,0xab,0xf3,0x7c,0xff,0x00,0x0a,0xa5,0x2f,0x6a, + 0x8f,0xf4,0x8a,0x96,0x49,0x87,0xc6,0xc5,0x46,0xb4,0x53,0x3e,0x67,0xba,0xb4,0x3b, + 0x8a,0x01,0xdf,0x9a,0xe7,0xee,0xb4,0x69,0xa6,0x6c,0xa0,0xeb,0xf8,0xd7,0xaf,0xbe, + 0x85,0x2c,0xd3,0x9d,0xc3,0x83,0x5d,0x4e,0x9d,0xe1,0x18,0xd8,0x06,0x74,0xf4,0xaf, + 0x17,0x0f,0x4a,0xa4,0xb5,0x89,0xf3,0x5c,0x47,0xe1,0x9e,0x59,0x8a,0x87,0x23,0x82, + 0x3e,0x6a,0x5f,0x08,0xdf,0x4a,0x72,0xa0,0xff,0x00,0x9e,0xd4,0x93,0x78,0x1b,0x50, + 0x00,0xb0,0xdd,0xc7,0x61,0xda,0xbe,0xbe,0x83,0xc3,0x16,0x91,0x28,0xdc,0xa3,0x83, + 0xde,0xad,0x5c,0xe8,0x36,0x46,0x32,0x36,0x0a,0xf4,0xe1,0x86,0xab,0x6b,0xc9,0x9f, + 0x9c,0xd7,0xf0,0x43,0x2f,0x71,0xb4,0x11,0xf0,0x85,0xf6,0x8f,0xa8,0x59,0x1c,0x90, + 0x48,0xe7,0xb5,0x61,0xb1,0x93,0x04,0x73,0xef,0x9a,0xfa,0xf3,0x5d,0xf0,0xb4,0x12, + 0x83,0xb5,0x07,0xe1,0x5e,0x21,0xaf,0x78,0x4c,0xc5,0xbd,0xe3,0x52,0x31,0x5d,0x38, + 0x4c,0x45,0x39,0x54,0xf6,0x55,0x37,0x3f,0x28,0xe2,0xdf,0x08,0x31,0xb9,0x7c,0x65, + 0x5f,0x0c,0xaf,0x15,0xd0,0xf2,0x49,0x41,0x27,0x23,0xd2,0xb2,0x6e,0x14,0x9e,0x17, + 0x93,0x5d,0x2c,0xd6,0xb2,0x09,0x4c,0x44,0x73,0x9c,0x62,0xbb,0x1d,0x0b,0xc1,0x72, + 0x5e,0x28,0x92,0x44,0xeb,0x5e,0xfe,0x23,0x0f,0x0a,0x50,0x4c,0xfc,0xd7,0x26,0xe1, + 0xdc,0x5e,0x3e,0xbf,0xd5,0xe9,0x43,0x55,0xb9,0xe2,0xb2,0x24,0xcb,0xf3,0x15,0x38, + 0xab,0x10,0x31,0xc8,0xcf,0x35,0xee,0x3a,0xbf,0x81,0x7e,0xcd,0x11,0x91,0x57,0xa0, + 0xe7,0x8a,0xf2,0x5b,0xfd,0x38,0xd9,0xce,0x42,0xf0,0x33,0xcd,0x4e,0x5b,0x5e,0x2e, + 0xa7,0x2b,0x3d,0x9e,0x22,0xe0,0xbc,0x66,0x53,0x05,0x52,0xae,0xc5,0x66,0x3b,0x86, + 0x0f,0x5f,0x5a,0x96,0x0b,0x7d,0xed,0x44,0x20,0x9e,0x2b,0x7e,0xca,0xd7,0x77,0x38, + 0xaf,0xa3,0xad,0x2e,0x58,0xe8,0x7c,0x64,0x9e,0x81,0x6f,0x66,0x0a,0x93,0x8e,0x82, + 0xb2,0xb5,0x3b,0x45,0xe4,0xe3,0xa7,0x6a,0xf4,0x0b,0x6b,0x55,0x2b,0xc2,0xf6,0xac, + 0x4d,0x5e,0xdd,0x44,0x6c,0x47,0x15,0xf2,0xd5,0xb1,0x32,0x75,0x35,0x22,0x32,0xe8, + 0xcf,0x0b,0xd5,0xa2,0xda,0xc7,0x8c,0x7a,0xff,0x00,0x4a,0xc7,0xb5,0xb7,0x69,0x1c, + 0x67,0xd6,0xba,0xed,0x5e,0xdb,0x74,0x9c,0x8f,0xf2,0x29,0x9a,0x4e,0x9f,0x99,0x46, + 0x47,0xd3,0xde,0xbd,0x68,0xd7,0x51,0xa5,0x74,0x6a,0x99,0xd3,0xe8,0x1a,0x66,0x76, + 0xe4,0x7a,0x57,0xb0,0xd8,0x69,0xb1,0x88,0x73,0x8e,0x80,0x57,0x2b,0xa1,0x59,0xaa, + 0x05,0x38,0xc7,0xa1,0xae,0xed,0x24,0x58,0x63,0xc6,0x3a,0x0e,0x7d,0xeb,0xe7,0x71, + 0x55,0xa4,0xe5,0x72,0x8e,0x43,0x5b,0x81,0x19,0x31,0x81,0x91,0x9a,0xe6,0xb4,0xed, + 0x2d,0x5e,0xef,0x81,0x9a,0xe8,0xf5,0x39,0x8c,0x92,0x1c,0x1e,0x33,0x9e,0x2a,0xc6, + 0x84,0x83,0xed,0x03,0x23,0x38,0x34,0x7b,0x46,0xa3,0x61,0xc7,0x74,0x7b,0x77,0x82, + 0x74,0x04,0xf2,0xd5,0xca,0xf6,0xcf,0x4a,0xeb,0x35,0xed,0x1e,0x11,0x6e,0x4f,0x42, + 0x07,0xe5,0x50,0x78,0x62,0x6f,0x22,0xdd,0x46,0x7b,0x53,0xfc,0x45,0xa9,0x28,0x8d, + 0x86,0xee,0x00,0xaf,0x1e,0xbd,0x27,0x26,0xcf,0x7f,0x27,0xc6,0x3c,0x3e,0x22,0x33, + 0x47,0x80,0x6a,0xd0,0x7d,0x9e,0xec,0xb0,0xf5,0xc1,0xa8,0x12,0x5c,0x8f,0x6e,0x94, + 0xed,0x7e,0xfa,0x37,0x98,0xec,0x6e,0xf5,0x9f,0x04,0xa1,0x80,0x20,0xf2,0x7d,0x6b, + 0x89,0x45,0xc5,0x5b,0xa1,0xfd,0xb5,0xc1,0x19,0xc2,0xc4,0xe0,0x20,0xcd,0x64,0x72, + 0x32,0x4d,0x4c,0xb2,0x91,0xcf,0x5a,0xa2,0xa4,0x10,0x72,0x69,0xc1,0xf0,0x32,0x69, + 0x58,0xfb,0x49,0xe2,0x2c,0xb4,0x2f,0x99,0x49,0x1d,0x69,0x7c,0xf2,0x31,0x9e,0x6b, + 0x3b,0x70,0x38,0x3e,0xb4,0xcf,0x30,0xfa,0xd7,0x45,0x19,0x5b,0x43,0xcc,0xaf,0x88, + 0xbb,0xb9,0x79,0xa6,0xe7,0x9e,0xa2,0x98,0x66,0xe7,0xd0,0x55,0x13,0x27,0x7a,0x8f, + 0xcc,0xcf,0x5a,0xd9,0x6e,0x65,0xed,0xee,0x8d,0x14,0x71,0x9e,0xa3,0xda,0xad,0x2c, + 0xcc,0xa3,0x83,0x8a,0xc5,0x49,0x40,0xc7,0x27,0xd2,0xae,0xab,0x02,0xa3,0x3d,0x31, + 0x5d,0x09,0x5d,0x09,0x55,0x65,0xb6,0xb9,0x63,0xc5,0x4d,0x15,0xc9,0xc6,0x3f,0xad, + 0x63,0x48,0xdc,0xe2,0x91,0x24,0x28,0xdf,0xca,0xb1,0x9a,0x7d,0x4e,0x8a,0x75,0xdd, + 0xec,0x5f,0xd4,0x24,0x57,0x42,0x3b,0xd7,0x0d,0x71,0xf2,0xc8,0x41,0xae,0x92,0x79, + 0xb2,0x87,0x9a,0xe5,0xae,0xbe,0xf9,0xac,0x3a,0x8e,0xbd,0x5d,0x13,0x25,0x8d,0xff, + 0x00,0xfd,0x75,0x8f,0xac,0xc9,0x88,0x1b,0x3c,0xf1,0xd6,0xb4,0x22,0x70,0x07,0x27, + 0xa5,0x60,0xeb,0x77,0x1f,0xb9,0x23,0xd7,0x35,0xd5,0x82,0xa7,0x7a,0xa8,0xf9,0x4e, + 0x2e,0xc7,0x28,0x65,0xd3,0xd7,0xa1,0xe3,0xda,0x8e,0x3e,0xd2,0xd8,0xe7,0x15,0x9f, + 0x90,0x4d,0x59,0xbd,0x60,0xd7,0x0c,0xdd,0xf3,0x55,0x72,0x6b,0xf4,0x6a,0x5a,0x45, + 0x1f,0xc2,0xf8,0xd9,0x73,0x57,0x9b,0xf3,0x17,0x85,0xf7,0xa7,0xae,0x09,0x04,0x77, + 0xa8,0xa9,0xe9,0x80,0xc3,0xdb,0xf5,0xad,0x4e,0x55,0xb9,0xf6,0xff,0x00,0xec,0x8f, + 0xe1,0x6b,0x6d,0x77,0xc6,0x30,0xdc,0x5f,0x20,0x6b,0x5b,0x15,0xfb,0x4c,0xc0,0x8e, + 0x08,0x5e,0x15,0x4f,0xfb,0xcd,0xfc,0xab,0xf6,0x63,0x5e,0xf0,0x5d,0xff,0x00,0xc5, + 0x1f,0x07,0xa5,0xac,0x17,0x31,0xd8,0xda,0xd8,0xc8,0x92,0x41,0x2c,0x83,0x11,0xef, + 0xc1,0x4d,0xbc,0x73,0xce,0x71,0xc7,0x4a,0xfc,0xbf,0xfd,0x8b,0xfc,0x3f,0x24,0xfa, + 0x6d,0xd5,0xce,0x0a,0x8b,0xdb,0x84,0x89,0x9c,0xff,0x00,0x0c,0x51,0x0d,0xcc,0x4f, + 0xb6,0x4f,0x35,0xfa,0x2b,0xab,0xeb,0x53,0xeb,0x76,0xb2,0xe8,0x7a,0x5d,0xc3,0xc7, + 0xa7,0xa2,0x98,0x6d,0xf6,0x31,0x40,0x70,0x3f,0xd6,0x1c,0x60,0x92,0x4f,0x23,0x3d, + 0x06,0x31,0x5f,0xa5,0xe5,0xb0,0xa7,0x86,0xc9,0xa3,0xcf,0x1b,0xf3,0xfe,0x3d,0xbf, + 0x0b,0x1f,0xb7,0xf0,0xe5,0x09,0x42,0x8d,0x09,0xc5,0xd9,0xad,0x7d,0x0f,0x92,0x75, + 0xcd,0x36,0xf3,0xc3,0xda,0xcd,0xee,0x89,0x7f,0xb7,0xcf,0xb2,0x95,0xa2,0x72,0x87, + 0x2a,0x48,0xee,0xa7,0xb8,0x23,0x91,0x5b,0x5e,0x0e,0xf0,0x2e,0xbb,0xe3,0x3d,0x56, + 0x3b,0x4d,0x2a,0x06,0x97,0x71,0xe4,0x81,0xc2,0x83,0xdd,0x8f,0x40,0x2a,0xee,0x9d, + 0xe0,0x7d,0x7f,0x56,0xf1,0x82,0xe8,0x97,0xca,0xe6,0x56,0x60,0x5e,0x57,0xcb,0x0d, + 0x83,0x8d,0xdb,0x8f,0x51,0x8e,0x9f,0x95,0x7d,0xe7,0xe1,0x2b,0x0d,0x2f,0xc1,0x76, + 0x91,0x69,0xba,0x64,0x20,0x6d,0x00,0xc8,0xc0,0x7c,0xf2,0xbf,0xa9,0x3f,0xc8,0x76, + 0xac,0x32,0xac,0xaa,0x78,0xc4,0xe4,0xf4,0x8a,0xfe,0xac,0x7e,0x8f,0x9a,0xe6,0x8b, + 0x0f,0x08,0xf2,0x3b,0xc9,0xaf,0xe9,0x9e,0x70,0x9f,0x0a,0xbc,0x59,0xf0,0xe7,0x45, + 0x3a,0x9e,0x99,0xa5,0x2d,0xe4,0xa8,0x85,0xa4,0xb9,0x56,0x0f,0xe5,0xe0,0x64,0xe1, + 0x07,0x39,0x1e,0xbc,0xd7,0x8a,0x4b,0xab,0xcf,0x79,0x71,0x2c,0xf7,0x72,0xb4,0x92, + 0xca,0x49,0x62,0xdd,0x4d,0x7e,0x82,0x59,0xeb,0xfa,0xc5,0xdd,0x93,0xc7,0x02,0xc1, + 0x99,0x32,0xa2,0x36,0x75,0x27,0x6f,0x4e,0x79,0x3f,0xca,0xbe,0x3b,0xf8,0x93,0xf0, + 0xcf,0xc5,0x7a,0x65,0xcd,0xdf,0x8a,0x57,0x4d,0x44,0xd3,0x9d,0x8b,0x48,0x6d,0x9c, + 0x48,0x23,0x27,0xab,0x32,0x8e,0x54,0x1f,0xca,0x96,0x73,0x82,0xaf,0x46,0x09,0x73, + 0x7b,0xab,0xa2,0x3c,0xec,0x8b,0x1f,0x1a,0x95,0xa4,0xb1,0x56,0xe6,0x7b,0x3e,0xbe, + 0x9a,0xfe,0x87,0x8e,0x5c,0xb0,0x69,0xdd,0xc8,0xc8,0xf5,0xab,0xd6,0x1a,0x91,0x84, + 0xaa,0xa9,0xc5,0x61,0x92,0xd2,0x97,0xc0,0xc9,0x27,0xf3,0xaf,0x7f,0xf8,0x6f,0xe0, + 0x0d,0x22,0xca,0x25,0xd6,0x3c,0x53,0x18,0xb9,0x99,0x86,0xf8,0xad,0x5f,0xfd,0x5a, + 0x67,0x91,0xe6,0x0f,0xe2,0x6f,0xf6,0x7a,0x0e,0xf5,0xe3,0xe0,0x72,0xda,0xd8,0x9a, + 0x8a,0x14,0x91,0xf5,0x18,0xec,0xc7,0x0f,0x83,0xa7,0xcf,0x59,0xfc,0xbb,0x99,0xda, + 0x3d,0xde,0xac,0xd6,0xcd,0x77,0x04,0x72,0xac,0x7f,0xc3,0x28,0x04,0x2e,0xee,0xc0, + 0x1e,0xe7,0xe9,0x5d,0x7f,0xc3,0xad,0x02,0xf2,0x0b,0xb7,0xbb,0xd4,0x17,0xed,0x29, + 0x70,0xfe,0x5c,0xd1,0x48,0x37,0x24,0xa8,0xc4,0x97,0x0e,0x0f,0x07,0x24,0xd7,0x5d, + 0xab,0xc9,0x1d,0xeb,0x43,0x6e,0x10,0x44,0x80,0xfe,0xed,0x50,0x61,0x54,0x7b,0x28, + 0xc0,0x18,0xc7,0x15,0xd6,0xe9,0x8f,0x6f,0x63,0x66,0xbc,0x63,0xb9,0xf5,0x25,0x7a, + 0x57,0xe9,0x19,0x4e,0x51,0x0c,0x35,0x27,0x19,0xbe,0x66,0xcf,0xce,0xf3,0x1c,0xe5, + 0xd6,0x97,0x34,0x23,0x64,0x69,0xcf,0xf0,0x67,0xc2,0x2e,0xed,0xaa,0x68,0x56,0xa2, + 0x19,0x82,0x86,0xfb,0x14,0x92,0x13,0x0b,0x9e,0xfb,0x09,0xc9,0x5f,0xa6,0x71,0xe9, + 0x8a,0xf3,0x4d,0x5a,0xdb,0xc1,0x37,0x2d,0x2e,0x95,0x7b,0xa4,0x0b,0x6b,0x98,0xce, + 0xd6,0x03,0x28,0xca,0x47,0xb5,0x7a,0xf5,0xae,0xb5,0x32,0x85,0x70,0x79,0x07,0xa7, + 0xf9,0xff,0x00,0x22,0xb9,0xef,0x19,0xe9,0x96,0xfe,0x23,0x51,0xac,0xdb,0x45,0x8b, + 0xeb,0x58,0xc8,0x97,0x18,0x1e,0x6c,0x63,0x90,0x47,0xab,0x2d,0x79,0x39,0x9e,0x47, + 0x5a,0xdc,0xd4,0xa5,0x65,0xe8,0x85,0x97,0x66,0xd2,0x75,0x39,0x6b,0xb7,0x2e,0xd7, + 0x7a,0xa3,0xe6,0x6d,0x67,0xc0,0xd6,0xb1,0xbb,0x4f,0xa2,0x5c,0xec,0xea,0x56,0x39, + 0x7f,0x90,0x61,0xfd,0x6b,0xcf,0xa4,0xbe,0xbf,0xd3,0xe6,0x7b,0x6b,0xcc,0xa3,0x29, + 0xe8,0x7f,0xa1,0xef,0x5e,0xa1,0xaf,0x5d,0x11,0x16,0x63,0x6e,0x40,0xaf,0x32,0x9e, + 0xce,0xf3,0x58,0xb8,0x58,0xad,0xe3,0x79,0xa6,0x3c,0x05,0x50,0x58,0xfe,0x18,0xaf, + 0x8d,0xc5,0x61,0x6b,0x26,0xa2,0xd5,0xdf,0x91,0xfa,0x26,0x5b,0x5e,0x2e,0x2d,0xce, + 0x5a,0x79,0x9a,0x4b,0x63,0x73,0xaf,0x46,0xab,0x69,0x03,0xdc,0x4c,0xe7,0x6a,0xa4, + 0x6a,0x59,0xd8,0xfb,0x01,0xd6,0xb9,0xad,0x6a,0xcb,0x54,0xd0,0x9e,0x2b,0x5d,0x4a, + 0xda,0x7b,0x63,0x9f,0x94,0x4f,0x1b,0xc6,0x4f,0xb0,0xdc,0x06,0x6b,0xea,0x8f,0x85, + 0x1e,0x17,0xb9,0xf0,0xb5,0xe4,0x1a,0x86,0xa3,0xb0,0xce,0x53,0x28,0x17,0xe6,0x54, + 0x2d,0xd3,0x27,0xd7,0xf9,0x57,0xd4,0x17,0xfa,0x9e,0x95,0xad,0xd8,0x36,0x97,0xe2, + 0x3b,0x2b,0x6b,0xf8,0xa4,0xeb,0x1d,0xc4,0x49,0x22,0xfe,0x19,0x07,0xf4,0xaf,0x56, + 0x97,0x0f,0x62,0x55,0x38,0xd4,0x92,0xd5,0xf4,0x3e,0x57,0x1d,0xc5,0xd1,0xa1,0x8b, + 0x74,0xe9,0xc1,0x4e,0x3e,0xb6,0xfb,0xb4,0x67,0xe7,0xdf,0x80,0x35,0x03,0x70,0xd3, + 0x69,0xc4,0x8c,0xdc,0x26,0xd4,0xcf,0x69,0x17,0xe6,0x41,0xf8,0x9e,0x2b,0x6f,0x5a, + 0x98,0xba,0x72,0x39,0xe7,0x23,0xd0,0xf7,0xae,0xcb,0xe2,0x77,0xc2,0xc8,0x3c,0x2f, + 0x75,0x1f,0x88,0xfc,0x00,0x18,0xda,0xcb,0x34,0x62,0x5b,0x24,0x25,0xde,0xdd,0xd8, + 0xe1,0x4c,0x7d,0x49,0x52,0xdc,0x60,0xfd,0xd3,0xed,0xd3,0xbf,0xf0,0x8f,0x81,0xfc, + 0x3f,0xae,0xc0,0x75,0x4f,0x13,0x45,0x32,0xcf,0x27,0xcb,0x25,0x98,0x63,0x16,0xc9, + 0x07,0xdf,0xdc,0x47,0x3c,0x9e,0x40,0xe2,0xbd,0x1c,0x2d,0x1a,0xd1,0x8b,0xa2,0xe3, + 0xb1,0x86,0x23,0x1d,0x41,0xcb,0xeb,0xb0,0xf8,0x65,0xd3,0xaa,0x67,0xc6,0x5a,0xc3, + 0x63,0x76,0x46,0x7a,0xd7,0x92,0x6b,0x13,0x2a,0xb1,0x5c,0x9f,0xf0,0xaf,0xd4,0x9b, + 0xef,0x84,0x7f,0x09,0xb5,0x1c,0xb3,0x69,0xb3,0x46,0x43,0x0e,0x22,0xb9,0x93,0x07, + 0x1d,0x77,0x06,0x27,0xaf,0x7a,0xf0,0x1f,0x88,0x3f,0xb2,0xac,0x37,0xd1,0x5c,0x6a, + 0x5f,0x0f,0xf5,0x2d,0xf2,0x22,0xbc,0x82,0xc2,0xf0,0x05,0x2c,0x73,0x90,0x91,0xc9, + 0x9e,0x30,0xbc,0x0d,0xc0,0xf4,0x19,0x3c,0xe6,0xb1,0xc6,0xe1,0xb1,0x0a,0x0d,0xa8, + 0x9a,0x61,0xf8,0x83,0x09,0x57,0xdd,0xd5,0x7a,0xff,0x00,0xc0,0xb9,0xf0,0x79,0x63, + 0x82,0x6b,0xca,0x3e,0x21,0x5d,0x6d,0xd3,0xa6,0x04,0xe3,0xe5,0x35,0xec,0x5a,0xae, + 0x93,0xa8,0x68,0xb7,0x73,0xe9,0xda,0xad,0xbc,0x96,0xb7,0x56,0xcc,0x52,0x58,0xa4, + 0x1b,0x5d,0x18,0x76,0x20,0xfe,0x87,0xa1,0xed,0x5e,0x09,0xf1,0x33,0xcd,0x3a,0x6c, + 0xcc,0xbc,0x64,0x1e,0x95,0xf2,0xb9,0x8d,0x4f,0x67,0x45,0xf3,0x1c,0x19,0xbd,0x55, + 0x1a,0x13,0x97,0x91,0xf1,0x1e,0xa8,0x4b,0x5f,0x4e,0x47,0xf7,0xcd,0x41,0x67,0x19, + 0x96,0x74,0x50,0x7a,0x9a,0x7d,0xec,0x52,0x24,0xee,0x5c,0x1f,0x98,0x93,0xcd,0x6a, + 0xf8,0x6a,0xcd,0xae,0x75,0x08,0xc0,0x1f,0xc4,0x2b,0xe5,0x2b,0xd6,0x50,0xa1,0x29, + 0xdf,0x64,0x7f,0x3d,0x38,0xfb,0x4a,0xfc,0xab,0xab,0x3e,0xcc,0xf8,0x1d,0xa3,0x91, + 0x3c,0x0c,0x57,0xb8,0xff,0x00,0x3c,0x57,0xea,0x87,0x82,0x10,0x41,0x65,0x1a,0xe3, + 0x19,0x02,0xbe,0x0d,0xf8,0x23,0xa0,0x6d,0x58,0x5c,0xaf,0xa5,0x7e,0x80,0xf8,0x7e, + 0x03,0x1c,0x51,0xa0,0x04,0x0c,0x57,0xf1,0x47,0x88,0xb9,0x82,0xc4,0xe3,0xa7,0xa9, + 0xfb,0x96,0x4b,0x85,0xf6,0x58,0x68,0xa3,0xd6,0x34,0xc7,0x24,0x2e,0x3b,0x57,0x5d, + 0x6e,0x4e,0xde,0x6b,0x94,0xd2,0x60,0x66,0x55,0xcd,0x76,0x50,0xc7,0xb1,0x00,0x3f, + 0x8d,0x7e,0x59,0x29,0x5c,0xf6,0x62,0xac,0xc5,0x30,0xf3,0x9a,0x9e,0x28,0x63,0xcf, + 0x3c,0x55,0x77,0x71,0xeb,0x50,0x3d,0xd3,0xa7,0x43,0x58,0x42,0x85,0x3b,0xdd,0x9b, + 0x4a,0xb4,0xfa,0x1b,0xc2,0xce,0x06,0x5e,0xbc,0xd6,0x4d,0xc6,0x96,0x18,0x92,0xbf, + 0xa5,0x50,0x3a,0x8d,0xc6,0xec,0x2f,0x4c,0xd6,0xc5,0xa5,0xc3,0x30,0xcb,0x71,0x45, + 0x5c,0x3d,0x09,0xe8,0x95,0x87,0x4f,0x11,0x52,0x3e,0xf3,0x39,0xc9,0x21,0x9a,0xd5, + 0xb0,0xc3,0x8f,0x5a,0x96,0x39,0xb3,0xd4,0xd7,0x69,0xf6,0x38,0xae,0xd3,0x38,0xe6, + 0xb9,0xcb,0xbd,0x26,0x48,0x5c,0x94,0x1c,0x57,0x97,0x8c,0xcb,0x67,0x4f,0xde,0x5a, + 0xa3,0xd1,0xc3,0xe3,0x61,0x3d,0x25,0xb9,0x0c,0x6d,0x9e,0x95,0x7e,0x18,0x8b,0x1e, + 0x95,0x0d,0xad,0xb3,0x16,0x01,0x81,0x04,0x56,0xf4,0x50,0x84,0x03,0x34,0xb0,0x78, + 0x6b,0xea,0xf6,0x23,0x15,0x88,0x4b,0x44,0x7f,0xff,0xd0,0xe3,0x21,0xbe,0x6d,0xe4, + 0x67,0x19,0x34,0xb7,0x78,0x9d,0x39,0xe4,0x11,0xcd,0x62,0x43,0x26,0x64,0xc9,0x3d, + 0xfa,0x56,0xa1,0x90,0x6d,0xce,0x7f,0x3a,0xf8,0xac,0x7c,0x39,0xe0,0xd1,0xfe,0x9c, + 0x61,0x25,0xca,0xca,0x11,0x59,0x44,0x8f,0x92,0x3a,0xfe,0x35,0xb3,0xf6,0x88,0xa0, + 0x8f,0x19,0xed,0x9a,0xc1,0x9e,0xf3,0xcb,0x1c,0x9c,0x62,0xb9,0xeb,0xbd,0x4f,0x3f, + 0x28,0x27,0x35,0xe6,0x61,0xe5,0x18,0xc2,0xc8,0xde,0xb4,0x65,0x39,0x5c,0xde,0xbf, + 0xd6,0xc4,0x45,0x82,0x9a,0xc3,0x5d,0x7e,0x77,0x7d,0xa1,0xf8,0xcd,0x73,0xf3,0xca, + 0xd3,0x37,0x3c,0xd4,0x70,0x44,0xd9,0x18,0xef,0xc5,0x53,0xbc,0x99,0x50,0x8a,0x89, + 0xdb,0x47,0x30,0xba,0x4f,0x98,0x83,0x5c,0xc6,0xbb,0xa3,0xc7,0x2c,0x44,0xa8,0x19, + 0x39,0xad,0x3b,0x5d,0xe9,0x8c,0x55,0xe9,0xff,0x00,0x7a,0xb8,0x3d,0x87,0xf9,0xe2, + 0xbc,0x7c,0x5c,0x65,0x4e,0xaf,0x32,0x0c,0x46,0x0e,0x96,0x2a,0x8b,0xa7,0x34,0x78, + 0x04,0x9e,0x11,0xdf,0x7a,0x24,0x0b,0xdf,0x91,0x8a,0xf6,0x4f,0x0e,0xe8,0x31,0xc3, + 0x00,0xca,0xe7,0x8e,0x46,0x3a,0x55,0xe8,0xac,0x61,0x66,0xce,0x39,0xf5,0xae,0xa6, + 0xdf,0x52,0xd2,0xb4,0xeb,0x71,0x0b,0x28,0x69,0x1c,0x63,0x19,0xe9,0xf8,0x0a,0xf6, + 0xbe,0xbc,0xdd,0x35,0x2a,0x8f,0x44,0x7c,0x46,0x4d,0xc0,0x98,0x6c,0x1e,0x26,0x75, + 0x68,0xc3,0x56,0x79,0xaf,0x8b,0x2d,0xed,0xe1,0x81,0x95,0x54,0x64,0x82,0x2b,0xe4, + 0xdf,0x12,0x47,0x8b,0x97,0x0b,0xc0,0xcd,0x7d,0x65,0xe3,0x18,0x9b,0x69,0x99,0x79, + 0x46,0x19,0x07,0xaf,0x15,0xf2,0xff,0x00,0x88,0xa2,0xcd,0xc1,0x6f,0x7c,0xfd,0x6b, + 0x7c,0xb2,0xa7,0x3e,0x21,0x48,0xfc,0x8f,0xc7,0x3b,0x51,0xc1,0xfb,0x3b,0x59,0x9c, + 0x6c,0x09,0xf3,0x73,0x5d,0x55,0x9a,0x63,0x19,0xeb,0xc5,0x61,0x47,0x19,0xce,0x6b, + 0x76,0xd3,0x77,0x5a,0xfa,0xbc,0x74,0xed,0x4e,0xe7,0xf2,0x5b,0x95,0xb7,0x3a,0x7b, + 0x6d,0x98,0xc6,0x7b,0x1a,0xc2,0xd5,0xf9,0x46,0x03,0xf0,0xf7,0xad,0x58,0x88,0xdb, + 0x9e,0xd5,0x9b,0xa9,0x65,0x90,0x90,0x2b,0xe5,0x25,0x3b,0xcc,0x7b,0x9e,0x53,0x7f, + 0x06,0x64,0x3e,0xf9,0xad,0x4d,0x1e,0xc8,0x96,0x0c,0x7a,0xfb,0x54,0xb7,0x56,0xd9, + 0x97,0xd4,0x9a,0xe8,0x74,0x6b,0x5f,0x9c,0x64,0x1e,0x3d,0xab,0xd1,0x8c,0xbd,0xcd, + 0x46,0xd9,0xd8,0xe9,0x76,0x0a,0x63,0x1f,0xa5,0x6c,0xcd,0x6a,0x22,0x88,0x9c,0x73, + 0x5a,0xda,0x4d,0x89,0x64,0x0d,0x8e,0x98,0xe2,0xae,0xea,0x10,0x08,0xd1,0xb2,0x3b, + 0x57,0x02,0xa6,0x9c,0xb5,0x0e,0x63,0xc7,0xf5,0x34,0xda,0xe7,0x6e,0x2a,0x4d,0x1e, + 0x46,0x59,0x83,0x67,0x1c,0xd3,0xf5,0x72,0x15,0xd8,0x77,0xaa,0x9a,0x4b,0x13,0x38, + 0x00,0x67,0x9f,0xd2,0xbb,0x15,0x15,0xcb,0xa0,0x5d,0xa3,0xdd,0xf4,0xab,0xe9,0x05, + 0xb0,0x19,0xc7,0x02,0xb9,0x3f,0x13,0x6a,0xf2,0x6d,0x61,0xbb,0xaf,0x15,0x72,0xde, + 0x72,0x96,0xb9,0xce,0x38,0xae,0x23,0x5a,0x73,0x21,0x6c,0xfb,0xf5,0xae,0x37,0x46, + 0x37,0xd4,0xb8,0xcd,0xad,0x51,0xc0,0xdd,0x5c,0xcd,0x2d,0xc9,0x24,0x9e,0xbf,0x9d, + 0x6d,0x5a,0x48,0xc6,0x30,0x5f,0x93,0xdf,0xe9,0x59,0x52,0x42,0x0c,0xa5,0xbd,0x4d, + 0x6b,0x5b,0xc6,0x11,0x33,0xfa,0x9a,0xe5,0xcc,0x30,0xca,0x29,0x4a,0x27,0xf4,0x2f, + 0x85,0xdc,0x51,0xcb,0x6c,0x3c,0xe4,0x6a,0x24,0xa4,0x63,0xff,0x00,0xd7,0x4e,0x32, + 0x8e,0xa2,0xb3,0x84,0x98,0x24,0xd3,0x8c,0x87,0xbd,0x79,0x51,0x82,0xb9,0xfd,0x05, + 0xfd,0xa0,0x9c,0x6d,0x72,0xef,0x99,0xc6,0x0f,0x4a,0x42,0xe4,0xf1,0x9e,0xbd,0xaa, + 0x88,0x93,0x1d,0x0f,0x4a,0x7e,0xfc,0xf3,0x56,0xd5,0x8e,0x59,0xe2,0xae,0x4a,0x5f, + 0x03,0x19,0xa6,0x19,0x08,0x18,0x1f,0x9d,0x44,0xcd,0xc7,0xa1,0x1d,0xea,0x02,0xc0, + 0x1a,0xd1,0x32,0x21,0x89,0x77,0xd4,0xb6,0x24,0xea,0x3f,0x1a,0xb9,0x1c,0xc7,0x1e, + 0xb5,0x8e,0xcd,0x8e,0x86,0x84,0x9b,0x07,0x8a,0xb8,0x49,0xec,0x6a,0xf1,0x16,0x36, + 0xda,0x40,0x46,0x33,0xd2,0x99,0xbf,0x1d,0x2b,0x3d,0x67,0xc1,0x1c,0x8e,0x69,0xe5, + 0xce,0x32,0x3a,0x56,0x8c,0x23,0x8a,0x4b,0x76,0x3e,0x69,0x38,0xce,0x41,0x35,0x83, + 0x76,0x39,0x24,0x74,0xad,0x17,0x62,0x4f,0x1c,0x55,0x09,0xd4,0xb1,0xae,0x66,0xb5, + 0x37,0x96,0x26,0x2e,0x37,0x66,0x79,0x93,0x6a,0x92,0x7f,0x5f,0x6a,0xe3,0xb5,0xdb, + 0xaf,0x90,0x80,0xde,0xb5,0xd2,0x5e,0xc8,0x62,0x43,0xec,0x2b,0xcd,0x35,0x9b,0xbd, + 0xe4,0x8c,0xfe,0x55,0xed,0x65,0x34,0x39,0xa6,0x99,0xf9,0x57,0x88,0xb9,0xdc,0x29, + 0xe0,0xe5,0x04,0xce,0x5e,0x66,0x2f,0x21,0x62,0x7a,0xfe,0x75,0x18,0xa0,0x9c,0xf3, + 0xeb,0xda,0x8a,0xfb,0x64,0xb4,0x47,0xf2,0x94,0xe7,0xcd,0x27,0x26,0x1f,0x53,0xcd, + 0x49,0x12,0x97,0x95,0x53,0xa9,0x26,0xa3,0xae,0xef,0xe1,0xcf,0x86,0xdb,0xc4,0xfe, + 0x2c,0xd3,0xf4,0x9c,0x12,0x93,0x4c,0xbe,0x61,0x03,0xa4,0x63,0xe6,0x73,0xf9,0x0c, + 0x7d,0x4d,0x6b,0x4a,0x9c,0xaa,0x4d,0x42,0x3b,0xb3,0x6c,0x26,0x1e,0x55,0xeb,0x42, + 0x94,0x37,0x6c,0xfd,0x3d,0xfd,0x9a,0xe5,0x93,0xc2,0x9f,0x0c,0x2c,0x63,0x28,0x52, + 0xf3,0x59,0x32,0x88,0xf2,0x3e,0xec,0x0e,0x73,0x23,0xfd,0x4a,0xe0,0x0f,0xad,0x7d, + 0x41,0xa2,0xde,0x18,0xc0,0x1d,0x30,0x3f,0x4a,0xf0,0x7d,0x2d,0xed,0x93,0x57,0xb3, + 0xd3,0xec,0xd3,0x6c,0x5a,0x65,0x92,0xc3,0xb7,0xa0,0x05,0x8e,0x78,0x1f,0x42,0x2b, + 0xb9,0xba,0xd5,0x0d,0x95,0xb8,0x48,0xdb,0xf7,0xd2,0x1d,0xaa,0x2b,0xf4,0xec,0x46, + 0x1f,0xf7,0x70,0xc3,0xc7,0x68,0xa4,0x8f,0xe8,0x9c,0xbb,0x05,0x1a,0x70,0x85,0x35, + 0xdb,0xf2,0x3e,0x8f,0xf0,0xed,0xfd,0xbc,0xce,0xfa,0x86,0x15,0x7e,0xce,0xa4,0x19, + 0x31,0xd4,0x2f,0x38,0x2d,0xe9,0x5e,0x45,0x71,0xf1,0x46,0xfb,0x51,0xf1,0x24,0xd7, + 0x50,0x33,0x7d,0x9f,0x79,0x8e,0x18,0xc1,0xc0,0x08,0x0e,0x37,0x1f,0x76,0xc6,0x7e, + 0x94,0xcd,0x4b,0x55,0x9f,0x4f,0xf0,0x8c,0x1a,0x65,0xb9,0x2b,0x25,0xc6,0x7c,0xc2, + 0x0f,0x3b,0x40,0xcb,0x73,0xee,0x70,0x2b,0xcb,0xb4,0x60,0x23,0xb8,0xd8,0xb9,0xf3, + 0x19,0xb3,0xcf,0x5f,0xc3,0xde,0xbe,0xa2,0x84,0x3d,0x8d,0x38,0x50,0x8e,0xc8,0xee, + 0xa7,0x86,0x8c,0xa5,0x29,0xc9,0x5f,0xa2,0x3e,0xad,0xd0,0x3c,0x41,0x3c,0xa5,0x6e, + 0xda,0x4f,0x27,0x9c,0xf5,0xc0,0xcf,0x71,0xef,0x5e,0xed,0xa4,0x78,0x84,0xdc,0x5a, + 0x30,0x69,0x41,0x59,0x06,0xcd,0x8c,0x32,0xac,0xbd,0xc1,0xc8,0xc6,0x3e,0xb5,0xf2, + 0x3e,0x97,0x3a,0xba,0x21,0x95,0xc6,0x62,0xc2,0xe7,0x1c,0x8c,0x9e,0x80,0x77,0xf6, + 0xef,0x5e,0x97,0x75,0xae,0x4d,0xa3,0xe9,0x90,0xda,0x16,0x6d,0xd3,0x65,0xbc,0xb1, + 0xc6,0x09,0x1c,0x67,0xf0,0xae,0x9a,0x95,0x23,0xcb,0x6a,0x8a,0xfe,0x47,0xcf,0x63, + 0x70,0xd2,0x9d,0x45,0xc8,0xed,0xfa,0x17,0x35,0xef,0x09,0x78,0x3a,0x0f,0x12,0xff, + 0x00,0x6b,0xe9,0x11,0x85,0x94,0x82,0xd2,0xc0,0xb8,0xfb,0x38,0x97,0x3c,0x3a,0x8e, + 0xdf,0xee,0xf4,0xcf,0x35,0x73,0xed,0x91,0x47,0x01,0x25,0xb9,0x2d,0xb4,0x13,0xdc, + 0x8e,0x2b,0x88,0x6d,0x52,0x08,0xd7,0xce,0xdf,0x99,0x1b,0x00,0x67,0x8e,0x71,0xc5, + 0x47,0xfd,0xa7,0x0f,0x92,0x76,0xe4,0x30,0xc7,0x1d,0x46,0x7b,0x9c,0x1a,0xe6,0xa1, + 0x42,0x9d,0x04,0xfd,0x9c,0x6d,0x72,0x6b,0xba,0xb5,0xb9,0x55,0x49,0x37,0x6d,0x8e, + 0xad,0xb5,0x46,0xfb,0x69,0x0c,0x78,0x8c,0x05,0x1c,0xfa,0xf3,0x9f,0xe5,0x5a,0x52, + 0xf8,0x9a,0x28,0xe1,0x8a,0xdc,0xb6,0xd2,0xf2,0x7f,0x16,0x31,0x85,0xef,0xef,0x5e, + 0x4b,0x7b,0xa8,0x3c,0x73,0x47,0x87,0xf9,0x9d,0x77,0x63,0xb7,0xcd,0xd3,0x26,0xb2, + 0x6f,0xaf,0xee,0xa6,0x98,0x42,0xfc,0x05,0xc2,0xa0,0x07,0xd3,0x96,0x35,0xa3,0xc4, + 0xc6,0x3b,0x9b,0xe1,0x72,0xc7,0x5a,0xcf,0xa1,0xef,0x43,0xc4,0xe3,0xcc,0x11,0xc2, + 0xd9,0x40,0x30,0xed,0x9e,0xc3,0xde,0xba,0xad,0x1b,0xc4,0x70,0x4c,0xeb,0x14,0x07, + 0xe6,0x1c,0xe7,0x19,0x24,0x1f,0x73,0xc0,0xaf,0x9a,0x22,0x9d,0x91,0x17,0x6b,0xb2, + 0xc3,0x80,0x4e,0x39,0x2e,0x7d,0xab,0xa5,0xb1,0xd6,0x99,0x66,0x8d,0xa0,0xf9,0x14, + 0x10,0x39,0xfb,0xa3,0xff,0x00,0xaf,0x5d,0x54,0x31,0x31,0x9a,0xd7,0x62,0x31,0x39, + 0x3c,0xa1,0xf0,0x9e,0x95,0xaa,0xf8,0x43,0x4a,0xd5,0x75,0x87,0x93,0x7b,0xc4,0x8f, + 0x97,0x78,0xd3,0x90,0xc4,0x9e,0x76,0x37,0x6f,0x53,0xd7,0xda,0xbb,0x0d,0x17,0xc3, + 0xf6,0x9a,0x3c,0x65,0x74,0xc8,0x16,0x10,0x46,0xd9,0x18,0x0f,0x99,0x87,0x7d,0xcd, + 0xd7,0x06,0xb8,0xdb,0x5d,0x56,0x6b,0x89,0xa1,0x9e,0x12,0x24,0x31,0x70,0xcc,0x4f, + 0x18,0x3d,0xbf,0x1f,0x6a,0xee,0x2f,0xbc,0x5e,0x4d,0xb2,0xc5,0xb3,0x09,0x12,0xf0, + 0xa7,0xef,0x0e,0x39,0x53,0x8f,0xcc,0x57,0x22,0xa3,0x46,0x8c,0xdc,0x94,0x0e,0x6c, + 0x6e,0x27,0x19,0x52,0x9c,0x29,0xc1,0xdd,0x3d,0x1a,0x2d,0xce,0x20,0xb0,0xb5,0xf3, + 0x41,0x07,0x61,0x3b,0x0e,0x72,0x09,0x3f,0xe7,0xad,0x71,0x9f,0xf0,0x99,0x79,0xf3, + 0xb7,0xce,0x77,0x44,0x49,0xc7,0x4c,0x8a,0xe4,0xf5,0xbf,0x15,0xca,0x85,0xe0,0xb7, + 0x38,0x88,0x8c,0xe3,0xae,0x7b,0xfe,0x15,0xe6,0xed,0xaa,0x6f,0x98,0x96,0x23,0x39, + 0x20,0xe3,0xb8,0x6e,0xff,0x00,0x9d,0x74,0xc2,0xbc,0x5b,0xba,0x0c,0x1e,0x55,0x24, + 0x9c,0xaa,0x2d,0x4f,0x79,0xb2,0xd7,0x2e,0xda,0x58,0x24,0x47,0xcb,0x5c,0xce,0xb1, + 0xaf,0x7e,0x09,0xdc,0x71,0x5d,0x15,0xa6,0xa1,0xb2,0x6d,0x5c,0xbb,0x03,0xfb,0xd0, + 0xf9,0x3d,0x72,0x46,0x09,0xfd,0x2b,0xc9,0x7c,0x2f,0x74,0xf1,0xea,0x1a,0x6c,0x12, + 0x37,0x99,0x1a,0xab,0x4d,0xc0,0xe5,0x58,0x1c,0x03,0x5b,0xe7,0x55,0x54,0xbb,0xbe, + 0x90,0x2e,0x4c,0x91,0xab,0x0c,0xe0,0x67,0x39,0xc5,0x5f,0x34,0x39,0xb9,0x98,0xab, + 0xa6,0xef,0x4d,0x6c,0x75,0x71,0x78,0xa6,0x1b,0x6d,0x40,0x09,0x59,0x42,0x92,0x00, + 0x5c,0x9e,0x73,0xde,0xb7,0x5f,0x5f,0x17,0x20,0x0b,0x66,0xe4,0xf0,0x31,0xe9,0xeb, + 0xf8,0xd7,0xcf,0x77,0xa6,0x4f,0x3d,0x27,0x57,0x39,0x52,0x73,0x8f,0xe9,0x5d,0xa6, + 0x93,0xa9,0x18,0xd1,0x5b,0x6f,0x1d,0x71,0xcf,0xcc,0x7d,0x49,0xac,0xe7,0x88,0x83, + 0x7a,0x9c,0xf5,0xf2,0xe9,0xf2,0xa9,0x53,0x0f,0x8b,0x3f,0x0e,0xac,0xfe,0x22,0xe8, + 0xbb,0xd5,0x52,0x3d,0x66,0xd2,0x3f,0xf4,0x4b,0xae,0x9b,0xf1,0xc9,0x86,0x52,0x3a, + 0xab,0x1e,0x84,0xe4,0xa9,0xe4,0x77,0xaf,0xca,0xcf,0x88,0x7e,0x18,0xbc,0xb7,0x86, + 0xef,0x4e,0xbe,0x85,0xa1,0xb9,0xb7,0x66,0x8e,0x58,0xdc,0x61,0x95,0x97,0xa8,0x3f, + 0xe7,0x9e,0xd5,0xfb,0x0c,0xba,0x83,0xcb,0x08,0xc7,0xca,0xaa,0x79,0x19,0xc7,0xff, + 0x00,0xae,0xbe,0x60,0xfd,0xa1,0x7c,0x17,0x6f,0xae,0x69,0x2f,0xe2,0x8b,0x68,0xc2, + 0xdd,0x5b,0x00,0x97,0x4a,0xa3,0x99,0x21,0x1d,0x1c,0xfb,0xc7,0xff,0x00,0xa0,0xfd, + 0x2b,0xf3,0xee,0x38,0xca,0x5d,0x5c,0x14,0xf1,0x18,0x55,0xef,0x45,0x5e,0xdd,0xd1, + 0xc7,0x88,0xc5,0x55,0xfa,0xad,0x4a,0x32,0xd4,0xfc,0x43,0xf1,0x4f,0x87,0x9a,0xd6, + 0x36,0x7d,0xa4,0x10,0x6a,0xdf,0xc3,0x3d,0x20,0xdd,0x6a,0x51,0xee,0x5e,0x37,0x57, + 0xb1,0x7c,0x43,0xd1,0xd0,0x46,0xc9,0x1a,0x8e,0xb5,0x5f,0xe1,0x6e,0x82,0x63,0xd4, + 0xe3,0xca,0xf1,0xb8,0x57,0xf3,0xee,0x6f,0x9b,0x72,0x65,0x75,0x24,0xd9,0xf9,0xee, + 0x4b,0x86,0x8d,0x5c,0x6c,0x2e,0x7e,0x83,0xfc,0x1e,0xf0,0xf6,0xcb,0x58,0x4e,0xde, + 0xc2,0xbe,0xbf,0xd2,0x34,0xa2,0x36,0x2e,0x2b,0xc8,0x7e,0x15,0xe9,0xa9,0x15,0x94, + 0x38,0x03,0x80,0x2b,0xe9,0xad,0x3a,0xde,0x28,0xd4,0x31,0x1d,0x85,0x7f,0x14,0x67, + 0x78,0x97,0x5b,0x15,0x39,0x48,0xfd,0xd6,0x9c,0x39,0x20,0xa2,0x8d,0x5b,0x0b,0x35, + 0x86,0x30,0x48,0xed,0x57,0x5d,0xc6,0x30,0x2a,0x8c,0xb7,0xaa,0xa3,0x6a,0x1e,0xdd, + 0xaa,0x01,0x72,0x18,0x0c,0x1a,0xf9,0xaa,0xb3,0xd6,0xc8,0xe8,0xa7,0x1b,0xea,0xcb, + 0x12,0x39,0x03,0x35,0x54,0xbe,0x4d,0x24,0xaf,0xf2,0x8c,0x54,0x6a,0xc4,0x9a,0x22, + 0xd2,0x45,0x72,0x17,0x21,0x40,0x5b,0x38,0xcd,0x5f,0x1f,0x29,0x18,0xe2,0xaa,0x42, + 0xa7,0x8a,0x9b,0x77,0xcc,0x41,0xea,0x2b,0x09,0x4a,0xec,0xa7,0x1d,0x2c,0x74,0x56, + 0x53,0x6d,0x20,0x1e,0x9e,0xb5,0xb6,0x23,0x8e,0x75,0xc3,0x57,0x31,0x6a,0xdc,0xfa, + 0xd6,0xfd,0xbc,0x98,0x00,0x1a,0xef,0xa1,0x89,0xbf,0xbb,0x2d,0x8e,0x0a,0xf4,0x9c, + 0x75,0x88,0x8d,0x62,0x89,0xc8,0xfd,0x2a,0xa4,0x83,0xb1,0xad,0xcd,0xc1,0x87,0x35, + 0x99,0x71,0x1e,0xd2,0x58,0x56,0x78,0x9a,0x6a,0x1e,0xf4,0x76,0x22,0x8d,0x56,0xdd, + 0xa4,0xcf,0xff,0xd1,0xf1,0x88,0x6f,0x30,0xf8,0xcf,0x7e,0xf5,0xac,0xb7,0x25,0xa3, + 0x35,0xc7,0x23,0x1d,0xd9,0x15,0xb9,0x09,0xf9,0x06,0x6b,0xe3,0x6a,0x2b,0xa6,0x8f, + 0xf4,0xce,0x13,0x5a,0x58,0xa7,0x7f,0x2b,0x63,0x9e,0x95,0xcb,0xcb,0x31,0x12,0x73, + 0xd3,0xa5,0x74,0x1a,0x83,0x0c,0x1a,0xe5,0x64,0x7f,0x9a,0xbc,0x18,0x46,0xd5,0x1a, + 0x3d,0x47,0x2b,0xc2,0xe5,0xe8,0xd8,0xb1,0xad,0xfb,0x38,0xc1,0xea,0x3f,0xc8,0xae, + 0x6e,0xd9,0xba,0x7a,0x66,0xba,0x6b,0x37,0x0a,0xa5,0xbd,0xab,0xd5,0xa1,0x05,0xb9, + 0xc1,0x39,0xea,0x6a,0xed,0x54,0x8c,0xd6,0x75,0xcd,0xc0,0x89,0x4b,0x74,0xa9,0x65, + 0xb8,0xf9,0x33,0xd3,0xb9,0xcf,0x6a,0xe6,0xa4,0x99,0xf5,0x0b,0xd1,0x6f,0x1f,0xdd, + 0xcf,0x5f,0xe7,0x5c,0x78,0xd8,0xa6,0xee,0xd1,0xd3,0x87,0xbf,0x43,0xa0,0xb4,0xbb, + 0x02,0xd6,0x5b,0xb9,0x86,0x15,0x47,0xcb,0x5c,0x9a,0x5e,0x79,0xd3,0x34,0xd9,0x24, + 0x13,0xc5,0x6b,0x78,0x87,0x50,0x45,0x8a,0x2d,0x07,0x4c,0x4f,0x32,0x56,0xc0,0x21, + 0x39,0x3f,0xa5,0x7a,0x4f,0x83,0x3e,0x03,0x78,0x87,0x56,0xb5,0x4d,0x43,0x57,0x99, + 0x34,0xf8,0x58,0x06,0x0a,0xfc,0xc8,0x41,0xff,0x00,0x64,0x74,0xaf,0x27,0x11,0x85, + 0xaf,0x88,0x92,0xc3,0xe1,0xa3,0xcd,0x6d,0xed,0xfe,0x67,0xb1,0x43,0x17,0x87,0xc2, + 0x41,0xd6,0xc4,0x4a,0xd7,0xdb,0xfe,0x18,0xe2,0x6d,0x9a,0x0b,0xfb,0x49,0x2c,0xa7, + 0xc6,0xe6,0xfb,0xa4,0xf3,0x83,0x5f,0x38,0xf8,0xdf,0x43,0xb9,0xd2,0xee,0xd8,0x49, + 0x1f,0xc8,0x4e,0x01,0xc5,0x7d,0x57,0xf1,0x0f,0xc2,0x1f,0xf0,0x82,0xea,0x90,0xc1, + 0x6b,0x3b,0x4f,0x0c,0x8a,0x08,0x72,0x31,0xcf,0x70,0x6b,0xcf,0x7c,0x41,0x6b,0x6d, + 0xe2,0x2d,0x2c,0xc7,0x3a,0x83,0x32,0x8e,0x18,0xf7,0xf6,0xff,0x00,0x0a,0x8c,0xb7, + 0x1b,0x2c,0x16,0x2b,0xd9,0x62,0x15,0xad,0xa1,0xf9,0xc7,0x8a,0xdc,0x07,0x1e,0x29, + 0xca,0x1d,0x6c,0x03,0xfd,0xe2,0x57,0x5e,0x7e,0x47,0xca,0x22,0x3c,0xb6,0x2b,0x6a, + 0xd9,0x06,0x00,0x23,0xdb,0x14,0xeb,0xdd,0x2e,0x5b,0x0b,0xc6,0x82,0x41,0x8c,0x64, + 0x0f,0x71,0x5a,0x76,0x96,0x8c,0xe4,0x05,0x52,0xc7,0xdb,0xff,0x00,0xad,0x5f,0xa2, + 0xe2,0xa7,0x19,0xd2,0x52,0x4f,0x43,0xfc,0xef,0xc7,0x60,0xab,0xe1,0xb1,0x13,0xc3, + 0x56,0x83,0x53,0x8b,0xb3,0x5d,0x6e,0x4d,0x0c,0x59,0x03,0xda,0xab,0xde,0xc0,0x59, + 0x0f,0x1f,0x4a,0xea,0x22,0xd3,0xa6,0x44,0x25,0xe2,0x60,0x3e,0x86,0xa9,0x5e,0xdb, + 0xe2,0x33,0xc7,0x6f,0xff,0x00,0x5d,0x7c,0xf6,0x92,0x96,0x86,0x1e,0xce,0xa4,0x74, + 0x94,0x59,0xe6,0x17,0x10,0x11,0x2e,0x4f,0x63,0xc7,0x6a,0xe9,0x34,0x68,0x81,0x75, + 0xaa,0x77,0x71,0x7c,0xc7,0x3d,0x3a,0x56,0x9e,0x92,0x76,0x9c,0x70,0x6b,0xbe,0xd6, + 0x86,0xa2,0xdf,0x4b,0x1e,0xb3,0xa6,0x91,0x14,0x4a,0x07,0xa0,0xef,0x59,0xfa,0xed, + 0xd0,0x8e,0x33,0xcf,0x4e,0xd4,0xb6,0x73,0xa2,0xc5,0xc7,0x04,0x0a,0xe7,0x35,0xeb, + 0xad,0xd1,0xb0,0xfc,0xbd,0x73,0x5e,0x7c,0x27,0x79,0x8e,0x2a,0xda,0x1e,0x5b,0xae, + 0x5f,0xb3,0xcc,0x40,0xeb,0xfe,0x35,0x7b,0xc3,0xeb,0xf3,0x06,0x3d,0x6b,0x53,0xc3, + 0x9e,0x09,0xd5,0x3c,0x65,0xac,0x0b,0x0d,0x3d,0x72,0xec,0x4e,0x33,0xc0,0xfc,0xcf, + 0x4a,0xe9,0x35,0xcf,0x04,0xea,0xde,0x05,0xbf,0x16,0x1a,0xbc,0x7b,0x18,0x8e,0x0f, + 0xad,0x7a,0xb0,0x9d,0x34,0xb9,0x6f,0xb9,0xea,0xcb,0x21,0xcc,0x1e,0x09,0xe6,0x1e, + 0xc5,0xfb,0x25,0xf6,0xad,0xa1,0xa8,0x24,0x0b,0x6f,0xd7,0xb7,0xe1,0x5c,0x4e,0xab, + 0x70,0x32,0x79,0xad,0x29,0xef,0x88,0x8b,0x19,0xfc,0x33,0x5c,0x4e,0xa1,0x76,0xce, + 0xf8,0xcf,0x26,0xb9,0x66,0xd2,0x67,0x94,0xb6,0x23,0xf3,0x83,0x49,0xe9,0x8a,0xd0, + 0x17,0x20,0x26,0xde,0xbf,0xfd,0x7a,0xe5,0x9a,0x71,0x17,0x23,0xef,0xd3,0x52,0xe5, + 0x8b,0x8e,0x78,0xae,0x4c,0x42,0xe7,0x56,0x3d,0xec,0x8b,0x32,0x9e,0x13,0x13,0x19, + 0xa7,0xa1,0xd4,0x09,0x32,0x06,0x29,0xdb,0x8f,0x4a,0xca,0x86,0x70,0xd8,0xc1,0xab, + 0xc1,0xb7,0x7f,0x9c,0xd7,0x9f,0xec,0xad,0xa3,0x3f,0xa8,0xf2,0x3c,0xfa,0x9e,0x2b, + 0x0f,0x19,0x73,0x6a,0x4e,0x1f,0x27,0x07,0xff,0x00,0xd5,0x53,0x8e,0x9c,0x63,0xda, + 0xa9,0x0e,0xbc,0xfe,0x35,0x6e,0x33,0xd8,0xd4,0xce,0x16,0x5a,0x1f,0x49,0x43,0x10, + 0xa4,0xec,0x31,0xc9,0x19,0x07,0xb7,0x5a,0xaa,0xd2,0x11,0xd4,0xd5,0xc9,0x3a,0x63, + 0x39,0xac,0xd9,0xb2,0x3b,0xf5,0xa5,0x18,0xab,0x6a,0x4d,0x5a,0xbc,0x92,0xb8,0xef, + 0x30,0x90,0x30,0x7f,0xfa,0xd9,0xa4,0xdf,0xcf,0xf5,0xaa,0x2d,0x25,0x33,0xcd,0xad, + 0x52,0xe8,0x4b,0xc6,0x68,0x7a,0x0f,0x81,0x74,0xbd,0x3b,0x5e,0xf1,0x35,0x8e,0x97, + 0xaa,0xdc,0x0b,0x6b,0x59,0xe6,0x44,0x92,0x42,0x70,0x00,0x66,0x00,0x93,0xf4,0xeb, + 0x5f,0xb0,0x9a,0x6f,0xec,0x73,0xfb,0x39,0xf8,0x8f,0xc2,0xf0,0xc1,0xa6,0xeb,0x8c, + 0xba,0x88,0x41,0xba,0x60,0x54,0x2b,0x36,0x3b,0x0c,0xe7,0x1f,0x8d,0x7e,0x1e,0xc7, + 0x75,0x24,0x52,0x07,0x8d,0xb6,0xb2,0x9e,0x08,0xeb,0x5e,0xe1,0xe0,0xef,0x8d,0x5e, + 0x29,0xd0,0x02,0xc1,0xf6,0xc9,0x0c,0x6a,0x00,0x1f,0x31,0xc8,0x02,0xbc,0x9c,0xe2, + 0x8e,0x2e,0x54,0xff,0x00,0xd9,0xa2,0x9f,0x7b,0xdd,0x3f,0x95,0x99,0xf9,0xb7,0x1b, + 0x4b,0x36,0x9a,0x55,0xf2,0xca,0x8f,0xdd,0xde,0x29,0xda,0xfe,0x7e,0x67,0xdb,0xbe, + 0x29,0xff,0x00,0x82,0x7e,0xde,0xac,0xce,0xfe,0x13,0xd7,0xad,0xee,0xd0,0x13,0xb5, + 0x59,0x80,0x6f,0xd6,0xbc,0x2f,0xc4,0x9f,0xb1,0x6f,0xc6,0x1d,0x11,0x59,0x93,0x4d, + 0x37,0x2a,0x3a,0x34,0x43,0x77,0x03,0xe9,0x9a,0xeb,0x3c,0x31,0xfb,0x4b,0x6b,0x08, + 0x63,0x69,0x6e,0x9d,0xb1,0x8f,0x98,0x37,0x4f,0xad,0x7d,0x35,0xe1,0x6f,0xda,0x96, + 0xfc,0xc6,0xa8,0xf7,0x82,0x50,0x07,0xdd,0x6a,0xf0,0x70,0xb5,0xb1,0x7c,0xfc,0xb5, + 0x1b,0x5f,0x73,0xfc,0xd7,0xea,0x7e,0x55,0x4f,0xc5,0x5c,0xef,0x08,0xfd,0x8e,0x27, + 0x56,0xbb,0xa3,0xf2,0x37,0xc7,0x9f,0x0a,0x7e,0x20,0x78,0x68,0x3a,0x6a,0x3a,0x35, + 0xd4,0x7b,0x73,0xc8,0x8c,0x91,0xc7,0xeb,0x5f,0x33,0xea,0xb6,0xd7,0x70,0xce,0xd1, + 0xcf,0x13,0xc6,0xc0,0xf2,0x19,0x48,0x23,0xf0,0x35,0xfd,0x30,0x59,0x7c,0x73,0xf0, + 0x9f,0x89,0x63,0x10,0x78,0x87,0x4e,0xb6,0xb9,0x56,0xe1,0xbc,0xc4,0x56,0xcf,0xe7, + 0x5c,0xc7,0x89,0x3e,0x07,0xfe,0xcd,0x9f,0x15,0x50,0x9b,0x9d,0x36,0x1b,0x0b,0x99, + 0x7f,0x8e,0x1c,0x2e,0x09,0xf6,0xaf,0xb2,0xca,0xb3,0xb9,0xd0,0xd1,0xc1,0x3f,0xc1, + 0xfe,0xa7,0x89,0x9d,0xf1,0xa4,0xb3,0x64,0x95,0x56,0x91,0xfc,0xd6,0x11,0x8c,0x52, + 0x62,0xbf,0x67,0x7e,0x27,0xff,0x00,0xc1,0x33,0xad,0x66,0x82,0x4d,0x4b,0xe1,0xa6, + 0xac,0x93,0x0e,0x59,0x60,0x73,0xc9,0xf6,0xe4,0xff,0x00,0x5a,0xfc,0xd6,0xf8,0x93, + 0xfb,0x3f,0x7c,0x4a,0xf8,0x63,0x7b,0x2d,0xb7,0x88,0x74,0x99,0x92,0x38,0xc9,0x02, + 0x55,0x52,0x50,0x81,0xdf,0x35,0xf6,0x18,0x5c,0xf7,0x0b,0x59,0xa8,0xb7,0xca,0xfc, + 0xff,0x00,0xcf,0x63,0xe7,0x9c,0x6d,0xa9,0xe1,0xb8,0xcf,0x4e,0x6b,0xec,0x6f,0xd9, + 0x6b,0xc2,0x4f,0x75,0xa8,0x5d,0xf8,0x8e,0x64,0xf9,0x21,0x51,0x0c,0x6c,0xdd,0x32, + 0xd8,0x77,0x3f,0x80,0x02,0xbe,0x43,0x8e,0x26,0x12,0x84,0x75,0xdb,0x83,0xce,0x7f, + 0x5a,0xfd,0x2c,0xf8,0x73,0x62,0x3c,0x29,0xf0,0xce,0x36,0x8f,0xe4,0x95,0x6c,0xc1, + 0x62,0x07,0xfc,0xb5,0xba,0x20,0xb1,0xe9,0xfe,0xd6,0x3f,0x0a,0xfb,0x9e,0x1a,0xa3, + 0x19,0xe3,0x15,0x49,0x6d,0x05,0x73,0xec,0xb8,0x23,0x03,0xed,0xb1,0xae,0xaf,0xf2, + 0xaf,0xc5,0xe8,0x7a,0x2f,0x86,0x75,0x56,0xbc,0xd5,0xb5,0x0b,0xf9,0x08,0x26,0x59, + 0x31,0x91,0xe8,0x3e,0xee,0x3e,0x8a,0x05,0x75,0xfa,0x5c,0xa7,0x57,0xd7,0x24,0xdc, + 0x73,0x14,0x03,0x68,0xf7,0x23,0xa9,0xaf,0x12,0xf0,0xc6,0xa8,0x2c,0x6d,0x6e,0x24, + 0x6e,0xa0,0x33,0x0f,0xa8,0x18,0x15,0xeb,0xbe,0x00,0x57,0x5b,0x59,0x2f,0x1b,0x3b, + 0xb6,0xb3,0x1f,0x5c,0x9a,0xfb,0xec,0x0b,0xe7,0x9a,0x6f,0xd4,0xfd,0xef,0x0f,0x41, + 0x46,0x2e,0x5d,0x95,0x8f,0x45,0xd6,0x24,0xf3,0x23,0x8d,0x24,0x7f,0x95,0x10,0xb9, + 0xf4,0xc1,0xc0,0x03,0xf4,0xaf,0x3f,0xb1,0xbb,0x48,0xae,0x8e,0xd6,0xe4,0x93,0xf3, + 0x67,0xa0,0xcf,0x3f,0x9f,0x41,0x5d,0x46,0xa8,0xe6,0x68,0xe4,0x2a,0xf8,0xf2,0xe3, + 0x55,0x39,0x3d,0xf9,0xe3,0xfa,0xd7,0x07,0xa5,0xc0,0xf7,0x5a,0x9a,0x5b,0xc0,0x3e, + 0x79,0x5c,0x00,0x3d,0x06,0x7f,0xa0,0xe6,0xbd,0x4c,0x45,0x65,0x17,0x14,0x8d,0x30, + 0xd4,0xd7,0x23,0x93,0x3e,0x91,0xf0,0x7c,0x62,0x40,0x97,0xb2,0xa6,0x42,0x0f,0xdd, + 0x46,0x7b,0xfb,0x9f,0x5a,0xd9,0xbe,0xbb,0x9a,0xee,0xfa,0x5b,0x97,0xf9,0xc8,0x0c, + 0x00,0xfe,0xee,0x39,0x35,0x99,0xa0,0xdc,0xc5,0x1c,0xce,0x84,0x6d,0x8e,0x28,0x44, + 0x31,0xfe,0x1d,0x4f,0xe3,0x58,0x7a,0xbe,0xad,0x2e,0x9e,0x0b,0x40,0x46,0xe7,0xdd, + 0x80,0x7f,0xda,0xe6,0xba,0x9b,0x4a,0x3a,0x9f,0x35,0x88,0xe6,0xab,0x36,0xa2,0x8a, + 0xf7,0xda,0x8b,0xf9,0xb1,0x92,0xbc,0xfd,0xe2,0x01,0xc0,0xc6,0x7f,0xc2,0x9b,0x1d, + 0xf4,0x9b,0x0b,0x96,0xcb,0x4b,0x93,0x80,0x73,0x8f,0xa7,0x7a,0xe2,0x3f,0xb4,0x25, + 0xb9,0x67,0x60,0xc0,0x31,0x18,0x3f,0xcb,0x00,0x1a,0xd9,0xb7,0x7d,0xa8,0xce,0x4e, + 0x42,0x8e,0xfe,0xd5,0xc3,0x5e,0xba,0x47,0x42,0xc2,0xea,0x5f,0xb9,0xd4,0x77,0xde, + 0x8f,0x35,0x8b,0xaa,0xa8,0x00,0x64,0x02,0x31,0xf5,0xf4,0xab,0xf1,0xcd,0x1b,0xb2, + 0x94,0x27,0x6a,0xe0,0x65,0x8e,0x4e,0x3f,0xfa,0xf5,0xe7,0xe9,0x39,0x9e,0xf6,0x42, + 0x58,0x90,0x09,0x39,0xf5,0x1d,0x2b,0x61,0xe7,0x78,0xce,0x10,0xe3,0xa1,0x26,0xbc, + 0xca,0x98,0xab,0xb3,0xea,0x70,0x18,0x28,0xc6,0x2a,0xdb,0x9e,0x85,0x04,0xde,0x73, + 0xfc,0xc0,0x24,0x63,0xe5,0x24,0x75,0x39,0xec,0x2b,0x7e,0xcd,0x12,0x52,0x37,0xa9, + 0x28,0xa4,0x10,0xbd,0x15,0x7e,0xbe,0xbe,0xf5,0xe6,0x36,0x5a,0x9c,0x8d,0x2f,0xfd, + 0x33,0x5f,0x95,0x79,0xe4,0x7b,0x03,0xdb,0xde,0xba,0x08,0xf5,0x97,0x8b,0xe7,0x77, + 0x5c,0x27,0x40,0xc7,0xe5,0x1f,0xe2,0x6b,0xb7,0x0d,0x5f,0x99,0xa4,0x83,0x19,0x84, + 0x4a,0x2e,0xfa,0x1e,0x93,0x6d,0x7b,0x76,0x97,0x29,0x83,0x88,0xb3,0xb4,0xb1,0xe1, + 0x7d,0xb0,0x2a,0xd6,0xa7,0xae,0x4b,0x01,0x58,0xa5,0x39,0x32,0x30,0x8c,0x71,0x83, + 0xcd,0x71,0x03,0x5d,0x33,0x46,0x2e,0xcb,0x91,0x1a,0x73,0xb8,0x90,0x3f,0x21,0xe9, + 0xef,0xfa,0xd4,0x97,0x77,0x69,0xae,0x49,0x6e,0x6d,0x37,0x7e,0xe7,0xf7,0x83,0x27, + 0xae,0x3b,0x91,0xfc,0xab,0xd8,0x94,0xef,0x49,0xc5,0x76,0x3e,0x3e,0x14,0x52,0xae, + 0xae,0xb4,0xb9,0x4f,0x52,0xb9,0xe3,0x24,0x90,0x57,0x3d,0x7f,0xbb,0xeb,0x9f,0x6a, + 0xc9,0xd3,0xa7,0x85,0xe4,0x45,0x95,0xba,0xe5,0x49,0xeb,0x81,0xd6,0xae,0xea,0x7b, + 0x8f,0x32,0x72,0x7d,0xfd,0x3b,0x8f,0xc0,0xd6,0x1d,0xbc,0x18,0xb8,0xf9,0x4f,0x07, + 0x9f,0xc0,0x77,0x15,0xe0,0xe1,0xeb,0x4a,0x33,0xb3,0x3e,0xb2,0xa6,0x16,0x32,0xa5, + 0x75,0xa1,0xeb,0x7e,0x1e,0xbb,0x10,0x6a,0x33,0x18,0xe4,0xde,0x90,0xc4,0x11,0x4f, + 0xfc,0x04,0x92,0x07,0xe7,0x5b,0xf7,0x0f,0xc0,0x63,0xf3,0x13,0x0a,0x02,0x3f,0x5a, + 0xf3,0xef,0x0d,0x7c,0x96,0xb7,0x17,0x6e,0x49,0x2c,0xcc,0x07,0xa8,0xec,0x2b,0xb0, + 0xd4,0x2f,0x11,0x5d,0x47,0x50,0x22,0x5c,0x57,0xa2,0xeb,0x29,0x24,0x91,0xf2,0x8f, + 0x0d,0xfb,0xe6,0xac,0x62,0xde,0xbc,0x88,0xe9,0xbf,0xa6,0x73,0x81,0xc7,0x3e,0x95, + 0xd1,0x69,0x73,0x93,0x17,0x98,0x9d,0x78,0xc7,0xa7,0xeb,0x5c,0x95,0xe4,0xe5,0x91, + 0x66,0x63,0x95,0xdd,0xf3,0x0e,0xe4,0xd5,0xed,0x2a,0xf2,0x47,0x5d,0xad,0x85,0xe7, + 0x85,0xe9,0xb7,0xff,0x00,0xad,0x58,0x39,0x6a,0xd1,0xe8,0xd6,0xa1,0x7a,0x5a,0x23, + 0xd2,0xad,0x6f,0x1c,0x26,0xe9,0x58,0x71,0xc8,0x1d,0x87,0xb9,0x06,0xa1,0xd4,0xad, + 0xe3,0xd4,0x2d,0x66,0xb6,0x94,0x19,0x23,0x9d,0x19,0x1c,0x11,0xc3,0x2b,0x0c,0x1f, + 0xce,0xb9,0xe8,0xaf,0x14,0xb8,0x0b,0xf3,0xf3,0xcf,0xb9,0xae,0x96,0xca,0x74,0x2b, + 0xb5,0x7e,0x67,0x27,0xe6,0x39,0xf9,0x47,0xb0,0xae,0x7a,0xb5,0xd3,0xf7,0x7a,0x75, + 0x3e,0x77,0x13,0x85,0x5a,0xb6,0x8f,0xc9,0x7f,0x8a,0xde,0x11,0x9f,0x41,0xf1,0x2d, + 0xee,0x87,0x70,0xa7,0x36,0xf2,0x9f,0x2c,0x9f,0xe2,0x89,0xbe,0x68,0xdb,0xf1,0x5c, + 0x7e,0x34,0xcf,0x87,0x9a,0x28,0x86,0xf6,0x32,0x57,0x3c,0x8e,0x6b,0xea,0xbf,0xda, + 0x53,0xc1,0x53,0x1b,0xeb,0x1f,0x17,0xc2,0xa0,0xc7,0x20,0xfb,0x24,0xe4,0x76,0x60, + 0x4b,0x44,0xc7,0xeb,0x96,0x5f,0xca,0xbc,0x67,0xc1,0xf6,0x62,0x2b,0x94,0x20,0x74, + 0x35,0xfc,0x9b,0xe2,0x66,0x07,0xea,0x12,0xaf,0x86,0x8a,0xf7,0x77,0x5e,0x8f,0x63, + 0xf3,0x8c,0xbb,0x08,0xf0,0xb9,0xab,0xa6,0xf6,0x4f,0x4f,0x46,0x7d,0xa3,0xe0,0x19, + 0x56,0x0b,0x48,0x94,0xfa,0x0a,0xf6,0xc8,0x75,0x12,0x22,0x00,0x1c,0x57,0xcf,0x7e, + 0x16,0xb9,0xf2,0xe0,0x45,0xce,0x38,0xed,0x5e,0x9f,0x05,0xe6,0x54,0x64,0xf6,0xcd, + 0x7f,0x13,0xe6,0x49,0xfb,0x59,0x1f,0xb2,0xc5,0x5e,0x29,0xa3,0xb0,0x7b,0xd2,0xd9, + 0xe6,0xae,0x5a,0xdc,0x93,0x80,0x4e,0x4d,0x72,0x0b,0x70,0x0f,0x27,0xad,0x69,0xdb, + 0x5c,0x63,0x19,0xaf,0x36,0x30,0xb6,0xa6,0xd1,0x4e,0xc7,0x61,0xe6,0x64,0x54,0x91, + 0xd6,0x54,0x12,0xee,0x51,0xe9,0x5a,0x90,0x90,0xc7,0x35,0x84,0xf7,0x65,0x58,0xd9, + 0x80,0x71,0x93,0x4a,0xe7,0x0d,0xf5,0xa6,0x47,0x22,0x85,0xcd,0x50,0xba,0xbb,0x44, + 0x38,0xe9,0x59,0x32,0x92,0xb1,0xbd,0x6d,0x2a,0x86,0xc8,0x3c,0xfa,0x56,0xa2,0xdd, + 0xa8,0x39,0x26,0xbc,0xf8,0x6a,0xca,0xa7,0xaf,0x4a,0x0e,0xb3,0x9e,0x01,0xfd,0x68, + 0x8d,0xcc,0xaa,0x45,0x34,0x7a,0x52,0x5f,0x03,0x8e,0x7f,0x2a,0x96,0x4b,0x85,0x64, + 0x39,0xae,0x0a,0xce,0xfc,0xc8,0x47,0x35,0xba,0x2e,0x37,0x2e,0x3f,0xfa,0xf5,0xe9, + 0xc6,0x4a,0x70,0xb1,0xc1,0xc8,0x94,0x8f,0xff,0xd2,0xf9,0xd0,0xca,0x03,0xe7,0x1d, + 0xfa,0x56,0x82,0x5d,0x61,0x71,0x9f,0x97,0x15,0xce,0xbc,0x98,0xe9,0xeb,0xf9,0x52, + 0xac,0xe6,0xbe,0x3a,0xa3,0xea,0x7f,0xa5,0x50,0x92,0x2f,0xde,0xdc,0x6e,0x15,0x80, + 0xcd,0x93,0xc5,0x4b,0x75,0x39,0xcf,0x1c,0x9a,0xce,0x46,0x3b,0x86,0x6b,0xc8,0xe5, + 0xb5,0x46,0xcf,0x46,0x55,0x7d,0xc3,0x5e,0x0c,0x9c,0x1c,0x67,0x15,0xd0,0x40,0xe5, + 0x62,0x24,0xd6,0x35,0x98,0x04,0x81,0x8a,0xdb,0x94,0xf9,0x36,0xe5,0x98,0xf4,0x19, + 0xaf,0x52,0x8d,0x3f,0x75,0xc9,0x9e,0x7c,0xe7,0xae,0xa6,0x1e,0xaf,0xa9,0xac,0x09, + 0xb3,0x38,0x27,0xb5,0x61,0xe9,0xb7,0x5a,0x85,0xfd,0xda,0xe9,0xba,0x14,0x4d,0x2d, + 0xd4,0xc7,0x6e,0x47,0x38,0xcd,0x61,0x5c,0x47,0x7b,0xae,0xea,0x86,0xde,0xcc,0x17, + 0x25,0xb6,0x80,0x2b,0xea,0xaf,0x87,0x1e,0x15,0xb2,0xf0,0x76,0x9e,0x2f,0xe5,0x41, + 0x2d,0xd4,0x83,0x0d,0x21,0xff,0x00,0xd0,0x45,0x79,0xb4,0x70,0xf5,0x71,0xb5,0xda, + 0x86,0x91,0x5d,0x7f,0xc8,0xeb,0x78,0xc8,0x61,0xe9,0xab,0xee,0xf6,0x47,0x41,0xe0, + 0x1f,0x87,0x56,0xbe,0x0c,0x8d,0x75,0x6d,0x65,0x56,0xef,0x55,0x95,0x77,0x65,0xf9, + 0x58,0x89,0xf4,0xcf,0x52,0x3d,0x6b,0xd9,0xf4,0x9b,0xe9,0xaf,0x49,0x9d,0x89,0xdb, + 0xd1,0x00,0xe9,0xee,0x6b,0xcb,0xaf,0xf5,0x89,0x75,0x29,0x52,0x18,0x58,0x83,0x21, + 0xda,0x07,0x70,0xa3,0xad,0x7a,0x3d,0x91,0x4d,0x3e,0xc2,0x04,0x90,0x05,0x66,0x5e, + 0x0e,0x7b,0x57,0xda,0xe0,0xf0,0x74,0xa8,0x43,0xd9,0xd2,0x56,0x4b,0xf3,0x3c,0x6c, + 0x5d,0x69,0xbf,0x7e,0xab,0xbb,0x7f,0x82,0x3c,0xef,0xe2,0xf6,0x95,0x1e,0xb1,0xa5, + 0xb4,0xb1,0xa8,0x69,0xe0,0xf9,0xd4,0x8e,0x78,0x1d,0x45,0x7c,0xa7,0x6a,0xb3,0xcb, + 0x27,0x92,0x8a,0x49,0x07,0x15,0xf6,0xf6,0xa6,0x6d,0xe7,0x89,0x8e,0x03,0x64,0x73, + 0xee,0x0f,0x15,0xf3,0x6e,0xb5,0x62,0xba,0x0e,0xa1,0x2c,0xb6,0xa8,0x02,0x48,0x49, + 0x57,0xc6,0x71,0x9a,0xfc,0xd7,0x8a,0x30,0x9c,0x98,0x8f,0x6f,0xd1,0x9f,0x71,0xc3, + 0x58,0x8f,0x69,0x41,0x51,0x5b,0xa3,0x88,0x1f,0x09,0xe6,0xf1,0x0c,0xc9,0x71,0x71, + 0x88,0x54,0x72,0x4b,0x71,0xc5,0x75,0xba,0x6f,0x85,0xfc,0x03,0xe1,0x53,0x8b,0xe9, + 0x85,0xc4,0x8b,0xfc,0x28,0x33,0xcf,0xd6,0xb2,0xe6,0xd5,0x2f,0x66,0xe3,0xcd,0x72, + 0x08,0xec,0x4d,0x3a,0xc3,0x41,0xb9,0xd4,0x9b,0xcd,0xf2,0xc9,0x04,0xf2,0xc6,0xb8, + 0xf0,0xf8,0xfc,0x45,0x4a,0x71,0xa3,0x46,0x2d,0xa5,0xdc,0xf2,0xf1,0x5e,0x1f,0xf0, + 0xfc,0x31,0xf5,0x33,0x4c,0x55,0x08,0xba,0xb2,0xdd,0xd8,0xea,0x06,0xa9,0xe1,0x0d, + 0x49,0xcc,0x31,0x69,0x4c,0x10,0x70,0xac,0x3a,0x9a,0xdd,0xb1,0xf8,0x61,0xe1,0x7f, + 0x11,0xd9,0x4a,0xf1,0x43,0x2c,0x0e,0x41,0xdb,0xbc,0x7a,0xfe,0x1c,0xd6,0xc6,0x83, + 0x61,0xa1,0xf8,0x71,0x63,0xb9,0xba,0x45,0x9a,0x51,0xc8,0x04,0x74,0xc7,0x5a,0xf7, + 0x7f,0x0c,0xf8,0xdf,0x41,0xd4,0x99,0x20,0x30,0x42,0x0a,0xe3,0x8c,0x01,0x9a,0xf5, + 0x70,0xd8,0x2a,0xdc,0xeb,0xeb,0x15,0x16,0xbd,0x12,0xfd,0x74,0x3c,0x2c,0xfb,0x27, + 0xc9,0xaa,0xc7,0x9e,0x8e,0x5d,0x19,0xdb,0xad,0x96,0xde,0x96,0x3f,0x2d,0x3e,0x25, + 0x78,0x02,0xff,0x00,0xc2,0x3a,0x9b,0xc4,0x63,0x66,0x84,0x9c,0x82,0x01,0x20,0x57, + 0x9d,0x58,0xe5,0x5b,0xb8,0x19,0xc7,0x5a,0xfd,0xa8,0xf1,0x47,0x85,0x3c,0x17,0xe2, + 0x47,0xf2,0xaf,0x6c,0xa2,0x92,0x39,0x53,0x2b,0x91,0x9c,0x1c,0x74,0x06,0xbe,0x2d, + 0xf8,0x8d,0xfb,0x3b,0x59,0xc1,0x2c,0xb7,0xfe,0x17,0x6d,0xa0,0x64,0x98,0x4f,0x5f, + 0xc3,0xd6,0xbd,0x0a,0xd5,0x31,0x18,0x38,0x72,0x62,0x17,0x34,0x7b,0xaf,0xd5,0x1f, + 0xcc,0x7c,0x5b,0xe0,0xec,0xb1,0x95,0xa7,0x8d,0xe1,0xf5,0x64,0xf5,0xf6,0x4f,0x4f, + 0x5e,0x57,0xb7,0xc8,0xf9,0x5a,0x1b,0x81,0xe5,0x8c,0x1c,0x71,0x51,0x2e,0x9b,0x71, + 0xab,0x5c,0xac,0x10,0x29,0x66,0x63,0x8e,0x06,0x71,0x9a,0x5b,0xed,0x36,0xff,0x00, + 0x4a,0xbf,0x6d,0x36,0xea,0x32,0x92,0x86,0xdb,0x83,0xdf,0xde,0xbe,0x86,0xf8,0x79, + 0xe1,0x78,0xec,0xad,0x05,0xf5,0xc2,0x65,0xdb,0x91,0x91,0x5e,0x5d,0x7c,0xc6,0x14, + 0x20,0xa7,0x1d,0x5b,0xd8,0xf8,0xcf,0x0d,0xfc,0x2f,0xc6,0xf1,0x1e,0x71,0x2c,0x0d, + 0x78,0xb8,0x42,0x9f,0xc6,0xda,0xdb,0xcb,0xd5,0x91,0x78,0x2f,0xc2,0x9f,0xf0,0x8c, + 0x24,0x57,0x83,0xe5,0x98,0x90,0x58,0x8e,0x0e,0x3d,0x29,0xff,0x00,0x1e,0xb4,0xeb, + 0xcb,0xed,0x2a,0x0d,0x58,0x44,0x4a,0xc4,0x07,0xcc,0x07,0x41,0xf5,0xaf,0x4a,0x9e, + 0xd0,0x5c,0xc9,0x1c,0x08,0x7f,0x88,0x71,0xf8,0xd1,0xe3,0x88,0x57,0x54,0xd1,0x65, + 0xd2,0xa4,0x62,0x54,0x46,0x55,0x41,0xfa,0x57,0x2e,0x0b,0x15,0x29,0xd3,0x9d,0x79, + 0xef,0x75,0x6f,0x91,0xfd,0xaf,0xc4,0xdc,0x13,0x83,0x79,0x14,0xb2,0x0c,0x14,0x14, + 0x61,0xc8,0xd2,0xd3,0xf1,0xfb,0xcf,0xce,0x7b,0xab,0xcd,0xdc,0x29,0xfc,0x2b,0x12, + 0x59,0x19,0x81,0x61,0x9c,0xfa,0xd5,0xfd,0x66,0xd1,0xf4,0xdd,0x56,0xe2,0xc6,0x43, + 0x83,0x1b,0x90,0x38,0xed,0xda,0xb3,0xf7,0x2e,0x07,0xaf,0x7a,0xfa,0x2d,0x5c,0x54, + 0xd7,0x53,0xfc,0xdb,0xc6,0xe1,0x2a,0x61,0x2b,0xd4,0xc3,0xd6,0x56,0x94,0x5b,0x4f, + 0xd5,0x19,0xf2,0x0e,0xa7,0xd7,0xd2,0x98,0x14,0x8e,0xd5,0x74,0xaa,0x31,0xc9,0xa0, + 0x42,0xbc,0x96,0xe3,0xf1,0xf5,0xaa,0x53,0x39,0x93,0x22,0x8a,0x42,0xb8,0xcf,0xff, + 0x00,0xae,0xb6,0xa0,0xb8,0x18,0xf9,0xb1,0x93,0xd6,0xb0,0xe6,0x0a,0x83,0x83,0x9c, + 0x55,0x31,0x79,0xe5,0x91,0x9e,0xc6,0xb5,0x8d,0x1e,0x63,0xec,0x78,0x7f,0x88,0xaa, + 0x60,0xdf,0x2b,0x7a,0x1d,0xc2,0xed,0x24,0x15,0xab,0x51,0x82,0x48,0xe2,0xb8,0xfb, + 0x7d,0x5d,0x07,0xca,0xc7,0xa7,0xaf,0x41,0x5b,0x76,0xfa,0x8c,0x4e,0x01,0x07,0x8a, + 0x2a,0x60,0xa5,0x6b,0x9f,0xb2,0xe5,0x3c,0x53,0x4a,0xad,0xaf,0x23,0x59,0x87,0x15, + 0x42,0x64,0x07,0x8c,0xd5,0xe8,0xe7,0x49,0x78,0x07,0x9e,0xd4,0x92,0x42,0x5f,0x2c, + 0xb5,0xe7,0x4e,0x0e,0x2e,0xcc,0xfa,0xaf,0xed,0x08,0x54,0x8d,0xd3,0x39,0xb9,0x41, + 0x04,0xd5,0x42,0x7b,0x73,0x9f,0x4a,0xd7,0xb9,0xb7,0x61,0xc8,0xe3,0x35,0x44,0x5b, + 0xb9,0x39,0xc5,0x6d,0x0b,0x1c,0x35,0x71,0xb1,0x5f,0x68,0x64,0x60,0xfa,0x75,0xfe, + 0x55,0x7e,0x28,0xc9,0xe9,0xc7,0x34,0xe8,0x6c,0x9c,0xf3,0x8f,0xa5,0x6a,0x43,0x6e, + 0x7f,0x88,0x62,0xad,0xcd,0x23,0xe6,0xf3,0x0e,0x21,0xa5,0x41,0x39,0x39,0x10,0x45, + 0x73,0x35,0x99,0xdc,0x84,0x8c,0x7f,0x4a,0xeb,0x74,0x2f,0x1a,0x43,0x04,0xe2,0x3b, + 0xa9,0x0c,0x2d,0x9e,0xb9,0xe2,0xb8,0xeb,0xed,0xa8,0x84,0x7e,0x7f,0xfd,0x6a,0xf2, + 0xdd,0x6e,0xe9,0x95,0x89,0x43,0x82,0x3b,0xd6,0x6b,0x2c,0xa5,0x8b,0x4e,0x2c,0xfc, + 0x77,0x8a,0x73,0x7a,0x19,0x85,0x4e,0x65,0x05,0xcd,0xdc,0xfb,0xf7,0x49,0xd7,0xae, + 0x25,0x81,0x25,0x82,0x7c,0xf4,0x21,0x94,0xd7,0xa2,0x69,0x7e,0x39,0xd6,0xac,0xf6, + 0x03,0x21,0x20,0x77,0x04,0xe6,0xbf,0x37,0x7c,0x13,0xf1,0x3f,0x51,0xd0,0x27,0x48, + 0x6e,0x58,0xcd,0x6f,0x9e,0x55,0x8f,0x4f,0xa5,0x7d,0x8b,0xe1,0x4f,0x14,0xe9,0x5e, + 0x21,0xb6,0x13,0xd8,0xcc,0x18,0x91,0xca,0x67,0x90,0x7b,0xd7,0xc4,0x67,0x59,0x6e, + 0x3f,0x2b,0xa8,0xe6,0xfd,0xe8,0x77,0x3e,0x22,0xa6,0x1e,0x9b,0x76,0x68,0xfb,0x13, + 0xc3,0xdf,0x1b,0x35,0xad,0x3f,0x62,0xc7,0x76,0xf8,0x03,0x95,0x24,0x91,0x5e,0xb1, + 0xff,0x00,0x0b,0x57,0xc3,0x9e,0x2f,0xb1,0x3a,0x67,0x8c,0x2c,0x6d,0xef,0x21,0x94, + 0x61,0x8c,0xa8,0x1b,0xaf,0x1c,0x67,0xa5,0x7c,0x24,0xe5,0x82,0x83,0x19,0x2b,0x8c, + 0x9c,0x55,0xeb,0x5d,0x52,0xe2,0x10,0x03,0x13,0xc7,0x6f,0xfe,0xbd,0x70,0xe1,0xb3, + 0xc8,0xcf,0x49,0xe8,0xcc,0x95,0x0a,0xb4,0xb5,0xa7,0x23,0xb7,0xf8,0xb1,0xfb,0x1d, + 0xf8,0x03,0xc6,0x4b,0x27,0x88,0x7e,0x1d,0xcc,0xb6,0x57,0x04,0x17,0x6b,0x62,0x46, + 0xc3,0xea,0x01,0xaf,0x39,0xd6,0xbc,0xbb,0x1f,0x04,0x1b,0x71,0x20,0x0c,0xd3,0x5b, + 0xc5,0xb4,0x71,0xb8,0x47,0x9c,0xfe,0x19,0x5a,0xf4,0x2b,0x0f,0x1a,0xea,0x7a,0x64, + 0x2c,0xb1,0x4c,0xfb,0x76,0x91,0x8c,0xd6,0x67,0x87,0x3c,0x37,0x61,0xe3,0x4d,0x0a, + 0xe7,0x45,0x9c,0x04,0xbf,0x95,0x77,0x59,0x4e,0x49,0x01,0x66,0x19,0xc0,0x6f,0xf6, + 0x5b,0xee,0x9f,0xad,0x7e,0xeb,0xe1,0x76,0x2e,0xa6,0x22,0x58,0x8a,0x71,0x95,0xf4, + 0xd0,0xfd,0x53,0xc3,0x49,0x4e,0x4e,0xbc,0xaa,0x2f,0x86,0xdf,0xa9,0xe1,0x7a,0x4b, + 0x19,0xe6,0x16,0xaa,0x7e,0xf1,0x19,0x1f,0x4e,0x6b,0xe9,0x7f,0x0b,0x81,0x67,0xa7, + 0x6d,0xc1,0xc1,0x3d,0x7b,0xe3,0xad,0x7c,0xf5,0xa1,0x69,0x17,0xb6,0x7a,0xfd,0xd5, + 0x96,0xa1,0x13,0x43,0x73,0x6b,0x33,0x43,0x24,0x6d,0xc1,0x56,0x43,0xb4,0x8f,0xf0, + 0xf5,0x1c,0xd7,0xd0,0x1a,0x3c,0xa3,0xec,0x64,0xb7,0x01,0x38,0x3f,0x5c,0x62,0xbf, + 0x62,0xc9,0xae,0x97,0x33,0xfe,0xac,0x7e,0xfb,0x4e,0x17,0xa2,0xac,0x6f,0xc7,0x6d, + 0x2d,0xdd,0x84,0xd7,0x44,0x6e,0x4e,0xe7,0x9e,0x38,0xc0,0xcf,0xf4,0xac,0x7f,0x0b, + 0x5a,0xb4,0x9a,0xf3,0xb2,0xf1,0xb1,0x59,0xc1,0xf5,0xc5,0x74,0xf6,0x8a,0x06,0x8f, + 0x3a,0xab,0x32,0xfd,0xe1,0xec,0x71,0x59,0xde,0x09,0x56,0x9b,0x55,0x99,0x93,0xe5, + 0x22,0x26,0xc7,0xa1,0xc7,0x3c,0xd7,0xa7,0x52,0x6d,0xd6,0xa6,0x89,0xae,0x9d,0x3c, + 0x05,0x49,0x79,0x1e,0x91,0x6d,0x26,0xc2,0x12,0x1c,0x94,0x00,0x85,0x39,0xe7,0x1e, + 0xe6,0xb8,0xdf,0x10,0xdc,0xee,0xb8,0x2a,0x8b,0xc2,0x02,0x46,0x79,0xeb,0xc1,0xe6, + 0xb5,0x9a,0xe9,0xa2,0xbb,0xd8,0x9f,0x2a,0x1f,0x94,0x2f,0x3c,0x77,0xe9,0x58,0x5a, + 0xba,0xa4,0xae,0xf2,0xf3,0xb8,0x9c,0x01,0xeb,0x5b,0xe2,0x6b,0xfb,0xa7,0x83,0x80, + 0xc3,0xb9,0x34,0xd9,0xcf,0xdb,0xb1,0x33,0xae,0xee,0x03,0x30,0xe9,0xe8,0x07,0x7a, + 0xe8,0xa7,0x9f,0xc9,0x88,0x80,0x70,0x08,0xc8,0xfa,0x57,0x3f,0x11,0x11,0x90,0xa0, + 0x15,0x63,0xeb,0xdb,0x26,0xae,0x5d,0x4a,0x55,0x06,0x06,0x41,0x15,0xe1,0xd6,0xac, + 0xd9,0xef,0xc7,0x07,0x18,0xb4,0xba,0x99,0x49,0x34,0x89,0x31,0x76,0x07,0x1f,0x77, + 0xd0,0x7c,0xd5,0xa1,0x71,0x74,0x01,0x00,0x0e,0x83,0xaf,0x70,0x07,0xa5,0x60,0xa2, + 0x0d,0xc3,0xcc,0x24,0x82,0xe4,0xfe,0x47,0xbd,0x4b,0x75,0x75,0x14,0x4a,0x4b,0x90, + 0x40,0xfe,0x9d,0x3f,0x0a,0xe0,0x75,0x35,0xdc,0xf6,0xe8,0xd3,0x4a,0x1a,0x96,0x9b, + 0x5a,0xfb,0x1b,0x13,0xd0,0xe3,0x21,0x41,0xe0,0x0f,0x52,0x6b,0x98,0xbe,0xf1,0x24, + 0xb2,0xdc,0x79,0x9b,0xb8,0x07,0x85,0xcf,0x5a,0xe5,0xb5,0x1d,0x4d,0xa6,0x91,0xd8, + 0x92,0xc8,0xcd,0xc2,0x8e,0x32,0x7d,0xc5,0x52,0xb7,0x68,0x81,0xcb,0xae,0xf7,0x73, + 0xc2,0xfa,0x1e,0xd5,0xe9,0xd1,0xae,0xe3,0xa4,0x4f,0x33,0x11,0x2e,0x79,0xdd,0x9e, + 0xa9,0x61,0xab,0x5c,0xdd,0x40,0x7c,0xc9,0x0b,0x0c,0x0c,0x0d,0xdf,0x28,0xfc,0x3b, + 0xd7,0xb7,0x78,0x2a,0xe7,0xec,0xf6,0xb1,0x5d,0x48,0x1a,0xe2,0x46,0xc9,0x23,0x18, + 0x03,0x1c,0x2a,0x8e,0xe7,0x8f,0x6a,0xf9,0xdf,0x45,0x8e,0x38,0xc8,0x96,0xe1,0xd6, + 0x42,0x78,0x28,0x30,0x00,0x1e,0x84,0x9f,0xe5,0x5e,0xad,0xe1,0xaf,0x13,0xc5,0x04, + 0x9b,0x24,0xe0,0xef,0xc0,0xc0,0xc0,0x50,0x7b,0x81,0xfd,0x2b,0xdd,0xc2,0x4f,0x54, + 0xe6,0xcf,0x9e,0xc6,0xd1,0x72,0x4d,0x41,0x1e,0x85,0xac,0xc3,0x2a,0x48,0x25,0x99, + 0x4a,0x89,0x58,0x91,0xc7,0x1c,0xf2,0x45,0x60,0x4a,0xff,0x00,0x67,0x80,0xca,0xb8, + 0x18,0x07,0x00,0xf3,0x5e,0x9c,0xf0,0x9f,0x13,0x68,0x2d,0x16,0x98,0x3c,0xc6,0x41, + 0xe6,0x65,0x8e,0x59,0x98,0x0e,0x83,0xf9,0x60,0x57,0x90,0xdf,0x4b,0x27,0x94,0x6d, + 0x58,0x15,0x6d,0xc1,0x58,0x1e,0x36,0x9c,0xf2,0x08,0xec,0x7d,0x6b,0x97,0x31,0xa7, + 0xec,0x6a,0x39,0xae,0xa7,0x7e,0x57,0x88,0xf6,0xd8,0x77,0x19,0x7c,0x51,0xd2,0xdf, + 0x93,0x3b,0x3b,0x69,0xbe,0xc9,0xa5,0xc5,0x16,0xef,0xbf,0xb5,0x71,0xee,0x7e,0x9f, + 0x5a,0xdd,0xb9,0xbb,0x8d,0xa6,0x89,0xc3,0x10,0x02,0xe3,0x27,0xb5,0x79,0xdc,0xf7, + 0x8b,0xe7,0xdb,0xc0,0xa7,0x3c,0x97,0xe7,0xfd,0x9a,0xd0,0xb8,0xbe,0x24,0x6c,0x43, + 0x97,0xc7,0x1c,0xfa,0xf7,0xae,0x1a,0x38,0x8b,0xc9,0x23,0x28,0x61,0x14,0xa7,0xcc, + 0x74,0x57,0x37,0x24,0xc2,0x78,0x05,0x77,0x64,0x93,0xd7,0xda,0xab,0x69,0xf3,0x99, + 0x18,0xe0,0x90,0x84,0xfc,0xec,0x7d,0x3f,0xc4,0xd7,0x3d,0x2d,0xfb,0x2a,0x05,0x27, + 0xf7,0x60,0xe1,0x88,0x3d,0xfd,0xe8,0xb1,0xbe,0x67,0x73,0x0c,0x7c,0x73,0xc0,0x27, + 0xab,0x1a,0x75,0xeb,0xab,0xee,0x76,0x7d,0x55,0xa8,0x34,0x91,0xe9,0x76,0x5a,0x84, + 0x49,0x98,0xe0,0x0a,0xa4,0x0c,0x0f,0xc7,0xaf,0x6e,0xb5,0xd3,0x58,0x5c,0xc6,0xc5, + 0x43,0x7f,0x11,0xe0,0x03,0x8c,0xfb,0x8f,0x6a,0xf3,0x18,0xee,0xc4,0x5c,0x10,0x1d, + 0xf3,0x8f,0xc7,0xeb,0xfc,0xeb,0xa9,0xd2,0x6f,0x95,0x5c,0xbc,0xff,0x00,0x3c,0xa7, + 0xb0,0xe9,0xed,0x5c,0x92,0xae,0xad,0xcb,0x73,0xc2,0xc5,0xe1,0x5d,0x9c,0x92,0x36, + 0xbc,0x7f,0xa1,0xff,0x00,0xc2,0x4b,0xe1,0x3d,0x47,0x49,0x00,0x31,0x92,0x06,0xf2, + 0xfd,0xa4,0x4f,0x99,0x0f,0xb6,0x18,0x0a,0xf8,0x7b,0xc3,0xb1,0x14,0x99,0x72,0xbb, + 0x58,0x1c,0x11,0xe8,0x7b,0x8f,0xc2,0xbf,0x40,0x61,0x9c,0xcf,0x06,0x00,0xea,0x3a, + 0x7a,0xd7,0xc7,0xda,0xa7,0x87,0x9b,0x46,0xf1,0x6e,0xa3,0x67,0xb7,0x0a,0x2e,0x1a, + 0x44,0xe3,0xf8,0x24,0xf9,0xc7,0xf3,0x22,0xbf,0x0d,0xf1,0xab,0x09,0xcd,0x97,0x53, + 0xc5,0xc5,0x6a,0xaf,0x17,0xf9,0xaf,0xd4,0xf8,0x3c,0x76,0x15,0x47,0x19,0x4a,0xb2, + 0x5e,0x47,0xa3,0xe8,0x0e,0x56,0x35,0xfa,0x0e,0x2b,0xd0,0x2d,0xee,0x0e,0x01,0xae, + 0x0b,0x49,0x8b,0xca,0x89,0x73,0xe8,0x2b,0xac,0xb6,0x7f,0x7e,0x9f,0xa5,0x7f,0x03, + 0x63,0xa1,0x7a,0xb2,0x3e,0xf2,0x8b,0xf7,0x51,0xd6,0xc3,0x2e,0x79,0xf4,0xad,0x28, + 0x26,0x39,0xc8,0xae,0x72,0x07,0x38,0x15,0xa7,0x04,0x87,0x3e,0x99,0xaf,0x3e,0x54, + 0xb4,0x35,0x3b,0x4b,0x29,0x0e,0x01,0x35,0xb7,0x1c,0xbb,0x46,0x6b,0x93,0xb2,0x97, + 0x00,0x67,0xf9,0xd6,0x8b,0xdc,0xed,0x19,0xcd,0x79,0xd5,0x23,0x66,0x34,0x6c,0xcf, + 0xa8,0x04,0x07,0x07,0xf0,0xae,0x5a,0xf7,0x52,0x67,0x3c,0x1e,0x2a,0xb4,0xf7,0x45, + 0xc9,0xe7,0xde,0xb1,0x2e,0x26,0xf9,0x8d,0x2a,0x74,0xd3,0x14,0x9b,0xb1,0x6f,0xed, + 0x72,0x11,0xc9,0xab,0x31,0xdc,0xb0,0x1c,0x9a,0xe7,0x84,0xd9,0x3e,0x95,0x65,0x26, + 0xce,0x2b,0x49,0x53,0x5d,0x0e,0x76,0x77,0x3a,0x7d,0xe1,0x04,0x73,0x5d,0x8d,0xbc, + 0xfb,0x90,0x1c,0x93,0x81,0x5e,0x59,0x65,0x71,0x82,0x39,0xea,0x6b,0xb5,0xb4,0xbb, + 0xf9,0x07,0x35,0xb5,0x05,0xd0,0xc6,0x67,0xff,0xd3,0xf9,0x52,0x69,0x39,0x20,0x55, + 0x6f,0x38,0x93,0x80,0x71,0x4b,0x39,0x1c,0x9e,0x98,0xac,0xe3,0x27,0x3c,0xfa,0x57, + 0xc6,0xe2,0x15,0x92,0x47,0xfa,0x3d,0x42,0xa5,0xd2,0x2d,0xc8,0xe4,0xf7,0xce,0x3a, + 0x7b,0xd4,0x51,0xb6,0x5f,0x8e,0x05,0x46,0x5f,0xd3,0x93,0x4d,0x8d,0xf0,0xf9,0x1d, + 0xab,0xcd,0x6b,0xf7,0x87,0xa2,0xdf,0xb9,0xa1,0xd5,0x58,0xb7,0xcc,0x0e,0x7f,0x3a, + 0x6e,0xbd,0x75,0x21,0xb7,0x5b,0x68,0x32,0xd2,0x4a,0x76,0xa8,0x1e,0xf5,0x56,0xd2, + 0x4c,0x00,0xc4,0xfe,0x35,0xd5,0x78,0x4f,0x47,0x3a,0xa6,0xa0,0xda,0xa5,0xd0,0xcc, + 0x56,0xe7,0x6c,0x43,0xb1,0x61,0xde,0xbd,0x25,0x79,0x53,0xf6,0x71,0xdd,0x9c,0x55, + 0x66,0xa3,0xab,0x3b,0x0f,0x00,0x78,0x1e,0x2d,0x27,0x4e,0x6b,0xe9,0xd0,0x35,0xc3, + 0x2e,0xe6,0x27,0xb6,0x7b,0x57,0x61,0x79,0xa8,0x6d,0xb7,0x4b,0x60,0x36,0xfc,0xc4, + 0xf5,0xea,0x7f,0xfa,0xd5,0x60,0xde,0x5b,0xc5,0x66,0xf0,0x64,0xab,0x95,0xc9,0x03, + 0xbf,0xa5,0x73,0x76,0xf6,0xed,0x3c,0xdb,0xdb,0x3f,0x2e,0x48,0x07,0xf3,0xaf,0x62, + 0x8d,0x18,0x61,0xe9,0xa8,0x52,0x47,0x25,0x27,0x2a,0xd5,0x5c,0xea,0x74,0x3a,0xbf, + 0x0f,0x5a,0x3c,0x97,0x02,0x76,0x3b,0x81,0x18,0xe3,0xb1,0xad,0xdd,0x73,0x53,0x9e, + 0x26,0x4b,0x3d,0xdb,0x59,0x7d,0xf3,0x59,0x9a,0x48,0x78,0xa1,0x05,0x5b,0x1b,0x7e, + 0x62,0x7f,0x9d,0x72,0x9e,0x27,0xd4,0xbe,0xcf,0x76,0xd2,0x82,0x49,0x6e,0x00,0xef, + 0xee,0x6a,0xea,0x57,0x51,0xa6,0xd1,0xa5,0xa5,0x57,0x12,0x97,0x43,0xd0,0x52,0xec, + 0xb4,0x06,0x39,0xc8,0xcb,0x2f,0x23,0x3e,0xd5,0xc4,0xeb,0x70,0x47,0x7d,0x6d,0x25, + 0x91,0xc7,0x04,0x94,0x27,0xd7,0xd0,0x57,0x35,0x6b,0xae,0x30,0x60,0x4f,0x6e,0xc4, + 0xe6,0xb4,0xee,0xee,0xd2,0x58,0x84,0xf1,0x31,0x0c,0x0e,0x6b,0xe6,0xf3,0x58,0xc3, + 0x15,0x41,0xc6,0xdb,0x1f,0x43,0x96,0xf3,0x50,0xa9,0x7b,0x98,0xfa,0x17,0x87,0xc3, + 0x39,0x7b,0x81,0x85,0x8c,0xf4,0x3f,0xd6,0xba,0x9d,0x43,0x51,0x83,0x4e,0x87,0x64, + 0x43,0x18,0x03,0x91,0x5c,0xe9,0xf1,0x02,0xc7,0x13,0x14,0x38,0x6f,0xe7,0x5c,0x3e, + 0xab,0xae,0xb5,0xc1,0x3c,0x9c,0x74,0xfa,0x57,0x99,0x86,0xaf,0x4e,0x8d,0x04,0xa2, + 0xac,0xce,0xbc,0x44,0x2a,0xd6,0xac,0xdc,0xde,0x86,0xa6,0xa5,0xe2,0x59,0xe4,0x94, + 0x80,0xc4,0x29,0xcf,0x15,0xa3,0xe1,0x9d,0x5e,0xe2,0xd3,0x52,0x8a,0x50,0xc4,0xa9, + 0x6c,0xf5,0xaf,0x2d,0x9e,0x72,0xc7,0x3f,0xa8,0x35,0xd0,0xe8,0x57,0x24,0xca,0xb8, + 0xe5,0x81,0x06,0xb1,0xa5,0x56,0x55,0x2a,0xa6,0xce,0x97,0x4d,0x42,0x9b,0x48,0xfa, + 0xb6,0xef,0xc7,0x42,0x3b,0x52,0xb1,0x37,0xcf,0x01,0x5e,0xfd,0x8d,0x68,0x9d,0x74, + 0x6a,0x36,0xc9,0x3a,0x10,0x59,0xd4,0x12,0x3e,0xb5,0xf2,0xf5,0xce,0xae,0xc9,0x35, + 0xc4,0x6a,0xc7,0x6e,0xd1,0x91,0x5d,0xb6,0x85,0xaf,0x88,0xac,0x10,0xe4,0x9f,0x63, + 0x5e,0xb3,0xaf,0xed,0x39,0xa9,0xcb,0x63,0xcd,0x96,0x1e,0x9c,0x22,0xa5,0x18,0xea, + 0x49,0xe3,0xaf,0x03,0xe9,0xba,0xf5,0xdc,0x3a,0xb4,0x2a,0xa9,0x71,0x13,0x0d,0xe0, + 0x77,0x1e,0xb5,0x76,0x0b,0x55,0xb4,0xb6,0x58,0x90,0x61,0x54,0x01,0x5a,0x09,0xa8, + 0xac,0xf2,0x89,0x49,0xe0,0x8e,0x6a,0x8d,0xe5,0xe4,0x19,0x74,0x06,0xbe,0x1f,0x37, + 0xc3,0xfb,0x1a,0xb7,0x5b,0x74,0x3d,0xde,0x1f,0xc2,0x61,0xa9,0xce,0xa5,0x6a,0x34, + 0xd2,0x9c,0xda,0xe6,0x6b,0xad,0xb6,0xb9,0x8f,0x1d,0xd0,0x4b,0xf5,0x19,0x20,0x66, + 0xa1,0xd5,0xf5,0x14,0x69,0x0c,0x6c,0x72,0x79,0xac,0x59,0x27,0xc6,0xa0,0x8c,0x0e, + 0x79,0xac,0x3d,0x66,0xe9,0x44,0xc7,0x9c,0x1c,0xd7,0x46,0x02,0xab,0xfa,0xa3,0x8b, + 0xee,0x77,0x66,0x30,0x5f,0x58,0x4f,0xc8,0xf9,0x3f,0xe2,0xd5,0xaa,0xdb,0x78,0x99, + 0xa7,0x51,0x81,0x38,0xdd,0xc7,0xb5,0x79,0x68,0x91,0xb1,0x83,0x5e,0xd7,0xf1,0x6a, + 0x31,0x71,0x35,0xbc,0xcb,0xd4,0x64,0x1a,0xf1,0x66,0x88,0xf6,0xe9,0x5f,0x65,0x80, + 0x9a,0x95,0x08,0xdc,0xff,0x00,0x37,0xbc,0x5b,0xc1,0xc7,0x0f,0xc5,0x58,0xd8,0xc5, + 0x59,0x36,0x9f,0xde,0x86,0x34,0xa7,0xab,0x1e,0x83,0xd6,0x98,0x6e,0x0f,0x4c,0xfe, + 0x14,0x8f,0x0b,0x75,0x35,0x46,0x64,0x65,0xe4,0x1a,0xf4,0x29,0xd1,0x8c,0x99,0xf9, + 0xb6,0xc4,0xb2,0x5d,0xae,0x09,0x3f,0x8d,0x62,0xdc,0xdc,0x0e,0x70,0x79,0xa2,0x67, + 0x6e,0x49,0xe7,0xf4,0xac,0x69,0xcb,0x36,0x7b,0x57,0xb1,0x43,0x0c,0xad,0x7b,0x02, + 0x77,0x14,0xde,0xc8,0x87,0x1b,0xaa,0xed,0xb6,0xaf,0x22,0x63,0x9f,0xd6,0xb1,0x18, + 0x12,0x39,0xa5,0x8e,0x22,0xce,0x00,0xfc,0x6b,0xad,0xd1,0x83,0x56,0x68,0xeb,0xa3, + 0x8c,0xab,0x4b,0x58,0x48,0xf5,0x8d,0x17,0x53,0x69,0xb6,0x86,0x3c,0xd7,0xa5,0xd9, + 0xc0,0x26,0x8c,0x1c,0x7d,0x6b,0xca,0x7c,0x35,0x64,0xc4,0xae,0x07,0xa7,0xe5,0x5e, + 0xd5,0x61,0x18,0x8a,0x11,0x9c,0xd7,0xcd,0xe3,0xa1,0x04,0xee,0x7b,0x54,0xf8,0xb3, + 0x15,0x04,0xa1,0x73,0x22,0xe3,0x4e,0x52,0x7a,0x53,0xad,0xb4,0x6d,0xfc,0x91,0x5a, + 0xcd,0x20,0x66,0xc1,0xad,0xfd,0x3d,0x11,0x86,0x2b,0xe4,0xb1,0xd8,0x97,0x4d,0x7b, + 0xa7,0x4f,0xfa,0xd3,0x89,0xa8,0xac,0xd9,0x82,0x34,0x75,0x54,0xdd,0x83,0xc5,0x62, + 0xdd,0x45,0xe4,0xee,0x1d,0x00,0xaf,0x57,0x92,0xdd,0x4c,0x47,0x23,0x07,0x18,0xaf, + 0x2d,0xf1,0x16,0x62,0x7c,0xf6,0xae,0x7c,0x26,0x2d,0xd5,0x7c,0xac,0xf0,0xb1,0xd8, + 0xda,0xb5,0x75,0x94,0x8e,0x0b,0x59,0xb9,0xda,0xac,0x33,0x5e,0x41,0xab,0x4d,0xb9, + 0xc8,0xc9,0xff,0x00,0x0a,0xef,0xf5,0xbb,0x8e,0xa0,0x1f,0x5f,0xc2,0xbc,0xbe,0xf1, + 0xf7,0xca,0x4d,0x7d,0xfe,0x51,0x4b,0x4e,0x6b,0x1e,0x6c,0x7b,0x94,0x72,0x31,0xd2, + 0xba,0x5f,0x0f,0xf8,0x9f,0x53,0xd0,0x2e,0x92,0xe6,0xc6,0x56,0x52,0xa7,0xa0,0x3c, + 0x57,0x38,0xc0,0x64,0x71,0x40,0x5e,0xc7,0xbd,0x7b,0x75,0xa8,0x42,0xb4,0x1d,0x3a, + 0x8a,0xe9,0x94,0xf5,0x3e,0xe0,0xf0,0x27,0xc5,0xbb,0x0d,0x76,0x38,0xec,0xf5,0x06, + 0x10,0xdc,0x70,0x37,0x13,0xc3,0x1a,0xf6,0xc8,0x18,0x49,0x86,0x5f,0x99,0x5b,0xbe, + 0x6b,0xf2,0xf2,0xd6,0xea,0x6b,0x39,0x56,0x58,0x58,0xab,0x29,0xcf,0x15,0xf5,0x3f, + 0xc3,0x0f,0x8a,0xc5,0xd6,0x3d,0x2b,0x57,0x7e,0x38,0x0a,0xec,0x7a,0x7a,0x0a,0xfc, + 0x7f,0x8a,0xb8,0x1d,0xd1,0x4f,0x13,0x80,0x5a,0x76,0xff,0x00,0x23,0x9a,0x6a,0x50, + 0xd6,0x3b,0x1f,0x53,0x3c,0x52,0xec,0x3b,0x79,0x03,0xfc,0xf4,0xae,0x87,0xc1,0x97, + 0x2f,0x6b,0x89,0x03,0xed,0x08,0xcc,0x30,0x3a,0xe4,0x37,0x15,0x87,0x6b,0x72,0xb3, + 0xc3,0xe6,0x44,0x43,0xab,0x2e,0x72,0x3f,0xc6,0x99,0xa3,0xde,0x08,0x65,0x96,0x32, + 0x42,0xe5,0xd8,0x01,0xdf,0xd7,0x15,0xec,0xf8,0x2b,0x8c,0xab,0x1c,0x7d,0x7a,0x32, + 0x7d,0x13,0xfb,0x8f,0xd4,0x3c,0x32,0xc4,0x45,0xe2,0x2b,0x42,0xfb,0xa5,0xfd,0x7e, + 0x27,0x79,0xe3,0x8d,0x3b,0xcf,0xf1,0x05,0xbf,0x89,0x55,0x46,0x35,0x4b,0x65,0x49, + 0x58,0x10,0x73,0x3c,0x23,0x1b,0x8e,0x3b,0x95,0xdb,0xcf,0xb5,0x3b,0x48,0xda,0xd6, + 0x92,0xf1,0xf7,0x9b,0x18,0xcd,0x6c,0x4e,0x5e,0xf7,0xc0,0xfe,0x7c,0x70,0x19,0x4d, + 0xa5,0xc2,0x48,0x65,0x50,0x4e,0xc4,0x3f,0x29,0x07,0xdb,0x07,0x9a,0xc4,0xd0,0xbc, + 0xb9,0x20,0x0a,0x08,0x4d,0xf2,0xf0,0x4f,0x4c,0x16,0xcf,0x35,0xfd,0x59,0x28,0x72, + 0xd4,0x6f,0xba,0xbf,0xdf,0xb9,0xfb,0xa6,0x5f,0x57,0x9b,0x0d,0x25,0xfc,0xad,0xa3, + 0xd3,0x6c,0xec,0x1a,0xf3,0x41,0x69,0x2c,0x93,0xce,0x66,0x05,0x42,0xc6,0x79,0xcb, + 0x70,0x38,0xeb,0x55,0x3c,0x3b,0x62,0x74,0xcb,0xd6,0x5b,0x80,0x03,0x95,0xd8,0x7d, + 0x89,0xff,0x00,0xeb,0x57,0x9f,0x79,0x33,0xe9,0xf6,0x86,0xf6,0x29,0x65,0x8c,0x43, + 0x73,0x96,0x78,0x5c,0x86,0xd8,0x5b,0x95,0x5c,0x1e,0x9d,0xc5,0x7a,0x15,0xbc,0xe2, + 0x19,0x92,0xe2,0x46,0x66,0x0c,0x40,0x25,0xbe,0xf7,0xcc,0x72,0x73,0xee,0x06,0x33, + 0x5b,0x51,0x9a,0x9a,0x4d,0xc6,0xcd,0x1c,0xd9,0xad,0x67,0xec,0xa3,0x46,0x2f,0x46, + 0xff,0x00,0x23,0x43,0x55,0x84,0x41,0x21,0x69,0x9c,0x9c,0xb1,0x39,0x1c,0x7d,0x05, + 0x73,0x37,0x65,0x9a,0x32,0x07,0xcc,0x36,0xf4,0xef,0xcf,0x43,0x5d,0x4e,0xb7,0x3a, + 0xdd,0x4a,0xa5,0x32,0x41,0x53,0xc6,0x3b,0x71,0x83,0x5c,0xa5,0xc8,0x40,0x8c,0x47, + 0xde,0xec,0x7b,0x57,0x16,0x25,0xde,0x4c,0xeb,0xc0,0x43,0x96,0x92,0xee,0xcc,0xc0, + 0x06,0xe2,0x1b,0xee,0x8c,0x01,0xed,0x49,0x7d,0x20,0x65,0x41,0x8c,0x02,0x7f,0x41, + 0x49,0x1c,0xd9,0x8f,0x6e,0x32,0xc4,0x9c,0xfe,0x7c,0x52,0xdf,0x3b,0x00,0x04,0x9c, + 0x15,0x1f,0xd6,0xbc,0x9a,0x8f,0xa1,0xde,0x9f,0xbc,0x8e,0x79,0x58,0xa1,0x79,0x18, + 0xe3,0x2d,0x9c,0x77,0xeb,0xcd,0x73,0xda,0xdd,0xe7,0x97,0x0e,0xde,0xa5,0xb9,0xff, + 0x00,0x1a,0xe8,0xe4,0xdb,0x19,0xc3,0x9c,0x92,0x70,0x3e,0xbd,0x6b,0x83,0xd4,0x99, + 0x65,0xb8,0x76,0x7e,0x8b,0xc0,0x19,0xae,0x78,0xc6,0x52,0x91,0xd7,0x52,0xb7,0x2c, + 0x1a,0x31,0x81,0x66,0x62,0xed,0x85,0x03,0x85,0xcf,0xa7,0xd6,0xa7,0x0c,0xa3,0x39, + 0xce,0xef,0x4a,0xaa,0xce,0xef,0x2f,0xcb,0xf2,0x81,0xd0,0xe3,0xa0,0xef,0x4d,0x2e, + 0xea,0x36,0xa9,0x1b,0x46,0x31,0x8f,0x7f,0xe9,0x5d,0x90,0x9a,0x8b,0xb5,0xcf,0x25, + 0xbb,0xea,0xce,0x93,0x4d,0xb9,0xdb,0x20,0xdb,0x9f,0x4f,0x5f,0xc8,0x7f,0x5a,0xdb, + 0x5d,0x52,0x2d,0x3e,0x62,0x23,0x62,0xa5,0xb9,0x66,0x27,0x2c,0x7d,0x8d,0x72,0x70, + 0xdc,0xcb,0x09,0x45,0x24,0x04,0x18,0xe0,0x0e,0x4f,0xf9,0xf7,0xa5,0xbb,0x31,0xc9, + 0xfb,0xc3,0x80,0x7f,0xbb,0x9c,0xfe,0x64,0x57,0x74,0x71,0x4e,0x31,0xd0,0xc5,0xd9, + 0xca,0xef,0x63,0xd7,0x7c,0x39,0xf1,0x4f,0x54,0xd1,0xae,0x45,0xbe,0x90,0xdb,0x5d, + 0x8e,0x3c,0xc7,0xc9,0x03,0xe8,0x2b,0xad,0xbe,0xd5,0xae,0xaf,0xf5,0x15,0x97,0x51, + 0x7d,0xf7,0x32,0xb7,0x9b,0x31,0x20,0x0c,0xb3,0x0c,0xee,0xc0,0xe3,0xd2,0xbe,0x7c, + 0xd2,0x0d,0xbf,0x9b,0x1c,0xac,0x36,0x90,0x79,0xfa,0xfa,0xd7,0xa9,0x49,0xa8,0x9b, + 0x8b,0xf4,0x7c,0x72,0x61,0x4e,0x87,0xb2,0x8c,0x0a,0xcb,0x19,0x8d,0x9c,0xe8,0x5e, + 0x72,0xd1,0x1b,0xe1,0x70,0xf4,0x95,0x77,0xcb,0x1d,0x5a,0xd5,0x9d,0x6c,0x57,0x51, + 0xc9,0xa8,0x36,0x4e,0x4c,0x51,0x9c,0x03,0xea,0xc7,0xb5,0x2d,0xde,0xa4,0xeb,0x2b, + 0x2a,0x9c,0x74,0x51,0xcf,0xa5,0x73,0xfa,0x64,0xe1,0xe6,0xb8,0x97,0x3c,0xee,0x0b, + 0x9f,0xa0,0xcd,0x57,0xba,0x98,0xf9,0x86,0x42,0x32,0xc4,0xd7,0x8e,0xb1,0x96,0xbb, + 0x67,0xa9,0x87,0xc2,0xad,0x2e,0x75,0x71,0xdf,0xc7,0xf6,0x7d,0x85,0xb0,0x72,0x09, + 0x63,0xcf,0xe9,0x4b,0x6d,0x7d,0x1c,0x12,0xef,0x66,0xc1,0x3d,0xc1,0xe7,0x1e,0x95, + 0xc4,0x5a,0xcc,0xaf,0x34,0x88,0xdb,0x9c,0xa2,0x82,0x70,0x7a,0x64,0xf5,0xfc,0x2a, + 0x70,0xd2,0xf9,0x84,0x06,0xfa,0x31,0xe3,0x03,0xfc,0x6b,0x8a,0x79,0x9b,0x72,0x7a, + 0x1d,0xb1,0xc0,0xa6,0x99,0xea,0x36,0xfa,0x97,0xda,0x1b,0x72,0xf0,0x78,0xe7,0xd2, + 0xbb,0x1d,0x2a,0x62,0x1b,0xf7,0x7c,0xbb,0x72,0x7d,0xbd,0xcf,0xf4,0x15,0xe5,0xba, + 0x72,0x38,0x0a,0xaa,0x48,0x18,0x1c,0xf5,0xcf,0xe3,0x5d,0xfe,0x9a,0xfe,0x52,0x02, + 0xf8,0x0a,0x48,0x1c,0x7d,0xe3,0xf8,0xd6,0x94,0xb1,0x4e,0x47,0xcf,0xe6,0x18,0x55, + 0x18,0xfb,0xa7,0xb3,0xe9,0x72,0x3f,0x90,0xa7,0x1d,0xba,0xd7,0x91,0xf8,0xbb,0x4e, + 0x5b,0x8f,0x14,0x7d,0xa5,0x79,0xdf,0x12,0x64,0xfb,0xa9,0x22,0xbb,0x9d,0x22,0xed, + 0xe4,0x55,0x50,0x58,0x27,0x41,0xd8,0x9f,0xf0,0x15,0x5f,0x54,0xd3,0xd4,0xca,0x2e, + 0xb2,0x0f,0x51,0xf4,0x1e,0xb5,0xf9,0xff,0x00,0x8b,0x31,0x9d,0x4e,0x19,0xc4,0xca, + 0x9a,0xbf,0x2d,0xa5,0xf2,0x4f,0x5f,0xb9,0x33,0xe0,0x71,0xd8,0x4d,0x55,0xfb,0x9c, + 0x9a,0x46,0x21,0x8c,0x55,0xdb,0x56,0x39,0xaa,0x77,0x4c,0x0c,0x98,0x1d,0x05,0x49, + 0x6a,0x46,0x41,0xee,0x6b,0xfc,0xfe,0xad,0x16,0xef,0x26,0x7a,0xd4,0xb4,0x89,0xd4, + 0xc2,0x78,0x00,0x56,0x8c,0x4c,0x49,0x06,0xb2,0xad,0xc8,0xdb,0xed,0x5a,0x91,0x64, + 0x9c,0xd7,0x05,0x58,0xe8,0x6b,0x19,0x6a,0x6e,0x42,0xe1,0x40,0x1f,0xd6,0x9f,0x35, + 0xc7,0xcb,0x8a,0xad,0x11,0xe3,0xe9,0x51,0xce,0x48,0x3d,0x6b,0xce,0x9c,0x6e,0xec, + 0x68,0x99,0x0c,0xb2,0x7c,0xb9,0x35,0x91,0x34,0xb8,0xe4,0x75,0xab,0x92,0xbf,0x1c, + 0x56,0x45,0xc3,0x1e,0xd4,0x46,0x01,0x2d,0x46,0x19,0x8e,0xff,0x00,0xc6,0xa6,0x59, + 0xce,0x39,0xac,0x87,0x93,0x9c,0x9a,0x95,0x25,0xc7,0x18,0xad,0x39,0x34,0x39,0x9e, + 0x87,0x49,0x6d,0x71,0x86,0xae,0xaa,0xda,0xec,0x84,0x18,0x35,0xe7,0xb0,0xca,0x78, + 0x15,0xd0,0x41,0x72,0x76,0xf5,0x35,0x31,0x8d,0x88,0x67,0xff,0xd4,0xf8,0xf6,0xee, + 0x6c,0x67,0xd2,0xb2,0x0d,0xc6,0x1b,0xae,0x29,0x6e,0xa7,0xe4,0x80,0x71,0xef,0x58, + 0x8f,0x39,0x53,0xd7,0x83,0x5f,0x13,0x88,0x9d,0xd9,0xfe,0x8a,0x51,0xa9,0x64,0x91, + 0xb8,0x6e,0xba,0xd4,0x90,0x4d,0x96,0xcd,0x72,0xcd,0x77,0xce,0x01,0xe3,0xd2,0xb4, + 0xad,0x2e,0x47,0x04,0xf4,0xe9,0x5c,0x37,0xbc,0xce,0xd8,0xd5,0xd3,0x46,0x77,0x36, + 0x7b,0xa7,0x91,0x20,0x8f,0xab,0xe0,0x0f,0xc7,0xda,0xbe,0x8a,0xf0,0xf5,0xa5,0x8e, + 0x95,0xa3,0x18,0x9d,0x77,0x3a,0xa0,0xd8,0x47,0xf7,0x8f,0x24,0xd7,0x84,0x78,0x2e, + 0xdb,0xed,0x37,0x7f,0x68,0x7e,0x15,0x4e,0x17,0xea,0x6b,0xdf,0x99,0x56,0x0d,0x39, + 0x0b,0x0f,0xbc,0x4e,0x6b,0xdf,0xc0,0xc6,0xd1,0xf6,0x8c,0xe5,0xa9,0x25,0x39,0xd8, + 0xa4,0xb3,0x00,0x42,0x4a,0xa0,0x92,0xd9,0xce,0x7f,0x4a,0xd0,0xb6,0x88,0x49,0x74, + 0xd2,0xed,0xc2,0x93,0xd0,0x7f,0x2a,0x64,0x91,0x44,0xf0,0xac,0x85,0x46,0x66,0x00, + 0xa9,0xee,0x00,0xa9,0xad,0x1e,0x48,0xd4,0x6d,0xc0,0x75,0x5c,0x71,0xc9,0xc6,0x6b, + 0xa3,0xda,0x73,0x6b,0xd1,0x02,0x9d,0xe2,0xda,0xdc,0xda,0x92,0x39,0x21,0xb6,0xf3, + 0xbe,0xea,0xb0,0xe3,0x8a,0xf3,0x0d,0x76,0x37,0xb9,0x2d,0x24,0x99,0xfd,0xd8,0x3b, + 0x6b,0xbd,0xbd,0xbe,0x93,0xcb,0x51,0x93,0x8f,0x7a,0xe2,0x35,0xa9,0x23,0x89,0x30, + 0xcc,0x70,0xdc,0x9f,0x7a,0xf3,0x71,0x35,0x39,0x9b,0x3b,0x72,0xd8,0xb5,0x2b,0xb3, + 0x8d,0x85,0x95,0x5c,0x61,0x86,0x3d,0xeb,0x79,0x6f,0x04,0x96,0xe6,0x30,0x38,0xfc, + 0xab,0x8e,0x9a,0x74,0x7b,0x82,0x10,0x00,0x07,0x6a,0xdb,0xb0,0x76,0x92,0x32,0xa0, + 0x8e,0x2b,0xcb,0x8c,0xaf,0xee,0x9f,0x45,0x52,0x2a,0xd7,0x46,0x26,0xa3,0x3f,0x95, + 0xb9,0x54,0x61,0x8e,0x6b,0x98,0x92,0x67,0x3c,0xb7,0x19,0xeb,0x5d,0x4e,0xa7,0x6b, + 0xc3,0x4b,0x2b,0x67,0xd3,0x15,0xc6,0x4d,0x2b,0x6d,0x35,0xe1,0xe2,0x93,0x8c,0x8f, + 0x43,0x0e,0xb9,0xa2,0xc3,0xcc,0x27,0x2a,0xdc,0xe6,0xba,0x7f,0x0f,0xa9,0xfb,0x52, + 0xaf,0xad,0x71,0x71,0x48,0x4f,0xe1,0x5d,0xbf,0x87,0x1b,0x13,0x2c,0x83,0x92,0x38, + 0xf4,0xad,0xb0,0x4e,0xf3,0x47,0x36,0x2e,0xa5,0xa9,0xc8,0x65,0xf4,0x87,0xed,0xd7, + 0x4b,0xce,0x40,0x02,0xb5,0xf4,0xeb,0xc9,0x13,0x4e,0x01,0x7a,0x83,0x9c,0x8e,0xb5, + 0x91,0x76,0x58,0xde,0xdf,0x13,0x8a,0xb1,0x6b,0x83,0x62,0x1b,0x3c,0x9f,0x4f,0x4a, + 0xf4,0x62,0xbd,0xf6,0xfd,0x7f,0x33,0xcf,0x8d,0x5b,0xc1,0x2f,0x43,0xab,0xd3,0x35, + 0xa6,0x8d,0x04,0x6c,0x7e,0x6c,0x55,0x46,0xd4,0xe4,0xfb,0x44,0xbb,0xce,0x03,0xf2, + 0x2b,0x97,0xb7,0x97,0xe7,0x27,0xdf,0x15,0x77,0x55,0x90,0x2c,0x09,0x34,0x67,0x91, + 0xd7,0xd6,0xb8,0x31,0xb4,0x7d,0xbd,0x16,0x9e,0xe8,0xf4,0xb2,0xfa,0xde,0xc6,0xb2, + 0x7d,0xcb,0xab,0x7f,0x89,0xcb,0xb9,0xc9,0x00,0xe3,0x3d,0xab,0x97,0xd4,0xaf,0x99, + 0xa4,0x25,0x9b,0x70,0xcd,0x56,0xbb,0xb8,0x7f,0x21,0xa5,0x46,0xc7,0x1d,0x7e,0xb5, + 0xce,0x1b,0xc3,0x29,0xc3,0xe4,0x9a,0xf1,0xb0,0xc9,0xc6,0x8f,0x2f,0x99,0xeb,0x63, + 0xea,0xaf,0x69,0x73,0x83,0xf8,0x8b,0x22,0xc8,0xb0,0x1f,0x7a,0xf2,0xad,0x83,0x3e, + 0xf5,0xe8,0x9e,0x3f,0x90,0x6e,0xb7,0x4f,0xa9,0xaf,0x35,0x32,0x01,0x80,0x7b,0x57, + 0xd9,0x65,0xd4,0x24,0xe8,0xa6,0x91,0xfe,0x74,0x78,0xc9,0x5f,0xda,0xf1,0x56,0x29, + 0xae,0x96,0x5f,0x80,0xe6,0x88,0x60,0xf1,0xfe,0x7d,0xab,0x36,0x6b,0x7e,0x0f,0xa1, + 0xab,0x8d,0x72,0x14,0x60,0x7f,0x3a,0xa1,0x35,0xd6,0x47,0x5e,0xbf,0xe7,0xad,0x7b, + 0xd8,0x6c,0x34,0xfb,0x1f,0x96,0x98,0xb7,0x11,0x81,0x9a,0xc2,0x99,0x00,0xfb,0xbc, + 0x56,0xe4,0xf2,0x06,0x24,0x1e,0x6b,0x2a,0x40,0x49,0xe3,0xbd,0x7b,0x34,0xa0,0xe2, + 0x8a,0x48,0xcd,0x64,0xe3,0xa6,0x71,0x57,0xec,0x2d,0x8b,0xca,0x32,0x3b,0xd4,0x66, + 0x3e,0xc3,0xad,0x75,0x7a,0x1d,0x91,0x91,0xd7,0x8f,0x43,0x45,0x69,0x35,0x16,0x39, + 0x3d,0x0e,0xff,0x00,0xc3,0x76,0x58,0x0a,0x78,0xcf,0xa1,0xaf,0x40,0x97,0xf7,0x30, + 0x01,0xea,0x2b,0x33,0x45,0xb5,0x11,0xc6,0x0e,0x31,0xf5,0xab,0xb7,0xee,0x01,0x23, + 0xa0,0xaf,0x91,0xc7,0x4f,0x99,0xb3,0x9d,0xbd,0x74,0x28,0x24,0x84,0xbf,0xb5,0x75, + 0xba,0x4b,0xfc,0xcb,0xeb,0x5c,0x64,0x67,0x2d,0x5d,0x4e,0x98,0xd8,0x65,0xfe,0xb5, + 0xf2,0x59,0x9c,0x1b,0x8b,0x37,0xa1,0x27,0x7d,0xce,0xeb,0xef,0x46,0x48,0xf4,0xaf, + 0x23,0xf1,0x82,0x04,0x0e,0x7d,0x3b,0x57,0xac,0x23,0x81,0x15,0x79,0x37,0x8d,0x1b, + 0xf7,0x6f,0xcf,0x63,0x5e,0x7e,0x51,0x77,0x5d,0x23,0xa6,0xa2,0xbc,0x4f,0x9f,0xf5, + 0xb9,0xf3,0x9a,0xe1,0xdc,0x96,0x62,0xd5,0xd0,0x6a,0xd2,0x16,0x91,0x97,0x35,0x85, + 0xb4,0x1e,0x4e,0x78,0xaf,0xd8,0xb0,0x51,0xe5,0xa6,0x91,0x8c,0x6f,0xd0,0x80,0x80, + 0x79,0x22,0x8c,0x73,0xff,0x00,0xd7,0xa9,0x31,0xed,0x49,0x8f,0x4e,0x6b,0xb0,0x1b, + 0x18,0x79,0x1e,0x86,0xac,0x5a,0xdc,0x49,0x6b,0x20,0x92,0x33,0xb4,0x83,0xd8,0xfa, + 0x54,0x45,0x78,0xeb,0x8a,0x02,0x86,0x1c,0x9a,0x52,0x49,0xa6,0x98,0x35,0xdc,0xfa, + 0xe3,0xe1,0x37,0xc4,0xd2,0x51,0x34,0x8d,0x4d,0xf2,0x38,0x08,0xcc,0x7f,0x4a,0xf7, + 0x5d,0x32,0x74,0x9f,0x53,0x9c,0xc6,0xdf,0xbb,0x67,0xcf,0x07,0x19,0xe3,0x8a,0xfc, + 0xe2,0xd3,0xef,0x26,0xb2,0x9d,0x25,0x85,0x88,0x2a,0x41,0xeb,0x8a,0xfb,0xa3,0xe1, + 0x65,0xec,0xba,0x96,0x99,0x6b,0x75,0x33,0x12,0xee,0xb9,0x27,0x19,0xe7,0x38,0xfc, + 0xeb,0x8b,0x85,0xf2,0x0a,0x38,0x3c,0xe6,0x58,0xba,0x4a,0xca,0x4a,0xd6,0xf9,0x9f, + 0x71,0xe1,0xed,0x3f,0x67,0x8d,0xab,0x24,0xf4,0x71,0xfd,0x4f,0xb5,0xbe,0x1c,0x6b, + 0x90,0xdb,0x5b,0xbe,0x97,0x34,0x60,0xc5,0x2a,0x10,0xcb,0xdb,0xe6,0xeb,0xbb,0xeb, + 0x9e,0x95,0xca,0xcb,0xa7,0xa6,0x91,0xac,0xcd,0xa6,0xc0,0x77,0x45,0x0c,0xcc,0x50, + 0x9f,0xee,0x11,0xb9,0x7f,0x20,0x71,0x50,0xf8,0x4e,0x1d,0xf3,0x85,0x8e,0x42,0x8c, + 0x0f,0x27,0x39,0x1d,0x7d,0x7d,0x7d,0xff,0x00,0x2a,0xd0,0xf1,0x5a,0x3d,0x87,0x88, + 0xd3,0x73,0x16,0xf3,0x6d,0x77,0x9f,0x5f,0x94,0x15,0xe2,0xbf,0xa0,0x2b,0xbb,0xd0, + 0x84,0x9f,0x43,0xf6,0x2c,0xae,0xaf,0x26,0x22,0xa4,0x13,0xf8,0x97,0xe2,0x8b,0xd6, + 0x31,0xc0,0x74,0x56,0x96,0x65,0xca,0x93,0xb8,0x75,0xec,0x72,0x2a,0x8e,0xa5,0x3c, + 0x91,0xc5,0x0e,0xd3,0x9c,0x60,0xb6,0x47,0x52,0xdc,0xfd,0x2b,0x63,0x51,0x48,0xad, + 0x74,0x9d,0x36,0xd9,0x65,0xc3,0x3a,0x96,0x60,0x78,0xe0,0x7a,0xfe,0x35,0xcc,0x5d, + 0xdc,0x79,0x80,0xc6,0x87,0x72,0xab,0x6e,0x24,0xfb,0xf4,0xfc,0xab,0x9a,0xaa,0x4b, + 0xdd,0xb6,0xc6,0xf5,0x6a,0x7b,0x4c,0x4a,0x6b,0x64,0x6e,0x2d,0xec,0x81,0x54,0x6e, + 0x25,0xf1,0xb4,0xf5,0xe7,0xda,0xab,0x49,0xd0,0xe7,0x8e,0x0f,0x1e,0xb5,0x55,0xa4, + 0xc4,0xdb,0x3f,0xba,0xd9,0x3c,0x1d,0xa7,0x1e,0xfc,0xd1,0x3d,0xe3,0x2b,0x71,0x8c, + 0x91,0x8e,0x3e,0xbd,0xbd,0xeb,0xce,0xaa,0xb5,0xd4,0xf6,0xe9,0x55,0x52,0x8a,0x48, + 0x08,0x22,0x34,0x2d,0xc9,0x19,0xf6,0x15,0x4e,0xe9,0xf7,0x12,0xe4,0xf0,0x5b,0x9c, + 0x9f,0x4f,0x7a,0xb2,0xb7,0x02,0x66,0x07,0x19,0xda,0x71,0x9e,0xb5,0x99,0x7b,0x21, + 0xc3,0x60,0x79,0x60,0x29,0xed,0x9e,0x4f,0x53,0x5e,0x65,0x45,0xef,0x58,0xde,0x33, + 0x7d,0x4c,0x6d,0x52,0xe5,0x63,0x87,0x03,0x6b,0x64,0x9e,0x86,0xbc,0xf6,0xe9,0xdd, + 0x8e,0xd1,0x91,0x9c,0xf7,0xe7,0xf1,0xae,0x8b,0x52,0xb8,0xf3,0x24,0x0a,0x07,0xdd, + 0xce,0x7f,0x0a,0xe6,0x81,0x0e,0xce,0xd9,0xf6,0x03,0xfc,0xf6,0x34,0x72,0xb4,0xac, + 0x45,0x4a,0xfc,0xcf,0x95,0x6c,0x57,0x4e,0xbb,0x79,0xc8,0xfe,0x58,0xa1,0x8c,0xa5, + 0x95,0x71,0xd7,0xa7,0xa9,0xfa,0xd5,0xc8,0xe1,0x4c,0xe1,0xb8,0x63,0xc7,0x07,0x8a, + 0x64,0xd2,0x22,0x7c,0x90,0x64,0x38,0xe1,0x99,0xb9,0xfc,0x69,0x4a,0x2d,0x46,0xed, + 0x89,0xdf,0xa1,0x56,0x40,0x10,0xee,0x07,0x39,0xe3,0x24,0xf1,0x57,0x51,0x7c,0xd8, + 0x86,0x5f,0x00,0x75,0x3d,0x17,0xf0,0xf5,0xac,0x29,0xd8,0xc8,0x44,0x49,0xf2,0x63, + 0xef,0x1c,0xd6,0xae,0x9f,0x89,0x53,0xca,0x77,0x3c,0x77,0xef,0xf8,0x2f,0x6f,0xad, + 0x44,0x2a,0x2e,0x6b,0x11,0x24,0xd2,0xb8,0xa6,0x43,0x1b,0x84,0x8c,0xe4,0x64,0x11, + 0xec,0x7f,0xc6,0xbd,0x07,0x44,0x70,0x21,0x92,0xea,0x53,0xca,0xa0,0x5f,0xf1,0xae, + 0x46,0xde,0xd6,0x0d,0xc3,0x81,0x8c,0xf7,0xf5,0xef,0x5d,0x6d,0xc7,0x97,0x06,0x96, + 0xa2,0x16,0x04,0xcd,0xb7,0xe5,0x1d,0x8f,0x4a,0xc3,0x1d,0x19,0x7b,0x07,0x27,0xdc, + 0xdf,0x01,0x3f,0xdf,0xa4,0x6c,0x5b,0xce,0x2d,0xb4,0xf5,0x76,0xff,0x00,0x96,0xee, + 0xd2,0x03,0xea,0x09,0xc0,0xfe,0x55,0x46,0xf7,0x50,0x31,0xaa,0xe4,0xf2,0xf9,0x20, + 0x55,0x4d,0x42,0x5f,0x25,0x56,0x11,0x9c,0x42,0x81,0x46,0x4f,0x70,0x2b,0x1f,0x49, + 0x8d,0xb5,0x3d,0x4d,0x23,0x91,0xbe,0x54,0xe4,0x93,0xd9,0x57,0x93,0x5f,0x3f,0xcc, + 0xde,0x87,0xd7,0x42,0x1b,0x44,0xf4,0xdd,0x06,0xde,0x04,0xb5,0xdc,0xc3,0x75,0xe4, + 0x87,0x7b,0xa9,0xe1,0x79,0x03,0x0a,0x3e,0x83,0xd3,0xbd,0x69,0x25,0xba,0x34,0xc2, + 0x46,0x53,0xc7,0x40,0x3a,0x0a,0xe7,0x05,0xee,0xd9,0xf7,0x87,0xc1,0x66,0xc0,0x6a, + 0xdd,0x8e,0xe5,0xa5,0x60,0x50,0x75,0xe3,0x35,0x9a,0xa5,0x77,0x74,0x69,0x64,0xaf, + 0x63,0xaa,0xb4,0x01,0x48,0xea,0x00,0xec,0x05,0x75,0xba,0x6b,0xc5,0xe6,0x8d,0xdc, + 0xb6,0x78,0x5a,0xe5,0xb4,0xb3,0x98,0xcb,0x49,0x9e,0x78,0xcd,0x74,0xba,0x74,0x8b, + 0x14,0x9b,0xb6,0xfe,0x9c,0xfe,0x75,0xd7,0x49,0xd9,0xad,0x4f,0x9c,0xcc,0x23,0x75, + 0x23,0xd1,0xf4,0xaf,0x9b,0xe7,0x71,0xb5,0x57,0xa6,0x07,0x53,0xf5,0xa9,0xf5,0xe7, + 0x61,0x6a,0x36,0xa8,0x19,0x3c,0x9e,0x9f,0xa5,0x67,0xe9,0x93,0xfc,0xe0,0x13,0xd7, + 0xf1,0xe2,0xa7,0xf1,0x14,0xe5,0x21,0x8a,0x32,0x71,0xb8,0x92,0x05,0x7c,0xef,0x88, + 0xd5,0xe9,0xd3,0xe1,0x9c,0x7c,0xa5,0xb7,0x23,0x5f,0x7e,0x8b,0xf1,0x3e,0x03,0x15, + 0x17,0xcf,0x63,0x83,0x9a,0x4f,0x9c,0x9a,0xb1,0x6b,0x2f,0x35,0x9d,0x75,0x27,0xcf, + 0xcd,0x25,0xbc,0xc4,0x1f,0x97,0x8a,0xff,0x00,0x3e,0x2a,0xa4,0xd1,0xbc,0x34,0x47, + 0x6b,0x6d,0x29,0x3c,0xfb,0x57,0x41,0x6e,0x77,0x63,0xb5,0x71,0x96,0x72,0x1d,0xc3, + 0x9a,0xeb,0xec,0x32,0xc0,0x1e,0xd5,0xe4,0xd5,0xea,0x33,0xa0,0x85,0x41,0x50,0x7d, + 0x2a,0xb5,0xc8,0xad,0x08,0xb8,0x4a,0xa1,0x79,0xdc,0x0e,0xf5,0xc3,0x6b,0xc8,0x6e, + 0x4c,0xc5,0x91,0xab,0x2a,0x7e,0x7a,0xfe,0x75,0x76,0x63,0xf3,0x10,0x7b,0x55,0x09, + 0x4e,0x73,0x5d,0x51,0xa4,0xbb,0x12,0xe6,0xd9,0x9c,0xe3,0x92,0x29,0x53,0x34,0xae, + 0x00,0x39,0x14,0xab,0xd2,0xae,0x50,0xb1,0x1c,0xd7,0x64,0xa8,0xd8,0x38,0xad,0x18, + 0xa6,0x20,0x64,0x56,0x56,0x71,0xcf,0x4a,0x53,0x2e,0x14,0x1f,0xca,0xb9,0xe6,0x9a, + 0xb9,0x51,0x57,0x67,0xff,0xd5,0xf8,0x3a,0xe2,0x7c,0x92,0x05,0x62,0xdc,0xdc,0x00, + 0x0f,0x35,0x3d,0xcc,0xa1,0x41,0x3d,0x2b,0x9a,0xbc,0xb9,0xea,0x09,0xaf,0xcf,0xea, + 0xd5,0xde,0xe7,0xfa,0x07,0x0a,0xfa,0x16,0x0d,0xc9,0xdf,0xc9,0x3f,0xe7,0xd6,0xb6, + 0x2d,0xee,0x36,0xa8,0xc1,0xe4,0xd7,0x17,0x1c,0xdb,0x9f,0x77,0xad,0x6e,0x59,0xcd, + 0xba,0x44,0x4c,0xe7,0x24,0x0a,0xe5,0x8c,0xae,0xee,0x8e,0x8a,0x75,0x8f,0xa5,0x3c, + 0x25,0x04,0xb1,0x58,0xc5,0x24,0x63,0x90,0x03,0x9f,0xad,0x7b,0x0d,0xb4,0xf7,0x3a, + 0x95,0x88,0x52,0xb8,0x8c,0x61,0x73,0x8e,0xa6,0xbc,0x9f,0xc3,0xd7,0x42,0xd2,0xc3, + 0xe5,0x60,0x32,0xa0,0x11,0xdf,0xa5,0x77,0x1a,0x66,0xa9,0x73,0xf6,0x63,0x1c,0x7c, + 0x2a,0x65,0xfd,0x39,0xed,0x5f,0x4f,0x05,0xc9,0x05,0xe8,0x55,0x2a,0xcd,0xa7,0xa6, + 0xab,0xa9,0xd4,0x4b,0x0c,0xd6,0xb2,0x2c,0x64,0x6e,0x58,0xfe,0x51,0x8e,0xe4,0x0e, + 0x71,0x53,0x5b,0xc6,0xc8,0xde,0x72,0x75,0x90,0x77,0xf7,0xac,0xfb,0x3b,0xb7,0xf2, + 0x8d,0xe1,0xf9,0xcf,0x20,0xee,0xe8,0x09,0xab,0x56,0xf3,0x19,0xbc,0xd9,0x3e,0xe8, + 0x40,0x31,0x9f,0xe9,0x53,0xcc,0xb9,0x2c,0x5a,0x6e,0xcd,0x4b,0xa0,0x9a,0x84,0xe2, + 0x15,0x31,0xbf,0x2c,0x06,0x7f,0xc8,0xae,0x13,0x5b,0xb9,0xfb,0x46,0xd5,0x27,0x18, + 0x1c,0x9e,0xf5,0xd0,0x5c,0x4c,0x6e,0x26,0xc8,0x1b,0xdd,0x4f,0x39,0xae,0x5b,0x56, + 0x78,0xe5,0x60,0x47,0x6e,0x5b,0x1e,0xbe,0x95,0xc1,0x1f,0x7b,0x99,0x9e,0x9d,0x3a, + 0x8e,0x9d,0x97,0x53,0x8d,0x2d,0xf3,0xb0,0xc1,0x1e,0xb5,0xb1,0xa6,0xdc,0x95,0x1b, + 0x71,0xc6,0x6b,0x0e,0xe4,0xb0,0x0e,0xc7,0xa1,0xfe,0x7e,0x95,0x1d,0x8c,0xd3,0x11, + 0x86,0x3b,0x79,0xfe,0x55,0xc1,0x51,0xf2,0xca,0xe7,0xb9,0x49,0xf3,0x47,0x53,0xaa, + 0xbe,0x58,0x67,0x8c,0x84,0x1c,0xe7,0x91,0xd2,0xb8,0x2d,0x4e,0x25,0x8a,0x43,0xb7, + 0x9f,0x5f,0x6a,0xed,0x62,0x3e,0x64,0x64,0x74,0xae,0x47,0x58,0x45,0x89,0xce,0x3a, + 0xe7,0x39,0xfa,0xd7,0x9f,0x8b,0x87,0x32,0xb9,0xd9,0x42,0x7c,0xba,0x1c,0xf8,0x56, + 0x0d,0xb8,0x72,0x2b,0xb6,0xf0,0xfb,0x79,0x2c,0xb9,0x1c,0x1a,0xe3,0x33,0x92,0x07, + 0x42,0x6b,0xab,0xd1,0xdc,0xa3,0x6d,0x93,0xa0,0x1c,0x54,0x60,0xd5,0xa5,0xa1,0x8e, + 0x3a,0x77,0x83,0x06,0x73,0x25,0xd5,0xf3,0x72,0x70,0x0f,0x4a,0x9a,0x39,0x15,0x74, + 0xe0,0x99,0xc1,0x23,0xf2,0xaa,0x31,0x3b,0x79,0x77,0x92,0x8c,0xe0,0x92,0x33,0xed, + 0xd2,0xa4,0x88,0x23,0x5a,0x29,0xcf,0xcd,0x8a,0xec,0xbb,0xfc,0xff,0x00,0x33,0xcf, + 0x87,0xf9,0x10,0xc5,0x28,0xfc,0x01,0xc0,0xa9,0xef,0x6e,0x73,0x01,0x8c,0xf0,0x48, + 0xaa,0x00,0xec,0x6c,0xe6,0xb2,0x66,0xb9,0x67,0x77,0xcf,0x3d,0x86,0x6b,0x25,0xee, + 0xab,0x1e,0x9c,0x57,0x51,0x97,0x17,0x05,0x6d,0x04,0x7d,0x39,0x26,0xb9,0xf1,0x31, + 0x12,0x7c,0xb5,0x2d,0xd5,0xcb,0x93,0xb0,0xfd,0x3e,0x95,0x52,0x01,0x99,0x46,0x4d, + 0x79,0xad,0x29,0x4a,0xc8,0x31,0x75,0xf9,0x60,0xe4,0xde,0xa7,0x9d,0xf8,0xf6,0x66, + 0xfb,0x74,0x51,0xe7,0x05,0x53,0x9f,0xc6,0xbc,0xf5,0x9f,0xf8,0x6b,0xad,0xf1,0x94, + 0x86,0x6d,0x66,0x41,0xfd,0xd0,0x07,0x15,0xc8,0x94,0xce,0x7d,0x3b,0x57,0xdc,0x65, + 0x95,0xa1,0x0a,0x31,0x8b,0x3f,0xce,0x4e,0x3f,0xc5,0xfd,0x67,0x88,0x31,0x95,0x6f, + 0x7f,0x79,0xfe,0x1a,0x14,0xe5,0x62,0x7a,0x71,0xed,0x54,0x1c,0x9f,0x53,0x5a,0xaf, + 0x18,0xfc,0xaa,0x94,0xa8,0x00,0xfe,0x95,0xf4,0x34,0x6a,0x46,0x4a,0xd1,0x3e,0x3d, + 0x33,0x35,0x93,0x3d,0x7e,0xa6,0xa0,0x64,0xf6,0xab,0xe5,0x4f,0x5a,0x81,0x97,0x9c, + 0x57,0x4d,0xba,0x97,0x72,0x38,0x21,0xf3,0x24,0x00,0xd7,0xa6,0xf8,0x7a,0xc1,0xb7, + 0x2e,0x16,0xb8,0xed,0x2e,0xd7,0xcd,0x70,0x71,0xe9,0x5e,0xcd,0xa0,0x58,0xed,0x45, + 0x38,0xe3,0x8a,0xf2,0xf1,0xf5,0xb9,0x55,0x96,0xe6,0x35,0x25,0xd0,0xe8,0x20,0x87, + 0xca,0x83,0x70,0xe2,0xb1,0x6e,0xd8,0x6e,0xe3,0x22,0xba,0x1b,0xbf,0xdd,0xc6,0x14, + 0xf1,0x8a,0xe5,0x2e,0x5f,0xe6,0x27,0xa5,0x7c,0x95,0x67,0x7d,0x4c,0x37,0x21,0x4f, + 0xbd,0xd3,0xa5,0x75,0x1a,0x73,0x8c,0x67,0x35,0xc8,0x47,0x27,0xcd,0x81,0xd2,0xba, + 0x4d,0x39,0xc1,0xc5,0x78,0xd8,0xf8,0xfb,0xa6,0xf4,0x5a,0x4e,0xc7,0x70,0x1f,0xfd, + 0x1f,0x8e,0xb5,0xe4,0xfe,0x33,0x7f,0xdd,0x3f,0xd3,0x35,0xea,0x6a,0x73,0x6e,0x30, + 0x6b,0xca,0x3c,0x60,0x33,0x1b,0x73,0xd8,0xf6,0xaf,0x3b,0x25,0x85,0xab,0xa4,0x76, + 0xee,0x7c,0xe1,0x7e,0x73,0x3b,0xfb,0x1a,0xa0,0x46,0x09,0xcd,0x69,0x5e,0x2f,0xfa, + 0x43,0xfd,0x4d,0x52,0xc7,0x1c,0xf3,0x5f,0xb2,0x53,0x8f,0xba,0x92,0x30,0x6a,0xda, + 0x15,0xd8,0x10,0x32,0x46,0x29,0xb8,0x35,0x3e,0xdc,0x75,0x34,0xd3,0x82,0x31,0x9c, + 0xff,0x00,0x8d,0x5b,0x40,0x43,0x8e,0xf8,0xeb,0x47,0xbd,0x48,0x40,0xcf,0xbd,0x2e, + 0x3b,0xd2,0x01,0x23,0x18,0x65,0x3e,0xf5,0xf6,0xa7,0xc2,0x77,0x90,0x78,0x72,0xc8, + 0x29,0xda,0x5b,0x70,0xdd,0xd8,0x61,0xba,0xd7,0xc5,0xcb,0xd4,0x0a,0xfb,0x37,0xe1, + 0x4c,0x86,0x2f,0x0e,0xd8,0xa6,0xdc,0xb3,0xef,0x23,0xdb,0x2e,0x79,0xaf,0x43,0x2b, + 0x76,0xc4,0x26,0x7d,0xef,0x02,0x4b,0xfd,0xb2,0x56,0xec,0x7d,0x2f,0xa4,0xdf,0xcd, + 0x0c,0x91,0x25,0xb6,0xe0,0xab,0xd5,0xb3,0xf3,0x12,0x3d,0x71,0x5a,0x5a,0xf6,0xa7, + 0x2c,0x9a,0xb4,0x12,0xcc,0xee,0x73,0x6c,0xca,0xa1,0xf8,0x23,0xe6,0x1f,0xe3,0x59, + 0x9a,0x10,0x13,0x3a,0x94,0x27,0xcb,0x38,0xc3,0x0e,0x37,0x7b,0xfd,0x3b,0x0a,0xd5, + 0xf1,0xac,0x56,0xd1,0xc9,0xa7,0x35,0xb1,0x2c,0x5f,0x74,0x67,0x3d,0x72,0x70,0x7a, + 0xfd,0x45,0x7e,0xac,0xe7,0x27,0x86,0xe6,0xbe,0x87,0xea,0xd8,0x3a,0xd1,0x8e,0x26, + 0x29,0xae,0xe7,0x49,0x7d,0x20,0xba,0x4d,0xd2,0xb6,0x56,0x38,0xd7,0x6f,0xb7,0x73, + 0xcd,0x73,0x11,0x5d,0xe6,0x46,0x20,0x70,0x54,0x8c,0xf5,0xce,0x3a,0x7a,0x53,0x66, + 0xd4,0x32,0x3c,0xb6,0x3f,0x29,0x56,0x53,0xec,0x47,0x1f,0xd2,0xb2,0xad,0x64,0x5d, + 0xeb,0x86,0x0c,0xc4,0x12,0x47,0x4a,0xc5,0xd4,0x4d,0xdd,0x9b,0x51,0x93,0xe6,0x94, + 0x9f,0x53,0xaa,0x91,0xe4,0xda,0x03,0x39,0xe9,0x90,0x3d,0x41,0xe6,0xa8,0x0b,0xa2, + 0xac,0xbb,0xb0,0x48,0x20,0x9c,0x75,0xc6,0x7d,0x7d,0x6a,0x4b,0xb9,0x9c,0xc6,0x8e, + 0xa5,0x7e,0x65,0x50,0x48,0x1c,0x9c,0x75,0xac,0x58,0xdc,0x17,0x55,0x63,0x90,0x18, + 0x93,0xf4,0xc1,0xac,0x6b,0x24,0xd1,0xdf,0x42,0xbd,0x99,0xd6,0x59,0x48,0x8e,0xdb, + 0xcf,0x46,0xce,0x01,0xeb,0xcd,0x66,0xdf,0x5c,0x72,0xce,0x70,0xca,0xa0,0x8c,0x03, + 0x8a,0x92,0xd0,0xa6,0xcc,0xc9,0x90,0xc0,0xf5,0xae,0x77,0x56,0xba,0x58,0xc9,0x8f, + 0xa8,0x76,0xc6,0x41,0xe0,0x0c,0x7e,0xb5,0xe6,0xa5,0xfb,0xcb,0x33,0xb6,0x75,0x17, + 0x2f,0x32,0x30,0x35,0x12,0xcc,0x18,0xa8,0x6d,0xc5,0x47,0x51,0xc9,0xdc,0x7b,0x9a, + 0xcb,0x8e,0x3d,0xbc,0xee,0x3f,0x8f,0x63,0xff,0x00,0xd6,0xad,0xd6,0x89,0xe6,0x57, + 0x45,0x61,0xb9,0x54,0x03,0xd7,0xd3,0xf9,0xd4,0x26,0x03,0x0c,0x18,0x7c,0x79,0x87, + 0x9c,0xf6,0xc0,0xff,0x00,0x38,0xad,0xa7,0x16,0xf5,0x15,0x09,0xab,0x5f,0xa9,0x98, + 0x71,0xb8,0x2b,0x80,0x0e,0x3a,0xfa,0x0a,0x63,0xc6,0x8f,0xfb,0xa6,0x2a,0xa9,0x8f, + 0x9b,0x3d,0x4f,0xa7,0x3d,0xaa,0x85,0xcd,0xc3,0xac,0x81,0x8f,0xaf,0x6f,0x5f,0xfe, + 0xb5,0x59,0x51,0xe7,0x4a,0x25,0x99,0x82,0x8c,0xfd,0xd1,0xce,0x7d,0xcd,0x73,0x3a, + 0x91,0x7a,0x23,0xb6,0x6d,0x46,0x2a,0x46,0x60,0x8a,0x25,0x7f,0x32,0x30,0x63,0x8f, + 0x3d,0x5b,0x93,0xf4,0x15,0x3d,0x84,0xcb,0x0d,0xcb,0x6f,0x23,0x6e,0x71,0x8c,0xe3, + 0xf3,0x35,0x35,0xe9,0x57,0xda,0xee,0x30,0x8a,0x0f,0xb0,0xff,0x00,0x80,0x8f,0xea, + 0x6b,0x18,0x79,0x6f,0x26,0xf5,0x1b,0x40,0xe9,0x9f,0x5a,0xe1,0x72,0xe5,0x95,0xd1, + 0x97,0x37,0x3a,0xd4,0xef,0x21,0x45,0xbb,0x70,0x88,0xb8,0x8f,0xfb,0xdd,0x3f,0x01, + 0x9a,0xdd,0x9a,0xd9,0x63,0xba,0xb1,0xb7,0x53,0x95,0xdd,0xbd,0xbf,0xe0,0x03,0x3f, + 0xe1,0x5c,0x95,0x9d,0xd4,0x92,0xaa,0x2a,0x1f,0xbb,0x8c,0x83,0xe9,0xea,0x71,0x5d, + 0x5a,0x4c,0x9b,0x9a,0xe9,0x58,0x95,0x8e,0x3d,0xaa,0x7f,0xda,0x73,0xcf,0xe8,0x2b, + 0x7c,0x6c,0xe3,0x2c,0x33,0x2b,0x2c,0xe6,0x58,0xb8,0xa5,0xe6,0x67,0x6b,0xb7,0x45, + 0xf2,0x41,0xfb,0xdc,0x7f,0x8d,0x69,0xf8,0x7a,0xdd,0x6d,0xb4,0xd9,0xef,0xdb,0xe5, + 0x69,0x3e,0x55,0x27,0xd0,0xf2,0x78,0xfa,0x71,0x5c,0x76,0xa3,0x27,0xda,0x2f,0x63, + 0x87,0x90,0x09,0xe9,0x9e,0xd5,0xd5,0xea,0x17,0x9e,0x45,0xad,0xbe,0x9c,0x87,0xfd, + 0x5a,0x82,0xe3,0xdd,0xb9,0xfe,0x58,0xaf,0x9d,0x8c,0x37,0x67,0xd9,0xd2,0xea,0xcd, + 0x3b,0x16,0x13,0x5d,0x2e,0x08,0x3c,0x72,0x05,0x76,0xd6,0x51,0xaa,0xc8,0x3f,0x8b, + 0xd0,0x0a,0xf3,0xad,0x15,0xf3,0x2b,0xb0,0x04,0x01,0xd0,0x1e,0xb8,0xf7,0xc5,0x7a, + 0x1e,0x9d,0x3a,0x6e,0x50,0xa3,0x27,0x8c,0x01,0xd3,0xeb,0x5a,0xc2,0x3a,0x6a,0x39, + 0xcf,0x4d,0x0e,0xf2,0x08,0xf1,0x0a,0xa8,0x00,0x02,0x73,0xc1,0xe9,0xf9,0x56,0xd5, + 0xab,0xa8,0xe0,0xe5,0x9f,0x1f,0x85,0x64,0x43,0xb9,0x82,0x86,0x39,0xc6,0x38,0xf7, + 0xad,0xab,0x50,0xb1,0x1c,0x95,0xc9,0x63,0x81,0x59,0x35,0x66,0x78,0x18,0x97,0x78, + 0xbb,0x9d,0xae,0x8e,0x9f,0x3a,0xb9,0x3d,0x3b,0x7a,0xfd,0x3d,0x2b,0x91,0xf1,0x9e, + 0xbe,0xb1,0xea,0xe9,0x60,0x1c,0x7e,0xea,0x30,0x5b,0x9e,0xed,0xd3,0xf4,0xae,0x81, + 0x6f,0xd3,0x4d,0xb1,0x9b,0x53,0xb9,0x6f,0x2e,0x2b,0x78,0xda,0x46,0xf4,0x00,0x0c, + 0xfe,0x35,0xf2,0x9c,0x9e,0x21,0xba,0xd5,0xf5,0x5b,0x8d,0x46,0xe0,0x92,0xf7,0x12, + 0x97,0xe7,0xb0,0x3f,0x74,0x7e,0x03,0x8a,0xfc,0xff,0x00,0xc5,0x0a,0x9e,0xd7,0x25, + 0x96,0x05,0x3d,0x67,0x6b,0xfa,0x2d,0x7f,0x33,0xf2,0xbe,0x25,0xce,0x23,0x85,0xaf, + 0x4e,0x95,0xfd,0xe7,0xf9,0x1e,0xd2,0x2f,0x44,0xca,0x0e,0x7a,0xd4,0xb0,0xcd,0x87, + 0x15,0xc1,0xe9,0xf7,0xcc,0x40,0xcb,0x67,0xf1,0xae,0x8a,0xde,0xeb,0x73,0x0c,0x9a, + 0xfe,0x29,0xc4,0xe1,0x1d,0x29,0xca,0x1d,0x8f,0x4f,0x0b,0x5b,0xda,0x41,0x48,0xf4, + 0x2b,0x19,0x32,0x41,0xae,0xd7,0x4f,0x94,0x00,0x31,0xde,0xbc,0xce,0xc2,0xe8,0x0c, + 0x67,0xa8,0xae,0xb2,0xd6,0xf9,0x54,0x0c,0x9c,0x57,0xce,0x62,0x93,0xe6,0x3a,0x8f, + 0x45,0x8e,0x71,0x80,0x2a,0xbd,0xc4,0xa0,0x8e,0x3d,0x2b,0x99,0x4d,0x48,0x74,0xdd, + 0x4d,0x96,0xff,0x00,0x77,0x7e,0xb5,0xcd,0x4e,0x0e,0xe2,0x6c,0x7d,0xc3,0x7c,0xe4, + 0xe7,0xbd,0x52,0x77,0x18,0xe6,0xa9,0x4d,0x76,0xb9,0xc8,0x3d,0x6a,0xa3,0xdd,0x8c, + 0x72,0x6b,0xd1,0x50,0xb6,0xa8,0xe6,0x96,0xe5,0xa9,0x24,0x19,0xc0,0x3c,0x0a,0x6a, + 0x3e,0x38,0x15,0x9a,0xf7,0x39,0x3c,0x77,0xa9,0x23,0x97,0xbf,0xa5,0x66,0xe3,0xcc, + 0xc1,0x2b,0x75,0x34,0x0b,0x82,0x6a,0x27,0x6c,0x8c,0x67,0xff,0x00,0xac,0x2a,0xb4, + 0x93,0x0c,0xf1,0x50,0x19,0xc1,0x07,0x1d,0xab,0x3a,0x90,0x4b,0x43,0xa2,0x9a,0xd2, + 0xe7,0xff,0xd6,0xfc,0xe4,0xbb,0x98,0x8e,0xf5,0xcb,0x5c,0x48,0xc4,0xf4,0xcd,0x6c, + 0x5d,0x49,0xbb,0x8e,0x6a,0x82,0xd9,0xc9,0x30,0xcf,0x35,0xf9,0x8e,0x22,0xa2,0xbe, + 0xa7,0xf7,0x6c,0x6b,0xa4,0xb7,0x28,0x23,0x10,0x73,0x9c,0x7b,0xd7,0x41,0xa1,0x93, + 0x3e,0xa5,0x0a,0x75,0x1b,0xab,0x36,0x7b,0x26,0x89,0x49,0x61,0x5a,0x9e,0x12,0x8c, + 0xc9,0xaa,0xaf,0xfb,0x23,0xff,0x00,0xad,0x46,0x1d,0x29,0xce,0x29,0x77,0x2e,0x96, + 0x21,0xb7,0xa3,0x3e,0x8c,0xb1,0x75,0x43,0x11,0x7f,0xbb,0x90,0xa7,0xf2,0xaf,0x40, + 0xd3,0x2e,0x23,0x67,0x2a,0x87,0x6e,0x72,0x01,0xf6,0xaf,0x36,0xd2,0xe0,0x6b,0x99, + 0x15,0x1f,0x21,0x47,0x3e,0x95,0xd4,0x69,0xd9,0x9a,0x47,0xdb,0x26,0xd2,0x99,0xe3, + 0xa7,0xb5,0x7d,0x4d,0x46,0xd4,0x5b,0x46,0xae,0xb2,0x52,0x69,0xbd,0x8e,0xb9,0x6f, + 0xa6,0x5b,0x73,0x12,0xfd,0xcd,0xe4,0xe3,0xd7,0x15,0x34,0xb7,0xee,0xb6,0xc0,0x15, + 0xda,0x4f,0x39,0x35,0xce,0x5b,0xc8,0x41,0x3b,0xdb,0x20,0x1c,0x1c,0x7a,0xd4,0x97, + 0xf7,0x39,0x2b,0x1a,0xf2,0x0f,0x4e,0x6b,0x9a,0xa4,0xd3,0x85,0x8e,0xca,0x38,0x85, + 0xed,0x12,0xe8,0x68,0x47,0x34,0x90,0xfe,0xfc,0x49,0x86,0x97,0x3c,0x01,0xd2,0xb3, + 0x5f,0x19,0x1b,0x97,0x3c,0x92,0x7f,0xda,0x35,0x5e,0xdd,0xe5,0x98,0xa4,0x6a,0x77, + 0x1e,0x87,0x8a,0x9a,0x77,0x45,0xfd,0xd8,0x6c,0xb2,0x83,0xd0,0xe6,0xb2,0xa4,0xb9, + 0x61,0xcc,0x8f,0x4d,0x56,0x75,0x27,0xa1,0xcf,0x5d,0xa2,0x15,0x90,0x15,0x0b,0x93, + 0x93,0xfd,0x2b,0x0e,0x12,0xb1,0x9c,0x9c,0x8c,0x67,0xad,0x6f,0xdd,0x94,0x48,0x99, + 0x86,0x73,0xd7,0x9a,0xe5,0x7c,0xed,0xdd,0x46,0x3d,0xab,0xcf,0xc5,0x4b,0x54,0xe4, + 0x7d,0x16,0x0a,0x4a,0xcc,0xdc,0xb7,0xb9,0x63,0xf2,0x86,0xc7,0x6a,0xc0,0xd7,0x6e, + 0x57,0x7a,0xa2,0x9c,0x9f,0x5a,0x87,0xed,0x12,0x6f,0xd8,0xbc,0x0e,0x84,0xd5,0x1b, + 0xe8,0xdd,0x4a,0x3b,0x1c,0xe4,0xf1,0x5c,0x35,0xa5,0x78,0x3b,0x1d,0xbc,0xd6,0x68, + 0x96,0x36,0x49,0x0a,0xb7,0x4c,0x73,0xed,0x5d,0x1d,0xa7,0xee,0xe3,0x69,0x54,0xf2, + 0x16,0xb9,0x88,0x87,0xcb,0xc6,0x6b,0xa5,0x83,0x02,0xca,0x4c,0xf3,0xf2,0xd6,0x74, + 0x36,0x47,0x36,0x2a,0x77,0x4c,0x65,0xa8,0xce,0x9b,0x72,0xcd,0x9c,0x93,0x9a,0x7c, + 0x4a,0x45,0x92,0xec,0xe7,0x02,0xab,0xc6,0xdb,0x34,0xb9,0x07,0x20,0x13,0x8e,0x2a, + 0xcc,0x4c,0x1a,0xcc,0x60,0xe3,0x03,0xa5,0x75,0xc1,0x6d,0x7e,0xc7,0x0c,0x26,0xee, + 0xdf,0x99,0x8b,0x3b,0x6d,0x8d,0xb0,0x6b,0x2e,0x28,0xf7,0xc4,0xee,0x4f,0x0b,0xde, + 0xa4,0xbf,0x99,0x53,0xe5,0xcf,0xbf,0x15,0x0b,0xca,0x3e,0xc6,0xa5,0x0e,0x09,0xc9, + 0x22,0xb9,0x6a,0xb5,0xa9,0xed,0xc2,0x5a,0x1c,0xed,0xd3,0x11,0x21,0x06,0xac,0xda, + 0xa8,0x0a,0x5c,0x8c,0x60,0x7f,0x4a,0xad,0x39,0xdc,0xf4,0xb3,0x4c,0x2d,0xac,0x24, + 0x93,0x3d,0x14,0xff,0x00,0x2a,0xe6,0xc3,0x43,0x9a,0xa2,0x48,0xf1,0x73,0xdc,0x52, + 0xa3,0x87,0xa9,0x36,0xf6,0x4c,0xf1,0x8f,0x10,0x5c,0x8b,0x8d,0x5a,0x77,0x1d,0x37, + 0x10,0x2b,0x1b,0x39,0x3c,0x53,0xee,0x64,0xf3,0x27,0x77,0x27,0xef,0x31,0x27,0xf3, + 0xe2,0xaa,0xee,0x2b,0xd0,0xe3,0x35,0xf7,0xb4,0x72,0xc6,0xa2,0x8f,0xf3,0x73,0x33, + 0xc4,0x3c,0x46,0x2e,0xb5,0x6f,0xe6,0x93,0x7f,0x89,0x2b,0xf7,0x3c,0xfb,0xd5,0x27, + 0x51,0xc8,0xfc,0x2a,0x56,0x6c,0x75,0xa8,0x64,0x6e,0x79,0xe3,0xde,0xbd,0x2a,0x14, + 0x1c,0x4e,0x24,0xba,0x95,0x4a,0xe0,0x1c,0xf6,0xa8,0x95,0x77,0x30,0x00,0xf5,0xab, + 0x07,0x9e,0x6a,0x5b,0x68,0x77,0xcb,0x5d,0xd7,0xb6,0xa5,0x37,0xa1,0xd5,0xe8,0x16, + 0x7b,0x99,0x41,0x18,0x15,0xed,0x3a,0x6d,0xa8,0x8e,0x10,0x4f,0xa6,0x6b,0xcf,0xbc, + 0x39,0x6a,0x4e,0xd3,0x8e,0x78,0xaf,0x53,0x45,0xf2,0xe0,0xf7,0xf7,0xaf,0x9b,0xcc, + 0x6a,0xdd,0xd9,0x9c,0x73,0x91,0x83,0xa8,0xb1,0xc9,0x2a,0x7a,0x57,0x2b,0x71,0x83, + 0xf9,0xff,0x00,0x9e,0xd5,0xd1,0xdf,0x1c,0x93,0x9f,0xaf,0xe9,0x58,0x13,0x63,0x93, + 0xfe,0x4d,0x78,0x4d,0x6b,0xa9,0x26,0x76,0x48,0x60,0x7d,0x3a,0x57,0x45,0xa6,0x39, + 0xc8,0xf4,0xae,0x6c,0x9e,0x72,0x2b,0x7f,0x4b,0xc6,0xe1,0x8a,0xf2,0xf1,0xe9,0x72, + 0xb3,0xa2,0x9b,0x77,0x3b,0xb4,0x24,0xdb,0x67,0x15,0xe5,0xbe,0x2e,0xc1,0x89,0xfe, + 0x87,0x18,0xaf,0x4d,0x0c,0x45,0xb6,0x0e,0x3a,0x77,0xeb,0x5e,0x5d,0xe2,0xb2,0x36, + 0x30,0xe3,0x07,0x3d,0x2b,0x8b,0x28,0x8f,0xfb,0x42,0x47,0x62,0x92,0x6a,0xcc,0xf9, + 0xfe,0xf8,0x7f,0xa4,0x38,0xe9,0x54,0x8a,0xfc,0xb9,0xe9,0x5a,0x77,0x6a,0x1a,0x77, + 0xcf,0x63,0x54,0x8a,0x03,0x5f,0xae,0xd3,0x5e,0xea,0x32,0x2a,0x90,0x00,0xa6,0x11, + 0xc7,0x35,0x73,0x6f,0xe7,0xda,0xa2,0x2a,0x8d,0xc2,0xba,0xb9,0x1c,0x1d,0xac,0x1b, + 0x07,0xd0,0xe0,0xf0,0x7d,0xaa,0xb6,0x02,0xb1,0x1e,0xdf,0xad,0x28,0x5f,0xee,0xd4, + 0xdb,0x38,0x04,0x51,0x80,0x79,0x22,0x80,0x23,0x45,0xcb,0x0c,0x0e,0x86,0xbe,0xca, + 0xf0,0x06,0x20,0xf0,0xee,0x9f,0x91,0x80,0xd1,0x0c,0x81,0xd4,0x82,0x79,0x1f,0x8d, + 0x7c,0x77,0x10,0x01,0xc0,0xf7,0x15,0xf6,0x57,0x84,0x86,0xdf,0x0c,0x69,0xbc,0x01, + 0xfb,0x84,0xfc,0x85,0x75,0xe0,0xe5,0xcb,0x37,0x2f,0xeb,0x73,0xef,0x38,0x13,0x4c, + 0x45,0x47,0xe4,0xbf,0x33,0xe9,0x3f,0x0c,0x30,0x32,0xa1,0x20,0x3e,0xe5,0x5f,0x94, + 0x7a,0x63,0x81,0x5b,0xbe,0x3f,0x68,0x60,0x7d,0x1a,0x49,0x36,0xc6,0xcd,0x30,0xd9, + 0x10,0xfe,0x10,0x14,0x92,0x4d,0x65,0xf8,0x22,0x34,0xb9,0xb8,0xb6,0x44,0xdc,0x4b, + 0x63,0x1e,0xa0,0x63,0xa9,0xf7,0x35,0xd4,0xfc,0x58,0xd0,0x64,0x8e,0xdf,0x4b,0xbc, + 0x1c,0x08,0xdc,0xb1,0xe3,0xd1,0x48,0xe3,0x15,0xfa,0xd4,0x14,0xa5,0x81,0x93,0x48, + 0xfb,0xef,0x6e,0xa3,0x8c,0x8c,0x5b,0xee,0x79,0x0d,0xd5,0xe9,0x8d,0xca,0x6e,0xc6, + 0x3a,0x7b,0x86,0x39,0xcf,0xeb,0x4e,0xb3,0xb9,0x50,0x19,0xb2,0x77,0x67,0xaf,0x71, + 0xf8,0xd7,0x39,0xa9,0xcc,0xc6,0xe1,0x54,0x9e,0x4a,0x8c,0x12,0x38,0xca,0x8f,0x5f, + 0x70,0x6a,0xd5,0x8c,0xc6,0x44,0xc6,0x48,0x2c,0x41,0x07,0xdf,0xff,0x00,0xd5,0x5e, + 0x24,0x2b,0xbd,0x8f,0x7a,0x94,0x92,0x8a,0x67,0x79,0x73,0x74,0x65,0x8d,0x30,0x71, + 0x83,0xc7,0xa0,0xe3,0x81,0x9f,0x6a,0x83,0x6f,0x96,0x50,0x81,0x9d,0xc0,0x92,0x7b, + 0x91,0x59,0xd1,0xb0,0x40,0x15,0xba,0x6e,0xe0,0x67,0xa7,0xf8,0xd6,0xb6,0xe8,0xe4, + 0x81,0x4a,0x70,0x40,0x3c,0x7e,0x75,0xd4,0xa4,0xa4,0x88,0xf6,0x96,0xd8,0x7c,0xd7, + 0x04,0x5b,0xed,0x04,0xfc,0xc3,0x07,0xd8,0x56,0x65,0xdc,0x25,0xd6,0x38,0x43,0x72, + 0x06,0x4f,0x1d,0x47,0x15,0x32,0x11,0x24,0x4e,0xcc,0x32,0x10,0x64,0x9e,0x86,0xb3, + 0xda,0x4f,0x36,0x22,0xe1,0xba,0x02,0x06,0x4f,0x38,0x1e,0x95,0x8d,0x97,0x35,0xec, + 0x5f,0xb7,0x77,0xe5,0x65,0xab,0x6f,0x2e,0x33,0x20,0x63,0xb4,0x83,0x81,0xea,0x40, + 0x15,0x9b,0xa9,0xdc,0x24,0x51,0xec,0xfb,0xcc,0xfc,0x1e,0x7b,0x55,0xfc,0xc6,0xaa, + 0xcc,0x13,0x73,0x92,0x73,0xf4,0xc5,0x60,0x6b,0x0d,0xe5,0xa0,0xe0,0x1c,0x8f,0xf3, + 0xcf,0x35,0x15,0xa7,0x68,0x9e,0xc5,0x0b,0x5d,0x1c,0x95,0xdd,0xcb,0x46,0xe7,0x03, + 0xe5,0x07,0xaf,0xff,0x00,0x5a,0x9d,0x6b,0x79,0x2c,0xef,0xb1,0xdb,0x68,0xf4,0xf6, + 0xf6,0xaa,0x73,0x18,0xe6,0x7d,0xb2,0x31,0x08,0xa7,0x9f,0x51,0xeb,0x8a,0xaf,0x0c, + 0xa3,0x78,0xd8,0xa1,0x77,0x1c,0x01,0xc9,0xc0,0xaf,0x0a,0x55,0x64,0xa4,0x7a,0x73, + 0xd6,0x2d,0x0f,0xba,0xbc,0x98,0xbb,0x45,0xb8,0x90,0x7b,0x13,0x9c,0xfd,0x68,0x8a, + 0xe8,0x85,0x1f,0x37,0xcc,0x38,0x1d,0xff,0x00,0x2a,0xaf,0xa9,0xb8,0x49,0x02,0xa8, + 0xce,0x71,0xbb,0xeb,0xfe,0x7b,0x54,0x36,0xc8,0xc3,0x24,0xf0,0x4f,0xad,0x71,0xfb, + 0x49,0x73,0xd8,0xe1,0x55,0x52,0x47,0x77,0xa2,0x7e,0xf7,0xe5,0x77,0x2a,0xa7,0x93, + 0x9f,0x5f,0x73,0xdf,0xe9,0x5d,0x6d,0xc4,0xeb,0x0d,0xb9,0x88,0x74,0x63,0xdf,0xbe, + 0x2b,0xcf,0x34,0xbb,0xc8,0xe0,0x99,0x41,0x6d,0xd9,0x39,0xf6,0xad,0xcb,0xfd,0x43, + 0x81,0x92,0x40,0x41,0xdb,0xf3,0xae,0xac,0x45,0x54,0xe9,0xf2,0xa3,0xbb,0x2d,0xd2, + 0xac,0xaa,0xbe,0xc5,0xbd,0x25,0x05,0xee,0xb3,0x9e,0x36,0x29,0xc1,0x27,0xb0,0x1d, + 0x7f,0x2a,0xd6,0xbc,0x78,0x1e,0xe1,0xa4,0xce,0x4b,0xb1,0x61,0xf4,0xec,0x3f,0x2a, + 0xc0,0xd1,0x83,0xc3,0x68,0xf7,0xb9,0xc1,0x62,0xc3,0x3c,0x0e,0x83,0x9f,0xe7,0x55, + 0x92,0xf5,0x64,0x94,0x8c,0x0e,0x3f,0x4a,0xe6,0xf6,0x69,0x45,0x5f,0xa9,0xee,0xd2, + 0xc6,0x2f,0x85,0x1e,0x83,0xa3,0x26,0xf5,0x20,0x9c,0x06,0x6c,0x90,0x3b,0x7d,0x6b, + 0xd2,0xb4,0x58,0x93,0xcc,0x50,0x30,0xa4,0x73,0x9c,0x75,0x1e,0x95,0xe7,0x1a,0x26, + 0xc3,0x0a,0x34,0x7f,0xc7,0xd7,0x77,0x7a,0xf5,0x5d,0x0a,0x20,0x00,0x7c,0x73,0xe8, + 0x7d,0x6b,0x45,0x17,0x63,0x5a,0xd5,0x7d,0xc6,0xce,0xa5,0x77,0x70,0x14,0xf5,0xf4, + 0x1d,0xab,0x7a,0xc1,0x48,0x0a,0x5b,0x93,0x9f,0xa9,0xf7,0xac,0x84,0x56,0x32,0xec, + 0x88,0x12,0x3b,0xf6,0x1c,0xfb,0xd7,0x57,0xa7,0x40,0xb1,0x95,0x24,0x03,0xd3,0x81, + 0x5c,0xdf,0x6b,0x53,0xc3,0xc5,0xd6,0x4a,0x1a,0x1c,0x5f,0xc5,0x3d,0x49,0xac,0x3c, + 0x28,0xb6,0x4a,0x70,0xd7,0xb2,0x2c,0x60,0x7f,0xb0,0xbf,0x33,0x1f,0xc7,0x18,0xaf, + 0x9e,0x74,0xf1,0x96,0x55,0x23,0xf1,0xaf,0x47,0xf8,0xb1,0xab,0x0b,0xed,0x71,0x34, + 0xf8,0x8e,0x63,0xb2,0x4c,0x63,0xfd,0xb7,0xe5,0xbf,0x21,0x8a,0xf3,0x4b,0x39,0x3c, + 0xb6,0x19,0xe7,0x9e,0xd5,0xf9,0x3f,0x1b,0x56,0x78,0x9a,0xd3,0x50,0xda,0x2a,0xdf, + 0xe6,0x7f,0x36,0x67,0xf9,0x9a,0xaf,0x9d,0xce,0x57,0xd2,0x3a,0x7f,0x9f,0xe2,0x7a, + 0x25,0x86,0x15,0x3f,0x0a,0xd4,0x8a,0x7c,0x35,0x72,0xb6,0xd7,0xa3,0x6e,0x33,0xd4, + 0x56,0x8a,0x5c,0xe7,0x90,0x6b,0xf9,0x77,0x36,0xc3,0x4a,0x35,0xa7,0xcc,0x7e,0x91, + 0x81,0xc4,0xa9,0x52,0x8b,0x8b,0x3b,0x4b,0x7b,0xd2,0x84,0x13,0x5b,0x10,0xea,0x85, + 0x71,0xce,0x3f,0x1a,0xf3,0xe8,0xee,0xb6,0x81,0x83,0x57,0x63,0xbb,0x3d,0x3a,0xf7, + 0xeb,0x5f,0x27,0x5b,0x0b,0x77,0xa9,0xea,0xc6,0xab,0xb1,0xe8,0xd1,0xea,0x65,0x8f, + 0x5f,0xc6,0xb4,0xd6,0xf3,0x70,0xce,0x4d,0x79,0xd5,0xbd,0xd1,0xc7,0x5e,0xb5,0xb3, + 0x15,0xd8,0xc6,0x01,0xfc,0xeb,0x93,0xea,0xe9,0x3d,0x0b,0x53,0xbe,0xe7,0x49,0x35, + 0xd6,0x1b,0x3d,0x79,0xaa,0x66,0xe7,0x9a,0xc7,0x7b,0xb0,0xdd,0xf3,0xf4,0xa8,0xfe, + 0xd0,0x0e,0x07,0xe9,0x5b,0x46,0x9a,0x33,0x93,0xbb,0x36,0xc4,0xec,0x4e,0x3f,0x9d, + 0x5d,0x8e,0x42,0x00,0x35,0x81,0x0c,0xb9,0x3c,0xf7,0xab,0xe2,0x4d,0xab,0xef,0x55, + 0x1a,0x4b,0x74,0x85,0x17,0xa9,0x62,0xe6,0xe7,0x68,0xeb,0xda,0xab,0xa5,0xd0,0x2b, + 0x9a,0xc6,0xbd,0xb9,0x23,0xf0,0xaa,0x71,0x5d,0x71,0xc9,0xeb,0x5c,0xf2,0xa6,0xe5, + 0x3b,0x9d,0xb3,0x56,0xa4,0x7f,0xff,0xd7,0xfc,0xdd,0x7b,0x47,0x69,0x39,0xe9,0x9a, + 0xec,0xb4,0x9d,0x25,0x19,0x41,0x22,0x89,0x6d,0x55,0x5b,0x8c,0x66,0xb5,0xb4,0xe9, + 0xd6,0x20,0x40,0x23,0x8a,0xfc,0xbe,0xa6,0x1e,0x72,0x67,0xf4,0x5e,0x3b,0x8c,0xe3, + 0xcb,0x68,0x48,0xe7,0x75,0xed,0x39,0x22,0x8c,0x80,0x3b,0x70,0x6b,0x0b,0xc2,0x51, + 0x63,0x52,0x90,0x83,0x80,0x38,0xae,0xaf,0x5d,0x66,0x95,0x4f,0xd2,0xb0,0x3c,0x37, + 0x1b,0x45,0x77,0x23,0x9f,0xca,0xba,0x30,0x54,0x1c,0x6a,0xab,0x9f,0x5b,0xc3,0xb9, + 0xbf,0xb7,0x51,0xbb,0xd4,0xf5,0xeb,0x69,0x19,0x11,0x36,0x1e,0x73,0xc9,0xf5,0xad, + 0x6b,0x09,0x9d,0x49,0x60,0x78,0x66,0xc1,0x1e,0xd5,0xcd,0xf9,0xe4,0x22,0x95,0xe4, + 0x63,0xf1,0xad,0x5b,0x39,0xc0,0x9a,0x16,0x23,0xe5,0xea,0x46,0x78,0xaf,0x7b,0x15, + 0x2b,0x72,0xa3,0xed,0xb9,0xed,0x76,0xce,0xad,0x94,0x43,0x18,0x95,0x5f,0x82,0xdc, + 0x7a,0x9a,0xab,0x70,0xe0,0x4b,0xbc,0xb1,0x3b,0x70,0x3e,0xa2,0xa8,0xbc,0xb2,0x4f, + 0x3a,0x7c,0xff,0x00,0x2f,0x50,0x33,0xf9,0x54,0x73,0x31,0x49,0xb2,0x79,0xcf,0x6f, + 0x7a,0xe3,0x9c,0xb9,0xba,0x1a,0xe1,0xea,0x3b,0xae,0x66,0x75,0x30,0x5c,0xad,0x84, + 0x06,0x48,0x86,0xe7,0x6c,0x05,0x1e,0xe6,0xab,0x39,0x68,0x0b,0x3c,0xe3,0xe7,0x23, + 0x27,0xb7,0x5e,0x95,0x8f,0xe7,0xb4,0x92,0x20,0xce,0xdd,0xbc,0xf1,0x56,0x2e,0x9f, + 0x2e,0x1e,0x47,0x25,0x88,0xa5,0x3a,0x97,0xb2,0x5b,0x1e,0xce,0x15,0x46,0x2e,0xcb, + 0xa8,0xc9,0x90,0x36,0xe6,0x24,0x15,0x61,0x5c,0xbc,0xbf,0x33,0x90,0x70,0xa0,0x73, + 0xcd,0x75,0x29,0x26,0xf8,0xb2,0x3b,0xfa,0xd7,0x2b,0x75,0xf2,0x39,0xc8,0xc9,0x3c, + 0x8c,0xfb,0xf7,0xae,0x4c,0x43,0x56,0x4c,0xfa,0x0c,0x2c,0xb7,0x33,0x26,0x94,0x89, + 0x32,0xa7,0xa7,0xf2,0xaa,0xb7,0xd3,0x34,0xad,0x1a,0x9f,0xae,0x2a,0x79,0xf0,0xb9, + 0x63,0xc7,0xa5,0x66,0xa3,0x09,0xe5,0x62,0x46,0x36,0xf4,0xaf,0x2e,0xb4,0xad,0x06, + 0xbb,0x9d,0xc9,0xdd,0xab,0x9a,0x00,0x38,0x03,0x24,0xff,0x00,0x5a,0xe8,0x1e,0x46, + 0x87,0x4d,0x63,0x19,0xe1,0xb8,0xac,0x18,0x83,0xb6,0x33,0x57,0xef,0x98,0xa5,0xa0, + 0x55,0x3c,0x66,0xb2,0xa3,0x3b,0x45,0xb3,0x93,0x13,0x3d,0x91,0x62,0x49,0x3c,0xbd, + 0x2c,0x64,0xe3,0x26,0x88,0xa5,0xff,0x00,0x43,0x18,0x3c,0x0e,0x48,0xac,0xcb,0xd9, + 0x91,0x2c,0xe1,0x88,0x9e,0x4f,0x26,0xa5,0x8a,0x58,0xc5,0xa9,0xc7,0xa5,0x74,0x46, + 0xa2,0xe6,0xf9,0x1c,0xb0,0x96,0x97,0xf3,0x39,0x8d,0x52,0x6f,0xde,0xe3,0x3c,0x77, + 0xa8,0x64,0x99,0x70,0x02,0x1e,0x31,0x8a,0xaf,0x7f,0x3a,0xc9,0x29,0x07,0xd6,0xb3, + 0xd9,0xca,0x9e,0x0d,0x72,0x56,0xa9,0x76,0x7a,0xd0,0xab,0x68,0x97,0x39,0x2c,0x09, + 0x1f,0x85,0x65,0x6b,0xf7,0x22,0x0d,0x2e,0x71,0x9e,0xab,0x8e,0x7d,0x4d,0x6a,0xdb, + 0xb1,0x73,0x90,0x6b,0x91,0xf1,0xb5,0xc8,0x4b,0x51,0x00,0x3c,0xb9,0xfd,0x2b,0xd2, + 0xc9,0xe8,0x7b,0x4a,0xf0,0x49,0x75,0x3f,0x32,0xf1,0x1f,0x37,0x58,0x4c,0x9f,0x13, + 0x55,0xbf,0xb2,0xd7,0xdf,0xa1,0xe5,0x64,0x9e,0xa6,0xa3,0x39,0x3d,0xf1,0x8a,0x90, + 0x8e,0x31,0x49,0x83,0x9f,0x6a,0xfd,0x35,0x2b,0x9f,0xc2,0x2c,0x85,0x81,0xa6,0x91, + 0x52,0x95,0xc7,0x1c,0x9c,0xd3,0x0f,0x61,0x8a,0x42,0x64,0x24,0x60,0x56,0xae,0x99, + 0x6e,0x5a,0x41,0x9e,0xf8,0xac,0xf0,0x01,0xae,0xb7,0x44,0xb5,0x2c,0xeb,0xc6,0x6b, + 0x3a,0xae,0xd1,0x64,0x4d,0xda,0x27,0xa4,0x78,0x7e,0xd4,0x84,0x00,0x8a,0xec,0x2e, + 0x78,0x8c,0x03,0xdb,0xd0,0xf4,0xaa,0x5a,0x45,0xb8,0x48,0xc6,0x45,0x58,0xbc,0x7e, + 0xde,0x9d,0x6b,0xe4,0x31,0x72,0x4e,0x4c,0xf3,0xe7,0x25,0x7b,0x1c,0xf5,0xce,0x72, + 0x47,0xad,0x60,0xcf,0x92,0x0e,0x73,0xc7,0xf3,0xad,0xcb,0x87,0xc9,0xe7,0x91,0xfa, + 0x62,0xb0,0xe7,0x1b,0xba,0x76,0xaf,0x3a,0xa3,0x45,0xa6,0xba,0x19,0x85,0x0e,0x7d, + 0xab,0x7f,0x4d,0x1f,0x32,0x9e,0x79,0xac,0x72,0x8d,0x90,0x2b,0x7b,0x4e,0x4e,0x46, + 0x7f,0x1a,0xf3,0x31,0x6e,0xf1,0x66,0xd4,0xf7,0x3a,0xa9,0x09,0x58,0x09,0xf6,0xe6, + 0xbc,0xa7,0xc5,0x2e,0x4a,0xb9,0x35,0xea,0x52,0x63,0xc9,0xc7,0xb5,0x79,0x3f,0x8a, + 0x5c,0x90,0xe3,0xb5,0x4e,0x43,0x0e,0x6c,0x42,0xb9,0xd6,0x99,0xe3,0x77,0x03,0x32, + 0x36,0x3d,0x6a,0xb0,0x8d,0x8b,0x60,0x0c,0x9a,0xbf,0x2a,0x6f,0x94,0xfb,0x9c,0xf3, + 0xd0,0x7e,0x35,0xf6,0xef,0xc0,0xbf,0x80,0xba,0x5e,0x9b,0xa7,0xdb,0x7c,0x4a,0xf8, + 0xa7,0x6c,0x5e,0x17,0x02,0x6d,0x2b,0x46,0x94,0x73,0x3f,0x42,0xb7,0x17,0x4a,0x46, + 0x44,0x7d,0xd2,0x3f,0xe2,0xea,0xdd,0x80,0xfd,0x1b,0x31,0xcc,0x68,0x60,0x30,0xef, + 0x11,0x89,0x95,0x92,0xfc,0x7c,0x91,0x32,0x92,0x8a,0xb9,0xc6,0xfc,0x14,0xfd,0x9c, + 0xdf,0x5d,0xb3,0x83,0xe2,0x17,0xc4,0x76,0xfe,0xcc,0xf0,0xd2,0x30,0x7b,0x5b,0x59, + 0x06,0xdb,0x9d,0x50,0x8e,0x7e,0x45,0x3c,0xa5,0xbf,0x62,0xe7,0x97,0xfe,0x1e,0x39, + 0x6f,0x75,0xfd,0xb0,0xe5,0xf0,0xaf,0xc4,0x8f,0x87,0xda,0x47,0x88,0x3c,0x37,0xa1, + 0xe9,0x5a,0x45,0xef,0x83,0xa2,0x16,0xcc,0x74,0xeb,0x64,0xb7,0x33,0xe9,0x84,0x6d, + 0x75,0x93,0x66,0x03,0x18,0x9b,0x6c,0x80,0x9e,0x70,0xa4,0x0e,0xa6,0xaf,0xfc,0x43, + 0xf1,0xb6,0xa5,0xe2,0x5b,0xaf,0x2d,0x1b,0x11,0xae,0x15,0x23,0x41,0xb5,0x15,0x47, + 0x0a,0xaa,0xa3,0x80,0x07,0x40,0x05,0x79,0xc6,0xa8,0xcf,0x71,0xa6,0xcd,0xa4,0xce, + 0x33,0x1c,0xb0,0x49,0x1c,0xa0,0xf4,0x3e,0x62,0xe0,0xff,0x00,0x3a,0xfc,0xc6,0x97, + 0x11,0xe2,0xf1,0x98,0xf8,0x62,0x93,0xe5,0x82,0x7f,0x0f,0x97,0x9f,0xa9,0xc7,0x1c, + 0x5b,0xe6,0xe5,0xe8,0x7c,0x00,0xe8,0x41,0xe4,0x73,0x4d,0xd9,0x9e,0x0f,0x4c,0x55, + 0xb7,0x81,0xe2,0x63,0x0b,0xf2,0xd1,0x92,0x8c,0x4f,0xf7,0x97,0x86,0xfd,0x45,0x30, + 0xa7,0x39,0x35,0xfa,0xfa,0xd5,0x5d,0x1d,0xc4,0x31,0x2f,0xce,0xbd,0xb9,0xaf,0xaf, + 0x7c,0x28,0x73,0xe1,0xdb,0x35,0x1d,0x16,0x05,0x03,0x9f,0x6c,0xd7,0xc9,0x71,0xa0, + 0xde,0xbd,0x7a,0xd7,0xd4,0xbe,0x12,0x9c,0x9d,0x0a,0xc8,0x74,0xfd,0xd0,0xff,0x00, + 0x0a,0xd6,0x93,0xb3,0x68,0xfb,0x8e,0x09,0x9d,0xaa,0xd6,0xf4,0xfd,0x4f,0xa9,0x3e, + 0x18,0xcf,0x3c,0xfa,0x85,0xa7,0x99,0x81,0x1a,0xf2,0xc3,0xa0,0x26,0xbd,0xa3,0xe2, + 0xac,0x4c,0x3c,0x26,0xb7,0x12,0x31,0x64,0x49,0x02,0xa0,0xcf,0x00,0x35,0x7c,0xcf, + 0xf0,0xf3,0x5a,0x6b,0x5b,0xd8,0x44,0xb8,0x11,0xa1,0xc7,0x3c,0x7d,0x6b,0xd1,0x3e, + 0x2b,0xf8,0xc6,0x09,0x34,0x2d,0x3e,0xca,0xde,0x42,0x0c,0xb7,0x19,0x61,0x9c,0x82, + 0x88,0xa4,0xf2,0x3e,0xb8,0xaf,0xd5,0xf0,0x98,0xa8,0x2c,0xba,0x57,0x7d,0x0f,0xb3, + 0xad,0x4e,0x55,0x31,0x94,0xf9,0x4f,0x11,0xd4,0x98,0x4e,0x52,0x4d,0xc0,0xb2,0x6e, + 0x07,0x9e,0x72,0x3a,0x67,0xeb,0x57,0xb4,0xd9,0x10,0xc6,0xae,0x59,0x81,0xec,0x3d, + 0xfd,0xab,0x97,0x79,0xf7,0x5d,0x48,0xb9,0xf9,0x65,0xc1,0x1f,0x5c,0x56,0xbd,0xb2, + 0xee,0xc0,0xdd,0x80,0x0e,0x46,0x3d,0x0d,0x7c,0xad,0x2c,0x43,0x96,0xa7,0xd2,0x29, + 0x69,0x63,0xb7,0x13,0x28,0xdb,0xe6,0x36,0x40,0xc1,0xc8,0xed,0x9f,0x7f,0x6a,0x9a, + 0x1b,0x99,0x7e,0x74,0xdd,0x91,0xbf,0x0a,0x07,0x6e,0x3b,0x56,0x22,0xbe,0x62,0x40, + 0xca,0x4e,0xdf,0x5e,0x3a,0x56,0xf6,0x97,0xe5,0x99,0x01,0x19,0x38,0xeb,0x9f,0x4f, + 0xad,0x7a,0x34,0xf1,0x17,0x1c,0x75,0x34,0x90,0x2c,0x76,0x8c,0x17,0x86,0x1d,0x77, + 0x57,0x2f,0x2e,0x48,0x0a,0xce,0x07,0x3c,0x81,0x8f,0xad,0x75,0x53,0xe5,0xed,0x65, + 0x18,0xcf,0x5c,0xe3,0x23,0x18,0x35,0xc6,0xb4,0x88,0xf3,0x30,0x23,0xe7,0x0d,0xd7, + 0xb7,0x15,0xbf,0xb4,0xd0,0xcf,0x58,0xd4,0x26,0x69,0x59,0x22,0x0c,0x5c,0xa8,0x52, + 0x58,0x7d,0x7a,0x56,0x2d,0xfc,0xee,0xf1,0x86,0x70,0x77,0x37,0x1b,0x8f,0xa7,0xbd, + 0x5e,0xb9,0x97,0x64,0x7b,0x78,0xe9,0x8f,0xc0,0x57,0x3d,0x7b,0x21,0xdb,0xe5,0x0c, + 0xe4,0xf2,0x3b,0xfe,0x55,0xc1,0x88,0x9b,0xb3,0xb9,0xee,0x61,0xab,0x24,0x91,0x8d, + 0x31,0x05,0x89,0xcf,0x1c,0xf2,0x29,0x96,0x84,0x6f,0xcb,0x72,0xc4,0xfe,0x95,0x14, + 0xce,0x5b,0xe5,0x00,0x92,0x33,0xcd,0x25,0x84,0x4e,0x27,0x39,0xcf,0xae,0x6b,0xc9, + 0x5a,0xcd,0x5c,0xed,0xab,0x5e,0xf1,0x76,0x67,0x4d,0x77,0xa5,0xc9,0x73,0x0f,0x98, + 0x98,0x04,0x0c,0xfb,0x63,0xfc,0x6b,0x97,0x2e,0x63,0x63,0x0a,0xf6,0xfa,0x8a,0xf4, + 0x5b,0x32,0x64,0xb4,0x30,0xcc,0x70,0xe3,0x83,0x8f,0xe8,0x7d,0x6a,0xb5,0xe7,0x83, + 0xcc,0xec,0xb7,0x51,0x4a,0x14,0x30,0xe8,0x7b,0x71,0x5d,0x58,0x8c,0x14,0xac,0xa7, + 0x4f,0xe6,0x78,0x92,0xc4,0xb8,0xc9,0xa9,0x3d,0x0e,0x5f,0x4b,0x50,0xf7,0x27,0x70, + 0xe2,0x35,0x27,0x03,0xd7,0xb0,0xad,0x1b,0xa5,0x72,0xc1,0x33,0xf7,0x8f,0x4f,0x6e, + 0xa6,0xb4,0x6d,0x34,0x86,0xd3,0xee,0x5a,0xd8,0x61,0x89,0x1b,0xf7,0x73,0xcf,0x1e, + 0xf4,0xdf,0xb3,0xb4,0xb7,0x98,0xea,0x3a,0x13,0xda,0xb9,0x7d,0x9d,0xb4,0x7b,0x9e, + 0xce,0x0f,0x17,0xcd,0x4d,0x16,0xaf,0x12,0x68,0x74,0xcb,0x6b,0x65,0xe0,0x15,0x67, + 0x38,0x38,0xfb,0xcd,0xdf,0xf0,0x15,0x81,0x03,0x18,0x65,0x2b,0x9c,0xe7,0x18,0xf7, + 0xcf,0x15,0xd2,0x78,0x8a,0x45,0xb6,0x6f,0x28,0x9f,0x99,0x51,0x50,0x60,0x72,0x30, + 0x3a,0x7e,0x75,0xcd,0x69,0x87,0xcf,0xbd,0x89,0x71,0x93,0x9c,0x9f,0xc3,0xb0,0xad, + 0xa7,0x1b,0xb4,0x8f,0x46,0x9d,0x5d,0x13,0x67,0xbc,0x78,0x7e,0xdd,0x23,0x82,0x20, + 0x40,0x0d,0xb4,0x64,0xf5,0x39,0x3d,0xab,0xd3,0xf4,0x98,0xa3,0x8e,0x33,0x3b,0x1c, + 0xe3,0xa6,0x7f,0xc2,0xbc,0xd3,0x42,0x90,0x36,0x14,0x7c,0x9b,0x7f,0x9d,0x7a,0xbd, + 0x95,0xba,0xbd,0xb2,0x46,0x18,0x90,0x79,0x23,0xbe,0x7d,0x2a,0x2b,0x5d,0x2b,0x1d, + 0x8e,0xbf,0x34,0x77,0x36,0xec,0xdb,0x79,0xdf,0xd7,0x9c,0xe3,0xff,0x00,0xaf,0x5a, + 0xda,0x9e,0xab,0x16,0x81,0xa3,0xcb,0xa9,0xc9,0xc9,0x00,0xac,0x48,0x7f,0x8a,0x43, + 0xc0,0x1f,0xe3,0xed,0x4d,0xb0,0xb6,0x48,0xc0,0xce,0x00,0x51,0xb8,0x93,0xd0,0x63, + 0xd6,0xbc,0x6f,0xc7,0x9e,0x25,0xfe,0xdc,0xbe,0x5b,0x6b,0x63,0xfe,0x89,0x6b,0x91, + 0x1e,0x38,0x0e,0xc7,0xef,0x3f,0xf4,0x1e,0xd5,0xf3,0xb9,0xd6,0x64,0xb0,0x94,0x1c, + 0xd7,0xc4,0xf6,0xff,0x00,0x33,0xf3,0xee,0x37,0xe2,0x3a,0x79,0x76,0x11,0xf2,0x3f, + 0x7e,0x5a,0x2f,0xeb,0xc8,0xf3,0xcb,0xfb,0x99,0x6e,0x6e,0x24,0xba,0x9c,0x97,0x79, + 0x1c,0xb3,0x1e,0xe4,0xb7,0x5a,0xca,0x0f,0xb5,0x81,0xe4,0x7f,0x3a,0xb5,0x31,0xc1, + 0x2d,0xd7,0x35,0x98,0xcf,0x93,0xc7,0xe1,0xed,0x5f,0x97,0x37,0xcf,0x77,0x27,0x7b, + 0x9f,0xcd,0x4e,0xb4,0xb9,0xb9,0xdb,0xbb,0x36,0xad,0xae,0x48,0xe8,0x78,0xad,0x88, + 0x6e,0x8b,0x0c,0x66,0xb8,0xc4,0x9b,0x1d,0x78,0xad,0x28,0x6e,0x7d,0x3f,0xc6,0xbf, + 0x34,0xe2,0xcc,0x89,0xca,0xf5,0x69,0xa3,0xf4,0x7e,0x1a,0xce,0xa3,0x65,0x4e,0x6c, + 0xec,0xa3,0xb9,0x18,0xe3,0x8a,0xb9,0x1d,0xc7,0x20,0xfe,0x7c,0xd7,0x25,0x1d,0xd1, + 0x3c,0x67,0xde,0xb4,0xe1,0x9f,0x27,0x93,0xcf,0x1d,0x6b,0xf2,0xdc,0x46,0x11,0xc5, + 0xb4,0xd1,0xfa,0x05,0x2c,0x44,0x5a,0xd1,0x9d,0x6c,0x37,0x27,0x1e,0x95,0xa1,0x1d, + 0xe1,0x1c,0x1a,0xe5,0x56,0x6c,0x00,0x73,0x9a,0x53,0x75,0x8e,0x0f,0x4a,0xf3,0x1e, + 0x1e,0xe7,0x52,0xaa,0xac,0x75,0xeb,0x76,0x5b,0xbd,0x4e,0x93,0x02,0x72,0x78,0xcd, + 0x72,0x51,0x5d,0x83,0x8c,0xfa,0xd6,0xa4,0x17,0x5c,0xf2,0x79,0x35,0x0e,0x8d,0xb4, + 0x64,0xfb,0x4e,0xe7,0x5f,0x6e,0xfc,0x67,0x3d,0x2b,0x40,0xcb,0xf2,0x70,0x7b,0x66, + 0xb9,0xdb,0x6b,0x81,0x57,0x64,0xba,0x01,0x39,0xaa,0x50,0xb2,0x08,0x4d,0xf3,0x68, + 0x66,0xdf,0xcb,0xf3,0xe2,0xaa,0xc7,0x29,0xe3,0xd3,0xbd,0x54,0xba,0x9f,0x73,0xe7, + 0x3d,0x2a,0xb7,0x9f,0xd8,0xfe,0x59,0xac,0x61,0x45,0xdf,0x43,0xbb,0x13,0x55,0x28, + 0xa4,0x8f,0xff,0xd0,0xf8,0x26,0xf6,0xef,0x27,0x62,0xd5,0xad,0x2d,0x5e,0x62,0x30, + 0x09,0x1f,0xce,0xaa,0xe9,0xfa,0x55,0xc6,0xa9,0x38,0x89,0x01,0xc1,0xee,0x2b,0xe8, + 0x8f,0x07,0x7c,0x37,0x67,0x89,0x59,0xa3,0x24,0x90,0x33,0x5f,0x99,0x63,0x33,0xbc, + 0x26,0x12,0x37,0xa9,0x23,0xdf,0xc3,0xd1,0xc4,0x57,0x69,0xc4,0xf2,0x0b,0x9d,0x22, + 0x59,0x63,0xce,0xce,0x71,0xfe,0x4d,0x61,0x45,0xa7,0xbe,0x9f,0x33,0x19,0x06,0x33, + 0xda,0xbe,0xd6,0x5f,0x86,0xd9,0x41,0x98,0xfa,0x0f,0x4a,0xf0,0xcf,0x8a,0x5e,0x1e, + 0x1a,0x04,0xc9,0x95,0xdb,0x91,0x91,0x5f,0x3b,0x97,0x71,0xbe,0x13,0x15,0x98,0x43, + 0x0b,0x4f,0x76,0x7e,0xab,0xc2,0x34,0xb1,0x34,0x71,0x34,0xf9,0xf6,0x3c,0xd6,0x36, + 0xe0,0x0a,0xdf,0xb4,0x9d,0x64,0x75,0x85,0xb8,0x20,0x75,0xf5,0xae,0x52,0x07,0x52, + 0x73,0xdc,0x73,0x5b,0x70,0x48,0x1a,0xe3,0x74,0x63,0x18,0x1f,0xd2,0xbe,0xef,0x19, + 0x3b,0x72,0x9f,0xb4,0x4a,0xb5,0xdd,0x8e,0x85,0x40,0x88,0x6e,0x53,0xc8,0xf5,0xac, + 0xc9,0xae,0xcb,0x4f,0x8c,0x9e,0xbd,0x4d,0x48,0xad,0x80,0x77,0x1f,0x4c,0xe6,0xa9, + 0xce,0x80,0xb8,0x76,0x38,0x19,0xef,0x5c,0x55,0x24,0xd2,0xd0,0xea,0xc2,0x55,0xf7, + 0xaf,0x23,0x54,0x5c,0x6f,0x65,0x2a,0x70,0xc8,0x3d,0x7a,0xd5,0xdf,0xb4,0xe2,0x16, + 0x04,0x0d,0xed,0xdf,0xd0,0x7a,0x56,0x14,0x52,0x00,0xd5,0x34,0xd7,0x27,0x6f,0x20, + 0x62,0xb0,0x75,0xec,0xdd,0xd9,0xf4,0x14,0x2a,0x5c,0xd2,0xb7,0x9d,0x72,0x50,0x30, + 0xce,0x33,0xed,0x59,0x57,0x6f,0x1b,0xb1,0xcb,0x7d,0x49,0xfe,0x55,0x0d,0xac,0x91, + 0x89,0x7e,0x6e,0xf9,0x3e,0xd5,0x8d,0x3c,0xec,0xce,0xd8,0x3d,0x09,0xae,0x5a,0xf8, + 0xcb,0x2e,0x56,0x7b,0xb8,0x6a,0x89,0xc9,0xa3,0xa8,0xb1,0xd3,0x23,0xd5,0x71,0x18, + 0x20,0x1e,0x99,0xcd,0x45,0xad,0x78,0x75,0xb4,0x46,0x59,0x13,0xe6,0x8e,0x4e,0xa7, + 0xd0,0xd6,0x7e,0x91,0xa9,0xa5,0xb4,0x9f,0x33,0x1d,0xdd,0x02,0x8a,0xed,0x35,0x4b, + 0xf1,0x79,0xa4,0x34,0x72,0x10,0xc7,0x6e,0x47,0xb6,0x28,0xb5,0x3a,0xd4,0x5d,0xb7, + 0x3d,0x05,0x34,0x8f,0x3f,0x49,0x17,0x70,0x00,0xf5,0x3e,0x94,0xfd,0x51,0xc2,0x45, + 0x1c,0x60,0xe7,0x9e,0x6a,0xa4,0x04,0x79,0x9c,0xf1,0x8a,0xad,0xa9,0xcd,0xba,0x75, + 0x8c,0x74,0x1c,0x9f,0xc3,0x9a,0xf1,0xe3,0x55,0xa4,0xce,0x1c,0x4c,0x95,0xf4,0x23, + 0xba,0x9c,0x49,0x2a,0x46,0xad,0xf7,0x47,0x7a,0x9e,0x59,0x7c,0xb8,0x00,0x3c,0x71, + 0x8a,0xcd,0x8b,0x0f,0x21,0x6f,0x53,0xfa,0x0f,0x4a,0x5b,0xe9,0x42,0xae,0xde,0x2b, + 0x48,0x54,0x72,0x77,0x64,0x5e,0xd6,0x89,0x8d,0x72,0xc4,0xb1,0x23,0x8c,0xf1,0x55, + 0x01,0xe3,0x24,0xd5,0xc2,0x37,0xa7,0x03,0x38,0xe9,0x55,0xca,0x61,0x73,0x8c,0xe6, + 0xad,0xa6,0xe5,0x73,0xa7,0x13,0x53,0x92,0x16,0x25,0x81,0xca,0x36,0x47,0x4f,0xf1, + 0xaf,0x33,0xf1,0x5d,0xe7,0xda,0x2f,0xcc,0x6a,0x72,0x23,0x18,0xfa,0x9a,0xef,0xe6, + 0x6f,0x22,0x07,0x95,0xb8,0x55,0x04,0xe6,0xbc,0x82,0xe6,0x73,0x35,0xc4,0x92,0x13, + 0x9d,0xcd,0x9c,0xd7,0xd8,0xf0,0xc6,0x1a,0xee,0x55,0x6d,0xb1,0xfc,0xcb,0xe3,0x66, + 0x7a,0xbd,0x95,0x3c,0x04,0x25,0xac,0x9d,0xdf,0xa2,0x2a,0xd3,0x4a,0x8c,0x70,0x3f, + 0x1a,0x7f,0xd7,0xf3,0xa6,0x9c,0x03,0x9a,0xfb,0x58,0x23,0xf9,0xb8,0x6e,0xd0,0x38, + 0xa6,0xe2,0x9d,0x8c,0xf0,0x0d,0x37,0xa9,0xa9,0xf5,0x01,0x62,0x8c,0xb4,0x80,0x0e, + 0x7f,0x0c,0xd7,0xa6,0xf8,0x7a,0xcf,0x25,0x78,0xeb,0x5c,0x16,0x9d,0x11,0x79,0x41, + 0xc6,0x47,0xa5,0x7b,0x0f,0x87,0xad,0x88,0x0a,0x71,0xfa,0x57,0x9b,0x98,0x55,0xe5, + 0x89,0xcb,0x59,0xd8,0xed,0x2d,0x62,0x11,0x42,0x09,0xeb,0x8a,0xc9,0xbb,0x70,0xcc, + 0x49,0xe3,0xeb,0x5a,0xf3,0x3f,0x97,0x0e,0x17,0x8a,0xe7,0x6e,0x1f,0x2d,0xd7,0x83, + 0x5f,0x1d,0x5a,0xb5,0xe4,0xce,0x06,0xf5,0x32,0xae,0x4f,0x53,0xeb,0x59,0x8e,0xa0, + 0x9e,0x6b,0x4e,0x44,0x3d,0x4f,0x5a,0xa6,0x63,0x1c,0x9f,0xf3,0xf8,0xd7,0x24,0x9b, + 0xdc,0xb8,0xbb,0x15,0x02,0x0c,0xee,0xe8,0x49,0xae,0x83,0x4f,0x4e,0x57,0x3d,0xeb, + 0x31,0x23,0xcb,0x0e,0x3a,0xf4,0xae,0x82,0xc9,0x31,0x8c,0x77,0xaf,0x33,0x16,0xd9, + 0xd5,0x4d,0xea,0x5d,0xb9,0x62,0x20,0x3f,0xe7,0xf2,0xaf,0x1b,0xf1,0x43,0x9c,0xb0, + 0xe9,0xfe,0x35,0xeb,0xba,0x8c,0x85,0x61,0x60,0x7b,0x56,0x07,0x84,0xbc,0x09,0x37, + 0x8f,0xfc,0x46,0x60,0x9d,0x8c,0x1a,0x5d,0x9f,0xef,0xf5,0x0b,0x91,0xff,0x00,0x2c, + 0xe1,0x07,0xee,0x21,0xff,0x00,0x9e,0x92,0x7d,0xd4,0xfc,0x4f,0x6e,0x7d,0x2c,0x8e, + 0x50,0xa4,0xdd,0x7a,0xae,0xd1,0x8e,0xa7,0x4d,0xd2,0x46,0xdf,0xc0,0x3f,0x85,0x96, + 0x57,0xee,0x7e,0x23,0xf8,0xc6,0x10,0xda,0x26,0x9f,0x29,0x16,0x76,0xae,0x3f,0xe3, + 0xfa,0xee,0x33,0xc6,0x41,0xeb,0x14,0x47,0x96,0xfe,0xf3,0x7c,0xbd,0x01,0xcf,0xd1, + 0xba,0xdf,0x88,0x6f,0xfc,0x43,0x75,0x25,0xd5,0xd4,0x84,0x03,0xf7,0x47,0x40,0x14, + 0x74,0x00,0x0e,0x00,0x03,0xa5,0x57,0xbd,0xbc,0x8e,0xe8,0x41,0xa6,0xe9,0xb0,0x2d, + 0x96,0x97,0x60,0x8b,0x05,0xad,0xb4,0x63,0x09,0x1c,0x48,0x30,0x14,0x0f,0xd4,0x9e, + 0xe6,0xa9,0xc8,0xaa,0xbf,0xbb,0x51,0xdf,0xbd,0x7c,0x5f,0x11,0x67,0x55,0x33,0x4c, + 0x4b,0x9b,0xd2,0x0b,0xe1,0x5f,0xaf,0xab,0x3c,0x9c,0x46,0x2d,0x49,0xd9,0x6c,0x8c, + 0x47,0x89,0x22,0x47,0xbd,0x93,0xee,0xc7,0xf7,0x47,0xab,0x1e,0x82,0xb8,0xed,0x42, + 0x5d,0xaa,0xc5,0x89,0xdd,0xb7,0x76,0x47,0xa9,0x39,0xae,0x8f,0x56,0xba,0x17,0x0e, + 0x2d,0xa0,0x19,0x86,0x2c,0xf3,0xfd,0xe6,0x3d,0x4d,0x72,0x5a,0x9c,0x85,0x5a,0x53, + 0xeb,0x81,0xf8,0x01,0x5d,0xb9,0x6d,0x35,0x0a,0x77,0x7b,0xb3,0x92,0x32,0xbc,0xae, + 0x7c,0x7f,0xad,0xdb,0xf9,0x1a,0xcd,0xf4,0x3f,0xdd,0xb9,0x9b,0xf2,0x2e,0x58,0x7f, + 0x3a,0xca,0xd8,0x07,0xd6,0xba,0xcf,0x18,0x44,0x13,0xc4,0x77,0xdd,0xb7,0x48,0x18, + 0x7e,0x28,0xb5,0xcc,0xed,0xc7,0x02,0xbf,0x6d,0xc2,0x4f,0x9a,0x85,0x39,0x77,0x48, + 0xfa,0x28,0x7c,0x28,0x84,0x29,0x07,0x38,0xaf,0xa1,0x7c,0x1b,0x73,0xe6,0xe8,0x96, + 0xa1,0x49,0xf9,0x37,0x2f,0xb7,0x0d,0x5e,0x02,0x46,0x3a,0x0e,0x6b,0xd9,0x3c,0x03, + 0x74,0x1b,0x4f,0x96,0xdf,0xbc,0x72,0x02,0x07,0xfb,0xc3,0xfc,0x45,0x6d,0xcd,0xca, + 0xee,0x7d,0x47,0x0b,0x62,0x15,0x3c,0x5f,0x2f,0x74,0xd1,0xeb,0x9a,0x65,0xeb,0x5a, + 0xdc,0x27,0x3b,0x40,0x6c,0x1c,0x7a,0x66,0xa4,0xf1,0x0e,0xab,0x2e,0xa7,0x7d,0xb5, + 0xb2,0x63,0x85,0x76,0x2e,0x4f,0x7e,0xa4,0xd6,0x28,0x9f,0x7c,0xaa,0x38,0x00,0x63, + 0x3e,0xfe,0xff,0x00,0xd2,0x92,0x17,0xf3,0x66,0x70,0xe3,0x80,0xdc,0x7a,0x8f,0x4f, + 0xc2,0xbe,0x86,0x9e,0x2e,0x5e,0xc5,0x42,0xfa,0x1f,0xac,0x65,0x69,0x4e,0xab,0x9b, + 0xe8,0x8b,0x4b,0x2a,0xbe,0xc7,0xce,0x3a,0x7e,0x02,0xba,0xed,0x31,0xc1,0x64,0x0f, + 0xcf,0x3d,0x4f,0xaf,0xa5,0x70,0xf1,0x2e,0xc9,0x9e,0x06,0xce,0x01,0xc8,0xfc,0x7d, + 0x2b,0xb4,0xd3,0x51,0x99,0x15,0x97,0xef,0x21,0xe7,0x3c,0x54,0xd0,0xab,0x67,0x64, + 0x6c,0xea,0x28,0xb7,0x16,0x75,0xb7,0x11,0x10,0xa8,0x7a,0x17,0xce,0x47,0xa5,0x68, + 0xe8,0xc3,0x13,0x15,0x27,0x3b,0xb8,0xf5,0xa6,0x60,0x4b,0x0e,0xd3,0xc3,0x11,0xc1, + 0xcd,0x4d,0xa3,0x97,0x4b,0xc1,0x8e,0x98,0xdb,0x9c,0x7f,0x2a,0xf4,0x1d,0x64,0x9e, + 0x81,0x42,0xad,0xdd,0x99,0xb9,0x70,0x0f,0xd9,0x5f,0xe5,0xc6,0x3a,0xfd,0x6b,0xcf, + 0x6e,0x42,0x2b,0x36,0xde,0x18,0x92,0x46,0x3b,0x8f,0x5f,0x6a,0xf4,0x9d,0x43,0x77, + 0xd9,0x64,0x0c,0x78,0xc1,0x1e,0xd5,0xe4,0x97,0xac,0x52,0x63,0xf3,0x75,0xec,0x2b, + 0x45,0x8a,0x8d,0x85,0x29,0x7e,0xf3,0x41,0x6e,0x1d,0x1d,0x55,0x77,0x1f,0x9b,0xd7, + 0x8f,0x7a,0xc8,0xb8,0x62,0x0f,0x5e,0x84,0xe0,0x8e,0xdf,0x85,0x58,0x9d,0xd8,0x14, + 0x39,0xeb,0x54,0x26,0x05,0x41,0x60,0x32,0x7b,0x7b,0x57,0x3c,0xeb,0x73,0x6a,0x7a, + 0x14,0x6a,0x2b,0x22,0xbb,0x6c,0x3b,0x4a,0xf0,0xc7,0x8f,0x53,0x5a,0xd6,0x78,0x85, + 0x73,0xc7,0x98,0xdd,0x3d,0x80,0xef,0xf5,0xac,0x68,0xf2,0x4e,0xd1,0xf7,0xb3,0x9a, + 0xb6,0x27,0x0a,0x73,0x81,0x9c,0xe6,0x95,0x29,0xa4,0xf9,0x99,0xd1,0x39,0xb6,0xac, + 0x74,0xd6,0xfa,0x8c,0x56,0xf3,0x8f,0x30,0x01,0xce,0x78,0xf4,0xf5,0xad,0xb4,0xd5, + 0x7e,0xd0,0xbb,0xe1,0xfb,0x83,0xa0,0x3d,0xfd,0xeb,0xcd,0x1e,0x59,0x65,0x90,0xee, + 0xe8,0x71,0xde,0xbb,0x1d,0x1e,0x22,0xea,0x0e,0x78,0xae,0xaf,0xae,0xb7,0xa2,0x39, + 0xea,0xc5,0x34,0xa4,0xcd,0x98,0x4c,0x9e,0x63,0xce,0xc3,0x27,0x69,0xe4,0xfe,0x55, + 0x73,0x45,0xd3,0x8c,0xd7,0x68,0xac,0xbf,0x79,0x87,0xe3,0xcf,0x02,0xb5,0xb4,0xeb, + 0x03,0x75,0x0b,0x49,0xb4,0xe0,0x9d,0xab,0xee,0x07,0xf8,0x9a,0xeb,0xf4,0x7d,0x27, + 0xc8,0x9c,0xc8,0xa3,0x98,0xd4,0xb7,0x3d,0x32,0x01,0xc5,0x73,0xf3,0x27,0x3b,0x9d, + 0x34,0x2b,0x28,0xc2,0xd7,0xd4,0xf1,0x6f,0x12,0x44,0xdf,0xda,0x13,0x37,0x52,0xce, + 0xd9,0xf6,0xe7,0xa5,0x47,0xa2,0x59,0xbc,0x57,0x41,0xc7,0x65,0x19,0xc7,0x4e,0xb5, + 0xaf,0xa8,0x44,0xdf,0x68,0x2f,0x37,0xcc,0xe7,0x9c,0x62,0xb4,0x34,0x78,0x9e,0x47, + 0x05,0x53,0x8c,0xe3,0xe9,0x5a,0xa8,0x5e,0x47,0xa9,0xed,0xbd,0xdb,0x5c,0xee,0x74, + 0x88,0x9c,0x32,0xbb,0xfc,0xa0,0x74,0xe7,0xf9,0x57,0xb0,0xe8,0xaf,0xe7,0x44,0xa8, + 0xb8,0x1e,0xb9,0xaf,0x2d,0xb0,0xb7,0x6c,0xaf,0x5e,0x2b,0xad,0x93,0x53,0x5d,0x26, + 0xc1,0xa4,0x1d,0x71,0x80,0x3b,0xb1,0x3d,0x05,0x65,0x8a,0x50,0x85,0x37,0x39,0xbb, + 0x25,0xd4,0xe2,0xc4,0xe6,0x70,0xc3,0xd3,0x95,0x4a,0x8e,0xc9,0x1b,0x5e,0x34,0xf1, + 0x22,0xd9,0xd9,0x0d,0x1a,0xc1,0xf1,0x24,0x83,0x12,0xb0,0xea,0x17,0xd3,0x3e,0xf5, + 0xe2,0xb3,0x3e,0xee,0x33,0xd6,0x96,0xee,0xfe,0x5b,0xc9,0xde,0xe2,0x63,0x96,0x76, + 0xc9,0xf4,0x1e,0xd5,0x41,0xa5,0xca,0xf2,0x79,0xf4,0xaf,0xc6,0xf3,0x6c,0x7b,0xc5, + 0xd7,0x75,0x3e,0xcf,0x4f,0x43,0xf9,0xcb,0x88,0xf3,0x9a,0x99,0x96,0x2e,0x75,0xdf, + 0xc3,0xb2,0x5e,0x45,0x4b,0x8c,0x11,0xd7,0xd7,0x1c,0x56,0x43,0x92,0x3d,0xb3,0x5a, + 0x33,0x3f,0xe9,0x59,0x72,0x12,0x0e,0x4d,0x79,0xf0,0x8d,0xb6,0x3e,0x75,0x81,0x63, + 0x9a,0x7a,0x4a,0xcb,0x8c,0xd5,0x53,0xc9,0xa4,0x07,0x0d,0x8a,0x27,0x42,0x35,0x13, + 0x8c,0x8d,0x28,0xd7,0x9d,0x37,0x78,0xb3,0x66,0x29,0xcd,0x6b,0xc1,0x70,0x31,0x8f, + 0x4a,0xe6,0xa3,0x62,0xab,0xcd,0x5b,0x8e,0x76,0x18,0x27,0xa7,0x5a,0xf9,0xac,0xc3, + 0x85,0x30,0xf5,0xaf,0x24,0x8f,0xa6,0xc1,0x71,0x3d,0x5a,0x76,0x52,0x3a,0xb3,0x71, + 0x85,0x04,0x1e,0x40,0xaa,0xed,0x76,0x00,0x39,0x35,0xcf,0x4b,0xa8,0x2a,0x2f,0x5a, + 0xe7,0x2f,0x35,0xe4,0x88,0xe0,0x93,0x8a,0xf8,0x5c,0x7f,0x08,0xba,0x57,0x95,0x34, + 0x7d,0x86,0x5f,0xc4,0x70,0xad,0x68,0xc8,0xf4,0x58,0xef,0x86,0xee,0xa2,0xb5,0x20, + 0xd4,0x01,0xfe,0x2e,0x2b,0xc7,0x13,0xc4,0x08,0x48,0xcb,0x7b,0xf1,0x57,0xe2,0xf1, + 0x08,0xcf,0x0d,0xda,0xbe,0x7a,0xbe,0x41,0x51,0x74,0x3d,0xd5,0x99,0x53,0xb6,0xac, + 0xf7,0x08,0x35,0x00,0x17,0xef,0x54,0x93,0xea,0xc8,0x14,0xfc,0xd5,0xe3,0x6b,0xe2, + 0x54,0x51,0xcb,0xd5,0x39,0xfc,0x56,0xa7,0x80,0xdd,0x7d,0xeb,0x9a,0x39,0x05,0x79, + 0x68,0xa2,0x52,0xcd,0x28,0xc7,0x57,0x23,0xd3,0xe5,0xd5,0x17,0x77,0xde,0xef,0x54, + 0xe5,0xd5,0xd5,0x7f,0x88,0x1c,0xd7,0x92,0x4b,0xe2,0x70,0x4f,0xde,0xac,0x5b,0x9f, + 0x13,0x31,0x24,0x64,0xfe,0x7c,0x57,0xa5,0x84,0xe1,0x6a,0xb2,0x6a,0xf1,0x38,0xf1, + 0x7c,0x45,0x49,0x2d,0x19,0xff,0xd1,0xf0,0x8f,0x87,0x5e,0x15,0x59,0x5a,0x37,0x75, + 0xea,0x47,0x38,0xaf,0xb8,0xbc,0x1d,0xe1,0x78,0x05,0xba,0x0d,0xa3,0x20,0x0e,0xd5, + 0xf3,0xdf,0x81,0x6c,0x56,0x05,0x8c,0xe3,0x18,0xc1,0xaf,0xa7,0xfc,0x3d,0xa8,0x8b, + 0x74,0x54,0x07,0x18,0xaf,0xe1,0x2e,0x26,0xcf,0xeb,0xd6,0xc4,0x4a,0x1c,0xda,0x1f, + 0xb5,0xe4,0xf9,0x74,0x21,0x42,0x2e,0xc7,0x5d,0x27,0x87,0xad,0xa3,0x8f,0xee,0x8c, + 0xd7,0xc2,0xbf,0xb5,0x36,0x9e,0x6c,0xa3,0xb7,0xb9,0x8d,0x70,0xbb,0x80,0x3f,0x9d, + 0x7e,0x81,0x45,0x70,0x27,0x8c,0x1e,0xb9,0x15,0xf3,0x07,0xed,0x23,0xe1,0x6f,0xed, + 0xaf,0x0b,0xcb,0x34,0x69,0xb9,0xa2,0xf9,0x85,0x79,0xdc,0x2b,0x8c,0xf6,0x19,0xce, + 0x1b,0x11,0x37,0xa7,0x32,0x3e,0xaf,0x01,0x25,0x4e,0xa2,0x3f,0x37,0xec,0xe7,0xdb, + 0x22,0x9c,0xf6,0xae,0x9a,0xc9,0xf7,0xba,0xbe,0x71,0xeb,0xc5,0x71,0x11,0x93,0x0c, + 0xdb,0x58,0x15,0x20,0xe0,0xfd,0x47,0x6a,0xea,0x2d,0x64,0xd8,0x54,0x11,0xd7,0xf5, + 0xaf,0xec,0x2c,0x64,0xaf,0x18,0xb3,0xeb,0x29,0xd7,0x52,0x5a,0x33,0xa8,0x27,0xe6, + 0xdd,0xd7,0x8a,0x86,0xe1,0x97,0x68,0x5e,0x33,0xef,0x50,0x09,0x89,0xc6,0xde,0x82, + 0xab,0xdd,0x48,0x55,0x77,0x1a,0xe1,0x73,0xba,0x3b,0xb0,0xb5,0xda,0x44,0x8b,0x20, + 0x80,0x33,0x8e,0xbd,0x87,0xb5,0x44,0xd7,0x1b,0xc1,0x23,0x9c,0xf3,0x50,0xf9,0x82, + 0x44,0x05,0x97,0x39,0xe9,0x50,0x04,0x6d,0xdc,0x9f,0x7a,0xf3,0xeb,0xd4,0x77,0xd0, + 0xfa,0x0c,0x1e,0x23,0xbe,0xe5,0xbb,0x5c,0xbb,0xbe,0x4f,0x45,0x3c,0x9f,0x5c,0x56, + 0x6b,0x62,0x12,0x77,0x0c,0x8c,0xff,0x00,0x3a,0xbd,0x18,0x65,0x2d,0xb7,0xbf,0x5f, + 0x7a,0xa9,0x74,0x9b,0x81,0x23,0x80,0x2b,0xcd,0x72,0xd6,0xec,0xf7,0x70,0xd8,0x8f, + 0x79,0xea,0x52,0x69,0x71,0x9d,0xbc,0x10,0x6b,0x66,0x2d,0x78,0x35,0x9b,0xdb,0x49, + 0xf7,0x80,0xc0,0xc5,0x72,0x72,0x96,0xdc,0x40,0xcd,0x41,0x01,0x0b,0x70,0x19,0xf9, + 0x1f,0xce,0x9d,0x0c,0x44,0x95,0x4b,0x27,0xb9,0xed,0x42,0xa5,0xe3,0xa9,0xd3,0x5b, + 0xc8,0x19,0xb2,0x4f,0x03,0x9f,0xc2,0xb2,0x6e,0xa5,0x57,0x99,0x88,0xee,0x71,0x57, + 0x16,0x41,0x0d,0xbb,0x31,0x1c,0xe2,0xb0,0xb7,0x16,0x6c,0xb7,0x3f,0xa7,0x5a,0xe4, + 0x52,0xd1,0x9c,0x92,0x7c,0xd3,0x34,0xe0,0xe3,0xee,0xf6,0xe9,0x59,0xf7,0x72,0x33, + 0xc9,0x8c,0xe4,0xd5,0x98,0xd8,0x84,0x2e,0x78,0x26,0xb2,0x8b,0x16,0x73,0x91,0x91, + 0x5a,0xd0,0x76,0xd4,0xe8,0xa5,0x14,0xdd,0xd9,0x69,0x30,0x30,0x73,0x52,0x00,0x1f, + 0x81,0x4c,0x81,0x57,0xbe,0x6a,0x59,0x1d,0x21,0x89,0x9c,0xf5,0x1d,0xcf,0xa5,0x7a, + 0x14,0x2f,0x29,0x69,0xd4,0xf3,0x33,0x9c,0x64,0x69,0x53,0x94,0xa4,0xf6,0x38,0xef, + 0x16,0x5f,0x79,0x36,0x82,0xd5,0x0e,0x0c,0x87,0x1f,0x85,0x79,0x96,0x49,0x38,0xad, + 0xbd,0x76,0xf8,0xdf,0x5e,0xbb,0xe7,0xe4,0x4e,0x16,0xb0,0xab,0xf5,0x2c,0xaf,0x08, + 0xa8,0x61,0xe3,0x1e,0xa7,0xf0,0xc7,0x19,0xe7,0x6f,0x34,0xcd,0x6a,0xd7,0xbf,0xba, + 0xb4,0x5e,0x88,0x0f,0x3d,0xe9,0xad,0xd2,0x9d,0x48,0xc7,0x1c,0xd7,0xa3,0xf3,0x3e, + 0x52,0xe3,0x4f,0x3c,0xf6,0xa4,0x23,0x03,0x9e,0xf4,0xb8,0x3c,0x66,0x95,0x46,0x5f, + 0x03,0xa6,0x45,0x26,0x26,0xce,0x83,0x46,0x80,0xb3,0xa9,0xaf,0x6a,0xd1,0x61,0xd9, + 0x12,0xe7,0x80,0x31,0x5e,0x65,0xa0,0xdb,0x6e,0x2b,0x8a,0xf6,0x0d,0x3e,0x22,0x91, + 0x0f,0x6e,0x95,0xf2,0xf9,0xce,0x23,0x5b,0x1c,0x18,0x8a,0x9b,0xa2,0x3b,0xc7,0x24, + 0xed,0x15,0x89,0x28,0xcf,0x23,0xbd,0x6e,0x5d,0x26,0x4e,0x7d,0x7a,0x7f,0x8d,0x64, + 0xba,0x10,0xf8,0xf4,0xaf,0x95,0x77,0x5a,0xa3,0x86,0x33,0xd4,0xa2,0xcb,0xeb,0x50, + 0x32,0x62,0xaf,0x84,0x39,0xc5,0x47,0x22,0x05,0x19,0xa4,0xe7,0xa1,0x69,0xbb,0x94, + 0xa3,0x40,0x4e,0x7f,0x4e,0xb5,0xbd,0x6a,0x81,0x71,0xdb,0xfa,0x56,0x4c,0x63,0x2c, + 0x31,0xd3,0xdb,0xd6,0xb7,0xac,0xe2,0x79,0x30,0xa8,0x09,0x66,0x20,0x00,0x07,0x24, + 0x9f,0x4a,0xf3,0xb1,0x73,0xbb,0xb2,0x3b,0xa9,0xf4,0x64,0x90,0xe8,0xf7,0xbe,0x20, + 0xd4,0x60,0xd1,0xb4,0xe5,0xdf,0x35,0xcb,0x84,0x5c,0xf0,0xa3,0xfb,0xcc,0xc7,0xb2, + 0xa8,0xe4,0x9f,0x4a,0xf6,0x88,0x2d,0x74,0xdd,0x0b,0x4f,0x8f,0xc2,0x9a,0x0e,0x1a, + 0xda,0x03,0xbe,0xea,0xe7,0x18,0x6b,0xab,0x8e,0x8f,0x23,0x7b,0x0e,0x88,0x3b,0x2d, + 0x49,0x6d,0xa5,0xc5,0xe0,0xcd,0x2f,0xfb,0x3d,0x36,0x9d,0x73,0x50,0x40,0x6f,0x24, + 0x1c,0xfd,0x92,0x06,0xe5,0x6d,0xd4,0xf6,0x76,0xe0,0xc8,0x7e,0x8b,0x54,0x80,0x4b, + 0x78,0xf1,0x9c,0xf3,0xf3,0x13,0xd7,0xe9,0x5e,0x4e,0x3f,0x14,0xdd,0x3f,0xab,0xc5, + 0xe9,0xd7,0xcd,0xf6,0x39,0x31,0x98,0x9b,0xbe,0x48,0xed,0xd4,0xb0,0x5e,0x38,0x14, + 0x91,0x91,0x80,0x7f,0x4a,0xe7,0x67,0xbd,0x79,0x98,0xc5,0x19,0xeb,0xc1,0x3d,0xf9, + 0x3f,0xd6,0x96,0xfa,0xe5,0xdf,0x28,0xbd,0xfa,0xd5,0x32,0xc2,0xde,0x22,0x0f,0xde, + 0xc7,0x5e,0xf9,0x3f,0xe1,0xd2,0xbc,0xbc,0x35,0x15,0x29,0x73,0x34,0x79,0xbc,0xda, + 0xe8,0x54,0xb8,0x20,0x48,0x71,0xf2,0xa8,0x21,0x41,0xec,0x7d,0x6b,0x95,0xd4,0x26, + 0x2e,0x64,0x3d,0xcb,0x1a,0xdd,0x92,0x41,0x21,0x0d,0xdb,0x9a,0xe7,0xae,0xce,0xf4, + 0x38,0xc7,0xde,0x38,0xaf,0x7e,0x93,0xb2,0x56,0x47,0x45,0x28,0x6b,0x76,0x7c,0xef, + 0xe3,0x88,0xb6,0xeb,0xac,0xe4,0x71,0x24,0x48,0xdf,0xcc,0x7f,0x4a,0xe3,0x82,0xf2, + 0x48,0xed,0xda,0xbd,0x1f,0xc7,0xf0,0xe3,0x50,0xb7,0x9b,0x1c,0xb4,0x45,0x4f,0xfc, + 0x05,0xbf,0xfa,0xf5,0xe7,0xec,0x09,0x38,0xe9,0x5f,0xae,0x64,0xf5,0x39,0xf0,0x54, + 0x9d,0xba,0x1f,0x41,0x4d,0xfb,0xa8,0x83,0x67,0xe1,0x5d,0xa7,0x83,0x6e,0xcd,0xae, + 0xa3,0xe5,0x1e,0x16,0x55,0xda,0x7e,0xbd,0x45,0x72,0x5b,0x46,0x79,0xfa,0xfa,0x55, + 0x9b,0x59,0x1e,0xde,0x78,0xe4,0x5e,0x36,0x9c,0x8f,0xa8,0xaf,0x42,0x51,0xba,0xb1, + 0xd7,0x84,0xae,0xe8,0xd6,0x8d,0x55,0xd1,0x9e,0xfc,0xb2,0x08,0x6e,0x53,0x77,0x21, + 0xc6,0x70,0x3d,0xab,0xaa,0xb6,0xb3,0x73,0x20,0x90,0xa9,0x1b,0xc6,0xe1,0xf4,0x35, + 0xc3,0xdb,0xce,0xb7,0xb6,0x70,0x5c,0xa6,0x4e,0x00,0xe9,0xdb,0xeb,0x5f,0x45,0x69, + 0x3a,0x22,0x6a,0x7e,0x19,0xb2,0xd4,0x2d,0xc6,0x64,0x8d,0x31,0xc7,0x7c,0x70,0x45, + 0x74,0x61,0x2b,0x7d,0x96,0x7e,0xb9,0x96,0x66,0x30,0x84,0xd3,0x93,0xd2,0x47,0x97, + 0xea,0x76,0x66,0x16,0x8e,0xe8,0x0c,0x06,0xf9,0x18,0xff,0x00,0x2a,0xdd,0xd2,0x48, + 0x1b,0x4e,0x77,0x0e,0xe3,0x1d,0xc5,0x74,0xd7,0xba,0x1b,0xdd,0x58,0x4b,0x01,0x00, + 0xb1,0x04,0xaf,0x1f,0xc4,0xbc,0x8a,0xe1,0xf4,0x89,0xda,0x19,0x04,0x32,0x8d,0xa4, + 0x12,0xac,0x0f,0x62,0x2b,0x77,0x3e,0x5a,0x96,0x67,0x7e,0x3a,0xa2,0x8c,0xf9,0x97, + 0x53,0xd5,0x2c,0x7c,0x89,0xd1,0x71,0x9c,0x81,0xc7,0xb1,0xf7,0xfc,0x2b,0x5f,0x4d, + 0x87,0xca,0xbb,0x51,0xd7,0x07,0xaf,0xa5,0x73,0xfa,0x7c,0x90,0xc6,0x41,0x88,0xf0, + 0x71,0x8f,0xaf,0x7a,0xea,0x22,0xb8,0x8e,0x09,0x04,0xcd,0xce,0xee,0x72,0x31,0xc5, + 0x6b,0x3a,0xb7,0x47,0x9f,0x1c,0x53,0x84,0xcd,0x9d,0x42,0x0d,0xeb,0x28,0x51,0xd5, + 0x77,0x01,0x5e,0x4b,0x79,0x6c,0x0c,0x85,0x98,0x73,0x93,0xda,0xbd,0x62,0x2b,0xd4, + 0x91,0xf9,0x23,0xe6,0x5c,0x1e,0xe0,0x57,0x9d,0x6b,0x3b,0x6d,0xae,0x5b,0xfb,0xa4, + 0xe4,0x8a,0xe1,0x96,0x29,0xc5,0xd8,0xb5,0x8c,0x94,0xa6,0xd2,0x39,0x7b,0x8b,0x2f, + 0xdd,0x2b,0xe0,0x93,0x9e,0xb5,0x9e,0xf6,0xe5,0x72,0xfd,0xc0,0xc6,0x3b,0x66,0xb7, + 0xbc,0xd0,0x55,0xd4,0x1c,0x81,0xc0,0xc5,0x42,0x61,0x2c,0xbb,0xb1,0xcf,0x5c,0x7b, + 0xd6,0xd4,0x71,0x2d,0x9e,0x86,0x17,0x12,0xd3,0xd5,0xe8,0x73,0x9f,0x66,0x2a,0xcc, + 0xed,0xcf,0x3c,0x01,0x4a,0x6d,0xf7,0x10,0x71,0x8c,0x7e,0xb5,0xd1,0x3d,0x93,0xb3, + 0x01,0xb0,0xf4,0x19,0x23,0xd6,0x91,0xac,0x19,0x9d,0x40,0x5c,0xe3,0x8a,0xee,0x8d, + 0x4d,0x35,0x3d,0x05,0x8a,0xec,0x73,0xe2,0x00,0xef,0x90,0xbe,0x9f,0xa5,0x7a,0x1e, + 0x99,0x66,0xc6,0x08,0xd1,0x38,0xdd,0x8e,0x9f,0xa5,0x50,0x87,0x4e,0x24,0x00,0x07, + 0x3f,0xce,0xbd,0xa3,0xc0,0xde,0x19,0x97,0x54,0xbe,0xb7,0xb7,0x54,0xcf,0x20,0xb7, + 0xb2,0x8e,0x4d,0x35,0x55,0x45,0x6a,0x2a,0xb8,0xa8,0xc6,0x0e,0x4c,0xe8,0x74,0xaf, + 0x0d,0x1b,0x6d,0x36,0x0f,0x97,0x0d,0xb7,0x24,0x63,0x92,0xcd,0xcf,0xe9,0x5b,0xb6, + 0x3a,0x54,0x36,0xf2,0x32,0xb7,0x24,0x82,0x5f,0x1f,0xc2,0x31,0x5e,0x9b,0xfd,0x8c, + 0xd6,0xaa,0x40,0x18,0x93,0x18,0x03,0x8f,0x94,0x7a,0xd5,0x28,0xb4,0xeb,0x74,0x0c, + 0x99,0x05,0xc9,0xe4,0x9e,0x99,0xac,0xb0,0xf5,0xdc,0xe7,0x65,0xd4,0xf2,0x23,0x99, + 0x37,0x7d,0x4f,0x93,0x2f,0x34,0xe5,0x7b,0xb6,0x65,0x50,0x40,0x3c,0xe7,0xf4,0xad, + 0x7d,0x2f,0x4c,0xf3,0x0f,0xca,0xbb,0x00,0xea,0x45,0x7a,0xa6,0xb3,0xe0,0xeb,0x7b, + 0x5b,0xe6,0x70,0xdb,0xd6,0x62,0x5c,0x11,0xd0,0x7a,0x81,0xf4,0x3d,0xe9,0xf1,0x69, + 0xb6,0xda,0x6d,0xb1,0xbc,0xbc,0x65,0x8a,0x25,0x19,0x00,0xf1,0x9c,0x77,0x26,0xbd, + 0xd5,0x51,0x46,0x2d,0xcb,0x43,0xd7,0x79,0xb4,0x15,0x3e,0x66,0xf4,0x39,0x91,0x6d, + 0x1e,0x9f,0x6e,0x67,0xb8,0x6d,0xa8,0xbd,0xcf,0x7f,0x4a,0xe0,0x75,0x7d,0x4e,0x5b, + 0xc9,0x0c,0x8d,0xc2,0x2f,0x08,0x99,0xe8,0x3f,0xc6,0xb4,0x75,0xcd,0x69,0xf5,0x4b, + 0x92,0x63,0xc8,0x81,0x3e,0xe2,0xf4,0xfc,0x4f,0xf4,0xf4,0xae,0x3e,0xea,0x5c,0x57, + 0xe6,0x1c,0x49,0xc4,0x2f,0x19,0x2f,0xab,0xd0,0x7f,0xbb,0x5f,0x8f,0xfc,0x03,0xf2, + 0x5e,0x28,0xe2,0x59,0x63,0x65,0xec,0x29,0x3f,0xdd,0xaf,0xc5,0xff,0x00,0x91,0x1b, + 0x4f,0x92,0x5b,0x38,0xfc,0x2a,0x1f,0x37,0x9e,0x0e,0x2a,0x93,0x4a,0x39,0x03,0xa5, + 0x31,0x4f,0x6a,0xf9,0x47,0x13,0xe2,0x65,0x2e,0xe5,0xc9,0x1b,0x23,0x1e,0xd5,0x4d, + 0xcf,0xad,0x21,0x93,0xae,0x3b,0x54,0x4e,0xe0,0xe3,0xeb,0x5b,0x41,0x3b,0x12,0xd8, + 0xc7,0xeb,0x83,0xc7,0x1d,0x69,0xa1,0xb8,0x00,0x1f,0x61,0x48,0xe7,0x19,0x6e,0x95, + 0x5c,0xb7,0xb5,0x52,0x4a,0xe4,0xb6,0x5d,0xde,0x07,0x3d,0x71,0xda,0x9a,0xd7,0x03, + 0x93,0xde,0xa8,0xb4,0x84,0x12,0x31,0x83,0x54,0x66,0x9c,0xaa,0x9a,0xa7,0x1d,0x00, + 0x35,0x0b,0xd5,0x54,0x3c,0xfd,0x2b,0xcc,0x35,0x7d,0x4d,0xf7,0x9d,0xac,0x4f,0x3c, + 0xfa,0x57,0x4b,0xaa,0x5d,0x91,0x19,0x01,0xab,0xcc,0x75,0x09,0xcb,0xcb,0xc9,0xf7, + 0xae,0x1a,0xf4,0x14,0x92,0xe6,0x3d,0x9c,0xb9,0x3d,0xcd,0x68,0xf5,0x49,0x40,0x00, + 0x9e,0xbd,0xea,0xc2,0x6a,0xf2,0xae,0x08,0x63,0x5c,0xba,0x12,0x71,0x8e,0x9f,0x4a, + 0xb4,0xb9,0xff,0x00,0x3f,0x5a,0xe3,0x9e,0x06,0x95,0xbe,0x13,0xb3,0x13,0x8b,0xab, + 0x1d,0xa4,0x74,0x87,0x57,0x98,0xe3,0x06,0xa1,0x3a,0x84,0xc7,0x9c,0xf5,0xac,0x85, + 0x3c,0xe4,0xd5,0x80,0x70,0x3d,0x73,0x53,0x1c,0x35,0x28,0xed,0x13,0x82,0x58,0x9a, + 0xb2,0xde,0x45,0xc3,0x73,0x29,0x19,0x27,0x14,0xd4,0x66,0x27,0xe6,0xcf,0x06,0xab, + 0xa9,0xdd,0x9c,0x0e,0xf5,0x6e,0x21,0x8a,0xbe,0x48,0xc7,0x64,0x67,0xce,0xde,0xec, + 0xff,0xd2,0x6f,0x86,0x57,0xc9,0x44,0xc7,0x1c,0x57,0xab,0x69,0xb7,0x24,0x60,0x83, + 0x8a,0xf2,0xad,0x27,0xf7,0x71,0xe7,0x35,0xdb,0xd8,0xdc,0x15,0xc5,0x7f,0x9e,0x58, + 0xf8,0xb9,0x55,0x93,0x67,0xf4,0x2e,0x16,0x2a,0x34,0xa2,0x91,0xed,0x7a,0x3d,0xfe, + 0xe0,0x14,0xd3,0x7c,0x5d,0xa5,0xc7,0xab,0xe8,0x57,0x56,0xce,0x37,0x6e,0x8d,0xb1, + 0x9f,0xa5,0x72,0x1a,0x5d,0xd8,0x52,0x08,0x35,0xe8,0xd6,0x72,0x2d,0xd4,0x26,0x36, + 0xee,0x31,0x5c,0x94,0x5b,0x84,0xd4,0x96,0xe8,0xe9,0x8c,0xb9,0x5d,0xcf,0xc6,0x2f, + 0x19,0xe9,0xad,0xa3,0x78,0x96,0xee,0xd1,0x97,0x6e,0xc9,0x49,0x03,0xa7,0x53,0x4b, + 0x6b,0x32,0xb4,0x4a,0xc3,0x8e,0x2b,0xd7,0xff,0x00,0x69,0x0f,0x0d,0x36,0x8d,0xe3, + 0x49,0x66,0x54,0xc4,0x73,0x1d,0xc0,0xfd,0x6b,0xc4,0x34,0xe9,0x03,0x21,0x0d,0xda, + 0xbf,0xb0,0xf2,0x5c,0x72,0xc7,0xe5,0x14,0x6b,0xc5,0xdd,0xb4,0xbe,0xf5,0xb9,0xec, + 0xd3,0xad,0xcb,0x28,0xbe,0x87,0x51,0x13,0xe5,0x49,0x0d,0x44,0x98,0x91,0x48,0x27, + 0x91,0x51,0xdb,0xa6,0x52,0xa3,0x91,0x98,0x12,0xb8,0x3e,0x94,0xdb,0x7d,0x4f,0x63, + 0x0f,0x57,0x57,0xa8,0x8a,0xed,0x8d,0xb8,0xc6,0xdf,0xd6,0xa5,0x59,0x97,0xf8,0xaa, + 0x04,0x04,0x03,0x9e,0x73,0xe9,0x51,0x1f,0xf5,0x9f,0xa5,0x70,0xd6,0x96,0xe7,0xb7, + 0x86,0xa8,0x9a,0xd1,0x97,0xed,0xe5,0x22,0x42,0x5b,0x90,0x7a,0x52,0x38,0x3b,0x09, + 0x6f,0xc2,0xa2,0x45,0x1b,0x47,0xf2,0xa7,0x34,0xcc,0x46,0xc6,0x03,0x8e,0x95,0xe6, + 0x4a,0x57,0x77,0x3e,0x82,0x84,0xec,0xd3,0x30,0xee,0x82,0xa1,0x66,0x0b,0x8e,0x3e, + 0xb5,0x8c,0xa7,0xcc,0xb8,0x03,0x18,0x15,0xb3,0x72,0xe0,0xe5,0x00,0xac,0x88,0x76, + 0x89,0xc9,0x1d,0xa8,0x8d,0xb5,0x95,0xf5,0x3d,0xc8,0xcd,0xd8,0xbd,0x77,0x28,0x58, + 0xd6,0x21,0x9f,0xaf,0xb5,0x54,0x8c,0x67,0x1d,0x70,0x69,0xd2,0x45,0x24,0xb9,0x98, + 0xaf,0xcb,0x9a,0x72,0xe1,0x17,0x71,0xe0,0x56,0x5e,0x42,0xa1,0x51,0x4a,0xed,0x0e, + 0xbd,0x93,0xcb,0x88,0x20,0xeb,0x59,0x91,0xb0,0x0a,0x33,0x4d,0x96,0x46,0xb9,0x9f, + 0x83,0xf2,0xad,0x3e,0x25,0x0c,0xfd,0x80,0x1f,0xe7,0xad,0x6d,0x4e,0xeb,0x4b,0x1d, + 0x92,0xa8,0xa3,0x1b,0x96,0xad,0xd8,0x96,0xc9,0xe0,0x57,0x3f,0xe2,0x7d,0x48,0xdb, + 0x40,0x62,0x46,0xe5,0xff,0x00,0xad,0x6d,0xcf,0x34,0x70,0x23,0x31,0xe3,0x02,0xbc, + 0xa3,0x59,0xbe,0x37,0xb7,0x4c,0x73,0xf2,0xaf,0x03,0xbd,0x7d,0x7f,0x0e,0x60,0x1d, + 0x6a,0xaa,0xa3,0x5a,0x23,0xf0,0x5f,0x15,0xb8,0xb5,0x61,0x70,0xb2,0xc2,0xd1,0x7e, + 0xfc,0xb4,0x31,0xd9,0xb9,0xce,0x7b,0xf2,0x69,0xb9,0x3d,0x7d,0x68,0xe4,0xf3,0x47, + 0xf3,0xaf,0xd1,0xd4,0xac,0x7f,0x2b,0xbd,0x43,0x24,0xf5,0xa4,0xe4,0xf4,0xe2,0x8f, + 0xa0,0xa3,0x1c,0xd2,0xd0,0x62,0x60,0xfa,0xfe,0x95,0x35,0xb2,0x96,0x99,0x7d,0x49, + 0xe9,0x50,0x1d,0xd9,0xe2,0xb4,0xb4,0xb8,0xf7,0xca,0xa7,0xaf,0x22,0xa2,0x6e,0xc9, + 0xb3,0x39,0xbd,0x19,0xe9,0x5e,0x1d,0xb7,0xce,0xdc,0x8e,0x7a,0x57,0xaa,0x41,0x16, + 0xc8,0x07,0x1c,0xe3,0xda,0xb8,0xcf,0x0d,0xda,0x10,0xa0,0x81,0x9a,0xef,0x99,0x42, + 0x20,0xcf,0x6a,0xf8,0x5c,0xce,0xad,0xea,0x1e,0x36,0x26,0x7a,0xd8,0xc8,0x9a,0x30, + 0x3d,0xff,0x00,0xa5,0x65,0x4b,0x1e,0x39,0x3c,0xd6,0xdc,0xe3,0x3d,0x6b,0x39,0xd7, + 0x3c,0xd7,0x95,0x39,0xab,0x68,0x73,0xa6,0x67,0x08,0xf9,0xf7,0xa8,0x66,0x04,0x1c, + 0x75,0x15,0xa4,0x50,0x73,0x8e,0xbd,0x6a,0xa4,0x83,0x3c,0x01,0xc9,0xac,0x79,0xae, + 0x6d,0x4d,0xb6,0xec,0x54,0x86,0x3c,0xbe,0x2b,0xda,0x7c,0x25,0xa7,0x43,0xe1,0xbb, + 0x08,0xfc,0x51,0xa8,0x46,0x1a,0xea,0x6c,0x8d,0x32,0x06,0xc7,0xde,0x1c,0x1b,0x96, + 0x1f,0xdd,0x5f,0xe0,0xcf,0x56,0xe7,0xb5,0x72,0xfe,0x0b,0xf0,0xd5,0xb6,0xa0,0xd3, + 0x6b,0x3a,0xce,0x63,0xd2,0xac,0x30,0xd3,0x9c,0xe1,0xa6,0x73,0xf7,0x20,0x43,0xfd, + 0xe7,0xef,0xfd,0xd5,0xc9,0xf4,0xae,0x9b,0x53,0xd4,0xa5,0xd6,0x2f,0x0d,0xf5,0xd0, + 0x11,0x8c,0x6c,0x8e,0x25,0x18,0x58,0xe3,0x51,0x85,0x55,0x1d,0x80,0x1d,0x2b,0xc6, + 0xc7,0x56,0xb3,0xb2,0x7a,0x9d,0x35,0xab,0x72,0x45,0x25,0xb8,0xe1,0x3c,0xc6,0x49, + 0x2e,0xee,0x1f,0x7c,0xb2,0x92,0xce,0xcc,0x72,0x49,0x27,0x39,0xe6,0xa9,0x4b,0x76, + 0x25,0x6c,0x83,0xf2,0x28,0xfd,0x7d,0xab,0x36,0x7b,0xb7,0x90,0x84,0x42,0x08,0x38, + 0xcf,0xd2,0xa0,0x95,0xc2,0xe1,0x00,0xe9,0x5e,0x4c,0xa0,0xdd,0x91,0xe6,0x34,0xd9, + 0x69,0x64,0xf3,0x18,0xca,0x79,0xdb,0xd3,0x3e,0xb5,0x4a,0xea,0x52,0xec,0x13,0x3c, + 0x01,0xfe,0x4d,0x48,0xaf,0xb1,0x46,0xec,0x74,0xe7,0xf9,0xd5,0x07,0xf9,0xbe,0x6c, + 0xf5,0x20,0xd7,0x64,0x62,0xa2,0xb9,0x52,0x35,0xa7,0x4c,0x64,0xb8,0x48,0xf6,0x8e, + 0xc3,0x1d,0x7b,0xd6,0x34,0xa3,0x6d,0xb8,0x66,0xea,0x7b,0x55,0xb9,0x64,0x0d,0xbc, + 0xe7,0xae,0x6b,0xd1,0x7e,0x16,0x78,0x2e,0xdb,0xc6,0x9e,0x24,0x86,0xc6,0xf9,0x59, + 0xac,0xad,0xd1,0xae,0x27,0x0a,0x70,0x59,0x17,0x00,0x28,0x3d,0xb7,0x31,0x02,0xbb, + 0xa8,0xc1,0xcd,0xa8,0xa4,0x75,0x41,0x25,0xa9,0xf3,0x8f,0x8a,0x7c,0x25,0xaf,0x6b, + 0xe2,0xd5,0xb4,0x7b,0x0b,0x9b,0xc7,0x52,0xc1,0x96,0x08,0x9e,0x52,0x01,0xc6,0x32, + 0x11,0x49,0xe4,0xf4,0xad,0x0f,0x0f,0xfe,0xcc,0xbf,0x1a,0x7c,0x48,0xcb,0xfd,0x9f, + 0xe1,0x6d,0x43,0x6b,0x1e,0x1e,0x58,0xbc,0x85,0xfc,0xe5,0x29,0x5f,0xb8,0xbf,0x0f, + 0x3c,0x2f,0xe1,0xdf,0x0d,0xe9,0xd0,0xda,0xe9,0x16,0x50,0x5a,0x83,0xd4,0xaa,0x65, + 0xce,0x3d,0x58,0xf2,0x7e,0xa6,0xbd,0xb2,0xc9,0x61,0x8a,0x01,0x21,0x1b,0x98,0xf3, + 0x8c,0x63,0x8e,0xd5,0xf7,0xd9,0x7e,0x32,0xad,0x1c,0x3c,0x28,0xab,0x04,0xb3,0x07, + 0x15,0x68,0x9f,0x85,0xfa,0x5f,0xec,0x13,0xf1,0xbf,0x51,0x0d,0xe7,0xc1,0xa7,0xd9, + 0x30,0xc7,0xcb,0x3d,0xda,0x83,0xcf,0x5c,0xec,0x57,0xc7,0xd3,0xbd,0x7a,0x16,0x8f, + 0xff,0x00,0x04,0xe6,0xf8,0x8f,0x3c,0xeb,0xfd,0xab,0xad,0x69,0x96,0x9d,0x0b,0x79, + 0x7e,0x75,0xc1,0x03,0xf0,0x58,0xff,0x00,0x9d,0x7e,0xce,0xc7,0x14,0x5c,0x0d,0x80, + 0x1c,0xee,0x6e,0x3a,0x93,0x5a,0x10,0xdb,0xae,0x4b,0x91,0xd0,0x77,0xcf,0xf9,0xe9, + 0x5d,0x9f,0xda,0x15,0x5a,0xdc,0xe3,0x9e,0x67,0x5b,0xa3,0x3f,0x32,0x7c,0x3d,0xfb, + 0x01,0xda,0x69,0x36,0x66,0xdf,0x55,0xf1,0x34,0xb2,0xb6,0x78,0xf2,0x2d,0x80,0x03, + 0x3d,0xbe,0x77,0x6c,0xd7,0xb1,0xe8,0x1f,0xb3,0x26,0x8b,0xe1,0x6d,0x31,0x74,0xf5, + 0xd5,0x6e,0x6e,0x13,0x71,0x61,0xbe,0x34,0x07,0x2c,0x3a,0x00,0x2b,0xed,0x42,0x11, + 0x59,0x99,0x97,0x07,0x1f,0x2f,0xa0,0xf5,0xaa,0x52,0xd9,0xf9,0xf8,0x04,0x7d,0xee, + 0x4b,0x7a,0x0a,0x29,0x62,0xaa,0x36,0xe4,0xd9,0x6b,0x88,0x31,0xea,0x3c,0x91,0xaa, + 0xd2,0x3e,0x40,0x1f,0xb3,0xa7,0x86,0xe5,0xb9,0xc2,0x4d,0x74,0x37,0x75,0x38,0x5d, + 0xa0,0xfe,0x02,0xb9,0xdb,0xef,0xd8,0xe7,0xc1,0xd7,0xb7,0x92,0x5e,0xc7,0x7d,0x7d, + 0x0b,0x39,0xcb,0x2a,0x6c,0xc6,0xef,0x50,0x0a,0xf7,0xaf,0xba,0xa0,0xb2,0x58,0x10, + 0x95,0x25,0x8e,0x46,0x40,0xfd,0x33,0x4a,0xf6,0xcc,0x58,0x6e,0x50,0x7d,0x4e,0x71, + 0xf9,0x8e,0xf5,0xb2,0xc4,0xd5,0x9b,0xbb,0x91,0x4f,0x8a,0x33,0x4e,0xb8,0x89,0x1f, + 0x06,0x5b,0xfe,0xc8,0xda,0x64,0x64,0x24,0x5a,0xad,0xe1,0x50,0x0f,0x2e,0xb1,0x8c, + 0x63,0xd8,0x0e,0x6a,0x96,0xa3,0xfb,0x29,0xdd,0x00,0x3f,0xb3,0xb5,0xed,0xaa,0x0f, + 0x1e,0x7c,0x24,0x90,0x3d,0x3e,0x42,0x33,0xf9,0x57,0xdf,0x82,0xd8,0x83,0x95,0x19, + 0x35,0x38,0xb6,0x44,0x1b,0xb0,0x1b,0xb7,0x23,0x35,0xbf,0xd6,0x2a,0x47,0x55,0x22, + 0xa9,0xf1,0x56,0x64,0x9f,0x37,0xb6,0x6f,0xee,0x3f,0x38,0xff,0x00,0xe1,0x97,0xbc, + 0x5f,0x02,0x9b,0x8b,0x5d,0x52,0xd2,0x70,0x3f,0xbc,0xb2,0x45,0x9f,0xcf,0x38,0xaf, + 0x3d,0xf1,0x77,0xec,0xfb,0xf1,0x0c,0x46,0xef,0x6b,0x6d,0x15,0xcb,0x8e,0xbe,0x5c, + 0xaa,0x79,0xed,0x8d,0xc0,0x75,0xaf,0xd5,0xc5,0xb3,0x0e,0x5b,0x77,0xcd,0xed,0xcf, + 0x1e,0xb5,0x87,0xad,0xdb,0x69,0x1a,0x16,0x97,0x79,0xe2,0x0d,0x6a,0xe1,0x2c,0xf4, + 0xeb,0x08,0x24,0xb9,0xb9,0x9e,0x53,0x85,0x8a,0x18,0xc6,0xe7,0x72,0x7d,0x00,0xae, + 0x2a,0x98,0xba,0xae,0x49,0x27,0x76,0xcf,0x46,0x87,0x1a,0x66,0x51,0x95,0xdc,0x93, + 0xf9,0x1f,0x88,0xda,0xe7,0x82,0xbc,0x6b,0xe1,0x54,0xff,0x00,0x8a,0x83,0x49,0xba, + 0xb1,0x42,0x70,0x24,0x74,0xfd,0xd9,0xc7,0xfb,0x6b,0x95,0xfd,0x6b,0x12,0xd2,0xe1, + 0x83,0x79,0x72,0x2e,0x42,0xfa,0x9e,0xbf,0x5a,0xf6,0x0f,0x1a,0xfe,0xd7,0x3a,0xc7, + 0x89,0x7c,0x4b,0x73,0x6b,0xe1,0xbb,0x78,0x34,0xef,0x0e,0x09,0x0a,0x5b,0x43,0x35, + 0xba,0xc9,0x35,0xc4,0x40,0xe0,0x3d,0xc9,0x94,0x1e,0x5c,0x72,0x53,0x68,0xdb,0xd0, + 0xf3,0x9c,0x65,0xae,0x93,0xa1,0xf8,0xba,0x19,0x35,0xcf,0x0f,0x2c,0x56,0xb7,0x04, + 0x6e,0xbb,0xb2,0x41,0x84,0x5c,0xff,0x00,0xcb,0x48,0x07,0x64,0xf5,0x4f,0xe1,0xed, + 0xc5,0x61,0x47,0x3e,0xa2,0xab,0x3a,0x12,0x76,0x7d,0xfa,0x3f,0x43,0xed,0xf2,0x6e, + 0x31,0xf6,0xd3,0x54,0x71,0x50,0xe5,0x6f,0x66,0xb6,0x67,0x3b,0x6a,0x21,0x90,0xed, + 0xdb,0xdb,0xb0,0xad,0xe8,0x74,0x90,0xf8,0xc2,0xf2,0x70,0x0d,0x36,0xd7,0x47,0x9e, + 0xd6,0x74,0x46,0x53,0x81,0xd7,0x8e,0xb8,0xaf,0x45,0xd2,0xb4,0xd6,0x91,0x86,0xc5, + 0xce,0x0f,0x7e,0x95,0xee,0x53,0xce,0x29,0xb5,0xf1,0x1f,0x5c,0xf3,0x14,0xb5,0x8b, + 0x39,0x9b,0x0d,0x10,0xbc,0xc1,0x0a,0xfb,0x03,0x8a,0xfa,0xeb,0xe1,0x4f,0x83,0x4d, + 0x9d,0xa3,0xea,0x73,0x2e,0x19,0xc6,0xc4,0xc8,0xe8,0xa3,0xef,0x1f,0xe9,0x5c,0x3f, + 0x83,0xbc,0x19,0x3e,0xa9,0xa8,0x47,0xfb,0xbc,0x46,0x0e,0x58,0xe3,0xa0,0xaf,0xb0, + 0xb4,0x8d,0x11,0x60,0xb4,0x8e,0xd6,0x08,0xf6,0xc7,0x1a,0x80,0x06,0x3b,0x57,0x97, + 0x8e,0xcf,0x62,0xea,0xc6,0x84,0x1d,0xcf,0x3f,0x31,0xcd,0x25,0x2a,0x5c,0x89,0x9e, + 0x7d,0x7d,0xa0,0xf9,0xc8,0xe2,0x35,0xdb,0xbb,0xab,0x0e,0xa6,0xb8,0xeb,0xcf,0x03, + 0xdd,0xba,0x95,0xb7,0x73,0x1a,0x93,0x96,0x27,0xab,0x7e,0x1f,0xfe,0xaa,0xf6,0xff, + 0x00,0x10,0x6b,0x9e,0x18,0xf0,0x85,0x93,0x6a,0x1e,0x22,0xbf,0xb6,0xb0,0xb7,0x4f, + 0xbd,0x24,0xf2,0x2c,0x6a,0x09,0xf5,0x2c,0x40,0xaf,0x97,0xfc,0x51,0xfb,0x51,0x78, + 0x3a,0x77,0x7d,0x3f,0xc0,0x78,0xd5,0x66,0xc9,0x5f,0xb5,0xe0,0x8b,0x60,0x7d,0x55, + 0x8f,0x2f,0xff,0x00,0x01,0xe3,0xde,0xbd,0x9a,0x19,0x85,0x2a,0x70,0xe6,0x9b,0xff, + 0x00,0x33,0xe7,0xe3,0x9b,0xd5,0xa4,0xec,0x85,0xd5,0xf4,0xdd,0x13,0xc2,0xb6,0xbf, + 0x6b,0xd7,0x6e,0x09,0x54,0xfb,0xa2,0x4e,0x72,0x7d,0x15,0x07,0x24,0x9f,0x4e,0x6b, + 0xe6,0x9f,0x16,0xf8,0xae,0x6f,0x11,0xde,0xe2,0x14,0x30,0x59,0xa3,0x7e,0xee,0x3c, + 0xfc,0xcd,0xfe,0xd3,0xe3,0x8c,0xfb,0x0e,0x9e,0xf5,0x7b,0xc4,0xda,0xce,0xa5,0xe2, + 0x19,0x7f,0xb4,0x75,0x49,0xda,0x79,0x9f,0xb9,0xe1,0x54,0x7a,0x2a,0x8e,0x14,0x7d, + 0x3f,0x1a,0xe1,0x19,0x32,0xf8,0x35,0xe1,0xe7,0x59,0xf5,0x6c,0x4a,0xf6,0x50,0x76, + 0x8f,0xe6,0x79,0xd9,0x8e,0x73,0x5f,0x11,0x1e,0x4b,0xda,0x3f,0x99,0x1c,0xac,0x46, + 0x4d,0x62,0x5d,0x49,0x93,0x9e,0xa6,0xb5,0xa7,0x38,0x53,0xc7,0xe3,0x5c,0xed,0xcb, + 0x92,0xdd,0xeb,0xe6,0x61,0xb9,0xf3,0xef,0x7b,0x10,0x6e,0x39,0xf5,0xf6,0xa6,0x6e, + 0xe0,0x1a,0x8f,0x76,0x78,0xcf,0x5a,0x09,0x05,0x70,0xa7,0xd4,0x57,0x44,0x6d,0xb2, + 0x25,0xa1,0xad,0x27,0xa7,0x24,0xd2,0x07,0x1d,0x3b,0xf7,0xa8,0x98,0x81,0x51,0xee, + 0x38,0x18,0xe7,0x35,0x76,0x25,0xb2,0x77,0x6c,0x8e,0x3b,0x54,0x24,0xe0,0x9c,0xf1, + 0x4b,0x91,0x8c,0xfe,0x14,0xc2,0x48,0xf5,0xcd,0x54,0x49,0x22,0x72,0x4f,0x5a,0xca, + 0xb9,0x66,0x0a,0x7d,0xb3,0x8c,0xd6,0x8b,0x64,0x8c,0xe2,0xb3,0x2f,0x06,0x10,0x8c, + 0x55,0xc9,0xdc,0xb8,0x2b,0xbb,0x1c,0x56,0xaf,0x31,0x0a,0x40,0x3f,0x4a,0xf3,0xcb, + 0x87,0x26,0x53,0xcf,0x53,0xde,0xbb,0x3d,0x6a,0x52,0x37,0x57,0x0b,0x27,0xdf,0x24, + 0x73,0xcd,0x73,0x55,0x7a,0xd9,0x1f,0x41,0x83,0x8f,0x2d,0x3b,0x96,0x62,0xcf,0xd0, + 0x56,0x8c,0x68,0x06,0x3d,0xba,0xd5,0x2b,0x75,0x2c,0x46,0x2b,0x50,0x2e,0x14,0x7a, + 0xd7,0x3d,0x49,0x23,0x93,0x17,0x2b,0xca,0xc2,0xaa,0xe6,0xa7,0x08,0x70,0x01,0x1c, + 0x9a,0x12,0x32,0x00,0x26,0xa6,0x55,0xc9,0xe0,0x62,0xb9,0xa4,0xd1,0xcc,0xbb,0x04, + 0x68,0x09,0xe7,0xad,0x5c,0x2b,0x85,0xff,0x00,0x3d,0x69,0x21,0x8f,0x18,0xc8,0xff, + 0x00,0xeb,0x53,0xae,0x0e,0xd5,0x27,0xda,0x9d,0x28,0xb9,0x48,0xab,0x1f,0xff,0xd3, + 0x9e,0xce,0x33,0x1a,0x80,0xdd,0xb8,0xc5,0x74,0x36,0xac,0x47,0xd2,0x8b,0xab,0x78, + 0xd5,0x83,0xc4,0x00,0xcf,0x38,0xa4,0x85,0x47,0x7a,0xfe,0x18,0xe2,0x1c,0x8f,0x11, + 0x97,0xe2,0x5d,0x2a,0xcb,0xd1,0xf4,0x68,0xfd,0xc3,0x21,0xce,0xb0,0xf9,0x86,0x1e, + 0x35,0x68,0xbf,0x54,0x75,0x36,0x33,0x00,0x47,0x35,0xe8,0x3a,0x3d,0xee,0x1d,0x79, + 0xe3,0x8a,0xf2,0xeb,0x76,0x2a,0x46,0x3e,0x95,0xd7,0x69,0xb7,0x3b,0x59,0x73,0xde, + 0xbe,0x66,0x54,0xcf,0x6d,0xb3,0x83,0xfd,0xa1,0xfe,0x1f,0x2f,0x8a,0x74,0x55,0xd5, + 0xed,0x53,0x74,0xb1,0x29,0x0d,0x8e,0xa3,0xde,0xbf,0x3a,0x65,0xd2,0x67,0xd3,0xae, + 0x9a,0x19,0x94,0xa9,0x52,0x41,0xc8,0xaf,0xd9,0x2b,0x76,0x86,0xfe,0xd1,0xed,0x6e, + 0x14,0x3a,0x48,0xb8,0x20,0xf3,0x5e,0x0d,0xa8,0x7e,0xcc,0x17,0xdf,0x10,0xfc,0x45, + 0x35,0xa7,0x87,0x65,0xb7,0xb5,0x65,0x89,0xae,0x1a,0x59,0xc9,0x54,0x0a,0x08,0xe3, + 0xe5,0x56,0x24,0xf3,0xc0,0xc7,0xbd,0x7e,0xbd,0xe1,0xd7,0x16,0xd2,0xc1,0xd3,0x96, + 0x07,0x17,0x2b,0x47,0x74,0xff,0x00,0x33,0x97,0x17,0x8d,0x95,0x18,0x73,0xad,0x91, + 0xf0,0x46,0x9f,0x6e,0x48,0x1d,0xe9,0x6f,0xec,0xe4,0x84,0xf9,0x8a,0x38,0x3c,0x57, + 0xd3,0x3e,0x2d,0xfd,0x9b,0xbe,0x22,0xfc,0x3e,0x2d,0x73,0xa8,0x58,0x7d,0xb3,0x4e, + 0x53,0x81,0x79,0x66,0x7c,0xf8,0x0f,0xbe,0xf5,0xe9,0xff,0x00,0x02,0x00,0xfb,0x57, + 0x95,0x5d,0xe9,0x5b,0x94,0xc5,0x2a,0x94,0x6f,0xee,0x91,0x5f,0xa9,0xd2,0xc6,0xe1, + 0x71,0x4b,0x9f,0x0d,0x51,0x4a,0x2f,0xb3,0x32,0xa3,0xc5,0x14,0xe1,0x52,0x3c,0xcf, + 0x73,0xc9,0x8c,0x52,0xa7,0xcc,0x7a,0x1a,0x90,0x21,0x6d,0xa3,0x1f,0x53,0x5d,0x45, + 0xee,0x9a,0xf1,0xae,0x07,0x4a,0xc5,0x16,0xec,0x37,0x60,0x7c,0xbf,0x5a,0xe6,0xae, + 0xb7,0x47,0xdd,0x65,0xf9,0xa4,0x26,0xb9,0xa2,0xca,0xce,0x8b,0xbb,0x39,0xe6,0xb3, + 0x64,0x20,0x31,0x03,0x93,0xf5,0xab,0xb2,0xa4,0x88,0x32,0x41,0xf6,0xaa,0x13,0x27, + 0x57,0xe9,0x8e,0xf5,0xe5,0xb8,0xea,0x7d,0x86,0x0f,0x11,0x17,0xd4,0xc2,0xb9,0x90, + 0xee,0x65,0xcf,0x26,0xac,0xe8,0x3a,0x5c,0xfa,0x95,0xe2,0xc5,0x18,0x27,0x71,0xc1, + 0x35,0x42,0x75,0x67,0x9c,0x22,0x83,0x96,0x38,0xaf,0x7b,0xf0,0x86,0x8f,0x6b,0xa4, + 0x5b,0x43,0x2b,0x8c,0xcf,0x20,0x07,0xe9,0x9a,0x99,0xbb,0x23,0x1e,0x27,0xe2,0x6a, + 0x59,0x66,0x1a,0xf7,0xf7,0xa5,0xb1,0x4f,0x5d,0xf0,0x7a,0x69,0xfa,0x3c,0x7e,0x5a, + 0xe5,0x80,0xe4,0x8f,0x5a,0xf0,0xdd,0x45,0x9e,0x22,0x61,0x4c,0x83,0xde,0xbe,0xbb, + 0xf1,0x3d,0xdc,0x2b,0xa3,0x31,0x93,0x9c,0x2f,0x19,0xaf,0x93,0x2e,0x93,0xcd,0xba, + 0x92,0x52,0x38,0x2c,0x71,0xf9,0xd6,0x54,0x24,0xdb,0x72,0x92,0x39,0xf8,0x0f,0x38, + 0xab,0x89,0xc3,0x49,0xd6,0xd5,0xdc,0xce,0xb7,0x8c,0xaa,0x9c,0x81,0xcf,0x53,0x52, + 0xee,0x09,0xd3,0x15,0x69,0x62,0xc0,0xdc,0xdc,0x01,0xdf,0x15,0xc5,0x6b,0xba,0xd2, + 0xc6,0x1a,0xda,0xd4,0xf3,0x9c,0x16,0x15,0xef,0xe5,0x59,0x5d,0x6c,0x65,0x54,0xa0, + 0xb4,0xea,0xc3,0x8c,0xb8,0xe7,0x09,0x94,0xe1,0xe5,0xcd,0x2b,0xcb,0xa2,0xea,0x50, + 0xd7,0xb5,0x7d,0xc4,0xdb,0x44,0xdf,0x52,0x2b,0x8c,0x3d,0xcf,0xaf,0x7a,0x9e,0x46, + 0xdc,0x4b,0x30,0xc9,0xa8,0x49,0xc0,0xf5,0xc5,0x7e,0xb1,0x82,0xc1,0xc3,0x0d,0x45, + 0x53,0x82,0x3f,0x8f,0x33,0xac,0xe6,0xbe,0x65,0x8a,0x96,0x26,0xbb,0xd5,0xfe,0x04, + 0x78,0x03,0x9a,0x4c,0x71,0x4f,0x39,0xfa,0x53,0x41,0xc7,0x6a,0xeb,0x4d,0x76,0x3c, + 0x87,0x61,0x3a,0x74,0xe0,0xf3,0x48,0x41,0xfc,0x29,0xfe,0x84,0x75,0xa6,0xff,0x00, + 0x9e,0x29,0x68,0x16,0x1b,0x93,0xd0,0x0a,0xe8,0xf4,0x48,0x77,0x48,0xbf,0x5a,0xe7, + 0x86,0x73,0x8e,0xff,0x00,0xce,0xbb,0x6f,0x0e,0xdb,0x92,0xeb,0xc5,0x73,0xe2,0xe6, + 0xa1,0x4d,0xb3,0x3a,0xae,0xd1,0x3d,0x87,0xc3,0xf0,0xed,0x89,0x78,0xed,0xfa,0x57, + 0x4d,0x74,0x36,0xf0,0x3a,0x1a,0xa3,0xa2,0x45,0xb2,0x25,0x38,0xe9,0x57,0x2e,0x79, + 0x63,0xf5,0xe9,0xd2,0xbf,0x38,0xc7,0x56,0x72,0xa8,0xd9,0xe0,0xd7,0x9f,0xbd,0x73, + 0x26,0x5c,0x9e,0x9d,0xbb,0xd5,0x46,0xcf,0xf9,0xe6,0xb4,0x1d,0x09,0xe7,0xd6,0x98, + 0x22,0xf4,0xef,0xd2,0xbc,0xd9,0x4d,0x99,0xc6,0x4b,0xa1,0x44,0xaf,0xaf,0x35,0xad, + 0xe1,0xef,0x0e,0x5c,0xf8,0x87,0x52,0x5b,0x28,0x98,0x45,0x1a,0xa9,0x92,0x79,0xe4, + 0xe1,0x20,0x85,0x39,0x79,0x18,0xfb,0x0e,0x83,0xb9,0xc0,0xef,0x4f,0xb4,0xd3,0xee, + 0x75,0x0b,0x98,0xac,0xad,0xa3,0x69,0x66,0x95,0x82,0x22,0xaf,0x52,0x4f,0x41,0xfe, + 0x7a,0x57,0x69,0xac,0xdc,0xda,0x68,0x96,0x27,0xc1,0xfa,0x1c,0x8b,0x23,0xb1,0x0d, + 0xa9,0xdd,0xa1,0xff,0x00,0x5b,0x2a,0xf4,0x89,0x0f,0xfc,0xf2,0x8f,0x9c,0x7f,0x79, + 0xb2,0x6b,0x3a,0xb5,0xe3,0x4a,0x17,0xea,0xcd,0xe3,0x25,0x15,0xce,0xc8,0xf5,0x7d, + 0x4a,0xd6,0xef,0xc9,0xd2,0x74,0x75,0x30,0x69,0x16,0x03,0x6c,0x2a,0xdf,0x7a,0x56, + 0xfe,0x39,0x64,0xf5,0x77,0x3c,0x9f,0x41,0x80,0x2b,0x9d,0x9e,0x60,0x57,0x00,0xf0, + 0x78,0x3d,0xa9,0x10,0x13,0x18,0x8d,0x0e,0x11,0x47,0x35,0x51,0x87,0x98,0xc1,0x14, + 0x60,0x01,0xc7,0xe1,0xde,0xbc,0x07,0x3e,0x69,0x5d,0xee,0x62,0xdd,0xf5,0x64,0xe9, + 0xf2,0xc7,0xe6,0x39,0xc6,0xee,0x87,0xaf,0x4f,0x7a,0x82,0x3c,0xcd,0x26,0x09,0x38, + 0x1f,0x8d,0x32,0x49,0x4c,0x9c,0x2f,0x00,0x1d,0xa0,0x7a,0x01,0x53,0x8f,0xdd,0xa7, + 0x03,0xa7,0xf3,0xad,0x62,0x9d,0xf9,0x8a,0x84,0x6e,0xc7,0x4c,0x77,0xf4,0xe1,0x54, + 0x62,0xa8,0xb1,0xe3,0x23,0x8e,0x09,0x23,0xf9,0x54,0x8f,0x23,0x08,0xf6,0x9c,0x11, + 0x55,0x59,0x8e,0x71,0x8e,0xc3,0x35,0xac,0x23,0x73,0xa9,0x22,0x8b,0x15,0x0a,0x7d, + 0x5a,0xbe,0xa8,0xfd,0x9b,0xad,0x36,0x5c,0x6a,0x97,0x67,0x1c,0x0b,0x78,0xbf,0xf1, + 0xe6,0x73,0xcf,0xe0,0x2b,0xe5,0x86,0xc6,0x40,0xfb,0xc4,0xf4,0x1f,0x8d,0x7d,0x59, + 0xf0,0x0c,0xb2,0x69,0xb7,0xa4,0x63,0xe6,0xbb,0x88,0x67,0xd7,0x08,0x7f,0xc6,0xbd, + 0x8c,0xae,0x3f,0xbe,0x4f,0xc9,0x8a,0xbe,0x94,0x64,0xcf,0xbe,0x74,0x7b,0xb8,0xcf, + 0x96,0x91,0xb8,0x04,0x00,0x30,0x3b,0x76,0xff,0x00,0xeb,0xd7,0xa6,0x45,0x38,0x12, + 0xa2,0xf5,0x1c,0x1f,0xae,0x3a,0x57,0x88,0x78,0x79,0xcc,0x53,0x46,0x5f,0x23,0x6b, + 0x75,0x1f,0x9f,0xe9,0x5e,0x97,0x05,0xf0,0x2e,0x15,0xdb,0x0b,0x8c,0x64,0xd7,0xd7, + 0xd0,0xd5,0xbb,0x9e,0x17,0x36,0x87,0xa1,0x43,0x29,0xc8,0x63,0xdf,0x1c,0x7a,0xd6, + 0xe4,0x6c,0xad,0x1e,0xd3,0xd7,0xbf,0x6e,0x4f,0x6a,0xe1,0xa0,0xbe,0x22,0x45,0x8d, + 0x88,0x18,0x03,0xdc,0x1e,0x3d,0x6b,0x5e,0x0b,0xcf,0xde,0x16,0x56,0xe3,0x04,0xf7, + 0xcf,0x1d,0xf9,0xae,0x8a,0xbb,0x58,0xcd,0x16,0x6e,0xef,0x89,0xd4,0x21,0xb4,0x4e, + 0x15,0x73,0xbf,0xf0,0x1c,0x7e,0x66,0xb5,0xa3,0x6d,0xd8,0x00,0xe4,0x9e,0xbe,0xd8, + 0xae,0x39,0xae,0x96,0x4d,0x47,0xce,0x1c,0xbb,0x00,0xa4,0xfa,0x63,0x9e,0xd5,0xb4, + 0xb7,0x19,0x91,0x41,0xfb,0xa7,0x19,0x23,0xb0,0xf7,0x34,0x53,0xd2,0x24,0xb5,0xa9, + 0xb9,0x2f,0xee,0xd1,0x42,0x0f,0x66,0x23,0xd6,0xa0,0x67,0x52,0xdb,0x4f,0x51,0xd3, + 0x35,0x9c,0x35,0x18,0xf7,0xba,0xa9,0x38,0xe7,0x39,0xc9,0x18,0xfa,0xd5,0x63,0x7f, + 0x1a,0xb8,0xe7,0x03,0xae,0x7d,0x6b,0xaa,0x96,0x88,0x96,0xae,0x6c,0x16,0x0a,0x48, + 0xe3,0x03,0xf9,0xd4,0x46,0x4d,0xe3,0x81,0x8f,0x5f,0x6f,0xa5,0x73,0xb3,0x6a,0x61, + 0x99,0xb6,0x0f,0x9b,0x3f,0x98,0xef,0x44,0x3a,0xab,0xcc,0x4a,0x00,0x3e,0x6e,0x84, + 0x9e,0x3d,0x29,0x54,0x9f,0x42,0x3d,0x99,0xd8,0xda,0x3a,0xbf,0x07,0x9c,0x90,0x06, + 0x3d,0x2b,0xf3,0xaf,0xfe,0x0a,0x21,0xf1,0x79,0xb4,0x8f,0x0d,0x69,0x3f,0x08,0x74, + 0x7b,0x80,0x97,0x1a,0xde,0x35,0x1d,0x58,0x21,0x3b,0x96,0xce,0x07,0xc5,0xbc,0x24, + 0x82,0x30,0x26,0x94,0x6e,0x20,0xf0,0xc8,0x8c,0x3b,0xd7,0xde,0xb0,0xdf,0x24,0x1c, + 0x16,0x55,0xe0,0xe4,0xf4,0xc0,0xea,0x4f,0xe0,0x2b,0xf9,0xe8,0xfd,0xa0,0x3c,0x7f, + 0x71,0xf1,0x3f,0xe3,0x17,0x89,0xfc,0x5b,0x23,0xb1,0x82,0x6b,0xe7,0xb4,0xb2,0x53, + 0x8f,0x92,0xce,0xc8,0x9b,0x78,0x55,0x48,0xea,0xad,0xb5,0xa4,0x1f,0xef,0xd7,0x9d, + 0x8b,0xad,0xec,0xa9,0x4a,0xa2,0xdf,0x65,0xfd,0x7a,0x1e,0x9e,0x06,0x92,0x72,0xd4, + 0xf2,0xd4,0x9c,0xee,0x57,0x24,0xe4,0xfe,0xb5,0xea,0xbe,0x03,0xf1,0x75,0xee,0x87, + 0xa8,0xc1,0x3c,0x2e,0x41,0x8d,0xfb,0x9c,0x82,0x0f,0x04,0x11,0xe8,0x47,0x06,0xbc, + 0x7a,0x3c,0x6d,0xc1,0xed,0xdf,0xf1,0xae,0x82,0xc6,0x42,0xb2,0xe4,0x77,0xc1,0xc7, + 0xe1,0x9a,0xf8,0xcc,0x44,0x9b,0x47,0xb6,0xa1,0x7f,0x7b,0xa9,0xfa,0x27,0x68,0xfa, + 0x7e,0xaf,0x63,0x06,0xa9,0x69,0xb7,0xc8,0xb9,0x5c,0xa8,0xcf,0x28,0xc3,0xef,0x46, + 0x7d,0xd4,0xfe,0x98,0xaf,0x46,0xf0,0xb7,0x87,0xa1,0x9d,0xb7,0xc9,0x22,0xac,0x6b, + 0xc9,0xee,0x40,0xfa,0x0a,0xf9,0x47,0xe1,0x56,0xb5,0x2d,0xd5,0xb4,0xda,0x0c,0x8f, + 0xcc,0xeb,0xe6,0xda,0xee,0xfe,0x19,0xd0,0x74,0xfa,0x38,0xca,0xfe,0x55,0xee,0x1e, + 0x1a,0xf1,0x54,0xd1,0xa3,0x06,0x38,0xc7,0x18,0xf4,0xc7,0xf8,0x1a,0xe5,0x58,0xba, + 0xd1,0xb4,0xa0,0xfd,0xdf,0xc9,0x9f,0x69,0x80,0xcc,0x23,0x52,0x92,0xe7,0xf8,0x8f, + 0xa7,0x7f,0xe1,0x35,0xf0,0xc7,0x81,0xf4,0xb9,0x2e,0xae,0x1d,0x2d,0x6d,0xad,0x90, + 0xbc,0xd3,0xcd,0x85,0x55,0x55,0xe4,0xb3,0x1e,0x80,0x0a,0xf3,0x4f,0x10,0x7e,0xd6, + 0xff,0x00,0x0c,0x6d,0xf4,0xe9,0x27,0xb6,0xf1,0xae,0x91,0x03,0x05,0x25,0x77,0x5c, + 0x29,0xe7,0xd3,0xcb,0x42,0x19,0x8f,0xb0,0xe6,0xbf,0x3c,0x3f,0x69,0x2f,0x89,0x5a, + 0xae,0xb3,0x72,0xfe,0x1b,0xb6,0xb9,0x2b,0x63,0x16,0x0c,0xca,0xa7,0x89,0x25,0xea, + 0x01,0xf5,0x55,0xf4,0xf5,0xaf,0x88,0x2f,0x66,0x72,0xc4,0x6e,0x39,0xcf,0x63,0x5f, + 0x67,0x91,0x64,0x51,0xad,0x45,0x62,0x2a,0x36,0xae,0x4e,0x2f,0x14,0xd2,0xd0,0xfb, + 0xc7,0xf6,0x94,0xf8,0xa9,0xe0,0x0f,0x8a,0x3a,0x55,0x96,0xa1,0xa3,0x78,0xcc,0xea, + 0x9a,0x9d,0x85,0xca,0x49,0xfd,0x9e,0xe9,0x2c,0x56,0xcf,0x19,0x52,0xae,0x61,0x8d, + 0x93,0x0d,0x30,0x38,0x60,0xce,0xc5,0x82,0x86,0x0a,0x46,0x4e,0x78,0xaf,0x86,0xba, + 0x99,0x63,0x18,0xdd,0x9c,0xd7,0xc6,0x11,0xcc,0xe9,0x2a,0x93,0xeb,0x5f,0x44,0x7c, + 0x3a,0xd5,0x4a,0x49,0x10,0xdd,0xc7,0x15,0xf4,0x38,0x8c,0x1c,0x69,0x53,0xe4,0x86, + 0xc7,0x8b,0x2a,0x97,0x95,0xd9,0xf7,0x34,0x4f,0xe7,0x59,0x8c,0x63,0x38,0xcd,0x73, + 0xf3,0x64,0x39,0x27,0x8f,0x6a,0xb1,0xa1,0x5e,0x09,0xec,0xd4,0x03,0xd5,0x6a,0x0b, + 0xe3,0x87,0x35,0xf3,0x18,0xa5,0x66,0x67,0x3d,0x8c,0xcb,0xa6,0x18,0x38,0xe3,0x35, + 0xcd,0x4e,0xe7,0x24,0xd6,0xcd,0xcb,0xe3,0x23,0xfc,0xe2,0xb0,0xe5,0x39,0xcf,0x35, + 0x85,0x37,0xae,0x87,0x33,0xdc,0xac,0x0e,0x79,0xc5,0x48,0x4f,0x18,0xcd,0x35,0x3e, + 0x6e,0xbd,0xba,0xd3,0x8e,0x73,0xd2,0xb7,0x5b,0x92,0x42,0xc7,0xe8,0x6a,0x0a,0x99, + 0xf2,0x39,0xc7,0xe1,0xeb,0x50,0x76,0xce,0x71,0xde,0xb5,0x25,0xb1,0xe0,0x73,0x82, + 0x3a,0xd2,0x11,0xeb,0x4b,0x92,0x3b,0xd2,0x1c,0x1e,0x33,0x91,0xfe,0x78,0xa6,0x21, + 0x9e,0xb9,0xed,0xda,0xb1,0x2f,0xcf,0xca,0xdd,0x6b,0x70,0x9c,0x0c,0xe6,0xb9,0xad, + 0x56,0x50,0x10,0x91,0xef,0x41,0xd1,0x87,0x8f,0x34,0xb5,0x3c,0xdb,0x5c,0x9b,0x39, + 0x5f,0x5e,0x95,0xca,0x28,0xf9,0xb3,0x9c,0x56,0xde,0xab,0x31,0x79,0x58,0x0e,0x05, + 0x64,0x46,0x32,0xde,0xb5,0xcf,0x29,0x6a,0x7d,0x0c,0x97,0x25,0x33,0x4a,0xd6,0x3e, + 0x7f,0x5a,0xd5,0x54,0x39,0xeb,0xc5,0x55,0xb4,0x5c,0x60,0xf7,0xad,0x64,0x8c,0xff, + 0x00,0x8d,0x73,0xcd,0xf6,0x3c,0x6a,0x92,0xbc,0x98,0xc5,0x53,0xc7,0x7a,0x9e,0x34, + 0x00,0xe4,0xfe,0x55,0x32,0xc5,0xeb,0xc5,0x5a,0x8a,0x2f,0xef,0x57,0x3b,0xd5,0x93, + 0xb0,0x8a,0xa1,0x17,0x9f,0xad,0x73,0x5a,0xcd,0xe2,0xc3,0x1b,0x1c,0xe3,0x8a,0xe8, + 0xee,0xa5,0x58,0x95,0x89,0xc7,0xf9,0xf6,0xaf,0x2a,0xf1,0x26,0xa3,0xd4,0x03,0xc6, + 0x2b,0xd8,0xcb,0xf0,0xaa,0x4d,0x3b,0x0a,0xf7,0x3f,0xff,0xd4,0xda,0xb6,0xbe,0x5b, + 0x80,0x37,0x11,0x9c,0x75,0x15,0xa4,0x02,0x0c,0x32,0x77,0xaf,0x39,0xd2,0xae,0x3e, + 0x6d,0xaf,0xc0,0xef,0xfd,0x2b,0xac,0x86,0xe8,0xba,0xed,0xce,0x00,0xff,0x00,0x39, + 0xaf,0xc6,0xb3,0x8c,0xaa,0x86,0x63,0x86,0x95,0x1c,0x4a,0xf4,0x7d,0x53,0xee,0x78, + 0xd9,0x36,0x75,0x88,0xcb,0x6b,0xaa,0xd4,0x1e,0x9d,0x57,0x73,0xa8,0x80,0xe3,0x15, + 0xb7,0x6b,0x29,0x46,0x04,0x1f,0x7a,0xe6,0xe2,0x94,0x05,0x5e,0x72,0x0f,0x7a,0xd6, + 0x82,0x5c,0xf2,0x3e,0xbc,0x57,0xf3,0xce,0x7d,0x91,0x62,0x32,0xcc,0x43,0xa5,0x55, + 0x69,0xd1,0xf4,0x68,0xfe,0x89,0xc9,0x33,0xba,0x19,0x9e,0x1d,0x55,0xa4,0xf5,0xea, + 0xbb,0x1e,0x8b,0xa5,0xde,0x63,0x1e,0x95,0xeb,0xbf,0x0d,0xf5,0x53,0x67,0xe2,0xdb, + 0x46,0x53,0x85,0x97,0x72,0x37,0xb8,0xc5,0x7c,0xf9,0x61,0x71,0x82,0x06,0x71,0x5e, + 0xbb,0xe0,0x38,0xa6,0xba,0xd6,0xa0,0xb9,0x8f,0x3b,0x6d,0xd8,0x33,0x11,0xef,0xc0, + 0x15,0xe2,0xd1,0xd2,0xa4,0x5a,0xee,0x75,0xe3,0xe2,0xbd,0x84,0xe3,0x2e,0xa8,0xf7, + 0x9b,0xbd,0x4e,0x4d,0x23,0x5d,0xbf,0xb5,0x85,0xb1,0x03,0x48,0x4f,0x96,0x40,0x28, + 0xca,0xe3,0x38,0x2a,0x78,0x23,0x9c,0x72,0x2b,0x9b,0xd5,0xfe,0x1b,0xfc,0x27,0xf1, + 0x84,0x6c,0xda,0xd7,0x87,0xed,0x63,0x9d,0xfa,0xcf,0x69,0x9b,0x77,0xcf,0xa9,0x0b, + 0xf2,0xfe,0x95,0x8f,0xab,0xdf,0xc9,0x71,0xaa,0xdc,0xcc,0xc4,0xe7,0xcc,0x2b,0xf8, + 0x28,0xc5,0x3e,0xde,0xfa,0x4d,0xa0,0x83,0xc0,0xe2,0xbe,0x7d,0x66,0xf8,0x9c,0x26, + 0x22,0x73,0xc2,0xd5,0x71,0x57,0x7b,0x1e,0x5c,0xb0,0x70,0xab,0x08,0xf3,0xad,0x6c, + 0x79,0x3f,0x88,0xff,0x00,0x63,0x4f,0x04,0xea,0xe5,0x9b,0xc3,0x7a,0xf3,0xda,0x2b, + 0x9e,0x22,0xbb,0x8c,0x36,0xdf,0x60,0xca,0x46,0x7f,0x2a,0xf2,0xdd,0x6f,0xf6,0x0f, + 0xf1,0x64,0x16,0xfe,0x6e,0x81,0xab,0x59,0x5f,0xb0,0xe7,0xcb,0x0d,0xb1,0x8f,0xfd, + 0xf4,0x00,0xfd,0x6b,0xec,0x48,0x35,0x39,0x10,0xe4,0xb5,0x75,0xda,0x7e,0xb4,0x40, + 0x07,0x77,0xcd,0xf5,0xaf,0xab,0xc2,0x78,0x8f,0x9a,0xab,0x46,0x73,0xba,0xfe,0xbb, + 0x93,0x0a,0x35,0xb0,0xff,0x00,0xee,0xf5,0x2c,0x7e,0x36,0xf8,0xdf,0xf6,0x7c,0xf8, + 0x97,0xe0,0xf7,0x7f,0xed,0x7d,0x1a,0x75,0x8a,0x3e,0xb2,0x2a,0x16,0x4c,0x7b,0x30, + 0xe3,0xf5,0xaf,0x25,0x3e,0x16,0xba,0x7f,0xdd,0x34,0x4c,0xad,0xdc,0x10,0x41,0xfd, + 0x6b,0xfa,0x1a,0x87,0x52,0x5b,0xa8,0x0c,0x33,0xed,0x96,0x17,0x18,0x64,0x90,0x07, + 0x52,0x3d,0x08,0x3c,0x57,0x97,0xeb,0x9f,0x07,0x7e,0x18,0x6a,0xba,0xa4,0x3a,0x9d, + 0xc6,0x8d,0x12,0xcd,0x13,0x6f,0x68,0xe3,0x26,0x38,0xa4,0x3d,0x46,0xf4,0x1d,0xbd, + 0x40,0xc0,0x3d,0xeb,0xea,0xf0,0x3e,0x25,0x47,0x95,0xbc,0x55,0x3f,0xb8,0xf5,0xf0, + 0xfc,0x49,0x8e,0xa2,0x95,0x36,0xb5,0x3f,0x1d,0x7c,0x23,0xfb,0x31,0xfc,0x4b,0xf1, + 0x6d,0xb3,0x78,0x93,0x46,0xd2,0x1e,0xe2,0xca,0x37,0xc2,0x96,0x64,0x8c,0xca,0x7f, + 0xe9,0x98,0x72,0x0b,0x01,0xdc,0x8e,0x3f,0xa1,0xab,0x78,0x7b,0x5e,0xf0,0x66,0xb3, + 0x2e,0x8f,0xe2,0x8b,0x29,0x6c,0x2f,0xa0,0xc6,0xe8,0x65,0x18,0x20,0x11,0x90,0x46, + 0x38,0x20,0x83,0xc1,0x19,0x15,0xfb,0x8a,0x12,0x1b,0x74,0x48,0x6d,0xe2,0x48,0xe2, + 0x8d,0x42,0x22,0x20,0x0a,0xaa,0xa3,0x80,0x14,0x0c,0x00,0x3d,0xab,0x95,0xf1,0x5f, + 0xc2,0xcf,0x01,0x7c,0x47,0x74,0x87,0xc5,0x7a,0x54,0x37,0x37,0x06,0x1f,0xb3,0xc7, + 0x76,0x09,0x4b,0x88,0x93,0x24,0x80,0x8e,0x0e,0x38,0x3c,0xf2,0x0e,0x7b,0xd7,0x2e, + 0x03,0xc4,0xe9,0x4b,0x14,0xe1,0x8a,0xa5,0xee,0x37,0xa5,0xb7,0x5f,0xa1,0xe5,0x67, + 0xf8,0xac,0x46,0x60,0xd5,0x6a,0xd2,0xd5,0x2f,0x91,0xf8,0xa1,0xe2,0x2b,0x5b,0xed, + 0x43,0x4f,0xc4,0x59,0x54,0x61,0xd7,0xda,0xbc,0x5f,0x50,0xb5,0xb6,0xd3,0x55,0xde, + 0xe9,0xd5,0x15,0x79,0x39,0x3d,0x6b,0xec,0x6f,0xda,0xa7,0xe0,0xf7,0xc4,0xaf,0x82, + 0x6a,0xd7,0x5a,0x75,0x9b,0x6a,0x1e,0x19,0x73,0x88,0xb5,0x28,0x46,0x44,0x79,0xe8, + 0x93,0xa8,0xfb,0x8d,0xdb,0x9e,0x0f,0x63,0x5f,0x9b,0x1a,0x96,0xa3,0x7d,0xa9,0x4a, + 0x64,0xbb,0x95,0x9c,0x9e,0xa3,0xb5,0x7f,0x40,0x70,0xd6,0x55,0x43,0x34,0xa6,0xb1, + 0x31,0xa8,0x9c,0x3b,0x75,0xf4,0x6b,0xa1,0xe4,0xc3,0xc4,0x0c,0x66,0x59,0x86,0x78, + 0x3c,0x34,0x6c,0xdf,0x52,0xee,0xbd,0xe2,0x4f,0xb5,0x66,0xda,0xc8,0x18,0xe2,0x1d, + 0x5b,0xb9,0xae,0x19,0xc9,0x72,0x49,0x3c,0x9a,0xbd,0x24,0x59,0x3d,0x31,0xef,0x55, + 0x24,0x52,0x1b,0xa6,0x2b,0xf5,0x4c,0x26,0x1a,0x95,0x08,0x2a,0x74,0xa3,0x64,0x7e, + 0x73,0x8e,0xcc,0x31,0x18,0xda,0xae,0xb6,0x22,0x6d,0xb2,0x9b,0x2f,0xa9,0xc5,0x26, + 0xd3,0x8f,0x7f,0x4a,0xb7,0x0d,0xbc,0x93,0xcc,0xb1,0x44,0xa5,0x99,0x8e,0xd0,0xa0, + 0x72,0x49,0xe3,0x15,0xfa,0xbd,0xfb,0x26,0xfe,0xc0,0x91,0xf8,0xeb,0x4a,0x4f,0x1b, + 0x7c,0x58,0x13,0xd9,0xe9,0x93,0x00,0x6d,0x6d,0x13,0x0b,0x2d,0xc7,0x7d,0xd9,0x61, + 0xc2,0x7b,0xe0,0xe4,0xf4,0xf5,0xaf,0x1f,0x88,0x78,0x93,0x05,0x93,0xd0,0xf6,0xd8, + 0xb9,0x6f,0xb2,0x5b,0xbf,0x43,0x1c,0x36,0x1e,0x75,0x65,0x68,0xa3,0xf2,0x6a,0x2b, + 0x59,0xa6,0x7f,0x2e,0x34,0x66,0x2d,0xd0,0x7d,0x2b,0xd5,0xbc,0x4b,0xf0,0x23,0xe2, + 0xc7,0x84,0x7c,0x1f,0x6b,0xe3,0xff,0x00,0x11,0xf8,0x5b,0x52,0xd3,0xfc,0x3f,0x76, + 0xd1,0xac,0x5a,0x84,0xf0,0xec,0x84,0x99,0x78,0x8f,0x3c,0xee,0x50,0xc7,0x1b,0x4b, + 0x28,0x0c,0x7a,0x13,0x91,0x5f,0xd0,0xf7,0x86,0xff,0x00,0x62,0xbf,0xd9,0xe3,0xc2, + 0x3a,0xe5,0x8e,0xbf,0xa6,0xf8,0x77,0xcd,0xb8,0xd3,0xdf,0xcc,0x89,0x6e,0xe5,0x37, + 0x11,0x17,0x03,0xe5,0x67,0x89,0x86,0xd6,0xdb,0xd4,0x02,0x31,0x9c,0x1c,0x71,0x5e, + 0x93,0xf1,0x47,0xc1,0x5a,0x17,0xc4,0xbf,0x08,0x6b,0x7f,0x0e,0x7c,0x43,0x19,0x93, + 0x49,0xd7,0x2d,0x24,0xb2,0x9c,0xa9,0x21,0xd0,0xb2,0xfc,0x92,0x23,0x0f,0xba,0xd1, + 0xb6,0x19,0x48,0xe4,0x11,0xc5,0x7e,0x3f,0x99,0x78,0xdd,0x08,0x62,0x69,0x53,0xc2, + 0x61,0xfd,0xcb,0xfb,0xcd,0xef,0x6f,0x2b,0x75,0xf5,0x3d,0xdc,0x2e,0x43,0xed,0x13, + 0xe6,0x9e,0xbe,0x47,0xf2,0x70,0x54,0x8c,0xd3,0x0a,0xf0,0x47,0xad,0x7a,0x0f,0xc4, + 0xbf,0x00,0x6b,0xbf,0x0c,0x7c,0x6d,0xac,0xf8,0x17,0xc4,0x88,0x53,0x50,0xd1,0xee, + 0xde,0xda,0x56,0xdb,0x85,0x94,0x2f,0x31,0xcc,0x9f,0xec,0x4a,0x85,0x5d,0x71,0x9c, + 0x03,0x8e,0xa0,0xd7,0x02,0x41,0xe8,0x39,0xaf,0xdd,0xb0,0xb8,0x8a,0x78,0x8a,0x30, + 0xc4,0x51,0x95,0xe3,0x24,0x9a,0x7e,0x4c,0xf9,0xfa,0x94,0xa5,0x09,0x38,0x4f,0x74, + 0x11,0x8c,0xc8,0x38,0xcf,0x35,0xea,0x3e,0x1a,0xb6,0x05,0x95,0x80,0xeb,0x5e,0x71, + 0x67,0x16,0xf9,0x41,0xe9,0x8a,0xf6,0x8f,0x0a,0xda,0x8f,0x91,0xb1,0xcd,0x79,0xd9, + 0xcd,0x5e,0x5a,0x36,0x38,0x71,0x12,0x69,0x68,0x7a,0x8e,0x9f,0x6e,0x12,0x00,0x7d, + 0x85,0x36,0x64,0x00,0x73,0xd6,0xb4,0x6d,0xd1,0x56,0x01,0xce,0x33,0x55,0x65,0x1c, + 0x1c,0x9e,0xdd,0x6b,0xf3,0x8a,0x95,0x6e,0xdb,0x3e,0x7e,0xa3,0xd4,0xcf,0xf2,0xc1, + 0x19,0x3d,0xfb,0x8a,0x68,0x88,0xb6,0x06,0x3a,0xd5,0x9c,0x6e,0xc7,0xcb,0xf5,0xae, + 0xd3,0x4d,0x8e,0xd7,0xc2,0xfa,0x60,0xf1,0x2e,0xa9,0x1a,0xcd,0x79,0x3e,0x57,0x4c, + 0xb5,0x61,0x90,0xee,0x38,0xfb,0x43,0x8e,0xe8,0x87,0xee,0x8f,0xe2,0x6f,0x61,0x5c, + 0xb5,0x2b,0x42,0x11,0xe6,0x93,0x1d,0x28,0x39,0x32,0x09,0xc8,0xf0,0x86,0x9b,0xf6, + 0x48,0x30,0x75,0xcd,0x42,0x3c,0x39,0x1d,0x6c,0xed,0xdc,0x74,0xcf,0x69,0x64,0x1d, + 0x7f,0xba,0xbc,0x75,0x35,0xc3,0x44,0xbb,0x33,0x1c,0x5c,0xb3,0x7d,0xe6,0x3d,0xf3, + 0x56,0xa5,0xfb,0x4c,0xad,0x35,0xf5,0xe3,0xb4,0xb7,0x57,0x04,0xb4,0x8e,0x4f,0x39, + 0x6e,0x4f,0xe3,0x51,0xa1,0xf2,0x46,0xf0,0x39,0x22,0xbc,0x2a,0xd5,0xdd,0x49,0x39, + 0x36,0x6d,0x27,0x77,0x6e,0x84,0xd2,0x4a,0x90,0x21,0x8f,0x9c,0xb0,0xe6,0xa9,0x6e, + 0x30,0x47,0xbc,0x93,0xb9,0xc7,0x03,0xd0,0x0f,0x7a,0x69,0x3b,0xdc,0x89,0x0f,0x72, + 0x48,0xf6,0xa6,0xb3,0x86,0x52,0x5b,0xb9,0xc0,0x1d,0x80,0x15,0x30,0x8f,0x57,0xb8, + 0x28,0xea,0x42,0x84,0xe3,0xe5,0xe3,0x27,0xeb,0x56,0xdc,0xa8,0x5c,0xf1,0x55,0x90, + 0xa8,0x6c,0x0e,0xdc,0x9c,0xf4,0xc9,0xab,0x0f,0xb0,0xfc,0xbf,0xa9,0xae,0xa4,0xb4, + 0x56,0x37,0x8a,0xb6,0x85,0x59,0x1c,0x04,0x00,0xf2,0x73,0xc5,0x56,0x2d,0x92,0xc4, + 0x8e,0x0f,0x4a,0xb5,0x21,0x1c,0x7f,0x3f,0x7a,0xa4,0xe7,0x9c,0xf7,0xe6,0xba,0xe9, + 0x6c,0x5a,0xd7,0x42,0x00,0x41,0x2b,0x9e,0xb5,0xf5,0x4f,0xc0,0xc9,0x23,0x8f,0x4b, + 0xba,0x66,0xcf,0x17,0xa8,0x70,0x3f,0xeb,0x95,0x7c,0xaa,0x09,0x12,0xaf,0x19,0xaf, + 0xa8,0x7e,0x09,0x4e,0xb1,0x69,0xf7,0xaa,0xe7,0x0a,0xb7,0x51,0xe4,0xfd,0x63,0x3f, + 0xe1,0x5e,0xae,0x5c,0xb9,0x6a,0x5d,0x8b,0x10,0xaf,0x42,0x47,0xd8,0xde,0x19,0xd4, + 0x16,0x4d,0xa5,0xd9,0x9b,0x61,0x3f,0x88,0xff,0x00,0xeb,0x57,0x72,0xda,0x8c,0x11, + 0xb0,0x55,0xcb,0x6e,0xe7,0x81,0x92,0x3d,0xab,0xc6,0xf4,0x99,0xd1,0x5b,0x31,0x9d, + 0xa0,0xe4,0x77,0xee,0x32,0x0f,0xd6,0xba,0xb6,0xd4,0x04,0x61,0x9d,0x1f,0x39,0x38, + 0x07,0xfa,0x57,0xd1,0x50,0xab,0x24,0xda,0x3e,0x79,0xdc,0xf5,0x58,0x75,0x38,0xd9, + 0x01,0x57,0xf9,0xb8,0xeb,0xe9,0x8e,0x45,0x4a,0x7c,0x49,0xb5,0x0b,0x20,0x65,0xda, + 0x36,0xb1,0x3c,0x67,0x3e,0xd9,0x35,0xe3,0x2b,0xaa,0x3c,0x72,0xbc,0x8a,0xdd,0x33, + 0xc2,0x9c,0x8c,0x8f,0xad,0x69,0xda,0xea,0xac,0xf0,0xb2,0xdc,0x32,0xbb,0x60,0x75, + 0xe4,0x83,0xf8,0x56,0xb2,0xad,0x29,0x3e,0x54,0x24,0x7a,0x5d,0x87,0x88,0x22,0x7b, + 0x86,0x8d,0xcf,0xcc,0xdd,0x48,0x3c,0x76,0xcf,0x4a,0xdb,0x8f,0x5a,0x5e,0x51,0x19, + 0x97,0x6e,0x7a,0xe4,0xe4,0xe3,0xda,0xbc,0x02,0x1d,0x42,0x65,0x9d,0x93,0x3c,0x10, + 0x58,0xe0,0x63,0x9c,0xf6,0xff,0x00,0xeb,0x57,0x48,0x9a,0xab,0x49,0x19,0xdd,0x94, + 0xc6,0x3b,0xe3,0x3c,0x7f,0x8d,0x3a,0x35,0xa4,0xdb,0x4c,0x1b,0x3d,0x36,0xe3,0x58, + 0x5e,0x9b,0xb0,0x14,0x73,0x93,0x83,0x9f,0xa7,0xa5,0x57,0x83,0x57,0x08,0x0b,0xc8, + 0xe5,0x8e,0x72,0x02,0x8c,0xf5,0xaf,0x34,0xba,0xd5,0x96,0x0d,0xc8,0xaa,0xdb,0xd8, + 0x64,0x93,0xcf,0x07,0x9a,0xa5,0x07,0x88,0x04,0x7b,0xda,0x4c,0x1c,0x74,0x1e,0x98, + 0xfc,0xeb,0xbd,0x56,0xb4,0x75,0x33,0x7c,0xdd,0x0f,0x5b,0x1a,0x99,0x72,0x64,0xe7, + 0x0c,0x0f,0xca,0x7a,0xe3,0xd7,0xda,0x9c,0xba,0x94,0x91,0xb8,0x45,0xcf,0x63,0xea, + 0x2b,0xcd,0x63,0xf1,0x13,0xcd,0x1c,0x7b,0x02,0xa1,0xec,0x79,0xe8,0x39,0x3c,0x56, + 0xdd,0xbe,0xb6,0xd2,0x29,0x13,0x27,0x18,0xc8,0x65,0xc7,0x7a,0xc1,0xe2,0x13,0x2a, + 0x3e,0x66,0x6f,0xc6,0x9f,0x1d,0xcb,0xe0,0xef,0x85,0x1e,0x2a,0xf1,0x24,0x4c,0x12, + 0x68,0x74,0xf9,0x20,0xb5,0x3d,0x3f,0xd2,0x2e,0x47,0x93,0x1e,0x3d,0xf2,0xd5,0xf8, + 0x3d,0xe5,0x84,0x09,0x12,0xf2,0x13,0x6a,0xe4,0x9e,0x70,0x38,0xe7,0xeb,0x8a,0xfd, + 0x35,0xfd,0xb3,0xfc,0x59,0x2d,0xbf,0x81,0x34,0x2f,0x0c,0x42,0xdc,0xeb,0x1a,0x83, + 0x5c,0xcd,0x83,0xd6,0x1b,0x45,0xca,0xf1,0xff,0x00,0x5d,0x0a,0xd7,0xe6,0xd0,0x8d, + 0x49,0x04,0xf2,0x72,0x07,0xd2,0xbc,0x3c,0xde,0xbf,0xc1,0x0f,0x9f,0xdf,0xff,0x00, + 0x00,0xf6,0xb0,0x91,0xb5,0x3b,0x90,0x79,0x5b,0x46,0xdc,0x67,0x35,0xa5,0x0c,0x2e, + 0x0a,0x9d,0xb8,0xc8,0x1f,0xcb,0x15,0x79,0x6d,0xb7,0x32,0x67,0xa3,0x01,0x9f,0x71, + 0x5d,0xd6,0x8b,0xa0,0x2d,0xe2,0x2b,0x71,0x9e,0x2b,0xc8,0xe4,0xe7,0xd0,0xea,0x55, + 0x54,0x09,0x7c,0x19,0xa9,0x4f,0x61,0x75,0x04,0xb1,0xb1,0x0d,0x1b,0x82,0x0f,0xa1, + 0x07,0x35,0xf4,0xa6,0xa5,0x73,0x1d,0xba,0x5c,0x6a,0xb0,0x60,0x47,0x71,0x0f,0xda, + 0x00,0x1d,0x03,0x30,0xf9,0x80,0xff,0x00,0x81,0x57,0x83,0x1f,0x0e,0x4d,0xa7,0x4b, + 0x90,0x3b,0xe7,0x23,0xde,0xbd,0x2a,0x0b,0x89,0x2e,0x7c,0x28,0xe9,0x21,0xc9,0x8d, + 0x8c,0x7e,0xf8,0xfb,0xd5,0xe7,0xd3,0xa2,0xfd,0xb4,0xa8,0x74,0x7a,0xff,0x00,0x5f, + 0x23,0xdc,0xcb,0x2a,0xc6,0x57,0x91,0xf1,0xbf,0xc4,0x8b,0x86,0x9a,0xf2,0x47,0x90, + 0xe5,0x99,0x89,0x24,0xf5,0xc9,0x39,0x35,0xe1,0x77,0x1f,0x78,0xd7,0xb4,0x7c,0x46, + 0x6f,0xf4,0x97,0xc1,0xef,0x5e,0x29,0x2f,0x53,0xe9,0x5f,0xb1,0x65,0x71,0x5f,0x57, + 0x8d,0x8e,0x8a,0xf2,0xd6,0xc5,0x27,0xe1,0x87,0xb5,0x7a,0x3f,0x82,0xb5,0x3f,0x22, + 0x74,0x19,0xe8,0x7a,0x57,0x9b,0x31,0xed,0x5a,0xfa,0x25,0xc9,0x82,0xe9,0x4a,0x9f, + 0x7e,0xbd,0x2b,0xa3,0x11,0x0e,0x68,0x1c,0xe7,0xe8,0x67,0x81,0xf5,0x8f,0x3e,0xd9, + 0x57,0x77,0x6a,0xed,0x75,0x3e,0x54,0x48,0xbd,0x0d,0x7c,0xe5,0xf0,0xf7,0x59,0xc2, + 0xa2,0x16,0xf4,0xaf,0x7e,0x37,0x0b,0x3d,0xb7,0x62,0x71,0xc7,0x3d,0xeb,0xe2,0xb1, + 0xd0,0x6a,0x4c,0x96,0xcc,0x6b,0x97,0xe4,0x82,0x6b,0x22,0x43,0xcf,0xbf,0xd7,0xbd, + 0x5c,0xb8,0x7d,0xad,0xcd,0x66,0x92,0x4b,0x7a,0xfa,0x57,0x24,0x6d,0xd4,0xe7,0x95, + 0x89,0x93,0x1d,0xf8,0xa4,0x38,0xc7,0xad,0x0a,0x71,0x9c,0xf4,0x3d,0xe8,0x27,0x23, + 0x1d,0x2b,0x58,0x90,0x44,0xe7,0x07,0xa7,0x1e,0xb5,0x59,0x8f,0x15,0x3c,0x87,0x8c, + 0x7b,0xd5,0x56,0x3c,0xe3,0xd2,0xb4,0x21,0xb1,0xdb,0xfb,0xf5,0xff,0x00,0x3e,0xb4, + 0xcc,0xe7,0x9a,0x84,0xb1,0xe8,0x39,0xa4,0x0f,0xc8,0x3d,0xe9,0xa0,0x27,0x91,0xb0, + 0x99,0xe9,0x9a,0xe3,0x35,0x99,0x82,0xa3,0x64,0xf1,0x5d,0x34,0xd2,0x8c,0x1c,0x7f, + 0x9f,0xc6,0xb8,0x3d,0x72,0x71,0xb5,0xbb,0xd4,0xce,0x56,0x57,0x3d,0x5c,0x1d,0x34, + 0xda,0x38,0x2b,0xd6,0xdf,0x21,0xc7,0xad,0x45,0x6f,0x1e,0xf6,0xe9,0x9a,0x1c,0x65, + 0xba,0x72,0x6b,0x42,0xc2,0x0d,0xc7,0x1e,0xfc,0xfb,0x57,0x3b,0x49,0x23,0xb7,0x15, + 0x2f,0x76,0xc6,0xc5,0xac,0x24,0x0c,0xe3,0xd2,0xb6,0x22,0x83,0xbe,0x3a,0x71,0x4e, + 0xb4,0xb5,0x23,0x01,0x87,0x35,0xa9,0xb0,0x01,0xc7,0x6e,0x2b,0x9a,0xa1,0xe4,0xb7, + 0xd4,0xa6,0x22,0x07,0x8c,0x72,0x69,0xcc,0x16,0x34,0xf9,0xb8,0xab,0x1b,0x4e,0x78, + 0x1f,0xd6,0xa2,0xb8,0xb2,0xd4,0x64,0x8c,0xba,0x5b,0xc8,0x54,0x7a,0x29,0x35,0xad, + 0x18,0x45,0xbd,0x59,0x9b,0x93,0x7a,0x23,0x90,0xd6,0x6f,0x04,0x68,0xc4,0x9e,0x39, + 0xaf,0x14,0xd7,0x2f,0x5a,0x79,0x0a,0x67,0x22,0xbb,0xff,0x00,0x12,0x5c,0x4d,0x19, + 0x68,0xd9,0x59,0x4f,0xa3,0x0c,0x1f,0xca,0xbc,0x9e,0xec,0xb3,0xb1,0x24,0x77,0xaf, + 0xb2,0xcb,0xe8,0x24,0xb9,0x91,0x70,0x85,0xb5,0x3f,0xff,0xd5,0xf3,0x9d,0x2f,0x56, + 0x49,0xb6,0xa8,0x3f,0x38,0xf7,0xeb,0x5d,0xa5,0xbd,0xc3,0xb0,0x1b,0x49,0x00,0x75, + 0x35,0xe0,0xda,0x34,0xd7,0x28,0xaa,0xce,0xdf,0x30,0xe4,0x1e,0x9c,0x57,0xa9,0x69, + 0xfa,0xa1,0x11,0xa9,0x71,0x9d,0xdd,0x7f,0xfa,0xd5,0xf8,0xec,0x2b,0xca,0xcd,0x54, + 0x3e,0x4e,0x50,0xb6,0xc7,0xa4,0x5a,0x5d,0x06,0xc2,0xbf,0x4c,0xd7,0x49,0x1c,0xa1, + 0x40,0x24,0x8e,0x7a,0x57,0x9b,0x2d,0xd9,0x0b,0xbc,0x1f,0x73,0x8e,0x2b,0x4e,0x2d, + 0x41,0xa5,0x00,0x06,0xed,0xc7,0xb7,0xbd,0x79,0xf9,0xbe,0x03,0x0d,0x98,0x61,0xde, + 0x1a,0xba,0xd7,0xa3,0xea,0x8f,0x63,0x23,0xce,0x2b,0xe5,0xd8,0x85,0x5a,0x93,0xd3, + 0xaa,0xee,0x7a,0x85,0xac,0xfc,0x83,0x9e,0xbd,0x6b,0xe9,0xff,0x00,0x06,0xda,0x2e, + 0x97,0xe1,0x95,0xbd,0xce,0x26,0x95,0x7c,0xd2,0x73,0xdc,0xf0,0xa3,0xf0,0x18,0xaf, + 0x91,0x34,0x09,0x24,0xbd,0xbb,0x82,0xcc,0x65,0x9e,0x47,0x54,0xc0,0xea,0x72,0x6b, + 0xeb,0x1f,0xb6,0x93,0x6f,0x15,0x84,0x7f,0x2c,0x51,0x00,0x00,0xc7,0x71,0xc5,0x7f, + 0x39,0xf1,0x06,0x12,0xae,0x59,0x56,0x54,0x2a,0xab,0x4b,0xa7,0x9f,0x99,0xfb,0xbd, + 0x3c,0xca,0x9e,0x61,0x42,0x9d,0x4a,0x0f,0x47,0xab,0x23,0xde,0xc5,0xd8,0xb9,0xc9, + 0x63,0x92,0x7d,0xfb,0xd5,0xeb,0x76,0xc0,0x22,0xaa,0x48,0x3e,0x51,0x9e,0x7d,0xea, + 0xd5,0xbb,0x8d,0xbf,0x4a,0xf8,0x19,0xbe,0xa8,0xef,0x86,0xc5,0xc8,0xe4,0x71,0xc5, + 0x6a,0x5b,0x5d,0x95,0x61,0x83,0xd2,0x9d,0xa4,0x68,0x17,0xba,0xcc,0xcc,0x96,0x8a, + 0x02,0x8e,0x59,0xd8,0xe1,0x47,0xb7,0xa9,0xad,0x6d,0x23,0xc3,0x37,0xad,0xaa,0xbd, + 0xad,0xe2,0x14,0x48,0x08,0x32,0x67,0xa1,0xf4,0x19,0xef,0x9a,0xcd,0x46,0x6a,0xd2, + 0xb6,0xe3,0x75,0x22,0xae,0x9b,0xd5,0x1d,0x86,0x85,0x0c,0xaf,0x08,0xb8,0x9b,0x38, + 0x3f,0x70,0x74,0xcf,0xbf,0xf8,0x56,0xbb,0xc6,0xa5,0xb7,0x0c,0xd5,0xb0,0x85,0x06, + 0xc1,0x80,0x07,0x1c,0x54,0x32,0x64,0x1a,0xe8,0x9d,0x4d,0x2c,0x70,0xf3,0xf3,0x4a, + 0xe8,0xa5,0x2b,0x60,0x1c,0x54,0x85,0xd9,0x52,0x39,0x97,0xb1,0xfd,0x2a,0x39,0x30, + 0x47,0xa5,0x49,0x1a,0xef,0xb7,0x75,0xef,0x8a,0xe5,0x8c,0xdc,0xa4,0xe2,0xba,0xa3, + 0x7d,0x39,0x55,0xce,0x99,0xe2,0xd2,0xfc,0x55,0xa4,0xdc,0x78,0x6b,0xc4,0xb6,0xd1, + 0x5f,0x59,0xde,0xc4,0xd1,0x49,0x0c,0xca,0x1d,0x25,0x46,0x18,0x2a,0xc0,0xf7,0xef, + 0x9a,0xfc,0x32,0xfd,0xb0,0xbf,0x63,0xbd,0x5b,0xe1,0x16,0xb1,0x71,0xe3,0x3f,0x04, + 0xdb,0x49,0x75,0xe0,0xfb,0xb6,0xde,0x36,0x02,0xef,0x60,0xec,0x7f,0xd5,0x4a,0x7a, + 0xed,0x27,0xee,0xbf,0xa7,0x07,0x9e,0xbf,0xb5,0xd6,0x32,0xb1,0x88,0x6d,0x25,0x5d, + 0x3a,0x11,0xd4,0x11,0x5b,0xed,0x3e,0x97,0xe2,0x3b,0x09,0xf4,0x3d,0x7a,0xde,0x2b, + 0x88,0x2e,0x63,0x30,0xcd,0x0c,0xaa,0x1d,0x25,0x46,0x18,0x20,0xa9,0xe3,0x9f,0x4a, + 0xfd,0x4b,0x82,0xf8,0xfb,0x13,0x95,0xd5,0x84,0xe3,0x3d,0x5f,0x7d,0xa4,0xbb,0x3f, + 0x35,0xd1,0x9f,0x2d,0x9a,0xe5,0x11,0x92,0x92,0x51,0xf7,0x7c,0xb7,0x5e,0x68,0xfe, + 0x4a,0xe4,0x80,0x83,0xc8,0xe9,0x54,0x64,0x8b,0xb1,0x19,0xaf,0xd3,0x9f,0xdb,0x47, + 0xf6,0x41,0x3f,0x0c,0xef,0x64,0xf8,0x85,0xf0,0xf2,0xd5,0xe4,0xf0,0xbd,0xcb,0x13, + 0x73,0x6e,0x80,0xb1,0xb0,0x95,0x8e,0x71,0xff,0x00,0x5c,0x9b,0xf8,0x49,0xe8,0x78, + 0x3d,0xab,0xf3,0x7e,0x48,0x32,0xd8,0xc7,0x35,0xfd,0x75,0xc3,0xdc,0x5b,0x87,0xcd, + 0x30,0xca,0xbd,0x17,0xaf,0x55,0xd5,0x3e,0xcf,0xfc,0xcf,0x80,0xc4,0xe1,0x27,0x87, + 0x9f,0x24,0xb6,0xef,0xdc,0xfa,0x67,0xf6,0x3b,0xf8,0x15,0x3f,0xc6,0x0f,0x8a,0x76, + 0x50,0x5c,0x0c,0x69,0xba,0x73,0x8b,0xab,0xa9,0x0a,0x96,0x5d,0xb1,0x9d,0xc5,0x4e, + 0x3f,0xbd,0xd0,0x7b,0x9a,0xfe,0x94,0x21,0x8e,0x0b,0x3b,0x78,0xed,0x2d,0x50,0x47, + 0x14,0x08,0xb1,0xa2,0x28,0xc0,0x55,0x51,0x85,0x00,0x7a,0x01,0x5f,0x98,0xff,0x00, + 0xf0,0x4d,0x4d,0x0b,0x4b,0xb1,0xf0,0x2e,0xb9,0xad,0xc6,0xee,0xb7,0xd7,0x17,0x09, + 0x0c,0x88,0x57,0x0b,0xb1,0x72,0xca,0xc1,0xbb,0xe7,0xa6,0x3b,0x57,0xe9,0x6c,0x92, + 0x95,0xef,0x9a,0xfe,0x7a,0xf1,0x2f,0x88,0x2a,0x62,0xf3,0x7a,0xb1,0x93,0xf7,0x61, + 0xee,0xaf,0xd7,0xf1,0x3e,0xa3,0x2e,0xc2,0xa8,0xd1,0x85,0xba,0xea,0x3e,0x69,0xb8, + 0x23,0xf5,0xac,0x74,0x80,0x3a,0x79,0x98,0xc8,0x62,0x77,0x67,0xae,0x73,0xd4,0x53, + 0xee,0x25,0x3b,0x4f,0x35,0x1e,0x99,0x7a,0x1f,0x74,0x44,0x0e,0x0f,0x7f,0x7a,0xfc, + 0xb3,0x0b,0x88,0x8c,0xf1,0x1c,0xb5,0x3a,0xa3,0xdd,0x85,0x19,0x46,0x9b,0x94,0x51, + 0xf9,0x81,0xff,0x00,0x05,0x22,0xfd,0x9f,0xd3,0xc4,0x3e,0x17,0x83,0xe3,0x97,0x87, + 0x2d,0xc1,0xd4,0x74,0x28,0x56,0xd7,0x5b,0x08,0x06,0x66,0xd3,0xb7,0x7e,0xee,0xe1, + 0xbd,0x4d,0xb3,0x31,0xdc,0x49,0xe2,0x36,0x63,0xce,0x05,0x7e,0x1e,0x32,0x10,0x48, + 0x6e,0xd5,0xfd,0x7f,0x6b,0xfa,0x36,0x9f,0xae,0xe9,0x37,0x9a,0x1e,0xaf,0x0a,0xdc, + 0x58,0x6a,0x50,0x49,0x6d,0x71,0x13,0x80,0x55,0xa2,0x95,0x4a,0x3a,0x91,0xe8,0x41, + 0x35,0xfc,0xac,0xfc,0x70,0xf8,0x65,0x7f,0xf0,0x87,0xe2,0x87,0x88,0x7e,0x1f,0xdf, + 0x07,0xc6,0x93,0x7a,0xf1,0xdb,0x48,0xc0,0xfe,0xf6,0xd1,0xff,0x00,0x79,0x6d,0x20, + 0x27,0xef,0x6e,0x89,0x97,0x27,0xbb,0x06,0xf4,0xaf,0xea,0x1f,0x08,0x38,0x8e,0x55, + 0x68,0x4f,0x29,0xac,0xf5,0x86,0xb1,0xf4,0xbe,0xab,0xe4,0xdf,0xe2,0x7c,0xb6,0x7b, + 0x85,0x5e,0xee,0x22,0x2b,0x7d,0x1f,0xe9,0xfe,0x47,0x9e,0x69,0x51,0x16,0x94,0x13, + 0xc6,0x6b,0xde,0x7c,0x2f,0x6f,0x85,0x52,0x7d,0x2b,0xc6,0x74,0x18,0x43,0xc8,0x84, + 0x0c,0x66,0xbe,0x82,0xf0,0xe5,0xbe,0xd8,0x97,0x8e,0xa0,0x57,0xdf,0x71,0x15,0x7b, + 0x7b,0xac,0xf8,0xcc,0x6c,0xf4,0xb1,0xd7,0x7c,0xab,0x1a,0xae,0x3b,0x55,0x19,0x46, + 0x49,0x1c,0x73,0x57,0x26,0x38,0x18,0x53,0xd2,0xae,0xe8,0x5a,0x3d,0xce,0xbd,0xa9, + 0x45,0x61,0x6c,0x00,0x2e,0x49,0x77,0x6e,0x12,0x34,0x03,0x2e,0xec,0x7b,0x2a,0x8e, + 0x4d,0x7c,0x14,0xe6,0x78,0x91,0x8b,0x93,0x51,0x45,0x9f,0x0f,0x68,0xf6,0x92,0x2c, + 0xfa,0xd6,0xb2,0x4a,0x69,0x56,0x00,0x34,0xbc,0xe0,0xcc,0xe7,0xee,0x40,0x87,0xfb, + 0xcf,0xdc,0xf6,0x19,0x3e,0x95,0xcb,0xea,0xba,0xb5,0xe7,0x88,0xf5,0x76,0xd6,0xef, + 0x15,0x55,0x47,0xc9,0x04,0x4b,0xc2,0x47,0x1a,0xf0,0x88,0x83,0xa0,0x0a,0x38,0x15, + 0xb9,0xe3,0x2d,0x6a,0x0d,0x46,0x68,0xf4,0x2d,0x18,0x95,0xd2,0x34,0xf2,0x55,0x3b, + 0x19,0xa4,0xe8,0xf3,0x3f,0xa9,0x63,0xd3,0xd0,0x60,0x57,0x1f,0x3c,0x87,0x7c,0x71, + 0xa3,0x60,0x77,0x1f,0x4a,0xf0,0xea,0xe2,0x1d,0x59,0x5d,0x6c,0xb6,0xff,0x00,0x33, + 0xb2,0x49,0x41,0x72,0x47,0xe6,0x59,0x33,0x09,0x59,0xdc,0x83,0x80,0x70,0x2a,0xa4, + 0xb7,0x0c,0x57,0x60,0x18,0xe7,0x20,0x77,0x34,0xd6,0x9a,0x25,0x93,0x68,0x3c,0x82, + 0x00,0x35,0x55,0x98,0x4b,0x23,0x12,0x78,0x1f,0x28,0xac,0x92,0x76,0xb5,0x89,0x68, + 0x7e,0x02,0x8f,0x56,0x6f,0xd2,0x99,0xc1,0xf9,0x53,0x81,0xe9,0xec,0x29,0x03,0x00, + 0xd8,0x27,0xa0,0x22,0x93,0x1b,0x01,0x73,0xc7,0xb5,0x76,0x50,0xa6,0xde,0xac,0x70, + 0x5a,0x92,0x46,0xc3,0x1c,0x70,0x49,0xef,0xe9,0x51,0xbc,0x9f,0x3f,0xca,0x7d,0xff, + 0x00,0xc9,0xa8,0x59,0x80,0x52,0x49,0xc0,0xef,0x51,0xef,0x24,0x00,0x79,0xae,0xe5, + 0x04,0x95,0x8d,0x5a,0xb9,0x66,0x43,0x8e,0x49,0xe0,0xe7,0x9e,0xf5,0x55,0x41,0x76, + 0x61,0xdb,0x19,0x15,0x24,0xaf,0xc7,0xb8,0xed,0x4e,0x89,0x42,0xa0,0xe7,0xa0,0xad, + 0x60,0xf5,0x49,0x15,0x14,0x40,0x36,0xb4,0x99,0x3c,0xf7,0xcd,0x7d,0x23,0xf0,0x63, + 0x1f,0x64,0xd4,0x95,0xba,0x09,0x20,0x6c,0x7e,0x0c,0x0f,0xf8,0x57,0xcd,0xd1,0x80, + 0x6e,0x31,0xd0,0x67,0xf2,0xaf,0xa3,0x7e,0x0d,0x32,0xf9,0x9a,0x95,0xb8,0x5d,0xdb, + 0x92,0x17,0x07,0xe8,0xc4,0x63,0x1f,0x8d,0x7a,0x18,0x3f,0x8c,0x2a,0xdd,0xd2,0x67, + 0xd1,0xf6,0xd7,0xa9,0x14,0x6a,0xc0,0x05,0x54,0xf5,0xe7,0x9f,0xa5,0x5e,0x7d,0x5d, + 0xd8,0xed,0xf9,0x4a,0xe0,0x72,0x38,0xed,0xe9,0x5c,0xb4,0xe3,0x08,0x63,0x7e,0xbd, + 0x87,0xbf,0xd6,0xb2,0x6f,0x26,0x9e,0x21,0xc3,0x7c,0x8b,0x92,0x71,0xce,0x2b,0xe8, + 0x23,0x17,0x19,0x5e,0xe7,0x85,0xca,0x75,0xed,0xa9,0x15,0x60,0xa7,0x25,0x37,0x1e, + 0x84,0x63,0x9a,0x7a,0x6b,0xa5,0x1d,0xd1,0xc9,0x66,0x3c,0x00,0x3d,0x3e,0xb5,0xe7, + 0x93,0x6a,0x25,0x15,0x03,0xe4,0xe4,0x80,0x33,0xc6,0x73,0x53,0xcf,0x74,0xbe,0x59, + 0x50,0x54,0x1e,0x17,0x6f,0x5e,0xa7,0x35,0x94,0xea,0x5a,0x4e,0xdb,0x94,0xa1,0xdc, + 0xeb,0x13,0x56,0x64,0x94,0x92,0xcc,0xa5,0x4f,0xcb,0x96,0xec,0x4f,0x6f,0xf0,0xad, + 0x78,0x75,0x45,0x11,0x90,0x92,0x96,0x27,0x20,0xf3,0xdf,0x3c,0x13,0x5e,0x43,0x3d, + 0xfb,0xb4,0xff,0x00,0xbb,0x63,0xb7,0x20,0x1e,0xff,0x00,0x95,0x5a,0x1a,0x92,0x46, + 0x8a,0xb1,0xb1,0x03,0x23,0x1d,0xa9,0xd1,0x96,0xad,0xd8,0x52,0x86,0xba,0x1e,0xa3, + 0x26,0xb4,0xec,0x8c,0x8e,0xcd,0x81,0xc1,0x27,0x03,0x83,0x59,0x6b,0xaa,0xf9,0x43, + 0x01,0x81,0x5f,0x41,0xfc,0xf9,0xae,0x22,0xef,0x56,0x76,0xdc,0x33,0x85,0x03,0x19, + 0x18,0xcf,0xff,0x00,0xae,0xb0,0xae,0x35,0x13,0x82,0xca,0xc4,0xab,0x63,0xef,0x1c, + 0x1a,0xeb,0x9d,0x5b,0x45,0x89,0x53,0xb3,0x3d,0xb6,0xdb,0x5b,0x31,0x0d,0xe8,0x01, + 0xf5,0x02,0xba,0x4b,0x2d,0x5c,0xce,0x9c,0x36,0x06,0x7b,0x57,0xcf,0xf6,0x1a,0xe3, + 0xef,0xda,0xa5,0x46,0xd1,0x8e,0xbc,0xfe,0x35,0xde,0xe8,0x57,0x8d,0x23,0x2a,0x33, + 0x60,0xb1,0x1f,0x5c,0x7e,0x1c,0x57,0x37,0x3d,0xd0,0xdd,0x34,0xcf,0x92,0x3f,0x6b, + 0x9d,0x6a,0x4d,0x47,0xe2,0x0e,0x9b,0xa5,0x6e,0xca,0x69,0x7a,0x64,0x6a,0x00,0xe8, + 0x1a,0xe1,0xcb,0xb7,0xfe,0x82,0x2b,0xe6,0x24,0x4d,0xa7,0x38,0xea,0x6b,0xd7,0x3e, + 0x3d,0xea,0x2b,0xaa,0x7c,0x5c,0xf1,0x14,0xa8,0x72,0x90,0xdc,0xc7,0x6c,0xb8,0x3d, + 0x04,0x30,0xa0,0xfe,0x79,0xaf,0x2e,0x87,0x66,0xef,0x52,0x5b,0x8f,0xeb,0x5e,0x2e, + 0x39,0xb7,0x56,0x57,0xe9,0xa7,0xdc,0x7a,0xb1,0x49,0x2b,0x1d,0x1d,0x9c,0x6b,0xe4, + 0xc5,0xb8,0x67,0x07,0x69,0xfc,0x2b,0xd5,0x3c,0x29,0x19,0xc8,0x0a,0x80,0xe4,0xe0, + 0xe4,0xf4,0xaf,0x33,0xb0,0x20,0x40,0x55,0xb9,0xda,0xdd,0x7d,0x33,0x5e,0x9d,0xe1, + 0x8c,0x87,0x01,0x30,0x06,0x7b,0xf4,0x35,0xc6,0xe4,0xef,0x14,0x8c,0xe6,0xf7,0xd4, + 0xf4,0x89,0xf4,0x82,0x63,0x2c,0xc3,0x9d,0x99,0x1e,0xe6,0xb2,0x6c,0xf1,0x05,0x85, + 0xf5,0x93,0x8e,0x31,0xbf,0x91,0xdc,0x75,0xfe,0x75,0xea,0x1a,0x54,0x7e,0x7c,0x2a, + 0xb2,0x05,0x2a,0xe3,0xf4,0xc5,0x70,0x1a,0xb5,0xaf,0xd9,0xee,0x6f,0xcc,0x63,0x68, + 0x5b,0x69,0x18,0x1f,0x65,0x22,0xbb,0xa8,0x61,0x7f,0x7d,0x1a,0xab,0xfa,0xd0,0xf4, + 0x72,0x9a,0x9e,0xf3,0x4f,0xb1,0xf0,0xcf,0xc4,0xc1,0xfe,0x9b,0x28,0x1f,0xde,0x35, + 0xe2,0xd2,0x77,0xc1,0xaf,0x66,0xf8,0x9c,0xe4,0x6a,0x12,0x67,0xd4,0xfb,0x57,0x8d, + 0x49,0x8c,0x57,0xe9,0x79,0x6d,0xfd,0x84,0x6c,0x7b,0x13,0xd6,0x57,0x33,0xdb,0x1f, + 0x8d,0x4b,0x6a,0x71,0x2a,0x9c,0xf4,0x3d,0x69,0x8e,0x70,0x39,0xa7,0x5b,0x60,0x48, + 0x0f,0xbd,0x76,0xc9,0x68,0x67,0x27,0x64,0x7d,0x01,0xe0,0x5b,0xe6,0x8c,0xc6,0x09, + 0xef,0x5f,0x4e,0xe9,0x97,0xc2,0x4b,0x65,0x04,0xf5,0x1d,0x2b,0xe4,0x0f,0x09,0x4d, + 0xe5,0xba,0x8c,0xe0,0x02,0x33,0x5f,0x47,0xe8,0x77,0xdf,0xba,0x03,0x3c,0x91,0xeb, + 0x5f,0x23,0x99,0x51,0xbb,0xba,0x39,0xb9,0x9e,0xc7,0x5b,0x78,0x46,0x4e,0x3a,0x55, + 0x0d,0xdb,0xbe,0x95,0x6e,0x46,0x0e,0x9b,0xb2,0x09,0xc7,0x26,0xab,0x63,0x9e,0x7a, + 0xd7,0x93,0x05,0x6f,0x52,0x1b,0x1c,0x0f,0x34,0xa4,0x9c,0x13,0xd3,0xda,0x9b,0x8f, + 0x7c,0xd2,0x93,0xc7,0x26,0xb4,0x8d,0xc9,0xb1,0x13,0xfa,0xd5,0x37,0x7c,0x8f,0x4f, + 0x7a,0x9e,0x56,0xf7,0xc7,0x1f,0xca,0xa8,0xb3,0x1a,0xd0,0x52,0x5a,0x6a,0x35,0x98, + 0xe6,0x9a,0x1c,0x0c,0x9f,0xe5,0x51,0xbb,0x64,0x63,0x83,0xfc,0xea,0x26,0x6c,0x8c, + 0xff,0x00,0x9e,0x28,0x2a,0x1a,0xd8,0x86,0xea,0xe0,0x2a,0x9e,0x71,0x5e,0x79,0xab, + 0xcc,0x24,0xe9,0xcd,0x75,0xd7,0xf3,0x00,0xa4,0x7b,0x57,0x0b,0x74,0x0c,0x8e,0xc4, + 0xf3,0x5c,0xf5,0x67,0xad,0x8f,0x73,0x0a,0x94,0x61,0x73,0x2d,0x22,0xc9,0xcf,0xa9, + 0xfe,0x75,0xd1,0xe9,0xf0,0x0c,0x83,0x8c,0xf1,0x59,0x71,0x26,0x18,0x57,0x41,0x6b, + 0x85,0x5e,0x4f,0x35,0x94,0xda,0x4a,0xe7,0x36,0x2a,0xa9,0xb7,0x12,0x85,0x03,0xda, + 0xae,0xda,0xdb,0x4d,0x7d,0x3a,0xdb,0xdb,0x21,0x77,0x63,0x80,0x07,0x35,0x9b,0x6a, + 0xb2,0xde,0xce,0xb6,0xd6,0xe3,0x73,0x39,0x00,0x0c,0x57,0xdd,0xdf,0x00,0xfe,0x07, + 0xc9,0xaa,0xdc,0x41,0x3d,0xc4,0x3b,0x9d,0x88,0x62,0x58,0x74,0xcd,0x7c,0xe6,0x75, + 0x9d,0x51,0xcb,0xe9,0x3a,0x95,0x1e,0xbd,0x89,0xc0,0x60,0x6a,0x62,0xea,0x72,0x41, + 0x18,0x5f,0x06,0x7f,0x67,0x8b,0xef,0x13,0x5d,0x43,0x25,0xec,0x1b,0xf7,0x63,0x82, + 0x0e,0x00,0xaf,0xd1,0x8d,0x03,0xf6,0x52,0xf0,0x8c,0x36,0x29,0x1e,0xa0,0x8a,0x58, + 0x8e,0x42,0xa8,0xe2,0xbd,0xab,0xc0,0xfe,0x0e,0xd2,0xbc,0x27,0x62,0x90,0x5a,0xc6, + 0xbb,0xc0,0x01,0x9f,0x1f,0xa5,0x7a,0x30,0x9b,0x68,0xaf,0xc2,0xb3,0x5e,0x2d,0xc6, + 0x63,0x2a,0xb9,0x29,0xd9,0x76,0x47,0xdd,0xd2,0xcb,0xa9,0x61,0x60,0xa9,0xc2,0x29, + 0xbe,0xac,0xf8,0x1f,0xc7,0xff,0x00,0xb0,0xc7,0x81,0x75,0xc5,0x33,0x59,0x2c,0x48, + 0xfd,0xf7,0x28,0x07,0xf0,0x22,0xbf,0x37,0x3e,0x36,0x7e,0xc4,0x97,0xbe,0x0a,0xf1, + 0x55,0xb3,0xe8,0xff,0x00,0xe9,0x1a,0x6d,0xd3,0x05,0xf9,0x41,0xc0,0x63,0xfc,0xab, + 0xf7,0x9b,0xc5,0x1a,0xf2,0xdb,0x22,0x5b,0x23,0x7c,0xf2,0x9c,0x1c,0x76,0x02,0xb2, + 0xee,0xfc,0x3f,0xa5,0x78,0x9a,0xca,0x15,0xbf,0x89,0x65,0xda,0xc1,0xc6,0x46,0x48, + 0x23,0xbd,0x46,0x03,0xc4,0x1c,0xdb,0x03,0x27,0x1a,0x15,0x5b,0x4b,0x74,0xd9,0xdc, + 0xb2,0xac,0x3d,0x4a,0x6a,0x75,0xa1,0x66,0x7f,0xff,0xd6,0xf9,0x33,0x44,0xd4,0xe4, + 0x42,0xa9,0x30,0xe0,0xf4,0x3d,0x6b,0xd2,0xb4,0x8b,0xf4,0x12,0x98,0xe4,0xfb,0xac, + 0x38,0xe7,0x8c,0xfe,0x15,0xe1,0xa2,0xe5,0xa1,0x6d,0x85,0x71,0xb6,0xbb,0x9d,0x22, + 0xfc,0x5c,0x05,0x11,0xe0,0x1e,0x33,0x5f,0x89,0xce,0xa7,0x36,0x8b,0x74,0x7c,0xdc, + 0xe1,0x6d,0x59,0xed,0x70,0xce,0xcd,0x88,0xc6,0x02,0x9e,0xe7,0xa5,0x6d,0xa8,0x1b, + 0x03,0x03,0xfe,0xe9,0xae,0x12,0xc6,0xec,0x3c,0x61,0x24,0xce,0xe5,0x03,0xff,0x00, + 0xd7,0x5d,0x1d,0xb5,0xe0,0x68,0x84,0x6c,0x7a,0x77,0xac,0xe7,0x51,0x37,0xae,0xe6, + 0x71,0x8b,0x3e,0xa6,0xfd,0x9e,0xb4,0x34,0xd6,0x3c,0x54,0x35,0x9b,0xf5,0x06,0x0d, + 0x30,0x2e,0x01,0x19,0xdd,0x24,0x83,0x03,0xfe,0xf9,0x19,0x3f,0x95,0x7b,0x15,0xca, + 0xad,0xbd,0xfd,0xc4,0x08,0xdb,0x96,0x39,0x5d,0x55,0x87,0x70,0x18,0xe2,0xb8,0xbf, + 0x83,0x50,0xb6,0x89,0xe0,0x49,0x75,0x05,0xf9,0x64,0xbb,0x32,0x4a,0x1b,0x3c,0xf3, + 0xf2,0x29,0xfc,0x00,0xad,0x78,0xe6,0x25,0x88,0xce,0x4e,0x73,0xf5,0xf7,0xaf,0xe7, + 0x2e,0x3e,0xcd,0x5e,0x2f,0x30,0x92,0x7f,0x67,0x45,0xe8,0xbf,0xe0,0x9f,0xb5,0xf0, + 0x96,0x07,0xd8,0x60,0xa0,0xde,0xf2,0xd4,0xea,0x8b,0x6e,0x42,0x7b,0x11,0x49,0x6c, + 0xfc,0x94,0x3e,0xbd,0x2a,0xac,0x12,0x87,0x5c,0x8e,0xb8,0xa7,0xd9,0x86,0xfb,0x6c, + 0x69,0xdb,0x76,0x4f,0xf3,0xaf,0xce,0xde,0xba,0x36,0x7d,0x8c,0x56,0x87,0xac,0x78, + 0x7f,0x51,0x7d,0x34,0xa2,0xa6,0x36,0x84,0x01,0xc7,0xa9,0xce,0x49,0xfa,0xe6,0xbd, + 0x0a,0x3d,0x42,0xde,0xe9,0x7c,0xec,0x18,0x8b,0x0e,0x41,0x20,0xf2,0x38,0x1c,0xfb, + 0xd7,0x91,0x69,0xf2,0xa8,0x0f,0x2b,0x9e,0x14,0x92,0x49,0xe3,0xa7,0x6a,0xd9,0xb1, + 0xbd,0x33,0x49,0x1a,0x6e,0xfb,0xc3,0x71,0x3e,0x9f,0xe4,0x57,0xa3,0x1a,0xde,0xf7, + 0xb3,0x6a,0xe8,0xca,0xae,0x0e,0x32,0x4a,0x7d,0x4f,0x40,0x79,0x1d,0x14,0x31,0xe4, + 0x37,0xdd,0x3e,0xbe,0xb5,0x0b,0x49,0xb8,0x71,0x5a,0xfa,0x6b,0x5a,0x98,0xbe,0xc9, + 0x28,0xde,0xae,0x39,0xf5,0x07,0xd4,0x1e,0xd5,0x87,0xa9,0xda,0xc9,0x61,0x29,0x47, + 0x04,0xa9,0xe5,0x5b,0xb1,0x15,0x8e,0x3f,0x03,0x2a,0x34,0x95,0x68,0x6b,0x1e,0xbe, + 0x47,0x1d,0x09,0xc6,0x55,0x1d,0x26,0xac,0xff,0x00,0x32,0x19,0x18,0x63,0x15,0x3d, + 0x8b,0x72,0x41,0xe8,0x78,0xac,0x93,0x36,0x2a,0xc5,0x8c,0xd8,0x93,0x19,0xaf,0x0a, + 0x9d,0x6b,0x54,0x4c,0xef,0xa9,0x45,0xfb,0x36,0x8b,0x71,0x1f,0x26,0xe9,0xe3,0xc6, + 0x32,0x78,0xa5,0x9d,0xfc,0xa9,0xc4,0x8a,0x71,0xce,0x78,0xf5,0xa8,0x6f,0x0e,0xcb, + 0xa4,0x7e,0xc7,0x8a,0x75,0xef,0x28,0x18,0x0a,0xe8,0x9b,0xb4,0x27,0x15,0xd1,0xdc, + 0x85,0x1b,0xb8,0xb7,0xd5,0x1d,0x48,0x4d,0x37,0xc5,0x1a,0x4d,0xce,0x83,0xad,0xc1, + 0x1d,0xd5,0xbd,0xd4,0x2d,0x0d,0xc4,0x32,0x80,0xc9,0x2c,0x4e,0x30,0x41,0x07,0xda, + 0xbf,0x1f,0x7e,0x34,0xff,0x00,0xc1,0x3e,0x7c,0x5f,0xa7,0x78,0x8b,0x58,0xd7,0x3e, + 0x1a,0x35,0xbd,0xee,0x82,0x98,0xba,0xb7,0xb3,0x92,0x52,0x2f,0x02,0x1c,0x99,0x22, + 0x8d,0x02,0x91,0x21,0x4c,0x71,0xc8,0x2c,0x31,0x8c,0x9a,0xfd,0x79,0xd2,0x2c,0x54, + 0x22,0x5e,0xdd,0x12,0x98,0x19,0x50,0xa7,0x04,0xfd,0x69,0xf7,0xba,0x97,0xef,0xf3, + 0x16,0x30,0xa7,0xb7,0x6c,0x57,0xe9,0xbc,0x2f,0xc4,0x79,0x9e,0x57,0x4a,0x38,0x8a, + 0x73,0xb4,0x9f,0xce,0xeb,0xcd,0x7f,0x4c,0xf9,0x6c,0x66,0x5d,0x42,0xbd,0x49,0x53, + 0x4a,0xf1,0xfc,0x9f,0x93,0x3c,0x6f,0xf6,0x67,0xf8,0x2b,0x2f,0xc3,0xaf,0x87,0xba, + 0x76,0x9f,0xa9,0x87,0xb4,0xbb,0x65,0x12,0xcf,0x0a,0xe0,0x31,0x66,0x19,0xf9,0xcf, + 0x6c,0x74,0xc6,0x2b,0xe9,0x3b,0xcb,0x0b,0x74,0x8b,0x29,0x90,0x47,0x7c,0xf5,0xa8, + 0x93,0x5c,0x8d,0xe1,0x52,0x81,0x55,0x88,0x19,0xff,0x00,0x1a,0xc1,0xbe,0xd4,0xd9, + 0x73,0x96,0xcd,0x76,0xe6,0x98,0xfc,0x17,0xb3,0x9c,0xd7,0xbf,0x39,0x6a,0xe5,0xe6, + 0xce,0x6a,0x54,0xb1,0x33,0x9a,0x8b,0xd1,0x2d,0x91,0x9b,0x76,0xc6,0x22,0x54,0xff, + 0x00,0x3a,0xc5,0xb6,0xbd,0xf2,0x2e,0xc9,0xeb,0x9a,0x6d,0xd5,0xf7,0x98,0xdc,0x9e, + 0x2b,0x9d,0xb9,0x91,0xbe,0xf2,0x1d,0xa4,0x1e,0x0d,0x7e,0x70,0xf1,0xaa,0x15,0xa3, + 0x51,0x74,0x3e,0xba,0x86,0x11,0xca,0x9b,0x8b,0xdd,0x9e,0xbd,0x6f,0x32,0x5d,0xc1, + 0x83,0x83,0x91,0xf4,0xaf,0xc9,0xcf,0xf8,0x29,0x9f,0xc1,0xe5,0xd4,0xfc,0x3d,0xa3, + 0xfc,0x60,0xd2,0xed,0xff,0x00,0xd2,0xb4,0x79,0x57,0x4b,0xd5,0x5d,0x47,0x2f,0x69, + 0x39,0xff,0x00,0x46,0x91,0xb0,0x32,0x4c,0x73,0x1d,0x99,0x3d,0x15,0xcd,0x7e,0x87, + 0x69,0x9e,0x21,0x9a,0xd8,0x86,0x90,0x36,0x33,0xc9,0xeb,0x59,0x7f,0x10,0x6c,0xb4, + 0x3f,0x8a,0x9e,0x0f,0xd7,0xbc,0x07,0x7e,0x9e,0x65,0xbe,0xaf,0xa7,0xcd,0x6b,0x28, + 0x23,0xa1,0x91,0x48,0x56,0x1e,0xe1,0xb0,0x46,0x3a,0x11,0x5f,0xa9,0x70,0xaf,0x12, + 0xbc,0x0e,0x3a,0x86,0x36,0x0f,0xe1,0x6b,0xe6,0x9e,0xeb,0xee,0x3e,0x77,0x17,0x97, + 0x39,0x42,0x74,0xa4,0xb4,0x67,0xf3,0x33,0xe1,0xbb,0x62,0x5d,0x46,0x38,0xaf,0x7d, + 0xd1,0xa0,0xf2,0xe1,0x04,0x83,0xc5,0x79,0xbe,0x9d,0xa1,0x5d,0xe8,0xda,0xc5,0xde, + 0x8f,0xa8,0x26,0xdb,0xab,0x0b,0x99,0x6d,0x66,0x04,0x63,0xf7,0xb0,0x39,0x8d,0xf8, + 0xff,0x00,0x78,0x1c,0x57,0xaf,0x58,0xc3,0xb6,0x0e,0x9d,0xab,0xfa,0x57,0x3e,0xc7, + 0x46,0xb5,0xa7,0x17,0xa3,0x3f,0x1c,0xc7,0xb6,0xa4,0xe0,0xf7,0x21,0x90,0x33,0x30, + 0x0b,0xd4,0xff,0x00,0x9c,0xd7,0x5b,0xaf,0x5c,0x7f,0xc2,0x1b,0xe1,0xf5,0xd1,0xad, + 0xce,0xdd,0x57,0x55,0x88,0x3d,0xd9,0x1f,0x7a,0x1b,0x76,0xc1,0x48,0x7d,0x8b,0x70, + 0xcf,0xf8,0x0a,0xd0,0xf0,0xbe,0x91,0x6f,0x0a,0xdc,0x78,0x9b,0x53,0x50,0x6c,0x74, + 0xd0,0x1f,0x6b,0x74,0x96,0x73,0xfe,0xae,0x2f,0x7c,0x9f,0x99,0xbd,0x87,0xbd,0x79, + 0x66,0xa9,0x79,0x75,0xad,0x6a,0xd7,0x1a,0x9d,0xe3,0x17,0x92,0x77,0x67,0x24,0xfd, + 0x73,0xff,0x00,0xea,0x15,0xf0,0x98,0xec,0x4a,0x72,0x54,0x6f,0xeb,0xfe,0x5f,0x33, + 0x0a,0x10,0xe4,0x87,0x3f,0x57,0xb1,0x92,0x8f,0xe5,0xa8,0xd9,0x90,0x7a,0x9c,0xf3, + 0x48,0x85,0x8f,0xef,0x9c,0xe3,0x76,0x7f,0x2a,0x9e,0xe9,0x0e,0x11,0x33,0xf3,0x3f, + 0xa0,0xed,0xde,0xaa,0xc8,0x41,0x8c,0xff,0x00,0xb3,0xd2,0xa2,0x92,0x44,0xd9,0xde, + 0xcc,0xac,0xbb,0x77,0x49,0x23,0x72,0x77,0x63,0x8e,0xd4,0x81,0x88,0x90,0xb2,0x72, + 0x00,0xfd,0x6a,0x22,0xa5,0x46,0xd0,0xdd,0x06,0x4f,0x7e,0xbd,0x69,0xb1,0x3f,0xee, + 0xb7,0x37,0xf1,0x1f,0xd2,0xba,0xe2,0x9b,0xd0,0x76,0x27,0x2d,0xb2,0x40,0x71,0xcb, + 0x13,0xee,0x78,0xa8,0x65,0x96,0x56,0x21,0x73,0x81,0xfc,0xea,0x21,0x27,0x99,0x36, + 0xee,0xca,0x39,0xa6,0xb3,0x02,0xe7,0xb6,0x39,0x15,0xdd,0x46,0x29,0x2b,0x1a,0xae, + 0xc4,0x8e,0x72,0xaa,0xbe,0xa7,0xd6,0x9f,0x13,0x2f,0x95,0xcf,0x27,0x27,0xff,0x00, + 0xaf,0x50,0x15,0x04,0x67,0xae,0x05,0x46,0xae,0x00,0x00,0x7a,0xd6,0xd6,0xbb,0x2a, + 0xc5,0x86,0x91,0x98,0xee,0x1e,0xbd,0x2a,0xe4,0x87,0xf7,0x79,0x1c,0x60,0x01,0x54, + 0xc0,0x40,0x46,0x07,0xbd,0x5c,0x51,0x90,0x46,0x32,0x07,0x7a,0xd2,0x9b,0xf7,0x8a, + 0x51,0xd4,0x82,0x16,0x26,0x55,0xc8,0xe7,0x39,0xaf,0xa0,0xbe,0x0e,0x4c,0x53,0x5b, + 0xbc,0xb6,0x5e,0x7c,0xdb,0x37,0x23,0x9c,0x72,0x8c,0xa7,0xfc,0x6b,0xc0,0xe3,0x0a, + 0xb2,0x73,0xdc,0xf5,0xaf,0x60,0xf8,0x4f,0x33,0x43,0xe3,0x0b,0x49,0x3e,0xe8,0x99, + 0x64,0x80,0xe4,0xf5,0xf3,0x14,0x81,0xc9,0xf7,0xc5,0x76,0x61,0x1a,0x55,0x95,0xca, + 0x92,0xbd,0x36,0xac,0x7d,0x15,0x79,0x3c,0x8c,0xc4,0x3f,0xcb,0xb3,0xe6,0x23,0xb6, + 0x3d,0x6b,0x22,0x56,0x70,0xbb,0xb1,0x80,0xc7,0xaf,0x51,0x8a,0xe9,0x6f,0x74,0xf0, + 0xcb,0xe6,0xb9,0xf9,0xb1,0xc8,0xc7,0x6a,0xe6,0x2e,0xe0,0x96,0x06,0xdf,0x83,0xb0, + 0x73,0xd6,0xbe,0x83,0x9a,0xf6,0x67,0x82,0x8c,0x59,0x8c,0x8c,0x36,0x31,0x2e,0x58, + 0xe4,0xf0,0x07,0xf9,0xfc,0x2a,0x7b,0x16,0x03,0x7e,0x5f,0x93,0xc7,0x23,0xa6,0x31, + 0xd6,0xa8,0x5e,0x3e,0x63,0x2b,0xe5,0x93,0x91,0xd8,0xe7,0xa5,0x63,0xdb,0x5e,0xdc, + 0x5a,0x02,0xd2,0x72,0xad,0x9d,0xb9,0xed,0x9a,0xce,0x6e,0xd3,0x4e,0xc5,0xd8,0x4b, + 0xeb,0xd7,0x5b,0x99,0x10,0xb2,0x8e,0x0b,0x02,0xbc,0x0c,0x83,0xda,0xab,0x1b,0xb3, + 0x07,0x0e,0xc5,0x98,0xf3,0xb8,0xfa,0xf4,0xcd,0x64,0x6b,0x92,0xca,0xee,0x93,0xa7, + 0xcd,0xd8,0xae,0x79,0xe7,0xd0,0x7b,0x55,0x78,0xe5,0x95,0xa2,0x55,0x20,0x75,0x18, + 0xef,0xed,0x58,0x46,0xa7,0xbf,0x27,0x62,0xa5,0x13,0x5e,0x6b,0xf9,0x1c,0x96,0x07, + 0x7f,0x70,0x3d,0xfd,0x6a,0x94,0x97,0x12,0x49,0x27,0xce,0x76,0x82,0x33,0xf8,0xd5, + 0x79,0xd0,0x8c,0x05,0x18,0x6c,0xf2,0x08,0xe0,0x7d,0x2a,0xed,0xb2,0x13,0x19,0x12, + 0x2e,0x09,0x07,0x19,0xe7,0xa7,0x7a,0xd9,0xcb,0x41,0x58,0x9a,0xda,0x46,0x66,0xca, + 0x93,0x9c,0x75,0x1f,0xe2,0x6b,0xd9,0xbc,0x18,0xef,0x3c,0xf0,0x09,0x86,0x15,0x1b, + 0x24,0xe7,0x9c,0x0e,0x6b,0xca,0x74,0x9b,0x17,0x95,0xc2,0xa8,0xc0,0x03,0x8c,0x8c, + 0xd7,0xaa,0x5d,0x4e,0x3c,0x37,0xe0,0xcd,0x67,0x5e,0x93,0x0a,0x34,0xfd,0x3a,0x79, + 0xb8,0xe9,0xbb,0x61,0x0a,0x3e,0xa4,0x9a,0x98,0x45,0xde,0xe6,0x94,0xd2,0x72,0x47, + 0xe7,0x37,0x8a,0x75,0x21,0xac,0xf8,0xbb,0x5a,0xd4,0xc1,0x04,0x5c,0xea,0x37,0x32, + 0x02,0x3a,0x15,0x32,0xb0,0x53,0x9f,0xa0,0x15,0x9a,0xc5,0x4b,0x84,0xee,0x79,0x26, + 0xb2,0x56,0x37,0x4d,0xa5,0xba,0x8e,0x0e,0x7d,0x47,0x7a,0xd5,0x70,0x50,0x29,0x3d, + 0x40,0xe6,0xbc,0x7c,0x44,0xef,0x29,0x33,0xba,0xd6,0x56,0x3a,0x9d,0x37,0xf7,0x90, + 0xb1,0x18,0xcf,0x04,0x0f,0x7a,0xf4,0xbf,0x0b,0x48,0x04,0x8a,0x0e,0x47,0xb6,0x33, + 0xcf,0xb5,0x79,0x8e,0x9e,0xe8,0xaa,0x1b,0xb3,0x28,0xfe,0x75,0xda,0x78,0x6a,0xf0, + 0x45,0x71,0x93,0xc0,0x53,0xd0,0xf6,0xe6,0xb9,0x26,0xed,0x67,0x73,0x96,0xac,0x5e, + 0xa7,0xd4,0xfa,0x0a,0xc5,0x71,0x6e,0xa1,0x38,0x2a,0x47,0x5f,0xf3,0xeb,0x59,0x1e, + 0x2c,0xb2,0x48,0x6d,0x2f,0xe6,0x24,0x82,0x20,0x90,0x2f,0xe2,0x01,0xab,0x9e,0x08, + 0xc5,0xcc,0x6b,0x21,0x20,0xf2,0x41,0x00,0xfa,0xd6,0x87,0xc4,0x08,0x92,0x2d,0x22, + 0xec,0xf7,0x16,0xef,0xf9,0xf1,0x5f,0x55,0x97,0xa7,0x3a,0x4e,0x6d,0x74,0x3a,0xf2, + 0xc7,0x66,0xfb,0x9f,0x99,0x1f,0x13,0xf1,0xfd,0xa9,0x20,0xf5,0x3c,0xd7,0x8d,0xc8, + 0x7a,0xf1,0xc5,0x7b,0x27,0xc5,0x03,0xff,0x00,0x13,0x56,0xcf,0x72,0x6b,0xc7,0x24, + 0x04,0x66,0xbe,0xcf,0x2e,0xff,0x00,0x77,0x81,0xee,0x45,0xdd,0x26,0x8a,0x0d,0xda, + 0x9f,0x6f,0x80,0xe3,0x1d,0x33,0x4d,0x90,0x73,0xc5,0x25,0xb9,0x05,0xc6,0x7a,0x8a, + 0xec,0x61,0x27,0x64,0x7a,0x87,0x87,0x24,0x2a,0xca,0x4f,0xad,0x7b,0xbe,0x8d,0x77, + 0xb5,0x54,0xfe,0x7c,0xd7,0xcf,0xfe,0x1f,0x3d,0x38,0xce,0x0f,0x5a,0xf5,0xbd,0x2e, + 0xe0,0xaa,0xa8,0xf4,0xaf,0x9c,0xc7,0xea,0x8e,0x26,0xec,0xf5,0x3d,0xaa,0xd6,0x7f, + 0x31,0x76,0x8a,0x90,0x2f,0x61,0xf8,0x8f,0x5a,0xe5,0xb4,0xbb,0xd0,0xc0,0x2e,0x79, + 0xe2,0xba,0x95,0x21,0x86,0xe1,0x5e,0x14,0xb4,0x1d,0xf4,0x1d,0x48,0xc4,0x0c,0x81, + 0xd2,0x9d,0xbb,0xbd,0x46,0xc7,0x8c,0x7a,0xe6,0x9c,0x6e,0x2b,0x94,0xe5,0x20,0x93, + 0xcf,0x4a,0xa6,0xca,0x59,0x80,0x1d,0x4f,0xad,0x5f,0x75,0x3e,0x99,0xcf,0x7a,0x9e, + 0xd6,0xd5,0x9d,0xf3,0x8a,0xa7,0x34,0x95,0xd8,0x8c,0x93,0x6c,0xe4,0x71,0xfa,0xd6, + 0x74,0xd9,0x4c,0x9e,0xe2,0xbd,0x36,0xdf,0x48,0xf3,0x53,0x24,0x63,0xd2,0xb8,0x9d, + 0x7a,0xd3,0xec,0xb2,0xf0,0x0e,0x07,0x51,0x58,0xac,0x44,0x1d,0xd5,0xcd,0x69,0x24, + 0xd9,0xc3,0x5f,0x12,0x47,0x7c,0xd7,0x3b,0x3c,0x7b,0xb8,0xad,0xfb,0xb2,0x5b,0x3e, + 0x9c,0xd6,0x1c,0xae,0xa3,0x3d,0xbe,0x95,0xc9,0x2a,0xaa,0xed,0x9e,0x85,0x5a,0xdc, + 0xb1,0x2b,0xa8,0xc7,0x53,0xc8,0xe9,0x57,0x23,0x77,0x77,0x11,0xc5,0xc9,0x63,0x81, + 0x54,0x77,0xb3,0xb6,0xd4,0xe4,0x0e,0xe4,0xd7,0xb0,0x7c,0x31,0xf0,0x64,0x9a,0xee, + 0xa7,0x13,0xba,0x6e,0x40,0x46,0x38,0xcf,0x7a,0xe1,0xc6,0xe2,0xe3,0x42,0x8c,0xab, + 0x54,0x7a,0x23,0x8a,0x94,0x27,0x88,0xa8,0xa9,0xc3,0x76,0x7a,0xf7,0xc1,0x0f,0x85, + 0xf7,0x1a,0xb5,0xfc,0x37,0x37,0x31,0x6e,0x77,0x60,0x46,0x47,0x41,0x5f,0xaf,0x3e, + 0x04,0xd0,0xec,0x3c,0x1b,0xa4,0xc7,0x0a,0x2a,0xfd,0xa1,0x94,0x64,0xe3,0xa6,0x6b, + 0xc7,0x7e,0x13,0x78,0x16,0xd3,0xc3,0x1a,0x4c,0x77,0xd3,0xc6,0x04,0x85,0x46,0xde, + 0x07,0x1c,0x75,0xaf,0x59,0x17,0x4f,0x24,0x9b,0xc9,0x27,0x26,0xbf,0x9b,0xb8,0xa3, + 0x88,0x2a,0x66,0x38,0x86,0xa2,0xf4,0x3f,0x5b,0xc9,0xf2,0xa8,0xe0,0xe8,0x2e,0xe7, + 0xaf,0x69,0xfa,0x97,0x9b,0x82,0x4f,0xbd,0x6a,0xde,0xea,0x4b,0x6b,0x6c,0xd3,0x3b, + 0x6d,0x00,0x77,0xaf,0x2f,0xb1,0xbf,0x68,0x88,0x22,0xb0,0x7c,0x4d,0xe2,0x09,0x66, + 0x4f,0xb3,0x23,0x13,0xeb,0x8a,0xf9,0xee,0x5f,0x65,0x4d,0xb6,0x77,0x4a,0x9a,0x94, + 0x88,0xaf,0x75,0x79,0x35,0x3d,0x51,0xa5,0x27,0x2a,0x1b,0x8f,0xc2,0xbd,0x57,0xc3, + 0xb7,0x27,0xc9,0x0b,0x9c,0x9c,0x57,0x87,0x69,0x71,0x3b,0x38,0x27,0x35,0xec,0x1a, + 0x16,0xf0,0x83,0x8c,0x57,0x93,0x4d,0xbe,0x77,0xe6,0x76,0x4e,0x09,0xd3,0xe5,0x3f, + 0xff,0xd7,0xf8,0xde,0xf2,0xde,0x29,0x3e,0x74,0x1f,0xfd,0x7a,0xa7,0x65,0x78,0xd6, + 0x97,0x00,0x27,0x03,0x35,0x6d,0x26,0x04,0xf9,0x52,0x0e,0xa7,0x00,0xd6,0x6d,0xf8, + 0x11,0xb8,0x29,0xd7,0x1d,0x6b,0xf1,0x3a,0x9e,0xfc,0x79,0xfa,0x9f,0x3f,0x6d,0x3d, + 0xe3,0xd4,0xed,0x2f,0x83,0x2c,0x73,0x6e,0x23,0xd4,0x7a,0xd7,0x61,0x63,0x2b,0x4a, + 0xcb,0xb7,0x9c,0x9e,0x3f,0xc2,0xbc,0x6f,0x46,0xbe,0x7d,0xbe,0x5b,0xf2,0x47,0x20, + 0xd7,0xa9,0xf8,0x5a,0xe4,0x5c,0xde,0xdb,0x40,0x58,0x1d,0xd2,0xa0,0xe7,0xdd,0x85, + 0x79,0xd8,0xc7,0xcb,0x17,0x51,0x69,0xa0,0xe9,0x53,0xbc,0x92,0x3f,0x45,0x74,0x8f, + 0xf8,0x97,0xf8,0x46,0xce,0xc5,0x30,0x11,0x22,0x89,0x3f,0x4c,0x9a,0xae,0x92,0x90, + 0x7d,0x87,0xa7,0x6a,0x50,0xec,0x34,0xe8,0x50,0x72,0x3e,0x5e,0xbe,0xc2,0xa9,0x87, + 0x39,0xca,0xf0,0x7d,0x2b,0xf9,0x47,0x35,0xa8,0xe7,0x5e,0x72,0x91,0xfd,0x09,0x83, + 0x82,0x85,0x38,0xc5,0x74,0x3a,0x2b,0x4b,0x9c,0x1c,0x8e,0x95,0xb9,0x62,0xe1,0x6e, + 0x8c,0xc7,0xa2,0x23,0x1f,0xe9,0x5c,0x4c,0x52,0x84,0x23,0x6f,0x4e,0xb8,0xae,0x86, + 0xd6,0x6d,0xf1,0xc8,0x17,0x3f,0x30,0x55,0xfc,0xcd,0x79,0x14,0xbe,0x34,0x7a,0x6d, + 0x7b,0xb7,0x3a,0xe9,0x2f,0x8a,0xda,0x24,0x2b,0xd5,0xc8,0x07,0xf1,0xe4,0xd6,0xa5, + 0x8d,0xea,0x43,0x76,0x03,0x1c,0x05,0x00,0x7e,0x1d,0x6b,0x93,0xdd,0x9b,0x88,0x13, + 0xb2,0x29,0x3f,0x9f,0x4a,0x94,0x4b,0x89,0x98,0xf6,0xdd,0x9f,0xc0,0x74,0xaf,0x56, + 0x9a,0x49,0xf3,0x18,0xd4,0x6d,0xa4,0x7b,0xc6,0x97,0xac,0xae,0x57,0x60,0xc0,0xf5, + 0xae,0xc0,0x5e,0xc7,0x7d,0x6e,0xf6,0x92,0xb0,0xd8,0xeb,0x8e,0x79,0x20,0xf6,0x3f, + 0x85,0x78,0x36,0x9f,0xa8,0x1d,0xa0,0x67,0xf0,0xae,0xf7,0x47,0x9e,0x6b,0x99,0x56, + 0x28,0x43,0x3c,0x8c,0x78,0x55,0xff,0x00,0x3d,0x2b,0xb6,0x8e,0x36,0x69,0xfb,0x3d, + 0xef,0xd0,0xe0,0xaf,0x84,0x8b,0xf7,0x9e,0x96,0x2b,0xea,0x11,0x4d,0xa7,0xdc,0x9b, + 0x7b,0x8f,0x4c,0xab,0x0e,0x8c,0x3d,0x45,0x5a,0x48,0x6e,0x2c,0xae,0x12,0x3b,0x95, + 0x28,0xce,0xa1,0xd7,0x3d,0xd5,0xba,0x57,0x51,0xad,0xc7,0x65,0xa7,0xe9,0xe2,0xeb, + 0x58,0x0a,0xd2,0x45,0xf3,0xc7,0x1e,0x79,0xc8,0xf5,0x3e,0x9e,0xa2,0xb9,0xcf,0x0d, + 0x6b,0x7a,0x7f,0x89,0x96,0x48,0x35,0x41,0xb5,0xc4,0xa7,0xc9,0x99,0x78,0x64,0x18, + 0xe9,0xee,0x33,0xda,0xb8,0x6a,0x70,0xbb,0xe6,0x92,0xa7,0x2b,0x49,0xd9,0xc5,0x3e, + 0x9e,0x4f,0xf4,0x37,0x59,0xba,0x74,0xd7,0x34,0x6e,0xb6,0x6d,0x7e,0x9f,0xaf,0xe0, + 0x5c,0xbf,0xda,0x62,0x49,0x07,0x6a,0xbf,0x66,0xab,0x38,0x46,0x97,0xee,0xaf,0x27, + 0xf0,0xad,0x0b,0xff,0x00,0x0e,0xdc,0xc1,0x10,0xc1,0xf3,0xad,0xcf,0xfc,0xb4,0x4f, + 0x4f,0x71,0xda,0xaa,0xc8,0xf1,0xda,0xc2,0x12,0x31,0x84,0x51,0x8f,0x7a,0xce,0x9e, + 0x57,0x5f,0x0f,0x5d,0xbc,0x54,0x79,0x74,0xeb,0xd7,0xfc,0xd1,0x92,0xc5,0x53,0xab, + 0x49,0x46,0x93,0xb9,0x5f,0x5a,0xd6,0x76,0xc6,0x51,0x5b,0x04,0xf0,0x31,0xed,0x5c, + 0x4a,0xea,0xa7,0x71,0x21,0xf2,0x58,0xf3,0xef,0x51,0xea,0x9f,0x3b,0x33,0x1c,0xe0, + 0xfe,0x63,0xde,0xb9,0x69,0x64,0xf2,0x5c,0x96,0xfc,0x71,0xc6,0x7d,0xfe,0xb5,0xdb, + 0x2c,0x44,0xa7,0x3b,0xc9,0x9a,0x47,0x0f,0x15,0x0b,0x44,0xf4,0xb4,0xd5,0x8c,0x76, + 0xe9,0x2a,0x13,0xe5,0xfd,0xc7,0x1d,0x76,0x93,0xd0,0x8f,0x63,0x51,0x5e,0xea,0x5e, + 0x62,0xf0,0x78,0xc5,0x72,0x5a,0x4d,0xe2,0xcd,0x0c,0xd6,0xcc,0x78,0x2b,0xf3,0x7b, + 0x83,0xde,0xa9,0x47,0x73,0x2a,0x6f,0xb4,0x97,0xef,0x44,0xd8,0x1f,0xee,0xf6,0xac, + 0xab,0xcb,0x75,0xdc,0x54,0xe9,0x5d,0xfa,0x1d,0x0b,0xdd,0x0c,0x9c,0x1f,0x7a,0x1a, + 0x4f,0x32,0x10,0xdd,0xeb,0x9a,0x37,0x3f,0x36,0x33,0xcd,0x6d,0xe8,0xd3,0xaf,0xda, + 0x51,0x5c,0x06,0x50,0xc1,0xb0,0x7a,0x71,0x5f,0x3d,0x35,0xcd,0x57,0x91,0x75,0x3d, + 0x8a,0x7e,0xed,0x3e,0x63,0xd1,0x74,0x2d,0x01,0x86,0x9a,0x65,0xbe,0x45,0x0d,0x31, + 0xdc,0xaa,0xdf,0x78,0x2e,0x3b,0xfd,0x6b,0x36,0x5d,0x1a,0xdb,0x4d,0x95,0xe7,0x84, + 0x05,0x27,0x24,0xe2,0xac,0x49,0xad,0xc9,0x2f,0xca,0x64,0xc7,0xb0,0xff,0x00,0x1a, + 0xa5,0x75,0x3e,0xf8,0x19,0xb2,0x4f,0x07,0x19,0xaf,0xd1,0x28,0xd2,0xa3,0x0a,0x70, + 0x85,0x35,0xb2,0x3e,0x56,0x55,0x2a,0x4a,0x72,0x9c,0xde,0xe7,0xe2,0x67,0xed,0x11, + 0xe1,0x48,0x74,0x3f,0x8e,0xde,0x23,0xfb,0x2a,0x84,0x87,0x50,0x96,0x2d,0x45,0x14, + 0x0c,0x00,0x6e,0x10,0x6f,0xc6,0x3d,0x5d,0x58,0xfd,0x4d,0x73,0xfa,0x36,0x97,0x3e, + 0xa1,0x34,0x36,0x36,0xe9,0xbe,0x49,0x99,0x55,0x54,0x75,0x24,0x9c,0x01,0x5e,0xe7, + 0xfb,0x52,0x59,0xab,0xfc,0x53,0x8a,0xe3,0x1c,0xbe,0x9f,0x10,0x27,0xd7,0x6c,0x8f, + 0xfe,0x35,0xc8,0x78,0x7c,0x43,0xe1,0xaf,0x0d,0xdf,0x78,0xaa,0x60,0x3c,0xf5,0x5f, + 0xb3,0xd9,0xaf,0x42,0x66,0x71,0xf3,0x38,0xe9,0xf7,0x17,0xf5,0x35,0xfb,0xe6,0x5f, + 0x98,0x7f,0xc2,0x4d,0x0a,0xb5,0x3a,0x47,0xf2,0xd0,0xfc,0x87,0x3a,0xa0,0x9e,0x65, + 0x52,0x0b,0x6b,0xff,0x00,0xc1,0x39,0x3f,0x88,0xba,0x95,0xbd,0xa8,0xb7,0xf0,0x86, + 0x92,0xc1,0xad,0xf4,0xfc,0x89,0xca,0xf4,0x96,0xe0,0xe3,0x7b,0xfe,0x07,0xe5,0x1e, + 0xc2,0xbc,0xc8,0xc0,0xb1,0xa6,0xf2,0x3a,0x8c,0xf1,0x56,0xd5,0xa6,0xb8,0x99,0xee, + 0x26,0x39,0x67,0x62,0x4e,0x7a,0x9c,0xd4,0x57,0x6e,0x31,0xd3,0x04,0x70,0x6b,0xe7, + 0xe3,0x39,0x4a,0x5e,0xd2,0x5b,0xb7,0x7f,0xeb,0xd0,0xf3,0xe7,0x25,0x27,0x75,0xb1, + 0x81,0x21,0x69,0x26,0xe7,0x8c,0x8d,0xa3,0x3d,0xbd,0xff,0x00,0x1a,0xa3,0x2a,0xa2, + 0xa3,0xe7,0xd8,0x56,0x9c,0xc9,0xf3,0xee,0x1d,0x14,0x71,0xf5,0xac,0xe6,0x39,0x42, + 0x71,0xce,0x79,0xaf,0x56,0x94,0xec,0x62,0xd7,0x72,0x8b,0x90,0x13,0x77,0x76,0xfe, + 0x55,0x0a,0x29,0x31,0x10,0x4f,0xb7,0x35,0x72,0x45,0x0c,0x02,0xa8,0x18,0x15,0x46, + 0x65,0xf2,0xd7,0x18,0xea,0x3f,0x9d,0x7a,0x54,0xaa,0x5f,0x61,0xa4,0x88,0x93,0x08, + 0xa5,0x79,0x24,0xff,0x00,0x4a,0x8b,0x39,0x63,0xb7,0x07,0x1d,0xe8,0x2f,0x96,0x0d, + 0xdb,0x15,0x03,0x39,0x01,0xc8,0xe9,0xfa,0xd7,0xa9,0x05,0x74,0x86,0x3a,0x59,0xb0, + 0x38,0xef,0xfe,0x34,0x47,0x92,0xa0,0x93,0xda,0xa9,0x33,0x06,0x23,0x77,0x1c,0x55, + 0x80,0x41,0x00,0xf7,0x02,0xb6,0x94,0x74,0xd0,0xaf,0x23,0x44,0x3e,0xcc,0x01,0xce, + 0x45,0x68,0xe3,0x2b,0xed,0x58,0xa1,0xc0,0x20,0xfa,0x8a,0xd6,0x8d,0xb6,0xaf,0xaf, + 0xa8,0xab,0xa3,0x12,0x90,0xc8,0x89,0x69,0xc0,0x1d,0x1a,0xbd,0x73,0xc0,0x12,0x8b, + 0x7d,0x7e,0xc2,0x65,0xff,0x00,0x96,0x73,0xc6,0xd9,0xfa,0x30,0xaf,0x20,0x8b,0x2b, + 0x30,0xf6,0xaf,0x51,0xf0,0x73,0x9f,0xed,0x2b,0x76,0xee,0x18,0x57,0x4d,0x25,0x6a, + 0xab,0xe4,0x4d,0x49,0x25,0x4a,0x47,0xde,0x3a,0x86,0x9e,0x08,0x74,0x60,0xbb,0x73, + 0x85,0x3d,0xf9,0xe4,0x63,0xf0,0xaf,0x3c,0xd5,0x34,0xd9,0x22,0xf9,0x98,0x92,0xa0, + 0x9f,0x97,0x1d,0x71,0xef,0x5e,0xc7,0x63,0x6e,0x35,0x3d,0x0f,0x4d,0xd4,0x41,0xff, + 0x00,0x5f,0x02,0x96,0x23,0xae,0xf8,0xf2,0x8d,0xfc,0xab,0x9d,0xd6,0xb4,0xd8,0xfc, + 0xa2,0xa5,0x4b,0x94,0x23,0x0c,0x3e,0x9d,0xeb,0xdf,0xd9,0xf2,0x3e,0x87,0x81,0x7b, + 0x48,0xf0,0x7d,0x40,0xbe,0x0f,0xd9,0xd4,0x07,0x6e,0xa7,0xba,0x8c,0x74,0xae,0x50, + 0x47,0x11,0x62,0x81,0xdb,0x20,0x61,0x87,0x61,0xf8,0x57,0xa5,0x6a,0x76,0xae,0x0f, + 0x94,0xc3,0x6b,0x2f,0x18,0x1d,0xc1,0x35,0xc0,0xdf,0x5b,0x85,0x00,0x2a,0x13,0x82, + 0x49,0x71,0xc1,0x1e,0x80,0xd6,0x55,0xdb,0x4b,0x98,0xda,0x2c,0xc4,0x92,0xca,0x37, + 0x1b,0xd5,0xb9,0xc0,0x03,0x9f,0xd3,0x26,0xb3,0x12,0x07,0x70,0x62,0x63,0xd1,0x89, + 0xc7,0x4d,0xbd,0x30,0x2b,0x5a,0x48,0xe7,0xda,0xff,0x00,0x29,0x65,0xce,0x31,0x9e, + 0x83,0xd7,0x3e,0xf4,0xcb,0x33,0x04,0x4c,0x43,0x01,0x86,0x03,0x01,0x8f,0x23,0x1c, + 0x67,0xd7,0x9a,0xc7,0x9e,0xed,0x76,0x2c,0xb1,0xe5,0x8f,0x27,0x2d,0x82,0x00,0xf4, + 0xef,0xfd,0x6a,0xcc,0x16,0xe2,0x4c,0x34,0x4f,0x9e,0x8b,0xc8,0xe9,0xeb,0x5a,0x30, + 0xdb,0x97,0x8f,0x70,0x55,0x03,0x38,0xc6,0x73,0x9c,0x77,0xad,0xcb,0x3b,0x04,0x40, + 0x02,0x10,0xcc,0x46,0x70,0x39,0xef,0xeb,0x5d,0x5c,0xb7,0xd8,0x96,0xcd,0x5d,0x1b, + 0x4f,0x2a,0xea,0xc8,0xa1,0xb2,0x00,0x1e,0xc7,0xe9,0x58,0x1f,0xb4,0x4e,0xa0,0x74, + 0x0f,0x85,0x1f,0xd9,0x9e,0x66,0xd9,0xb5,0xbb,0xd8,0x2d,0xb1,0xdc,0xc5,0x17,0xef, + 0xe4,0x1f,0x4c,0x26,0x3f,0x1a,0xf5,0x7f,0x0d,0x5a,0x03,0x81,0x2a,0xed,0xc1,0xe3, + 0x9e,0xb5,0xf2,0x7f,0xed,0x79,0xe2,0x01,0x3f,0x89,0xf4,0x1f,0x0c,0x46,0xfc,0x69, + 0xd6,0x4d,0x75,0x32,0xf5,0xfd,0xe5,0xdb,0xed,0x8f,0x9f,0x64,0x8d,0xbf,0x3a,0xaa, + 0x9e,0xe5,0x36,0xcd,0xf0,0xfa,0xc8,0xf9,0x37,0x77,0x21,0x3f,0xda,0xfe,0x95,0xa5, + 0x26,0xdf,0x2c,0x1c,0x70,0x46,0x0f,0xe5,0x58,0xad,0x2e,0x5f,0xe5,0xfd,0x6b,0x4e, + 0x33,0xe6,0x21,0x0c,0x73,0x8c,0x60,0xf6,0xaf,0x12,0xa2,0xba,0x67,0x63,0x5a,0xdc, + 0xd8,0x82,0x43,0xe5,0x28,0x43,0x9f,0x5f,0x6e,0x6b,0xa5,0xd2,0xe5,0x11,0x5e,0x1c, + 0xb6,0x73,0xf9,0xe6,0xb8,0xfb,0x69,0x0a,0xc7,0x93,0xd7,0x35,0xab,0x04,0x84,0x4c, + 0x08,0x3c,0x83,0x8f,0xce,0xb8,0x2a,0xc5,0x58,0x89,0x46,0xce,0xc7,0xd4,0x9f,0x0e, + 0xf5,0xb4,0xb5,0xba,0x58,0x37,0x6e,0x52,0x72,0x7f,0x1f,0x4a,0xf4,0x4f,0x89,0x4d, + 0xe6,0x68,0x37,0x32,0x8e,0x37,0x43,0xfc,0xc8,0xaf,0x9e,0xbc,0x0b,0x73,0xe5,0x6a, + 0x31,0x34,0xa0,0xfc,0xc4,0x6d,0xc7,0xae,0x6b,0xde,0xbe,0x25,0xb2,0x8f,0x0a,0x19, + 0x07,0x1b,0xe3,0x03,0xaf,0xa1,0x15,0xee,0x65,0x35,0x6d,0x87,0xab,0xcc,0xf6,0x5b, + 0x1b,0xe0,0xa2,0x9c,0x9a,0x47,0xe6,0x6f,0xc4,0xf1,0x8d,0x54,0x8c,0xe7,0x9a,0xf2, + 0x29,0x7e,0xbc,0x57,0xaa,0x7c,0x4a,0x62,0xfa,0xb3,0x75,0xc5,0x79,0x54,0x9d,0xfb, + 0xe6,0xbe,0xff,0x00,0x2e,0xff,0x00,0x77,0x81,0xeb,0x51,0x77,0x82,0x29,0x3f,0xb7, + 0x4a,0x4b,0x71,0xf3,0x8c,0xf6,0x3f,0x5a,0x49,0x3e,0x5f,0xc0,0x54,0x96,0xa3,0xe6, + 0x1e,0xdd,0x6b,0xb1,0x9a,0x37,0xa5,0xcf,0x44,0xd0,0x57,0xee,0xfb,0x62,0xbd,0x22, + 0xdd,0x8c,0x6a,0x33,0xd3,0x1d,0x6b,0xcf,0xbc,0x3e,0xbb,0x82,0x81,0xcf,0x6a,0xf4, + 0xc8,0x6d,0x1c,0xc4,0x0f,0xf2,0xaf,0x9c,0xc6,0x49,0x26,0xee,0x79,0xf3,0xbb,0x7a, + 0x1b,0xda,0x65,0xe6,0x24,0x00,0xf4,0xcd,0x7a,0x3d,0x8c,0xc6,0x44,0x07,0xd6,0xbc, + 0xcf,0x4f,0xb3,0x60,0xe3,0x8c,0x57,0xa7,0x69,0x30,0x30,0x55,0x04,0xe2,0xbe,0x76, + 0xac,0xd7,0x30,0xd1,0xa4,0xb1,0x36,0x4f,0xad,0x5c,0x8a,0xcd,0x9c,0x8c,0x8a,0xd1, + 0x82,0xd8,0x36,0x32,0x39,0xff,0x00,0x1a,0xe8,0x2d,0xad,0x51,0x46,0x08,0xa8,0xf6, + 0xad,0xe8,0x26,0xd2,0xdc,0xe7,0x53,0x4b,0x67,0xe7,0x19,0xfa,0x55,0xd8,0x34,0xd3, + 0x1b,0x72,0x30,0x3f,0xc2,0xba,0x81,0xe4,0x46,0xb9,0x3f,0xe4,0x56,0x6d,0xc5,0xec, + 0x6a,0x70,0x98,0xfc,0x6b,0x1a,0x93,0xb4,0x6e,0xcc,0xe7,0x25,0x6b,0x9a,0x36,0xd1, + 0xec,0x8c,0xa8,0x19,0x38,0xae,0x43,0x5c,0xd1,0x9e,0x7d,0xd2,0x81,0xc1,0xea,0x6b, + 0xaf,0xd3,0xa5,0x0c,0x7e,0x6a,0xe8,0x9e,0xce,0x29,0xe2,0xe9,0xd7,0xa8,0xaf,0x3d, + 0x41,0xdb,0x99,0x18,0x52,0xc4,0x72,0xbb,0xb3,0xe4,0x6d,0x66,0xc6,0x5b,0x52,0xd8, + 0xe9,0x5c,0x34,0x92,0x34,0x8f,0xf3,0x70,0x3d,0xab,0xea,0x6f,0x12,0x78,0x5d,0x67, + 0x56,0x2a,0xbd,0xb3,0xe9,0x5e,0x0f,0xab,0x78,0x7a,0x4b,0x59,0x49,0x03,0xea,0x31, + 0x44,0x54,0x94,0xaf,0x2d,0x8d,0xa5,0x88,0xe7,0xd0,0xca,0xd1,0xec,0x5e,0xf2,0xe6, + 0x38,0x23,0x19,0x2c,0x47,0xbd,0x7e,0x97,0xfe,0xcf,0x3f,0x0e,0xd1,0x8c,0x13,0xcb, + 0x1f,0xc8,0x80,0x31,0x24,0x57,0xc4,0xdf,0x0a,0xfc,0x36,0xfa,0x86,0xaf,0x19,0x75, + 0x27,0x0c,0x00,0x1f,0x8d,0x7e,0xc0,0xfc,0x33,0xd0,0xe3,0xd1,0x34,0x18,0x46,0xdd, + 0xae,0xe0,0x67,0x8c,0x71,0x5f,0x9a,0xf8,0x89,0x9c,0xca,0x10,0x58,0x4a,0x6f,0x7d, + 0xcf,0xbc,0xe0,0xfc,0xb5,0x49,0xbc,0x44,0xd1,0xe9,0x8f,0x08,0x11,0x2c,0x69,0xf2, + 0xc6,0x80,0x00,0x3e,0x95,0x4d,0x10,0x67,0x00,0x71,0x4f,0x9e,0xe7,0xcc,0x3b,0x14, + 0xf1,0x51,0x2b,0x94,0x5d,0xd5,0xf8,0xfe,0x17,0x0f,0x6f,0x7d,0x9f,0xa1,0x56,0x9e, + 0x96,0x2d,0x4d,0x74,0x2d,0xe1,0xc7,0xf1,0x57,0x28,0x54,0xdc,0xdc,0x66,0x4e,0xf5, + 0x7e,0xe2,0x5f,0x31,0xba,0xf4,0x34,0x96,0xc8,0xbb,0x80,0x1c,0x9f,0x5a,0xe7,0xc7, + 0x4f,0x9b,0x45,0xd0,0x9a,0x51,0xb2,0xb9,0xd1,0x69,0xb6,0xea,0x14,0x63,0x1c,0x57, + 0xa3,0x69,0x80,0x24,0x78,0xae,0x2b,0x4f,0x81,0x80,0x5c,0xd7,0x59,0x03,0xf9,0x71, + 0xf1,0xd7,0xbd,0x79,0xaa,0x56,0xd5,0x9d,0x51,0x8f,0x32,0xb2,0x3f,0xff,0xd0,0xf8, + 0xc9,0x3c,0xb7,0x8f,0x7e,0x79,0xc7,0xe5,0x55,0xee,0x82,0x4a,0x06,0xdf,0xbd,0xe9, + 0xf4,0xaa,0x1a,0x7d,0xc9,0x0c,0x63,0x7e,0xc7,0xa0,0xad,0x09,0xfa,0x79,0x89,0xd3, + 0xd0,0xd7,0xe2,0x90,0xbb,0x4c,0xf0,0x5c,0x6d,0x2b,0x0d,0xb5,0x95,0x60,0x6d,0xa4, + 0xe3,0xb6,0x6b,0xd0,0xbc,0x35,0x76,0xbf,0xda,0xd6,0x6d,0x1b,0xe3,0xf7,0xf1,0x67, + 0x1f,0xef,0x8a,0xf2,0xe9,0xd9,0x7a,0x8c,0x55,0xff,0x00,0x0f,0xea,0x12,0xdb,0xea, + 0x16,0xe7,0x3c,0x99,0xa3,0xc7,0xd7,0x70,0xc5,0x72,0x63,0xbd,0xea,0x32,0x83,0xda, + 0xc5,0xd2,0x56,0xa8,0xa4,0x7e,0xb3,0x45,0x2f,0x99,0x6b,0x10,0x07,0xa2,0x8e,0x7d, + 0xf1,0x50,0xbb,0x93,0xc8,0x38,0x6a,0x9f,0x4e,0x68,0xe4,0xd1,0x51,0x1a,0x3c,0xb8, + 0x55,0x7d,0xc3,0xa8,0xe0,0x64,0x56,0x6c,0xa7,0xe6,0x38,0x3f,0xd0,0xd7,0xf2,0x46, + 0x63,0x1e,0x5a,0xd2,0x3f,0xa1,0x70,0x6e,0xf1,0x4c,0xb4,0xb3,0x91,0xce,0x7e,0xb5, + 0xd2,0xe9,0x12,0x79,0x84,0x8f,0x42,0x2b,0x86,0xf3,0x88,0x23,0xeb,0x5d,0x77,0x87, + 0xdc,0xb0,0x73,0xe9,0x8a,0xf3,0x29,0xff,0x00,0x10,0xf4,0xa4,0xbd,0xc3,0xae,0x81, + 0xf3,0x75,0x2b,0xe4,0xe1,0x40,0x5f,0xea,0x6a,0x24,0x90,0x92,0x18,0xf2,0x0f,0xeb, + 0x50,0xda,0xc8,0x7c,0x9b,0x87,0xf5,0x2d,0x5d,0x47,0x85,0xb4,0x11,0xaa,0xc8,0xb3, + 0xde,0x92,0x96,0x91,0x60,0xb1,0xe8,0x64,0x6f,0xee,0xaf,0xf5,0x35,0xe8,0xd2,0x52, + 0x9b,0xe5,0x89,0xc9,0x36,0xa2,0xae,0xcb,0x3a,0x35,0xa5,0xed,0xdb,0x05,0xb7,0x89, + 0xdf,0x07,0x04,0xa8,0xe0,0x7d,0x4f,0x41,0x5e,0xb9,0xa7,0xde,0xdb,0x78,0x6e,0xd4, + 0xa4,0x44,0x35,0xc3,0x8f,0xde,0x37,0xf4,0x1e,0xc2,0xb3,0x2e,0xf5,0xa8,0xec,0x6d, + 0xd6,0xc6,0xc5,0x56,0x28,0x54,0x60,0x2a,0x8c,0x74,0xf5,0xf5,0xae,0x16,0xff,0x00, + 0x51,0x69,0x5c,0x9c,0xe7,0x2b,0x9c,0xd7,0xa1,0x4e,0x11,0xa0,0xf9,0xa9,0xbb,0xcb, + 0xbf,0xf9,0x19,0x72,0x3a,0xca,0xd3,0x5a,0x0b,0xe3,0x4f,0x12,0x4d,0xa9,0x29,0x8c, + 0x3f,0x7e,0x82,0xb2,0x7c,0x23,0x7e,0xd6,0x92,0x02,0x1b,0xa9,0xac,0xd9,0x62,0x5b, + 0x8c,0x86,0xe7,0x8a,0x6e,0x9b,0x18,0x81,0x89,0x04,0x8c,0x73,0xfa,0xd7,0x66,0x1a, + 0xb3,0x53,0xe7,0x91,0x15,0xf0,0xd7,0x56,0x8e,0xc7,0xd3,0x7a,0x4f,0x89,0xb6,0x22, + 0xa3,0x38,0xc6,0x06,0x79,0xed,0xde,0x93,0x51,0xb9,0xd1,0xe5,0x76,0x95,0x32,0x4b, + 0x73,0xe5,0x83,0x85,0xcf,0xf9,0xed,0x5e,0x37,0x6d,0xab,0x0f,0x2f,0x64,0x4d,0x93, + 0x8c,0x7b,0x8a,0xb7,0x0d,0xeb,0x86,0xde,0xcd,0x8f,0x6c,0xd7,0x56,0x37,0x12,0xea, + 0x53,0xe5,0x92,0xba,0x5f,0x81,0xe6,0x53,0xc2,0xa8,0x4f,0x9a,0x2e,0xcc,0xee,0xae, + 0x34,0xed,0x3f,0x51,0x42,0xb6,0xe4,0x5b,0xdc,0x7f,0x08,0xcf,0xc8,0xde,0xc7,0x3d, + 0x33,0xeb,0x5e,0x71,0xa9,0x59,0xcd,0x6d,0x33,0xdb,0xdc,0xc6,0x52,0x45,0x3d,0x0f, + 0x6f,0xfe,0xb7,0xbd,0x69,0xc9,0xa9,0x49,0x1b,0x86,0x53,0x8c,0x7b,0xf1,0x5d,0x85, + 0x9d,0xce,0x95,0xe2,0x3b,0x31,0x67,0xaa,0x80,0x27,0x8c,0x61,0x25,0x1f,0x78,0x7e, + 0x3d,0xc7,0xb1,0xaf,0x19,0x51,0x85,0x5d,0x23,0x65,0x2f,0xc1,0x9d,0xb1,0xab,0x3a, + 0x5a,0xcb,0x55,0xf8,0xa3,0xcb,0x34,0xed,0xc9,0x77,0xe5,0xa8,0xc0,0x60,0x7f,0x11, + 0xe9,0x53,0xdd,0x1f,0x2e,0x74,0xb9,0x3f,0xc6,0xbb,0x5b,0xea,0x2b,0x6f,0x52,0xd0, + 0x2f,0x74,0x6b,0xc4,0x91,0xd7,0xcc,0x81,0x8f,0xc9,0x32,0x72,0xa7,0x3e,0xfd,0x8f, + 0xb5,0x61,0x6a,0x0c,0xdb,0x25,0x4c,0xfd,0xd6,0xdc,0x3f,0x1a,0xe1,0xc5,0x46,0x50, + 0x4d,0x4d,0x6a,0x8e,0xda,0x72,0x8c,0x9a,0x94,0x1e,0xe5,0x06,0x94,0xe6,0xb5,0x74, + 0xd9,0xf1,0x70,0x87,0xdc,0x0a,0xe6,0xbc,0xed,0xd9,0x3f,0x8d,0x5c,0xb3,0x9f,0x0c, + 0x8f,0xd3,0x04,0x1a,0xf9,0xda,0xb2,0xb4,0xd4,0xbc,0xcf,0x62,0x8c,0x2f,0x0e,0x53, + 0xd6,0xa3,0x58,0x76,0xef,0x21,0x79,0xe9,0x9e,0xff,0x00,0xa5,0x54,0xba,0xb8,0x40, + 0xbb,0x14,0x06,0xc5,0x47,0x05,0xfc,0x13,0xc6,0xa1,0xe4,0x3b,0x88,0xe8,0x57,0xfa, + 0x8a,0xad,0x79,0x1c,0x6a,0x85,0x95,0xfb,0x70,0x6b,0xf4,0x7a,0x72,0x4e,0x29,0xc4, + 0xf9,0x1a,0x91,0xb4,0xac,0xcf,0xcf,0x7f,0xda,0x7b,0x4a,0x37,0x1e,0x3c,0xd1,0xee, + 0x22,0x4f,0xf8,0xf8,0xb5,0x78,0x87,0xd5,0x64,0x1f,0xfc,0x55,0x7c,0xe7,0xf1,0x1f, + 0x51,0x10,0xcf,0x6d,0xe1,0x98,0x18,0x08,0x74,0xf8,0xc2,0x36,0xde,0x86,0x53,0x83, + 0x21,0xfa,0xe7,0x8f,0xc2,0xbe,0xe5,0xf8,0xe5,0xa5,0x43,0x25,0xfe,0x8f,0xaf,0x4d, + 0x83,0x1e,0x9e,0xd3,0xbb,0x9f,0xf7,0x63,0xde,0x07,0xe2,0xca,0x2b,0xf3,0x6f,0x59, + 0xb9,0x3a,0x8e,0xa9,0x71,0x79,0x31,0xcb,0x4b,0x21,0x62,0x49,0xee,0x4e,0x6b,0xf4, + 0xbc,0xbb,0x16,0xea,0xe5,0xd8,0x7a,0x37,0xda,0xf7,0xf9,0x3d,0x0f,0xcd,0x38,0x86, + 0x87,0xb3,0xc6,0x55,0x9f,0xf3,0x5b,0xf2,0x21,0x2e,0x22,0x8f,0x70,0xfa,0x7f,0x8d, + 0x66,0x5c,0x4a,0xec,0x49,0x1c,0xe4,0xe6,0xb4,0x26,0x01,0x21,0x55,0x3c,0x9c,0x67, + 0x27,0xfc,0x2b,0x19,0xe5,0x46,0x93,0x81,0x8c,0x03,0x8f,0xad,0x7a,0x74,0x22,0xf9, + 0xae,0x8f,0x99,0x9e,0x85,0x79,0x70,0xb8,0x7c,0xe7,0x3d,0x79,0xa8,0x24,0x29,0xc6, + 0xde,0xe7,0x3d,0x29,0xd7,0x2e,0xaa,0xa5,0x57,0xb7,0xf9,0xcd,0x56,0x52,0x18,0x29, + 0xea,0x05,0x7a,0xb4,0xaf,0x6d,0x88,0x65,0x67,0x60,0x1f,0x68,0xea,0x4f,0xe9,0x55, + 0xee,0xdc,0x90,0x47,0xe3,0x56,0x48,0x0f,0x37,0x5e,0x49,0xe3,0xde,0xa8,0xdf,0x14, + 0x53,0xb4,0x1e,0x7a,0x57,0xa3,0x87,0xb3,0xe8,0x2b,0x19,0xc0,0x9e,0xfd,0xaa,0x06, + 0x6c,0xa3,0xe7,0xaf,0xf4,0xa6,0x99,0x0e,0xe6,0x5e,0x9c,0xf5,0xed,0x4c,0x19,0x21, + 0x81,0xf4,0xe6,0xbd,0x68,0xe8,0xb5,0x05,0xa9,0x11,0x90,0x82,0x06,0x6a,0xd8,0xcf, + 0x96,0x39,0xc6,0x45,0x56,0x31,0xe0,0xee,0x1d,0xf3,0x8a,0x9c,0xb6,0x50,0x2d,0x75, + 0x53,0x57,0x5a,0x14,0xf4,0x2c,0x02,0x0e,0x0f,0x61,0xd2,0xb5,0xed,0x9b,0x79,0x03, + 0xd4,0x56,0x30,0x20,0xb0,0x1d,0xab,0x5a,0x05,0xc8,0x04,0x56,0x91,0xd2,0x48,0xa5, + 0x7e,0x84,0xe1,0x42,0xca,0x39,0xe3,0x3d,0x2b,0xd2,0xbc,0x1f,0xff,0x00,0x21,0x08, + 0x4f,0x60,0xd5,0xe6,0xe0,0x61,0x87,0xe1,0x5e,0x8d,0xe1,0x0c,0xff,0x00,0x68,0x42, + 0x07,0x72,0x3f,0x4a,0xe8,0x85,0xbd,0xaa,0xb1,0x8e,0x21,0xfe,0xea,0x47,0xe8,0x8f, + 0xc3,0x09,0x24,0xd4,0xbc,0x1a,0x6d,0x8e,0x09,0xb1,0xb9,0x65,0xe7,0xae,0xc9,0xc6, + 0xe1,0xf8,0x64,0x1a,0xd1,0xd5,0x2c,0xa5,0x45,0x65,0x61,0xb7,0x1c,0xfd,0x79,0xac, + 0x1f,0x82,0x32,0xa8,0xbd,0xb8,0xd2,0xa5,0x3f,0x25,0xf4,0x04,0x28,0x3c,0x7e,0xf2, + 0x2f,0x9d,0x3f,0x3e,0x45,0x7a,0xae,0xb7,0xa6,0x96,0xb7,0x2f,0x1a,0x64,0x60,0xe7, + 0xb6,0x07,0xbd,0x7d,0x24,0xe9,0xa6,0xd4,0x97,0x63,0xc2,0x92,0xd1,0x33,0xe7,0x0d, + 0x5a,0xce,0x3f,0x32,0x52,0x9c,0x9e,0xa3,0xfc,0xf5,0xaf,0x3f,0xd4,0x74,0xf9,0x5d, + 0x5c,0x42,0x57,0x07,0x20,0xf1,0xd3,0xeb,0x5e,0xbd,0xac,0x59,0xb4,0x33,0x9c,0xfd, + 0xd6,0x5c,0x11,0xd0,0xf1,0xd7,0x83,0x5c,0x2b,0xc5,0x13,0xbb,0x05,0x7f,0x9b,0x9e, + 0x87,0x1d,0x38,0xae,0x7a,0xeb,0x9a,0x3c,0xa5,0xc2,0x47,0x9f,0xdc,0xd9,0x95,0x46, + 0x79,0x18,0x2e,0x54,0x67,0x1c,0x8f,0xca,0xb3,0xed,0xf4,0xe8,0x9c,0xf9,0x9b,0x03, + 0x83,0x8e,0x4f,0x5c,0xfd,0x2b,0xb9,0xbd,0xd3,0x8c,0x9b,0x4c,0x6a,0x36,0x9c,0x7d, + 0xf3,0xd4,0x81,0x83,0x8a,0xca,0xb6,0xb2,0x54,0x6c,0xa6,0x51,0x81,0xc6,0x05,0x44, + 0x21,0xaa,0x56,0x2c,0x8a,0x38,0x15,0x23,0x08,0x17,0x69,0xcf,0xcb,0x8e,0xff,0x00, + 0xe1,0x5b,0xf6,0x36,0x45,0x64,0x59,0x31,0xcf,0xa7,0x6a,0xa7,0xe4,0x32,0x26,0x24, + 0xf9,0x81,0x3f,0x4f,0xd6,0xba,0x9d,0x2a,0x1f,0x94,0x30,0xc9,0x07,0xa0,0xae,0x8e, + 0x56,0x96,0xc3,0x7a,0x1d,0x9f,0x87,0x2d,0xe3,0x32,0x99,0x1f,0x3f,0x2f,0xe4,0x07, + 0xd6,0xbf,0x2c,0xbe,0x2c,0xf8,0xa4,0x78,0xbb,0xe2,0x1e,0xbd,0xe2,0x05,0x62,0xf0, + 0xcb,0x7b,0x24,0x36,0xfe,0x82,0x0b,0x6f,0xdc,0xc7,0x8f,0x62,0x13,0x70,0xff,0x00, + 0x7a,0xbf,0x48,0xbe,0x25,0x78,0x82,0x2f,0x02,0xfc,0x2f,0xd7,0x3c,0x47,0x03,0xf9, + 0x77,0x46,0xd5,0xa0,0xb6,0x04,0xf5,0xb8,0xb9,0xfd,0xd4,0x60,0x7e,0x2d,0x9f,0xc2, + 0xbf,0x24,0xf6,0xec,0x45,0x50,0x72,0xab,0x80,0x09,0xf4,0xc7,0x7a,0xe2,0xc7,0x54, + 0xb2,0x8c,0x11,0xdb,0x84,0x8e,0xf2,0x2c,0x1f,0x96,0x45,0x71,0xdf,0xf4,0xcd,0x68, + 0x5b,0xb6,0xec,0xee,0x1f,0x2f,0x0d,0xf5,0xaa,0x03,0x24,0x29,0x60,0x0f,0xf9,0xf5, + 0xab,0x96,0xea,0x0b,0xfb,0x11,0x8c,0x1c,0xd7,0x9e,0xd2,0x3b,0x6d,0x6d,0x8b,0xd0, + 0xb6,0x15,0x83,0x1e,0x33,0xd3,0xe9,0x53,0x2d,0xc1,0x42,0x17,0x3c,0xd5,0x65,0xc6, + 0xf2,0x31,0x80,0x41,0xe2,0x9f,0x26,0xd0,0x43,0x0f,0xc0,0xfb,0xd7,0x25,0x58,0xdf, + 0x50,0x6a,0xfa,0x1e,0xc5,0xe0,0xfb,0x86,0x32,0xc4,0xdb,0xf9,0xdc,0x3e,0xbd,0x6b, + 0xe8,0x5f,0x1e,0xdc,0x89,0x7c,0x0d,0x18,0x27,0x27,0x24,0x16,0xff,0x00,0x80,0x64, + 0x57,0xca,0xde,0x11,0xbe,0x78,0xe7,0x8f,0x60,0xfe,0x21,0xd7,0x9a,0xfa,0x3b,0xc5, + 0x33,0x09,0xbc,0x16,0x85,0x78,0x5d,0xe4,0x15,0xf4,0x3b,0x0d,0x3c,0x2c,0x9a,0x52, + 0xb7,0x6b,0x1b,0xe5,0xea,0xd5,0xec,0x7e,0x77,0x7c,0x44,0xcf,0xf6,0x99,0x15,0xe5, + 0xf2,0xe3,0x9c,0x57,0xa6,0xfc,0x42,0x2a,0x75,0x52,0x17,0x9a,0xe0,0xa2,0xb3,0x7b, + 0x86,0xc6,0x0d,0x7e,0xa7,0x97,0x4a,0xd8,0x58,0x3f,0x23,0xae,0x8b,0xf7,0x51,0x8a, + 0x62,0x79,0x0e,0x17,0x9a,0xd8,0xd3,0xb4,0xc7,0x67,0x04,0x8c,0xd7,0x55,0xa7,0x78, + 0x7d,0xe5,0x20,0x6d,0xaf,0x47,0xd2,0x7c,0x2d,0x80,0x19,0x85,0x61,0x8c,0xcc,0x23, + 0x4d,0x34,0x8a,0x9c,0xd5,0xb5,0x28,0x78,0x6f,0x49,0x60,0x07,0xcb,0x83,0x9a,0xf5, + 0x6b,0x4d,0x2c,0x04,0x00,0x80,0x69,0xb6,0x1a,0x7c,0x36,0x91,0x8d,0xc0,0x64,0x62, + 0xb6,0xd2,0x7d,0xa7,0x6a,0x0e,0x95,0xf2,0xf8,0x8c,0x4c,0xaa,0x36,0xd1,0xe7,0xd4, + 0xaa,0x93,0xb1,0x3d,0xad,0x84,0x6a,0x77,0x10,0x05,0x74,0xf6,0x82,0x38,0xc0,0x0b, + 0xc9,0xae,0x76,0x07,0x2c,0xc3,0x3c,0xe7,0xad,0x6f,0xda,0xa8,0x04,0x1c,0xd6,0x11, + 0xa5,0x7d,0x59,0xcd,0x2a,0xaf,0x74,0x74,0x56,0xf2,0x1e,0xb8,0xfc,0xeb,0x41,0x66, + 0x28,0xb9,0x3e,0x99,0xac,0xc8,0xdd,0x51,0x47,0xe7,0x54,0xef,0x6f,0x02,0xae,0x03, + 0x53,0x9c,0x63,0x15,0xb0,0xd3,0x6f,0x56,0xcb,0x57,0xba,0xa0,0x51,0x80,0x71,0x8e, + 0xb5,0x83,0xfd,0xa0,0x5d,0xf9,0x35,0xcf,0xdf,0x5e,0xb3,0x1f,0xad,0x54,0x86,0x76, + 0xdd,0xc7,0x4c,0xf4,0x35,0xe3,0x56,0x9b,0x93,0xdc,0x99,0xcb,0xb1,0xea,0xba,0x6d, + 0xe8,0x18,0xc9,0xae,0xe6,0xd6,0xfc,0x00,0x01,0x35,0xe3,0x16,0x37,0xa5,0x4a,0xfb, + 0xd7,0x69,0x61,0x7c,0x70,0x3b,0xfe,0x94,0xa9,0xdf,0x63,0x9d,0x9d,0xec,0xbe,0x5c, + 0xe8,0x41,0xe4,0x9a,0xf3,0x9d,0x7f,0x41,0x8e,0x7c,0x95,0x5e,0xf5,0xd6,0xc1,0x75, + 0x90,0x01,0xe2,0xaf,0x43,0x10,0xbb,0x95,0x53,0x1d,0xc7,0x5a,0xee,0x4a,0xf0,0x7c, + 0xc3,0x8f,0xc4,0x8e,0x9f,0xe0,0xb7,0x83,0x40,0xd4,0x20,0xcc,0x7f,0xc4,0x0e,0x71, + 0x5f,0xa2,0x10,0x94,0xb6,0xb5,0x8e,0x14,0xfe,0x15,0x02,0xbe,0x71,0xf8,0x4f,0xa3, + 0xad,0xb9,0x17,0x1b,0x71,0xb0,0x71,0x5e,0xfe,0x19,0x9b,0x8a,0xfe,0x71,0xe2,0xda, + 0xae,0xb6,0x65,0x34,0xde,0xc7,0xee,0x79,0x05,0x2f,0x63,0x82,0x8a,0x2f,0x24,0x80, + 0x67,0x3c,0xd2,0x4f,0x71,0x91,0x81,0xd6,0xa8,0xc9,0x30,0xdc,0x40,0xaa,0x8d,0x31, + 0xe7,0xd0,0x57,0xcd,0xd5,0x6a,0x11,0xb2,0x3d,0x65,0xef,0x4b,0x52,0xd4,0xb2,0x63, + 0xbe,0x6a,0x6b,0x19,0xf6,0xb8,0x24,0xf2,0x4d,0x60,0xc9,0x31,0x66,0xce,0x73,0x56, + 0x6c,0xe7,0x42,0xfc,0xf5,0xaf,0x07,0x15,0x57,0xaa,0x3a,0xe1,0x1b,0xbb,0x1e,0x93, + 0x69,0x78,0xaa,0x06,0x48,0xcd,0x6f,0x0b,0xc4,0x31,0xf2,0x47,0x22,0xbc,0xd5,0x67, + 0x28,0xbb,0xb2,0x71,0x5a,0x16,0xd7,0x8e,0xf8,0x62,0xdf,0x41,0x5e,0x7c,0xab,0x3b, + 0x58,0xf4,0x29,0xd2,0x48,0xff,0xd1,0xf8,0x73,0x58,0xd3,0xa4,0xd2,0xf5,0x19,0x21, + 0x20,0x8c,0x31,0x23,0xfa,0x52,0xc7,0x23,0x32,0x93,0x9c,0xe4,0x7e,0x55,0xec,0x7f, + 0x12,0x3c,0x27,0x7f,0x67,0x2c,0xd1,0xdf,0xdb,0x3c,0x17,0x76,0xac,0x63,0x9d,0x18, + 0x60,0xab,0x0f,0x5f,0x71,0x5e,0x1f,0x03,0x18,0xa6,0x31,0x3f,0x5a,0xfc,0x62,0xb4, + 0x1c,0x65,0xa9,0xe3,0xd4,0x5d,0x49,0x65,0x56,0x23,0x27,0xbf,0x6a,0xaf,0x66,0xcd, + 0x6f,0x77,0x0c,0xb8,0xfb,0x92,0xa3,0x11,0x8f,0xee,0xb0,0x35,0xa1,0x21,0x0c,0x30, + 0x3d,0x39,0xc7,0x6a,0xa5,0xf2,0xab,0x85,0x7e,0xbf,0xd6,0xb9,0xab,0x45,0x49,0x38, + 0x93,0x19,0x58,0xfd,0x63,0xd0,0xf5,0x03,0x2e,0x97,0x16,0xcc,0x91,0x2c,0x2b,0xd3, + 0xd0,0xad,0x24,0xb2,0x64,0x60,0x9c,0x9e,0xd5,0xc3,0x7c,0x34,0xd6,0x46,0xa3,0xe1, + 0x1d,0x26,0xf4,0x72,0x5a,0xda,0x30,0xdf,0x55,0x18,0x3f,0xca,0xbb,0x2b,0xc7,0x55, + 0x95,0xb6,0xf0,0x3b,0x77,0xe0,0xd7,0xf2,0x86,0x79,0x46,0x54,0xf1,0x33,0x83,0xe8, + 0xda,0x3f,0x7e,0xca,0xaa,0x2a,0x94,0xa0,0xd7,0x54,0x99,0x06,0xfd,0xa4,0x8c,0xd7, + 0x5f,0xe1,0xa9,0x32,0x26,0x07,0xb6,0x0d,0x70,0xa5,0xce,0xe2,0x73,0xd6,0xbb,0xff, + 0x00,0x03,0xd8,0x4b,0x7f,0x24,0xec,0x72,0xb0,0x26,0xdf,0x32,0x4f,0x4c,0xf4,0x03, + 0x3d,0x49,0xf4,0xaf,0x0a,0x10,0x94,0xea,0xa8,0xc1,0x6a,0x7b,0x55,0x1a,0x85,0x36, + 0xd9,0xdc,0xf8,0x6f,0x4f,0xfe,0xd2,0x2e,0x26,0x3b,0x60,0x0c,0x4c,0x8d,0xd3,0x23, + 0xfb,0xa3,0xdc,0xd7,0xa5,0x4f,0x7d,0x0d,0xbd,0xba,0xdb,0xdb,0x0d,0x91,0xa0,0x0a, + 0x80,0x74,0x02,0xb8,0x49,0x2e,0x60,0xb0,0x8c,0x5a,0xd8,0x82,0x91,0xa7,0xe2,0x49, + 0xf5,0x27,0xb9,0xaa,0x0f,0xab,0x4b,0x8c,0x13,0x9f,0x7a,0xf7,0x69,0xd0,0xf6,0x51, + 0xe4,0x5b,0xf5,0x3c,0xbf,0x69,0xcd,0x2e,0x76,0x75,0x13,0x5d,0x17,0xcf,0x39,0x35, + 0x95,0x24,0xa3,0x18,0xee,0xbc,0x57,0x3d,0xfd,0xab,0x21,0x90,0x8f,0xc6,0xaa,0xc9, + 0xa9,0x48,0xa1,0x80,0xe3,0x3c,0xd5,0x7b,0x27,0x62,0xbe,0xb0,0x8e,0x9e,0x29,0x14, + 0x72,0xc7,0xb6,0x79,0xac,0x1b,0xad,0x40,0x46,0xc5,0x10,0xf2,0x57,0x02,0xa0,0x1a, + 0x96,0x10,0x9c,0xf3,0xb7,0xf5,0xae,0x7e,0xe2,0x67,0x33,0xee,0x39,0x39,0xeb,0xfc, + 0xeb,0x6a,0x30,0x7b,0x30,0x75,0x93,0xd2,0x27,0x61,0xa5,0x6a,0x04,0x4a,0x77,0x36, + 0x32,0x3e,0xb5,0xde,0x29,0x59,0xa1,0x13,0x29,0x07,0x1c,0xe4,0x57,0x8b,0xdb,0x5d, + 0xaa,0x49,0xc8,0xc0,0xff,0x00,0x39,0xaf,0x46,0xd3,0x35,0x31,0xf6,0x73,0x08,0x3c, + 0x00,0x00,0xae,0x95,0x15,0x24,0xe0,0xce,0x69,0xde,0xea,0x44,0x97,0x37,0x8d,0x1c, + 0xa5,0x73,0xb4,0x7d,0x79,0xab,0x76,0x9a,0xbb,0xc0,0xea,0x54,0xe0,0x8e,0xf5,0x8f, + 0x72,0x03,0x65,0xf9,0x24,0x73,0xcf,0x63,0x58,0xaf,0x73,0xe5,0xb1,0x52,0x41,0x3e, + 0xc7,0xa5,0x78,0xb3,0x4e,0x33,0xb3,0x36,0xb2,0x68,0xfa,0x2b,0x44,0xf1,0x1a,0x5e, + 0xdb,0xfd,0x8e,0xe8,0x09,0x22,0x71,0x86,0x56,0x19,0x15,0xca,0x78,0xbb,0x45,0x3a, + 0x6b,0x7d,0xb2,0xd7,0x32,0x5a,0xcc,0x08,0x07,0xa9,0x46,0xfe,0xe9,0xfe,0x86,0xbc, + 0xfb,0x49,0xd7,0x1a,0xd2,0x45,0xea,0x54,0x9e,0x79,0xaf,0x68,0xd2,0xf5,0x4b,0x3d, + 0x56,0xcd,0xad,0x2e,0x86,0xf8,0x66,0x5d,0xac,0xbe,0x99,0xee,0x3d,0xf3,0xd2,0xbb, + 0x79,0x63,0x8a,0xa4,0xe9,0x4d,0xfb,0xdd,0x19,0xcf,0x16,0xe8,0x54,0xe6,0x8e,0xdd, + 0x4f,0x0a,0x59,0x70,0xf5,0x76,0xde,0x51,0xb8,0x10,0x69,0x7c,0x4d,0xa3,0x5d,0x78, + 0x77,0x51,0x36,0xd3,0xfc,0xd1,0x3f,0xcf,0x0c,0x98,0xc0,0x74,0x3d,0xfe,0xa3,0xb8, + 0xf5,0xac,0x88,0x2e,0x00,0x23,0x9a,0xf8,0xbc,0x4d,0x39,0x53,0x9c,0xa1,0x35,0x66, + 0x8f,0xaa,0xc2,0xc9,0x4e,0x2a,0x51,0xd8,0xf4,0x9d,0x32,0x6d,0xcb,0x85,0x50,0xc4, + 0x76,0x3d,0x6b,0x51,0xd6,0x59,0x10,0xf9,0x89,0xc7,0xd7,0x35,0xc8,0x69,0x57,0x12, + 0x19,0x14,0xc4,0x79,0xe8,0x45,0x76,0x72,0x33,0x47,0x0e,0x5d,0xf6,0x93,0xed,0xfd, + 0x0d,0x7d,0x96,0x4d,0x5d,0x55,0xc3,0xc5,0xf6,0xd0,0xf9,0xec,0xd2,0x9b,0xa7,0x59, + 0xf9,0x9f,0x34,0xfe,0xd0,0x8a,0xd0,0x78,0x16,0xfa,0x48,0x17,0x05,0x30,0x49,0xce, + 0x78,0x3c,0x1f,0xe7,0x5f,0x98,0x26,0x1d,0xed,0xc6,0x49,0x24,0xe7,0xf1,0xaf,0xd4, + 0xaf,0x8e,0x90,0xbd,0xdf,0x82,0x35,0x68,0x47,0xcc,0x7e,0xce,0xed,0x90,0x3d,0x39, + 0xfe,0x95,0xf9,0x86,0xaa,0x55,0xb9,0x1d,0x73,0xcf,0xf2,0xaf,0xd0,0xf2,0x09,0xda, + 0x9c,0x91,0xf9,0x8f,0x15,0xaf,0xdf,0x41,0xf7,0x46,0x35,0xcb,0x30,0x3e,0x51,0x07, + 0xbd,0x63,0xf2,0xa5,0x88,0x18,0xad,0xe9,0xcf,0xce,0xef,0xd7,0x1c,0x67,0xf9,0xd6, + 0x2d,0xd0,0xf9,0x8e,0x33,0x8f,0xa7,0x6c,0x57,0xd8,0x61,0xe7,0xa6,0xc7,0xc6,0x4f, + 0x56,0x67,0x4c,0xc5,0xb2,0xd8,0xe3,0x81,0xcd,0x45,0x90,0xa0,0x77,0xd9,0x9f,0xd6, + 0xa2,0x76,0x70,0xc0,0x63,0xe5,0x34,0xe9,0x4a,0x86,0x18,0xef,0x5e,0xb5,0x35,0x65, + 0x62,0x4a,0x85,0x98,0x4c,0x5c,0xe7,0xe9,0xdf,0x35,0x4a,0xe9,0xf7,0x31,0x62,0x06, + 0x6a,0xca,0xc8,0xbb,0xd8,0xb1,0x1c,0xf1,0x9a,0xce,0xba,0x6c,0x64,0x02,0x70,0x45, + 0x77,0xd0,0x57,0x48,0x76,0xd0,0xa8,0xbb,0x8f,0x3d,0xbd,0x69,0xe3,0x80,0x45,0x46, + 0xcf,0x85,0x50,0x78,0xff,0x00,0xeb,0x54,0x31,0xcd,0x9e,0x0f,0xaf,0xd3,0xbd,0x7a, + 0x91,0xb3,0x40,0xac,0x58,0x90,0xfc,0xb9,0xec,0x01,0xcd,0x20,0xe5,0x15,0xbf,0x3a, + 0xad,0x33,0x3c,0x9b,0xf6,0x1c,0x62,0xa5,0x8c,0x7e,0xe5,0x72,0x72,0x41,0xae,0xb8, + 0xe8,0xb4,0x02,0xd4,0x7f,0x78,0x56,0xd5,0xa9,0xe3,0x04,0xf7,0xe9,0x58,0x90,0x1c, + 0x30,0xcf,0x35,0xb3,0x03,0x83,0x85,0xe8,0x07,0x5c,0x73,0x46,0xaf,0x74,0x08,0xbe, + 0xdc,0xe3,0xde,0xbd,0x27,0xc1,0x69,0x9d,0x46,0x06,0xf7,0x15,0xe6,0xb8,0xc2,0x64, + 0x7d,0xec,0xd7,0xa3,0xf8,0x0e,0x5c,0xea,0x11,0x23,0x7f,0x78,0x57,0x55,0x3d,0x2a, + 0x45,0x99,0xd5,0x57,0x83,0x3e,0xd3,0xf0,0x5d,0xec,0x9a,0x4c,0xd0,0x6a,0x10,0x9c, + 0x3c,0x2e,0xae,0xbf,0x55,0x39,0xfd,0x7a,0x57,0xd7,0x17,0x7e,0x5e,0xa5,0x66,0x97, + 0x76,0xc0,0x34,0x17,0x71,0x2c,0xc8,0x7d,0x15,0xc6,0xec,0x71,0xe8,0x72,0x2b,0xe3, + 0x5b,0x69,0x3e,0xcf,0x66,0xbb,0x7f,0xbb,0x5e,0xff,0x00,0xf0,0xab,0xc4,0x8f,0xaa, + 0x68,0xb7,0x3a,0x14,0xd2,0x06,0x9b,0x4e,0x6f,0x36,0x20,0x4f,0x26,0x19,0x0f,0x23, + 0xe8,0xad,0xf9,0x03,0x5e,0xea,0xaf,0x7a,0x8a,0x07,0x91,0x6d,0x0e,0x6b,0xc5,0xda, + 0x62,0x23,0x6f,0x8b,0x80,0x0e,0x30,0x06,0x30,0x3b,0x1c,0xd7,0x93,0xcb,0x6c,0x32, + 0xde,0x5a,0x90,0xce,0x49,0x24,0xf3,0x9c,0x7b,0xd7,0xbb,0xf8,0xb6,0xca,0x52,0xec, + 0xed,0x21,0x08,0xa7,0x01,0x41,0xe3,0xd6,0xbc,0xc6,0x68,0x51,0x24,0x25,0xb8,0x2b, + 0xdf,0xbd,0x39,0xcd,0x73,0x58,0xe7,0xd9,0x9c,0x14,0xb6,0xf1,0xcd,0x12,0x96,0x66, + 0x46,0x43,0x9c,0x0e,0x87,0x9c,0x7e,0x15,0x98,0xaa,0x11,0xc3,0xa0,0xf9,0x73,0xc1, + 0xef,0x5d,0x4e,0xa1,0x16,0xd2,0x5d,0x33,0xbb,0xb1,0xe9,0x9a,0xa1,0x02,0x61,0x00, + 0x6c,0x65,0x48,0xe7,0xeb,0xd7,0x20,0xd2,0x4d,0xa6,0x8d,0x79,0x8c,0xe8,0xed,0xf7, + 0xb1,0xc0,0x24,0xb1,0xef,0xdb,0xde,0xbb,0x0d,0x2e,0xd3,0x2d,0x94,0x1c,0x60,0x60, + 0x8e,0x3a,0xfb,0x56,0x2a,0x43,0xe6,0x36,0xd8,0xf0,0xef,0xbb,0xa8,0x1c,0x57,0x6b, + 0xa2,0xda,0xc8,0xcc,0xc5,0x86,0xdd,0xa3,0x92,0x78,0xad,0xf7,0xd0,0x7e,0x87,0xc9, + 0xdf,0xb5,0xff,0x00,0x8a,0x02,0x59,0xe8,0x1e,0x08,0xb5,0x38,0x2d,0xbf,0x52,0xba, + 0x03,0xd1,0x47,0x95,0x00,0x61,0xee,0x4b,0x30,0xff,0x00,0x76,0xbe,0x1a,0x44,0x2c, + 0x9b,0x5b,0xf8,0x4d,0x7a,0x97,0xc6,0x5f,0x16,0x7f,0xc2,0x5f,0xf1,0x13,0x5a,0xd6, + 0x23,0x7d,0xd6,0xeb,0x70,0x6d,0x2d,0xb1,0xd0,0x41,0x6b,0xfb,0xb5,0x03,0xd8,0xb0, + 0x66,0xfc,0x6b,0xcb,0xed,0xf2,0xce,0xc0,0x7a,0x1e,0x7f,0x5a,0xf1,0x31,0x55,0x39, + 0xa6,0xdf,0x63,0xda,0xa3,0x1e,0x58,0x24,0x48,0x14,0x0c,0x29,0xe7,0x07,0x8f,0xa5, + 0x4f,0x10,0x64,0x75,0xc0,0xe0,0x1a,0xa9,0x20,0x70,0xe7,0xd7,0x1d,0x6a,0xec,0x24, + 0x81,0x91,0xfe,0x7e,0x95,0x0d,0xf6,0x2c,0xb4,0xbf,0x7b,0x27,0xa0,0x3c,0x7e,0x35, + 0x71,0x63,0xf3,0x2d,0xcb,0xfb,0xd5,0x69,0x54,0x81,0x9e,0xb8,0x23,0xf0,0xab,0xf6, + 0x63,0x2b,0x22,0xb9,0xc0,0xc6,0x00,0xfa,0xf4,0xac,0x54,0xfd,0xeb,0x77,0x1c,0x9b, + 0xd0,0xbd,0xa1,0x5c,0x3c,0x37,0x38,0x1e,0xa2,0xbe,0x91,0x7b,0xa7,0xbd,0xf0,0x0d, + 0xd3,0x64,0xb3,0x44,0x55,0xcf,0xb7,0x38,0x35,0xf3,0x2e,0x9e,0x5a,0x3b,0xbc,0xf6, + 0x06,0xbe,0x8b,0xf0,0xf3,0xad,0xc7,0x85,0x75,0x4b,0x61,0x9c,0x35,0xbb,0x91,0xff, + 0x00,0x01,0x19,0xfe,0x75,0x85,0x25,0x69,0xee,0x6b,0x87,0x97,0x2d,0x65,0x26,0x7c, + 0x3d,0xe2,0x6b,0x67,0xbb,0xd6,0x18,0x1e,0x70,0x4f,0x4a,0xb9,0xa4,0xe8,0x26,0x52, + 0x32,0xbc,0x57,0x58,0xfa,0x61,0x9f,0x53,0x91,0xc8,0xe0,0x1a,0xeb,0x6d,0x6d,0xa3, + 0xb4,0x4e,0x9c,0x8a,0xfb,0x6a,0xb9,0x8f,0x25,0x18,0xc2,0x05,0xce,0xa2,0x8c,0x75, + 0x29,0xe9,0xfa,0x34,0x36,0xc8,0xbb,0xc0,0x02,0xb6,0xc4,0x91,0xc4,0x00,0x84,0x63, + 0x1d,0xcd,0x52,0x92,0x62,0xc7,0x93,0x80,0x3b,0x54,0x5e,0x61,0xc0,0xe6,0xbc,0x87, + 0x37,0x37,0x79,0x1c,0x75,0x2b,0x36,0xf4,0x34,0x96,0x4d,0xc7,0x9e,0xb5,0x75,0x0e, + 0xee,0x9d,0x6b,0x19,0x25,0x3c,0x0c,0xd5,0xf8,0x64,0x27,0xae,0x6b,0x68,0xa5,0xb1, + 0x94,0xaf,0xd4,0xda,0xb7,0xe1,0xba,0xf5,0xfe,0x75,0xd0,0x41,0x2e,0xd5,0x04,0xf5, + 0x1e,0xbc,0x57,0x2f,0x0b,0x90,0x40,0xc7,0x4a,0xb8,0xb7,0x07,0x1c,0x1e,0xbc,0x50, + 0xe6,0x93,0xb0,0xa2,0x93,0xd0,0xe9,0x5a,0xef,0x6a,0x9c,0x1f,0x7f,0xa5,0x62,0x5d, + 0x5c,0x97,0xc8,0xce,0x7e,0x9e,0xf5,0x13,0x4e,0x42,0x92,0x3f,0x5a,0xa4,0xce,0x1c, + 0xfd,0x6b,0x9a,0xb4,0xd5,0xac,0x12,0xd0,0xa8,0xfb,0x9d,0xb8,0xe7,0x35,0x34,0x70, + 0x3e,0x7a,0x55,0xc8,0x6d,0xf7,0x7b,0xd6,0xbc,0x36,0x63,0x00,0xd7,0x1c,0x29,0x26, + 0xee,0x67,0x29,0x15,0x2d,0x63,0x75,0x22,0xba,0xab,0x46,0x65,0xfe,0x75,0x9e,0x90, + 0x00,0x72,0x01,0xf6,0xad,0x08,0xba,0x72,0x72,0x6a,0x9c,0x16,0xe8,0x86,0xce,0x82, + 0xde,0x73,0x81,0xcd,0x77,0x9e,0x17,0x80,0xdd,0x5d,0xa9,0xc6,0x79,0xc5,0x79,0xcd, + 0xb0,0x6e,0x33,0xeb,0xd2,0xbd,0xe3,0xe1,0xd6,0x92,0xd3,0xdc,0x45,0x91,0xd4,0x83, + 0x5e,0x7e,0x65,0x8a,0x54,0x30,0xd3,0x9b,0x3b,0xf2,0xaa,0x0e,0xb6,0x22,0x30,0x3e, + 0xa8,0xf0,0x3d,0x80,0xb5,0xd3,0x50,0xb0,0xc1,0x22,0xbb,0x76,0x93,0xcb,0x4d,0xd9, + 0xe7,0xa5,0x67,0x58,0xc6,0xb6,0x96,0x89,0x10,0xe0,0x2a,0x8a,0xac,0xf7,0x7b,0xe6, + 0x23,0x39,0x0b,0x5f,0xce,0x98,0xda,0x9c,0xf5,0x67,0x5a,0x4f,0x56,0xcf,0xdc,0x68, + 0x47,0x92,0x9a,0x82,0xe8,0x68,0x34,0x84,0x0c,0xf7,0x3c,0x9a,0xcf,0x9a,0x7c,0x1d, + 0xb5,0x04,0xd7,0x65,0x7b,0xd5,0x0f,0x3f,0x7b,0xff,0x00,0x3f,0x4a,0xf9,0xba,0xf3, + 0xe6,0x6c,0xef,0xa6,0xb4,0x2f,0xee,0xc8,0x35,0x2d,0x9b,0x95,0x73,0xf8,0x7b,0x56, + 0x5c,0xd3,0xed,0xf9,0x72,0x39,0xa7,0xdb,0xdc,0x81,0x96,0xcd,0x78,0xf5,0xde,0xb6, + 0x3b,0x28,0xef,0x73,0xae,0x13,0x09,0x14,0x00,0x7a,0x53,0xd2,0xeb,0xcb,0x20,0x74, + 0xae,0x6e,0x1b,0xe0,0x11,0x8d,0x02,0xf0,0x3b,0x63,0x3c,0x7a,0xd7,0x33,0x4b,0x76, + 0x76,0xf3,0x3b,0x68,0x7f,0xff,0xd2,0x4f,0x1f,0x7c,0x51,0xd2,0x34,0xcd,0x6a,0x1d, + 0x27,0xc6,0xda,0x42,0xdf,0xd9,0xde,0xda,0x43,0x75,0x1d,0xd4,0x64,0x79,0xdb,0x65, + 0x04,0x30,0x39,0xc1,0xe1,0x81,0xe8,0x7f,0x0a,0xf2,0x4b,0xff,0x00,0x08,0xfc,0x18, + 0xf1,0x33,0xb5,0xe6,0x85,0xe2,0x51,0xa5,0x4b,0x2e,0x4f,0x93,0x7e,0xa4,0x05,0xf6, + 0xdc,0x02,0x9f,0xc7,0x06,0xb1,0x7e,0x2f,0x5c,0x26,0xb7,0xe1,0xed,0x0f,0x5a,0x4c, + 0x13,0x6b,0xbe,0xce,0x43,0xdc,0x6e,0x01,0xd0,0x7e,0x8d,0x5f,0x3f,0x45,0x7a,0x63, + 0xe3,0x71,0x1c,0xf2,0x3d,0x45,0x7e,0x29,0x88,0xc5,0x55,0xa7,0x37,0x07,0x15,0x25, + 0xe7,0xfe,0x6a,0xcc,0xf1,0xa3,0x4b,0x99,0x73,0xa7,0xb9,0xed,0xf7,0xbf,0x08,0xf5, + 0x78,0x95,0xa7,0xd0,0xaf,0x2c,0xb5,0x98,0x31,0x90,0xd6,0x73,0xa4,0xa7,0x1e,0xbb, + 0x32,0x1f,0xf4,0xaf,0x28,0xd4,0xb4,0xbb,0xcd,0x3e,0x63,0x1d,0xd4,0x4d,0x1b,0xa9, + 0xe4,0x30,0x20,0x83,0xee,0x0f,0x35,0x56,0x2d,0x45,0xe1,0x22,0x48,0x1f,0x63,0x29, + 0xc8,0x20,0x90,0x46,0x3d,0xc5,0x77,0x9a,0x67,0x8e,0xa5,0x9d,0x16,0xd7,0xc4,0x11, + 0xa6,0xab,0x6a,0xd8,0x18,0x9b,0xfd,0x6a,0x8f,0x54,0x94,0x7c,0xc3,0xf1,0x24,0x7b, + 0x57,0x14,0xb1,0xb1,0xeb,0x0b,0x2f,0xbf,0xfa,0xfc,0x7d,0x06,0xa9,0xb5,0xb9,0xf4, + 0x97,0xec,0xff,0x00,0xac,0x35,0xd7,0x84,0xcd,0x93,0x9e,0x6d,0x27,0x78,0xf1,0xd3, + 0x00,0x9d,0xc3,0xf9,0xd7,0xd3,0x89,0x61,0x6d,0x7d,0x6f,0xc3,0x14,0x90,0x0e,0x08, + 0xe9,0xf8,0xd7,0xc9,0xbf,0x0c,0x3f,0xb0,0xf4,0xf9,0xe7,0x9f,0x42,0xba,0xdf,0x6d, + 0x76,0xca,0xde,0x4c,0x9f,0x2c,0xd1,0x48,0x07,0x21,0x80,0xe0,0x82,0x3a,0x30,0xe3, + 0xe9,0x5f,0x51,0xe9,0x77,0x86,0x4d,0x91,0x23,0x63,0x79,0x51,0xf9,0xd7,0xe0,0x3c, + 0x6f,0x84,0xe4,0xcc,0xaa,0xf2,0xea,0xa5,0xaa,0xf9,0x9f,0xae,0xf0,0xce,0x25,0xcb, + 0x03,0x4d,0xa7,0xaa,0xd0,0x93,0x4c,0xf0,0xa6,0xb5,0xab,0xde,0x4b,0x69,0x63,0x00, + 0x63,0x12,0xef,0x91,0x99,0x82,0x22,0xa9,0xe8,0x4b,0x1e,0x39,0xed,0xde,0xbd,0x52, + 0xdd,0x60,0xd1,0xf4,0xd8,0xb4,0xcb,0x6c,0x0d,0x8b,0x99,0x18,0x75,0x79,0x0f,0xde, + 0x63,0xfc,0x87,0xb5,0x24,0x77,0xa9,0xa6,0x44,0xb6,0x56,0x87,0xe4,0xc6,0x19,0xf1, + 0x82,0xe4,0xf3,0x93,0x8f,0xd3,0xd0,0x56,0x5c,0xd2,0xb3,0x36,0xe1,0xcf,0xad,0x7c, + 0xed,0x1c,0x2c,0x28,0xfc,0x3f,0x13,0xdf,0xfe,0x01,0xef,0xd6,0xc5,0x4e,0xae,0x8f, + 0x61,0xd2,0x4a,0xdf,0x78,0xf2,0x4d,0x40,0x72,0x9c,0x67,0x21,0xbb,0x54,0xbe,0x59, + 0x65,0xde,0xbd,0x3d,0x2a,0x29,0x13,0xe5,0xc8,0x1d,0xab,0x46,0xb5,0x39,0x9d,0x42, + 0x09,0x1f,0x00,0x11,0x80,0x56,0xa1,0x92,0x40,0xc0,0x7a,0xf4,0xc9,0xf7,0xa6,0xc8, + 0x70,0xd9,0x27,0xeb,0x55,0x25,0x24,0x30,0x61,0xd2,0xae,0x3a,0xe8,0x09,0xdf,0x63, + 0x41,0x46,0xd1,0x9e,0xa2,0xb3,0xee,0x01,0x56,0x5f,0x73,0x56,0xd2,0x40,0x54,0x1e, + 0x9c,0xd6,0x7d,0xe4,0x99,0x5f,0xa3,0x50,0x96,0xba,0xa3,0x6a,0x7a,0x95,0x0c,0xb8, + 0x7c,0x74,0x39,0xae,0x83,0x4d,0xbe,0x75,0x28,0x49,0xea,0x47,0x35,0xca,0x4a,0xc0, + 0x1c,0xfb,0xe6,0xa6,0xb5,0xb8,0x01,0x87,0x38,0x03,0x9a,0x1c,0x5a,0x77,0x46,0xee, + 0x37,0x47,0xa5,0x5e,0x5c,0x80,0x9f,0x29,0x39,0x23,0x24,0xd6,0x04,0xd2,0xfc,0xdf, + 0x31,0x07,0x3f,0x85,0x39,0x27,0x13,0xaa,0x9e,0xa1,0x40,0xaa,0x33,0x15,0x27,0x27, + 0x9c,0x9c,0xe0,0x57,0x26,0x32,0x0d,0xbe,0x64,0x3a,0x6e,0xfa,0x16,0x12,0x7d,0xad, + 0xf4,0xff,0x00,0x22,0xbb,0x0d,0x07,0xc4,0x0d,0x65,0x3a,0xa3,0x9c,0xa1,0x22,0xbc, + 0xe5,0xe5,0x20,0xfc,0xa7,0x83,0x4f,0x4b,0xa2,0x83,0x1d,0x2b,0x8a,0x0d,0xc5,0xde, + 0x3b,0x97,0x28,0x5d,0x34,0x7d,0x51,0xa8,0x5b,0xe9,0xfe,0x30,0xd1,0xd6,0xca,0x47, + 0x02,0x41,0xf3,0xc3,0x2f,0x52,0x8f,0x8e,0xfe,0xc7,0xb8,0xaf,0x00,0xbe,0xb6,0xbb, + 0xd2,0x6f,0x5e,0xc2,0xf1,0x76,0x49,0x1b,0x60,0xfa,0x11,0xea,0x0f,0x70,0x7a,0x83, + 0x5a,0x1e,0x19,0xf1,0x7b,0x69,0x52,0x85,0x95,0x8b,0x46,0x72,0x39,0xed,0x5d,0x27, + 0x8b,0x65,0xb6,0xd7,0xec,0xd2,0xee,0x02,0xad,0x34,0x40,0xb2,0x30,0xea,0xc9,0xdd, + 0x7f,0x0e,0xd5,0x39,0x9e,0x1e,0x38,0x9a,0x7e,0xd5,0x7c,0x6b,0xf1,0x35,0xcb,0xab, + 0x3a,0x33,0xf6,0x72,0xf8,0x59,0x8d,0xa4,0x5f,0x88,0xe6,0x43,0x9c,0x00,0x6b,0xd4, + 0xe5,0xd9,0x7b,0x6a,0xb3,0x2b,0x12,0xa4,0x75,0x3c,0x0a,0xf9,0xf2,0xce,0xe9,0x90, + 0xef,0x3c,0x2a,0x9e,0x49,0xe8,0x0d,0x77,0x7a,0x37,0x8f,0xe2,0xd3,0x65,0x31,0x4b, + 0xfb,0xdb,0x42,0xa7,0x7a,0x9e,0x0a,0xb7,0xf7,0x97,0x3d,0x41,0xee,0x3f,0x1a,0xe3, + 0xc8,0x6b,0xca,0x94,0xe5,0x4e,0x51,0xf7,0x5f,0x5e,0xcc,0xeb,0xce,0xa9,0x42,0x70, + 0x52,0x52,0x5c,0xcb,0xa7,0x74,0x73,0x1f,0x11,0xad,0xda,0x5d,0x1e,0xee,0xda,0x46, + 0x0c,0xb2,0x46,0xeb,0x8f,0xa8,0xaf,0xca,0x19,0x9a,0x48,0xee,0x26,0x89,0xf8,0xf2, + 0x9d,0x97,0x9f,0x55,0x38,0x35,0xfa,0x9f,0xe3,0x3f,0x10,0x58,0x6a,0xf0,0xc9,0x2d, + 0xbf,0x00,0x83,0x80,0x46,0x3b,0x7b,0x76,0xaf,0xcc,0xcf,0x17,0x58,0x35,0xa7,0x88, + 0xb5,0x08,0x93,0xe5,0x06,0x76,0x61,0xf4,0x7f,0x9b,0xfa,0xd7,0xea,0xbc,0x39,0x55, + 0x7b,0xea,0xe7,0xe5,0x1c,0x59,0x49,0xba,0x74,0xe5,0x63,0x8d,0x59,0x4b,0xb3,0xaf, + 0x50,0xe6,0xab,0x48,0xc3,0xcc,0x75,0x6e,0x80,0x54,0x72,0x07,0x89,0xd9,0x73,0xc8, + 0x38,0xcd,0x35,0xe4,0x18,0x6c,0x9c,0x13,0x5f,0x77,0x4a,0x2a,0xe8,0xf8,0x3d,0x76, + 0x33,0xe5,0x50,0x1c,0x30,0x1f,0x85,0x55,0x93,0x73,0x1f,0x9f,0xe8,0x3d,0x2a,0x63, + 0x2a,0xb3,0x85,0xcf,0x35,0x1c,0xee,0xa5,0x82,0xa8,0xc9,0xf6,0xaf,0x46,0x92,0xb2, + 0x0b,0x23,0x26,0x58,0x48,0x24,0x8e,0x07,0x4a,0xa5,0x3c,0x44,0xb7,0x96,0x46,0x7d, + 0xcd,0x68,0xdc,0x3e,0xd6,0x23,0xf3,0xac,0xf9,0x1c,0xb1,0xf6,0xf7,0xaf,0x56,0x8a, + 0x76,0x05,0x72,0xab,0x28,0xc1,0xda,0xb9,0xaa,0x41,0x50,0x63,0x23,0x06,0xb4,0xb7, + 0xa8,0x53,0x8f,0xad,0x64,0xc9,0x29,0xf3,0x06,0x2b,0xd0,0xa3,0xb2,0x4c,0x45,0x94, + 0x6c,0x3b,0x28,0x18,0xcf,0xeb,0x4f,0x43,0xb9,0x38,0xfe,0x1a,0x81,0x3e,0xf1,0x63, + 0xce,0x07,0xf3,0xa7,0xc2,0x41,0x46,0x00,0xe3,0xad,0x75,0xc6,0x5a,0xd8,0x0b,0x00, + 0x60,0xa9,0x1d,0x6b,0x52,0xda,0x4d,0xad,0x59,0x28,0x46,0xd0,0x8d,0xc7,0xbd,0x5f, + 0x83,0x1b,0x4e,0x0f,0x7f,0xce,0xb4,0x8a,0xb8,0x1d,0x0e,0xc2,0xf1,0xef,0x1d,0x2b, + 0xa5,0xf0,0xc5,0xd3,0x5a,0xdf,0xc6,0xe0,0xe3,0x04,0x1f,0x7a,0xe6,0xad,0xd8,0x98, + 0x82,0xf6,0x1c,0x56,0xb6,0x9c,0xc2,0x39,0x94,0x9c,0x60,0x1a,0xda,0x4b,0x41,0x4b, + 0x54,0xcf,0xb4,0xa0,0xd4,0x3c,0xfd,0x3e,0x07,0x43,0xd5,0x06,0x7e,0xb5,0xa5,0xe0, + 0xdf,0x17,0xbf,0x85,0x3c,0x53,0x67,0xaa,0xf5,0x89,0x1f,0xcb,0xb8,0x5f,0xef,0x42, + 0xff,0x00,0x2c,0x83,0xf2,0xe4,0x7b,0x81,0x5e,0x57,0xe1,0xdd,0x4b,0xcd,0xd3,0x23, + 0x4d,0xd9,0xda,0x31,0xcf,0xb5,0x59,0x9e,0xe3,0x9d,0xd9,0xfa,0x54,0xba,0xcd,0x54, + 0x53,0x8e,0xe7,0x92,0xd5,0x9d,0x8f,0xd0,0xbf,0x11,0x58,0x5a,0x5c,0xdb,0x9b,0x98, + 0xcf,0x9a,0x93,0x20,0x64,0x65,0xe8,0xca,0x46,0x55,0xbf,0x10,0x6b,0xc2,0xf5,0x6b, + 0x45,0x88,0x90,0x01,0x40,0x4f,0x2d,0xdb,0xaf,0x4a,0xea,0x7e,0x10,0x78,0xb3,0xfe, + 0x12,0x3f,0x05,0xbe,0x91,0x70,0xe1,0xef,0x34,0x62,0x22,0xc1,0xe5,0x8d,0xb3,0xf3, + 0x19,0xf7,0xda,0x72,0x9f,0x95,0x4d,0xad,0xd9,0xa9,0x76,0x28,0x3b,0xe3,0x69,0xe4, + 0x64,0xfa,0x1a,0xfa,0x09,0x49,0x4e,0x31,0x9c,0x4e,0x5a,0x8b,0x53,0xcb,0x6e,0xe1, + 0xd8,0x32,0x7e,0x60,0xa7,0x20,0x91,0x9e,0x95,0xcb,0xc7,0xb1,0xae,0xd8,0x8c,0xa9, + 0x66,0x3c,0x30,0xe0,0xe0,0x75,0xaf,0x40,0xba,0x8f,0x64,0x3e,0x5b,0xae,0x70,0xc7, + 0x07,0x3c,0xf3,0xd3,0x35,0xce,0x1b,0x78,0x52,0xe1,0x0c,0x9c,0xff,0x00,0x77,0x1c, + 0xe0,0xd4,0xc9,0x6c,0x41,0x35,0x94,0x25,0xb0,0xc3,0x2a,0x77,0x1e,0xc3,0x1c,0x56, + 0x4f,0xc4,0xff,0x00,0x14,0x1f,0x04,0x7c,0x31,0xd6,0xb5,0x98,0xd8,0x2d,0xd3,0xc5, + 0xf6,0x5b,0x42,0x7b,0xcf,0x73,0xfb,0xb4,0x3f,0x86,0x77,0x7d,0x05,0x76,0xb6,0x91, + 0xc5,0x14,0x1e,0x62,0x2e,0x4f,0x38,0x2d,0xc7,0x3f,0x43,0x5f,0x1e,0xfe,0xd5,0x7e, + 0x28,0x92,0x69,0xb4,0x5f,0x08,0xc4,0xdf,0xbb,0x88,0x3d,0xfd,0xc2,0x83,0xc1,0x91, + 0xbf,0x77,0x16,0x40,0xf4,0x1b,0x8d,0x3a,0xf5,0x55,0x2a,0x6e,0x57,0xd4,0xe9,0xc3, + 0x53,0x73,0x9a,0x5d,0x0f,0x89,0xdd,0x09,0x04,0x67,0x21,0x71,0xd7,0xaf,0x1c,0x7e, + 0x74,0xdb,0x7e,0x24,0x08,0x3a,0x74,0xab,0xaf,0x10,0x52,0x4e,0x3a,0x93,0xfe,0x73, + 0x50,0x22,0x61,0xc3,0x01,0xc6,0x6b,0xc1,0x8d,0x9a,0x77,0x3d,0xcb,0x5b,0x42,0xc4, + 0xaa,0xab,0x26,0x1b,0xa1,0x1c,0x1a,0x91,0x06,0x0f,0x18,0xc8,0xe7,0x1f,0xca,0x9f, + 0x2c,0x61,0x95,0x5b,0xdf,0x1f,0x8d,0x42,0x5b,0x03,0xdc,0x71,0x5a,0x45,0x59,0x5c, + 0x76,0x2c,0x9e,0x43,0x02,0x33,0x91,0xff,0x00,0xd7,0xab,0x96,0x72,0x2e,0x59,0x58, + 0x67,0x81,0xfe,0x7f,0x0a,0xa1,0x17,0x07,0x69,0x38,0xff,0x00,0xeb,0xd5,0xab,0x62, + 0x9e,0x67,0x23,0x8c,0x71,0x8e,0xf5,0xc9,0x55,0x3e,0x85,0xf2,0x5d,0x58,0xd6,0x84, + 0x27,0x9f,0xe6,0xf4,0x39,0xe8,0x7b,0xd7,0xd0,0x9e,0x0c,0x8d,0x3e,0xc1,0x71,0x1b, + 0x10,0x3c,0xcb,0x69,0xb1,0xee,0x0a,0x1a,0xf9,0xea,0x1d,0xce,0xdb,0x30,0x7d,0x47, + 0xe1,0xd2,0xbd,0xaf,0xc1,0xf3,0xc9,0x25,0xa3,0xee,0xe4,0x2c,0x6e,0x31,0xdf,0x90, + 0x68,0x8c,0xed,0x34,0xec,0x42,0x56,0x6a,0xe7,0x8f,0xec,0x48,0xa4,0x2f,0xc1,0xe6, + 0xa2,0x92,0xe3,0x71,0x20,0xd5,0x39,0xee,0x1b,0x79,0x5c,0xf0,0x4d,0x53,0xf3,0x73, + 0xce,0x73,0x5e,0xc4,0x5b,0xd1,0xb3,0x09,0xcd,0xbd,0x8d,0x0f,0x30,0xb7,0x00,0xd2, + 0xaa,0x92,0x70,0x3f,0x2a,0xab,0x1b,0x1c,0xd5,0xd8,0xb2,0x5b,0xf4,0x35,0xd7,0x4a, + 0x3a,0xea,0x64,0xef,0xbb,0x26,0x09,0xc6,0xe1,0x9f,0xc2,0xad,0xa1,0xda,0x31,0xda, + 0x9a,0xaa,0x36,0xf0,0x7b,0xf5,0xa8,0x9e,0x40,0xbc,0x66,0xb6,0x9a,0x49,0x16,0x9d, + 0xcd,0x14,0x9b,0x27,0x19,0xeb,0xf9,0xd6,0x84,0x79,0xc8,0x35,0x83,0x0b,0x73,0xd7, + 0xa5,0x6e,0x40,0xdd,0xcd,0x73,0xc5,0x75,0x0b,0x24,0x3d,0xf7,0x76,0xcd,0x2c,0x00, + 0x31,0x19,0xa7,0x48,0xca,0x40,0x07,0xa9,0xed,0x4b,0x00,0x19,0x04,0x7d,0x3d,0xeb, + 0x0a,0xa9,0x5f,0x53,0x29,0x48,0xda,0xb5,0x40,0x46,0x31,0x8c,0x73,0x5d,0x0c,0x10, + 0xe7,0x07,0x00,0x56,0x1d,0x9b,0x0c,0xe0,0xf5,0xae,0x9e,0xd5,0xd3,0x1d,0x3a,0xff, + 0x00,0x9e,0x6a,0x29,0xab,0x99,0x54,0xb5,0xb5,0x0f,0x21,0xbd,0x3a,0x53,0xd2,0x12, + 0x3a,0xe4,0x7a,0x71,0x5a,0xaa,0x14,0x8c,0x54,0xc2,0x20,0x7a,0x73,0x5b,0xca,0x96, + 0x9a,0x18,0xa6,0x26,0x9b,0x6e,0x64,0x99,0x50,0xff,0x00,0x7a,0xbe,0xb6,0xf8,0x5f, + 0xa6,0x6c,0xd9,0x31,0x03,0x0a,0x2b,0xe6,0x9d,0x06,0xdb,0x75,0xda,0x82,0x3b,0xd7, + 0xd7,0x7e,0x0c,0x55,0xb4,0xd3,0x83,0xf7,0x20,0x57,0xe7,0x7c,0x73,0x89,0xf6,0x38, + 0x6f,0x67,0xdc,0xfb,0x9e,0x0d,0xc3,0x73,0x55,0x75,0x5f,0x43,0xd2,0x6f,0x2f,0x56, + 0x18,0xca,0xaf,0x53,0xc5,0x61,0x47,0x75,0x86,0x27,0x3c,0xd6,0x7d,0xed,0xee,0xef, + 0x9b,0x3c,0x0a,0xca,0x6b,0xc2,0x0f,0x26,0xbf,0x0f,0xc6,0x4d,0xf2,0xd8,0xfd,0x52, + 0x85,0x3b,0xbb,0x9d,0x0c,0xd7,0x2c,0xed,0x80,0x78,0xa5,0x49,0x95,0x07,0x7f,0xff, + 0x00,0x5d,0x60,0xc7,0x38,0x73,0xcd,0x58,0xf3,0x49,0xc8,0xcd,0x78,0xd5,0x15,0x93, + 0x3d,0x18,0xd3,0x2d,0x5c,0x4e,0x4f,0x3f,0xfe,0xaa,0x89,0x2f,0xf6,0xa1,0x07,0xb5, + 0x56,0x62,0x79,0xcf,0xf9,0xc5,0x63,0xb4,0x87,0x26,0xbc,0xd7,0x0b,0xbb,0x9d,0x0a, + 0x27,0x4b,0x1d,0xd9,0x65,0xf9,0x4f,0x15,0x7e,0xde,0x52,0x06,0x7d,0xab,0x02,0xd4, + 0x33,0x21,0xc7,0x6f,0xeb,0x57,0xc4,0x82,0x28,0xce,0xee,0x0d,0x71,0xe3,0x3d,0xd8, + 0x3b,0x1d,0x78,0x58,0x73,0x4d,0x23,0xff,0xd3,0xf9,0x5d,0x6f,0xa5,0xd4,0xfc,0x01, + 0xa9,0xdb,0x11,0xbc,0xc0,0x60,0xb9,0xdc,0x7b,0x04,0x6d,0xac,0x7f,0x23,0x5e,0x28, + 0xf2,0x30,0x63,0x9e,0x33,0x5e,0x97,0xe1,0x09,0xd6,0xe7,0x4a,0xd5,0x74,0xe7,0x6c, + 0xf9,0xf6,0x32,0xa0,0x1c,0x9e,0x54,0x6f,0x1d,0x3b,0xfc,0xb5,0xe5,0x52,0x9e,0x4e, + 0x7f,0xcf,0xe1,0x5f,0x8e,0xe3,0x61,0xfb,0xc3,0xcf,0xc1,0xab,0xd3,0x71,0xec,0xcb, + 0x4b,0x29,0x19,0xc1,0xef,0x57,0xe1,0xbb,0x58,0xf0,0x13,0xbf,0x5e,0x2b,0x9e,0xf3, + 0x70,0x70,0x33,0x4e,0x59,0x8f,0xaf,0x7f,0xca,0xb8,0xe5,0x43,0x9b,0x73,0xa5,0xc1, + 0x5b,0x43,0xdb,0xfe,0x1c,0xeb,0xcf,0x69,0xe2,0x4b,0x55,0xdf,0x85,0x95,0x8a,0x11, + 0xdb,0x91,0x5f,0x79,0x78,0x76,0xf8,0xc9,0x34,0x2e,0xc7,0x8d,0xcb,0x5f,0x96,0xba, + 0x66,0xaa,0xf6,0x77,0x90,0xdc,0xa3,0x61,0xa2,0x75,0x7e,0x31,0xd8,0xd7,0xe8,0x37, + 0x83,0xb5,0xb8,0xee,0xed,0x6d,0xae,0x22,0x6c,0xab,0x84,0x60,0x6b,0xf2,0x3f,0x10, + 0x32,0xe7,0x0a,0x94,0xeb,0xa5,0xbe,0x9f,0x71,0xf6,0x9c,0x21,0x5b,0xdc,0xa9,0x41, + 0xfa,0x9f,0x58,0x28,0x67,0x1f,0xd0,0xd5,0xf8,0xa1,0x18,0xf9,0xce,0x73,0x54,0xec, + 0x1b,0xce,0x89,0x24,0xfe,0xf0,0x1f,0xad,0x5f,0xf2,0xd9,0x1b,0x04,0xfb,0x8f,0xa5, + 0x7e,0x7b,0x08,0xe8,0x7d,0x5c,0xe5,0xd0,0x98,0xc7,0xb1,0x78,0xe9,0x50,0x92,0xa3, + 0x04,0x01,0x8a,0x0c,0xcc,0xa7,0x9e,0x95,0x52,0x79,0x14,0x72,0x08,0xa1,0xad,0x48, + 0x2b,0xdc,0xaa,0x02,0x4f,0x63,0xcd,0x62,0x4e,0xdb,0x5b,0x1f,0xa5,0x68,0xcb,0x71, + 0x80,0x47,0x50,0x7f,0xcf,0x7a,0xc3,0xbb,0x94,0x06,0xe0,0xe7,0x22,0x92,0x8a,0xe8, + 0x6d,0x04,0xf6,0x2d,0x09,0x0a,0xa1,0xc9,0x04,0xf5,0xac,0x8b,0x99,0x9f,0x73,0xf3, + 0xf2,0x90,0x38,0xa6,0x3d,0xd0,0xdd,0x8c,0xfe,0x1d,0x6b,0x26,0xe6,0xe0,0x92,0x70, + 0x49,0xe2,0xae,0x14,0xfd,0xe3,0xb2,0x9c,0x2c,0x5f,0x79,0x4b,0x22,0xe6,0xa2,0x59, + 0xb0,0xde,0xfe,0xd5,0x98,0x27,0xcc,0x4b,0x93,0xf5,0xa3,0xed,0x07,0x21,0x87,0x3c, + 0xd6,0x92,0x83,0xdc,0xd4,0xee,0x74,0xdb,0x8f,0x31,0x18,0x13,0x8e,0x9f,0x95,0x59, + 0x9e,0x46,0x39,0xe9,0xf5,0x15,0xca,0xd8,0x5c,0x6c,0x94,0x2e,0x78,0x35,0xb9,0x2c, + 0xa1,0x81,0x00,0xf2,0x6b,0x0a,0x94,0xf9,0xa0,0x4a,0x49,0x32,0xbc,0xb3,0x61,0xb2, + 0x0e,0x71,0x48,0x92,0xef,0x19,0x7e,0x3e,0xb5,0x48,0x9c,0x70,0x72,0x3d,0x2a,0x37, + 0x76,0xe8,0xa7,0x1e,0xbf,0x4a,0xf2,0x65,0x0e,0x86,0xd2,0x5a,0x23,0x5f,0x25,0x70, + 0xc8,0x72,0x0d,0x6d,0x69,0xda,0xbc,0x96,0xeb,0xe5,0x31,0x25,0x4f,0x4f,0x63,0xed, + 0x5c,0xb2,0x4e,0x40,0xda,0x0f,0xa5,0x48,0x24,0xc3,0x7e,0xb4,0x92,0xb6,0x84,0x4a, + 0x36,0x36,0xf5,0x2b,0xa0,0xcb,0xb1,0x00,0x50,0x49,0xc8,0x1e,0xa7,0x9c,0xd7,0x3e, + 0xf2,0xed,0xc8,0xcd,0x32,0xe2,0xe3,0x77,0x5e,0x9d,0x2b,0x3e,0x49,0x7b,0x7e,0x5d, + 0xab,0x3c,0x3d,0x2e,0x59,0x38,0x95,0x53,0x54,0xa4,0x54,0xbf,0xb9,0x68,0xe3,0x6f, + 0xf6,0xab,0xe3,0xef,0x89,0xc0,0x5b,0xeb,0xc6,0x7e,0x9e,0x6c,0x6a,0xdf,0x88,0xe2, + 0xbe,0xad,0xd4,0x26,0xfd,0xd9,0xc9,0xc6,0x05,0x7c,0xad,0xf1,0x79,0x57,0xed,0xb6, + 0x92,0x74,0xca,0x32,0x93,0xef,0x90,0x6b,0xee,0xb8,0x65,0x5a,0xb2,0x8b,0x3e,0x33, + 0x8b,0x29,0x39,0x61,0x1c,0x92,0xda,0xc7,0x8e,0xcd,0x30,0x73,0x9e,0xfb,0xb3,0x54, + 0xcc,0xa8,0x51,0xd7,0x38,0x27,0x34,0x8e,0x87,0x6e,0x7a,0x73,0xf9,0xd6,0x6a,0xf0, + 0xf9,0xe7,0x07,0x39,0xaf,0xd3,0xa9,0x41,0x68,0x7e,0x5b,0x25,0x6d,0xc5,0xc3,0x6e, + 0x07,0x39,0xc0,0xe7,0xa0,0xa6,0xb1,0xcb,0x1d,0xbf,0x98,0xa7,0x3c,0xa3,0xa8,0xa8, + 0x03,0xfc,0xc4,0x0e,0xe2,0xbd,0x08,0xbe,0xac,0x91,0x92,0x61,0xb2,0x5b,0x9e,0x3f, + 0x2a,0xcf,0xb8,0x62,0x4f,0xd3,0xad,0x5d,0x2d,0x96,0x29,0xd7,0x8a,0xa5,0x2b,0x0c, + 0xf3,0xd7,0xd2,0xbd,0x0a,0x6a,0xda,0x8e,0xec,0xa8,0x39,0x18,0x1f,0x4a,0xa1,0xe5, + 0x82,0xf9,0x39,0xe0,0xd5,0xd6,0xda,0x0e,0x47,0x23,0x1d,0x2a,0xb2,0xb7,0xef,0x0a, + 0x9e,0xbf,0xce,0xbb,0xa9,0xb7,0x61,0x12,0x48,0x14,0x1c,0x0e,0xf5,0x0c,0x6c,0x39, + 0x1c,0xf1,0xf8,0x54,0x92,0x86,0x1d,0x07,0x18,0xa8,0x21,0xff,0x00,0x59,0x8c,0x0e, + 0x45,0x76,0x25,0xcd,0xb3,0x13,0x34,0x60,0x50,0xc7,0x07,0x19,0xf4,0xfa,0xd5,0xc8, + 0x80,0x1e,0xbf,0xfe,0xaa,0xcf,0xb6,0x3b,0x64,0xc6,0x39,0xab,0xb1,0x83,0xd3,0x38, + 0xef,0x4a,0x17,0xde,0xe1,0x7b,0x1b,0xb6,0x8f,0xc6,0xd6,0x3e,0xf5,0xaf,0x6d,0x8d, + 0xf9,0xc7,0x7c,0xe2,0xb0,0x2c,0xc9,0x3c,0x1a,0xda,0xb6,0x38,0x6c,0xf5,0xae,0xad, + 0x1a,0x4a,0xe0,0xd9,0xeb,0xbe,0x18,0xbf,0x68,0xe2,0x30,0x93,0xd6,0xba,0xe3,0x20, + 0x7c,0x75,0xaf,0x2a,0xd1,0xa7,0x68,0xae,0x14,0x12,0x7a,0xff,0x00,0x3a,0xf4,0x25, + 0x9d,0x87,0x53,0xc1,0xac,0x39,0x1a,0x9d,0xfa,0x1e,0x75,0x65,0x69,0x36,0x8f,0x49, + 0xf8,0x67,0xe2,0xdf,0xf8,0x44,0x7c,0x63,0x69,0x75,0x3b,0x1f,0xb1,0xdc,0x13,0x6b, + 0x74,0xb9,0xeb,0x14,0xbc,0x13,0xf5,0x53,0x86,0x1f,0x4a,0xfb,0x33,0x59,0xb1,0x53, + 0x28,0x99,0x09,0x6c,0xa8,0xc1,0xe0,0x86,0x07,0xa1,0x1f,0x51,0xcd,0x7e,0x70,0x4d, + 0x70,0xdb,0xc1,0x07,0xe9,0xeb,0x5f,0x7a,0xfc,0x2d,0xd7,0x97,0xc4,0xbe,0x0f,0xb7, + 0x49,0x5f,0x7d,0xcd,0x92,0x08,0x9f,0x77,0x2c,0x53,0xf8,0x0f,0xe1,0xd2,0xbd,0x3c, + 0x16,0x21,0xc2,0xa7,0xb1,0x96,0xcf,0x6f,0x53,0x1a,0xd4,0xef,0x05,0x23,0x23,0x51, + 0xb5,0x0a,0x8d,0xb0,0x61,0xf3,0xc1,0x3c,0xd7,0x3f,0x34,0x08,0xd2,0x26,0x46,0x79, + 0xcf,0x4c,0x9e,0x7a,0xe2,0xbd,0x2f,0x50,0x81,0x13,0x7e,0xf4,0x5f,0x5c,0xe3,0xfc, + 0x6b,0x94,0x91,0x26,0x13,0xc6,0x22,0x42,0x73,0xd4,0x81,0xd6,0xbd,0x39,0x68,0xce, + 0x12,0x91,0x8d,0x56,0xd4,0xcb,0x20,0x65,0x48,0xf2,0x79,0x1d,0x00,0xe4,0x9a,0xfc, + 0xb9,0xf8,0xb5,0xaf,0x4d,0xe2,0x4f,0x1d,0xea,0x9a,0x83,0x1c,0xa2,0xcc,0x61,0x88, + 0x74,0xc2,0x47,0xc0,0x03,0xf1,0xcd,0x7e,0x92,0xf8,0xff,0x00,0x51,0x7d,0x17,0xc3, + 0x37,0x53,0xc8,0xea,0xbb,0xd1,0x91,0x79,0x39,0xc0,0x04,0xb1,0xfc,0x85,0x7e,0x56, + 0x5f,0x3b,0x4f,0x2c,0xd7,0x12,0x1e,0x64,0x91,0x9c,0xe7,0xd5,0x8e,0x7f,0xad,0x78, + 0x79,0x96,0x25,0xca,0xb4,0x69,0xf6,0x3d,0x9c,0xba,0x9e,0x8e,0x6c,0xe7,0xe4,0x04, + 0x10,0xcc,0x3a,0xd5,0x71,0xf7,0x88,0x23,0x91,0xc8,0xab,0xb3,0x70,0x43,0x30,0xce, + 0x2a,0xb9,0x01,0x99,0x48,0x18,0x04,0x66,0xb2,0x8b,0xd2,0xc7,0x7c,0x9d,0xcb,0x88, + 0xbb,0xed,0x3a,0xf2,0x87,0x39,0xfe,0x55,0x9e,0xea,0x77,0x37,0x27,0x1f,0xe3,0x5a, + 0xd6,0xd1,0xe5,0x1f,0x9e,0x31,0xc8,0xaa,0x17,0x71,0x85,0xe4,0x7f,0x9c,0xf1,0x5d, + 0x10,0x4f,0xd9,0x27,0xd8,0x94,0xec,0xf5,0x23,0x4c,0xf5,0x3c,0xf4,0xe6,0xac,0x43, + 0x91,0x20,0xc7,0xaf,0xe8,0x6a,0xa4,0x67,0xe5,0xc8,0xeb,0xdb,0xd2,0xac,0xc4,0xc4, + 0x48,0x3e,0xa0,0x9a,0xe6,0x92,0x6e,0xe6,0xe9,0x9d,0x45,0xa8,0x2d,0xb7,0xfd,0xd2, + 0x09,0x3f,0x5a,0xf5,0xff,0x00,0x01,0xa1,0x9a,0x37,0x03,0xa8,0x18,0x1f,0x95,0x79, + 0x34,0x28,0x52,0x2f,0x30,0x67,0x1e,0x83,0xdf,0xde,0xbd,0x53,0xe1,0xbd,0xc3,0x7d, + 0xac,0xc6,0xbc,0x8c,0xf2,0x2b,0x15,0x27,0x29,0x45,0x32,0x1c,0x52,0x67,0x82,0xdd, + 0xfc,0x97,0x32,0xc6,0xd9,0xca,0x3b,0x2e,0x3d,0x30,0x48,0xa8,0x14,0x82,0x7d,0xaa, + 0xce,0xb8,0xad,0x0e,0xb7,0x7f,0x01,0xfe,0x1b,0xa9,0x87,0xfe,0x3e,0xc6,0xaa,0x22, + 0x9c,0xe7,0xae,0x05,0x7b,0xb4,0xd7,0xba,0x99,0xc0,0xf7,0x34,0x21,0xe9,0xc7,0xf8, + 0x55,0xf4,0x21,0x4e,0x7a,0x7b,0x7f,0x2a,0xa5,0x10,0x23,0x93,0x56,0x89,0xe3,0x35, + 0xd5,0x4f,0x6b,0xa1,0x36,0x89,0xde,0x66,0xc7,0x06,0xaa,0x09,0x32,0x70,0x0d,0x41, + 0x2c,0x98,0xfb,0xbd,0x7d,0xea,0x04,0x7c,0x9c,0xd0,0xde,0xa5,0x3b,0x58,0xe8,0xa0, + 0x1d,0x09,0xe2,0xb4,0x83,0x9c,0x67,0x35,0x83,0x6d,0x36,0x06,0x3b,0x56,0x89,0xb8, + 0x1b,0x7a,0xf6,0xc6,0x2a,0x5b,0xb2,0xb8,0x37,0xd8,0xb4,0xd3,0x91,0x9f,0x9b,0x81, + 0xc7,0x35,0x6a,0xde,0x73,0xf8,0x9e,0x2b,0x01,0xa5,0xc9,0x04,0xf1,0xed,0x53,0xc5, + 0x38,0xc8,0xe6,0xbc,0xfa,0x8e,0xec,0xcd,0xbb,0x9d,0x5d,0xbd,0xc3,0x07,0x07,0x35, + 0xd1,0xda,0x5d,0x93,0x8c,0x57,0x0b,0x04,0xfb,0x88,0xad,0xbb,0x59,0x7b,0xf4,0xc0, + 0xef,0x4a,0x9c,0x59,0x12,0xd1,0x6a,0x77,0x90,0xdd,0x83,0xde,0xb6,0xad,0xe5,0xca, + 0x8f,0xce,0xb8,0x18,0xae,0x48,0x6e,0xb5,0xd0,0xd9,0xdd,0x02,0x00,0xae,0xa5,0x36, + 0x9d,0xd9,0x8b,0xee,0x7a,0xa7,0x86,0x63,0x0d,0x70,0xa7,0xaf,0x35,0xf4,0xbe,0x9d, + 0x73,0xe4,0xd8,0xa4,0x63,0xd2,0xbe,0x70,0xf0,0x83,0x23,0xcc,0x9d,0x85,0x7b,0x9a, + 0x4e,0x36,0x05,0x5e,0x80,0x63,0xd6,0xbf,0x1c,0xf1,0x0b,0x16,0xe7,0x5e,0x14,0xd1, + 0xfa,0xbf,0x06,0xe1,0xf9,0x70,0xee,0x6c,0xdb,0x9a,0xeb,0x72,0x92,0x0f,0x02,0xa9, + 0x7d,0xa8,0x31,0xc1,0x39,0x35,0x93,0x73,0x74,0x15,0x42,0x03,0xcf,0x7a,0xa6,0x97, + 0x00,0x90,0x41,0xaf,0xcb,0x71,0x7a,0x34,0x99,0xf7,0xd8,0x65,0x76,0xda,0x3a,0xf8, + 0xae,0x00,0x20,0x83,0x5a,0x2b,0x39,0x22,0xb9,0x5b,0x79,0x81,0xe7,0xa6,0x6b,0x5a, + 0x29,0x09,0x19,0xcf,0xd2,0xbc,0x5a,0xf2,0x67,0xa5,0x18,0x5f,0x53,0x49,0xe6,0x60, + 0xa7,0x06,0xb1,0x9a,0x70,0xa7,0xaf,0x7a,0xb7,0x2c,0x83,0xcb,0xc9,0xec,0x2b,0x0e, + 0x46,0x39,0x3e,0x95,0xcf,0x04,0xec,0xcb,0xb7,0xbc,0x76,0xda,0x35,0xcc,0x6c,0xe1, + 0x5c,0xf0,0xdc,0x1f,0x4a,0x9f,0x58,0xc4,0x38,0x54,0x39,0xe6,0xb9,0x2b,0x5b,0x93, + 0x11,0x52,0x0f,0x35,0xbd,0x71,0x76,0xb7,0x11,0x8c,0x9c,0x9e,0x95,0xcb,0x8a,0xa7, + 0xcd,0x49,0xa3,0xa2,0x84,0xb9,0x2b,0x26,0x7f,0xff,0xd4,0xf8,0x67,0xc0,0x77,0x3b, + 0x35,0x54,0x8d,0xcf,0x12,0x12,0xa4,0x74,0xc0,0x60,0x57,0xb7,0xd6,0xb8,0x2b,0xaf, + 0xdd,0xcb,0x2c,0x3d,0x4a,0xb1,0x5c,0xfd,0x0e,0x2b,0xa0,0xf0,0xac,0xff,0x00,0x66, + 0xd6,0x2d,0xd9,0xf1,0x8f,0x31,0x72,0x3f,0x1f,0x5a,0xc8,0xf1,0x0a,0x7d,0x9f,0x5b, + 0xbe,0x83,0xa6,0xc9,0xe4,0x18,0xc6,0x3f,0x8b,0x35,0xf9,0x66,0x65,0x49,0x73,0xec, + 0x79,0xd8,0x3d,0x39,0x91,0x83,0x23,0x85,0x6c,0x0e,0xbd,0xe9,0x9e,0x79,0x03,0x82, + 0x7d,0xbf,0xad,0x36,0x60,0x18,0x16,0xf4,0xef,0xd6,0xb3,0x5a,0x56,0x5c,0x01,0xd4, + 0xd7,0x3d,0x38,0x29,0x2d,0x4e,0xcb,0x6b,0x73,0x51,0x6e,0xb0,0xd8,0xcd,0x7d,0x87, + 0xf0,0x67,0xc4,0x66,0xf3,0x40,0x8e,0x16,0x6f,0x9a,0xdd,0xbc,0xbf,0xcb,0xa7,0xe9, + 0x5f,0x11,0x99,0x4f,0x5c,0xf4,0xfd,0x2b,0xda,0xfe,0x0c,0x6b,0x4f,0x6f,0xaa,0x4f, + 0x60,0xcc,0x71,0x28,0x0e,0x07,0xb8,0xeb,0x5f,0x2d,0xc6,0x59,0x5c,0x71,0x19,0x6c, + 0xe4,0x96,0xb1,0xd4,0xf6,0xf8,0x7e,0xbf,0xb2,0xc6,0x47,0xcf,0x43,0xf5,0xdf,0xc3, + 0x77,0xde,0x76,0x9b,0x0b,0x93,0xc1,0x45,0xfc,0xf1,0x5d,0x4a,0x4e,0x4a,0xfc,0xd8, + 0x20,0x57,0x92,0x78,0x3e,0xfc,0x0b,0x08,0x50,0xf2,0x02,0x28,0xfd,0x2b,0xbc,0x5b, + 0xdd,0xbf,0x2e,0x72,0x0e,0x7f,0x0a,0xfe,0x7b,0xb1,0xfa,0x14,0xa0,0x6a,0x4b,0x39, + 0xf4,0x3b,0x6b,0x36,0xe6,0x50,0x47,0xcb,0x51,0xbc,0xdc,0x1c,0x63,0x06,0xb3,0xa4, + 0x98,0x80,0x43,0x76,0xea,0x28,0x50,0xbb,0x05,0x1d,0x75,0x19,0x2d,0xcb,0x28,0x20, + 0x9c,0x81,0x58,0xb7,0x97,0x38,0x1b,0xc5,0x4d,0x71,0x70,0x17,0x70,0x38,0xcd,0x73, + 0xd7,0xd7,0x1c,0x64,0x1e,0xb5,0xb4,0x69,0x6a,0x74,0x53,0x5d,0x86,0x4d,0x76,0x56, + 0x43,0x93,0x8a,0xa9,0x25,0xce,0xe3,0x8f,0xf3,0x8a,0xca,0x9a,0x7f,0x98,0xf3,0xf5, + 0xaa,0xed,0x33,0x31,0xeb,0x5d,0x2a,0x91,0xdf,0x17,0x64,0x6c,0xc5,0x3e,0x57,0x1e, + 0x86,0xac,0xac,0x9d,0xc8,0xfa,0x73,0x58,0x10,0xc9,0xcb,0x64,0xe3,0xd2,0xaf,0x47, + 0x36,0x70,0xb9,0xe6,0xad,0xd3,0xd2,0xc6,0x6f,0x46,0x6e,0x45,0x70,0x44,0x80,0xf7, + 0xae,0xaa,0x06,0x0d,0x0a,0x9e,0xa4,0xd7,0x9f,0x07,0xc1,0x1c,0xfb,0xd7,0x53,0xa6, + 0xdc,0x6e,0x8f,0x63,0x1c,0xf6,0xae,0x59,0xd3,0xd7,0x54,0x29,0x3e,0xc5,0xdb,0x87, + 0x64,0x3e,0xdd,0xbe,0x95,0x47,0xcc,0xc1,0xc9,0xa9,0x2e,0x9b,0xb0,0xe7,0x22,0xb2, + 0x4c,0x9b,0x79,0xe4,0x57,0x99,0x89,0xa1,0xca,0xee,0x6f,0x4d,0xdd,0x68,0x69,0x79, + 0xc7,0x00,0x9a,0x78,0xb8,0x05,0x40,0xc9,0xcf,0xf8,0x56,0x70,0x97,0x28,0x39,0xc6, + 0x29,0xa6,0x50,0xa3,0xaf,0x1d,0x6b,0x91,0xc3,0x66,0x53,0xb6,0xc5,0x99,0xe6,0x0c, + 0xb9,0x3c,0xd5,0x36,0xb8,0xfd,0xde,0xec,0xe4,0xf7,0xaa,0x13,0x5c,0x8e,0x80,0xe3, + 0x35,0x4a,0x69,0xb0,0x30,0x2b,0x58,0xd3,0xf7,0x93,0x21,0xb4,0xe2,0xd0,0xcb,0xd9, + 0xf7,0x29,0x1d,0x73,0x5f,0x33,0x7c,0x63,0x3c,0xda,0x30,0xe7,0xe7,0x23,0x3f,0x85, + 0x7d,0x0b,0x3d,0xc6,0x33,0xec,0x2b,0xe6,0x3f,0x8c,0x77,0x61,0xee,0x6d,0x62,0xce, + 0x79,0x66,0x3f,0x87,0x15,0xf6,0x7c,0x37,0x4d,0xbc,0x5c,0x12,0xfe,0xb4,0x3e,0x57, + 0x89,0xda,0x58,0x29,0x9e,0x53,0xe6,0x97,0x05,0x47,0x14,0xc1,0xb4,0x2e,0x78,0xc8, + 0xfc,0x6b,0x32,0x19,0x70,0x73,0x9c,0x90,0x7a,0xd5,0xcf,0x39,0xb6,0xe3,0xad,0x7e, + 0x99,0xec,0xda,0x7a,0x1f,0x94,0xd8,0xab,0x32,0xe6,0x41,0xd0,0x7a,0xd4,0x4f,0x90, + 0x06,0x3d,0x2a,0x56,0x6c,0xbe,0x7f,0x4a,0xae,0xd9,0x61,0xc7,0x6c,0x8a,0xec,0xa4, + 0xb5,0x46,0x4d,0x59,0x80,0x23,0x38,0xe9,0x55,0x67,0x51,0x80,0xdd,0x7d,0xe8,0xdc, + 0x36,0x13,0x9c,0x9f,0xf0,0xa8,0xe4,0xc9,0x40,0x7b,0x57,0x7c,0x62,0xd6,0xcc,0x2e, + 0x9e,0xa5,0x7e,0x1a,0xa9,0xb2,0x15,0x93,0x39,0xfc,0x2a,0xfa,0x65,0x8e,0x17,0xd7, + 0x15,0x04,0xa0,0xac,0x80,0x1a,0xee,0xa6,0xf4,0x33,0x19,0x28,0x3e,0x50,0xc7,0x5f, + 0xad,0x45,0x1f,0xde,0x19,0xe0,0xd2,0xce,0xcd,0xc7,0x3c,0x0a,0xae,0x87,0xf7,0xa1, + 0x8f,0x71,0x5a,0xa1,0x17,0x22,0x2f,0xe6,0xf1,0xd7,0xde,0xae,0x21,0x20,0xf5,0xe0, + 0xfe,0x35,0x4a,0x13,0xfb,0xed,0xb5,0x73,0x70,0x0e,0x00,0xe3,0x68,0xe2,0xba,0xa1, + 0x1b,0x2b,0x89,0xb3,0x6a,0xcc,0x32,0x30,0x63,0xc0,0x3d,0x2b,0x52,0x29,0x3c,0xbe, + 0x49,0xcd,0x60,0xdb,0xcb,0xd8,0x7d,0x31,0x5a,0x4b,0x36,0x48,0x23,0xb5,0x68,0xa4, + 0xad,0x61,0x1d,0x6d,0x94,0xec,0x93,0x24,0x80,0xe3,0x15,0xea,0x70,0x1f,0xb4,0xd9, + 0x89,0x62,0xe4,0x80,0x33,0x5e,0x39,0x0b,0x7c,0x88,0xc5,0xb9,0xc5,0x7a,0x47,0x85, + 0xb5,0x2c,0xaf,0xd9,0xe4,0x23,0x06,0xb5,0xa5,0x66,0xad,0x2e,0xa6,0x15,0x62,0x99, + 0x64,0xc9,0xb6,0x4c,0x31,0xe8,0x4f,0x15,0xf4,0x37,0xc0,0xef,0x13,0x1d,0x2b,0x5c, + 0x16,0x92,0xb7,0xee,0x26,0xfd,0xdb,0x83,0xd3,0x6b,0xff,0x00,0x81,0xaf,0x9e,0x75, + 0x28,0x5e,0x2b,0x9d,0xeb,0xca,0xf5,0x15,0xd7,0xf8,0x36,0xf0,0xda,0x6a,0xb6,0xf2, + 0x83,0x8d,0xcc,0x07,0xf8,0x57,0x36,0x29,0x4a,0x31,0x53,0x5b,0xc5,0xdc,0x23,0x4a, + 0xf4,0xe4,0x8f,0xd0,0xad,0x62,0xd2,0x54,0xdf,0x1b,0x00,0x15,0xb9,0x5d,0xa3,0x39, + 0xf4,0x23,0xd8,0xd7,0x37,0xf6,0x01,0x16,0x18,0x67,0x38,0xc7,0xf9,0xc5,0x75,0xda, + 0x04,0xad,0xab,0xf8,0x76,0xde,0xe6,0x46,0x3e,0x6c,0x48,0x23,0x61,0xea,0x07,0x43, + 0xf9,0x55,0x1b,0xf8,0x96,0x15,0x7b,0x86,0x25,0x52,0x24,0x2e,0xe0,0x8e,0xb8,0x1c, + 0x73,0x5f,0x40,0xab,0x46,0x74,0xd5,0x55,0xb3,0xd4,0xf2,0x25,0x1f,0x78,0xf9,0x0f, + 0xf6,0x88,0xd5,0x85,0xb6,0x8b,0x73,0x6a,0xac,0x00,0x8e,0x35,0x8b,0x83,0xfc,0x73, + 0x10,0x08,0xfc,0xab,0xf3,0xfe,0x78,0xf7,0x2b,0xe0,0x63,0x8f,0xaf,0xe3,0x5e,0xe5, + 0xfb,0x5d,0xf8,0xa6,0x68,0x34,0x9d,0x3e,0xca,0x09,0x4a,0xdc,0x6a,0x37,0xed,0x3b, + 0x90,0x70,0x7c,0xb8,0x54,0xb7,0xfe,0x84,0x54,0x57,0xc6,0xba,0x6f,0x8e,0x2e,0xa1, + 0x5f,0x2a,0xf8,0x79,0x8a,0x46,0x37,0x0e,0xbf,0x95,0x7c,0xe3,0xc1,0x62,0x71,0x11, + 0xfa,0xdc,0x35,0x4d,0xbd,0x0f,0xa1,0xc1,0xc6,0xd4,0x8e,0xee,0xe5,0x4b,0x1f,0x6a, + 0xad,0xb0,0x85,0x50,0xdc,0x7d,0x7d,0x2a,0xb5,0xae,0xb5,0x67,0xa8,0x20,0x10,0xb0, + 0x2d,0x8c,0x15,0x3c,0x1a,0xd5,0x25,0x73,0x81,0xc0,0xe0,0xe7,0xfa,0x55,0xc2,0xf1, + 0x95,0xa7,0xa1,0x72,0x8b,0x5a,0x97,0x34,0xf8,0xc9,0x91,0xe3,0xfe,0xf2,0x1f,0xc7, + 0x1c,0xd5,0x4b,0xc8,0x77,0x29,0x6e,0x84,0x0c,0x81,0x5b,0xda,0x62,0xaa,0xdd,0xc4, + 0xc4,0x8c,0x39,0xc6,0x7e,0xa3,0x14,0x9a,0x8d,0xb0,0x8a,0x4c,0x1e,0xe4,0xfd,0x2b, + 0xd2,0xc3,0xa5,0x25,0x24,0x8c,0x1c,0xec,0xce,0x32,0x14,0x61,0x8d,0xa0,0x9c,0xd5, + 0xc4,0x0b,0xc0,0x1f,0x7b,0xa5,0x68,0x5b,0x29,0x78,0xb0,0x38,0xda,0x48,0x14,0xb1, + 0x59,0x92,0xa2,0x5c,0x0c,0xe4,0x8e,0xb9,0xa8,0xf6,0x36,0x49,0xa3,0x78,0xcc,0xdc, + 0xb5,0x50,0x6c,0xc3,0x31,0xe6,0xbb,0x9f,0x00,0xce,0xd0,0x5e,0xb6,0x4f,0xbf,0xe1, + 0x5c,0x34,0x3b,0x96,0xcb,0x71,0xe8,0x0f,0xf4,0xae,0xa3,0xc1,0xae,0xa6,0xf4,0x16, + 0x3d,0x54,0xfe,0x75,0x87,0xb2,0xb5,0x9d,0xb5,0x07,0x2b,0x9e,0x7f,0xe3,0x35,0x0b, + 0xe2,0xfd,0x58,0xaf,0x4f,0xb4,0x16,0x1f,0xf0,0x20,0x0d,0x64,0xc6,0x09,0x23,0xb8, + 0x1d,0xab,0x5f,0xc6,0xaf,0xff,0x00,0x15,0x56,0xa2,0x70,0x4f,0xef,0x47,0x3f,0x54, + 0x5a,0xc8,0xb7,0x6c,0x36,0x47,0x39,0x1f,0xce,0xbd,0x4c,0x3f,0xc2,0x91,0xc5,0x35, + 0x76,0xcd,0x18,0xc6,0x00,0xcd,0x3d,0x9f,0x8e,0x6a,0x16,0x7c,0x0a,0xa5,0x24,0xc4, + 0x8c,0x73,0x5d,0x37,0x25,0x31,0xb2,0x39,0x62,0x5b,0xde,0xa1,0x12,0x60,0xe6,0x86, + 0x6c,0x80,0x7b,0x1a,0xa6,0xe7,0x1d,0xf9,0xa5,0x2d,0x87,0xd4,0xd9,0x86,0x70,0x3a, + 0xf5,0xab,0xa2,0x6c,0x82,0x3b,0x63,0x8a,0xe7,0x12,0x50,0x1b,0x1d,0xc7,0xa5,0x5b, + 0xf3,0xf8,0x18,0x35,0x85,0x46,0x9c,0x6c,0xc5,0x26,0x6b,0x6f,0x24,0x60,0x76,0xfc, + 0xa9,0x52,0x4d,0xa6,0xb3,0x56,0x72,0xdd,0x38,0xc1,0xab,0x08,0xd9,0x3c,0x57,0x32, + 0xa7,0xad,0xc8,0x3a,0x4b,0x79,0x06,0x06,0x4f,0xbd,0x6d,0xdb,0xcd,0xfa,0x74,0xae, + 0x4a,0x39,0x02,0x80,0x7f,0x33,0x5a,0x90,0xce,0x06,0x32,0x6b,0x5a,0x7f,0x11,0x32, + 0x57,0x47,0x52,0x26,0xe9,0x83,0xf8,0xd6,0x8d,0x9d,0xce,0x5d,0x40,0x6e,0xf5,0xcb, + 0xac,0xc0,0xaf,0x5a,0xb7,0x04,0xf8,0x61,0x82,0x3e,0xb4,0xab,0x6e,0xda,0x22,0xd6, + 0x7a,0x1f,0x45,0xf8,0x2e,0xe0,0xee,0x56,0xcd,0x7b,0x4d,0xbd,0xc9,0x2b,0x9a,0xf9, + 0xbf,0xc1,0x37,0xd8,0x65,0x04,0xe6,0xbd,0xbe,0x1b,0xb0,0x22,0x19,0xc5,0x7e,0x1d, + 0xc5,0xe9,0xcb,0x1f,0x76,0x8f,0xd9,0xb8,0x5f,0x95,0x60,0x95,0x8d,0x49,0xae,0xcb, + 0xca,0x72,0x78,0xe9,0x56,0x21,0x60,0xdd,0x2b,0x95,0x7b,0x82,0xce,0x4e,0x6b,0x5e, + 0xce,0xe0,0x60,0x1c,0xfb,0x57,0xc0,0x63,0x23,0xce,0xdb,0x3e,0xbf,0x0b,0x24,0x99, + 0xd6,0x40,0x48,0x3c,0xd6,0xb4,0x52,0xe0,0xfe,0x15,0xce,0xc5,0x38,0x20,0x60,0xe3, + 0x35,0xa5,0x1b,0x93,0xc5,0x78,0x75,0x22,0xb5,0x3d,0x5a,0x7b,0x1a,0x97,0x12,0x82, + 0x9f,0x28,0xe4,0x56,0x3b,0x48,0x7a,0x66,0xac,0x3b,0x1c,0x56,0x7c,0x83,0x9e,0x3f, + 0x0a,0xce,0x10,0x68,0xb4,0xb5,0x2d,0xc3,0x26,0x46,0xd1,0x5a,0xb6,0xb3,0x85,0x70, + 0x18,0xf1,0x5c,0xe8,0x73,0x12,0xe4,0x9c,0x1a,0x64,0x57,0x64,0x1c,0xe6,0xb2,0x94, + 0x1c,0xa6,0x97,0x63,0x7e,0x5b,0x46,0xe7,0xff,0xd9}; diff --git a/Microcontroller Code/lib/README b/Microcontroller Code/lib/README new file mode 100644 index 0000000..6debab1 --- /dev/null +++ b/Microcontroller Code/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in a an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/Microcontroller Code/lib/pngle-master/LICENSE b/Microcontroller Code/lib/pngle-master/LICENSE new file mode 100644 index 0000000..319ec45 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 kikuchan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Microcontroller Code/lib/pngle-master/README.md b/Microcontroller Code/lib/pngle-master/README.md new file mode 100644 index 0000000..37cf446 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/README.md @@ -0,0 +1,112 @@ +Pngle +===== + +This is a stream based portable **PNG** **L**oader for **E**mbedding, **Pngle**. + +## Background + +Basically PNG is a memory consuming format from an embedded system perspective, especially on decoding, it mandatory require 32KiB working memory for a sliding window of Deflate, and a scanline buffer (its size depend on image width & format) to reconstruct the image, at least. +Unfortunately, due to the memory requirements, we could say traditional Arduino boards, that uses ATmega328 or ATmega32U4 for example, lack of ability to decode standard PNG images. + +Today, we have variety of SoC boards for embedded systems or Arduino that have enough memory to decode PNG images, but we need to be concerned about memory consumption sometimes. +While there are many other PNG decoders, some of them always require the full size of frame-buffer, some of them don't but do require using complicated APIs instead, and some of them are hard to use in Arduino because of deep dependency. +This is why I reinvent the wheel for my own. + +## Features & Restrictions + +- **All standard types of PNG files are supported** + - Interlaced files are also supported + - Tested with PngSuite +- Easy to use + - **Simple API** + - Feed PNG binary data with `pngle_feed` API (in the same way as `write` syscall) + - A super simple single callback interface is used to draw an image + - You need to render pixel-by-pixel (it's neither line-by-line nor frame-by-frame) + - Pixel values are always normalized to 8bits/ch x 4ch for convenience (even if they are indexed, grayscaled, ... or 16bits/ch) + - Drawing x and y values are passed via the interface, so... + - You can roughly resize an image on-the-fly by adjusting drawing x and y values + - You can draw an interlaced image as soon as possible (x and y values occur in Adam7 sequence) +- Easy to embed + - **Reasonably small memory footprint** on runtime + - Theoretical minimum scanline buffer (depends on width & format) + decompression working memory for Deflate (~43KiB) + α + - **No frame-buffer required** + - It simply renders pixel-by-pixel instead, mentioned above + - If you prefer off-screen canvas, you can allocate the canvas by yourself and draw pixels to it + - **Less dependency** + - It only requires `miniz` (don't worry, battery included!) + - **Portable** + - Written in C99 with `stdint.h` (but not for `miniz` yet...) + - MIT License +- **Transparency support** + - A value of transparency is always available as 4th channel of pixel + - tRNS chunk is also supported + - If you need full featured alpha-blending, you can implement it easily (as long as you could know its background source color value, and how to blend them) +- **Gamma correction support** (gAMA chunk only) + - You can activate the feature by calling `pngle_set_display_gamma` API with display gamma value (Typically 2.2) + - It require additional memory (depends on image depth, 64KiB at most), math library (libm), and floating point arithmetic to generate gamma lookup table + - You can remove the feature by defining `PNGLE_NO_GAMMA_CORRECTION` in case of emergency + +## Usage & How it works + +1. Allocate Pngle object by calling `pngle_new()` +2. Setup draw callback by calling `pngle_set_draw_callback()` +3. Feed PNG binary data by calling `pngle_feed()` until exhausted +4. During the feeding, callback function `on_draw()` (for example) is called repeatedly +5. In the `on_draw()` function, put the pixel on a screen (or wherever you want) +6. Finally, you'll get an image + +## Examples + +### Generic C +```c +void on_draw(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]) +{ + uint8_t r = rgba[0]; // 0 - 255 + uint8_t g = rgba[1]; // 0 - 255 + uint8_t b = rgba[2]; // 0 - 255 + uint8_t a = rgba[3]; // 0: fully transparent, 255: fully opaque + + if (a) printf("put pixel at (%d, %d) with color #%02x%02x%02x\n", x, y, r, g, b); +} + +int main(int argc, char *argv[]) +{ + pngle_t *pngle = pngle_new(); + + pngle_set_draw_callback(pngle, on_draw); + + // Feed data to pngle + char buf[1024]; + int remain = 0; + int len; + while ((len = read(STDIN_FILENO, buf + remain, sizeof(buf) - remain)) > 0) { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) errx(1, "%s", pngle_error(pngle)); + + remain = remain + len - fed; + if (remain > 0) memmove(buf, buf + fed, remain); + } + + pngle_destroy(pngle); + + return 0; +} +``` + +### Arduino (for M5Stack) + +See [examples/m5stack-png.ino](examples/m5stack-png.ino) + +## API + +See [pngle.h](pngle.h) + + +## Author + +kikuchan / @kikuchan98 + + +## License + +MIT License diff --git a/Microcontroller Code/lib/pngle-master/examples/m5stack-png.ino b/Microcontroller Code/lib/pngle-master/examples/m5stack-png.ino new file mode 100644 index 0000000..a9fdb74 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/examples/m5stack-png.ino @@ -0,0 +1,114 @@ +#include +#include + +#include + +#include "pngle.h" + +#define WIFI_SSID "XXXXXXXX" +#define WIFI_PASS "XXXXXXXX" + +void cls() +{ + M5.Lcd.fillScreen(TFT_BLACK); + + M5.Lcd.setCursor(0, 0); + M5.Lcd.setTextColor(WHITE); + M5.Lcd.setTextSize(1); +} + +// =================================================== +// pngle example for m5stack +// =================================================== + +double g_scale = 1.0; +void pngle_on_draw(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]) +{ + uint16_t color = (rgba[0] << 8 & 0xf800) | (rgba[1] << 3 & 0x07e0) | (rgba[2] >> 3 & 0x001f); + + if (rgba[3]) { + x = ceil(x * g_scale); + y = ceil(y * g_scale); + w = ceil(w * g_scale); + h = ceil(h * g_scale); + M5.Lcd.fillRect(x, y, w, h, color); + } +} + +void load_png(const char *url, double scale = 1.0) +{ + HTTPClient http; + + http.begin(url); + + int httpCode = http.GET(); + if (httpCode != HTTP_CODE_OK) { + M5.Lcd.printf("HTTP ERROR: %d\n", httpCode); + http.end(); + return ; + } + + WiFiClient *stream = http.getStreamPtr(); + + pngle_t *pngle = pngle_new(); + pngle_set_draw_callback(pngle, pngle_on_draw); + g_scale = scale; // XXX: + + uint8_t buf[2048]; + int remain = 0; + while (http.connected()) { + size_t size = stream->available(); + if (!size) { delay(1); continue; } + + if (size > sizeof(buf) - remain) { + size = sizeof(buf) - remain; + } + + int len = stream->readBytes(buf + remain, size); + if (len > 0) { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) { + cls(); + M5.Lcd.printf("ERROR: %s\n", pngle_error(pngle)); + break; + } + + remain = remain + len - fed; + if (remain > 0) memmove(buf, buf + fed, remain); + } else { + delay(1); + } + } + + pngle_destroy(pngle); + + http.end(); +} +// =================================================== + +void setup() +{ + M5.begin(); + + M5.Lcd.printf("Welcome.\n"); + + WiFi.begin(WIFI_SSID, WIFI_PASS); + while (WiFi.status() != WL_CONNECTED) { + delay(100); + } + + M5.Lcd.printf("WiFi connected.\n"); +} + +void loop() +{ + M5.update(); + + if (M5.BtnA.wasReleased()) { + load_png("https://raw.githubusercontent.com/kikuchan/pngle/master/tests/pngsuite/PngSuite.png"); + } else if (M5.BtnB.wasReleased()) { + load_png("https://raw.githubusercontent.com/kikuchan/pngle/master/tests/pngsuite/tbrn2c08.png", 7); + } else if (M5.BtnC.wasReleased()) { + load_png("https://avatars3.githubusercontent.com/u/17420673?s=240"); + } +} diff --git a/Microcontroller Code/lib/pngle-master/examples/png2ppm.c b/Microcontroller Code/lib/pngle-master/examples/png2ppm.c new file mode 100644 index 0000000..9db7b20 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/examples/png2ppm.c @@ -0,0 +1,152 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pngle.h" + +uint8_t *img; +uint8_t *counts; // draw counter on (x, y) +int width, height; + +double scale_factor = 1.0; + +#define UNUSED(x) (void)(x) + +void put_pixel(int x, int y, uint8_t r, uint8_t g, uint8_t b) +{ + uint8_t *p = img + (y * width + x) * 3; + uint8_t c = ++counts[y * width + x]; + + p[0] += (r - p[0]) / c; + p[1] += (g - p[1]) / c; + p[2] += (b - p[2]) / c; + +} + +void rectangle(double x, double y, double w, double h, uint8_t r, uint8_t g, uint8_t b) +{ + int iw = (int)ceil(w); + int ih = (int)ceil(h); + + int ix, iy; + + for (iy = 0; iy < ih; iy++) { + for (ix = 0; ix < iw; ix++) { + put_pixel(x + ix, y + iy, r, g, b); + } + } +} + +void draw_pixel(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]) +{ + UNUSED(pngle); + UNUSED(w); + UNUSED(h); + uint8_t r = rgba[0]; + uint8_t g = rgba[1]; + uint8_t b = rgba[2]; + // uint8_t a = rgba[3]; // ignore + + rectangle(x * scale_factor, y * scale_factor, scale_factor, scale_factor, r, g, b); +} + +void init_screen(pngle_t *pngle, uint32_t w, uint32_t h) +{ + UNUSED(pngle); + width = w * scale_factor; + height = h * scale_factor; + + img = calloc(width * height, 3); + counts = calloc(width * height, 1); +} + +void flush_screen(pngle_t *pngle) { + UNUSED(pngle); + printf("P6\n"); + printf("%u %u\n", width, height); + printf("255\n"); + + fwrite(img, width * height, 3, stdout); +} + +int main(int argc, char *argv[]) +{ + FILE *fp = stdin; + extern int optind; + extern char *optarg; + int ch; + double display_gamma = 0; + + while ((ch = getopt(argc, argv, "g:s:h")) != -1) { + switch (ch) { + case 'g': + display_gamma = atof(optarg); + break; + + case 's': + scale_factor = atof(optarg); + break; + + case 'h': + case '?': + default: + fprintf(stderr, "Usage: %s [options] [input.png]\n", argv[0]); + return 1; + } + } + argc -= optind; + argv += optind; + + if (argc > 0) { + fp = fopen(argv[0], "rb"); + if (fp == NULL) { + fprintf(stderr, "%s: %s\n", argv[0], strerror(errno)); + return -1; + } + } + + char buf[1024]; + size_t remain = 0; + int len; + + pngle_t *pngle = pngle_new(); + + pngle_set_init_callback(pngle, init_screen); + pngle_set_draw_callback(pngle, draw_pixel); + pngle_set_done_callback(pngle, flush_screen); + + pngle_set_display_gamma(pngle, display_gamma); + + while (!feof(fp)) { + if (remain >= sizeof(buf)) { + if (argc > 1) fprintf(stderr, "%s: ", argv[1]); + fprintf(stderr, "Buffer exceeded\n"); + return -1; + } + + len = fread(buf + remain, 1, sizeof(buf) - remain, fp); + if (len <= 0) { + //printf("EOF\n"); + break; + } + + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) { + if (argc > 1) fprintf(stderr, "%s: ", argv[1]); + fprintf(stderr, "ERROR; %s\n", pngle_error(pngle)); + return -1; + } + + remain = remain + len - fed; + if (remain > 0) memmove(buf, buf + fed, remain); + } + + if (fp != stdin) fclose(fp); + + return 0; +} diff --git a/Microcontroller Code/lib/pngle-master/miniz.c b/Microcontroller Code/lib/pngle-master/miniz.c new file mode 100644 index 0000000..ba25314 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/miniz.c @@ -0,0 +1,4931 @@ +/* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing + See "unlicense" statement at the end of this file. + Rich Geldreich , last updated Oct. 13, 2013 + Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt + + Most API's defined in miniz.c are optional. For example, to disable the archive related functions just define + MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO (see the list below for more macros). + + * Change History + 10/13/13 v1.15 r4 - Interim bugfix release while I work on the next major release with Zip64 support (almost there!): + - Critical fix for the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY bug (thanks kahmyong.moon@hp.com) which could cause locate files to not find files. This bug + would only have occured in earlier versions if you explicitly used this flag, OR if you used mz_zip_extract_archive_file_to_heap() or mz_zip_add_mem_to_archive_file_in_place() + (which used this flag). If you can't switch to v1.15 but want to fix this bug, just remove the uses of this flag from both helper funcs (and of course don't use the flag). + - Bugfix in mz_zip_reader_extract_to_mem_no_alloc() from kymoon when pUser_read_buf is not NULL and compressed size is > uncompressed size + - Fixing mz_zip_reader_extract_*() funcs so they don't try to extract compressed data from directory entries, to account for weird zipfiles which contain zero-size compressed data on dir entries. + Hopefully this fix won't cause any issues on weird zip archives, because it assumes the low 16-bits of zip external attributes are DOS attributes (which I believe they always are in practice). + - Fixing mz_zip_reader_is_file_a_directory() so it doesn't check the internal attributes, just the filename and external attributes + - mz_zip_reader_init_file() - missing MZ_FCLOSE() call if the seek failed + - Added cmake support for Linux builds which builds all the examples, tested with clang v3.3 and gcc v4.6. + - Clang fix for tdefl_write_image_to_png_file_in_memory() from toffaletti + - Merged MZ_FORCEINLINE fix from hdeanclark + - Fix include before config #ifdef, thanks emil.brink + - Added tdefl_write_image_to_png_file_in_memory_ex(): supports Y flipping (super useful for OpenGL apps), and explicit control over the compression level (so you can + set it to 1 for real-time compression). + - Merged in some compiler fixes from paulharris's github repro. + - Retested this build under Windows (VS 2010, including static analysis), tcc 0.9.26, gcc v4.6 and clang v3.3. + - Added example6.c, which dumps an image of the mandelbrot set to a PNG file. + - Modified example2 to help test the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY flag more. + - In r3: Bugfix to mz_zip_writer_add_file() found during merge: Fix possible src file fclose() leak if alignment bytes+local header file write faiiled + - In r4: Minor bugfix to mz_zip_writer_add_from_zip_reader(): Was pushing the wrong central dir header offset, appears harmless in this release, but it became a problem in the zip64 branch + 5/20/12 v1.14 - MinGW32/64 GCC 4.6.1 compiler fixes: added MZ_FORCEINLINE, #include (thanks fermtect). + 5/19/12 v1.13 - From jason@cornsyrup.org and kelwert@mtu.edu - Fix mz_crc32() so it doesn't compute the wrong CRC-32's when mz_ulong is 64-bit. + - Temporarily/locally slammed in "typedef unsigned long mz_ulong" and re-ran a randomized regression test on ~500k files. + - Eliminated a bunch of warnings when compiling with GCC 32-bit/64. + - Ran all examples, miniz.c, and tinfl.c through MSVC 2008's /analyze (static analysis) option and fixed all warnings (except for the silly + "Use of the comma-operator in a tested expression.." analysis warning, which I purposely use to work around a MSVC compiler warning). + - Created 32-bit and 64-bit Codeblocks projects/workspace. Built and tested Linux executables. The codeblocks workspace is compatible with Linux+Win32/x64. + - Added miniz_tester solution/project, which is a useful little app derived from LZHAM's tester app that I use as part of the regression test. + - Ran miniz.c and tinfl.c through another series of regression testing on ~500,000 files and archives. + - Modified example5.c so it purposely disables a bunch of high-level functionality (MINIZ_NO_STDIO, etc.). (Thanks to corysama for the MINIZ_NO_STDIO bug report.) + - Fix ftell() usage in examples so they exit with an error on files which are too large (a limitation of the examples, not miniz itself). + 4/12/12 v1.12 - More comments, added low-level example5.c, fixed a couple minor level_and_flags issues in the archive API's. + level_and_flags can now be set to MZ_DEFAULT_COMPRESSION. Thanks to Bruce Dawson for the feedback/bug report. + 5/28/11 v1.11 - Added statement from unlicense.org + 5/27/11 v1.10 - Substantial compressor optimizations: + - Level 1 is now ~4x faster than before. The L1 compressor's throughput now varies between 70-110MB/sec. on a + - Core i7 (actual throughput varies depending on the type of data, and x64 vs. x86). + - Improved baseline L2-L9 compression perf. Also, greatly improved compression perf. issues on some file types. + - Refactored the compression code for better readability and maintainability. + - Added level 10 compression level (L10 has slightly better ratio than level 9, but could have a potentially large + drop in throughput on some files). + 5/15/11 v1.09 - Initial stable release. + + * Low-level Deflate/Inflate implementation notes: + + Compression: Use the "tdefl" API's. The compressor supports raw, static, and dynamic blocks, lazy or + greedy parsing, match length filtering, RLE-only, and Huffman-only streams. It performs and compresses + approximately as well as zlib. + + Decompression: Use the "tinfl" API's. The entire decompressor is implemented as a single function + coroutine: see tinfl_decompress(). It supports decompression into a 32KB (or larger power of 2) wrapping buffer, or into a memory + block large enough to hold the entire file. + + The low-level tdefl/tinfl API's do not make any use of dynamic memory allocation. + + * zlib-style API notes: + + miniz.c implements a fairly large subset of zlib. There's enough functionality present for it to be a drop-in + zlib replacement in many apps: + The z_stream struct, optional memory allocation callbacks + deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound + inflateInit/inflateInit2/inflate/inflateEnd + compress, compress2, compressBound, uncompress + CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly routines. + Supports raw deflate streams or standard zlib streams with adler-32 checking. + + Limitations: + The callback API's are not implemented yet. No support for gzip headers or zlib static dictionaries. + I've tried to closely emulate zlib's various flavors of stream flushing and return status codes, but + there are no guarantees that miniz.c pulls this off perfectly. + + * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function, originally written by + Alex Evans. Supports 1-4 bytes/pixel images. + + * ZIP archive API notes: + + The ZIP archive API's where designed with simplicity and efficiency in mind, with just enough abstraction to + get the job done with minimal fuss. There are simple API's to retrieve file information, read files from + existing archives, create new archives, append new files to existing archives, or clone archive data from + one archive to another. It supports archives located in memory or the heap, on disk (using stdio.h), + or you can specify custom file read/write callbacks. + + - Archive reading: Just call this function to read a single file from a disk archive: + + void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, + size_t *pSize, mz_uint zip_flags); + + For more complex cases, use the "mz_zip_reader" functions. Upon opening an archive, the entire central + directory is located and read as-is into memory, and subsequent file access only occurs when reading individual files. + + - Archives file scanning: The simple way is to use this function to scan a loaded archive for a specific file: + + int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); + + The locate operation can optionally check file comments too, which (as one example) can be used to identify + multiple versions of the same file in an archive. This function uses a simple linear search through the central + directory, so it's not very fast. + + Alternately, you can iterate through all the files in an archive (using mz_zip_reader_get_num_files()) and + retrieve detailed info on each file by calling mz_zip_reader_file_stat(). + + - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer immediately writes compressed file data + to disk and builds an exact image of the central directory in memory. The central directory image is written + all at once at the end of the archive file when the archive is finalized. + + The archive writer can optionally align each file's local header and file data to any power of 2 alignment, + which can be useful when the archive will be read from optical media. Also, the writer supports placing + arbitrary data blobs at the very beginning of ZIP archives. Archives written using either feature are still + readable by any ZIP tool. + + - Archive appending: The simple way to add a single file to an archive is to call this function: + + mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, + const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); + + The archive will be created if it doesn't already exist, otherwise it'll be appended to. + Note the appending is done in-place and is not an atomic operation, so if something goes wrong + during the operation it's possible the archive could be left without a central directory (although the local + file headers and file data will be fine, so the archive will be recoverable). + + For more complex archive modification scenarios: + 1. The safest way is to use a mz_zip_reader to read the existing archive, cloning only those bits you want to + preserve into a new archive using using the mz_zip_writer_add_from_zip_reader() function (which compiles the + compressed file data as-is). When you're done, delete the old archive and rename the newly written archive, and + you're done. This is safe but requires a bunch of temporary disk space or heap memory. + + 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using mz_zip_writer_init_from_reader(), + append new files as needed, then finalize the archive which will write an updated central directory to the + original archive. (This is basically what mz_zip_add_mem_to_archive_file_in_place() does.) There's a + possibility that the archive's central directory could be lost with this method if anything goes wrong, though. + + - ZIP archive support limitations: + No zip64 or spanning support. Extraction functions can only handle unencrypted, stored or deflated files. + Requires streams capable of seeking. + + * This is a header file library, like stb_image.c. To get only a header file, either cut and paste the + below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then include miniz.c from it. + + * Important: For best perf. be sure to customize the below macros for your target platform: + #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 + #define MINIZ_LITTLE_ENDIAN 1 + #define MINIZ_HAS_64BIT_REGISTERS 1 + + * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before including miniz.c to ensure miniz + uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be able to process large files + (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes). +*/ + +#ifndef MINIZ_HEADER_INCLUDED +#define MINIZ_HEADER_INCLUDED + +#include + +// Defines to completely disable specific portions of miniz.c: +// If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. + +// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. +#define MINIZ_NO_STDIO + +// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or +// get/set file times, and the C run-time funcs that get/set times won't be called. +// The current downside is the times written to your archives will be from 1979. +#define MINIZ_NO_TIME + +// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. +#define MINIZ_NO_ARCHIVE_APIS + +// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive API's. +#define MINIZ_NO_ARCHIVE_WRITING_APIS + +// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. +#define MINIZ_NO_ZLIB_APIS + +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. +//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. +// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc +// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user +// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. +//#define MINIZ_NO_MALLOC + +// +#define MINIZ_NO_COMPRESSION + + +#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) + // TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux + #define MINIZ_NO_TIME +#endif + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) + #include +#endif + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) +// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. +#define MINIZ_X86_OR_X64_CPU 1 +#endif + +#if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. +#define MINIZ_LITTLE_ENDIAN 1 +#endif + +#if MINIZ_X86_OR_X64_CPU +// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 +#endif + +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) +// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). +#define MINIZ_HAS_64BIT_REGISTERS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// ------------------- zlib-style API Definitions. + +// For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! +typedef unsigned long mz_ulong; + +// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. +void mz_free(void *p); + +#define MZ_ADLER32_INIT (1) +// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); + +#define MZ_CRC32_INIT (0) +// mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. +mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); + +// Compression strategies. +enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; + +// Method +#define MZ_DEFLATED 8 + +#ifndef MINIZ_NO_ZLIB_APIS + +// Heap allocation callbacks. +// Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. +typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); +typedef void (*mz_free_func)(void *opaque, void *address); +typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); + +#define MZ_VERSION "9.1.15" +#define MZ_VERNUM 0x91F0 +#define MZ_VER_MAJOR 9 +#define MZ_VER_MINOR 1 +#define MZ_VER_REVISION 15 +#define MZ_VER_SUBREVISION 0 + +// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). +enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; + +// Return status codes. MZ_PARAM_ERROR is non-standard. +enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; + +// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. +enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; + +// Window bits +#define MZ_DEFAULT_WINDOW_BITS 15 + +struct mz_internal_state; + +// Compression/decompression stream struct. +typedef struct mz_stream_s +{ + const unsigned char *next_in; // pointer to next byte to read + unsigned int avail_in; // number of bytes available at next_in + mz_ulong total_in; // total number of bytes consumed so far + + unsigned char *next_out; // pointer to next byte to write + unsigned int avail_out; // number of bytes that can be written to next_out + mz_ulong total_out; // total number of bytes produced so far + + char *msg; // error msg (unused) + struct mz_internal_state *state; // internal state, allocated by zalloc/zfree + + mz_alloc_func zalloc; // optional heap allocation function (defaults to malloc) + mz_free_func zfree; // optional heap free function (defaults to free) + void *opaque; // heap alloc function user pointer + + int data_type; // data_type (unused) + mz_ulong adler; // adler32 of the source or uncompressed data + mz_ulong reserved; // not used +} mz_stream; + +typedef mz_stream *mz_streamp; + +// Returns the version string of miniz.c. +const char *mz_version(void); + +// mz_deflateInit() initializes a compressor with default options: +// Parameters: +// pStream must point to an initialized mz_stream struct. +// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. +// level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. +// (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if the input parameters are bogus. +// MZ_MEM_ERROR on out of memory. +int mz_deflateInit(mz_streamp pStream, int level); + +// mz_deflateInit2() is like mz_deflate(), except with more control: +// Additional parameters: +// method must be MZ_DEFLATED +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) +// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); + +// Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). +int mz_deflateReset(mz_streamp pStream); + +// mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. +// Return values: +// MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). +// MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) +int mz_deflate(mz_streamp pStream, int flush); + +// mz_deflateEnd() deinitializes a compressor: +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +int mz_deflateEnd(mz_streamp pStream); + +// mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); + +// Single-call compression functions mz_compress() and mz_compress2(): +// Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); + +// mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). +mz_ulong mz_compressBound(mz_ulong source_len); + +// Initializes a decompressor. +int mz_inflateInit(mz_streamp pStream); + +// mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). +int mz_inflateInit2(mz_streamp pStream, int window_bits); + +// Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. +// On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). +// MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. +// Return values: +// MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. +// MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_DATA_ERROR if the deflate stream is invalid. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again +// with more input data, or with more room in the output buffer (except when using single call decompression, described above). +int mz_inflate(mz_streamp pStream, int flush); + +// Deinitializes a decompressor. +int mz_inflateEnd(mz_streamp pStream); + +// Single-call decompression. +// Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); + +// Returns a string description of the specified error code, or NULL if the error code is invalid. +const char *mz_error(int err); + +// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. +#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + typedef unsigned char Byte; + typedef unsigned int uInt; + typedef mz_ulong uLong; + typedef Byte Bytef; + typedef uInt uIntf; + typedef char charf; + typedef int intf; + typedef void *voidpf; + typedef uLong uLongf; + typedef void *voidp; + typedef void *const voidpc; + #define Z_NULL 0 + #define Z_NO_FLUSH MZ_NO_FLUSH + #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH + #define Z_SYNC_FLUSH MZ_SYNC_FLUSH + #define Z_FULL_FLUSH MZ_FULL_FLUSH + #define Z_FINISH MZ_FINISH + #define Z_BLOCK MZ_BLOCK + #define Z_OK MZ_OK + #define Z_STREAM_END MZ_STREAM_END + #define Z_NEED_DICT MZ_NEED_DICT + #define Z_ERRNO MZ_ERRNO + #define Z_STREAM_ERROR MZ_STREAM_ERROR + #define Z_DATA_ERROR MZ_DATA_ERROR + #define Z_MEM_ERROR MZ_MEM_ERROR + #define Z_BUF_ERROR MZ_BUF_ERROR + #define Z_VERSION_ERROR MZ_VERSION_ERROR + #define Z_PARAM_ERROR MZ_PARAM_ERROR + #define Z_NO_COMPRESSION MZ_NO_COMPRESSION + #define Z_BEST_SPEED MZ_BEST_SPEED + #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION + #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION + #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY + #define Z_FILTERED MZ_FILTERED + #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY + #define Z_RLE MZ_RLE + #define Z_FIXED MZ_FIXED + #define Z_DEFLATED MZ_DEFLATED + #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS + #define alloc_func mz_alloc_func + #define free_func mz_free_func + #define internal_state mz_internal_state + #define z_stream mz_stream + #define deflateInit mz_deflateInit + #define deflateInit2 mz_deflateInit2 + #define deflateReset mz_deflateReset + #define deflate mz_deflate + #define deflateEnd mz_deflateEnd + #define deflateBound mz_deflateBound + #define compress mz_compress + #define compress2 mz_compress2 + #define compressBound mz_compressBound + #define inflateInit mz_inflateInit + #define inflateInit2 mz_inflateInit2 + #define inflate mz_inflate + #define inflateEnd mz_inflateEnd + #define uncompress mz_uncompress + #define crc32 mz_crc32 + #define adler32 mz_adler32 + #define MAX_WBITS 15 + #define MAX_MEM_LEVEL 9 + #define zError mz_error + #define ZLIB_VERSION MZ_VERSION + #define ZLIB_VERNUM MZ_VERNUM + #define ZLIB_VER_MAJOR MZ_VER_MAJOR + #define ZLIB_VER_MINOR MZ_VER_MINOR + #define ZLIB_VER_REVISION MZ_VER_REVISION + #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION + #define zlibVersion mz_version + #define zlib_version mz_version() +#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +#endif // MINIZ_NO_ZLIB_APIS + +// ------------------- Types and macros + +typedef unsigned char mz_uint8; +typedef signed short mz_int16; +typedef unsigned short mz_uint16; +typedef unsigned int mz_uint32; +typedef unsigned int mz_uint; +typedef long long mz_int64; +typedef unsigned long long mz_uint64; +typedef int mz_bool; + +#define MZ_FALSE (0) +#define MZ_TRUE (1) + +// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message. +#ifdef _MSC_VER + #define MZ_MACRO_END while (0, 0) +#else + #define MZ_MACRO_END while (0) +#endif + +// ------------------- ZIP archive reading/writing + +#ifndef MINIZ_NO_ARCHIVE_APIS + +enum +{ + MZ_ZIP_MAX_IO_BUF_SIZE = 64*1024, + MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260, + MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256 +}; + +typedef struct +{ + mz_uint32 m_file_index; + mz_uint32 m_central_dir_ofs; + mz_uint16 m_version_made_by; + mz_uint16 m_version_needed; + mz_uint16 m_bit_flag; + mz_uint16 m_method; +#ifndef MINIZ_NO_TIME + time_t m_time; +#endif + mz_uint32 m_crc32; + mz_uint64 m_comp_size; + mz_uint64 m_uncomp_size; + mz_uint16 m_internal_attr; + mz_uint32 m_external_attr; + mz_uint64 m_local_header_ofs; + mz_uint32 m_comment_size; + char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; + char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; +} mz_zip_archive_file_stat; + +typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); +typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); + +struct mz_zip_internal_state_tag; +typedef struct mz_zip_internal_state_tag mz_zip_internal_state; + +typedef enum +{ + MZ_ZIP_MODE_INVALID = 0, + MZ_ZIP_MODE_READING = 1, + MZ_ZIP_MODE_WRITING = 2, + MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 +} mz_zip_mode; + +typedef struct mz_zip_archive_tag +{ + mz_uint64 m_archive_size; + mz_uint64 m_central_directory_file_ofs; + mz_uint m_total_files; + mz_zip_mode m_zip_mode; + + mz_uint m_file_offset_alignment; + + mz_alloc_func m_pAlloc; + mz_free_func m_pFree; + mz_realloc_func m_pRealloc; + void *m_pAlloc_opaque; + + mz_file_read_func m_pRead; + mz_file_write_func m_pWrite; + void *m_pIO_opaque; + + mz_zip_internal_state *m_pState; + +} mz_zip_archive; + +typedef enum +{ + MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, + MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, + MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, + MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800 +} mz_zip_flags; + +// ZIP archive reading + +// Inits a ZIP archive reader. +// These functions read and validate the archive's central directory. +mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint32 flags); +mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint32 flags); + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); +#endif + +// Returns the total number of files in the archive. +mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); + +// Returns detailed information about an archive file entry. +mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); + +// Determines if an archive file entry is a directory entry. +mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); +mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); + +// Retrieves the filename of an archive file entry. +// Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. +mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); + +// Attempts to locates a file in the archive's central directory. +// Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH +// Returns -1 if the file cannot be found. +int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); + +// Extracts a archive file to a memory buffer using no memory allocation. +mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); +mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); + +// Extracts a archive file to a memory buffer. +mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); + +// Extracts a archive file to a dynamically allocated heap buffer. +void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); +void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); + +// Extracts a archive file using a callback function to output the file's data. +mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); + +#ifndef MINIZ_NO_STDIO +// Extracts a archive file to a disk file and sets its last accessed and modified times. +// This function only extracts files, not archive directory records. +mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); +#endif + +// Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. +mz_bool mz_zip_reader_end(mz_zip_archive *pZip); + +// ZIP archive writing + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +// Inits a ZIP archive writer. +mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); +mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); +#endif + +// Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. +// For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. +// For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). +// Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. +// Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before +// the archive is finalized the file's central directory will be hosed. +mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); + +// Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. +// To add a directory entry, call this method with an archive name ending in a forwardslash with empty buffer. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); +mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32); + +#ifndef MINIZ_NO_STDIO +// Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); +#endif + +// Adds a file to an archive by fully cloning the data from another archive. +// This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data, and comment fields. +mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint file_index); + +// Finalizes the archive by writing the central directory records followed by the end of central directory record. +// After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). +// An archive must be manually finalized by calling this function for it to be valid. +mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); +mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, size_t *pSize); + +// Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. +// Note for the archive to be valid, it must have been finalized before ending. +mz_bool mz_zip_writer_end(mz_zip_archive *pZip); + +// Misc. high-level helper functions: + +// mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. +// level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. +mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); + +// Reads a single file from an archive into a heap block. +// Returns NULL on failure. +void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); + +#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +#endif // #ifndef MINIZ_NO_ARCHIVE_APIS + +// ------------------- Low-level Decompression API Definitions + +// Decompression flags used by tinfl_decompress(). +// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. +// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. +// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). +// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. +enum +{ + TINFL_FLAG_PARSE_ZLIB_HEADER = 1, + TINFL_FLAG_HAS_MORE_INPUT = 2, + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, + TINFL_FLAG_COMPUTE_ADLER32 = 8 +}; + +// High level decompression functions: +// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. +// On return: +// Function returns a pointer to the decompressed data, or NULL on failure. +// *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must call mz_free() on the returned block when it's no longer needed. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. +// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. +#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. +// Returns 1 on success or 0 on failure. +typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; + +// Max size of LZ dictionary. +#define TINFL_LZ_DICT_SIZE 32768 + +// Return status. +typedef enum +{ + TINFL_STATUS_BAD_PARAM = -3, + TINFL_STATUS_ADLER32_MISMATCH = -2, + TINFL_STATUS_FAILED = -1, + TINFL_STATUS_DONE = 0, + TINFL_STATUS_NEEDS_MORE_INPUT = 1, + TINFL_STATUS_HAS_MORE_OUTPUT = 2 +} tinfl_status; + +// Initializes the decompressor to its initial state. +#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END +#define tinfl_get_adler32(r) (r)->m_check_adler32 + +// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. +// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); + +// Internal/private bits follow. +enum +{ + TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, + TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS +}; + +typedef struct +{ + mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; + mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; +} tinfl_huff_table; + +#if MINIZ_HAS_64BIT_REGISTERS + #define TINFL_USE_64BIT_BITBUF 1 +#endif + +#if TINFL_USE_64BIT_BITBUF + typedef mz_uint64 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (64) +#else + typedef mz_uint32 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (32) +#endif + +struct tinfl_decompressor_tag +{ + mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; + tinfl_bit_buf_t m_bit_buf; + size_t m_dist_from_out_buf_start; + tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; + mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; +}; + + +#ifndef MINIZ_NO_COMPRESSION +// ------------------- Low-level Compression API Definitions + +// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). +#define TDEFL_LESS_MEMORY 0 + +// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): +// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). +enum +{ + TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF +}; + +// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. +// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). +// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. +// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). +// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) +// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. +// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. +// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. +// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). +enum +{ + TDEFL_WRITE_ZLIB_HEADER = 0x01000, + TDEFL_COMPUTE_ADLER32 = 0x02000, + TDEFL_GREEDY_PARSING_FLAG = 0x04000, + TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, + TDEFL_RLE_MATCHES = 0x10000, + TDEFL_FILTER_MATCHES = 0x20000, + TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, + TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 +}; + +// High level compression functions: +// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of source block to compress. +// flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must free() the returned block when it's no longer needed. +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. +// Returns 0 on failure. +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// Compresses an image to a compressed PNG file in memory. +// On entry: +// pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. +// The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. +// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL +// If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pLen_out will be set to the size of the PNG image file. +// The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); + +// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. +typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); + +// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; + +// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). +#if TDEFL_LESS_MEMORY +enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#else +enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#endif + +// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. +typedef enum +{ + TDEFL_STATUS_BAD_PARAM = -2, + TDEFL_STATUS_PUT_BUF_FAILED = -1, + TDEFL_STATUS_OKAY = 0, + TDEFL_STATUS_DONE = 1, +} tdefl_status; + +// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums +typedef enum +{ + TDEFL_NO_FLUSH = 0, + TDEFL_SYNC_FLUSH = 2, + TDEFL_FULL_FLUSH = 3, + TDEFL_FINISH = 4 +} tdefl_flush; + +// tdefl's compression state structure. +typedef struct +{ + tdefl_put_buf_func_ptr m_pPut_buf_func; + void *m_pPut_buf_user; + mz_uint m_flags, m_max_probes[2]; + int m_greedy_parsing; + mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; + mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; + mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; + mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; + tdefl_status m_prev_return_status; + const void *m_pIn_buf; + void *m_pOut_buf; + size_t *m_pIn_buf_size, *m_pOut_buf_size; + tdefl_flush m_flush; + const mz_uint8 *m_pSrc; + size_t m_src_buf_left, m_out_buf_ofs; + mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; + mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; + mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; + mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; + mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; +} tdefl_compressor; + +// Initializes the compressor. +// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. +// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. +// If pBut_buf_func is NULL the user should always call the tdefl_compress() API. +// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); + +// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. +// tdefl_compress_buffer() always consumes the entire input buffer. +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); +mz_uint32 tdefl_get_adler32(tdefl_compressor *d); + +// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't defined, because it uses some of its macros. +#ifndef MINIZ_NO_ZLIB_APIS +// Create tdefl_compress() flags given zlib-style compression parameters. +// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) +// window_bits may be -15 (raw deflate) or 15 (zlib) +// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); +#endif // #ifndef MINIZ_NO_ZLIB_APIS + +#endif // MINIZ_NO_COMPRESSION + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_INCLUDED + +// ------------------- End of Header: Implementation follows. (If you only want the header, define MINIZ_HEADER_FILE_ONLY.) + +#ifndef MINIZ_HEADER_FILE_ONLY + +typedef unsigned char mz_validate_uint16[sizeof(mz_uint16)==2 ? 1 : -1]; +typedef unsigned char mz_validate_uint32[sizeof(mz_uint32)==4 ? 1 : -1]; +typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1]; + +#include +#include + +#define MZ_ASSERT(x) assert(x) + +#ifdef MINIZ_NO_MALLOC + #define MZ_MALLOC(x) NULL + #define MZ_FREE(x) (void)x, ((void)0) + #define MZ_REALLOC(p, x) NULL +#else + #define MZ_MALLOC(x) malloc(x) + #define MZ_FREE(x) free(x) + #define MZ_REALLOC(p, x) realloc(p, x) +#endif + +#define MZ_MAX(a,b) (((a)>(b))?(a):(b)) +#define MZ_MIN(a,b) (((a)<(b))?(a):(b)) +#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) + #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) +#else + #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) + #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) +#endif + +#ifdef _MSC_VER + #define MZ_FORCEINLINE __forceinline +#elif defined(__GNUC__) + #define MZ_FORCEINLINE inline __attribute__((__always_inline__)) +#else + #define MZ_FORCEINLINE inline +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +// ------------------- zlib-style API's + +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) +{ + mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; + if (!ptr) return MZ_ADLER32_INIT; + while (buf_len) { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + return (s2 << 16) + s1; +} + +// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ +mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) +{ + static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + mz_uint32 crcu32 = (mz_uint32)crc; + if (!ptr) return MZ_CRC32_INIT; + crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } + return ~crcu32; +} + +void mz_free(void *p) +{ + MZ_FREE(p); +} + +#ifndef MINIZ_NO_ZLIB_APIS + +static void *def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } +static void def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } +static void *def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } + +const char *mz_version(void) +{ + return MZ_VERSION; +} + +#ifndef MINIZ_NO_COMPRESSION + +int mz_deflateInit(mz_streamp pStream, int level) +{ + return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); +} + +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) +{ + tdefl_compressor *pComp; + mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); + + if (!pStream) return MZ_STREAM_ERROR; + if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = MZ_ADLER32_INIT; + pStream->msg = NULL; + pStream->reserved = 0; + pStream->total_in = 0; + pStream->total_out = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pComp; + + if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) + { + mz_deflateEnd(pStream); + return MZ_PARAM_ERROR; + } + + return MZ_OK; +} + +int mz_deflateReset(mz_streamp pStream) +{ + if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; + pStream->total_in = pStream->total_out = 0; + tdefl_init((tdefl_compressor*)pStream->state, NULL, NULL, ((tdefl_compressor*)pStream->state)->m_flags); + return MZ_OK; +} + +int mz_deflate(mz_streamp pStream, int flush) +{ + size_t in_bytes, out_bytes; + mz_ulong orig_total_in, orig_total_out; + int mz_status = MZ_OK; + + if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; + if (!pStream->avail_out) return MZ_BUF_ERROR; + + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + + if (((tdefl_compressor*)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) + return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; + + orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; + for ( ; ; ) + { + tdefl_status defl_status; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + + defl_status = tdefl_compress((tdefl_compressor*)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor*)pStream->state); + + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; + pStream->total_out += (mz_uint)out_bytes; + + if (defl_status < 0) + { + mz_status = MZ_STREAM_ERROR; + break; + } + else if (defl_status == TDEFL_STATUS_DONE) + { + mz_status = MZ_STREAM_END; + break; + } + else if (!pStream->avail_out) + break; + else if ((!pStream->avail_in) && (flush != MZ_FINISH)) + { + if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) + break; + return MZ_BUF_ERROR; // Can't make forward progress without some input. + } + } + return mz_status; +} + +int mz_deflateEnd(mz_streamp pStream) +{ + if (!pStream) return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) +{ + (void)pStream; + // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) + return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); +} + +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) +{ + int status; + mz_stream stream; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_deflateInit(&stream, level); + if (status != MZ_OK) return status; + + status = mz_deflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_deflateEnd(&stream); + return (status == MZ_OK) ? MZ_BUF_ERROR : status; + } + + *pDest_len = stream.total_out; + return mz_deflateEnd(&stream); +} + +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); +} + +mz_ulong mz_compressBound(mz_ulong source_len) +{ + return mz_deflateBound(NULL, source_len); +} + +#endif // MINIZ_NO_COMPRESSION + +typedef struct +{ + tinfl_decompressor m_decomp; + mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; + mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; + tinfl_status m_last_status; +} inflate_state; + +int mz_inflateInit2(mz_streamp pStream, int window_bits) +{ + inflate_state *pDecomp; + if (!pStream) return MZ_STREAM_ERROR; + if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = 0; + pStream->msg = NULL; + pStream->total_in = 0; + pStream->total_out = 0; + pStream->reserved = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pDecomp = (inflate_state*)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); + if (!pDecomp) return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pDecomp; + + tinfl_init(&pDecomp->m_decomp); + pDecomp->m_dict_ofs = 0; + pDecomp->m_dict_avail = 0; + pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; + pDecomp->m_first_call = 1; + pDecomp->m_has_flushed = 0; + pDecomp->m_window_bits = window_bits; + + return MZ_OK; +} + +int mz_inflateInit(mz_streamp pStream) +{ + return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); +} + +int mz_inflate(mz_streamp pStream, int flush) +{ + inflate_state* pState; + mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; + size_t in_bytes, out_bytes, orig_avail_in; + tinfl_status status; + + if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + + pState = (inflate_state*)pStream->state; + if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; + orig_avail_in = pStream->avail_in; + + first_call = pState->m_first_call; pState->m_first_call = 0; + if (pState->m_last_status < 0) return MZ_DATA_ERROR; + + if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + pState->m_has_flushed |= (flush == MZ_FINISH); + + if ((flush == MZ_FINISH) && (first_call)) + { + // MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. + decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); + pState->m_last_status = status; + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tinfl_get_adler32(&pState->m_decomp); + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; + + if (status < 0) + return MZ_DATA_ERROR; + else if (status != TINFL_STATUS_DONE) + { + pState->m_last_status = TINFL_STATUS_FAILED; + return MZ_BUF_ERROR; + } + return MZ_STREAM_END; + } + // flush != MZ_FINISH then we must assume there's more input. + if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; + + if (pState->m_dict_avail) + { + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; + } + + for ( ; ; ) + { + in_bytes = pStream->avail_in; + out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; + + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); + pState->m_last_status = status; + + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); + + pState->m_dict_avail = (mz_uint)out_bytes; + + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + + if (status < 0) + return MZ_DATA_ERROR; // Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). + else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) + return MZ_BUF_ERROR; // Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. + else if (flush == MZ_FINISH) + { + // The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. + if (status == TINFL_STATUS_DONE) + return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; + // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. + else if (!pStream->avail_out) + return MZ_BUF_ERROR; + } + else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) + break; + } + + return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; +} + +int mz_inflateEnd(mz_streamp pStream) +{ + if (!pStream) + return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + mz_stream stream; + int status; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_inflateInit(&stream); + if (status != MZ_OK) + return status; + + status = mz_inflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_inflateEnd(&stream); + return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; + } + *pDest_len = stream.total_out; + + return mz_inflateEnd(&stream); +} + +const char *mz_error(int err) +{ + static struct { int m_err; const char *m_pDesc; } s_error_descs[] = + { + { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, + { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } + }; + mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; + return NULL; +} + +#endif //MINIZ_NO_ZLIB_APIS + +// ------------------- Low-level Decompression (completely independent from all compression API's) + +#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) +#define TINFL_MEMSET(p, c, l) memset(p, c, l) + +#define TINFL_CR_BEGIN switch(r->m_state) { case 0: +#define TINFL_CR_RETURN(state_index, result) do { status = result; r->m_state = state_index; goto common_exit; case state_index:; } MZ_MACRO_END +#define TINFL_CR_RETURN_FOREVER(state_index, result) do { for ( ; ; ) { TINFL_CR_RETURN(state_index, result); } } MZ_MACRO_END +#define TINFL_CR_FINISH } + +// TODO: If the caller has indicated that there's no more input, and we attempt to read beyond the input buf, then something is wrong with the input because the inflator never +// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of the stream with 0's in this scenario. +#define TINFL_GET_BYTE(state_index, c) do { \ + if (pIn_buf_cur >= pIn_buf_end) { \ + for ( ; ; ) { \ + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ + TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ + if (pIn_buf_cur < pIn_buf_end) { \ + c = *pIn_buf_cur++; \ + break; \ + } \ + } else { \ + c = 0; \ + break; \ + } \ + } \ + } else c = *pIn_buf_cur++; } MZ_MACRO_END + +#define TINFL_NEED_BITS(state_index, n) do { mz_uint c; TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; } while (num_bits < (mz_uint)(n)) +#define TINFL_SKIP_BITS(state_index, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END +#define TINFL_GET_BITS(state_index, b, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } b = bit_buf & ((1 << (n)) - 1); bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END + +// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. +// It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a +// Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the +// bit buffer contains >=15 bits (deflate's max. Huffman code size). +#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ + do { \ + temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ + if (temp >= 0) { \ + code_len = temp >> 9; \ + if ((code_len) && (num_bits >= code_len)) \ + break; \ + } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while ((temp < 0) && (num_bits >= (code_len + 1))); if (temp >= 0) break; \ + } TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; \ + } while (num_bits < 15); + +// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read +// beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully +// decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. +// The slow path is only executed at the very end of the input buffer. +#define TINFL_HUFF_DECODE(state_index, sym, pHuff) do { \ + int temp; mz_uint code_len, c; \ + if (num_bits < 15) { \ + if ((pIn_buf_end - pIn_buf_cur) < 2) { \ + TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ + } else { \ + bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); pIn_buf_cur += 2; num_bits += 16; \ + } \ + } \ + if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ + code_len = temp >> 9, temp &= 511; \ + else { \ + code_len = TINFL_FAST_LOOKUP_BITS; do { temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; } while (temp < 0); \ + } sym = temp; bit_buf >>= code_len; num_bits -= code_len; } MZ_MACRO_END + +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) +{ + static const int s_length_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 }; + static const int s_length_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + static const int s_dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + static const int s_dist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + static const mz_uint8 s_length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + static const int s_min_table_sizes[3] = { 257, 1, 4 }; + + tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; + const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; + mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; + size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; + + // Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). + if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } + + num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; + TINFL_CR_BEGIN + + bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); + counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); + if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4))))); + if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } + } + + do + { + TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; + if (r->m_type == 0) + { + TINFL_SKIP_BITS(5, num_bits & 7); + for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } + if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } + while ((counter) && (num_bits)) + { + TINFL_GET_BITS(51, dist, 8); + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)dist; + counter--; + } + while (counter) + { + size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } + while (pIn_buf_cur >= pIn_buf_end) + { + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) + { + TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT); + } + else + { + TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED); + } + } + n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); + TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; + } + } + else if (r->m_type == 3) + { + TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); + } + else + { + if (r->m_type == 1) + { + mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; + r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); + for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8; + } + else + { + for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } + MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; } + r->m_table_sizes[2] = 19; + } + for ( ; (int)r->m_type >= 0; r->m_type--) + { + int tree_next, tree_cur; tinfl_huff_table *pTable; + mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree); + for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++; + used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; + for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } + if ((65536 != total) && (used_syms > 1)) + { + TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); + } + for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) + { + mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; if (!code_size) continue; + cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); + if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; } + if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } + rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); + for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) + { + tree_cur -= ((rev_code >>= 1) & 1); + if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1]; + } + tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; + } + if (r->m_type == 2) + { + for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]); ) + { + mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } + if ((dist == 16) && (!counter)) + { + TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); + } + num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; + TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; + } + if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) + { + TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); + } + TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); + } + } + for ( ; ; ) + { + mz_uint8 *pSrc; + for ( ; ; ) + { + if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) + { + TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); + if (counter >= 256) + break; + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)counter; + } + else + { + int sym2; mz_uint code_len; +#if TINFL_USE_64BIT_BITBUF + if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } +#else + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + counter = sym2; bit_buf >>= code_len; num_bits -= code_len; + if (counter & 256) + break; + +#if !TINFL_USE_64BIT_BITBUF + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + bit_buf >>= code_len; num_bits -= code_len; + + pOut_buf_cur[0] = (mz_uint8)counter; + if (sym2 & 256) + { + pOut_buf_cur++; + counter = sym2; + break; + } + pOut_buf_cur[1] = (mz_uint8)sym2; + pOut_buf_cur += 2; + } + } + if ((counter &= 511) == 256) break; + + num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } + + TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); + num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } + + dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; + if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) + { + TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); + } + + pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); + + if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) + { + while (counter--) + { + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; + } + continue; + } +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + else if ((counter >= 9) && (counter <= dist)) + { + const mz_uint8 *pSrc_end = pSrc + (counter & ~7); + do + { + ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; + ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; + pOut_buf_cur += 8; + } while ((pSrc += 8) < pSrc_end); + if ((counter &= 7) < 3) + { + if (counter) + { + pOut_buf_cur[0] = pSrc[0]; + if (counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + continue; + } + } +#endif + do + { + pOut_buf_cur[0] = pSrc[0]; + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur[2] = pSrc[2]; + pOut_buf_cur += 3; pSrc += 3; + } while ((int)(counter -= 3) > 2); + if ((int)counter > 0) + { + pOut_buf_cur[0] = pSrc[0]; + if ((int)counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + } + } + } while (!(r->m_final & 1)); + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_SKIP_BITS(32, num_bits & 7); for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } + } + TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); + TINFL_CR_FINISH + +common_exit: + r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; + *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; + if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + { + const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; + mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; + while (buf_len) + { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) + { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; + } + return status; +} + +// Higher level helper functions. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; + *pOut_len = 0; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8*)pBuf, pBuf ? (mz_uint8*)pBuf + *pOut_len : NULL, &dst_buf_size, + (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + src_buf_ofs += src_buf_size; + *pOut_len += dst_buf_size; + if (status == TINFL_STATUS_DONE) break; + new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; + pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); + if (!pNew_buf) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; + } + return pBuf; +} + +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); + status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf, &src_buf_len, (mz_uint8*)pOut_buf, (mz_uint8*)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; +} + +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + int result = 0; + tinfl_decompressor decomp; + mz_uint8 *pDict = (mz_uint8*)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; + if (!pDict) + return TINFL_STATUS_FAILED; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, + (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); + in_buf_ofs += in_buf_size; + if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) + break; + if (status != TINFL_STATUS_HAS_MORE_OUTPUT) + { + result = (status == TINFL_STATUS_DONE); + break; + } + dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); + } + MZ_FREE(pDict); + *pIn_buf_size = in_buf_ofs; + return result; +} + +#ifndef MINIZ_NO_COMPRESSION +// ------------------- Low-level Compression (independent from all decompression API's) + +// Purposely making these tables static for faster init and thread safety. +static const mz_uint16 s_tdefl_len_sym[256] = { + 257,258,259,260,261,262,263,264,265,265,266,266,267,267,268,268,269,269,269,269,270,270,270,270,271,271,271,271,272,272,272,272, + 273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,276, + 277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278, + 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280, + 281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281, + 282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282, + 283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, + 284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285 }; + +static const mz_uint8 s_tdefl_len_extra[256] = { + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0 }; + +static const mz_uint8 s_tdefl_small_dist_sym[512] = { + 0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 }; + +static const mz_uint8 s_tdefl_small_dist_extra[512] = { + 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7 }; + +static const mz_uint8 s_tdefl_large_dist_sym[128] = { + 0,0,18,19,20,20,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 }; + +static const mz_uint8 s_tdefl_large_dist_extra[128] = { + 0,0,8,8,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 }; + +// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. +typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; +static tdefl_sym_freq* tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq* pSyms0, tdefl_sym_freq* pSyms1) +{ + mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq* pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist); + for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } + while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; + for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) + { + const mz_uint32* pHist = &hist[pass << 8]; + mz_uint offsets[256], cur_ofs = 0; + for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } + for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; + { tdefl_sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } + } + return pCur_syms; +} + +// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. +static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) +{ + int root, leaf, next, avbl, used, dpth; + if (n==0) return; else if (n==1) { A[0].m_key = 1; return; } + A[0].m_key += A[1].m_key; root = 0; leaf = 2; + for (next=1; next < n-1; next++) + { + if (leaf>=n || A[root].m_key=n || (root=0; next--) A[next].m_key = A[A[next].m_key].m_key+1; + avbl = 1; used = dpth = 0; root = n-2; next = n-1; + while (avbl>0) + { + while (root>=0 && (int)A[root].m_key==dpth) { used++; root--; } + while (avbl>used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } + avbl = 2*used; dpth++; used = 0; + } +} + +// Limits canonical Huffman code table's max code size. +enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; +static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) +{ + int i; mz_uint32 total = 0; if (code_list_len <= 1) return; + for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; + for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); + while (total != (1UL << max_code_size)) + { + pNum_codes[max_code_size]--; + for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } + total--; + } +} + +static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) +{ + int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes); + if (static_table) + { + for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; + } + else + { + tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; + int num_used_syms = 0; + const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; + for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } + + pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); + + for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; + + tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); + + MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); + for (i = 1, j = num_used_syms; i <= code_size_limit; i++) + for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); + } + + next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); + + for (i = 0; i < table_len; i++) + { + mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; + code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); + d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; + } +} + +#define TDEFL_PUT_BITS(b, l) do { \ + mz_uint bits = b; mz_uint len = l; MZ_ASSERT(bits <= ((1U << len) - 1U)); \ + d->m_bit_buffer |= (bits << d->m_bits_in); d->m_bits_in += len; \ + while (d->m_bits_in >= 8) { \ + if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ + *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ + d->m_bit_buffer >>= 8; \ + d->m_bits_in -= 8; \ + } \ +} MZ_MACRO_END + +#define TDEFL_RLE_PREV_CODE_SIZE() { if (rle_repeat_count) { \ + if (rle_repeat_count < 3) { \ + d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ + while (rle_repeat_count--) packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ + } else { \ + d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); packed_code_sizes[num_packed_code_sizes++] = 16; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ +} rle_repeat_count = 0; } } + +#define TDEFL_RLE_ZERO_CODE_SIZE() { if (rle_z_count) { \ + if (rle_z_count < 3) { \ + d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ + } else if (rle_z_count <= 10) { \ + d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); packed_code_sizes[num_packed_code_sizes++] = 17; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ + } else { \ + d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); packed_code_sizes[num_packed_code_sizes++] = 18; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ +} rle_z_count = 0; } } + +static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + +static void tdefl_start_dynamic_block(tdefl_compressor *d) +{ + int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; + mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; + + d->m_huff_count[0][256] = 1; + + tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); + tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); + + for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; + for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; + + memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); + memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); + total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; + + memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); + for (i = 0; i < total_code_sizes_to_pack; i++) + { + mz_uint8 code_size = code_sizes_to_pack[i]; + if (!code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } + } + else + { + TDEFL_RLE_ZERO_CODE_SIZE(); + if (code_size != prev_code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; + } + else if (++rle_repeat_count == 6) + { + TDEFL_RLE_PREV_CODE_SIZE(); + } + } + prev_code_size = code_size; + } + if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } + + tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); + + TDEFL_PUT_BITS(2, 2); + + TDEFL_PUT_BITS(num_lit_codes - 257, 5); + TDEFL_PUT_BITS(num_dist_codes - 1, 5); + + for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; + num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); + for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); + + for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes; ) + { + mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); + TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); + if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); + } +} + +static void tdefl_start_static_block(tdefl_compressor *d) +{ + mz_uint i; + mz_uint8 *p = &d->m_huff_code_sizes[0][0]; + + for (i = 0; i <= 143; ++i) *p++ = 8; + for ( ; i <= 255; ++i) *p++ = 9; + for ( ; i <= 279; ++i) *p++ = 7; + for ( ; i <= 287; ++i) *p++ = 8; + + memset(d->m_huff_code_sizes[1], 5, 32); + + tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); + tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); + + TDEFL_PUT_BITS(1, 2); +} + +static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + mz_uint8 *pOutput_buf = d->m_pOutput_buf; + mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; + mz_uint64 bit_buffer = d->m_bit_buffer; + mz_uint bits_in = d->m_bits_in; + +#define TDEFL_PUT_BITS_FAST(b, l) { bit_buffer |= (((mz_uint64)(b)) << bits_in); bits_in += (l); } + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + + if (flags & 1) + { + mz_uint s0, s1, n0, n1, sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + // This sequence coaxes MSVC into using cmov's vs. jmp's. + s0 = s_tdefl_small_dist_sym[match_dist & 511]; + n0 = s_tdefl_small_dist_extra[match_dist & 511]; + s1 = s_tdefl_large_dist_sym[match_dist >> 8]; + n1 = s_tdefl_large_dist_extra[match_dist >> 8]; + sym = (match_dist < 512) ? s0 : s1; + num_extra_bits = (match_dist < 512) ? n0 : n1; + + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + } + + if (pOutput_buf >= d->m_pOutput_buf_end) + return MZ_FALSE; + + *(mz_uint64*)pOutput_buf = bit_buffer; + pOutput_buf += (bits_in >> 3); + bit_buffer >>= (bits_in & ~7); + bits_in &= 7; + } + +#undef TDEFL_PUT_BITS_FAST + + d->m_pOutput_buf = pOutput_buf; + d->m_bits_in = 0; + d->m_bit_buffer = 0; + + while (bits_in) + { + mz_uint32 n = MZ_MIN(bits_in, 16); + TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); + bit_buffer >>= n; + bits_in -= n; + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#else +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + if (flags & 1) + { + mz_uint sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + if (match_dist < 512) + { + sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; + } + else + { + sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; + } + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS + +static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) +{ + if (static_block) + tdefl_start_static_block(d); + else + tdefl_start_dynamic_block(d); + return tdefl_compress_lz_codes(d); +} + +static int tdefl_flush_block(tdefl_compressor *d, int flush) +{ + mz_uint saved_bit_buf, saved_bits_in; + mz_uint8 *pSaved_output_buf; + mz_bool comp_block_succeeded = MZ_FALSE; + int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; + mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; + + d->m_pOutput_buf = pOutput_buf_start; + d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; + + MZ_ASSERT(!d->m_output_flush_remaining); + d->m_output_flush_ofs = 0; + d->m_output_flush_remaining = 0; + + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); + d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); + + if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) + { + TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8); + } + + TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); + + pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; + + if (!use_raw_block) + comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); + + // If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. + if ( ((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && + ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size) ) + { + mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + TDEFL_PUT_BITS(0, 2); + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) + { + TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); + } + for (i = 0; i < d->m_total_lz_bytes; ++i) + { + TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); + } + } + // Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. + else if (!comp_block_succeeded) + { + d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + tdefl_compress_block(d, MZ_TRUE); + } + + if (flush) + { + if (flush == TDEFL_FINISH) + { + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } + } + else + { + mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } + } + } + + MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); + + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; + + if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) + { + if (d->m_pPut_buf_func) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) + return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); + } + else if (pOutput_buf_start == d->m_output_buf) + { + int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); + d->m_out_buf_ofs += bytes_to_copy; + if ((n -= bytes_to_copy) != 0) + { + d->m_output_flush_ofs = bytes_to_copy; + d->m_output_flush_remaining = n; + } + } + else + { + d->m_out_buf_ofs += n; + } + } + + return d->m_output_flush_remaining; +} + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES +#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p) +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint16 *s = (const mz_uint16*)(d->m_dict + pos), *p, *q; + mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; q = (const mz_uint16*)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; p = s; probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + if (!probe_len) + { + *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN); break; + } + else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8*)p == *(const mz_uint8*)q)) > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; + c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); + } + } +} +#else +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint8 *s = d->m_dict + pos, *p, *q; + mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; + if (probe_len > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; + c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; + } + } +} +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN +static mz_bool tdefl_compress_fast(tdefl_compressor *d) +{ + // Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. + mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; + mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; + mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + + while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) + { + const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; + mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); + d->m_src_buf_left -= num_bytes_to_process; + lookahead_size += num_bytes_to_process; + + while (num_bytes_to_process) + { + mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); + memcpy(d->m_dict + dst_pos, d->m_pSrc, n); + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); + d->m_pSrc += n; + dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; + num_bytes_to_process -= n; + } + + dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); + if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; + + while (lookahead_size >= 4) + { + mz_uint cur_match_dist, cur_match_len = 1; + mz_uint8 *pCur_dict = d->m_dict + cur_pos; + mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; + mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; + mz_uint probe_pos = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)lookahead_pos; + + if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) + { + const mz_uint16 *p = (const mz_uint16 *)pCur_dict; + const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); + mz_uint32 probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); + if (!probe_len) + cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; + + if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U))) + { + cur_match_len = 1; + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + else + { + mz_uint32 s0, s1; + cur_match_len = MZ_MIN(cur_match_len, lookahead_size); + + MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); + + cur_match_dist--; + + pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); + *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; + pLZ_code_buf += 3; + *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); + + s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; + s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; + d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; + + d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; + } + } + else + { + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + total_lz_bytes += cur_match_len; + lookahead_pos += cur_match_len; + dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; + MZ_ASSERT(lookahead_size >= cur_match_len); + lookahead_size -= cur_match_len; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + + while (lookahead_size) + { + mz_uint8 lit = d->m_dict[cur_pos]; + + total_lz_bytes++; + *pLZ_code_buf++ = lit; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + d->m_huff_count[0][lit]++; + + lookahead_pos++; + dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; + lookahead_size--; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + } + + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + return MZ_TRUE; +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + +static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) +{ + d->m_total_lz_bytes++; + *d->m_pLZ_code_buf++ = lit; + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + d->m_huff_count[0][lit]++; +} + +static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) +{ + mz_uint32 s0, s1; + + MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); + + d->m_total_lz_bytes += match_len; + + d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); + + match_dist -= 1; + d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); + d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; + + *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + + s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; + d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; + + if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; +} + +static mz_bool tdefl_compress_normal(tdefl_compressor *d) +{ + const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; + tdefl_flush flush = d->m_flush; + + while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) + { + mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; + // Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. + if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) + { + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; + mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); + const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; + src_buf_left -= num_bytes_to_process; + d->m_lookahead_size += num_bytes_to_process; + while (pSrc != pSrc_end) + { + mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; + } + } + else + { + while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + { + mz_uint8 c = *pSrc++; + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + src_buf_left--; + d->m_dict[dst_pos] = c; + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) + { + mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; + mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + } + } + } + d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); + if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + break; + + // Simple lazy/greedy parsing state machine. + len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) + { + if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) + { + mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; + cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } + if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; + } + } + else + { + tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); + } + if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) + { + cur_match_dist = cur_match_len = 0; + } + if (d->m_saved_match_len) + { + if (cur_match_len > d->m_saved_match_len) + { + tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); + if (cur_match_len >= 128) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + d->m_saved_match_len = 0; len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + } + else + { + tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); + len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; + } + } + else if (!cur_match_dist) + tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); + else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + // Move the lookahead forward by len_to_move bytes. + d->m_lookahead_pos += len_to_move; + MZ_ASSERT(d->m_lookahead_size >= len_to_move); + d->m_lookahead_size -= len_to_move; + d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, TDEFL_LZ_DICT_SIZE); + // Check if it's time to flush the current LZ codes to the internal output buffer. + if ( (d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || + ( (d->m_total_lz_bytes > 31*1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) ) + { + int n; + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + } + } + + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + return MZ_TRUE; +} + +static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) +{ + if (d->m_pIn_buf_size) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + } + + if (d->m_pOut_buf_size) + { + size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); + d->m_output_flush_ofs += (mz_uint)n; + d->m_output_flush_remaining -= (mz_uint)n; + d->m_out_buf_ofs += n; + + *d->m_pOut_buf_size = d->m_out_buf_ofs; + } + + return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) +{ + if (!d) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return TDEFL_STATUS_BAD_PARAM; + } + + d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; + d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; + d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; + d->m_out_buf_ofs = 0; + d->m_flush = flush; + + if ( ((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || + (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf) ) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); + } + d->m_wants_to_finish |= (flush == TDEFL_FINISH); + + if ((d->m_output_flush_remaining) || (d->m_finished)) + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && + ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && + ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) + { + if (!tdefl_compress_fast(d)) + return d->m_prev_return_status; + } + else +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + { + if (!tdefl_compress_normal(d)) + return d->m_prev_return_status; + } + + if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) + d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); + + if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) + { + if (tdefl_flush_block(d, flush) < 0) + return d->m_prev_return_status; + d->m_finished = (flush == TDEFL_FINISH); + if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; } + } + + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); +} + +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) +{ + MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); +} + +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; + d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; + d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; + if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); + d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; + d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; + d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; + d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; + d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; + d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; + d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + return TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) +{ + return d->m_prev_return_status; +} + +mz_uint32 tdefl_get_adler32(tdefl_compressor *d) +{ + return d->m_adler32; +} + +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; + pComp = (tdefl_compressor*)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; + succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); + succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); + MZ_FREE(pComp); return succeeded; +} + +typedef struct +{ + size_t m_size, m_capacity; + mz_uint8 *m_pBuf; + mz_bool m_expandable; +} tdefl_output_buffer; + +static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) +{ + tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; + size_t new_size = p->m_size + len; + if (new_size > p->m_capacity) + { + size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; + do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); + pNew_buf = (mz_uint8*)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; + p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; + } + memcpy((mz_uint8*)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; + return MZ_TRUE; +} + +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; + out_buf.m_expandable = MZ_TRUE; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; + *pOut_len = out_buf.m_size; return out_buf.m_pBuf; +} + +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_buf) return 0; + out_buf.m_pBuf = (mz_uint8*)pOut_buf; out_buf.m_capacity = out_buf_len; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; + return out_buf.m_size; +} + +#ifndef MINIZ_NO_ZLIB_APIS +static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + +// level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) +{ + mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); + if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; + + if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; + else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; + else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; + else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; + else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; + + return comp_flags; +} +#endif //MINIZ_NO_ZLIB_APIS + +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable:4204) // nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) +#endif + +// Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at +// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. +// This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) +{ + // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. + static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; + if (!pComp) return NULL; + MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57+MZ_MAX(64, (1+bpl)*h); if (NULL == (out_buf.m_pBuf = (mz_uint8*)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } + // write dummy header + for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); + // compress image data + tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); + for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8*)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } + if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + // write real header + *pLen_out = out_buf.m_size-41; + { + static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; + mz_uint8 pnghdr[41]={0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, + 0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8,chans[num_chans],0,0,0,0,0,0,0, + (mz_uint8)(*pLen_out>>24),(mz_uint8)(*pLen_out>>16),(mz_uint8)(*pLen_out>>8),(mz_uint8)*pLen_out,0x49,0x44,0x41,0x54}; + c=(mz_uint32)mz_crc32(MZ_CRC32_INIT,pnghdr+12,17); for (i=0; i<4; ++i, c<<=8) ((mz_uint8*)(pnghdr+29))[i]=(mz_uint8)(c>>24); + memcpy(out_buf.m_pBuf, pnghdr, 41); + } + // write footer (IDAT CRC-32, followed by IEND chunk) + if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + c = (mz_uint32)mz_crc32(MZ_CRC32_INIT,out_buf.m_pBuf+41-4, *pLen_out+4); for (i=0; i<4; ++i, c<<=8) (out_buf.m_pBuf+out_buf.m_size-16)[i] = (mz_uint8)(c >> 24); + // compute final size of file, grab compressed data buffer and return + *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; +} +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) +{ + // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) + return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); +} + +#endif // MINIZ_NO_COMPRESSION + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +// ------------------- .ZIP archive reading + +#ifndef MINIZ_NO_ARCHIVE_APIS + +#ifdef MINIZ_NO_STDIO + #define MZ_FILE void * +#else + #include + #include + + #if defined(_MSC_VER) || defined(__MINGW64__) + static FILE *mz_fopen(const char *pFilename, const char *pMode) + { + FILE* pFile = NULL; + fopen_s(&pFile, pFilename, pMode); + return pFile; + } + static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) + { + FILE* pFile = NULL; + if (freopen_s(&pFile, pPath, pMode, pStream)) + return NULL; + return pFile; + } + #ifndef MINIZ_NO_TIME + #include + #endif + #define MZ_FILE FILE + #define MZ_FOPEN mz_fopen + #define MZ_FCLOSE fclose + #define MZ_FREAD fread + #define MZ_FWRITE fwrite + #define MZ_FTELL64 _ftelli64 + #define MZ_FSEEK64 _fseeki64 + #define MZ_FILE_STAT_STRUCT _stat + #define MZ_FILE_STAT _stat + #define MZ_FFLUSH fflush + #define MZ_FREOPEN mz_freopen + #define MZ_DELETE_FILE remove + #elif defined(__MINGW32__) + #ifndef MINIZ_NO_TIME + #include + #endif + #define MZ_FILE FILE + #define MZ_FOPEN(f, m) fopen(f, m) + #define MZ_FCLOSE fclose + #define MZ_FREAD fread + #define MZ_FWRITE fwrite + #define MZ_FTELL64 ftello64 + #define MZ_FSEEK64 fseeko64 + #define MZ_FILE_STAT_STRUCT _stat + #define MZ_FILE_STAT _stat + #define MZ_FFLUSH fflush + #define MZ_FREOPEN(f, m, s) freopen(f, m, s) + #define MZ_DELETE_FILE remove + #elif defined(__TINYC__) + #ifndef MINIZ_NO_TIME + #include + #endif + #define MZ_FILE FILE + #define MZ_FOPEN(f, m) fopen(f, m) + #define MZ_FCLOSE fclose + #define MZ_FREAD fread + #define MZ_FWRITE fwrite + #define MZ_FTELL64 ftell + #define MZ_FSEEK64 fseek + #define MZ_FILE_STAT_STRUCT stat + #define MZ_FILE_STAT stat + #define MZ_FFLUSH fflush + #define MZ_FREOPEN(f, m, s) freopen(f, m, s) + #define MZ_DELETE_FILE remove + #elif defined(__GNUC__) && _LARGEFILE64_SOURCE + #ifndef MINIZ_NO_TIME + #include + #endif + #define MZ_FILE FILE + #define MZ_FOPEN(f, m) fopen64(f, m) + #define MZ_FCLOSE fclose + #define MZ_FREAD fread + #define MZ_FWRITE fwrite + #define MZ_FTELL64 ftello64 + #define MZ_FSEEK64 fseeko64 + #define MZ_FILE_STAT_STRUCT stat64 + #define MZ_FILE_STAT stat64 + #define MZ_FFLUSH fflush + #define MZ_FREOPEN(p, m, s) freopen64(p, m, s) + #define MZ_DELETE_FILE remove + #else + #ifndef MINIZ_NO_TIME + #include + #endif + #define MZ_FILE FILE + #define MZ_FOPEN(f, m) fopen(f, m) + #define MZ_FCLOSE fclose + #define MZ_FREAD fread + #define MZ_FWRITE fwrite + #define MZ_FTELL64 ftello + #define MZ_FSEEK64 fseeko + #define MZ_FILE_STAT_STRUCT stat + #define MZ_FILE_STAT stat + #define MZ_FFLUSH fflush + #define MZ_FREOPEN(f, m, s) freopen(f, m, s) + #define MZ_DELETE_FILE remove + #endif // #ifdef _MSC_VER +#endif // #ifdef MINIZ_NO_STDIO + +#define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) + +// Various ZIP archive enums. To completely avoid cross platform compiler alignment and platform endian issues, miniz.c doesn't use structs for any of this stuff. +enum +{ + // ZIP archive identifiers and record sizes + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50, MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50, MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50, + MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, + // Central directory header record offsets + MZ_ZIP_CDH_SIG_OFS = 0, MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6, MZ_ZIP_CDH_BIT_FLAG_OFS = 8, + MZ_ZIP_CDH_METHOD_OFS = 10, MZ_ZIP_CDH_FILE_TIME_OFS = 12, MZ_ZIP_CDH_FILE_DATE_OFS = 14, MZ_ZIP_CDH_CRC32_OFS = 16, + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20, MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24, MZ_ZIP_CDH_FILENAME_LEN_OFS = 28, MZ_ZIP_CDH_EXTRA_LEN_OFS = 30, + MZ_ZIP_CDH_COMMENT_LEN_OFS = 32, MZ_ZIP_CDH_DISK_START_OFS = 34, MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36, MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38, MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42, + // Local directory header offsets + MZ_ZIP_LDH_SIG_OFS = 0, MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4, MZ_ZIP_LDH_BIT_FLAG_OFS = 6, MZ_ZIP_LDH_METHOD_OFS = 8, MZ_ZIP_LDH_FILE_TIME_OFS = 10, + MZ_ZIP_LDH_FILE_DATE_OFS = 12, MZ_ZIP_LDH_CRC32_OFS = 14, MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18, MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22, + MZ_ZIP_LDH_FILENAME_LEN_OFS = 26, MZ_ZIP_LDH_EXTRA_LEN_OFS = 28, + // End of central directory offsets + MZ_ZIP_ECDH_SIG_OFS = 0, MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4, MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6, MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8, + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10, MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, +}; + +typedef struct +{ + void *m_p; + size_t m_size, m_capacity; + mz_uint m_element_size; +} mz_zip_array; + +struct mz_zip_internal_state_tag +{ + mz_zip_array m_central_dir; + mz_zip_array m_central_dir_offsets; + mz_zip_array m_sorted_central_dir_offsets; + MZ_FILE *m_pFile; + void *m_pMem; + size_t m_mem_size; + size_t m_mem_capacity; +}; + +#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) (array_ptr)->m_element_size = element_size +#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[index] + +static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, mz_zip_array *pArray) +{ + pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p); + memset(pArray, 0, sizeof(mz_zip_array)); +} + +static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, mz_zip_array *pArray, size_t min_new_capacity, mz_uint growing) +{ + void *pNew_p; size_t new_capacity = min_new_capacity; MZ_ASSERT(pArray->m_element_size); if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE; + if (growing) { new_capacity = MZ_MAX(1, pArray->m_capacity); while (new_capacity < min_new_capacity) new_capacity *= 2; } + if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, pArray->m_element_size, new_capacity))) return MZ_FALSE; + pArray->m_p = pNew_p; pArray->m_capacity = new_capacity; + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_capacity, mz_uint growing) +{ + if (new_capacity > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) return MZ_FALSE; } + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, mz_uint growing) +{ + if (new_size > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) return MZ_FALSE; } + pArray->m_size = new_size; + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) +{ + return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, const void *pElements, size_t n) +{ + size_t orig_size = pArray->m_size; if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) return MZ_FALSE; + memcpy((mz_uint8*)pArray->m_p + orig_size * pArray->m_element_size, pElements, n * pArray->m_element_size); + return MZ_TRUE; +} + +#ifndef MINIZ_NO_TIME +static time_t mz_zip_dos_to_time_t(int dos_time, int dos_date) +{ + struct tm tm; + memset(&tm, 0, sizeof(tm)); tm.tm_isdst = -1; + tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900; tm.tm_mon = ((dos_date >> 5) & 15) - 1; tm.tm_mday = dos_date & 31; + tm.tm_hour = (dos_time >> 11) & 31; tm.tm_min = (dos_time >> 5) & 63; tm.tm_sec = (dos_time << 1) & 62; + return mktime(&tm); +} + +static void mz_zip_time_to_dos_time(time_t time, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date) +{ +#ifdef _MSC_VER + struct tm tm_struct; + struct tm *tm = &tm_struct; + errno_t err = localtime_s(tm, &time); + if (err) + { + *pDOS_date = 0; *pDOS_time = 0; + return; + } +#else + struct tm *tm = localtime(&time); +#endif + *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + ((tm->tm_sec) >> 1)); + *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday); +} +#endif + +#ifndef MINIZ_NO_STDIO +static mz_bool mz_zip_get_file_modified_time(const char *pFilename, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date) +{ +#ifdef MINIZ_NO_TIME + (void)pFilename; *pDOS_date = *pDOS_time = 0; +#else + struct MZ_FILE_STAT_STRUCT file_stat; + // On Linux with x86 glibc, this call will fail on large files (>= 0x80000000 bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. + if (MZ_FILE_STAT(pFilename, &file_stat) != 0) + return MZ_FALSE; + mz_zip_time_to_dos_time(file_stat.st_mtime, pDOS_time, pDOS_date); +#endif // #ifdef MINIZ_NO_TIME + return MZ_TRUE; +} + +#ifndef MINIZ_NO_TIME +static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, time_t modified_time) +{ + struct utimbuf t; t.actime = access_time; t.modtime = modified_time; + return !utime(pFilename, &t); +} +#endif // #ifndef MINIZ_NO_TIME +#endif // #ifndef MINIZ_NO_STDIO + +static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint32 flags) +{ + (void)flags; + if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) + return MZ_FALSE; + + if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; + if (!pZip->m_pFree) pZip->m_pFree = def_free_func; + if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; + + pZip->m_zip_mode = MZ_ZIP_MODE_READING; + pZip->m_archive_size = 0; + pZip->m_central_directory_file_ofs = 0; + pZip->m_total_files = 0; + + if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) + return MZ_FALSE; + memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index) +{ + const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; + const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); + mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); + mz_uint8 l = 0, r = 0; + pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + pE = pL + MZ_MIN(l_len, r_len); + while (pL < pE) + { + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) + break; + pL++; pR++; + } + return (pL == pE) ? (l_len < r_len) : (l < r); +} + +#define MZ_SWAP_UINT32(a, b) do { mz_uint32 t = a; a = b; b = t; } MZ_MACRO_END + +// Heap sort of lowercased filenames, used to help accelerate plain central directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), but it could allocate memory.) +static void mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) +{ + mz_zip_internal_state *pState = pZip->m_pState; + const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; + const mz_zip_array *pCentral_dir = &pState->m_central_dir; + mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); + const int size = pZip->m_total_files; + int start = (size - 2) >> 1, end; + while (start >= 0) + { + int child, root = start; + for ( ; ; ) + { + if ((child = (root << 1) + 1) >= size) + break; + child += (((child + 1) < size) && (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1]))); + if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) + break; + MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; + } + start--; + } + + end = size - 1; + while (end > 0) + { + int child, root = 0; + MZ_SWAP_UINT32(pIndices[end], pIndices[0]); + for ( ; ; ) + { + if ((child = (root << 1) + 1) >= end) + break; + child += (((child + 1) < end) && mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1])); + if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) + break; + MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; + } + end--; + } +} + +static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_uint32 flags) +{ + mz_uint cdir_size, num_this_disk, cdir_disk_index; + mz_uint64 cdir_ofs; + mz_int64 cur_file_ofs; + const mz_uint8 *p; + mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; mz_uint8 *pBuf = (mz_uint8 *)buf_u32; + mz_bool sort_central_dir = ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); + // Basic sanity checks - reject files which are too small, and check the first 4 bytes of the file to make sure a local header is there. + if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return MZ_FALSE; + // Find the end of central directory record by scanning the file from the end towards the beginning. + cur_file_ofs = MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); + for ( ; ; ) + { + int i, n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) + return MZ_FALSE; + for (i = n - 4; i >= 0; --i) + if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) + break; + if (i >= 0) + { + cur_file_ofs += i; + break; + } + if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) + return MZ_FALSE; + cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); + } + // Read and verify the end of central directory record. + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return MZ_FALSE; + if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || + ((pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) + return MZ_FALSE; + + num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); + cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); + if (((num_this_disk | cdir_disk_index) != 0) && ((num_this_disk != 1) || (cdir_disk_index != 1))) + return MZ_FALSE; + + if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) + return MZ_FALSE; + + cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); + if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) + return MZ_FALSE; + + pZip->m_central_directory_file_ofs = cdir_ofs; + + if (pZip->m_total_files) + { + mz_uint i, n; + + // Read the entire central directory into a heap block, and allocate another heap block to hold the unsorted central dir file record offsets, and another to hold the sorted indices. + if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, MZ_FALSE)) || + (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, pZip->m_total_files, MZ_FALSE))) + return MZ_FALSE; + + if (sort_central_dir) + { + if (!mz_zip_array_resize(pZip, &pZip->m_pState->m_sorted_central_dir_offsets, pZip->m_total_files, MZ_FALSE)) + return MZ_FALSE; + } + + if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, pZip->m_pState->m_central_dir.m_p, cdir_size) != cdir_size) + return MZ_FALSE; + + // Now create an index into the central directory file records, do some basic sanity checking on each record, and check for zip64 entries (which are not yet supported). + p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; + for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) + { + mz_uint total_header_size, comp_size, decomp_size, disk_index; + if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) + return MZ_FALSE; + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, i) = (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); + if (sort_central_dir) + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, mz_uint32, i) = i; + comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && (decomp_size != comp_size)) || (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || (comp_size == 0xFFFFFFFF)) + return MZ_FALSE; + disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); + if ((disk_index != num_this_disk) && (disk_index != 1)) + return MZ_FALSE; + if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) + return MZ_FALSE; + if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > n) + return MZ_FALSE; + n -= total_header_size; p += total_header_size; + } + } + + if (sort_central_dir) + mz_zip_reader_sort_central_dir_offsets_by_filename(pZip); + + return MZ_TRUE; +} + +mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint32 flags) +{ + if ((!pZip) || (!pZip->m_pRead)) + return MZ_FALSE; + if (!mz_zip_reader_init_internal(pZip, flags)) + return MZ_FALSE; + pZip->m_archive_size = size; + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end(pZip); + return MZ_FALSE; + } + return MZ_TRUE; +} + +static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + size_t s = (file_ofs >= pZip->m_archive_size) ? 0 : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n); + memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s); + return s; +} + +mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint32 flags) +{ + if (!mz_zip_reader_init_internal(pZip, flags)) + return MZ_FALSE; + pZip->m_archive_size = size; + pZip->m_pRead = mz_zip_mem_read_func; + pZip->m_pIO_opaque = pZip; +#ifdef __cplusplus + pZip->m_pState->m_pMem = const_cast(pMem); +#else + pZip->m_pState->m_pMem = (void *)pMem; +#endif + pZip->m_pState->m_mem_size = size; + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end(pZip); + return MZ_FALSE; + } + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); + if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) + return 0; + return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile); +} + +mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags) +{ + mz_uint64 file_size; + MZ_FILE *pFile = MZ_FOPEN(pFilename, "rb"); + if (!pFile) + return MZ_FALSE; + if (MZ_FSEEK64(pFile, 0, SEEK_END)) + { + MZ_FCLOSE(pFile); + return MZ_FALSE; + } + file_size = MZ_FTELL64(pFile); + if (!mz_zip_reader_init_internal(pZip, flags)) + { + MZ_FCLOSE(pFile); + return MZ_FALSE; + } + pZip->m_pRead = mz_zip_file_read_func; + pZip->m_pIO_opaque = pZip; + pZip->m_pState->m_pFile = pFile; + pZip->m_archive_size = file_size; + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end(pZip); + return MZ_FALSE; + } + return MZ_TRUE; +} +#endif // #ifndef MINIZ_NO_STDIO + +mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) +{ + return pZip ? pZip->m_total_files : 0; +} + +static MZ_FORCEINLINE const mz_uint8 *mz_zip_reader_get_cdh(mz_zip_archive *pZip, mz_uint file_index) +{ + if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + return NULL; + return &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); +} + +mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index) +{ + mz_uint m_bit_flag; + const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); + if (!p) + return MZ_FALSE; + m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + return (m_bit_flag & 1); +} + +mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index) +{ + mz_uint filename_len, external_attr; + const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); + if (!p) + return MZ_FALSE; + + // First see if the filename ends with a '/' character. + filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + if (filename_len) + { + if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/') + return MZ_TRUE; + } + + // Bugfix: This code was also checking if the internal attribute was non-zero, which wasn't correct. + // Most/all zip writers (hopefully) set DOS file/directory attributes in the low 16-bits, so check for the DOS directory flag and ignore the source OS ID in the created by field. + // FIXME: Remove this check? Is it necessary - we already check the filename. + external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); + if ((external_attr & 0x10) != 0) + return MZ_TRUE; + + return MZ_FALSE; +} + +mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) +{ + mz_uint n; + const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); + if ((!p) || (!pStat)) + return MZ_FALSE; + + // Unpack the central directory record. + pStat->m_file_index = file_index; + pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index); + pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS); + pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS); + pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); +#ifndef MINIZ_NO_TIME + pStat->m_time = mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS), MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS)); +#endif + pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS); + pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS); + pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); + pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); + + // Copy as much of the filename and comment as possible. + n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1); + memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); pStat->m_filename[n] = '\0'; + + n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); + pStat->m_comment_size = n; + memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), n); pStat->m_comment[n] = '\0'; + + return MZ_TRUE; +} + +mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size) +{ + mz_uint n; + const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); + if (!p) { if (filename_buf_size) pFilename[0] = '\0'; return 0; } + n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + if (filename_buf_size) + { + n = MZ_MIN(n, filename_buf_size - 1); + memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); + pFilename[n] = '\0'; + } + return n + 1; +} + +static MZ_FORCEINLINE mz_bool mz_zip_reader_string_equal(const char *pA, const char *pB, mz_uint len, mz_uint flags) +{ + mz_uint i; + if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) + return 0 == memcmp(pA, pB, len); + for (i = 0; i < len; ++i) + if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) + return MZ_FALSE; + return MZ_TRUE; +} + +static MZ_FORCEINLINE int mz_zip_reader_filename_compare(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, mz_uint r_len) +{ + const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; + mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); + mz_uint8 l = 0, r = 0; + pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + pE = pL + MZ_MIN(l_len, r_len); + while (pL < pE) + { + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) + break; + pL++; pR++; + } + return (pL == pE) ? (int)(l_len - r_len) : (l - r); +} + +static int mz_zip_reader_locate_file_binary_search(mz_zip_archive *pZip, const char *pFilename) +{ + mz_zip_internal_state *pState = pZip->m_pState; + const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; + const mz_zip_array *pCentral_dir = &pState->m_central_dir; + mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); + const int size = pZip->m_total_files; + const mz_uint filename_len = (mz_uint)strlen(pFilename); + int l = 0, h = size - 1; + while (l <= h) + { + int m = (l + h) >> 1, file_index = pIndices[m], comp = mz_zip_reader_filename_compare(pCentral_dir, pCentral_dir_offsets, file_index, pFilename, filename_len); + if (!comp) + return file_index; + else if (comp < 0) + l = m + 1; + else + h = m - 1; + } + return -1; +} + +int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags) +{ + mz_uint file_index; size_t name_len, comment_len; + if ((!pZip) || (!pZip->m_pState) || (!pName) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + return -1; + if (((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) && (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) + return mz_zip_reader_locate_file_binary_search(pZip, pName); + name_len = strlen(pName); if (name_len > 0xFFFF) return -1; + comment_len = pComment ? strlen(pComment) : 0; if (comment_len > 0xFFFF) return -1; + for (file_index = 0; file_index < pZip->m_total_files; file_index++) + { + const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); + mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); + const char *pFilename = (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + if (filename_len < name_len) + continue; + if (comment_len) + { + mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), file_comment_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS); + const char *pFile_comment = pFilename + filename_len + file_extra_len; + if ((file_comment_len != comment_len) || (!mz_zip_reader_string_equal(pComment, pFile_comment, file_comment_len, flags))) + continue; + } + if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) + { + int ofs = filename_len - 1; + do + { + if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') || (pFilename[ofs] == ':')) + break; + } while (--ofs >= 0); + ofs++; + pFilename += ofs; filename_len -= ofs; + } + if ((filename_len == name_len) && (mz_zip_reader_string_equal(pName, pFilename, filename_len, flags))) + return file_index; + } + return -1; +} + +mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) +{ + int status = TINFL_STATUS_DONE; + mz_uint64 needed_size, cur_file_ofs, comp_remaining, out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail; + mz_zip_archive_file_stat file_stat; + void *pRead_buf; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + tinfl_decompressor inflator; + + if ((buf_size) && (!pBuf)) + return MZ_FALSE; + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + // Empty file, or a directory (but not always a directory - I've seen odd zips with directories that have compressed data which inflates to 0 bytes) + if (!file_stat.m_comp_size) + return MZ_TRUE; + + // Entry is a subdirectory (I've seen old zips with dir entries which have compressed deflate data which inflates to 0 bytes, but these entries claim to uncompress to 512 bytes in the headers). + // I'm torn how to handle this case - should it fail instead? + if (mz_zip_reader_is_file_a_directory(pZip, file_index)) + return MZ_TRUE; + + // Encryption and patch files are not supported. + if (file_stat.m_bit_flag & (1 | 32)) + return MZ_FALSE; + + // This function only supports stored and deflate. + if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) + return MZ_FALSE; + + // Ensure supplied output buffer is large enough. + needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; + if (buf_size < needed_size) + return MZ_FALSE; + + // Read and parse the local directory entry. + cur_file_ofs = file_stat.m_local_header_ofs; + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return MZ_FALSE; + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return MZ_FALSE; + + cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) + return MZ_FALSE; + + if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) + { + // The file is stored or the caller has requested the compressed data. + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, (size_t)needed_size) != needed_size) + return MZ_FALSE; + return ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) != 0) || (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) == file_stat.m_crc32); + } + + // Decompress the file either directly from memory or from a file input buffer. + tinfl_init(&inflator); + + if (pZip->m_pState->m_pMem) + { + // Read directly from the archive in memory. + pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; + read_buf_size = read_buf_avail = file_stat.m_comp_size; + comp_remaining = 0; + } + else if (pUser_read_buf) + { + // Use a user provided read buffer. + if (!user_read_buf_size) + return MZ_FALSE; + pRead_buf = (mz_uint8 *)pUser_read_buf; + read_buf_size = user_read_buf_size; + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + else + { + // Temporarily allocate a read buffer. + read_buf_size = MZ_MIN(file_stat.m_comp_size, MZ_ZIP_MAX_IO_BUF_SIZE); +#ifdef _MSC_VER + if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) +#else + if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) +#endif + return MZ_FALSE; + if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) + return MZ_FALSE; + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + + do + { + size_t in_buf_size, out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs); + if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + status = TINFL_STATUS_FAILED; + break; + } + cur_file_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + read_buf_ofs = 0; + } + in_buf_size = (size_t)read_buf_avail; + status = tinfl_decompress(&inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0)); + read_buf_avail -= in_buf_size; + read_buf_ofs += in_buf_size; + out_buf_ofs += out_buf_size; + } while (status == TINFL_STATUS_NEEDS_MORE_INPUT); + + if (status == TINFL_STATUS_DONE) + { + // Make sure the entire file was decompressed, and check its CRC. + if ((out_buf_ofs != file_stat.m_uncomp_size) || (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32)) + status = TINFL_STATUS_FAILED; + } + + if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf)) + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + + return status == TINFL_STATUS_DONE; +} + +mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) +{ + int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); + if (file_index < 0) + return MZ_FALSE; + return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size); +} + +mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags) +{ + return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, NULL, 0); +} + +mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags) +{ + return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf, buf_size, flags, NULL, 0); +} + +void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags) +{ + mz_uint64 comp_size, uncomp_size, alloc_size; + const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index); + void *pBuf; + + if (pSize) + *pSize = 0; + if (!p) + return NULL; + + comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + + alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size; +#ifdef _MSC_VER + if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) +#else + if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) +#endif + return NULL; + if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size))) + return NULL; + + if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size, flags)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return NULL; + } + + if (pSize) *pSize = (size_t)alloc_size; + return pBuf; +} + +void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags) +{ + int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); + if (file_index < 0) + { + if (pSize) *pSize = 0; + return MZ_FALSE; + } + return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); +} + +mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) +{ + int status = TINFL_STATUS_DONE; mz_uint file_crc32 = MZ_CRC32_INIT; + mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, out_buf_ofs = 0, cur_file_ofs; + mz_zip_archive_file_stat file_stat; + void *pRead_buf = NULL; void *pWrite_buf = NULL; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + // Empty file, or a directory (but not always a directory - I've seen odd zips with directories that have compressed data which inflates to 0 bytes) + if (!file_stat.m_comp_size) + return MZ_TRUE; + + // Entry is a subdirectory (I've seen old zips with dir entries which have compressed deflate data which inflates to 0 bytes, but these entries claim to uncompress to 512 bytes in the headers). + // I'm torn how to handle this case - should it fail instead? + if (mz_zip_reader_is_file_a_directory(pZip, file_index)) + return MZ_TRUE; + + // Encryption and patch files are not supported. + if (file_stat.m_bit_flag & (1 | 32)) + return MZ_FALSE; + + // This function only supports stored and deflate. + if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) + return MZ_FALSE; + + // Read and parse the local directory entry. + cur_file_ofs = file_stat.m_local_header_ofs; + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return MZ_FALSE; + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return MZ_FALSE; + + cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) + return MZ_FALSE; + + // Decompress the file either directly from memory or from a file input buffer. + if (pZip->m_pState->m_pMem) + { + pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; + read_buf_size = read_buf_avail = file_stat.m_comp_size; + comp_remaining = 0; + } + else + { + read_buf_size = MZ_MIN(file_stat.m_comp_size, MZ_ZIP_MAX_IO_BUF_SIZE); + if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) + return MZ_FALSE; + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + + if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) + { + // The file is stored or the caller has requested the compressed data. + if (pZip->m_pState->m_pMem) + { +#ifdef _MSC_VER + if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > 0xFFFFFFFF)) +#else + if (((sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > 0xFFFFFFFF)) +#endif + return MZ_FALSE; + if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)file_stat.m_comp_size) != file_stat.m_comp_size) + status = TINFL_STATUS_FAILED; + else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size); + cur_file_ofs += file_stat.m_comp_size; + out_buf_ofs += file_stat.m_comp_size; + comp_remaining = 0; + } + else + { + while (comp_remaining) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + status = TINFL_STATUS_FAILED; + break; + } + + if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail); + + if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + status = TINFL_STATUS_FAILED; + break; + } + cur_file_ofs += read_buf_avail; + out_buf_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + } + } + } + else + { + tinfl_decompressor inflator; + tinfl_init(&inflator); + + if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) + status = TINFL_STATUS_FAILED; + else + { + do + { + mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); + size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); + if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + status = TINFL_STATUS_FAILED; + break; + } + cur_file_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + read_buf_ofs = 0; + } + + in_buf_size = (size_t)read_buf_avail; + status = tinfl_decompress(&inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size, comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); + read_buf_avail -= in_buf_size; + read_buf_ofs += in_buf_size; + + if (out_buf_size) + { + if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != out_buf_size) + { + status = TINFL_STATUS_FAILED; + break; + } + file_crc32 = (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size); + if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) + { + status = TINFL_STATUS_FAILED; + break; + } + } + } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) || (status == TINFL_STATUS_HAS_MORE_OUTPUT)); + } + } + + if ((status == TINFL_STATUS_DONE) && (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) + { + // Make sure the entire file was decompressed, and check its CRC. + if ((out_buf_ofs != file_stat.m_uncomp_size) || (file_crc32 != file_stat.m_crc32)) + status = TINFL_STATUS_FAILED; + } + + if (!pZip->m_pState->m_pMem) + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + if (pWrite_buf) + pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); + + return status == TINFL_STATUS_DONE; +} + +mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) +{ + int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags); + if (file_index < 0) + return MZ_FALSE; + return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, flags); +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n) +{ + (void)ofs; return MZ_FWRITE(pBuf, 1, n, (MZ_FILE*)pOpaque); +} + +mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags) +{ + mz_bool status; + mz_zip_archive_file_stat file_stat; + MZ_FILE *pFile; + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + pFile = MZ_FOPEN(pDst_filename, "wb"); + if (!pFile) + return MZ_FALSE; + status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); + if (MZ_FCLOSE(pFile) == EOF) + return MZ_FALSE; +#ifndef MINIZ_NO_TIME + if (status) + mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); +#endif + return status; +} +#endif // #ifndef MINIZ_NO_STDIO + +mz_bool mz_zip_reader_end(mz_zip_archive *pZip) +{ + if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + return MZ_FALSE; + + if (pZip->m_pState) + { + mz_zip_internal_state *pState = pZip->m_pState; pZip->m_pState = NULL; + mz_zip_array_clear(pZip, &pState->m_central_dir); + mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); + mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); + +#ifndef MINIZ_NO_STDIO + if (pState->m_pFile) + { + MZ_FCLOSE(pState->m_pFile); + pState->m_pFile = NULL; + } +#endif // #ifndef MINIZ_NO_STDIO + + pZip->m_pFree(pZip->m_pAlloc_opaque, pState); + } + pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; + + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags) +{ + int file_index = mz_zip_reader_locate_file(pZip, pArchive_filename, NULL, flags); + if (file_index < 0) + return MZ_FALSE; + return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); +} +#endif + +// ------------------- .ZIP archive writing + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +static void mz_write_le16(mz_uint8 *p, mz_uint16 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); } +static void mz_write_le32(mz_uint8 *p, mz_uint32 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); p[2] = (mz_uint8)(v >> 16); p[3] = (mz_uint8)(v >> 24); } +#define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v)) +#define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v)) + +mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) +{ + if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) + return MZ_FALSE; + + if (pZip->m_file_offset_alignment) + { + // Ensure user specified file offset alignment is a power of 2. + if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1)) + return MZ_FALSE; + } + + if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func; + if (!pZip->m_pFree) pZip->m_pFree = def_free_func; + if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func; + + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; + pZip->m_archive_size = existing_size; + pZip->m_central_directory_file_ofs = 0; + pZip->m_total_files = 0; + + if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) + return MZ_FALSE; + memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); + return MZ_TRUE; +} + +static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_zip_internal_state *pState = pZip->m_pState; + mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size); +#ifdef _MSC_VER + if ((!n) || ((0, sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF))) +#else + if ((!n) || ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF))) +#endif + return 0; + if (new_size > pState->m_mem_capacity) + { + void *pNew_block; + size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); while (new_capacity < new_size) new_capacity *= 2; + if (NULL == (pNew_block = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) + return 0; + pState->m_pMem = pNew_block; pState->m_mem_capacity = new_capacity; + } + memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n); + pState->m_mem_size = (size_t)new_size; + return n; +} + +mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size) +{ + pZip->m_pWrite = mz_zip_heap_write_func; + pZip->m_pIO_opaque = pZip; + if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) + return MZ_FALSE; + if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning))) + { + if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, initial_allocation_size))) + { + mz_zip_writer_end(pZip); + return MZ_FALSE; + } + pZip->m_pState->m_mem_capacity = initial_allocation_size; + } + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); + if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) + return 0; + return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile); +} + +mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning) +{ + MZ_FILE *pFile; + pZip->m_pWrite = mz_zip_file_write_func; + pZip->m_pIO_opaque = pZip; + if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) + return MZ_FALSE; + if (NULL == (pFile = MZ_FOPEN(pFilename, "wb"))) + { + mz_zip_writer_end(pZip); + return MZ_FALSE; + } + pZip->m_pState->m_pFile = pFile; + if (size_to_reserve_at_beginning) + { + mz_uint64 cur_ofs = 0; char buf[4096]; MZ_CLEAR_OBJ(buf); + do + { + size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) + { + mz_zip_writer_end(pZip); + return MZ_FALSE; + } + cur_ofs += n; size_to_reserve_at_beginning -= n; + } while (size_to_reserve_at_beginning); + } + return MZ_TRUE; +} +#endif // #ifndef MINIZ_NO_STDIO + +mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename) +{ + mz_zip_internal_state *pState; + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + return MZ_FALSE; + // No sense in trying to write to an archive that's already at the support max size + if ((pZip->m_total_files == 0xFFFF) || ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > 0xFFFFFFFF)) + return MZ_FALSE; + + pState = pZip->m_pState; + + if (pState->m_pFile) + { +#ifdef MINIZ_NO_STDIO + pFilename; return MZ_FALSE; +#else + // Archive is being read from stdio - try to reopen as writable. + if (pZip->m_pIO_opaque != pZip) + return MZ_FALSE; + if (!pFilename) + return MZ_FALSE; + pZip->m_pWrite = mz_zip_file_write_func; + if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) + { + // The mz_zip_archive is now in a bogus state because pState->m_pFile is NULL, so just close it. + mz_zip_reader_end(pZip); + return MZ_FALSE; + } +#endif // #ifdef MINIZ_NO_STDIO + } + else if (pState->m_pMem) + { + // Archive lives in a memory block. Assume it's from the heap that we can resize using the realloc callback. + if (pZip->m_pIO_opaque != pZip) + return MZ_FALSE; + pState->m_mem_capacity = pState->m_mem_size; + pZip->m_pWrite = mz_zip_heap_write_func; + } + // Archive is being read via a user provided read function - make sure the user has specified a write function too. + else if (!pZip->m_pWrite) + return MZ_FALSE; + + // Start writing new files at the archive's current central directory location. + pZip->m_archive_size = pZip->m_central_directory_file_ofs; + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; + pZip->m_central_directory_file_ofs = 0; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags) +{ + return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0, level_and_flags, 0, 0); +} + +typedef struct +{ + mz_zip_archive *m_pZip; + mz_uint64 m_cur_archive_file_ofs; + mz_uint64 m_comp_size; +} mz_zip_writer_add_state; + +static mz_bool mz_zip_writer_add_put_buf_callback(const void* pBuf, int len, void *pUser) +{ + mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser; + if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque, pState->m_cur_archive_file_ofs, pBuf, len) != len) + return MZ_FALSE; + pState->m_cur_archive_file_ofs += len; + pState->m_comp_size += len; + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_create_local_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date) +{ + (void)pZip; + memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, comp_size); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, uncomp_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size); + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_create_central_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes) +{ + (void)pZip; + memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, comp_size); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, uncomp_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_header_ofs); + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_add_to_central_dir(mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, const void *pExtra, mz_uint16 extra_size, const void *pComment, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes) +{ + mz_zip_internal_state *pState = pZip->m_pState; + mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size; + size_t orig_central_dir_size = pState->m_central_dir.m_size; + mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; + + // No zip64 support yet + if ((local_header_ofs > 0xFFFFFFFF) || (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size + comment_size) > 0xFFFFFFFF)) + return MZ_FALSE; + + if (!mz_zip_writer_create_central_dir_header(pZip, central_dir_header, filename_size, extra_size, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_header_ofs, ext_attributes)) + return MZ_FALSE; + + if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename, filename_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra, extra_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment, comment_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, ¢ral_dir_ofs, 1))) + { + // Try to push the central directory array back into its original state. + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) +{ + // Basic ZIP archive filename validity checks: Valid filenames cannot start with a forward slash, cannot contain a drive letter, and cannot use DOS-style backward slashes. + if (*pArchive_name == '/') + return MZ_FALSE; + while (*pArchive_name) + { + if ((*pArchive_name == '\\') || (*pArchive_name == ':')) + return MZ_FALSE; + pArchive_name++; + } + return MZ_TRUE; +} + +static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip) +{ + mz_uint32 n; + if (!pZip->m_file_offset_alignment) + return 0; + n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); + return (pZip->m_file_offset_alignment - n) & (pZip->m_file_offset_alignment - 1); +} + +static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, mz_uint64 cur_file_ofs, mz_uint32 n) +{ + char buf[4096]; + memset(buf, 0, MZ_MIN(sizeof(buf), n)); + while (n) + { + mz_uint32 s = MZ_MIN(sizeof(buf), n); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s) + return MZ_FALSE; + cur_file_ofs += s; n -= s; + } + return MZ_TRUE; +} + +mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32) +{ + mz_uint16 method = 0, dos_time = 0, dos_date = 0; + mz_uint level, ext_attributes = 0, num_alignment_padding_bytes; + mz_uint64 local_dir_header_ofs = pZip->m_archive_size, cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0; + size_t archive_name_size; + mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; + tdefl_compressor *pComp = NULL; + mz_bool store_data_uncompressed; + mz_zip_internal_state *pState; + + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + level = level_and_flags & 0xF; + store_data_uncompressed = ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) || (!pArchive_name) || ((comment_size) && (!pComment)) || (pZip->m_total_files == 0xFFFF) || (level > MZ_UBER_COMPRESSION)) + return MZ_FALSE; + + pState = pZip->m_pState; + + if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) + return MZ_FALSE; + // No zip64 support yet + if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) + return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + return MZ_FALSE; + +#ifndef MINIZ_NO_TIME + { + time_t cur_time; time(&cur_time); + mz_zip_time_to_dos_time(cur_time, &dos_time, &dos_date); + } +#endif // #ifndef MINIZ_NO_TIME + + archive_name_size = strlen(pArchive_name); + if (archive_name_size > 0xFFFF) + return MZ_FALSE; + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + // no zip64 support yet + if ((pZip->m_total_files == 0xFFFF) || ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + comment_size + archive_name_size) > 0xFFFFFFFF)) + return MZ_FALSE; + + if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) + { + // Set DOS Subdirectory attribute bit. + ext_attributes |= 0x10; + // Subdirectories cannot contain data. + if ((buf_size) || (uncomp_size)) + return MZ_FALSE; + } + + // Try to do any allocations before writing to the archive, so if an allocation fails the file remains unmodified. (A good idea if we're doing an in-place modification.) + if ((!mz_zip_array_ensure_room(pZip, &pState->m_central_dir, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size)) || (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) + return MZ_FALSE; + + if ((!store_data_uncompressed) && (buf_size)) + { + if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)))) + return MZ_FALSE; + } + + if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes + sizeof(local_dir_header))) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return MZ_FALSE; + } + local_dir_header_ofs += num_alignment_padding_bytes; + if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } + cur_archive_file_ofs += num_alignment_padding_bytes + sizeof(local_dir_header); + + MZ_CLEAR_OBJ(local_dir_header); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return MZ_FALSE; + } + cur_archive_file_ofs += archive_name_size; + + if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + { + uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8*)pBuf, buf_size); + uncomp_size = buf_size; + if (uncomp_size <= 3) + { + level = 0; + store_data_uncompressed = MZ_TRUE; + } + } + + if (store_data_uncompressed) + { + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf, buf_size) != buf_size) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return MZ_FALSE; + } + + cur_archive_file_ofs += buf_size; + comp_size = buf_size; + + if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) + method = MZ_DEFLATED; + } + else if (buf_size) + { + mz_zip_writer_add_state state; + + state.m_pZip = pZip; + state.m_cur_archive_file_ofs = cur_archive_file_ofs; + state.m_comp_size = 0; + + if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) || + (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) != TDEFL_STATUS_DONE)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return MZ_FALSE; + } + + comp_size = state.m_comp_size; + cur_archive_file_ofs = state.m_cur_archive_file_ofs; + + method = MZ_DEFLATED; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + pComp = NULL; + + // no zip64 support yet + if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF)) + return MZ_FALSE; + + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size, comp_size, uncomp_crc32, method, 0, dos_time, dos_date)) + return MZ_FALSE; + + if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return MZ_FALSE; + + if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0, dos_time, dos_date, local_dir_header_ofs, ext_attributes)) + return MZ_FALSE; + + pZip->m_total_files++; + pZip->m_archive_size = cur_archive_file_ofs; + + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) +{ + mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes; + mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0; + mz_uint64 local_dir_header_ofs = pZip->m_archive_size, cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0, comp_size = 0; + size_t archive_name_size; + mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; + MZ_FILE *pSrc_file = NULL; + + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + level = level_and_flags & 0xF; + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) + return MZ_FALSE; + if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) + return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + return MZ_FALSE; + + archive_name_size = strlen(pArchive_name); + if (archive_name_size > 0xFFFF) + return MZ_FALSE; + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + // no zip64 support yet + if ((pZip->m_total_files == 0xFFFF) || ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + comment_size + archive_name_size) > 0xFFFFFFFF)) + return MZ_FALSE; + + if (!mz_zip_get_file_modified_time(pSrc_filename, &dos_time, &dos_date)) + return MZ_FALSE; + + pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); + if (!pSrc_file) + return MZ_FALSE; + MZ_FSEEK64(pSrc_file, 0, SEEK_END); + uncomp_size = MZ_FTELL64(pSrc_file); + MZ_FSEEK64(pSrc_file, 0, SEEK_SET); + + if (uncomp_size > 0xFFFFFFFF) + { + // No zip64 support yet + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + if (uncomp_size <= 3) + level = 0; + + if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes + sizeof(local_dir_header))) + { + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + local_dir_header_ofs += num_alignment_padding_bytes; + if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } + cur_archive_file_ofs += num_alignment_padding_bytes + sizeof(local_dir_header); + + MZ_CLEAR_OBJ(local_dir_header); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + cur_archive_file_ofs += archive_name_size; + + if (uncomp_size) + { + mz_uint64 uncomp_remaining = uncomp_size; + void *pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE); + if (!pRead_buf) + { + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + + if (!level) + { + while (uncomp_remaining) + { + mz_uint n = (mz_uint)MZ_MIN(MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); + if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) || (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, n) != n)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); + uncomp_remaining -= n; + cur_archive_file_ofs += n; + } + comp_size = uncomp_size; + } + else + { + mz_bool result = MZ_FALSE; + mz_zip_writer_add_state state; + tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + + state.m_pZip = pZip; + state.m_cur_archive_file_ofs = cur_archive_file_ofs; + state.m_comp_size = 0; + + if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + + for ( ; ; ) + { + size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining, MZ_ZIP_MAX_IO_BUF_SIZE); + tdefl_status status; + + if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size) + break; + + uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size); + uncomp_remaining -= in_buf_size; + + status = tdefl_compress_buffer(pComp, pRead_buf, in_buf_size, uncomp_remaining ? TDEFL_NO_FLUSH : TDEFL_FINISH); + if (status == TDEFL_STATUS_DONE) + { + result = MZ_TRUE; + break; + } + else if (status != TDEFL_STATUS_OKAY) + break; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + + if (!result) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + MZ_FCLOSE(pSrc_file); + return MZ_FALSE; + } + + comp_size = state.m_comp_size; + cur_archive_file_ofs = state.m_cur_archive_file_ofs; + + method = MZ_DEFLATED; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + } + + MZ_FCLOSE(pSrc_file); pSrc_file = NULL; + + // no zip64 support yet + if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF)) + return MZ_FALSE; + + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size, comp_size, uncomp_crc32, method, 0, dos_time, dos_date)) + return MZ_FALSE; + + if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return MZ_FALSE; + + if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0, dos_time, dos_date, local_dir_header_ofs, ext_attributes)) + return MZ_FALSE; + + pZip->m_total_files++; + pZip->m_archive_size = cur_archive_file_ofs; + + return MZ_TRUE; +} +#endif // #ifndef MINIZ_NO_STDIO + +mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint file_index) +{ + mz_uint n, bit_flags, num_alignment_padding_bytes; + mz_uint64 comp_bytes_remaining, local_dir_header_ofs; + mz_uint64 cur_src_file_ofs, cur_dst_file_ofs; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + mz_uint8 central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; + size_t orig_central_dir_size; + mz_zip_internal_state *pState; + void *pBuf; const mz_uint8 *pSrc_central_header; + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) + return MZ_FALSE; + if (NULL == (pSrc_central_header = mz_zip_reader_get_cdh(pSource_zip, file_index))) + return MZ_FALSE; + pState = pZip->m_pState; + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + // no zip64 support yet + if ((pZip->m_total_files == 0xFFFF) || ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF)) + return MZ_FALSE; + + cur_src_file_ofs = MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS); + cur_dst_file_ofs = pZip->m_archive_size; + + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return MZ_FALSE; + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return MZ_FALSE; + cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; + + if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs, num_alignment_padding_bytes)) + return MZ_FALSE; + cur_dst_file_ofs += num_alignment_padding_bytes; + local_dir_header_ofs = cur_dst_file_ofs; + if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return MZ_FALSE; + cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; + + n = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + comp_bytes_remaining = n + MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + + if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)MZ_MAX(sizeof(mz_uint32) * 4, MZ_MIN(MZ_ZIP_MAX_IO_BUF_SIZE, comp_bytes_remaining))))) + return MZ_FALSE; + + while (comp_bytes_remaining) + { + n = (mz_uint)MZ_MIN(MZ_ZIP_MAX_IO_BUF_SIZE, comp_bytes_remaining); + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return MZ_FALSE; + } + cur_src_file_ofs += n; + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return MZ_FALSE; + } + cur_dst_file_ofs += n; + + comp_bytes_remaining -= n; + } + + bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); + if (bit_flags & 8) + { + // Copy data descriptor + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return MZ_FALSE; + } + + n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == 0x08074b50) ? 4 : 3); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return MZ_FALSE; + } + + cur_src_file_ofs += n; + cur_dst_file_ofs += n; + } + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + + // no zip64 support yet + if (cur_dst_file_ofs > 0xFFFFFFFF) + return MZ_FALSE; + + orig_central_dir_size = pState->m_central_dir.m_size; + + memcpy(central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); + MZ_WRITE_LE32(central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_dir_header_ofs); + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) + return MZ_FALSE; + + n = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS) + MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS); + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n)) + { + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return MZ_FALSE; + } + + if (pState->m_central_dir.m_size > 0xFFFFFFFF) + return MZ_FALSE; + n = (mz_uint32)orig_central_dir_size; + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) + { + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return MZ_FALSE; + } + + pZip->m_total_files++; + pZip->m_archive_size = cur_dst_file_ofs; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) +{ + mz_zip_internal_state *pState; + mz_uint64 central_dir_ofs, central_dir_size; + mz_uint8 hdr[MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE]; + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) + return MZ_FALSE; + + pState = pZip->m_pState; + + // no zip64 support yet + if ((pZip->m_total_files > 0xFFFF) || ((pZip->m_archive_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF)) + return MZ_FALSE; + + central_dir_ofs = 0; + central_dir_size = 0; + if (pZip->m_total_files) + { + // Write central directory + central_dir_ofs = pZip->m_archive_size; + central_dir_size = pState->m_central_dir.m_size; + pZip->m_central_directory_file_ofs = central_dir_ofs; + if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs, pState->m_central_dir.m_p, (size_t)central_dir_size) != central_dir_size) + return MZ_FALSE; + pZip->m_archive_size += central_dir_size; + } + + // Write end of central directory record + MZ_CLEAR_OBJ(hdr); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, pZip->m_total_files); + MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, central_dir_size); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, central_dir_ofs); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, sizeof(hdr)) != sizeof(hdr)) + return MZ_FALSE; +#ifndef MINIZ_NO_STDIO + if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) + return MZ_FALSE; +#endif // #ifndef MINIZ_NO_STDIO + + pZip->m_archive_size += sizeof(hdr); + + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED; + return MZ_TRUE; +} + +mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf, size_t *pSize) +{ + if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) + return MZ_FALSE; + if (pZip->m_pWrite != mz_zip_heap_write_func) + return MZ_FALSE; + if (!mz_zip_writer_finalize_archive(pZip)) + return MZ_FALSE; + + *pBuf = pZip->m_pState->m_pMem; + *pSize = pZip->m_pState->m_mem_size; + pZip->m_pState->m_pMem = NULL; + pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0; + return MZ_TRUE; +} + +mz_bool mz_zip_writer_end(mz_zip_archive *pZip) +{ + mz_zip_internal_state *pState; + mz_bool status = MZ_TRUE; + if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) && (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) + return MZ_FALSE; + + pState = pZip->m_pState; + pZip->m_pState = NULL; + mz_zip_array_clear(pZip, &pState->m_central_dir); + mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); + mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); + +#ifndef MINIZ_NO_STDIO + if (pState->m_pFile) + { + MZ_FCLOSE(pState->m_pFile); + pState->m_pFile = NULL; + } +#endif // #ifndef MINIZ_NO_STDIO + + if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); + pState->m_pMem = NULL; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pState); + pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; + return status; +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) +{ + mz_bool status, created_new_archive = MZ_FALSE; + mz_zip_archive zip_archive; + struct MZ_FILE_STAT_STRUCT file_stat; + MZ_CLEAR_OBJ(zip_archive); + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) + return MZ_FALSE; + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + return MZ_FALSE; + if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) + { + // Create a new archive. + if (!mz_zip_writer_init_file(&zip_archive, pZip_filename, 0)) + return MZ_FALSE; + created_new_archive = MZ_TRUE; + } + else + { + // Append to an existing archive. + if (!mz_zip_reader_init_file(&zip_archive, pZip_filename, level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) + return MZ_FALSE; + if (!mz_zip_writer_init_from_reader(&zip_archive, pZip_filename)) + { + mz_zip_reader_end(&zip_archive); + return MZ_FALSE; + } + } + status = mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, 0, 0); + // Always finalize, even if adding failed for some reason, so we have a valid central directory. (This may not always succeed, but we can try.) + if (!mz_zip_writer_finalize_archive(&zip_archive)) + status = MZ_FALSE; + if (!mz_zip_writer_end(&zip_archive)) + status = MZ_FALSE; + if ((!status) && (created_new_archive)) + { + // It's a new archive and something went wrong, so just delete it. + int ignoredStatus = MZ_DELETE_FILE(pZip_filename); + (void)ignoredStatus; + } + return status; +} + +void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags) +{ + int file_index; + mz_zip_archive zip_archive; + void *p = NULL; + + if (pSize) + *pSize = 0; + + if ((!pZip_filename) || (!pArchive_name)) + return NULL; + + MZ_CLEAR_OBJ(zip_archive); + if (!mz_zip_reader_init_file(&zip_archive, pZip_filename, flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY)) + return NULL; + + if ((file_index = mz_zip_reader_locate_file(&zip_archive, pArchive_name, NULL, flags)) >= 0) + p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags); + + mz_zip_reader_end(&zip_archive); + return p; +} + +#endif // #ifndef MINIZ_NO_STDIO + +#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +#endif // #ifndef MINIZ_NO_ARCHIVE_APIS + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_FILE_ONLY + +/* + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ diff --git a/Microcontroller Code/lib/pngle-master/miniz.h b/Microcontroller Code/lib/pngle-master/miniz.h new file mode 100644 index 0000000..971d34e --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/miniz.h @@ -0,0 +1,2 @@ +#define MINIZ_HEADER_FILE_ONLY +#include "miniz.c" diff --git a/Microcontroller Code/lib/pngle-master/pngle.c b/Microcontroller Code/lib/pngle-master/pngle.c new file mode 100644 index 0000000..2999e5c --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/pngle.c @@ -0,0 +1,874 @@ +/*- + * MIT License + * + * Copyright (c) 2019 kikuchan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include + +#include "miniz.h" +#include "pngle.h" + +#ifndef MIN +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif + +#ifdef PNGLE_DEBUG +#define debug_printf(...) fprintf(stderr, __VA_ARGS__) +#else +#define debug_printf(...) ((void)0) +#endif + +#define PNGLE_ERROR(s) (pngle->error = (s), pngle->state = PNGLE_STATE_ERROR, -1) +#define PNGLE_CALLOC(a, b, name) (debug_printf("[pngle] Allocating %zu bytes for %s\n", (size_t)(a) * (size_t)(b), (name)), calloc((size_t)(a), (size_t)(b))) + +#define PNGLE_UNUSED(x) (void)(x) + +typedef enum { + PNGLE_STATE_ERROR = -2, + PNGLE_STATE_EOF = -1, + PNGLE_STATE_INITIAL = 0, + + PNGLE_STATE_FIND_CHUNK_HEADER, + PNGLE_STATE_HANDLE_CHUNK, + PNGLE_STATE_CRC, +} pngle_state_t; + +typedef enum { +// Supported chunks +// Filter chunk names by following command to (re)generate hex constants; +// % perl -ne 'chomp; s/.*\s*\/\/\s*//; print "\tPNGLE_CHUNK_$_ = 0x" . unpack("H*") . "UL, // $_\n";' + PNGLE_CHUNK_IHDR = 0x49484452UL, // IHDR + PNGLE_CHUNK_PLTE = 0x504c5445UL, // PLTE + PNGLE_CHUNK_IDAT = 0x49444154UL, // IDAT + PNGLE_CHUNK_IEND = 0x49454e44UL, // IEND + PNGLE_CHUNK_tRNS = 0x74524e53UL, // tRNS + PNGLE_CHUNK_gAMA = 0x67414d41UL, // gAMA +} pngle_chunk_t; + +// typedef struct _pngle_t pngle_t; // declared in pngle.h +struct _pngle_t { + pngle_ihdr_t hdr; + + uint_fast8_t channels; // 0 indicates IHDR hasn't been processed yet + + // PLTE chunk + size_t n_palettes; + uint8_t *palette; + + // tRNS chunk + size_t n_trans_palettes; + uint8_t *trans_palette; + + // parser state (reset on every chunk header) + pngle_state_t state; + uint32_t chunk_type; + uint32_t chunk_remain; + mz_ulong crc32; + + // decompression state (reset on IHDR) + tinfl_decompressor inflator; // 11000 bytes + uint8_t lz_buf[TINFL_LZ_DICT_SIZE]; // 32768 bytes + uint8_t *next_out; // NULL indicates IDAT hasn't been processed yet + size_t avail_out; + + // scanline decoder (reset on every set_interlace_pass() call) + uint8_t *scanline_ringbuf; + size_t scanline_ringbuf_size; + size_t scanline_ringbuf_cidx; + int_fast8_t scanline_remain_bytes_to_render; + int_fast8_t filter_type; + uint32_t drawing_x; + uint32_t drawing_y; + + // interlace + uint_fast8_t interlace_pass; + + const char *error; + +#ifndef PNGLE_NO_GAMMA_CORRECTION + uint8_t *gamma_table; + double display_gamma; +#endif + + pngle_init_callback_t init_callback; + pngle_draw_callback_t draw_callback; + pngle_done_callback_t done_callback; + + void *user_data; +}; + +// magic +static const uint8_t png_sig[] = { 137, 80, 78, 71, 13, 10, 26, 10 }; +static uint32_t interlace_off_x[8] = { 0, 0, 4, 0, 2, 0, 1, 0 }; +static uint32_t interlace_off_y[8] = { 0, 0, 0, 4, 0, 2, 0, 1 }; +static uint32_t interlace_div_x[8] = { 1, 8, 8, 4, 4, 2, 2, 1 }; +static uint32_t interlace_div_y[8] = { 1, 8, 8, 8, 4, 4, 2, 2 }; + + +static inline uint8_t read_uint8(const uint8_t *p) +{ + return *p; +} + +static inline uint32_t read_uint32(const uint8_t *p) +{ + return (p[0] << 24) + | (p[1] << 16) + | (p[2] << 8) + | (p[3] << 0) + ; +} + +static inline uint32_t U32_CLAMP_ADD(uint32_t a, uint32_t b, uint32_t top) +{ + uint32_t v = a + b; + if (v < a) return top; // uint32 overflow + if (v > top) return top; // clamp + return v; +} + + +void pngle_reset(pngle_t *pngle) +{ + if (!pngle) return ; + + pngle->state = PNGLE_STATE_INITIAL; + pngle->error = "No error"; + + if (pngle->scanline_ringbuf) free(pngle->scanline_ringbuf); + if (pngle->palette) free(pngle->palette); + if (pngle->trans_palette) free(pngle->trans_palette); +#ifndef PNGLE_NO_GAMMA_CORRECTION + if (pngle->gamma_table) free(pngle->gamma_table); +#endif + + pngle->scanline_ringbuf = NULL; + pngle->palette = NULL; + pngle->trans_palette = NULL; +#ifndef PNGLE_NO_GAMMA_CORRECTION + pngle->gamma_table = NULL; +#endif + + pngle->channels = 0; // indicates IHDR hasn't been processed yet + pngle->next_out = NULL; // indicates IDAT hasn't been processed yet + + // clear them just in case... + memset(&pngle->hdr, 0, sizeof(pngle->hdr)); + pngle->n_palettes = 0; + pngle->n_trans_palettes = 0; + + tinfl_init(&pngle->inflator); +} + +pngle_t *pngle_new() +{ + pngle_t *pngle = (pngle_t *)PNGLE_CALLOC(1, sizeof(pngle_t), "pngle_t"); + if (!pngle) return NULL; + + pngle_reset(pngle); + + return pngle; +} + +void pngle_destroy(pngle_t *pngle) +{ + if (pngle) { + pngle_reset(pngle); + free(pngle); + } +} + +const char *pngle_error(pngle_t *pngle) +{ + if (!pngle) return "Uninitialized"; + return pngle->error; +} + +uint32_t pngle_get_width(pngle_t *pngle) +{ + if (!pngle) return 0; + return pngle->hdr.width; +} + +uint32_t pngle_get_height(pngle_t *pngle) +{ + if (!pngle) return 0; + return pngle->hdr.height; +} + +pngle_ihdr_t *pngle_get_ihdr(pngle_t *pngle) +{ + if (!pngle) return NULL; + if (pngle->channels == 0) return NULL; + return &pngle->hdr; +} + + +static int is_trans_color(pngle_t *pngle, uint16_t *value, size_t n) +{ + if (pngle->n_trans_palettes != 1) return 0; // false (none or indexed) + + for (size_t i = 0; i < n; i++) { + if (value[i] != (pngle->trans_palette[i * 2 + 0] * 0x100 + pngle->trans_palette[i * 2 + 1])) return 0; // false + } + return 1; // true +} + +static inline void scanline_ringbuf_push(pngle_t *pngle, uint8_t value) +{ + pngle->scanline_ringbuf[pngle->scanline_ringbuf_cidx] = value; + pngle->scanline_ringbuf_cidx = (pngle->scanline_ringbuf_cidx + 1) % pngle->scanline_ringbuf_size; +} + +static inline uint16_t get_value(pngle_t *pngle, size_t *ridx, int *bitcount, int depth) +{ + uint16_t v; + + switch (depth) { + case 1: + case 2: + case 4: + if (*bitcount >= 8) { + *bitcount = 0; + *ridx = (*ridx + 1) % pngle->scanline_ringbuf_size; + } + *bitcount += depth; + uint8_t mask = ((1UL << depth) - 1); + uint8_t shift = (8 - *bitcount); + return (pngle->scanline_ringbuf[*ridx] >> shift) & mask; + + case 8: + v = pngle->scanline_ringbuf[*ridx]; + *ridx = (*ridx + 1) % pngle->scanline_ringbuf_size; + return v; + + case 16: + v = pngle->scanline_ringbuf[*ridx]; + *ridx = (*ridx + 1) % pngle->scanline_ringbuf_size; + + v = v * 0x100 + pngle->scanline_ringbuf[*ridx]; + *ridx = (*ridx + 1) % pngle->scanline_ringbuf_size; + return v; + } + + return 0; +} + +static int pngle_draw_pixels(pngle_t *pngle, size_t scanline_ringbuf_xidx) +{ + uint16_t v[4]; // MAX_CHANNELS + int bitcount = 0; + uint8_t pixel_depth = (pngle->hdr.color_type & 1) ? 8 : pngle->hdr.depth; + uint16_t maxval = (1UL << pixel_depth) - 1; + + int n_pixels = pngle->hdr.depth == 16 ? 1 : (8 / pngle->hdr.depth); + + for (; n_pixels-- > 0 && pngle->drawing_x < pngle->hdr.width; pngle->drawing_x = U32_CLAMP_ADD(pngle->drawing_x, interlace_div_x[pngle->interlace_pass], pngle->hdr.width)) { + for (uint_fast8_t c = 0; c < pngle->channels; c++) { + v[c] = get_value(pngle, &scanline_ringbuf_xidx, &bitcount, pngle->hdr.depth); + } + + // color type: 0000 0111 + // ^-- indexed color (palette) + // ^--- Color + // ^---- Alpha channel + + if (pngle->hdr.color_type & 2) { + // color + if (pngle->hdr.color_type & 1) { + // indexed color: type 3 + + // lookup palette info + uint16_t pidx = v[0]; + if (pidx >= pngle->n_palettes) return PNGLE_ERROR("Color index is out of range"); + + v[0] = pngle->palette[pidx * 3 + 0]; + v[1] = pngle->palette[pidx * 3 + 1]; + v[2] = pngle->palette[pidx * 3 + 2]; + + // tRNS as an indexed alpha value table (for color type 3) + v[3] = pidx < pngle->n_trans_palettes ? pngle->trans_palette[pidx] : maxval; + } else { + // true color: 2, and 6 + v[3] = (pngle->hdr.color_type & 4) ? v[3] : is_trans_color(pngle, v, 3) ? 0 : maxval; + } + } else { + // alpha, tRNS, or opaque + v[3] = (pngle->hdr.color_type & 4) ? v[1] : is_trans_color(pngle, v, 1) ? 0 : maxval; + + // monochrome + v[1] = v[2] = v[0]; + } + + if (pngle->draw_callback) { + uint8_t rgba[4] = { + (v[0] * 255 + maxval / 2) / maxval, + (v[1] * 255 + maxval / 2) / maxval, + (v[2] * 255 + maxval / 2) / maxval, + (v[3] * 255 + maxval / 2) / maxval + }; + +#ifndef PNGLE_NO_GAMMA_CORRECTION + if (pngle->gamma_table) { + for (int i = 0; i < 3; i++) { + rgba[i] = pngle->gamma_table[v[i]]; + } + } +#endif + + pngle->draw_callback(pngle, pngle->drawing_x, pngle->drawing_y + , MIN(interlace_div_x[pngle->interlace_pass] - interlace_off_x[pngle->interlace_pass], pngle->hdr.width - pngle->drawing_x) + , MIN(interlace_div_y[pngle->interlace_pass] - interlace_off_y[pngle->interlace_pass], pngle->hdr.height - pngle->drawing_y) + , rgba + ); + } + } + + return 0; +} + +static inline int paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p - a); + int pb = abs(p - b); + int pc = abs(p - c); + + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static int set_interlace_pass(pngle_t *pngle, uint_fast8_t pass) +{ + pngle->interlace_pass = pass; + + uint_fast8_t bytes_per_pixel = (pngle->channels * pngle->hdr.depth + 7) / 8; // 1 if depth <= 8 + size_t scanline_pixels = (pngle->hdr.width - interlace_off_x[pngle->interlace_pass] + interlace_div_x[pngle->interlace_pass] - 1) / interlace_div_x[pngle->interlace_pass]; + size_t scanline_stride = (scanline_pixels * pngle->channels * pngle->hdr.depth + 7) / 8; + + pngle->scanline_ringbuf_size = scanline_stride + bytes_per_pixel * 2; // 2 rooms for c/x and a + + if (pngle->scanline_ringbuf) free(pngle->scanline_ringbuf); + if ((pngle->scanline_ringbuf = PNGLE_CALLOC(pngle->scanline_ringbuf_size, 1, "scanline ringbuf")) == NULL) return PNGLE_ERROR("Insufficient memory"); + + pngle->drawing_x = interlace_off_x[pngle->interlace_pass]; + pngle->drawing_y = interlace_off_y[pngle->interlace_pass]; + pngle->filter_type = -1; + + pngle->scanline_ringbuf_cidx = 0; + pngle->scanline_remain_bytes_to_render = -1; + + return 0; +} + +static int setup_gamma_table(pngle_t *pngle, uint32_t png_gamma) +{ +#ifndef PNGLE_NO_GAMMA_CORRECTION + if (pngle->gamma_table) free(pngle->gamma_table); + + if (pngle->display_gamma <= 0) return 0; // disable gamma correction + if (png_gamma == 0) return 0; + + uint8_t pixel_depth = (pngle->hdr.color_type & 1) ? 8 : pngle->hdr.depth; + uint16_t maxval = (1UL << pixel_depth) - 1; + + pngle->gamma_table = PNGLE_CALLOC(1, maxval + 1, "gamma table"); + if (!pngle->gamma_table) return PNGLE_ERROR("Insufficient memory"); + + for (int i = 0; i < maxval + 1; i++) { + pngle->gamma_table[i] = (uint8_t)floor(pow(i / (double)maxval, 100000.0 / png_gamma / pngle->display_gamma) * 255.0 + 0.5); + } + debug_printf("[pngle] gamma value = %d\n", png_gamma); +#else + PNGLE_UNUSED(pngle); + PNGLE_UNUSED(png_gamma); +#endif + return 0; +} + + +static int pngle_on_data(pngle_t *pngle, const uint8_t *p, int len) +{ + const uint8_t *ep = p + len; + + uint_fast8_t bytes_per_pixel = (pngle->channels * pngle->hdr.depth + 7) / 8; // 1 if depth <= 8 + + while (p < ep) { + if (pngle->drawing_x >= pngle->hdr.width) { + // New row + pngle->drawing_x = interlace_off_x[pngle->interlace_pass]; + pngle->drawing_y = U32_CLAMP_ADD(pngle->drawing_y, interlace_div_y[pngle->interlace_pass], pngle->hdr.height); + pngle->filter_type = -1; // Indicate new line + } + + if (pngle->drawing_x >= pngle->hdr.width || pngle->drawing_y >= pngle->hdr.height) { + if (pngle->interlace_pass == 0 || pngle->interlace_pass >= 7) return len; // Do nothing further + + // Interlace: Next pass + if (set_interlace_pass(pngle, pngle->interlace_pass + 1) < 0) return -1; + debug_printf("[pngle] interlace pass changed to: %d\n", pngle->interlace_pass); + + continue; // This is required because "No filter type bytes are present in an empty pass". + } + + if (pngle->filter_type < 0) { + if (*p > 4) { + debug_printf("[pngle] Invalid filter type is found; 0x%02x\n", *p); + return PNGLE_ERROR("Invalid filter type is found"); + } + + pngle->filter_type = (int_fast8_t)*p++; // 0 - 4 + + // push sentinel bytes for new line + for (uint_fast8_t i = 0; i < bytes_per_pixel; i++) { + scanline_ringbuf_push(pngle, 0); + } + + continue; + } + + size_t cidx = pngle->scanline_ringbuf_cidx; + size_t bidx = (pngle->scanline_ringbuf_cidx + bytes_per_pixel) % pngle->scanline_ringbuf_size; + size_t aidx = (pngle->scanline_ringbuf_cidx + pngle->scanline_ringbuf_size - bytes_per_pixel) % pngle->scanline_ringbuf_size; + // debug_printf("[pngle] cidx = %zd, bidx = %zd, aidx = %zd\n", cidx, bidx, aidx); + + uint8_t c = pngle->scanline_ringbuf[cidx]; // left-up + uint8_t b = pngle->scanline_ringbuf[bidx]; // up + uint8_t a = pngle->scanline_ringbuf[aidx]; // left + uint8_t x = *p++; // target + // debug_printf("[pngle] c = 0x%02x, b = 0x%02x, a = 0x%02x, x = 0x%02x\n", c, b, a, x); + + // Reverse the filter + switch (pngle->filter_type) { + case 0: break; // None + case 1: x += a; break; // Sub + case 2: x += b; break; // Up + case 3: x += (a + b) / 2; break; // Average + case 4: x += paeth(a, b, c); break; // Paeth + } + + scanline_ringbuf_push(pngle, x); // updates scanline_ringbuf_cidx + + if (pngle->scanline_remain_bytes_to_render < 0) pngle->scanline_remain_bytes_to_render = bytes_per_pixel; + if (--pngle->scanline_remain_bytes_to_render == 0) { + size_t xidx = (pngle->scanline_ringbuf_cidx + pngle->scanline_ringbuf_size - bytes_per_pixel) % pngle->scanline_ringbuf_size; + + if (pngle_draw_pixels(pngle, xidx) < 0) return -1; + + pngle->scanline_remain_bytes_to_render = -1; // reset + } + } + + return len; +} + + +static int pngle_handle_chunk(pngle_t *pngle, const uint8_t *buf, size_t len) +{ + size_t consume = 0; + + switch (pngle->chunk_type) { + case PNGLE_CHUNK_IHDR: + // parse IHDR + consume = 13; + if (len < consume) return 0; + + debug_printf("[pngle] Parse IHDR\n"); + + pngle->hdr.width = read_uint32(buf + 0); + pngle->hdr.height = read_uint32(buf + 4); + pngle->hdr.depth = read_uint8 (buf + 8); + pngle->hdr.color_type = read_uint8 (buf + 9); + pngle->hdr.compression = read_uint8 (buf + 10); + pngle->hdr.filter = read_uint8 (buf + 11); + pngle->hdr.interlace = read_uint8 (buf + 12); + + + debug_printf("[pngle] width : %d\n", pngle->hdr.width ); + debug_printf("[pngle] height : %d\n", pngle->hdr.height ); + debug_printf("[pngle] depth : %d\n", pngle->hdr.depth ); + debug_printf("[pngle] color_type : %d\n", pngle->hdr.color_type ); + debug_printf("[pngle] compression: %d\n", pngle->hdr.compression); + debug_printf("[pngle] filter : %d\n", pngle->hdr.filter ); + debug_printf("[pngle] interlace : %d\n", pngle->hdr.interlace ); + + /* + Color Allowed Interpretation channels + Type Bit Depths + + 0 1,2,4,8,16 Each pixel is a grayscale sample. 1 channels (Brightness) + + 2 8,16 Each pixel is an R,G,B triple. 3 channels (R, G, B) + + 3 1,2,4,8 Each pixel is a palette index; 1 channels (palette info) + a PLTE chunk must appear. + + 4 8,16 Each pixel is a grayscale sample, 2 channels (Brightness, Alpha) + followed by an alpha sample. + + 6 8,16 Each pixel is an R,G,B triple, 4 channels (R, G, B, Alpha) + followed by an alpha sample. + */ + // 111 + // ^-- indexed color (palette) + // ^--- Color + // ^---- Alpha channel + + switch (pngle->hdr.color_type) { + case 0: pngle->channels = 1; if (pngle->hdr.depth != 1 && pngle->hdr.depth != 2 && pngle->hdr.depth != 4 && pngle->hdr.depth != 8 && pngle->hdr.depth != 16) return PNGLE_ERROR("Invalid bit depth"); break; // grayscale + case 2: pngle->channels = 3; if ( pngle->hdr.depth != 8 && pngle->hdr.depth != 16) return PNGLE_ERROR("Invalid bit depth"); break; // truecolor + case 3: pngle->channels = 1; if (pngle->hdr.depth != 1 && pngle->hdr.depth != 2 && pngle->hdr.depth != 4 && pngle->hdr.depth != 8 ) return PNGLE_ERROR("Invalid bit depth"); break; // indexed color + case 4: pngle->channels = 2; if ( pngle->hdr.depth != 8 && pngle->hdr.depth != 16) return PNGLE_ERROR("Invalid bit depth"); break; // grayscale + alpha + case 6: pngle->channels = 4; if ( pngle->hdr.depth != 8 && pngle->hdr.depth != 16) return PNGLE_ERROR("Invalid bit depth"); break; // truecolor + alpha + default: + return PNGLE_ERROR("Incorrect IHDR info"); + } + + if (pngle->hdr.compression != 0) return PNGLE_ERROR("Unsupported compression type in IHDR"); + if (pngle->hdr.filter != 0) return PNGLE_ERROR("Unsupported filter type in IHDR"); + + // interlace + if (set_interlace_pass(pngle, pngle->hdr.interlace ? 1 : 0) < 0) return -1; + + // callback + if (pngle->init_callback) pngle->init_callback(pngle, pngle->hdr.width, pngle->hdr.height); + + break; + + case PNGLE_CHUNK_IDAT: + // parse & decode IDAT chunk + if (len < 1) return 0; + + debug_printf("[pngle] Reading IDAT (len %zd / chunk remain %u)\n", len, pngle->chunk_remain); + + size_t in_bytes = len; + size_t out_bytes = pngle->avail_out; + + //debug_printf("[pngle] in_bytes %zd, out_bytes %zd, next_out %p\n", in_bytes, out_bytes, pngle->next_out); + + // XXX: tinfl_decompress always requires (next_out - lz_buf + avail_out) == TINFL_LZ_DICT_SIZE + tinfl_status status = tinfl_decompress(&pngle->inflator, (const mz_uint8 *)buf, &in_bytes, pngle->lz_buf, (mz_uint8 *)pngle->next_out, &out_bytes, TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_PARSE_ZLIB_HEADER); + + //debug_printf("[pngle] tinfl_decompress\n"); + //debug_printf("[pngle] => in_bytes %zd, out_bytes %zd, next_out %p, status %d\n", in_bytes, out_bytes, pngle->next_out, status); + + if (status < TINFL_STATUS_DONE) { + // Decompression failed. + debug_printf("[pngle] tinfl_decompress() failed with status %d!\n", status); + return PNGLE_ERROR("Failed to decompress the IDAT stream"); + } + + pngle->next_out += out_bytes; + pngle->avail_out -= out_bytes; + + // debug_printf("[pngle] => avail_out %zd, next_out %p\n", pngle->avail_out, pngle->next_out); + + if (status == TINFL_STATUS_DONE || pngle->avail_out == 0) { + // Output buffer is full, or decompression is done, so write buffer to output file. + // XXX: This is the only chance to process the buffer. + uint8_t *read_ptr = pngle->lz_buf; + size_t n = TINFL_LZ_DICT_SIZE - (size_t)pngle->avail_out; + + // pngle_on_data() usually returns n, otherwise -1 on error + if (pngle_on_data(pngle, read_ptr, n) < 0) return -1; + + // XXX: tinfl_decompress always requires (next_out - lz_buf + avail_out) == TINFL_LZ_DICT_SIZE + pngle->next_out = pngle->lz_buf; + pngle->avail_out = TINFL_LZ_DICT_SIZE; + } + + consume = in_bytes; + break; + + case PNGLE_CHUNK_PLTE: + consume = 3; + if (len < consume) return 0; + + memcpy(pngle->palette + pngle->n_palettes * 3, buf, 3); + + debug_printf("[pngle] PLTE[%zd]: (%d, %d, %d)\n" + , pngle->n_palettes + , pngle->palette[pngle->n_palettes * 3 + 0] + , pngle->palette[pngle->n_palettes * 3 + 1] + , pngle->palette[pngle->n_palettes * 3 + 2] + ); + + pngle->n_palettes++; + + break; + + case PNGLE_CHUNK_IEND: + consume = 0; + break; + + case PNGLE_CHUNK_tRNS: + switch (pngle->hdr.color_type) { + case 3: consume = 1; break; + case 0: consume = 2 * 1; break; + case 2: consume = 2 * 3; break; + default: + return PNGLE_ERROR("tRNS chunk is prohibited on the color type"); + } + if (len < consume) return 0; + + memcpy(pngle->trans_palette + pngle->n_trans_palettes, buf, consume); + + pngle->n_trans_palettes++; + + break; + + case PNGLE_CHUNK_gAMA: + consume = 4; + if (len < consume) return 0; + + if (setup_gamma_table(pngle, read_uint32(buf)) < 0) return -1; + + break; + + default: + // unknown chunk + consume = len; + + debug_printf("[pngle] Unknown chunk; %zd bytes discarded\n", consume); + break; + } + + return consume; +} + +static int pngle_feed_internal(pngle_t *pngle, const uint8_t *buf, size_t len) +{ + if (!pngle) return -1; + + switch (pngle->state) { + case PNGLE_STATE_ERROR: + return -1; + + case PNGLE_STATE_EOF: + return len; + + case PNGLE_STATE_INITIAL: + // find PNG header + if (len < sizeof(png_sig)) return 0; + + if (memcmp(png_sig, buf, sizeof(png_sig))) return PNGLE_ERROR("Incorrect PNG signature"); + + debug_printf("[pngle] PNG signature found\n"); + + pngle->state = PNGLE_STATE_FIND_CHUNK_HEADER; + return sizeof(png_sig); + + case PNGLE_STATE_FIND_CHUNK_HEADER: + if (len < 8) return 0; + + pngle->chunk_remain = read_uint32(buf); + pngle->chunk_type = read_uint32(buf + 4); + + pngle->crc32 = mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)(buf + 4), 4); + + debug_printf("[pngle] Chunk '%.4s' len %u\n", buf + 4, pngle->chunk_remain); + + pngle->state = PNGLE_STATE_HANDLE_CHUNK; + + // initialize & sanity check + switch (pngle->chunk_type) { + case PNGLE_CHUNK_IHDR: + if (pngle->chunk_remain != 13) return PNGLE_ERROR("Invalid IHDR chunk size"); + if (pngle->channels != 0) return PNGLE_ERROR("Multiple IHDR chunks are not allowed"); + break; + + case PNGLE_CHUNK_IDAT: + if (pngle->chunk_remain <= 0) return PNGLE_ERROR("Invalid IDAT chunk size"); + if (pngle->channels == 0) return PNGLE_ERROR("No IHDR chunk is found"); + if (pngle->hdr.color_type == 3 && pngle->palette == NULL) return PNGLE_ERROR("No PLTE chunk is found"); + + if (pngle->next_out == NULL) { + // Very first IDAT + pngle->next_out = pngle->lz_buf; + pngle->avail_out = TINFL_LZ_DICT_SIZE; + } + break; + + case PNGLE_CHUNK_PLTE: + if (pngle->chunk_remain <= 0) return PNGLE_ERROR("Invalid PLTE chunk size"); + if (pngle->channels == 0) return PNGLE_ERROR("No IHDR chunk is found"); + if (pngle->palette) return PNGLE_ERROR("Too many PLTE chunk"); + + switch (pngle->hdr.color_type) { + case 3: // indexed color + break; + case 2: // truecolor + case 6: // truecolor + alpha + // suggested palettes + break; + default: + return PNGLE_ERROR("PLTE chunk is prohibited on the color type"); + } + + if (pngle->chunk_remain % 3) return PNGLE_ERROR("Invalid PLTE chunk size"); + if (pngle->chunk_remain / 3 > MIN(256, (1UL << pngle->hdr.depth))) return PNGLE_ERROR("Too many palettes in PLTE"); + if ((pngle->palette = PNGLE_CALLOC(pngle->chunk_remain / 3, 3, "palette")) == NULL) return PNGLE_ERROR("Insufficient memory"); + pngle->n_palettes = 0; + break; + + case PNGLE_CHUNK_IEND: + if (pngle->next_out == NULL) return PNGLE_ERROR("No IDAT chunk is found"); + if (pngle->chunk_remain > 0) return PNGLE_ERROR("Invalid IEND chunk size"); + break; + + case PNGLE_CHUNK_tRNS: + if (pngle->chunk_remain <= 0) return PNGLE_ERROR("Invalid tRNS chunk size"); + if (pngle->channels == 0) return PNGLE_ERROR("No IHDR chunk is found"); + if (pngle->trans_palette) return PNGLE_ERROR("Too many tRNS chunk"); + + switch (pngle->hdr.color_type) { + case 3: // indexed color + if (pngle->chunk_remain > (1UL << pngle->hdr.depth)) return PNGLE_ERROR("Too many palettes in tRNS"); + break; + case 0: // grayscale + if (pngle->chunk_remain != 2) return PNGLE_ERROR("Invalid tRNS chunk size"); + break; + case 2: // truecolor + if (pngle->chunk_remain != 6) return PNGLE_ERROR("Invalid tRNS chunk size"); + break; + + default: + return PNGLE_ERROR("tRNS chunk is prohibited on the color type"); + } + if ((pngle->trans_palette = PNGLE_CALLOC(pngle->chunk_remain, 1, "trans palette")) == NULL) return PNGLE_ERROR("Insufficient memory"); + pngle->n_trans_palettes = 0; + break; + + default: + break; + } + + return 8; + + case PNGLE_STATE_HANDLE_CHUNK: + len = MIN(len, pngle->chunk_remain); + + int consumed = pngle_handle_chunk(pngle, buf, len); + + if (consumed > 0) { + if (pngle->chunk_remain < (uint32_t)consumed) return PNGLE_ERROR("Chunk data has been consumed too much"); + + pngle->chunk_remain -= consumed; + pngle->crc32 = mz_crc32(pngle->crc32, (const mz_uint8 *)buf, consumed); + } + if (pngle->chunk_remain <= 0) pngle->state = PNGLE_STATE_CRC; + + return consumed; + + case PNGLE_STATE_CRC: + if (len < 4) return 0; + + uint32_t crc32 = read_uint32(buf); + + if (crc32 != pngle->crc32) { + debug_printf("[pngle] CRC: %08x vs %08x => NG\n", crc32, (uint32_t)pngle->crc32); + return PNGLE_ERROR("CRC mismatch"); + } + + debug_printf("[pngle] CRC: %08x vs %08x => OK\n", crc32, (uint32_t)pngle->crc32); + pngle->state = PNGLE_STATE_FIND_CHUNK_HEADER; + + // XXX: + if (pngle->chunk_type == PNGLE_CHUNK_IEND) { + pngle->state = PNGLE_STATE_EOF; + if (pngle->done_callback) pngle->done_callback(pngle); + debug_printf("[pngle] DONE\n"); + } + + return 4; + + default: + break; + } + + return PNGLE_ERROR("Invalid state"); +} + +int pngle_feed(pngle_t *pngle, const void *buf, size_t len) +{ + size_t pos = 0; + pngle_state_t last_state = pngle->state; + + while (pos < len) { + int r = pngle_feed_internal(pngle, (const uint8_t *)buf + pos, len - pos); + if (r < 0) return r; // error + + if (r == 0 && last_state == pngle->state) break; + last_state = pngle->state; + + pos += r; + } + + return pos; +} + +void pngle_set_display_gamma(pngle_t *pngle, double display_gamma) +{ + if (!pngle) return ; +#ifndef PNGLE_NO_GAMMA_CORRECTION + pngle->display_gamma = display_gamma; +#else + PNGLE_UNUSED(display_gamma); +#endif +} + +void pngle_set_init_callback(pngle_t *pngle, pngle_init_callback_t callback) +{ + if (!pngle) return ; + pngle->init_callback = callback; +} + +void pngle_set_draw_callback(pngle_t *pngle, pngle_draw_callback_t callback) +{ + if (!pngle) return ; + pngle->draw_callback = callback; +} + +void pngle_set_done_callback(pngle_t *pngle, pngle_done_callback_t callback) +{ + if (!pngle) return ; + pngle->done_callback = callback; +} + +void pngle_set_user_data(pngle_t *pngle, void *user_data) +{ + if (!pngle) return ; + pngle->user_data = user_data; +} + +void *pngle_get_user_data(pngle_t *pngle) +{ + if (!pngle) return NULL; + return pngle->user_data; +} + +/* vim: set ts=4 sw=4 noexpandtab: */ diff --git a/Microcontroller Code/lib/pngle-master/pngle.h b/Microcontroller Code/lib/pngle-master/pngle.h new file mode 100644 index 0000000..e7d0b87 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/pngle.h @@ -0,0 +1,86 @@ +/*- + * MIT License + * + * Copyright (c) 2019 kikuchan + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef __PNGLE_H__ +#define __PNGLE_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// Main Pngle object +typedef struct _pngle_t pngle_t; + +// Callback signatures +typedef void (*pngle_init_callback_t)(pngle_t *pngle, uint32_t w, uint32_t h); +typedef void (*pngle_draw_callback_t)(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]); +typedef void (*pngle_done_callback_t)(pngle_t *pngle); + +// ---------------- +// Basic interfaces +// ---------------- +pngle_t *pngle_new(); +void pngle_destroy(pngle_t *pngle); +void pngle_reset(pngle_t *pngle); // clear its internal state (not applied to pngle_set_* functions) +const char *pngle_error(pngle_t *pngle); +int pngle_feed(pngle_t *pngle, const void *buf, size_t len); // returns -1: On error, 0: Need more data, n: n bytes eaten + +uint32_t pngle_get_width(pngle_t *pngle); +uint32_t pngle_get_height(pngle_t *pngle); + +void pngle_set_init_callback(pngle_t *png, pngle_init_callback_t callback); +void pngle_set_draw_callback(pngle_t *png, pngle_draw_callback_t callback); +void pngle_set_done_callback(pngle_t *png, pngle_done_callback_t callback); + +void pngle_set_display_gamma(pngle_t *pngle, double display_gamma); // enables gamma correction by specifying display gamma, typically 2.2. No effect when gAMA chunk is missing + +void pngle_set_user_data(pngle_t *pngle, void *user_data); +void *pngle_get_user_data(pngle_t *pngle); + + +// ---------------- +// Debug interfaces +// ---------------- + +typedef struct _pngle_ihdr_t { + uint32_t width; + uint32_t height; + uint8_t depth; + uint8_t color_type; + uint8_t compression; + uint8_t filter; + uint8_t interlace; +} pngle_ihdr_t; + +// Get IHDR information +pngle_ihdr_t *pngle_get_ihdr(pngle_t *pngle); + + +#ifdef __cplusplus +} +#endif + +#endif /* __PNGLE_H__ */ diff --git a/Microcontroller Code/lib/pngle-master/tests/Makefile b/Microcontroller Code/lib/pngle-master/tests/Makefile new file mode 100644 index 0000000..c24f4cd --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/tests/Makefile @@ -0,0 +1,21 @@ +CFLAGS+=-Os -std=c99 +CFLAGS += -I.. +CFLAGS += -Wall -Wextra -Wno-misleading-indentation -Wno-unknown-warning-option +# CFLAGS += -DPNGLE_NO_GAMMA_CORRECTION + +PNGLE_C=../pngle.c ../miniz.c +PNGLE_H=../pngle.h ../miniz.h + +all: png2ppm info + +png2ppm: ../examples/png2ppm.c $(PNGLE_C) $(PNGLE_H) Makefile + $(CC) $(CFLAGS) -o png2ppm ../examples/png2ppm.c $(PNGLE_C) -lm + +info: info.c $(PNGLE_C) $(PNGLE_H) Makefile + $(CC) $(CFLAGS) -o info info.c $(PNGLE_C) -lm + +test: png2ppm info + sh test.sh + +clean: + rm -f png2ppm info diff --git a/Microcontroller Code/lib/pngle-master/tests/info.c b/Microcontroller Code/lib/pngle-master/tests/info.c new file mode 100644 index 0000000..a69391d --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/tests/info.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include +#include + +#include "pngle.h" + +int main(int argc, char *argv[]) +{ + int fd = argc > 1 ? open(argv[1], O_RDONLY) : 0; + pngle_t *pngle = pngle_new(); + + char buf[1024]; + int remain = 0; + int len; + while ((len = read(fd, buf + remain, sizeof(buf) - remain)) > 0) { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) { + fprintf(stderr, "ERROR: %s\n", pngle_error(pngle)); + return -1; + } + + remain = remain + len - fed; + if (remain > 0) memmove(buf, buf + fed, remain); + } + + pngle_ihdr_t *ihdr = pngle_get_ihdr(pngle); + + fprintf(stderr, "%3d x %3d, colorType: %d, depth %2d, mode %c\n" + , ihdr->width + , ihdr->height + , ihdr->color_type + , ihdr->depth + , ihdr->interlace ? 'i' : 'n' + ); + + return 0; +} diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.LICENSE b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.LICENSE new file mode 100644 index 0000000..8d4d1d0 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.LICENSE @@ -0,0 +1,9 @@ +PngSuite +-------- + +Permission to use, copy, modify and distribute these images for any +purpose and without fee is hereby granted. + + +(c) Willem van Schaik, 1996, 2011 + diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.README b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.README new file mode 100644 index 0000000..94df6cc --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.README @@ -0,0 +1,25 @@ + PNGSUITE +---------------- + + testset for PNG-(de)coders + created by Willem van Schaik +------------------------------------ + +This is a collection of graphics images created to test the png applications +like viewers, converters and editors. All (as far as that is possible) +formats supported by the PNG standard are represented. + +The suite consists of the following files: + +- PngSuite.README - this file +- PngSuite.LICENSE - the PngSuite is freeware +- PngSuite.png - image with PngSuite logo +- PngSuite.tgz - archive of all PNG testfiles +- PngSuite.zip - same in .zip format for PCs + + +-------- + (c) Willem van Schaik + willem@schaik.com + Calgary, April 2011 + diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.png new file mode 100644 index 0000000..205460d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/PngSuite.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g01.png new file mode 100644 index 0000000..556fa72 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g02.png new file mode 100644 index 0000000..ce09821 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g04.png new file mode 100644 index 0000000..3853273 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g08.png new file mode 100644 index 0000000..faed8be Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g16.png new file mode 100644 index 0000000..a9f2816 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c08.png new file mode 100644 index 0000000..2aab44d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c16.png new file mode 100644 index 0000000..cd7e50f Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p01.png new file mode 100644 index 0000000..00a7cea Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p02.png new file mode 100644 index 0000000..bb16b44 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p04.png new file mode 100644 index 0000000..b4e888e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p08.png new file mode 100644 index 0000000..50a6d1c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a08.png new file mode 100644 index 0000000..398132b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a16.png new file mode 100644 index 0000000..51192e7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi4a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a08.png new file mode 100644 index 0000000..aecb32e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a16.png new file mode 100644 index 0000000..4181533 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basi6a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g01.png new file mode 100644 index 0000000..1d72242 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g02.png new file mode 100644 index 0000000..5083324 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g04.png new file mode 100644 index 0000000..0bf3687 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g08.png new file mode 100644 index 0000000..23c8237 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g16.png new file mode 100644 index 0000000..e7c82f7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c08.png new file mode 100644 index 0000000..db5ad15 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c16.png new file mode 100644 index 0000000..50c1cb9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p01.png new file mode 100644 index 0000000..b145c2b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p02.png new file mode 100644 index 0000000..8985b3d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p04.png new file mode 100644 index 0000000..0fbf9e8 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p08.png new file mode 100644 index 0000000..0ddad07 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a08.png new file mode 100644 index 0000000..3e13052 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a16.png new file mode 100644 index 0000000..8243644 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn4a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a08.png new file mode 100644 index 0000000..e608738 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a16.png new file mode 100644 index 0000000..984a995 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/basn6a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a08.png new file mode 100644 index 0000000..398132b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a16.png new file mode 100644 index 0000000..51192e7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgai4a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a08.png new file mode 100644 index 0000000..e608738 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a16.png new file mode 100644 index 0000000..984a995 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgan6a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgbn4a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgbn4a08.png new file mode 100644 index 0000000..7cbefc3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgbn4a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bggn4a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bggn4a16.png new file mode 100644 index 0000000..13fd85b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bggn4a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgwn6a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgwn6a08.png new file mode 100644 index 0000000..a67ff20 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgwn6a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgyn6a16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgyn6a16.png new file mode 100644 index 0000000..ae3e9be Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/bgyn6a16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn2c08.png new file mode 100644 index 0000000..47c2481 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn3p08.png new file mode 100644 index 0000000..8bb2c10 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ccwn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdfn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdfn2c08.png new file mode 100644 index 0000000..559e526 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdfn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdhn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdhn2c08.png new file mode 100644 index 0000000..3e07e8e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdhn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdsn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdsn2c08.png new file mode 100644 index 0000000..076c32c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdsn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdun2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdun2c08.png new file mode 100644 index 0000000..846033b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cdun2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch1n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch1n3p04.png new file mode 100644 index 0000000..17cd12d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch1n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch2n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch2n3p08.png new file mode 100644 index 0000000..25c1798 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ch2n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm0n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm0n0g04.png new file mode 100644 index 0000000..9fba5db Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm0n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm7n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm7n0g04.png new file mode 100644 index 0000000..f7dc46e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm7n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm9n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm9n0g04.png new file mode 100644 index 0000000..dd70911 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cm9n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n2c16.png new file mode 100644 index 0000000..bf5fd20 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n3p08.png new file mode 100644 index 0000000..f4a6623 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs3n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n2c08.png new file mode 100644 index 0000000..40f947c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n3p08.png new file mode 100644 index 0000000..dfd6e6e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs5n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n2c08.png new file mode 100644 index 0000000..8e01d32 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n3p08.png new file mode 100644 index 0000000..a44066e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cs8n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct0n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct0n0g04.png new file mode 100644 index 0000000..40d1e06 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct0n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct1n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct1n0g04.png new file mode 100644 index 0000000..3ba110a Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ct1n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cten0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cten0g04.png new file mode 100644 index 0000000..a6a56fa Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cten0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctfn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctfn0g04.png new file mode 100644 index 0000000..353873e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctfn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctgn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctgn0g04.png new file mode 100644 index 0000000..453f2b0 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctgn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/cthn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cthn0g04.png new file mode 100644 index 0000000..8fce253 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/cthn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctjn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctjn0g04.png new file mode 100644 index 0000000..a77b8d2 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctjn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctzn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctzn0g04.png new file mode 100644 index 0000000..b4401c9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ctzn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/exif2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/exif2c08.png new file mode 100644 index 0000000..56eb734 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/exif2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n0g08.png new file mode 100644 index 0000000..45a0075 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n2c08.png new file mode 100644 index 0000000..d6a1fff Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f00n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n0g08.png new file mode 100644 index 0000000..4a1107b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n2c08.png new file mode 100644 index 0000000..26fee95 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f01n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n0g08.png new file mode 100644 index 0000000..bfe410c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n2c08.png new file mode 100644 index 0000000..e590f12 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f02n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n0g08.png new file mode 100644 index 0000000..ed01e29 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n2c08.png new file mode 100644 index 0000000..7581150 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f03n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n0g08.png new file mode 100644 index 0000000..663fdae Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n2c08.png new file mode 100644 index 0000000..3c8b511 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f04n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/f99n0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f99n0g04.png new file mode 100644 index 0000000..0b521c1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/f99n0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n0g16.png new file mode 100644 index 0000000..41083ca Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n2c08.png new file mode 100644 index 0000000..a9354db Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n3p04.png new file mode 100644 index 0000000..60396c9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g03n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n0g16.png new file mode 100644 index 0000000..32395b7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n2c08.png new file mode 100644 index 0000000..a652b0c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n3p04.png new file mode 100644 index 0000000..5661cc3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g04n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n0g16.png new file mode 100644 index 0000000..70b37f0 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n2c08.png new file mode 100644 index 0000000..932c136 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n3p04.png new file mode 100644 index 0000000..9619930 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g05n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n0g16.png new file mode 100644 index 0000000..d6a47c2 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n2c08.png new file mode 100644 index 0000000..5973464 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n3p04.png new file mode 100644 index 0000000..c73fb61 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g07n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n0g16.png new file mode 100644 index 0000000..85f2c95 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n2c08.png new file mode 100644 index 0000000..b303997 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n3p04.png new file mode 100644 index 0000000..1b6a6be Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g10n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n0g16.png new file mode 100644 index 0000000..a9f6787 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n2c08.png new file mode 100644 index 0000000..03f505a Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n3p04.png new file mode 100644 index 0000000..4f943c6 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/g25n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n0g16.png new file mode 100644 index 0000000..e7c82f7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n2c16.png new file mode 100644 index 0000000..50c1cb9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi1n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n0g16.png new file mode 100644 index 0000000..14d64c5 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n2c16.png new file mode 100644 index 0000000..4c2e3e3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi2n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n0g16.png new file mode 100644 index 0000000..69e73ed Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n2c16.png new file mode 100644 index 0000000..93691e3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi4n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n0g16.png new file mode 100644 index 0000000..9248413 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n2c16.png new file mode 100644 index 0000000..f0512e4 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/oi9n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n2c16.png new file mode 100644 index 0000000..8f2aad7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n6a08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n6a08.png new file mode 100644 index 0000000..4ed7a30 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/pp0n6a08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n0g08.png new file mode 100644 index 0000000..99625fa Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n2c16.png new file mode 100644 index 0000000..0c7a6b3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps1n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n0g08.png new file mode 100644 index 0000000..90b2979 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n2c16.png new file mode 100644 index 0000000..a4a181e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/ps2n2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01i3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01i3p01.png new file mode 100644 index 0000000..6c0fad1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01i3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01n3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01n3p01.png new file mode 100644 index 0000000..cb2c8c7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s01n3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02i3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02i3p01.png new file mode 100644 index 0000000..2defaed Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02i3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02n3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02n3p01.png new file mode 100644 index 0000000..2b1b669 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s02n3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03i3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03i3p01.png new file mode 100644 index 0000000..c23fdc4 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03i3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03n3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03n3p01.png new file mode 100644 index 0000000..6d96ee4 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s03n3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04i3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04i3p01.png new file mode 100644 index 0000000..0e710c2 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04i3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04n3p01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04n3p01.png new file mode 100644 index 0000000..956396c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s04n3p01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05i3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05i3p02.png new file mode 100644 index 0000000..d14cbd3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05i3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05n3p02.png new file mode 100644 index 0000000..bf940f0 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s05n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06i3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06i3p02.png new file mode 100644 index 0000000..456ada3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06i3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06n3p02.png new file mode 100644 index 0000000..501064d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s06n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07i3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07i3p02.png new file mode 100644 index 0000000..44b66ba Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07i3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07n3p02.png new file mode 100644 index 0000000..6a58259 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s07n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08i3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08i3p02.png new file mode 100644 index 0000000..acf74f3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08i3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08n3p02.png new file mode 100644 index 0000000..b7094e1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s08n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09i3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09i3p02.png new file mode 100644 index 0000000..0bfae8e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09i3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09n3p02.png new file mode 100644 index 0000000..711ab82 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s09n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32i3p04.png new file mode 100644 index 0000000..0841910 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32n3p04.png new file mode 100644 index 0000000..fa58e3e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s32n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33i3p04.png new file mode 100644 index 0000000..ab0dc14 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33n3p04.png new file mode 100644 index 0000000..764f1a3 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s33n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34i3p04.png new file mode 100644 index 0000000..bd99039 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34n3p04.png new file mode 100644 index 0000000..9cbc68b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s34n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35i3p04.png new file mode 100644 index 0000000..e2a5e0a Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35n3p04.png new file mode 100644 index 0000000..90b892e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s35n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36i3p04.png new file mode 100644 index 0000000..eb61b6f Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36n3p04.png new file mode 100644 index 0000000..b38d179 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s36n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37i3p04.png new file mode 100644 index 0000000..6e2b1e9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37n3p04.png new file mode 100644 index 0000000..4d3054d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s37n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38i3p04.png new file mode 100644 index 0000000..a0a8a14 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38n3p04.png new file mode 100644 index 0000000..1233ed0 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s38n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39i3p04.png new file mode 100644 index 0000000..04fee93 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39n3p04.png new file mode 100644 index 0000000..c750100 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s39n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40i3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40i3p04.png new file mode 100644 index 0000000..68f358b Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40i3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40n3p04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40n3p04.png new file mode 100644 index 0000000..864b6b9 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/s40n3p04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn0g04.png new file mode 100644 index 0000000..39a7050 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn2c16.png new file mode 100644 index 0000000..dd3168e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn3p08.png new file mode 100644 index 0000000..0ede357 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbbn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn2c16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn2c16.png new file mode 100644 index 0000000..85cec39 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn2c16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn3p08.png new file mode 100644 index 0000000..8cf2e6f Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbgn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbrn2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbrn2c08.png new file mode 100644 index 0000000..5cca0d6 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbrn2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn0g16.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn0g16.png new file mode 100644 index 0000000..99bdeed Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn0g16.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn3p08.png new file mode 100644 index 0000000..eacab7a Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbwn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbyn3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbyn3p08.png new file mode 100644 index 0000000..656db09 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tbyn3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tm3n3p02.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tm3n3p02.png new file mode 100644 index 0000000..fb3ef1d Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tm3n3p02.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n0g08.png new file mode 100644 index 0000000..333465f Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n2c08.png new file mode 100644 index 0000000..fc6e42c Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n3p08.png new file mode 100644 index 0000000..69a69e5 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp0n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp1n3p08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp1n3p08.png new file mode 100644 index 0000000..a6c9f35 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/tp1n3p08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc1n0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc1n0g08.png new file mode 100644 index 0000000..9404227 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc1n0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc9n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc9n2c08.png new file mode 100644 index 0000000..b11c2a7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xc9n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcrn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcrn0g04.png new file mode 100644 index 0000000..48abba1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcrn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcsn0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcsn0g01.png new file mode 100644 index 0000000..9863a26 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xcsn0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd0n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd0n2c08.png new file mode 100644 index 0000000..2f00161 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd0n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd3n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd3n2c08.png new file mode 100644 index 0000000..9e4a3ff Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd3n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd9n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd9n2c08.png new file mode 100644 index 0000000..2c3b91a Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xd9n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xdtn0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xdtn0g01.png new file mode 100644 index 0000000..1a81abe Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xdtn0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xhdn0g08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xhdn0g08.png new file mode 100644 index 0000000..fcb8737 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xhdn0g08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xlfn0g04.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xlfn0g04.png new file mode 100644 index 0000000..d9ec53e Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xlfn0g04.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs1n0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs1n0g01.png new file mode 100644 index 0000000..1817c51 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs1n0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs2n0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs2n0g01.png new file mode 100644 index 0000000..b8147f2 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs2n0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs4n0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs4n0g01.png new file mode 100644 index 0000000..45237a1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs4n0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs7n0g01.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs7n0g01.png new file mode 100644 index 0000000..3f307f1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/xs7n0g01.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/z00n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z00n2c08.png new file mode 100644 index 0000000..7669eb8 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z00n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/z03n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z03n2c08.png new file mode 100644 index 0000000..bfb10de Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z03n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/z06n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z06n2c08.png new file mode 100644 index 0000000..b90ebc1 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z06n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/pngsuite/z09n2c08.png b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z09n2c08.png new file mode 100644 index 0000000..5f191a7 Binary files /dev/null and b/Microcontroller Code/lib/pngle-master/tests/pngsuite/z09n2c08.png differ diff --git a/Microcontroller Code/lib/pngle-master/tests/test.sh b/Microcontroller Code/lib/pngle-master/tests/test.sh new file mode 100644 index 0000000..a646110 --- /dev/null +++ b/Microcontroller Code/lib/pngle-master/tests/test.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +exec 2>/dev/null + +for i in pngsuite/*.png; do + echo -n "${i}: " + ./info "$i" 2>&1 | tr '\n' ' ' + + a=`./png2ppm -g 1 "$i" | pamdepth 255| cksum` + b=`pngtopnm -gamma 1 -quiet "$i" | ppmtoppm | pamdepth 255 | cksum` + + if [ "x$a" = "x$b" ]; then + echo "... PASS" + else + echo "... FAILED" + fi +done diff --git a/Microcontroller Code/platformio.ini b/Microcontroller Code/platformio.ini new file mode 100644 index 0000000..34a0a0a --- /dev/null +++ b/Microcontroller Code/platformio.ini @@ -0,0 +1,15 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp-wrover-kit] +platform = espressif32 +board = esp-wrover-kit +framework = arduino +monitor_speed = 115200 diff --git a/Microcontroller Code/src/data/home.ico b/Microcontroller Code/src/data/home.ico new file mode 100644 index 0000000..c855d97 Binary files /dev/null and b/Microcontroller Code/src/data/home.ico differ diff --git a/Microcontroller Code/src/data/home.png b/Microcontroller Code/src/data/home.png new file mode 100644 index 0000000..ee7281e Binary files /dev/null and b/Microcontroller Code/src/data/home.png differ diff --git a/Microcontroller Code/src/data/octocat.png b/Microcontroller Code/src/data/octocat.png new file mode 100644 index 0000000..d34e881 Binary files /dev/null and b/Microcontroller Code/src/data/octocat.png differ diff --git a/Microcontroller Code/src/data/riscaldamento.png b/Microcontroller Code/src/data/riscaldamento.png new file mode 100644 index 0000000..0b8a39a Binary files /dev/null and b/Microcontroller Code/src/data/riscaldamento.png differ diff --git a/Microcontroller Code/src/main.cpp b/Microcontroller Code/src/main.cpp new file mode 100644 index 0000000..0a991a2 --- /dev/null +++ b/Microcontroller Code/src/main.cpp @@ -0,0 +1,486 @@ + +/********* + Federico Vittorio Chiodo + +*********/ + + +#include +//#include +#include //*Libreria per variabili non volatili + + +//int temperatura=0; +//bool inRiscaldamento=true; + + + + +void updateLCD(int temperature); +void firstStart(); + + +/* +* +* +* Funzioni e variabili LCD +* +* +*/ + +#define PNG_FILENAME "/octocat.png" //Home Normale +#define PNG_FILENAME_HEATING "/riscaldamento.png" //Home in riscaldamento + +/******************************************************************************* + * Start of Arduino_GFX setting + ******************************************************************************/ +#include + +/* first check if selected specific hardware */ +// #define ESP32_LCDKIT_SPI +// #define TTGO_T_DISPLAY +// #define WT32_SC01 +#if defined(ESP32_LCDKIT_SPI) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(19 /* DC */, 5 /* CS */, 22 /* SCK */, 21 /* MOSI */, 27 /* MISO */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, 18 /* RST */, 1 /* rotation */); + +#elif defined(TTGO_T_DISPLAY) +#define TFT_BL 4 +Arduino_DataBus *bus = new Arduino_ESP32SPI(16 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, 23 /* RST */, 2 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +#elif defined(WT32_SC01) +#define TFT_BL 23 +Arduino_DataBus *bus = new Arduino_ESP32SPI(21 /* DC */, 15 /* CS */, 14 /* SCK */, 13 /* MOSI */, -1 /* MISO */); +Arduino_ST7796 *gfx = new Arduino_ST7796(bus, 22 /* RST */, 3 /* rotation */); + +/* Wio Terminal */ +#elif defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#define TFT_BL LCD_BACKLIGHT +Arduino_HWSPI *bus = new Arduino_HWSPI(LCD_DC /* DC */, LCD_SS_PIN /* CS */); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); + +/* M5Stack */ +#elif defined(ARDUINO_M5Stack_Core_ESP32) || defined(ARDUINO_M5STACK_FIRE) +#define TFT_BL 32 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 14 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341_M5STACK *gfx = new Arduino_ILI9341_M5STACK(bus, 33 /* RST */, 1 /* rotation */); + +/* Odroid-Go */ +#elif defined(ARDUINO_ODROID_ESP32) +#define TFT_BL 14 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(21 /* DC */, 5 /* CS */, SCK, MOSI, MISO); +Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, -1 /* RST */, 3 /* rotation */); +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 1 /* rotation */, true /* IPS */); + +/* TTGO T-Watch */ +#elif defined(ARDUINO_T) || defined(ARDUINO_TWATCH_BASE) || defined(ARDUINO_TWATCH_2020_V1) || defined(ARDUINO_TWATCH_2020_V2) +#define TFT_BL 12 +Arduino_ESP32SPI *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 19 /* MOSI */, -1 /* MISO */); +Arduino_ST7789 *gfx = new Arduino_ST7789(bus, -1 /* RST */, 2 /* rotation */, true /* IPS */, 240, 240, 0, 80); + +#else /* not selected specific hardware */ + +#if defined(ESP32) +#define TFT_CS 5 +// #define TFT_CS -1 // for display without CS pin +// #define TFT_DC 16 +#define TFT_DC 27 +// #define TFT_DC -1 // for display without DC pin (9-bit SPI) +// #define TFT_RST 17 +#define TFT_RST 33 +#define TFT_BL 22 +#elif defined(ESP8266) +#define TFT_CS 15 +#define TFT_DC 5 +#define TFT_RST 16 +// #define TFT_BL 4 +#else +#define TFT_CS 9 +#define TFT_DC 8 +#define TFT_RST 7 +#define TFT_BL 6 +#endif + +/* + * Step 1: Initize one databus for your display +*/ + +// General software SPI +// Arduino_DataBus *bus = new Arduino_SWSPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */); + +// General hardware SPI +//Arduino_DataBus *bus = new Arduino_HWSPI(TFT_DC, TFT_CS); + +// ESP32 hardware SPI, more customizable parameters + Arduino_DataBus *bus = new Arduino_ESP32SPI(TFT_DC, TFT_CS, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, VSPI /* spi_num */); + +// ESP32 parallel 8-bit +// Arduino_DataBus *bus = new Arduino_ESP32PAR8(TFT_DC, TFT_CS, 26 /* WR */, -1 /* RD */, 16 /* D0 */, 17 /* D1 */, 18 /* D2 */, 19 /* D3 */, 21 /* D4 */, 12 /* D5 */, 23 /* D6 */, 25 /* D7 */); + +// ESP32 parallel 16-bit +// Almost all GPIO 0-31 used up for 16-bit and WR, disable PSRAM to gain 16 and 17 but still no GPIOs remain for CS and RD. +// CS connect to GND (enable); RD connect to Vcc (disable). +// Arduino_DataBus *bus = new Arduino_ESP32PAR16( +// 32 /* DC */, -1 /* CS */, 21 /* WR */, -1 /* RD */, +// 19 /* D0 */, 23 /* D1 */, 18 /* D2 */, 5 /* D3 */, 17 /* D4 */, 16 /* D5 */, 25 /* D6 */, 26 /* D7 */, +// 27 /* D8 */, 14 /* D9 */, 12 /* D10 */, 13 /* D11 */, 15 /* D12 */, 2 /* D13 */, 0 /* D14 */, 4 /* D15 */); + +/* + * Step 2: Initize one driver for your display +*/ + +// Canvas (framebuffer) +// Arduino_ST7789 *output_display = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 16-bit color Canvas (240x320 resolution only works for ESP32 with PSRAM) +// Arduino_Canvas *gfx = new Arduino_Canvas(240 /* width */, 320 /* height */, output_display); +// Indexed color Canvas, mask_level: 0-2, larger mask level mean less color variation but can have faster index mapping +// Arduino_Canvas_Indexed *gfx = new Arduino_Canvas_Indexed(240 /* width */, 320 /* height */, output_display, 0 /* output_x */, 0 /* output_y */, MAXMASKLEVEL /* mask_level */); + +// GC9A01 IPS LCD 240x240 + Arduino_GC9A01 *gfx = new Arduino_GC9A01(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347C IPS LCD 240x320 +// Arduino_HX8347C *gfx = new Arduino_HX8347C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8347D IPS LCD 240x320 +// Arduino_HX8347D *gfx = new Arduino_HX8347D(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8352C IPS LCD 240x400 +// Arduino_HX8352C *gfx = new Arduino_HX8352C(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// HX8357B IPS LCD 320x480 +// Arduino_HX8357B *gfx = new Arduino_HX8357B(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// ILI9225 LCD 176x220 +// Arduino_ILI9225 *gfx = new Arduino_ILI9225(bus, TFT_RST); + +// ILI9341 LCD 240x320 +//Arduino_ILI9341 *gfx = new Arduino_ILI9341(bus, TFT_RST, 0 /* rotation */); + +// ILI9481 LCD 320x480 +// Arduino_ILI9481_18bit *gfx = new Arduino_ILI9481_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9486 LCD 320x480 +// Arduino_ILI9486_18bit *gfx = new Arduino_ILI9486_18bit(bus, TFT_RST, 0 /* rotation */); + +// ILI9488 LCD 320x480 +// Arduino_ILI9488_18bit *gfx = new Arduino_ILI9488_18bit(bus, TFT_RST, 0 /* rotation */); + +// JBT6K71 LCD 240x320 +// Arduino_JBT6K71 *gfx = new Arduino_JBT6K71(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240, 320, 0, 0, 16, 0); + +// R61529 IPS LCD 320x480 +// Arduino_R61529 *gfx = new Arduino_R61529(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +// SEPS525 OLED 160x128 +// Arduino_SEPS525 *gfx = new Arduino_SEPS525(bus, TFT_RST, 0 /* rotation */); + +// SSD1283A OLED 130x130 +// Arduino_SSD1283A *gfx = new Arduino_SSD1283A(bus, TFT_RST, 0 /* rotation */); + +// SSD1331 OLED 96x64 +// Arduino_SSD1331 *gfx = new Arduino_SSD1331(bus, TFT_RST, 0 /* rotation */); + +// SSD1351 OLED 128x128 +// Arduino_SSD1351 *gfx = new Arduino_SSD1351(bus, TFT_RST, 0 /* rotation */); + +// ST7735 LCD +// 1.8" REDTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */); +// 1.8" BLACKTAB 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */, false /* BGR */); +// 1.8" GREENTAB A 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 1 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" GREENTAB B 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.8" Wide angle LCD 128x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 160 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */, 0 /* col offset 2 */, 0 /* row offset 2 */, false /* BGR */); +// 1.5" GREENTAB B 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 2 /* col offset 1 */, 3 /* row offset 1 */, 2 /* col offset 2 */, 1 /* row offset 2 */); +// 1.5" GREENTAB C 128x128 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 0 /* rotation */, false /* IPS */, 128 /* width */, 128 /* height */, 0 /* col offset 1 */, 32 /* row offset 1 */); +// 0.96" IPS LCD 80x160 +// Arduino_ST7735 *gfx = new Arduino_ST7735(bus, TFT_RST, 3 /* rotation */, true /* IPS */, 80 /* width */, 160 /* height */, 26 /* col offset 1 */, 1 /* row offset 1 */, 26 /* col offset 2 */, 1 /* row offset 2 */); + +// ST7789 LCD +// 2.4" LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */); +// 2.4" IPS LCD 240x320 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */); +// 1.69" IPS round corner LCD 240x280 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 240 /* width */, 280 /* height */, 0 /* col offset 1 */, 20 /* row offset 1 */, 0 /* col offset 2 */, 20 /* row offset 2 */); +// 1.3"/1.5" square IPS LCD 240x240 +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 2 /* rotation */, true /* IPS */, 240 /* width */, 240 /* height */, 0 /* col offset 1 */, 80 /* row offset 1 */); +// 1.14" IPS LCD 135x240 TTGO T-Display +// Arduino_ST7789 *gfx = new Arduino_ST7789(bus, TFT_RST, 0 /* rotation */, true /* IPS */, 135 /* width */, 240 /* height */, 53 /* col offset 1 */, 40 /* row offset 1 */, 52 /* col offset 2 */, 40 /* row offset 2 */); + +// ST7796 LCD +// 4" LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */); +// 4" IPS LCD 320x480 +// Arduino_ST7796 *gfx = new Arduino_ST7796(bus, TFT_RST, 0 /* rotation */, true /* IPS */); + +#endif /* not selected specific hardware */ +/******************************************************************************* + * End of Arduino_GFX setting + ******************************************************************************/ + +/* Wio Terminal */ +#if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) +#include +#include +#elif defined(ESP32) +#include +#include +#elif defined(ESP8266) +#include +#include +#else +#include +#endif + +#include +int16_t xOffset = 0; +int16_t yOffset = 0; + +// Pngle init callback +void pngleInitCallback(pngle_t *pngle, uint32_t w, uint32_t h) +{ + int16_t gfxW = gfx->width(); + int16_t gfxH = gfx->height(); + xOffset = (w > gfxW) ? 0 : ((gfxW - w) / 2); + yOffset = (h > gfxH) ? 0 : ((gfxH - h) / 2); +} + +// Pngle draw callback +void pngleDrawCallback(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4]) +{ + if (rgba[3]) // not transparent + { + gfx->fillRect(x + xOffset, y + yOffset, w, h, gfx->color565(rgba[0], rgba[1], rgba[2])); + } +} + + +void setup() { + Serial.begin(115200); //era 115200 + Serial.setTimeout(1); + // Init Display + gfx->begin(); + Serial.println("LCD Inizializzato"); + gfx->fillScreen(BLACK); + + #ifdef TFT_BL + pinMode(TFT_BL, OUTPUT); + digitalWrite(TFT_BL, HIGH); + #endif + firstStart(); + +} +String lastTemp; + +void loop(){ + if (Serial.available() > 0) { + //Read the incoming String + String temp = Serial.readString(); + if(temp.toInt()<10){ + return; + } + + //Say what you got: + Serial.print("I received: "); + Serial.println(temp); + if(!lastTemp.equals(temp)){ + lastTemp=temp; + updateLCD(temp.toInt()); + } + + } +} + +int cont=0; +void updateLCD(int temperature){ + if(temperature<=53){ + #if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) + #elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) + #elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) + #else + if (!SD.begin()) + #endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { + unsigned long start = millis(); + + /* Wio Terminal */ + #if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File pngFile = SD.open(PNG_FILENAME, "r"); + #elif defined(ESP32) + File pngFile = SPIFFS.open(PNG_FILENAME, "r"); + // File pngFile = SD.open(PNG_FILENAME, "r"); + #elif defined(ESP8266) + File pngFile = LittleFS.open(PNG_FILENAME, "r"); + // File pngFile = SD.open(PNG_FILENAME, "r"); + #else + File pngFile = SD.open(PNG_FILENAME, FILE_READ); + #endif + + if (!pngFile || pngFile.isDirectory()) + { + Serial.println(F("ERROR: Failed to open " PNG_FILENAME " file for reading")); + gfx->println(F("ERROR: Failed to open " PNG_FILENAME " file for reading")); + } + else + { + pngle_t *pngle = pngle_new(); + pngle_set_init_callback(pngle, pngleInitCallback); + pngle_set_draw_callback(pngle, pngleDrawCallback); + char buf[16]; // buffer minimum size is 16 but it can be much larger, e.g. 2048 + int remain = 0; + int len; + gfx->fillScreen(BLACK); // transprant background color + while ((len = pngFile.readBytes(buf + remain, sizeof(buf) - remain)) > 0) + { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) + { + Serial.printf("ERROR: %s\n", pngle_error(pngle)); + break; + } + + remain = remain + len - fed; + if (remain > 0) + { + memmove(buf, buf + fed, remain); + } + } + + pngle_destroy(pngle); + pngFile.close(); + + Serial.printf("Time used: %lu\n", millis() - start); + + gfx->setCursor(90, 175); //100, 175 + gfx->setTextColor(GREEN); //Rosso + gfx->setTextSize(3 /* x scale */, 3 /* y scale */, 3 /* pixel_margin */); + gfx->print(temperature); //*Simbolo ° (char)223 o String tempUnit = " \xB0""C"; + gfx->print((char) 247); //*247 FUNZIONA 9 troppo centrato in y + gfx->println("C"); + + //* To temp (RICALDAMENTO) + //gfx->setCursor(85, 200); //100, 175 + //gfx->setTextSize(2 /* x scale */, 2 /* y scale */, 2 /* pixel_margin */); + //gfx->println("-> 30C"); + //delay(5000); + } + } + }else{ + /* Wio Terminal */ + #if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI, 4000000UL)) + #elif defined(ESP32) + if (!SPIFFS.begin()) + // if (!SD.begin(SS)) + #elif defined(ESP8266) + if (!LittleFS.begin()) + // if (!SD.begin(SS)) + #else + if (!SD.begin()) + #endif + { + Serial.println(F("ERROR: File System Mount Failed!")); + gfx->println(F("ERROR: File System Mount Failed!")); + } + else + { + unsigned long start = millis(); + + /* Wio Terminal */ + #if defined(ARDUINO_ARCH_SAMD) && defined(SEEED_GROVE_UI_WIRELESS) + File pngFile = SD.open(PNG_FILENAME_HEATING, "r"); + #elif defined(ESP32) + File pngFile = SPIFFS.open(PNG_FILENAME_HEATING, "r"); + // File pngFile = SD.open(PNG_FILENAME_HEATING, "r"); + #elif defined(ESP8266) + File pngFile = LittleFS.open(PNG_FILENAME_HEATING, "r"); + // File pngFile = SD.open(PNG_FILENAME_HEATING, "r"); + #else + File pngFile = SD.open(PNG_FILENAME_HEATING, FILE_READ); + #endif + + if (!pngFile || pngFile.isDirectory()) + { + Serial.println(F("ERROR: Failed to open " PNG_FILENAME_HEATING " file for reading")); + gfx->println(F("ERROR: Failed to open " PNG_FILENAME_HEATING " file for reading")); + } + else + { + pngle_t *pngle = pngle_new(); + pngle_set_init_callback(pngle, pngleInitCallback); + pngle_set_draw_callback(pngle, pngleDrawCallback); + char buf[16]; // buffer minimum size is 16 but it can be much larger, e.g. 2048 + int remain = 0; + int len; + gfx->fillScreen(BLACK); // transprant background color + while ((len = pngFile.readBytes(buf + remain, sizeof(buf) - remain)) > 0) + { + int fed = pngle_feed(pngle, buf, remain + len); + if (fed < 0) + { + Serial.printf("ERROR: %s\n", pngle_error(pngle)); + break; + } + + remain = remain + len - fed; + if (remain > 0) + { + memmove(buf, buf + fed, remain); + } + } + + pngle_destroy(pngle); + pngFile.close(); + + Serial.printf("Time used: %lu\n", millis() - start); + + gfx->setCursor(90, 175); //100, 175 + if(temperature>70){ + gfx->setTextColor(RED); + }else{ + gfx->setTextColor(ORANGE); + } + + gfx->setTextSize(3 /* x scale */, 3 /* y scale */, 3 /* pixel_margin */); + gfx->print(temperature); //*Simbolo ° (char)223 o String tempUnit = " \xB0""C"; + gfx->print((char) 247); //*247 FUNZIONA 9 troppo centrato in y + gfx->println("C"); + + } + //delay(5000); + } + } + + +} +void firstStart(){ + + + gfx->setCursor(0, 100); //100, 175 + gfx->setTextColor(ORANGE); //Rosso + gfx->setTextSize(2 /* x scale */, 2 /* y scale */, 3 /* pixel_margin */); + gfx->println(" Run sendGPUTemp.py\n on your pc!"); + + + +} + diff --git a/Microcontroller Code/test/README b/Microcontroller Code/test/README new file mode 100644 index 0000000..b94d089 --- /dev/null +++ b/Microcontroller Code/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Unit Testing and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/page/plus/unit-testing.html diff --git a/PC code/gpu.py b/PC code/gpu.py new file mode 100644 index 0000000..8bde8f9 --- /dev/null +++ b/PC code/gpu.py @@ -0,0 +1,28 @@ +#TEST + +import GPUtil +from tabulate import tabulate +print("="*40, "GPU Details", "="*40) +gpus = GPUtil.getGPUs() +list_gpus = [] +for gpu in gpus: + # get the GPU id + gpu_id = gpu.id + # name of GPU + gpu_name = gpu.name + # get % percentage of GPU usage of that GPU + gpu_load = f"{gpu.load*100}%" + # get free memory in MB format + gpu_free_memory = f"{gpu.memoryFree}MB" + # get used memory + gpu_used_memory = f"{gpu.memoryUsed}MB" + # get total memory + gpu_total_memory = f"{gpu.memoryTotal}MB" + # get GPU temperature in Celsius + gpu_temperature = f"{gpu.temperature} °C" + gpu_uuid = gpu.uuid + list_gpus.append(( + gpu_id, gpu_name, gpu_load, gpu_free_memory, gpu_used_memory, + gpu_total_memory, gpu_temperature, gpu_uuid + )) +print(tabulate(list_gpus, headers=("id", "name", "load", "free memory", "used memory", "total memory", "temperature", "uuid"))) diff --git a/PC code/send.py b/PC code/send.py new file mode 100644 index 0000000..6eeeb80 --- /dev/null +++ b/PC code/send.py @@ -0,0 +1,18 @@ +import GPUtil +import serial +import time + +print("OK") + +arduino = serial.Serial(port='/dev/ttyUSB0', baudrate=115200, timeout=.1) +def write_read(x): + arduino.write(bytes(x, 'utf-8')) + time.sleep(0.05) + data = arduino.readline() + return data +while True: + gpu=GPUtil.getGPUs()[0] + value = write_read(str(gpu.temperature)) + print(value) # printing the value + print(str(f"{gpu.temperature}")) + time.sleep(5)