From 071c30367986c9618fa23da7033ff16431a1cbd1 Mon Sep 17 00:00:00 2001 From: "hrushikesh.bhosale" Date: Wed, 16 Oct 2024 16:13:30 +0530 Subject: [PATCH 1/8] feat(esp_delta_ota): Added delta ota workflow diagram Added the esp_delta_ota workflow block diagram in README.md file --- esp_delta_ota/README.md | 5 ++++- esp_delta_ota/esp_delta_ota_block_diagram.png | Bin 0 -> 82591 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 esp_delta_ota/esp_delta_ota_block_diagram.png diff --git a/esp_delta_ota/README.md b/esp_delta_ota/README.md index b694f4af63..2067003a26 100644 --- a/esp_delta_ota/README.md +++ b/esp_delta_ota/README.md @@ -12,7 +12,10 @@ Compressed Delta OTA Updates aims at enabling Over-the-Air firmware update with * Only firmware level changes are required for integrating this component. No bootloader related changes required. * This scheme can be implemented for the existing devices in the field. -### Prerequisites +## Workflow Block diagram +![ESP Delta OTA Block Diagram](https://raw.githubusercontent.com/espressif/idf-extra-components/master/esp_delta_ota/esp_delta_ota_block_diagram.png) + +## Prerequisites * **ESP-IDF v4.3 and above** diff --git a/esp_delta_ota/esp_delta_ota_block_diagram.png b/esp_delta_ota/esp_delta_ota_block_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..6db74b24c912005edfb2a7837775ecc2f8396399 GIT binary patch literal 82591 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�)Du3c1+76l0^NwNXSphU?iB9bKMEFw8JL2^()Mae-VOU_7W zau!LFo7m)>L6DqIt##M$ zWa#fkU!;}C#F((H-}^pv2wR%l}Ts>u>Kr@-}7@L>3NI!dD_{L>cIUCc+)NB%c;*3YW7~BT|DT`Ec^6(~P*WwHuef-dNtD3ovt6veXe$=j zCtJ<6{iyvA%4p|U2>W@<5ULFm$9izXOB5e>vGPv9*4I;v$(RSLs+7@pK$n>I5)$1? z$D(%Id_W=i(&lM@blZ!-I#ACy=kW*fXeE8Acjqv#-$+dC_1yUW1~W?G#wCXKi}CGu z*y@4@zpmZC=KTm3$)>aXG*_|2?6ZaqH74T~^=h+-lasv(#?}}a^wj+w@6??sewBaC zWlr`k>>8$V0z7_4aA`I+gE>OR(_5^P`gwL=?Z
TZSs+}QGbM`v4)SajT)RPL|& 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

ebwT7X7^?CPql~0cCycA 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 literal 0 HcmV?d00001 From 3a550d820d4ea0e5b0d48a6b63f9eecc5415986c Mon Sep 17 00:00:00 2001 From: "sonika.rathi" Date: Wed, 16 Oct 2024 11:23:04 +0200 Subject: [PATCH 2/8] update(spi_nand_flash): handle alignment and DMA requirements for work buffers --- spi_nand_flash/idf_component.yml | 2 +- spi_nand_flash/src/nand.c | 37 ++++++++++++++++++++++-------- spi_nand_flash/src/nand.h | 1 + spi_nand_flash/src/spi_nand_oper.c | 30 ++++++++++++++++++++---- spi_nand_flash/src/spi_nand_oper.h | 1 + 5 files changed, 55 insertions(+), 16 deletions(-) diff --git a/spi_nand_flash/idf_component.yml b/spi_nand_flash/idf_component.yml index 9bb154687d..068f188442 100644 --- a/spi_nand_flash/idf_component.yml +++ b/spi_nand_flash/idf_component.yml @@ -1,4 +1,4 @@ -version: "0.4.0" +version: "0.4.1" description: Driver for accessing SPI NAND Flash url: https://github.com/espressif/idf-extra-components/tree/master/spi_nand_flash issues: https://github.com/espressif/idf-extra-components/issues diff --git a/spi_nand_flash/src/nand.c b/spi_nand_flash/src/nand.c index 7415551eee..b0a0979f98 100644 --- a/spi_nand_flash/src/nand.c +++ b/spi_nand_flash/src/nand.c @@ -17,7 +17,7 @@ #include "nand_flash_devices.h" #include "esp_vfs_fat_nand.h" -static const char *TAG = "nand"; +static const char *TAG = "nand_flash"; static esp_err_t spi_nand_winbond_init(spi_nand_flash_device_t *dev) { @@ -26,13 +26,15 @@ static esp_err_t spi_nand_winbond_init(spi_nand_flash_device_t *dev) .command = CMD_READ_ID, .dummy_bits = 16, .miso_len = 2, - .miso_data = device_id_buf + .miso_data = device_id_buf, + .flags = SPI_TRANS_USE_RXDATA, }; spi_nand_execute_transaction(dev->config.device_handle, &t); uint16_t device_id = (device_id_buf[0] << 8) + device_id_buf[1]; dev->read_page_delay_us = 10; dev->erase_block_delay_us = 2500; dev->program_page_delay_us = 320; + ESP_LOGD(TAG, "%s: device_id: %x\n", __func__, device_id); switch (device_id) { case WINBOND_DI_AA20: case WINBOND_DI_BA20: @@ -58,11 +60,13 @@ static esp_err_t spi_nand_alliance_init(spi_nand_flash_device_t *dev) .address_bytes = 1, .dummy_bits = 8, .miso_len = 1, - .miso_data = &device_id + .miso_data = &device_id, + .flags = SPI_TRANS_USE_RXDATA, }; spi_nand_execute_transaction(dev->config.device_handle, &t); dev->erase_block_delay_us = 3000; dev->program_page_delay_us = 630; + ESP_LOGD(TAG, "%s: device_id: %x\n", __func__, device_id); switch (device_id) { case ALLIANCE_DI_25: //AS5F31G04SND-08LIN dev->dhara_nand.num_blocks = 1024; @@ -97,13 +101,14 @@ static esp_err_t spi_nand_gigadevice_init(spi_nand_flash_device_t *dev) .command = CMD_READ_ID, .dummy_bits = 16, .miso_len = 1, - .miso_data = &device_id + .miso_data = &device_id, + .flags = SPI_TRANS_USE_RXDATA, }; spi_nand_execute_transaction(dev->config.device_handle, &t); dev->read_page_delay_us = 25; dev->erase_block_delay_us = 3200; dev->program_page_delay_us = 380; - printf("device_id: %x\n", device_id); + ESP_LOGD(TAG, "%s: device_id: %x\n", __func__, device_id); switch (device_id) { case GIGADEVICE_DI_51: case GIGADEVICE_DI_41: @@ -136,12 +141,14 @@ static esp_err_t spi_nand_micron_init(spi_nand_flash_device_t *dev) .command = CMD_READ_ID, .dummy_bits = 16, .miso_len = 1, - .miso_data = &device_id + .miso_data = &device_id, + .flags = SPI_TRANS_USE_RXDATA, }; spi_nand_execute_transaction(dev->config.device_handle, &t); dev->read_page_delay_us = 115; dev->erase_block_delay_us = 2000; dev->program_page_delay_us = 240; + ESP_LOGD(TAG, "%s: device_id: %x\n", __func__, device_id); switch (device_id) { case MICRON_DI_34: dev->dhara_nand.num_blocks = 2048; @@ -162,9 +169,11 @@ static esp_err_t detect_chip(spi_nand_flash_device_t *dev) .address = 0, // This normally selects the manufacturer id. Some chips ignores it, but still expects 8 dummy bits here .address_bytes = 1, .miso_len = 1, - .miso_data = &manufacturer_id + .miso_data = &manufacturer_id, + .flags = SPI_TRANS_USE_RXDATA, }; spi_nand_execute_transaction(dev->config.device_handle, &t); + ESP_LOGD(TAG, "%s: manufacturer_id: %x\n", __func__, manufacturer_id); switch (manufacturer_id) { case SPI_NAND_FLASH_ALLIANCE_MI: // Alliance @@ -221,10 +230,13 @@ esp_err_t spi_nand_flash_init_device(spi_nand_flash_config_t *config, spi_nand_f (*handle)->page_size = 1 << (*handle)->dhara_nand.log2_page_size; (*handle)->block_size = (1 << (*handle)->dhara_nand.log2_ppb) * (*handle)->page_size; (*handle)->num_blocks = (*handle)->dhara_nand.num_blocks; - (*handle)->work_buffer = malloc((*handle)->page_size); + (*handle)->work_buffer = heap_caps_malloc((*handle)->page_size, MALLOC_CAP_DMA | MALLOC_CAP_8BIT); ESP_GOTO_ON_FALSE((*handle)->work_buffer != NULL, ESP_ERR_NO_MEM, fail, TAG, "nomem"); + (*handle)->read_buffer = heap_caps_malloc((*handle)->page_size, MALLOC_CAP_DMA | MALLOC_CAP_8BIT); + ESP_GOTO_ON_FALSE((*handle)->read_buffer != NULL, ESP_ERR_NO_MEM, fail, TAG, "nomem"); + (*handle)->mutex = xSemaphoreCreateMutex(); if (!(*handle)->mutex) { ret = ESP_ERR_NO_MEM; @@ -242,6 +254,9 @@ esp_err_t spi_nand_flash_init_device(spi_nand_flash_config_t *config, spi_nand_f if ((*handle)->work_buffer != NULL) { free((*handle)->work_buffer); } + if ((*handle)->read_buffer != NULL) { + free((*handle)->read_buffer); + } if ((*handle)->mutex != NULL) { vSemaphoreDelete((*handle)->mutex); } @@ -281,16 +296,17 @@ esp_err_t spi_nand_flash_read_sector(spi_nand_flash_device_t *handle, uint8_t *b xSemaphoreTake(handle->mutex, portMAX_DELAY); - if (dhara_map_read(&handle->dhara_map, sector_id, buffer, &err)) { + if (dhara_map_read(&handle->dhara_map, sector_id, handle->read_buffer, &err)) { ret = ESP_ERR_FLASH_BASE + err; } else if (err) { // This indicates a soft ECC error, we rewrite the sector to recover - if (dhara_map_write(&handle->dhara_map, sector_id, buffer, &err)) { + if (dhara_map_write(&handle->dhara_map, sector_id, handle->read_buffer, &err)) { ret = ESP_ERR_FLASH_BASE + err; } } xSemaphoreGive(handle->mutex); + memcpy(buffer, handle->read_buffer, handle->page_size); return ret; } @@ -339,6 +355,7 @@ esp_err_t spi_nand_flash_get_sector_size(spi_nand_flash_device_t *handle, uint32 esp_err_t spi_nand_flash_deinit_device(spi_nand_flash_device_t *handle) { free(handle->work_buffer); + free(handle->read_buffer); vSemaphoreDelete(handle->mutex); free(handle); return ESP_OK; diff --git a/spi_nand_flash/src/nand.h b/spi_nand_flash/src/nand.h index 4b046c9a34..d5db7c9c08 100644 --- a/spi_nand_flash/src/nand.h +++ b/spi_nand_flash/src/nand.h @@ -27,6 +27,7 @@ struct spi_nand_flash_device_t { struct dhara_map dhara_map; struct dhara_nand dhara_nand; uint8_t *work_buffer; + uint8_t *read_buffer; uint32_t read_page_delay_us; uint32_t erase_block_delay_us; uint32_t program_page_delay_us; diff --git a/spi_nand_flash/src/spi_nand_oper.c b/spi_nand_flash/src/spi_nand_oper.c index 3b7f1be160..88496a844c 100644 --- a/spi_nand_flash/src/spi_nand_oper.c +++ b/spi_nand_flash/src/spi_nand_oper.c @@ -6,6 +6,7 @@ * SPDX-FileContributor: 2015-2023 Espressif Systems (Shanghai) CO LTD */ +#include #include "spi_nand_oper.h" #include "driver/spi_master.h" @@ -13,7 +14,7 @@ esp_err_t spi_nand_execute_transaction(spi_device_handle_t device, spi_nand_tran { spi_transaction_ext_t e = { .base = { - .flags = SPI_TRANS_VARIABLE_ADDR | SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_DUMMY, + .flags = SPI_TRANS_VARIABLE_ADDR | SPI_TRANS_VARIABLE_CMD | SPI_TRANS_VARIABLE_DUMMY | transaction->flags, .rxlength = transaction->miso_len * 8, .rx_buffer = transaction->miso_data, .length = transaction->mosi_len * 8, @@ -26,7 +27,21 @@ esp_err_t spi_nand_execute_transaction(spi_device_handle_t device, spi_nand_tran .dummy_bits = transaction->dummy_bits }; - return spi_device_transmit(device, (spi_transaction_t *) &e); + if (transaction->flags == SPI_TRANS_USE_TXDATA) { + assert(transaction->mosi_len <= 4 && "SPI_TRANS_USE_TXDATA used for a long transaction"); + memcpy(e.base.tx_data, transaction->mosi_data, transaction->mosi_len); + } + if (transaction->flags == SPI_TRANS_USE_RXDATA) { + assert(transaction->miso_len <= 4 && "SPI_TRANS_USE_RXDATA used for a long transaction"); + } + + esp_err_t ret = spi_device_transmit(device, (spi_transaction_t *) &e); + if (ret == ESP_OK) { + if (transaction->flags == SPI_TRANS_USE_RXDATA) { + memcpy(transaction->miso_data, e.base.rx_data, transaction->miso_len); + } + } + return ret; } esp_err_t spi_nand_read_register(spi_device_handle_t device, uint8_t reg, uint8_t *val) @@ -36,7 +51,8 @@ esp_err_t spi_nand_read_register(spi_device_handle_t device, uint8_t reg, uint8_ .address_bytes = 1, .address = reg, .miso_len = 1, - .miso_data = val + .miso_data = val, + .flags = SPI_TRANS_USE_RXDATA, }; return spi_nand_execute_transaction(device, &t); @@ -49,7 +65,8 @@ esp_err_t spi_nand_write_register(spi_device_handle_t device, uint8_t reg, uint8 .address_bytes = 1, .address = reg, .mosi_len = 1, - .mosi_data = &val + .mosi_data = &val, + .flags = SPI_TRANS_USE_TXDATA, }; return spi_nand_execute_transaction(device, &t); @@ -83,7 +100,10 @@ esp_err_t spi_nand_read(spi_device_handle_t device, uint8_t *data, uint16_t colu .address = column, .miso_len = length, .miso_data = data, - .dummy_bits = 8 + .dummy_bits = 8, +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 2, 0) + .flags = SPI_TRANS_DMA_BUFFER_ALIGN_MANUAL, +#endif }; return spi_nand_execute_transaction(device, &t); diff --git a/spi_nand_flash/src/spi_nand_oper.h b/spi_nand_flash/src/spi_nand_oper.h index 3e83120836..7bf0e9de36 100644 --- a/spi_nand_flash/src/spi_nand_oper.h +++ b/spi_nand_flash/src/spi_nand_oper.h @@ -25,6 +25,7 @@ struct spi_nand_transaction_t { uint32_t miso_len; uint8_t *miso_data; uint32_t dummy_bits; + uint32_t flags; }; typedef struct spi_nand_transaction_t spi_nand_transaction_t; From 9a664de4ccdc5971b20e648d0174e2afa31cad30 Mon Sep 17 00:00:00 2001 From: Chen Jichang Date: Tue, 22 Oct 2024 13:19:43 +0800 Subject: [PATCH 3/8] feat(led_strip): Support configure pixel orders --- led_strip/CHANGELOG.md | 4 ++ led_strip/CMakeLists.txt | 2 +- led_strip/README.md | 8 ++- led_strip/api.md | 67 ++++++++++++++----- .../main/led_strip_rmt_ws2812_main.c | 20 +++--- .../main/led_strip_spi_ws2812_main.c | 20 +++--- led_strip/idf_component.yml | 2 +- led_strip/include/led_strip.h | 25 ++++++- led_strip/include/led_strip_types.h | 17 ++--- led_strip/src/led_strip_common.c | 37 ++++++++++ led_strip/src/led_strip_common.h | 41 ++++++++++++ led_strip/src/led_strip_rmt_dev.c | 42 ++++++------ led_strip/src/led_strip_rmt_dev_idf4.c | 29 ++++---- led_strip/src/led_strip_spi_dev.c | 44 ++++++------ 14 files changed, 248 insertions(+), 110 deletions(-) create mode 100644 led_strip/src/led_strip_common.c create mode 100644 led_strip/src/led_strip_common.h diff --git a/led_strip/CHANGELOG.md b/led_strip/CHANGELOG.md index 66906b6c71..bfbb0c7315 100644 --- a/led_strip/CHANGELOG.md +++ b/led_strip/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.6.0 + +- Add pixel order configuration to support user-defined pixel order. + ## 2.5.5 - Simplified the led_strip component dependency, the time of full build with ESP-IDF v5.3 can now be shorter. diff --git a/led_strip/CMakeLists.txt b/led_strip/CMakeLists.txt index a4e576be7a..13c35ec3d3 100644 --- a/led_strip/CMakeLists.txt +++ b/led_strip/CMakeLists.txt @@ -1,6 +1,6 @@ include($ENV{IDF_PATH}/tools/cmake/version.cmake) -set(srcs "src/led_strip_api.c") +set(srcs "src/led_strip_api.c" "src/led_strip_common.c") set(public_requires) # Starting from esp-idf v5.x, the RMT driver is rewritten diff --git a/led_strip/README.md b/led_strip/README.md index bb08cca95d..6634b4f7cf 100644 --- a/led_strip/README.md +++ b/led_strip/README.md @@ -21,9 +21,11 @@ led_strip_handle_t led_strip; led_strip_config_t strip_config = { .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line .max_leds = 1, // The number of LEDs in the strip, - .led_pixel_format = LED_PIXEL_FORMAT_GRB, // Pixel format of your LED strip + .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip .led_model = LED_MODEL_WS2812, // LED strip model .flags.invert_out = false, // whether to invert the output signal (useful when your hardware has a level inverter) + .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. + Here set to the default GRB order to demonstrate usage */ }; led_strip_rmt_config_t rmt_config = { @@ -57,9 +59,11 @@ led_strip_handle_t led_strip; led_strip_config_t strip_config = { .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line .max_leds = 1, // The number of LEDs in the strip, - .led_pixel_format = LED_PIXEL_FORMAT_GRB, // Pixel format of your LED strip + .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip .led_model = LED_MODEL_WS2812, // LED strip model .flags.invert_out = false, // whether to invert the output signal (useful when your hardware has a level inverter) + .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. + Here set to the default GRB order to demonstrate usage */ }; led_strip_spi_config_t spi_config = { diff --git a/led_strip/api.md b/led_strip/api.md index 8fc04af4f4..1f589c75bf 100644 --- a/led_strip/api.md +++ b/led_strip/api.md @@ -21,6 +21,13 @@ | esp\_err\_t | [**led\_strip\_set\_pixel\_hsv**](#function-led_strip_set_pixel_hsv) ([**led\_strip\_handle\_t**](#typedef-led_strip_handle_t) strip, uint32\_t index, uint16\_t hue, uint8\_t saturation, uint8\_t value)
_Set HSV for a specific pixel._ | | esp\_err\_t | [**led\_strip\_set\_pixel\_rgbw**](#function-led_strip_set_pixel_rgbw) ([**led\_strip\_handle\_t**](#typedef-led_strip_handle_t) strip, uint32\_t index, uint32\_t red, uint32\_t green, uint32\_t blue, uint32\_t white)
_Set RGBW for a specific pixel._ | +## Macros + +| Type | Name | +| ---: | :--- | +| define | [**LED\_STRIP\_SET\_RGBW\_ORDER**](#define-led_strip_set_rgbw_order) (R, G, B, W) (R << 0 \| G << 2 \| B << 4 \| W << 6)
_Help macro to set pixel RGBW color order The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ | +| define | [**LED\_STRIP\_SET\_RGB\_ORDER**](#define-led_strip_set_rgb_order) (R, G, B) (R << 0 \| G << 2 \| B << 4)
_Help macro to set pixel RGB color order The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ | + ## Functions Documentation ### function `led_strip_clear` @@ -178,6 +185,45 @@ Also see `led_strip_set_pixel` if you only want to specify the RGB part of the c - ESP\_ERR\_INVALID\_ARG: Set RGBW color for a specific pixel failed because of an invalid argument - ESP\_FAIL: Set RGBW color for a specific pixel failed because other error occurred +## Macros Documentation + +### define `LED_STRIP_SET_RGBW_ORDER` + +_Help macro to set pixel RGBW color order The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ + +```c +#define LED_STRIP_SET_RGBW_ORDER (R, G, B, W) (R << 0 | G << 2 | B << 4 | W << 6) +``` + +**Parameters:** + +- `R` The position of the red channel in the color order. +- `G` The position of the green channel in the color order. +- `B` The position of the blue channel in the color order. +- `W` The position of the white channel in the color order. + +**Note:** + +The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. + +### define `LED_STRIP_SET_RGB_ORDER` + +_Help macro to set pixel RGB color order The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ + +```c +#define LED_STRIP_SET_RGB_ORDER (R, G, B) (R << 0 | G << 2 | B << 4) +``` + +**Parameters:** + +- `R` The position of the red channel in the color order. +- `G` The position of the green channel in the color order. +- `B` The position of the blue channel in the color order. + +**Note:** + +The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. + ## File include/led_strip_rmt.h ## Structures and Types @@ -306,7 +352,6 @@ Although only the MOSI line is used for generating the signal, the whole SPI bus | Type | Name | | ---: | :--- | | enum | [**led\_model\_t**](#enum-led_model_t)
_LED strip model._ | -| enum | [**led\_pixel\_format\_t**](#enum-led_pixel_format_t)
_LED strip pixel format._ | | struct | [**led\_strip\_config\_t**](#struct-led_strip_config_t)
_LED Strip Configuration._ | | typedef struct [**led\_strip\_t**](#struct-led_strip_t) \* | [**led\_strip\_handle\_t**](#typedef-led_strip_handle_t)
_LED strip handle._ | @@ -328,34 +373,24 @@ enum led_model_t { Different led model may have different timing parameters, so we need to distinguish them. -### enum `led_pixel_format_t` - -_LED strip pixel format._ - -```c -enum led_pixel_format_t { - LED_PIXEL_FORMAT_GRB, - LED_PIXEL_FORMAT_GRBW, - LED_PIXEL_FORMAT_INVALID -}; -``` - ### struct `led_strip_config_t` _LED Strip Configuration._ Variables: -- struct led\_strip\_config\_t::@2 flags
Extra driver flags +- uint8\_t bytes_per_pixel
bytes per LED pixel. Should be 3 or 4 + +- struct led\_strip\_config\_t::@2 flags
The order of the pixel color. Use help macro LED\_STRIP\_SET\_RGB\_ORDER or LED\_STRIP\_SET\_RGBW\_ORDER to set. Not set or set to 0 if the default order is used. Extra driver flags - uint32\_t invert_out
Invert output signal - [**led\_model\_t**](#enum-led_model_t) led_model
LED model -- [**led\_pixel\_format\_t**](#enum-led_pixel_format_t) led_pixel_format
LED pixel format - - uint32\_t max_leds
Maximum LEDs in a single strip +- uint8\_t pixel_order + - int strip_gpio_num
GPIO number that used by LED strip ### typedef `led_strip_handle_t` diff --git a/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c b/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c index 5cae3f079c..863e7d63b0 100644 --- a/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c +++ b/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -11,9 +11,9 @@ #include "esp_err.h" // GPIO assignment -#define LED_STRIP_BLINK_GPIO 2 +#define LED_STRIP_GPIO_PIN 2 // Numbers of the LED in the strip -#define LED_STRIP_LED_NUMBERS 24 +#define LED_STRIP_LED_COUNT 24 // 10MHz resolution, 1 tick = 0.1us (led strip needs a high resolution) #define LED_STRIP_RMT_RES_HZ (10 * 1000 * 1000) @@ -23,11 +23,13 @@ led_strip_handle_t configure_led(void) { // LED strip general initialization, according to your led board design led_strip_config_t strip_config = { - .strip_gpio_num = LED_STRIP_BLINK_GPIO, // The GPIO that connected to the LED strip's data line - .max_leds = LED_STRIP_LED_NUMBERS, // The number of LEDs in the strip, - .led_pixel_format = LED_PIXEL_FORMAT_GRB, // Pixel format of your LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal + .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line + .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, + .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip + .led_model = LED_MODEL_WS2812, // LED strip model + .flags.invert_out = false, // whether to invert the output signal + .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. + Here set to the default GRB order to demonstrate usage */ }; // LED strip backend configuration: RMT @@ -57,7 +59,7 @@ void app_main(void) while (1) { if (led_on_off) { /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */ - for (int i = 0; i < LED_STRIP_LED_NUMBERS; i++) { + for (int i = 0; i < LED_STRIP_LED_COUNT; i++) { ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, i, 5, 5, 5)); } /* Refresh the strip to send data */ diff --git a/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c b/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c index 69b780c5aa..54a1b54c74 100644 --- a/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c +++ b/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -11,9 +11,9 @@ #include "esp_err.h" // GPIO assignment -#define LED_STRIP_BLINK_GPIO 2 +#define LED_STRIP_GPIO_PIN 2 // Numbers of the LED in the strip -#define LED_STRIP_LED_NUMBERS 24 +#define LED_STRIP_LED_COUNT 24 static const char *TAG = "example"; @@ -21,11 +21,13 @@ led_strip_handle_t configure_led(void) { // LED strip general initialization, according to your led board design led_strip_config_t strip_config = { - .strip_gpio_num = LED_STRIP_BLINK_GPIO, // The GPIO that connected to the LED strip's data line - .max_leds = LED_STRIP_LED_NUMBERS, // The number of LEDs in the strip, - .led_pixel_format = LED_PIXEL_FORMAT_GRB, // Pixel format of your LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal + .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line + .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, + .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip + .led_model = LED_MODEL_WS2812, // LED strip model + .flags.invert_out = false, // whether to invert the output signal + .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. + Here set to the default GRB order to demonstrate usage */ }; // LED strip backend configuration: SPI @@ -51,7 +53,7 @@ void app_main(void) while (1) { if (led_on_off) { /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */ - for (int i = 0; i < LED_STRIP_LED_NUMBERS; i++) { + for (int i = 0; i < LED_STRIP_LED_COUNT; i++) { ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, i, 5, 5, 5)); } /* Refresh the strip to send data */ diff --git a/led_strip/idf_component.yml b/led_strip/idf_component.yml index 4928449549..ae2e6031bc 100644 --- a/led_strip/idf_component.yml +++ b/led_strip/idf_component.yml @@ -1,4 +1,4 @@ -version: "2.5.5" +version: "2.5.6" description: Driver for Addressable LED Strip (WS2812, etc) url: https://github.com/espressif/idf-extra-components/tree/master/led_strip dependencies: diff --git a/led_strip/include/led_strip.h b/led_strip/include/led_strip.h index a4e994675e..3c4758009c 100644 --- a/led_strip/include/led_strip.h +++ b/led_strip/include/led_strip.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,6 +18,29 @@ extern "C" { #endif +/** + * @brief Help macro to set pixel RGB color order + * The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set `pixel_order` in led_strip_config_t. + * The positions are counted from the least significant bit (LSB). + * @param R The position of the red channel in the color order. + * @param G The position of the green channel in the color order. + * @param B The position of the blue channel in the color order. + * @note The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. + */ +#define LED_STRIP_SET_RGB_ORDER(R, G, B) (R << 0 | G << 2 | B << 4) + +/** + * @brief Help macro to set pixel RGBW color order + * The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set `pixel_order` in led_strip_config_t. + * The positions are counted from the least significant bit (LSB). + * @param R The position of the red channel in the color order. + * @param G The position of the green channel in the color order. + * @param B The position of the blue channel in the color order. + * @param W The position of the white channel in the color order. + * @note The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. + */ +#define LED_STRIP_SET_RGBW_ORDER(R, G, B, W) (R << 0 | G << 2 | B << 4 | W << 6) + /** * @brief Set RGB for a specific pixel * diff --git a/led_strip/include/led_strip_types.h b/led_strip/include/led_strip_types.h index 691f0bc394..47aea74d8a 100644 --- a/led_strip/include/led_strip_types.h +++ b/led_strip/include/led_strip_types.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,15 +11,6 @@ extern "C" { #endif -/** - * @brief LED strip pixel format - */ -typedef enum { - LED_PIXEL_FORMAT_GRB, /*!< Pixel format: GRB */ - LED_PIXEL_FORMAT_GRBW, /*!< Pixel format: GRBW */ - LED_PIXEL_FORMAT_INVALID /*!< Invalid pixel format */ -} led_pixel_format_t; - /** * @brief LED strip model * @note Different led model may have different timing parameters, so we need to distinguish them. @@ -41,9 +32,11 @@ typedef struct led_strip_t *led_strip_handle_t; typedef struct { int strip_gpio_num; /*!< GPIO number that used by LED strip */ uint32_t max_leds; /*!< Maximum LEDs in a single strip */ - led_pixel_format_t led_pixel_format; /*!< LED pixel format */ + uint8_t bytes_per_pixel; /*!< bytes per LED pixel. Should be 3 or 4 */ led_model_t led_model; /*!< LED model */ - + uint8_t pixel_order; /*! The order of the pixel color. + Use help macro LED_STRIP_SET_RGB_ORDER or LED_STRIP_SET_RGBW_ORDER to set. + Not set or set to 0 if the default order is used. */ struct { uint32_t invert_out: 1; /*!< Invert output signal */ } flags; /*!< Extra driver flags */ diff --git a/led_strip/src/led_strip_common.c b/led_strip/src/led_strip_common.c new file mode 100644 index 0000000000..6338e9ffed --- /dev/null +++ b/led_strip/src/led_strip_common.c @@ -0,0 +1,37 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include +#include "esp_log.h" +#include "esp_check.h" +#include "esp_bit_defs.h" +#include "led_strip_common.h" + +static const char *TAG = "led_strip_common"; + +esp_err_t led_strip_set_color_order(uint8_t *led_pixel_offset, const uint8_t pixel_order, const uint8_t bytes_per_pixel) +{ + if (pixel_order) { + uint8_t r_order = (pixel_order >> 0) & 0x03; + uint8_t g_order = (pixel_order >> 2) & 0x03; + uint8_t b_order = (pixel_order >> 4) & 0x03; + uint8_t w_order = (pixel_order >> 6) & 0x03; + uint8_t mask = bytes_per_pixel == 3 ? BIT(r_order) | BIT(g_order) | BIT(b_order) : BIT(r_order) | BIT(g_order) | BIT(b_order) | BIT(w_order); + // Check for invalid values + ESP_RETURN_ON_FALSE(__builtin_popcount(mask) == bytes_per_pixel && r_order < bytes_per_pixel && g_order < bytes_per_pixel && b_order < bytes_per_pixel && w_order < bytes_per_pixel, + ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); + led_pixel_offset[LED_PIXEL_INDEX_RED] = r_order; + led_pixel_offset[LED_PIXEL_INDEX_GREEN] = g_order; + led_pixel_offset[LED_PIXEL_INDEX_BLUE] = b_order; + led_pixel_offset[LED_PIXEL_INDEX_WHITE] = w_order; + } else { + // If pixel_order is not set, set default GRB(GRBW) order as fallback path + led_pixel_offset[LED_PIXEL_INDEX_RED] = 1; + led_pixel_offset[LED_PIXEL_INDEX_GREEN] = 0; + led_pixel_offset[LED_PIXEL_INDEX_BLUE] = 2; + led_pixel_offset[LED_PIXEL_INDEX_WHITE] = 3; + } + return ESP_OK; +} diff --git a/led_strip/src/led_strip_common.h b/led_strip/src/led_strip_common.h new file mode 100644 index 0000000000..e4ca2811f3 --- /dev/null +++ b/led_strip/src/led_strip_common.h @@ -0,0 +1,41 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ +#pragma once + +#include +#include "esp_err.h" +#include "led_strip_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief LED strip pixel order index + */ +typedef enum { + LED_PIXEL_INDEX_RED, /*!< Red pixel index */ + LED_PIXEL_INDEX_GREEN, /*!< Green pixel index */ + LED_PIXEL_INDEX_BLUE, /*!< Blue pixel index */ + LED_PIXEL_INDEX_WHITE, /*!< White pixel index */ + LED_PIXEL_INDEX_MAX /*!< Max pixel index */ +} led_pixel_order_index_t; + +/** + * @brief Set LED color order + * + * @param led_pixel_offset Each pixel's offset + * @param pixel_order `pixel_order` parameter in LED strip configuration + * @param bytes_per_pixel bytes per pixel + * @return + * - ESP_OK: Set LED color order successfully + * - ESP_ERR_INVALID_ARG: Set LED color order failed because of invalid argument + */ +esp_err_t led_strip_set_color_order(uint8_t *led_pixel_offset, const uint8_t pixel_order, const uint8_t bytes_per_pixel); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/led_strip/src/led_strip_rmt_dev.c b/led_strip/src/led_strip_rmt_dev.c index 1cbf0e45ae..15a2ef4a48 100644 --- a/led_strip/src/led_strip_rmt_dev.c +++ b/led_strip/src/led_strip_rmt_dev.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,6 +12,7 @@ #include "led_strip.h" #include "led_strip_interface.h" #include "led_strip_rmt_encoder.h" +#include "led_strip_common.h" #define LED_STRIP_RMT_DEFAULT_RESOLUTION 10000000 // 10MHz resolution #define LED_STRIP_RMT_DEFAULT_TRANS_QUEUE_SIZE 4 @@ -30,6 +31,7 @@ typedef struct { rmt_encoder_handle_t strip_encoder; uint32_t strip_len; uint8_t bytes_per_pixel; + uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; uint8_t pixel_buf[]; } led_strip_rmt_obj; @@ -38,12 +40,15 @@ static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t index, uin led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); uint32_t start = index * rmt_strip->bytes_per_pixel; - // In thr order of GRB, as LED strip like WS2812 sends out pixels in this order - rmt_strip->pixel_buf[start + 0] = green & 0xFF; - rmt_strip->pixel_buf[start + 1] = red & 0xFF; - rmt_strip->pixel_buf[start + 2] = blue & 0xFF; + uint8_t *pixel_buf = rmt_strip->pixel_buf; + uint8_t *offset = rmt_strip->led_pixel_offset; + // Support all kinds of pixel order + pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; + if (rmt_strip->bytes_per_pixel > 3) { - rmt_strip->pixel_buf[start + 3] = 0; + pixel_buf[start + offset[LED_PIXEL_INDEX_WHITE]] = 0; } return ESP_OK; } @@ -53,12 +58,14 @@ static esp_err_t led_strip_rmt_set_pixel_rgbw(led_strip_t *strip, uint32_t index led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); ESP_RETURN_ON_FALSE(rmt_strip->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "wrong LED pixel format, expected 4 bytes per pixel"); - uint8_t *buf_start = rmt_strip->pixel_buf + index * 4; + uint32_t start = index * rmt_strip->bytes_per_pixel; + uint8_t *pixel_buf = rmt_strip->pixel_buf; + uint8_t *offset = rmt_strip->led_pixel_offset; // SK6812 component order is GRBW - *buf_start = green & 0xFF; - *++buf_start = red & 0xFF; - *++buf_start = blue & 0xFF; - *++buf_start = white & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_WHITE]] = white & 0xFF; return ESP_OK; } @@ -99,15 +106,8 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l led_strip_rmt_obj *rmt_strip = NULL; esp_err_t ret = ESP_OK; ESP_GOTO_ON_FALSE(led_config && rmt_config && ret_strip, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - ESP_GOTO_ON_FALSE(led_config->led_pixel_format < LED_PIXEL_FORMAT_INVALID, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel_format"); - uint8_t bytes_per_pixel = 3; - if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRBW) { - bytes_per_pixel = 4; - } else if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRB) { - bytes_per_pixel = 3; - } else { - assert(false); - } + ESP_GOTO_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel bytes"); + uint8_t bytes_per_pixel = led_config->bytes_per_pixel; rmt_strip = calloc(1, sizeof(led_strip_rmt_obj) + led_config->max_leds * bytes_per_pixel); ESP_GOTO_ON_FALSE(rmt_strip, ESP_ERR_NO_MEM, err, TAG, "no mem for rmt strip"); uint32_t resolution = rmt_config->resolution_hz ? rmt_config->resolution_hz : LED_STRIP_RMT_DEFAULT_RESOLUTION; @@ -138,7 +138,7 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l .led_model = led_config->led_model }; ESP_GOTO_ON_ERROR(rmt_new_led_strip_encoder(&strip_encoder_conf, &rmt_strip->strip_encoder), err, TAG, "create LED strip encoder failed"); - + ESP_GOTO_ON_ERROR(led_strip_set_color_order(rmt_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); rmt_strip->bytes_per_pixel = bytes_per_pixel; rmt_strip->strip_len = led_config->max_leds; diff --git a/led_strip/src/led_strip_rmt_dev_idf4.c b/led_strip/src/led_strip_rmt_dev_idf4.c index a1067cd7c4..091ccf8106 100644 --- a/led_strip/src/led_strip_rmt_dev_idf4.c +++ b/led_strip/src/led_strip_rmt_dev_idf4.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -11,6 +11,7 @@ #include "driver/rmt.h" #include "led_strip.h" #include "led_strip_interface.h" +#include "led_strip_common.h" static const char *TAG = "led_strip_rmt"; @@ -43,6 +44,7 @@ typedef struct { rmt_channel_t rmt_channel; uint32_t strip_len; uint8_t bytes_per_pixel; + uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; uint8_t buffer[0]; } led_strip_rmt_obj; @@ -83,12 +85,14 @@ static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t index, uin led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of the maximum number of leds"); uint32_t start = index * rmt_strip->bytes_per_pixel; - // In thr order of GRB - rmt_strip->buffer[start + 0] = green & 0xFF; - rmt_strip->buffer[start + 1] = red & 0xFF; - rmt_strip->buffer[start + 2] = blue & 0xFF; + uint8_t *pixel_buf = rmt_strip->buffer; + uint8_t *offset = rmt_strip->led_pixel_offset; + // Support all kinds of pixel order + pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; + pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; if (rmt_strip->bytes_per_pixel > 3) { - rmt_strip->buffer[start + 3] = 0; + rmt_strip->buffer[start + offset[LED_PIXEL_INDEX_WHITE]] = 0; } return ESP_OK; } @@ -123,17 +127,9 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l led_strip_rmt_obj *rmt_strip = NULL; esp_err_t ret = ESP_OK; ESP_RETURN_ON_FALSE(led_config && dev_config && ret_strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - ESP_RETURN_ON_FALSE(led_config->led_pixel_format < LED_PIXEL_FORMAT_INVALID, ESP_ERR_INVALID_ARG, TAG, "invalid led_pixel_format"); ESP_RETURN_ON_FALSE(dev_config->flags.with_dma == 0, ESP_ERR_NOT_SUPPORTED, TAG, "DMA is not supported"); - - uint8_t bytes_per_pixel = 3; - if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRBW) { - bytes_per_pixel = 4; - } else if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRB) { - bytes_per_pixel = 3; - } else { - assert(false); - } + ESP_RETURN_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "invalid led_pixel bytes"); + uint8_t bytes_per_pixel = led_config->bytes_per_pixel; // allocate memory for led_strip object rmt_strip = calloc(1, sizeof(led_strip_rmt_obj) + led_config->max_leds * bytes_per_pixel); @@ -174,6 +170,7 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l // adapter to translates the LES strip date frame into RMT symbols rmt_translator_init((rmt_channel_t)dev_config->rmt_channel, ws2812_rmt_adapter); + ESP_GOTO_ON_ERROR(led_strip_set_color_order(rmt_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); rmt_strip->bytes_per_pixel = bytes_per_pixel; rmt_strip->rmt_channel = (rmt_channel_t)dev_config->rmt_channel; diff --git a/led_strip/src/led_strip_spi_dev.c b/led_strip/src/led_strip_spi_dev.c index 6c66d7e375..248c474cf5 100644 --- a/led_strip/src/led_strip_spi_dev.c +++ b/led_strip/src/led_strip_spi_dev.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -10,9 +10,10 @@ #include "esp_check.h" #include "esp_rom_gpio.h" #include "soc/spi_periph.h" +#include "hal/spi_hal.h" #include "led_strip.h" #include "led_strip_interface.h" -#include "hal/spi_hal.h" +#include "led_strip_common.h" #define LED_STRIP_SPI_DEFAULT_RESOLUTION (2.5 * 1000 * 1000) // 2.5MHz resolution #define LED_STRIP_SPI_DEFAULT_TRANS_QUEUE_SIZE 4 @@ -28,6 +29,7 @@ typedef struct { spi_device_handle_t spi_device; uint32_t strip_len; uint8_t bytes_per_pixel; + uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; uint8_t pixel_buf[]; } led_strip_spi_obj; @@ -51,14 +53,16 @@ static esp_err_t led_strip_spi_set_pixel(led_strip_t *strip, uint32_t index, uin { led_strip_spi_obj *spi_strip = __containerof(strip, led_strip_spi_obj, base); ESP_RETURN_ON_FALSE(index < spi_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); - // LED_PIXEL_FORMAT_GRB takes 72bits(9bytes) + // 3 pixels take 72bits(9bytes) uint32_t start = index * spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE; - memset(spi_strip->pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); - __led_strip_spi_bit(green, &spi_strip->pixel_buf[start]); - __led_strip_spi_bit(red, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE]); - __led_strip_spi_bit(blue, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * 2]); + uint8_t *pixel_buf = spi_strip->pixel_buf; + uint8_t *offset = spi_strip->led_pixel_offset; + memset(pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); + __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_RED]]); + __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_GREEN]]); + __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_BLUE]]); if (spi_strip->bytes_per_pixel > 3) { - __led_strip_spi_bit(0, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * 3]); + __led_strip_spi_bit(0, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * LED_PIXEL_INDEX_WHITE]); } return ESP_OK; } @@ -70,12 +74,14 @@ static esp_err_t led_strip_spi_set_pixel_rgbw(led_strip_t *strip, uint32_t index ESP_RETURN_ON_FALSE(spi_strip->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "wrong LED pixel format, expected 4 bytes per pixel"); // LED_PIXEL_FORMAT_GRBW takes 96bits(12bytes) uint32_t start = index * spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE; + uint8_t *pixel_buf = spi_strip->pixel_buf; + uint8_t *offset = spi_strip->led_pixel_offset; // SK6812 component order is GRBW - memset(spi_strip->pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); - __led_strip_spi_bit(green, &spi_strip->pixel_buf[start]); - __led_strip_spi_bit(red, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE]); - __led_strip_spi_bit(blue, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * 2]); - __led_strip_spi_bit(white, &spi_strip->pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * 3]); + memset(pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); + __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_RED]]); + __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_GREEN]]); + __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_BLUE]]); + __led_strip_spi_bit(white, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_WHITE]]); return ESP_OK; } @@ -124,15 +130,8 @@ esp_err_t led_strip_new_spi_device(const led_strip_config_t *led_config, const l led_strip_spi_obj *spi_strip = NULL; esp_err_t ret = ESP_OK; ESP_GOTO_ON_FALSE(led_config && spi_config && ret_strip, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - ESP_GOTO_ON_FALSE(led_config->led_pixel_format < LED_PIXEL_FORMAT_INVALID, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel_format"); - uint8_t bytes_per_pixel = 3; - if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRBW) { - bytes_per_pixel = 4; - } else if (led_config->led_pixel_format == LED_PIXEL_FORMAT_GRB) { - bytes_per_pixel = 3; - } else { - assert(false); - } + ESP_GOTO_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel bytes"); + uint8_t bytes_per_pixel = led_config->bytes_per_pixel; uint32_t mem_caps = MALLOC_CAP_DEFAULT; if (spi_config->flags.with_dma) { // DMA buffer must be placed in internal SRAM @@ -186,6 +185,7 @@ esp_err_t led_strip_new_spi_device(const led_strip_config_t *led_config, const l // clock_resolution between 2.2MHz to 2.8MHz is supported ESP_GOTO_ON_FALSE((clock_resolution_khz < LED_STRIP_SPI_DEFAULT_RESOLUTION / 1000 + 300) && (clock_resolution_khz > LED_STRIP_SPI_DEFAULT_RESOLUTION / 1000 - 300), ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported clock resolution:%dKHz", clock_resolution_khz); + ESP_GOTO_ON_ERROR(led_strip_set_color_order(spi_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); spi_strip->bytes_per_pixel = bytes_per_pixel; spi_strip->strip_len = led_config->max_leds; From 31585c8c97b5a403e1550270fb9fad58879cc2dd Mon Sep 17 00:00:00 2001 From: morris Date: Thu, 24 Oct 2024 11:25:53 +0800 Subject: [PATCH 4/8] =?UTF-8?q?feat(led=5Fstrip):=20discontinue=20esp-idf?= =?UTF-8?q?=20v4=20and=20bump=20major=20version=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- led_strip/CHANGELOG.md | 7 +- led_strip/CMakeLists.txt | 11 +- led_strip/README.md | 63 +++--- led_strip/api.md | 153 ++++++++------ .../led_strip_rmt_ws2812/CMakeLists.txt | 6 +- .../main/idf_component.yml | 2 +- .../main/led_strip_rmt_ws2812_main.c | 23 +-- .../led_strip_spi_ws2812/CMakeLists.txt | 6 +- .../main/idf_component.yml | 2 +- .../main/led_strip_spi_ws2812_main.c | 26 ++- led_strip/idf_component.yml | 6 +- led_strip/include/led_strip.h | 27 --- led_strip/include/led_strip_rmt.h | 12 +- led_strip/include/led_strip_spi.h | 3 +- led_strip/include/led_strip_types.h | 46 +++-- led_strip/src/led_strip_common.c | 37 ---- led_strip/src/led_strip_common.h | 41 ---- led_strip/src/led_strip_rmt_dev.c | 60 ++++-- led_strip/src/led_strip_rmt_dev_idf4.c | 191 ------------------ led_strip/src/led_strip_spi_dev.c | 57 ++++-- 20 files changed, 289 insertions(+), 490 deletions(-) delete mode 100644 led_strip/src/led_strip_common.c delete mode 100644 led_strip/src/led_strip_common.h delete mode 100644 led_strip/src/led_strip_rmt_dev_idf4.c diff --git a/led_strip/CHANGELOG.md b/led_strip/CHANGELOG.md index bfbb0c7315..d7b130a24f 100644 --- a/led_strip/CHANGELOG.md +++ b/led_strip/CHANGELOG.md @@ -1,7 +1,8 @@ -## 2.6.0 +## 3.0.0 + +- Discontinued support for ESP-IDF v4.x +- Added configuration for user-defined color component format -- Add pixel order configuration to support user-defined pixel order. - ## 2.5.5 - Simplified the led_strip component dependency, the time of full build with ESP-IDF v5.3 can now be shorter. diff --git a/led_strip/CMakeLists.txt b/led_strip/CMakeLists.txt index 13c35ec3d3..9e82ccaceb 100644 --- a/led_strip/CMakeLists.txt +++ b/led_strip/CMakeLists.txt @@ -1,15 +1,10 @@ include($ENV{IDF_PATH}/tools/cmake/version.cmake) -set(srcs "src/led_strip_api.c" "src/led_strip_common.c") +set(srcs "src/led_strip_api.c") set(public_requires) -# Starting from esp-idf v5.x, the RMT driver is rewritten -if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "5.0") - if(CONFIG_SOC_RMT_SUPPORTED) - list(APPEND srcs "src/led_strip_rmt_dev.c" "src/led_strip_rmt_encoder.c") - endif() -else() - list(APPEND srcs "src/led_strip_rmt_dev_idf4.c") +if(CONFIG_SOC_RMT_SUPPORTED) + list(APPEND srcs "src/led_strip_rmt_dev.c" "src/led_strip_rmt_encoder.c") endif() # the SPI backend driver relies on some feature that was available in IDF 5.1 diff --git a/led_strip/README.md b/led_strip/README.md index 6634b4f7cf..ca3cac20e9 100644 --- a/led_strip/README.md +++ b/led_strip/README.md @@ -15,28 +15,29 @@ This is the most economical way to drive the LEDs because it only consumes one R ```c #define BLINK_GPIO 0 -led_strip_handle_t led_strip; - -/* LED strip initialization with the GPIO and pixels number*/ +/// LED strip common configuration led_strip_config_t strip_config = { - .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line - .max_leds = 1, // The number of LEDs in the strip, - .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal (useful when your hardware has a level inverter) - .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. - Here set to the default GRB order to demonstrate usage */ + .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line + .max_leds = 1, // The number of LEDs in the strip, + .led_model = LED_MODEL_WS2812, // LED strip model, it determines the bit timing + .color_component_format = LED_STRIP_COLOR_COMPONENT_FMT_GRB, // The color component format is G-R-B + .flags = { + .invert_out = false, // don't invert the output signal + } }; +/// RMT backend specific configuration led_strip_rmt_config_t rmt_config = { -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) - .rmt_channel = 0, -#else - .clk_src = RMT_CLK_SRC_DEFAULT, // different clock source can lead to different power consumption - .resolution_hz = 10 * 1000 * 1000, // 10MHz - .flags.with_dma = false, // whether to enable the DMA feature -#endif + .clk_src = RMT_CLK_SRC_DEFAULT, // different clock source can lead to different power consumption + .resolution_hz = 10 * 1000 * 1000, // RMT counter clock frequency: 10MHz + .mem_block_symbols = 64, // the memory size of each RMT channel, in words (4 bytes) + .flags = { + .with_dma = false, // DMA feature is available on chips like ESP32-S3/P4 + } }; + +/// Create the LED strip object +led_strip_handle_t led_strip; ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip)); ``` @@ -53,24 +54,28 @@ Please note, the SPI backend has a dependency of **ESP-IDF >= 5.1** ```c #define BLINK_GPIO 0 -led_strip_handle_t led_strip; - -/* LED strip initialization with the GPIO and pixels number*/ +/// LED strip common configuration led_strip_config_t strip_config = { - .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line - .max_leds = 1, // The number of LEDs in the strip, - .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal (useful when your hardware has a level inverter) - .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. - Here set to the default GRB order to demonstrate usage */ + .strip_gpio_num = BLINK_GPIO, // The GPIO that connected to the LED strip's data line + .max_leds = 1, // The number of LEDs in the strip, + .led_model = LED_MODEL_WS2812, // LED strip model, it determines the bit timing + .color_component_format = LED_STRIP_COLOR_COMPONENT_FMT_GRB, // The color component format is G-R-B + .flags = { + .invert_out = false, // don't invert the output signal + } }; +/// SPI backend specific configuration led_strip_spi_config_t spi_config = { .clk_src = SPI_CLK_SRC_DEFAULT, // different clock source can lead to different power consumption - .flags.with_dma = true, // Using DMA can improve performance and help drive more LEDs - .spi_bus = SPI2_HOST, // SPI bus ID + .spi_bus = SPI2_HOST, // SPI bus ID + .flags = { + .with_dma = true, // Using DMA can improve performance and help drive more LEDs + } }; + +/// Create the LED strip object +led_strip_handle_t led_strip; ESP_ERROR_CHECK(led_strip_new_spi_device(&strip_config, &spi_config, &led_strip)); ``` diff --git a/led_strip/api.md b/led_strip/api.md index 1f589c75bf..abe7f76763 100644 --- a/led_strip/api.md +++ b/led_strip/api.md @@ -21,13 +21,6 @@ | esp\_err\_t | [**led\_strip\_set\_pixel\_hsv**](#function-led_strip_set_pixel_hsv) ([**led\_strip\_handle\_t**](#typedef-led_strip_handle_t) strip, uint32\_t index, uint16\_t hue, uint8\_t saturation, uint8\_t value)
_Set HSV for a specific pixel._ | | esp\_err\_t | [**led\_strip\_set\_pixel\_rgbw**](#function-led_strip_set_pixel_rgbw) ([**led\_strip\_handle\_t**](#typedef-led_strip_handle_t) strip, uint32\_t index, uint32\_t red, uint32\_t green, uint32\_t blue, uint32\_t white)
_Set RGBW for a specific pixel._ | -## Macros - -| Type | Name | -| ---: | :--- | -| define | [**LED\_STRIP\_SET\_RGBW\_ORDER**](#define-led_strip_set_rgbw_order) (R, G, B, W) (R << 0 \| G << 2 \| B << 4 \| W << 6)
_Help macro to set pixel RGBW color order The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ | -| define | [**LED\_STRIP\_SET\_RGB\_ORDER**](#define-led_strip_set_rgb_order) (R, G, B) (R << 0 \| G << 2 \| B << 4)
_Help macro to set pixel RGB color order The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ | - ## Functions Documentation ### function `led_strip_clear` @@ -185,45 +178,6 @@ Also see `led_strip_set_pixel` if you only want to specify the RGB part of the c - ESP\_ERR\_INVALID\_ARG: Set RGBW color for a specific pixel failed because of an invalid argument - ESP\_FAIL: Set RGBW color for a specific pixel failed because other error occurred -## Macros Documentation - -### define `LED_STRIP_SET_RGBW_ORDER` - -_Help macro to set pixel RGBW color order The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ - -```c -#define LED_STRIP_SET_RGBW_ORDER (R, G, B, W) (R << 0 | G << 2 | B << 4 | W << 6) -``` - -**Parameters:** - -- `R` The position of the red channel in the color order. -- `G` The position of the green channel in the color order. -- `B` The position of the blue channel in the color order. -- `W` The position of the white channel in the color order. - -**Note:** - -The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. - -### define `LED_STRIP_SET_RGB_ORDER` - -_Help macro to set pixel RGB color order The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set_ `pixel_order`_in_[_**led\_strip\_config\_t**_](#struct-led_strip_config_t)_. The positions are counted from the least significant bit (LSB)._ - -```c -#define LED_STRIP_SET_RGB_ORDER (R, G, B) (R << 0 | G << 2 | B << 4) -``` - -**Parameters:** - -- `R` The position of the red channel in the color order. -- `G` The position of the green channel in the color order. -- `B` The position of the blue channel in the color order. - -**Note:** - -The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. - ## File include/led_strip_rmt.h ## Structures and Types @@ -231,6 +185,7 @@ The order starts from 0. And the user needs to make sure that all the numbers ap | Type | Name | | ---: | :--- | | struct | [**led\_strip\_rmt\_config\_t**](#struct-led_strip_rmt_config_t)
_LED Strip RMT specific configuration._ | +| struct | [**led\_strip\_rmt\_extra\_config**](#struct-led_strip_rmt_config_tled_strip_rmt_extra_config)
| ## Functions @@ -248,12 +203,16 @@ Variables: - rmt\_clock\_source\_t clk_src
RMT clock source -- struct led\_strip\_rmt\_config\_t::@0 flags
Extra driver flags +- struct [**led\_strip\_rmt\_config\_t::led\_strip\_rmt\_extra\_config**](#struct-led_strip_rmt_config_tled_strip_rmt_extra_config) flags
Extra driver flags -- size\_t mem_block_symbols
How many RMT symbols can one RMT channel hold at one time. Set to 0 will fallback to use the default size. +- size\_t mem_block_symbols
How many RMT symbols can one RMT channel hold at one time. Set to 0 will fallback to use the default size. Extra RMT specific driver flags - uint32\_t resolution_hz
RMT tick resolution, if set to zero, a default resolution (10MHz) will be applied +### struct `led_strip_rmt_config_t::led_strip_rmt_extra_config` + +Variables: + - uint32\_t with_dma
Use DMA to transmit data ## Functions Documentation @@ -307,7 +266,7 @@ Variables: - spi\_clock\_source\_t clk_src
SPI clock source -- struct led\_strip\_spi\_config\_t::@1 flags
Extra driver flags +- struct [**led\_strip\_spi\_config\_t**](#struct-led_strip_spi_config_t) flags
Extra driver flags - spi\_host\_device\_t spi_bus
SPI bus ID. Which buses are available depends on the specific chip @@ -351,12 +310,54 @@ Although only the MOSI line is used for generating the signal, the whole SPI bus | Type | Name | | ---: | :--- | +| union | [**led\_color\_component\_format\_t**](#union-led_color_component_format_t)
_LED color component format._ | +| struct | [**format\_layout**](#struct-led_color_component_format_tformat_layout)
| | enum | [**led\_model\_t**](#enum-led_model_t)
_LED strip model._ | -| struct | [**led\_strip\_config\_t**](#struct-led_strip_config_t)
_LED Strip Configuration._ | -| typedef struct [**led\_strip\_t**](#struct-led_strip_t) \* | [**led\_strip\_handle\_t**](#typedef-led_strip_handle_t)
_LED strip handle._ | +| struct | [**led\_strip\_config\_t**](#struct-led_strip_config_t)
_LED Strip common configurations The common configurations are not specific to any backend peripheral._ | +| struct | [**led\_strip\_extra\_flags**](#struct-led_strip_config_tled_strip_extra_flags)
| +| typedef struct [**led\_strip\_t**](#struct-led_strip_t) \* | [**led\_strip\_handle\_t**](#typedef-led_strip_handle_t)
_Type of LED strip handle._ | + +## Macros + +| Type | Name | +| ---: | :--- | +| define | [**LED\_STRIP\_COLOR\_COMPONENT\_FMT\_GRB**](#define-led_strip_color_component_fmt_grb) ([**led\_color\_component\_format\_t**](#union-led_color_component_format_t)){.format = {.r\_pos = 1, .g\_pos = 0, .b\_pos = 2, .w\_pos = 3, .reserved = 0, .num\_components = 3}}
_Helper macros to set the color component format._ | +| define | [**LED\_STRIP\_COLOR\_COMPONENT\_FMT\_GRBW**](#define-led_strip_color_component_fmt_grbw) ([**led\_color\_component\_format\_t**](#union-led_color_component_format_t)){.format = {.r\_pos = 1, .g\_pos = 0, .b\_pos = 2, .w\_pos = 3, .reserved = 0, .num\_components = 4}}
| +| define | [**LED\_STRIP\_COLOR\_COMPONENT\_FMT\_RGB**](#define-led_strip_color_component_fmt_rgb) ([**led\_color\_component\_format\_t**](#union-led_color_component_format_t)){.format = {.r\_pos = 0, .g\_pos = 1, .b\_pos = 2, .w\_pos = 3, .reserved = 0, .num\_components = 3}}
| +| define | [**LED\_STRIP\_COLOR\_COMPONENT\_FMT\_RGBW**](#define-led_strip_color_component_fmt_rgbw) ([**led\_color\_component\_format\_t**](#union-led_color_component_format_t)){.format = {.r\_pos = 0, .g\_pos = 1, .b\_pos = 2, .w\_pos = 3, .reserved = 0, .num\_components = 4}}
| ## Structures and Types Documentation +### union `led_color_component_format_t` + +_LED color component format._ + +**Note:** + +The format is used to specify the order of color components in each pixel, also the number of color components. + +Variables: + +- struct [**led\_color\_component\_format\_t::format\_layout**](#struct-led_color_component_format_tformat_layout) format
Format layout + +- uint32\_t format_id
Format ID + +### struct `led_color_component_format_t::format_layout` + +Variables: + +- uint32\_t b_pos
Position of the blue channel in the color order: 0~3 + +- uint32\_t g_pos
Position of the green channel in the color order: 0~3 + +- uint32\_t num_components
Number of color components per pixel: 3 or 4. If set to 0, it will fallback to 3 + +- uint32\_t r_pos
Position of the red channel in the color order: 0~3 + +- uint32\_t reserved
Reserved + +- uint32\_t w_pos
Position of the white channel in the color order: 0~3 + ### enum `led_model_t` _LED strip model._ @@ -375,32 +376,62 @@ Different led model may have different timing parameters, so we need to distingu ### struct `led_strip_config_t` -_LED Strip Configuration._ +_LED Strip common configurations The common configurations are not specific to any backend peripheral._ Variables: -- uint8\_t bytes_per_pixel
bytes per LED pixel. Should be 3 or 4 +- [**led\_color\_component\_format\_t**](#union-led_color_component_format_t) color_component_format
Specifies the order of color components in each pixel. Use helper macros like `LED_STRIP_COLOR_COMPONENT_FMT_GRB` to set the format LED strip extra driver flags -- struct led\_strip\_config\_t::@2 flags
The order of the pixel color. Use help macro LED\_STRIP\_SET\_RGB\_ORDER or LED\_STRIP\_SET\_RGBW\_ORDER to set. Not set or set to 0 if the default order is used. Extra driver flags +- struct [**led\_strip\_config\_t::led\_strip\_extra\_flags**](#struct-led_strip_config_tled_strip_extra_flags) flags
Extra driver flags -- uint32\_t invert_out
Invert output signal +- [**led\_model\_t**](#enum-led_model_t) led_model
Specifies the LED strip model (e.g., WS2812, SK6812) -- [**led\_model\_t**](#enum-led_model_t) led_model
LED model +- uint32\_t max_leds
Maximum number of LEDs that can be controlled in a single strip -- uint32\_t max_leds
Maximum LEDs in a single strip +- int strip_gpio_num
GPIO number that used by LED strip -- uint8\_t pixel_order +### struct `led_strip_config_t::led_strip_extra_flags` -- int strip_gpio_num
GPIO number that used by LED strip +Variables: + +- uint32\_t invert_out
Invert output signal ### typedef `led_strip_handle_t` -_LED strip handle._ +_Type of LED strip handle._ ```c typedef struct led_strip_t* led_strip_handle_t; ``` +## Macros Documentation + +### define `LED_STRIP_COLOR_COMPONENT_FMT_GRB` + +_Helper macros to set the color component format._ + +```c +#define LED_STRIP_COLOR_COMPONENT_FMT_GRB ( led_color_component_format_t ){.format = {.r_pos = 1, .g_pos = 0, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 3}} +``` + +### define `LED_STRIP_COLOR_COMPONENT_FMT_GRBW` + +```c +#define LED_STRIP_COLOR_COMPONENT_FMT_GRBW ( led_color_component_format_t ){.format = {.r_pos = 1, .g_pos = 0, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 4}} +``` + +### define `LED_STRIP_COLOR_COMPONENT_FMT_RGB` + +```c +#define LED_STRIP_COLOR_COMPONENT_FMT_RGB ( led_color_component_format_t ){.format = {.r_pos = 0, .g_pos = 1, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 3}} +``` + +### define `LED_STRIP_COLOR_COMPONENT_FMT_RGBW` + +```c +#define LED_STRIP_COLOR_COMPONENT_FMT_RGBW ( led_color_component_format_t ){.format = {.r_pos = 0, .g_pos = 1, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 4}} +``` + ## File interface/led_strip_interface.h ## Structures and Types @@ -408,7 +439,7 @@ typedef struct led_strip_t* led_strip_handle_t; | Type | Name | | ---: | :--- | | struct | [**led\_strip\_t**](#struct-led_strip_t)
_LED strip interface definition._ | -| typedef struct [**led\_strip\_t**](#struct-led_strip_t) | [**led\_strip\_t**](#typedef-led_strip_t)
| +| typedef struct led\_strip\_t | [**led\_strip\_t**](#typedef-led_strip_t)
| ## Structures and Types Documentation diff --git a/led_strip/examples/led_strip_rmt_ws2812/CMakeLists.txt b/led_strip/examples/led_strip_rmt_ws2812/CMakeLists.txt index fc2dfc7a0e..ff10c822c7 100644 --- a/led_strip/examples/led_strip_rmt_ws2812/CMakeLists.txt +++ b/led_strip/examples/led_strip_rmt_ws2812/CMakeLists.txt @@ -1,8 +1,6 @@ -# For more information about build system see -# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html -# The following five lines of boilerplate have to be in your project's -# CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) +set(COMPONENTS main) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(led_strip_rmt_ws2812) diff --git a/led_strip/examples/led_strip_rmt_ws2812/main/idf_component.yml b/led_strip/examples/led_strip_rmt_ws2812/main/idf_component.yml index 916c366c79..67a577507b 100644 --- a/led_strip/examples/led_strip_rmt_ws2812/main/idf_component.yml +++ b/led_strip/examples/led_strip_rmt_ws2812/main/idf_component.yml @@ -1,5 +1,5 @@ ## IDF Component Manager Manifest File dependencies: espressif/led_strip: - version: '^2' + version: '^3' override_path: '../../../' diff --git a/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c b/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c index 863e7d63b0..0fd88b30a8 100644 --- a/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c +++ b/led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c @@ -23,24 +23,23 @@ led_strip_handle_t configure_led(void) { // LED strip general initialization, according to your led board design led_strip_config_t strip_config = { - .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line - .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, - .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal - .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. - Here set to the default GRB order to demonstrate usage */ + .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line + .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, + .led_model = LED_MODEL_WS2812, // LED strip model + .color_component_format = LED_STRIP_COLOR_COMPONENT_FMT_GRB, // The color order of the strip: GRB + .flags = { + .invert_out = false, // don't invert the output signal + } }; // LED strip backend configuration: RMT led_strip_rmt_config_t rmt_config = { -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) - .rmt_channel = 0, -#else .clk_src = RMT_CLK_SRC_DEFAULT, // different clock source can lead to different power consumption .resolution_hz = LED_STRIP_RMT_RES_HZ, // RMT counter clock frequency - .flags.with_dma = false, // DMA feature is available on ESP target like ESP32-S3 -#endif + .mem_block_symbols = 64, // the memory size of each RMT channel, in words (4 bytes) + .flags = { + .with_dma = false, // DMA feature is available on chips like ESP32-S3/P4 + } }; // LED Strip object handle diff --git a/led_strip/examples/led_strip_spi_ws2812/CMakeLists.txt b/led_strip/examples/led_strip_spi_ws2812/CMakeLists.txt index 7d3af2dfae..822cf2bbad 100644 --- a/led_strip/examples/led_strip_spi_ws2812/CMakeLists.txt +++ b/led_strip/examples/led_strip_spi_ws2812/CMakeLists.txt @@ -1,8 +1,6 @@ -# For more information about build system see -# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html -# The following five lines of boilerplate have to be in your project's -# CMakeLists in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) +set(COMPONENTS main) + include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(led_strip_spi_ws2812) diff --git a/led_strip/examples/led_strip_spi_ws2812/main/idf_component.yml b/led_strip/examples/led_strip_spi_ws2812/main/idf_component.yml index 050d8d269f..ed00d7eb3c 100644 --- a/led_strip/examples/led_strip_spi_ws2812/main/idf_component.yml +++ b/led_strip/examples/led_strip_spi_ws2812/main/idf_component.yml @@ -1,6 +1,6 @@ ## IDF Component Manager Manifest File dependencies: espressif/led_strip: - version: '^2.4' + version: '^3' override_path: '../../../' idf: ">=5.1" diff --git a/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c b/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c index 54a1b54c74..1ccd626646 100644 --- a/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c +++ b/led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c @@ -21,20 +21,30 @@ led_strip_handle_t configure_led(void) { // LED strip general initialization, according to your led board design led_strip_config_t strip_config = { - .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line - .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, - .bytes_per_pixel = 3, // 3 bytes per pixel of the LED strip - .led_model = LED_MODEL_WS2812, // LED strip model - .flags.invert_out = false, // whether to invert the output signal - .pixel_order = LED_STRIP_SET_RGB_ORDER(1, 0, 2), /* The order of the pixel color. Not set or set to 0 if the default order is used. - Here set to the default GRB order to demonstrate usage */ + .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line + .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip, + .led_model = LED_MODEL_WS2812, // LED strip model + // set the color order of the strip: GRB + .color_component_format = { + .format = { + .r_pos = 1, // red is the second byte in the color data + .g_pos = 0, // green is the first byte in the color data + .b_pos = 2, // blue is the third byte in the color data + .num_components = 3, // total 3 color components + }, + }, + .flags = { + .invert_out = false, // don't invert the output signal + } }; // LED strip backend configuration: SPI led_strip_spi_config_t spi_config = { .clk_src = SPI_CLK_SRC_DEFAULT, // different clock source can lead to different power consumption - .flags.with_dma = true, // Using DMA can improve performance and help drive more LEDs .spi_bus = SPI2_HOST, // SPI bus ID + .flags = { + .with_dma = true, // Using DMA can improve performance and help drive more LEDs + } }; // LED Strip object handle diff --git a/led_strip/idf_component.yml b/led_strip/idf_component.yml index ae2e6031bc..eb75f1ed1a 100644 --- a/led_strip/idf_component.yml +++ b/led_strip/idf_component.yml @@ -1,5 +1,7 @@ -version: "2.5.6" +version: "3.0.0" description: Driver for Addressable LED Strip (WS2812, etc) url: https://github.com/espressif/idf-extra-components/tree/master/led_strip +issues: https://github.com/espressif/idf-extra-components/issues +repository: https://github.com/espressif/idf-extra-components.git dependencies: - idf: ">=4.4" + idf: ">=5.0" diff --git a/led_strip/include/led_strip.h b/led_strip/include/led_strip.h index 3c4758009c..36fe5fefff 100644 --- a/led_strip/include/led_strip.h +++ b/led_strip/include/led_strip.h @@ -8,39 +8,12 @@ #include #include "esp_err.h" #include "led_strip_rmt.h" -#include "esp_idf_version.h" - -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 0) #include "led_strip_spi.h" -#endif #ifdef __cplusplus extern "C" { #endif -/** - * @brief Help macro to set pixel RGB color order - * The default order of the three-color LED strips is GRB. If you have a different order, you can use the macro to set `pixel_order` in led_strip_config_t. - * The positions are counted from the least significant bit (LSB). - * @param R The position of the red channel in the color order. - * @param G The position of the green channel in the color order. - * @param B The position of the blue channel in the color order. - * @note The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. - */ -#define LED_STRIP_SET_RGB_ORDER(R, G, B) (R << 0 | G << 2 | B << 4) - -/** - * @brief Help macro to set pixel RGBW color order - * The default order of the four-color LED strips is GRBW. If you have a different order, you can use the macro to set `pixel_order` in led_strip_config_t. - * The positions are counted from the least significant bit (LSB). - * @param R The position of the red channel in the color order. - * @param G The position of the green channel in the color order. - * @param B The position of the blue channel in the color order. - * @param W The position of the white channel in the color order. - * @note The order starts from 0. And the user needs to make sure that all the numbers appear exactly once and are all less than the number of colors per pixel. - */ -#define LED_STRIP_SET_RGBW_ORDER(R, G, B, W) (R << 0 | G << 2 | B << 4 | W << 6) - /** * @brief Set RGB for a specific pixel * diff --git a/led_strip/include/led_strip_rmt.h b/led_strip/include/led_strip_rmt.h index b575aeaba1..3b58276b14 100644 --- a/led_strip/include/led_strip_rmt.h +++ b/led_strip/include/led_strip_rmt.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,10 +9,7 @@ #include "esp_err.h" #include "led_strip_types.h" #include "esp_idf_version.h" - -#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) #include "driver/rmt_types.h" -#endif #ifdef __cplusplus extern "C" { @@ -22,14 +19,11 @@ extern "C" { * @brief LED Strip RMT specific configuration */ typedef struct { -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0) - uint8_t rmt_channel; /*!< Specify the channel number, the legacy RMT driver doesn't support channel allocator */ -#else // new driver supports specify the clock source and clock resolution rmt_clock_source_t clk_src; /*!< RMT clock source */ uint32_t resolution_hz; /*!< RMT tick resolution, if set to zero, a default resolution (10MHz) will be applied */ -#endif size_t mem_block_symbols; /*!< How many RMT symbols can one RMT channel hold at one time. Set to 0 will fallback to use the default size. */ - struct { + /*!< Extra RMT specific driver flags */ + struct led_strip_rmt_extra_config { uint32_t with_dma: 1; /*!< Use DMA to transmit data */ } flags; /*!< Extra driver flags */ } led_strip_rmt_config_t; diff --git a/led_strip/include/led_strip_spi.h b/led_strip/include/led_strip_spi.h index eb35249360..cd66e7a8f1 100644 --- a/led_strip/include/led_strip_spi.h +++ b/led_strip/include/led_strip_spi.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -27,6 +27,7 @@ typedef struct { /** * @brief Create LED strip based on SPI MOSI channel + * * @note Although only the MOSI line is used for generating the signal, the whole SPI bus can't be used for other purposes. * * @param led_config LED strip configuration diff --git a/led_strip/include/led_strip_types.h b/led_strip/include/led_strip_types.h index 47aea74d8a..3c290d5b96 100644 --- a/led_strip/include/led_strip_types.h +++ b/led_strip/include/led_strip_types.h @@ -11,6 +11,11 @@ extern "C" { #endif +/** + * @brief Type of LED strip handle + */ +typedef struct led_strip_t *led_strip_handle_t; + /** * @brief LED strip model * @note Different led model may have different timing parameters, so we need to distinguish them. @@ -22,24 +27,41 @@ typedef enum { } led_model_t; /** - * @brief LED strip handle + * @brief LED color component format + * @note The format is used to specify the order of color components in each pixel, also the number of color components. */ -typedef struct led_strip_t *led_strip_handle_t; +typedef union { + struct format_layout { + uint32_t r_pos: 2; /*!< Position of the red channel in the color order: 0~3 */ + uint32_t g_pos: 2; /*!< Position of the green channel in the color order: 0~3 */ + uint32_t b_pos: 2; /*!< Position of the blue channel in the color order: 0~3 */ + uint32_t w_pos: 2; /*!< Position of the white channel in the color order: 0~3 */ + uint32_t reserved: 21; /*!< Reserved */ + uint32_t num_components: 3; /*!< Number of color components per pixel: 3 or 4. If set to 0, it will fallback to 3 */ + } format; /*!< Format layout */ + uint32_t format_id; /*!< Format ID */ +} led_color_component_format_t; + +/// Helper macros to set the color component format +#define LED_STRIP_COLOR_COMPONENT_FMT_GRB (led_color_component_format_t){.format = {.r_pos = 1, .g_pos = 0, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 3}} +#define LED_STRIP_COLOR_COMPONENT_FMT_GRBW (led_color_component_format_t){.format = {.r_pos = 1, .g_pos = 0, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 4}} +#define LED_STRIP_COLOR_COMPONENT_FMT_RGB (led_color_component_format_t){.format = {.r_pos = 0, .g_pos = 1, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 3}} +#define LED_STRIP_COLOR_COMPONENT_FMT_RGBW (led_color_component_format_t){.format = {.r_pos = 0, .g_pos = 1, .b_pos = 2, .w_pos = 3, .reserved = 0, .num_components = 4}} /** - * @brief LED Strip Configuration + * @brief LED Strip common configurations + * The common configurations are not specific to any backend peripheral. */ typedef struct { - int strip_gpio_num; /*!< GPIO number that used by LED strip */ - uint32_t max_leds; /*!< Maximum LEDs in a single strip */ - uint8_t bytes_per_pixel; /*!< bytes per LED pixel. Should be 3 or 4 */ - led_model_t led_model; /*!< LED model */ - uint8_t pixel_order; /*! The order of the pixel color. - Use help macro LED_STRIP_SET_RGB_ORDER or LED_STRIP_SET_RGBW_ORDER to set. - Not set or set to 0 if the default order is used. */ - struct { + int strip_gpio_num; /*!< GPIO number that used by LED strip */ + uint32_t max_leds; /*!< Maximum number of LEDs that can be controlled in a single strip */ + led_model_t led_model; /*!< Specifies the LED strip model (e.g., WS2812, SK6812) */ + led_color_component_format_t color_component_format; /*!< Specifies the order of color components in each pixel. + Use helper macros like `LED_STRIP_COLOR_COMPONENT_FMT_GRB` to set the format */ + /*!< LED strip extra driver flags */ + struct led_strip_extra_flags { uint32_t invert_out: 1; /*!< Invert output signal */ - } flags; /*!< Extra driver flags */ + } flags; /*!< Extra driver flags */ } led_strip_config_t; #ifdef __cplusplus diff --git a/led_strip/src/led_strip_common.c b/led_strip/src/led_strip_common.c deleted file mode 100644 index 6338e9ffed..0000000000 --- a/led_strip/src/led_strip_common.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include "esp_log.h" -#include "esp_check.h" -#include "esp_bit_defs.h" -#include "led_strip_common.h" - -static const char *TAG = "led_strip_common"; - -esp_err_t led_strip_set_color_order(uint8_t *led_pixel_offset, const uint8_t pixel_order, const uint8_t bytes_per_pixel) -{ - if (pixel_order) { - uint8_t r_order = (pixel_order >> 0) & 0x03; - uint8_t g_order = (pixel_order >> 2) & 0x03; - uint8_t b_order = (pixel_order >> 4) & 0x03; - uint8_t w_order = (pixel_order >> 6) & 0x03; - uint8_t mask = bytes_per_pixel == 3 ? BIT(r_order) | BIT(g_order) | BIT(b_order) : BIT(r_order) | BIT(g_order) | BIT(b_order) | BIT(w_order); - // Check for invalid values - ESP_RETURN_ON_FALSE(__builtin_popcount(mask) == bytes_per_pixel && r_order < bytes_per_pixel && g_order < bytes_per_pixel && b_order < bytes_per_pixel && w_order < bytes_per_pixel, - ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); - led_pixel_offset[LED_PIXEL_INDEX_RED] = r_order; - led_pixel_offset[LED_PIXEL_INDEX_GREEN] = g_order; - led_pixel_offset[LED_PIXEL_INDEX_BLUE] = b_order; - led_pixel_offset[LED_PIXEL_INDEX_WHITE] = w_order; - } else { - // If pixel_order is not set, set default GRB(GRBW) order as fallback path - led_pixel_offset[LED_PIXEL_INDEX_RED] = 1; - led_pixel_offset[LED_PIXEL_INDEX_GREEN] = 0; - led_pixel_offset[LED_PIXEL_INDEX_BLUE] = 2; - led_pixel_offset[LED_PIXEL_INDEX_WHITE] = 3; - } - return ESP_OK; -} diff --git a/led_strip/src/led_strip_common.h b/led_strip/src/led_strip_common.h deleted file mode 100644 index e4ca2811f3..0000000000 --- a/led_strip/src/led_strip_common.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include -#include "esp_err.h" -#include "led_strip_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief LED strip pixel order index - */ -typedef enum { - LED_PIXEL_INDEX_RED, /*!< Red pixel index */ - LED_PIXEL_INDEX_GREEN, /*!< Green pixel index */ - LED_PIXEL_INDEX_BLUE, /*!< Blue pixel index */ - LED_PIXEL_INDEX_WHITE, /*!< White pixel index */ - LED_PIXEL_INDEX_MAX /*!< Max pixel index */ -} led_pixel_order_index_t; - -/** - * @brief Set LED color order - * - * @param led_pixel_offset Each pixel's offset - * @param pixel_order `pixel_order` parameter in LED strip configuration - * @param bytes_per_pixel bytes per pixel - * @return - * - ESP_OK: Set LED color order successfully - * - ESP_ERR_INVALID_ARG: Set LED color order failed because of invalid argument - */ -esp_err_t led_strip_set_color_order(uint8_t *led_pixel_offset, const uint8_t pixel_order, const uint8_t bytes_per_pixel); - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/led_strip/src/led_strip_rmt_dev.c b/led_strip/src/led_strip_rmt_dev.c index 15a2ef4a48..4a38f4eee7 100644 --- a/led_strip/src/led_strip_rmt_dev.c +++ b/led_strip/src/led_strip_rmt_dev.c @@ -12,7 +12,6 @@ #include "led_strip.h" #include "led_strip_interface.h" #include "led_strip_rmt_encoder.h" -#include "led_strip_common.h" #define LED_STRIP_RMT_DEFAULT_RESOLUTION 10000000 // 10MHz resolution #define LED_STRIP_RMT_DEFAULT_TRANS_QUEUE_SIZE 4 @@ -31,7 +30,7 @@ typedef struct { rmt_encoder_handle_t strip_encoder; uint32_t strip_len; uint8_t bytes_per_pixel; - uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; + led_color_component_format_t component_fmt; uint8_t pixel_buf[]; } led_strip_rmt_obj; @@ -39,33 +38,36 @@ static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t index, uin { led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); + + led_color_component_format_t component_fmt = rmt_strip->component_fmt; uint32_t start = index * rmt_strip->bytes_per_pixel; uint8_t *pixel_buf = rmt_strip->pixel_buf; - uint8_t *offset = rmt_strip->led_pixel_offset; - // Support all kinds of pixel order - pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; - - if (rmt_strip->bytes_per_pixel > 3) { - pixel_buf[start + offset[LED_PIXEL_INDEX_WHITE]] = 0; + + pixel_buf[start + component_fmt.format.r_pos] = red & 0xFF; + pixel_buf[start + component_fmt.format.g_pos] = green & 0xFF; + pixel_buf[start + component_fmt.format.b_pos] = blue & 0xFF; + if (component_fmt.format.num_components > 3) { + pixel_buf[start + component_fmt.format.w_pos] = 0; } + return ESP_OK; } static esp_err_t led_strip_rmt_set_pixel_rgbw(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue, uint32_t white) { led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); + led_color_component_format_t component_fmt = rmt_strip->component_fmt; ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); - ESP_RETURN_ON_FALSE(rmt_strip->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "wrong LED pixel format, expected 4 bytes per pixel"); + ESP_RETURN_ON_FALSE(component_fmt.format.num_components == 4, ESP_ERR_INVALID_ARG, TAG, "led doesn't have 4 components"); + uint32_t start = index * rmt_strip->bytes_per_pixel; uint8_t *pixel_buf = rmt_strip->pixel_buf; - uint8_t *offset = rmt_strip->led_pixel_offset; - // SK6812 component order is GRBW - pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_WHITE]] = white & 0xFF; + + pixel_buf[start + component_fmt.format.r_pos] = red & 0xFF; + pixel_buf[start + component_fmt.format.g_pos] = green & 0xFF; + pixel_buf[start + component_fmt.format.b_pos] = blue & 0xFF; + pixel_buf[start + component_fmt.format.w_pos] = white & 0xFF; + return ESP_OK; } @@ -106,8 +108,26 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l led_strip_rmt_obj *rmt_strip = NULL; esp_err_t ret = ESP_OK; ESP_GOTO_ON_FALSE(led_config && rmt_config && ret_strip, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - ESP_GOTO_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel bytes"); - uint8_t bytes_per_pixel = led_config->bytes_per_pixel; + led_color_component_format_t component_fmt = led_config->color_component_format; + // If R/G/B order is not specified, set default GRB order as fallback + if (component_fmt.format_id == 0) { + component_fmt = LED_STRIP_COLOR_COMPONENT_FMT_GRB; + } + // check the validation of the color component format + uint8_t mask = 0; + if (component_fmt.format.num_components == 3) { + mask = BIT(component_fmt.format.r_pos) | BIT(component_fmt.format.g_pos) | BIT(component_fmt.format.b_pos); + // Check for invalid values + ESP_RETURN_ON_FALSE(mask == 0x07, ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); + } else if (component_fmt.format.num_components == 4) { + mask = BIT(component_fmt.format.r_pos) | BIT(component_fmt.format.g_pos) | BIT(component_fmt.format.b_pos) | BIT(component_fmt.format.w_pos); + // Check for invalid values + ESP_RETURN_ON_FALSE(mask == 0x0F, ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); + } else { + ESP_RETURN_ON_FALSE(false, ESP_ERR_INVALID_ARG, TAG, "invalid number of color components: %d", component_fmt.format.num_components); + } + // TODO: we assume each color component is 8 bits, may need to support other configurations in the future, e.g. 10bits per color component? + uint8_t bytes_per_pixel = component_fmt.format.num_components; rmt_strip = calloc(1, sizeof(led_strip_rmt_obj) + led_config->max_leds * bytes_per_pixel); ESP_GOTO_ON_FALSE(rmt_strip, ESP_ERR_NO_MEM, err, TAG, "no mem for rmt strip"); uint32_t resolution = rmt_config->resolution_hz ? rmt_config->resolution_hz : LED_STRIP_RMT_DEFAULT_RESOLUTION; @@ -138,8 +158,8 @@ esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const l .led_model = led_config->led_model }; ESP_GOTO_ON_ERROR(rmt_new_led_strip_encoder(&strip_encoder_conf, &rmt_strip->strip_encoder), err, TAG, "create LED strip encoder failed"); - ESP_GOTO_ON_ERROR(led_strip_set_color_order(rmt_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); + rmt_strip->component_fmt = component_fmt; rmt_strip->bytes_per_pixel = bytes_per_pixel; rmt_strip->strip_len = led_config->max_leds; rmt_strip->base.set_pixel = led_strip_rmt_set_pixel; diff --git a/led_strip/src/led_strip_rmt_dev_idf4.c b/led_strip/src/led_strip_rmt_dev_idf4.c deleted file mode 100644 index 091ccf8106..0000000000 --- a/led_strip/src/led_strip_rmt_dev_idf4.c +++ /dev/null @@ -1,191 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include -#include -#include "esp_log.h" -#include "esp_check.h" -#include "driver/rmt.h" -#include "led_strip.h" -#include "led_strip_interface.h" -#include "led_strip_common.h" - -static const char *TAG = "led_strip_rmt"; - -#define WS2812_T0H_NS (300) -#define WS2812_T0L_NS (900) -#define WS2812_T1H_NS (900) -#define WS2812_T1L_NS (300) - -#define SK6812_T0H_NS (300) -#define SK6812_T0L_NS (900) -#define SK6812_T1H_NS (600) -#define SK6812_T1L_NS (600) - -#define LED_STRIP_RESET_MS (10) - -// the memory size of each RMT channel, in words (4 bytes) -#if CONFIG_IDF_TARGET_ESP32 || CONFIG_IDF_TARGET_ESP32S2 -#define LED_STRIP_RMT_DEFAULT_MEM_BLOCK_SYMBOLS 64 -#else -#define LED_STRIP_RMT_DEFAULT_MEM_BLOCK_SYMBOLS 48 -#endif - -static uint32_t led_t0h_ticks = 0; -static uint32_t led_t1h_ticks = 0; -static uint32_t led_t0l_ticks = 0; -static uint32_t led_t1l_ticks = 0; - -typedef struct { - led_strip_t base; - rmt_channel_t rmt_channel; - uint32_t strip_len; - uint8_t bytes_per_pixel; - uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; - uint8_t buffer[0]; -} led_strip_rmt_obj; - -static void IRAM_ATTR ws2812_rmt_adapter(const void *src, rmt_item32_t *dest, size_t src_size, - size_t wanted_num, size_t *translated_size, size_t *item_num) -{ - if (src == NULL || dest == NULL) { - *translated_size = 0; - *item_num = 0; - return; - } - const rmt_item32_t bit0 = {{{ led_t0h_ticks, 1, led_t0l_ticks, 0 }}}; //Logical 0 - const rmt_item32_t bit1 = {{{ led_t1h_ticks, 1, led_t1l_ticks, 0 }}}; //Logical 1 - size_t size = 0; - size_t num = 0; - uint8_t *psrc = (uint8_t *)src; - rmt_item32_t *pdest = dest; - while (size < src_size && num < wanted_num) { - for (int i = 0; i < 8; i++) { - // MSB first - if (*psrc & (1 << (7 - i))) { - pdest->val = bit1.val; - } else { - pdest->val = bit0.val; - } - num++; - pdest++; - } - size++; - psrc++; - } - *translated_size = size; - *item_num = num; -} - -static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - ESP_RETURN_ON_FALSE(index < rmt_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of the maximum number of leds"); - uint32_t start = index * rmt_strip->bytes_per_pixel; - uint8_t *pixel_buf = rmt_strip->buffer; - uint8_t *offset = rmt_strip->led_pixel_offset; - // Support all kinds of pixel order - pixel_buf[start + offset[LED_PIXEL_INDEX_RED]] = red & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_GREEN]] = green & 0xFF; - pixel_buf[start + offset[LED_PIXEL_INDEX_BLUE]] = blue & 0xFF; - if (rmt_strip->bytes_per_pixel > 3) { - rmt_strip->buffer[start + offset[LED_PIXEL_INDEX_WHITE]] = 0; - } - return ESP_OK; -} - -static esp_err_t led_strip_rmt_refresh(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - ESP_RETURN_ON_ERROR(rmt_write_sample(rmt_strip->rmt_channel, rmt_strip->buffer, rmt_strip->strip_len * rmt_strip->bytes_per_pixel, true), TAG, - "transmit RMT samples failed"); - vTaskDelay(pdMS_TO_TICKS(LED_STRIP_RESET_MS)); - return ESP_OK; -} - -static esp_err_t led_strip_rmt_clear(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - // Write zero to turn off all LEDs - memset(rmt_strip->buffer, 0, rmt_strip->strip_len * rmt_strip->bytes_per_pixel); - return led_strip_rmt_refresh(strip); -} - -static esp_err_t led_strip_rmt_del(led_strip_t *strip) -{ - led_strip_rmt_obj *rmt_strip = __containerof(strip, led_strip_rmt_obj, base); - ESP_RETURN_ON_ERROR(rmt_driver_uninstall(rmt_strip->rmt_channel), TAG, "uninstall RMT driver failed"); - free(rmt_strip); - return ESP_OK; -} - -esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config, const led_strip_rmt_config_t *dev_config, led_strip_handle_t *ret_strip) -{ - led_strip_rmt_obj *rmt_strip = NULL; - esp_err_t ret = ESP_OK; - ESP_RETURN_ON_FALSE(led_config && dev_config && ret_strip, ESP_ERR_INVALID_ARG, TAG, "invalid argument"); - ESP_RETURN_ON_FALSE(dev_config->flags.with_dma == 0, ESP_ERR_NOT_SUPPORTED, TAG, "DMA is not supported"); - ESP_RETURN_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "invalid led_pixel bytes"); - uint8_t bytes_per_pixel = led_config->bytes_per_pixel; - - // allocate memory for led_strip object - rmt_strip = calloc(1, sizeof(led_strip_rmt_obj) + led_config->max_leds * bytes_per_pixel); - ESP_RETURN_ON_FALSE(rmt_strip, ESP_ERR_NO_MEM, TAG, "request memory for les_strip failed"); - - // install RMT channel driver - rmt_config_t config = RMT_DEFAULT_CONFIG_TX(led_config->strip_gpio_num, dev_config->rmt_channel); - // set the minimal clock division because the LED strip needs a high clock resolution - config.clk_div = 2; - - uint8_t mem_block_num = 2; - // override the default value if the user specify the mem block size - if (dev_config->mem_block_symbols) { - mem_block_num = (dev_config->mem_block_symbols + LED_STRIP_RMT_DEFAULT_MEM_BLOCK_SYMBOLS / 2) / LED_STRIP_RMT_DEFAULT_MEM_BLOCK_SYMBOLS; - } - config.mem_block_num = mem_block_num; - - ESP_GOTO_ON_ERROR(rmt_config(&config), err, TAG, "RMT config failed"); - ESP_GOTO_ON_ERROR(rmt_driver_install(config.channel, 0, 0), err, TAG, "RMT install failed"); - - uint32_t counter_clk_hz = 0; - rmt_get_counter_clock((rmt_channel_t)dev_config->rmt_channel, &counter_clk_hz); - // ns -> ticks - float ratio = (float)counter_clk_hz / 1e9; - if (led_config->led_model == LED_MODEL_WS2812) { - led_t0h_ticks = (uint32_t)(ratio * WS2812_T0H_NS); - led_t0l_ticks = (uint32_t)(ratio * WS2812_T0L_NS); - led_t1h_ticks = (uint32_t)(ratio * WS2812_T1H_NS); - led_t1l_ticks = (uint32_t)(ratio * WS2812_T1L_NS); - } else if (led_config->led_model == LED_MODEL_SK6812) { - led_t0h_ticks = (uint32_t)(ratio * SK6812_T0H_NS); - led_t0l_ticks = (uint32_t)(ratio * SK6812_T0L_NS); - led_t1h_ticks = (uint32_t)(ratio * SK6812_T1H_NS); - led_t1l_ticks = (uint32_t)(ratio * SK6812_T1L_NS); - } else { - assert(false); - } - - // adapter to translates the LES strip date frame into RMT symbols - rmt_translator_init((rmt_channel_t)dev_config->rmt_channel, ws2812_rmt_adapter); - ESP_GOTO_ON_ERROR(led_strip_set_color_order(rmt_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); - - rmt_strip->bytes_per_pixel = bytes_per_pixel; - rmt_strip->rmt_channel = (rmt_channel_t)dev_config->rmt_channel; - rmt_strip->strip_len = led_config->max_leds; - rmt_strip->base.set_pixel = led_strip_rmt_set_pixel; - rmt_strip->base.refresh = led_strip_rmt_refresh; - rmt_strip->base.clear = led_strip_rmt_clear; - rmt_strip->base.del = led_strip_rmt_del; - - *ret_strip = &rmt_strip->base; - return ESP_OK; - -err: - if (rmt_strip) { - free(rmt_strip); - } - return ret; -} diff --git a/led_strip/src/led_strip_spi_dev.c b/led_strip/src/led_strip_spi_dev.c index 248c474cf5..81e0259ceb 100644 --- a/led_strip/src/led_strip_spi_dev.c +++ b/led_strip/src/led_strip_spi_dev.c @@ -10,10 +10,8 @@ #include "esp_check.h" #include "esp_rom_gpio.h" #include "soc/spi_periph.h" -#include "hal/spi_hal.h" #include "led_strip.h" #include "led_strip_interface.h" -#include "led_strip_common.h" #define LED_STRIP_SPI_DEFAULT_RESOLUTION (2.5 * 1000 * 1000) // 2.5MHz resolution #define LED_STRIP_SPI_DEFAULT_TRANS_QUEUE_SIZE 4 @@ -29,7 +27,7 @@ typedef struct { spi_device_handle_t spi_device; uint32_t strip_len; uint8_t bytes_per_pixel; - uint8_t led_pixel_offset[LED_PIXEL_INDEX_MAX]; + led_color_component_format_t component_fmt; uint8_t pixel_buf[]; } led_strip_spi_obj; @@ -56,32 +54,35 @@ static esp_err_t led_strip_spi_set_pixel(led_strip_t *strip, uint32_t index, uin // 3 pixels take 72bits(9bytes) uint32_t start = index * spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE; uint8_t *pixel_buf = spi_strip->pixel_buf; - uint8_t *offset = spi_strip->led_pixel_offset; + led_color_component_format_t component_fmt = spi_strip->component_fmt; memset(pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); - __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_RED]]); - __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_GREEN]]); - __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_BLUE]]); - if (spi_strip->bytes_per_pixel > 3) { - __led_strip_spi_bit(0, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * LED_PIXEL_INDEX_WHITE]); + + __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.r_pos]); + __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.g_pos]); + __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.b_pos]); + if (component_fmt.format.num_components > 3) { + __led_strip_spi_bit(0, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.w_pos]); } + return ESP_OK; } static esp_err_t led_strip_spi_set_pixel_rgbw(led_strip_t *strip, uint32_t index, uint32_t red, uint32_t green, uint32_t blue, uint32_t white) { led_strip_spi_obj *spi_strip = __containerof(strip, led_strip_spi_obj, base); + led_color_component_format_t component_fmt = spi_strip->component_fmt; ESP_RETURN_ON_FALSE(index < spi_strip->strip_len, ESP_ERR_INVALID_ARG, TAG, "index out of maximum number of LEDs"); - ESP_RETURN_ON_FALSE(spi_strip->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, TAG, "wrong LED pixel format, expected 4 bytes per pixel"); + ESP_RETURN_ON_FALSE(component_fmt.format.num_components == 4, ESP_ERR_INVALID_ARG, TAG, "led doesn't have 4 components"); + // LED_PIXEL_FORMAT_GRBW takes 96bits(12bytes) uint32_t start = index * spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE; uint8_t *pixel_buf = spi_strip->pixel_buf; - uint8_t *offset = spi_strip->led_pixel_offset; - // SK6812 component order is GRBW memset(pixel_buf + start, 0, spi_strip->bytes_per_pixel * SPI_BYTES_PER_COLOR_BYTE); - __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_RED]]); - __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_GREEN]]); - __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_BLUE]]); - __led_strip_spi_bit(white, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * offset[LED_PIXEL_INDEX_WHITE]]); + + __led_strip_spi_bit(red, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.r_pos]); + __led_strip_spi_bit(green, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.g_pos]); + __led_strip_spi_bit(blue, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.b_pos]); + __led_strip_spi_bit(white, &pixel_buf[start + SPI_BYTES_PER_COLOR_BYTE * component_fmt.format.w_pos]); return ESP_OK; } @@ -130,8 +131,26 @@ esp_err_t led_strip_new_spi_device(const led_strip_config_t *led_config, const l led_strip_spi_obj *spi_strip = NULL; esp_err_t ret = ESP_OK; ESP_GOTO_ON_FALSE(led_config && spi_config && ret_strip, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument"); - ESP_GOTO_ON_FALSE(led_config->bytes_per_pixel == 3 || led_config->bytes_per_pixel == 4, ESP_ERR_INVALID_ARG, err, TAG, "invalid led_pixel bytes"); - uint8_t bytes_per_pixel = led_config->bytes_per_pixel; + led_color_component_format_t component_fmt = led_config->color_component_format; + // If R/G/B order is not specified, set default GRB order as fallback + if (component_fmt.format_id == 0) { + component_fmt = LED_STRIP_COLOR_COMPONENT_FMT_GRB; + } + // check the validation of the color component format + uint8_t mask = 0; + if (component_fmt.format.num_components == 3) { + mask = BIT(component_fmt.format.r_pos) | BIT(component_fmt.format.g_pos) | BIT(component_fmt.format.b_pos); + // Check for invalid values + ESP_RETURN_ON_FALSE(mask == 0x07, ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); + } else if (component_fmt.format.num_components == 4) { + mask = BIT(component_fmt.format.r_pos) | BIT(component_fmt.format.g_pos) | BIT(component_fmt.format.b_pos) | BIT(component_fmt.format.w_pos); + // Check for invalid values + ESP_RETURN_ON_FALSE(mask == 0x0F, ESP_ERR_INVALID_ARG, TAG, "invalid order argument"); + } else { + ESP_RETURN_ON_FALSE(false, ESP_ERR_INVALID_ARG, TAG, "invalid number of color components: %d", component_fmt.format.num_components); + } + // TODO: we assume each color component is 8 bits, may need to support other configurations in the future, e.g. 10bits per color component? + uint8_t bytes_per_pixel = component_fmt.format.num_components; uint32_t mem_caps = MALLOC_CAP_DEFAULT; if (spi_config->flags.with_dma) { // DMA buffer must be placed in internal SRAM @@ -185,8 +204,8 @@ esp_err_t led_strip_new_spi_device(const led_strip_config_t *led_config, const l // clock_resolution between 2.2MHz to 2.8MHz is supported ESP_GOTO_ON_FALSE((clock_resolution_khz < LED_STRIP_SPI_DEFAULT_RESOLUTION / 1000 + 300) && (clock_resolution_khz > LED_STRIP_SPI_DEFAULT_RESOLUTION / 1000 - 300), ESP_ERR_NOT_SUPPORTED, err, TAG, "unsupported clock resolution:%dKHz", clock_resolution_khz); - ESP_GOTO_ON_ERROR(led_strip_set_color_order(spi_strip->led_pixel_offset, led_config->pixel_order, bytes_per_pixel), err, TAG, "adjust color order failed"); + spi_strip->component_fmt = component_fmt; spi_strip->bytes_per_pixel = bytes_per_pixel; spi_strip->strip_len = led_config->max_leds; spi_strip->base.set_pixel = led_strip_spi_set_pixel; From 7dc43a9c7ca4bd2ca936b55f3069e32b7c5be5d8 Mon Sep 17 00:00:00 2001 From: sterisa Date: Sat, 26 Oct 2024 05:26:13 -0400 Subject: [PATCH 5/8] Merge remote-tracking branch 'upstream/master' into WS2811 WS8211 timing changes --- led_strip/include/led_strip_types.h | 1 + led_strip/src/led_strip_rmt_encoder.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/led_strip/include/led_strip_types.h b/led_strip/include/led_strip_types.h index 691f0bc394..34d4bbf704 100644 --- a/led_strip/include/led_strip_types.h +++ b/led_strip/include/led_strip_types.h @@ -27,6 +27,7 @@ typedef enum { typedef enum { LED_MODEL_WS2812, /*!< LED strip model: WS2812 */ LED_MODEL_SK6812, /*!< LED strip model: SK6812 */ + LED_MODEL_WS2811, /*!< LED strip model: WS2811 */ LED_MODEL_INVALID /*!< Invalid LED strip model */ } led_model_t; diff --git a/led_strip/src/led_strip_rmt_encoder.c b/led_strip/src/led_strip_rmt_encoder.c index 2e6f57019a..d105136d3f 100644 --- a/led_strip/src/led_strip_rmt_encoder.c +++ b/led_strip/src/led_strip_rmt_encoder.c @@ -83,6 +83,7 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm led_encoder->base.del = rmt_del_led_strip_encoder; led_encoder->base.reset = rmt_led_strip_encoder_reset; rmt_bytes_encoder_config_t bytes_encoder_config; + uint32_t reset_ticks = config->resolution / 1000000 * 280 / 2; // reset code duration defaults to 280us to accomodate WS2812B-V5 if (config->led_model == LED_MODEL_SK6812) { bytes_encoder_config = (rmt_bytes_encoder_config_t) { .bit0 = { @@ -116,6 +117,24 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm }, .flags.msb_first = 1 // WS2812 transfer bit order: G7...G0R7...R0B7...B0 }; + } else if (config->led_model == LED_MODEL_WS2811) { + // different led strip might have its own timing requirements, following parameter is for WS2811 + bytes_encoder_config = (rmt_bytes_encoder_config_t) { + .bit0 = { + .level0 = 1, + .duration0 = 0.5 * config->resolution / 1000000., // T0H=0.5us + .level1 = 0, + .duration1 = 2.0 * config->resolution / 1000000., // T0L=2.0us + }, + .bit1 = { + .level0 = 1, + .duration0 = 1.2 * config->resolution / 1000000., // T1H=1.2us + .level1 = 0, + .duration1 = 1.3 * config->resolution / 1000000., // T1L=1.3us + }, + .flags.msb_first = 1 + }; + reset_ticks = config->resolution / 1000000 * 50 / 2; // divide by 2... signal is sent twice } else { assert(false); } @@ -123,7 +142,6 @@ esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rm rmt_copy_encoder_config_t copy_encoder_config = {}; ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(©_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed"); - uint32_t reset_ticks = config->resolution / 1000000 * 280 / 2; // reset code duration defaults to 280us to accomodate WS2812B-V5 led_encoder->reset_code = (rmt_symbol_word_t) { .level0 = 0, .duration0 = reset_ticks, From 7685bc1bcbb0bb5a86107981b1f8278a45f7e421 Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Fri, 25 Oct 2024 22:06:11 +0200 Subject: [PATCH 6/8] fix(esp_jpeg): Fixed undefined symbols from Kconfig --- esp_jpeg/tjpgd/tjpgdcnf.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/esp_jpeg/tjpgd/tjpgdcnf.h b/esp_jpeg/tjpgd/tjpgdcnf.h index ff977b5924..36dab28bd1 100644 --- a/esp_jpeg/tjpgd/tjpgdcnf.h +++ b/esp_jpeg/tjpgd/tjpgdcnf.h @@ -14,13 +14,21 @@ / 2: Grayscale (8-bit/pix) */ +#if defined(CONFIG_JD_USE_SCALE) #define JD_USE_SCALE CONFIG_JD_USE_SCALE +#else +#define JD_USE_SCALE 0 +#endif /* Switches output descaling feature. / 0: Disable / 1: Enable */ +#if defined(CONFIG_JD_TBLCLIP) #define JD_TBLCLIP CONFIG_JD_TBLCLIP +#else +#define JD_TBLCLIP 0 +#endif /* Use table conversion for saturation arithmetic. A bit faster, but increases 1 KB of code size. / 0: Disable / 1: Enable From f39938b8f2280bf9145b2c735c08a0a95f9f3ae7 Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Fri, 25 Oct 2024 22:41:42 +0200 Subject: [PATCH 7/8] refactor(esp_jpeg): Get ROM JPEG from soc_caps --- esp_jpeg/Kconfig | 2 +- esp_jpeg/README.md | 2 ++ esp_jpeg/idf_component.yml | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/esp_jpeg/Kconfig b/esp_jpeg/Kconfig index b6a7cc0ee6..a8cac8c8f9 100644 --- a/esp_jpeg/Kconfig +++ b/esp_jpeg/Kconfig @@ -2,7 +2,7 @@ menu "JPEG Decoder" config JD_USE_ROM bool "Use TinyJPG Decoder from ROM" - depends on IDF_TARGET_ESP32 || IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32C6 || IDF_TARGET_ESP32S3 + depends on ESP_ROM_HAS_JPEG_DECODE default y help By default, Espressif SoCs use TJpg decoder implemented in ROM code. diff --git a/esp_jpeg/README.md b/esp_jpeg/README.md index 3d0b216568..8fb4c9a23d 100644 --- a/esp_jpeg/README.md +++ b/esp_jpeg/README.md @@ -31,6 +31,8 @@ Some microcontrollers have TJpg decoder in ROM. It is used as default, but it ca - ESP32-S3 - ESP32-C3 - ESP32-C6 +- ESP32-C5 +- ESP32-C61 ### Fixed compilation configuration of the ROM code - Stream input buffer: 512 diff --git a/esp_jpeg/idf_component.yml b/esp_jpeg/idf_component.yml index 8a64c7a4c0..006c8edc44 100644 --- a/esp_jpeg/idf_component.yml +++ b/esp_jpeg/idf_component.yml @@ -1,5 +1,5 @@ -version: "1.0.5~3" +version: "1.1.0" description: "JPEG Decoder: TJpgDec" url: https://github.com/espressif/idf-extra-components/tree/master/esp_jpeg/ dependencies: - idf: ">=4.4" + idf: ">=5.0" From e793c31c1a7aafb25fc70c12b7653b0f1a0b47a7 Mon Sep 17 00:00:00 2001 From: Tomas Rezucha Date: Sat, 26 Oct 2024 23:39:11 +0200 Subject: [PATCH 8/8] feat(esp_jpeg): Add support for default Huffman tables Some JPEG images, typically frames from cameras, do not contain Huffman tables. This commit adds an option to use default Huffman tables defined in JPEG specification. --- .idf_build_apps.toml | 2 - esp_jpeg/CMakeLists.txt | 4 + esp_jpeg/Kconfig | 11 + esp_jpeg/README.md | 41 +- esp_jpeg/jpeg_decoder.c | 6 +- esp_jpeg/jpeg_default_huffman_table.c | 60 + esp_jpeg/test_apps/main/CMakeLists.txt | 3 +- esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py | 64 + esp_jpeg/test_apps/main/test_logo_jpg.h | 636 +- esp_jpeg/test_apps/main/test_usb_camera_jpg.h | 8 + .../test_apps/main/test_usb_camera_rgb888.h | 19202 ++++++++++++++++ esp_jpeg/test_apps/main/tjpgd_test.c | 97 +- esp_jpeg/test_apps/main/usb_camera.jpg | Bin 0 -> 2632 bytes esp_jpeg/test_apps/sdkconfig.ci | 6 + esp_jpeg/tjpgd/tjpgd.c | 78 +- esp_jpeg/tjpgd/tjpgdcnf.h | 5 + 16 files changed, 19558 insertions(+), 665 deletions(-) create mode 100644 esp_jpeg/jpeg_default_huffman_table.c create mode 100644 esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py create mode 100644 esp_jpeg/test_apps/main/test_usb_camera_jpg.h create mode 100644 esp_jpeg/test_apps/main/test_usb_camera_rgb888.h create mode 100644 esp_jpeg/test_apps/main/usb_camera.jpg create mode 100644 esp_jpeg/test_apps/sdkconfig.ci diff --git a/.idf_build_apps.toml b/.idf_build_apps.toml index 44341ab414..5d93caf6a9 100644 --- a/.idf_build_apps.toml +++ b/.idf_build_apps.toml @@ -1,5 +1,3 @@ -target = "all" -paths = "." recursive = true exclude = [ ".github", diff --git a/esp_jpeg/CMakeLists.txt b/esp_jpeg/CMakeLists.txt index b3caf42bf5..bb6563f0cd 100644 --- a/esp_jpeg/CMakeLists.txt +++ b/esp_jpeg/CMakeLists.txt @@ -7,4 +7,8 @@ if(NOT CONFIG_JD_USE_ROM) list(APPEND includes "tjpgd") endif() +if(CONFIG_JD_DEFAULT_HUFFMAN) + list(APPEND sources "jpeg_default_huffman_table.c") +endif() + idf_component_register(SRCS ${sources} INCLUDE_DIRS ${includes}) diff --git a/esp_jpeg/Kconfig b/esp_jpeg/Kconfig index a8cac8c8f9..b830cebb1b 100644 --- a/esp_jpeg/Kconfig +++ b/esp_jpeg/Kconfig @@ -66,4 +66,15 @@ menu "JPEG Decoder" config JD_FASTDECODE_TABLE bool "+ Table conversion for huffman decoding (wants 6 << HUFF_BIT bytes of RAM)" endchoice + + config JD_DEFAULT_HUFFMAN + bool "Support images without Huffman table" + depends on !JD_USE_ROM + default n + help + Enable this option to support decoding JPEG images that lack an embedded Huffman table. + When enabled, a default Huffman table is used during decoding, allowing the JPEG decoder to handle + images without explicitly provided Huffman tables. + + Note: Enabling this option increases ROM usage due to the inclusion of default Huffman tables. endmenu diff --git a/esp_jpeg/README.md b/esp_jpeg/README.md index 8fb4c9a23d..bd470ebcb1 100644 --- a/esp_jpeg/README.md +++ b/esp_jpeg/README.md @@ -2,29 +2,33 @@ [![Component Registry](https://components.espressif.com/components/espressif/esp_jpeg/badge.svg)](https://components.espressif.com/components/espressif/esp_jpeg) -TJpgDec is a generic JPEG image decompressor that is highly optimized for small embedded systems. It works with very low memory consumption. +TJpgDec is a lightweight JPEG image decompressor optimized for embedded systems with minimal memory consumption. -Some microcontrollers have TJpg decoder in ROM, it is used, if there is. [^1] Using ROM code can be disabled in menuconfig. +On some microcontrollers, TJpgDec is available in ROM and will be used by default, though this can be disabled in menuconfig if desired[^1]. [^1]: **_NOTE:_** When the ROM decoder is used, the configuration can't be changed. The configuration is fixed. ## Features **Compilation configuration:** -- Size of stream input buffer (default 512) -- Output pixel format (default RGB888): RGB888/RGB565 -- Switches output descaling feature (default enabled) -- Use table conversion for saturation arithmetic (default enabled) -- Three optimization levels (default basic): 8/16-bit MCUs, 32-bit MCUs, Table conversion for huffman decoding +- Stream input buffer size (default: 512 bytes) +- Output pixel format (default: RGB888; options: RGB888/RGB565) +- Enable/disable output descaling (default: enabled) +- Use table-based saturation for arithmetic operations (default: enabled) +- Use default Huffman tables: Useful from decoding frames from cameras, that do not provide Huffman tables (default: disabled to save ROM) +- Three optimization levels (default: 32-bit MCUs) for different CPU types: + - 8/16-bit MCUs + - 32-bit MCUs + - Table-based Huffman decoding **Runtime configuration:** -- Pixel Format: RGB888, RGB565 -- Scaling Ratio: 1/1, 1/2, 1/4 or 1/8 Selectable on Decompression -- Allow swap the first and the last byte of the color +- Pixel format options: RGB888, RGB565 +- Selectable scaling ratios: 1/1, 1/2, 1/4, or 1/8 (chosen at decompression) +- Option to swap the first and last bytes of color values ## TJpgDec in ROM -Some microcontrollers have TJpg decoder in ROM. It is used as default, but it can be disabled in menuconfig. Then there will be used code saved in this component. +On certain microcontrollers, TJpgDec is available in ROM and used by default. This can be disabled in menuconfig if you prefer to use the library code provided in this component. ### List of MCUs, which have TJpgDec in ROM - ESP32 @@ -35,24 +39,25 @@ Some microcontrollers have TJpg decoder in ROM. It is used as default, but it ca - ESP32-C61 ### Fixed compilation configuration of the ROM code -- Stream input buffer: 512 +The ROM version uses the following fixed settings: +- Stream input buffer: 512 bytes - Output pixel format: RGB888 -- Descaling feature for output: Enabled -- Table for saturation: Enabled +- Output descaling: enabled +- Saturation table: enabled - Optimization level: Basic (JD_FASTDECODE = 0) ### Pros and cons using ROM code **Advantages:** -- Save 5k of the flash memory (in the same configuration) +- Saves approximately 5 KB of flash memory with the same configuration **Disadvantages:** -- Cannot be changed compilation configuration -- Some configuration can be faster in some cases +- Compilation configuration cannot be changed +- Certain configurations may provide faster performance ## Speed comparison -In this table are examples of speed decoding JPEG image with this configuration: +The table below shows example decoding times for a JPEG image using various configurations: * Image size: 320 x 180 px * Output format: RGB565 * CPU: ESP32-S3 diff --git a/esp_jpeg/jpeg_decoder.c b/esp_jpeg/jpeg_decoder.c index d57ae9ca95..9f052bd32f 100644 --- a/esp_jpeg/jpeg_decoder.c +++ b/esp_jpeg/jpeg_decoder.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -86,7 +86,7 @@ esp_err_t esp_jpeg_decode(esp_jpeg_image_cfg_t *cfg, esp_jpeg_image_output_t *im /* Prepare image */ res = jd_prepare(&JDEC, jpeg_decode_in_cb, workbuf, JPEG_WORK_BUF_SIZE, cfg); - ESP_GOTO_ON_FALSE((res == JDR_OK), ESP_FAIL, err, TAG, "Error in preparing JPEG image!"); + ESP_GOTO_ON_FALSE((res == JDR_OK), ESP_FAIL, err, TAG, "Error in preparing JPEG image! %d", res); uint8_t scale_div = jpeg_get_div_by_scale(cfg->out_scale); uint8_t out_color_bytes = jpeg_get_color_bytes(cfg->out_format); @@ -101,7 +101,7 @@ esp_err_t esp_jpeg_decode(esp_jpeg_image_cfg_t *cfg, esp_jpeg_image_output_t *im /* Decode JPEG */ res = jd_decomp(&JDEC, jpeg_decode_out_cb, cfg->out_scale); - ESP_GOTO_ON_FALSE((res == JDR_OK), ESP_FAIL, err, TAG, "Error in decoding JPEG image!"); + ESP_GOTO_ON_FALSE((res == JDR_OK), ESP_FAIL, err, TAG, "Error in decoding JPEG image! %d", res); err: if (workbuf) { diff --git a/esp_jpeg/jpeg_default_huffman_table.c b/esp_jpeg/jpeg_default_huffman_table.c new file mode 100644 index 0000000000..1fe22a85a2 --- /dev/null +++ b/esp_jpeg/jpeg_default_huffman_table.c @@ -0,0 +1,60 @@ +/* + * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// Default Huffman tables for baseline JPEG + +// These values are taken directly from CCITT Rec. T.81 (1992 E) Appendix K.3.3 +// The *_num_bits array always contains exactly 16 elements. +// Each element represents the number of Huffman codes of a specific length: +// - The first element corresponds to codes of length 1 bit, +// - The second element to codes of length 2 bits, and so forth up to 16 bits. +// +// The *_values array has a length equal to the sum of all elements in the *_num_bits array, +// representing the actual values associated with each Huffman code in order. + +// Luminance DC Table +const unsigned char esp_jpeg_lum_dc_num_bits[16] = {0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}; +const unsigned esp_jpeg_lum_dc_codes_total = 12; +const unsigned char esp_jpeg_lum_dc_values[12] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + +// Chrominance DC Table +const unsigned char esp_jpeg_chrom_dc_num_bits[16] = {0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}; +const unsigned esp_jpeg_chrom_dc_codes_total = 12; +const unsigned char esp_jpeg_chrom_dc_values[12] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + +// Luminance AC Table +const unsigned char esp_jpeg_lum_ac_num_bits[16] = {0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125}; +const unsigned esp_jpeg_lum_ac_codes_total = 162; +const unsigned char esp_jpeg_lum_ac_values[162] = { + 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 +}; + +// Chrominance AC Table +const unsigned char esp_jpeg_chrom_ac_num_bits[16] = {0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119}; +const unsigned esp_jpeg_chrom_ac_codes_total = 162; +const unsigned char esp_jpeg_chrom_ac_values[162] = { + 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 +}; diff --git a/esp_jpeg/test_apps/main/CMakeLists.txt b/esp_jpeg/test_apps/main/CMakeLists.txt index cccb63b9b3..2c01330437 100644 --- a/esp_jpeg/test_apps/main/CMakeLists.txt +++ b/esp_jpeg/test_apps/main/CMakeLists.txt @@ -1,4 +1,5 @@ idf_component_register(SRCS "tjpgd_test.c" "test_tjpgd_main.c" INCLUDE_DIRS "." PRIV_REQUIRES "unity" - WHOLE_ARCHIVE) + WHOLE_ARCHIVE + EMBED_FILES "logo.jpg" "usb_camera.jpg") diff --git a/esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py b/esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py new file mode 100644 index 0000000000..1034262895 --- /dev/null +++ b/esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py @@ -0,0 +1,64 @@ +from PIL import Image + + +def jpg_to_rgb888_hex_c_array(input_filename: str, output_filename: str) -> str: + """ + Convert a .jpg file to RGB888 hex data and format it as a C-style array. + + Parameters: + input_filename (str): The path to the JPEG file. + + Returns: + str: A string representing the RGB888 hex data formatted as a C array. + """ + # Open the image file + with Image.open(input_filename) as img: + # Ensure the image is in RGB mode + rgb_img = img.convert("RGB") + + # Get image dimensions + width, height = rgb_img.size + + # List to store hex values as C-style entries + hex_data = [] + + # Iterate over each pixel to get RGB values + for y in range(height): + for x in range(width): + r, g, b = rgb_img.getpixel((x, y)) + # Format each RGB value as C-style hex (e.g., 0xRRGGBB) + hex_data.append(f"0x{r:02X}{g:02X}{b:02X}") + + # Format as a C-style array with line breaks for readability + hex_array = ",\n ".join(hex_data) + c_array = f"unsigned int image_data[{width * height}] = {{\n {hex_array}\n}};" + + # Write the C array to the output file + with open(output_filename, "w") as file: + file.write(c_array) + + print(f"C-style RGB888 hex array saved to {output_filename}") + + return c_array + + +def main(): + """ + Main function to convert a JPEG file to an RGB888 C-style hex array. + + Instructions: + 1. Replace 'input.jpg' with the path to your JPEG file. + 2. Run the script to get the C-style array output. + """ + # Input JPEG file path + input_filename = "usb_camera.jpg" # Replace with your JPEG file path + + # Output file path for the C array + output_filename = "output_array.c" # Specify your desired output filename + + # Convert JPEG to C-style RGB888 hex array + jpg_to_rgb888_hex_c_array(input_filename, output_filename) + + +if __name__ == "__main__": + main() diff --git a/esp_jpeg/test_apps/main/test_logo_jpg.h b/esp_jpeg/test_apps/main/test_logo_jpg.h index 66271e93d3..e82766ab11 100644 --- a/esp_jpeg/test_apps/main/test_logo_jpg.h +++ b/esp_jpeg/test_apps/main/test_logo_jpg.h @@ -1,634 +1,2 @@ -unsigned char logo_jpg[] = { - 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, - 0x01, 0x01, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0xff, 0xe2, 0x0c, 0x58, - 0x49, 0x43, 0x43, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x00, - 0x01, 0x01, 0x00, 0x00, 0x0c, 0x48, 0x4c, 0x69, 0x6e, 0x6f, 0x02, 0x10, - 0x00, 0x00, 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, - 0x5a, 0x20, 0x07, 0xce, 0x00, 0x02, 0x00, 0x09, 0x00, 0x06, 0x00, 0x31, - 0x00, 0x00, 0x61, 0x63, 0x73, 0x70, 0x4d, 0x53, 0x46, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x49, 0x45, 0x43, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xf6, 0xd6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xd3, 0x2d, 0x48, 0x50, - 0x20, 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, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x63, 0x70, 0x72, 0x74, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, - 0x00, 0x33, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x01, 0x84, 0x00, 0x00, - 0x00, 0x6c, 0x77, 0x74, 0x70, 0x74, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, - 0x00, 0x14, 0x62, 0x6b, 0x70, 0x74, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, - 0x00, 0x14, 0x72, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, - 0x00, 0x14, 0x67, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, - 0x00, 0x14, 0x62, 0x58, 0x59, 0x5a, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x14, 0x64, 0x6d, 0x6e, 0x64, 0x00, 0x00, 0x02, 0x54, 0x00, 0x00, - 0x00, 0x70, 0x64, 0x6d, 0x64, 0x64, 0x00, 0x00, 0x02, 0xc4, 0x00, 0x00, - 0x00, 0x88, 0x76, 0x75, 0x65, 0x64, 0x00, 0x00, 0x03, 0x4c, 0x00, 0x00, - 0x00, 0x86, 0x76, 0x69, 0x65, 0x77, 0x00, 0x00, 0x03, 0xd4, 0x00, 0x00, - 0x00, 0x24, 0x6c, 0x75, 0x6d, 0x69, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, - 0x00, 0x14, 0x6d, 0x65, 0x61, 0x73, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, - 0x00, 0x24, 0x74, 0x65, 0x63, 0x68, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, - 0x00, 0x0c, 0x72, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, - 0x08, 0x0c, 0x67, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, - 0x08, 0x0c, 0x62, 0x54, 0x52, 0x43, 0x00, 0x00, 0x04, 0x3c, 0x00, 0x00, - 0x08, 0x0c, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, - 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, - 0x31, 0x39, 0x39, 0x38, 0x20, 0x48, 0x65, 0x77, 0x6c, 0x65, 0x74, 0x74, - 0x2d, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x72, 0x64, 0x20, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x73, 0x52, 0x47, 0x42, 0x20, 0x49, - 0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x73, - 0x52, 0x47, 0x42, 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, - 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf3, 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, - 0x16, 0xcc, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, - 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xa2, 0x00, 0x00, - 0x38, 0xf5, 0x00, 0x00, 0x03, 0x90, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x62, 0x99, 0x00, 0x00, 0xb7, 0x85, 0x00, 0x00, - 0x18, 0xda, 0x58, 0x59, 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x24, 0xa0, 0x00, 0x00, 0x0f, 0x84, 0x00, 0x00, 0xb6, 0xcf, 0x64, 0x65, - 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, - 0x43, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, - 0x2e, 0x69, 0x65, 0x63, 0x2e, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x49, 0x45, 0x43, 0x20, 0x68, - 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x65, - 0x63, 0x2e, 0x63, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x2e, 0x49, 0x45, 0x43, 0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, - 0x32, 0x2e, 0x31, 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, - 0x52, 0x47, 0x42, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x20, 0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x49, - 0x45, 0x43, 0x20, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, - 0x20, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x52, 0x47, 0x42, - 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x20, 0x2d, 0x20, 0x73, 0x52, 0x47, 0x42, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x65, 0x73, 0x63, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x20, 0x56, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, - 0x20, 0x49, 0x45, 0x43, 0x36, 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, - 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2c, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x56, - 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x45, 0x43, 0x36, - 0x31, 0x39, 0x36, 0x36, 0x2d, 0x32, 0x2e, 0x31, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x69, - 0x65, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xa4, 0xfe, 0x00, 0x14, - 0x5f, 0x2e, 0x00, 0x10, 0xcf, 0x14, 0x00, 0x03, 0xed, 0xcc, 0x00, 0x04, - 0x13, 0x0b, 0x00, 0x03, 0x5c, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x58, 0x59, - 0x5a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x09, 0x56, 0x00, 0x50, - 0x00, 0x00, 0x00, 0x57, 0x1f, 0xe7, 0x6d, 0x65, 0x61, 0x73, 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, 0x00, - 0x02, 0x8f, 0x00, 0x00, 0x00, 0x02, 0x73, 0x69, 0x67, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x43, 0x52, 0x54, 0x20, 0x63, 0x75, 0x72, 0x76, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0a, - 0x00, 0x0f, 0x00, 0x14, 0x00, 0x19, 0x00, 0x1e, 0x00, 0x23, 0x00, 0x28, - 0x00, 0x2d, 0x00, 0x32, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x40, 0x00, 0x45, - 0x00, 0x4a, 0x00, 0x4f, 0x00, 0x54, 0x00, 0x59, 0x00, 0x5e, 0x00, 0x63, - 0x00, 0x68, 0x00, 0x6d, 0x00, 0x72, 0x00, 0x77, 0x00, 0x7c, 0x00, 0x81, - 0x00, 0x86, 0x00, 0x8b, 0x00, 0x90, 0x00, 0x95, 0x00, 0x9a, 0x00, 0x9f, - 0x00, 0xa4, 0x00, 0xa9, 0x00, 0xae, 0x00, 0xb2, 0x00, 0xb7, 0x00, 0xbc, - 0x00, 0xc1, 0x00, 0xc6, 0x00, 0xcb, 0x00, 0xd0, 0x00, 0xd5, 0x00, 0xdb, - 0x00, 0xe0, 0x00, 0xe5, 0x00, 0xeb, 0x00, 0xf0, 0x00, 0xf6, 0x00, 0xfb, - 0x01, 0x01, 0x01, 0x07, 0x01, 0x0d, 0x01, 0x13, 0x01, 0x19, 0x01, 0x1f, - 0x01, 0x25, 0x01, 0x2b, 0x01, 0x32, 0x01, 0x38, 0x01, 0x3e, 0x01, 0x45, - 0x01, 0x4c, 0x01, 0x52, 0x01, 0x59, 0x01, 0x60, 0x01, 0x67, 0x01, 0x6e, - 0x01, 0x75, 0x01, 0x7c, 0x01, 0x83, 0x01, 0x8b, 0x01, 0x92, 0x01, 0x9a, - 0x01, 0xa1, 0x01, 0xa9, 0x01, 0xb1, 0x01, 0xb9, 0x01, 0xc1, 0x01, 0xc9, - 0x01, 0xd1, 0x01, 0xd9, 0x01, 0xe1, 0x01, 0xe9, 0x01, 0xf2, 0x01, 0xfa, - 0x02, 0x03, 0x02, 0x0c, 0x02, 0x14, 0x02, 0x1d, 0x02, 0x26, 0x02, 0x2f, - 0x02, 0x38, 0x02, 0x41, 0x02, 0x4b, 0x02, 0x54, 0x02, 0x5d, 0x02, 0x67, - 0x02, 0x71, 0x02, 0x7a, 0x02, 0x84, 0x02, 0x8e, 0x02, 0x98, 0x02, 0xa2, - 0x02, 0xac, 0x02, 0xb6, 0x02, 0xc1, 0x02, 0xcb, 0x02, 0xd5, 0x02, 0xe0, - 0x02, 0xeb, 0x02, 0xf5, 0x03, 0x00, 0x03, 0x0b, 0x03, 0x16, 0x03, 0x21, - 0x03, 0x2d, 0x03, 0x38, 0x03, 0x43, 0x03, 0x4f, 0x03, 0x5a, 0x03, 0x66, - 0x03, 0x72, 0x03, 0x7e, 0x03, 0x8a, 0x03, 0x96, 0x03, 0xa2, 0x03, 0xae, - 0x03, 0xba, 0x03, 0xc7, 0x03, 0xd3, 0x03, 0xe0, 0x03, 0xec, 0x03, 0xf9, - 0x04, 0x06, 0x04, 0x13, 0x04, 0x20, 0x04, 0x2d, 0x04, 0x3b, 0x04, 0x48, - 0x04, 0x55, 0x04, 0x63, 0x04, 0x71, 0x04, 0x7e, 0x04, 0x8c, 0x04, 0x9a, - 0x04, 0xa8, 0x04, 0xb6, 0x04, 0xc4, 0x04, 0xd3, 0x04, 0xe1, 0x04, 0xf0, - 0x04, 0xfe, 0x05, 0x0d, 0x05, 0x1c, 0x05, 0x2b, 0x05, 0x3a, 0x05, 0x49, - 0x05, 0x58, 0x05, 0x67, 0x05, 0x77, 0x05, 0x86, 0x05, 0x96, 0x05, 0xa6, - 0x05, 0xb5, 0x05, 0xc5, 0x05, 0xd5, 0x05, 0xe5, 0x05, 0xf6, 0x06, 0x06, - 0x06, 0x16, 0x06, 0x27, 0x06, 0x37, 0x06, 0x48, 0x06, 0x59, 0x06, 0x6a, - 0x06, 0x7b, 0x06, 0x8c, 0x06, 0x9d, 0x06, 0xaf, 0x06, 0xc0, 0x06, 0xd1, - 0x06, 0xe3, 0x06, 0xf5, 0x07, 0x07, 0x07, 0x19, 0x07, 0x2b, 0x07, 0x3d, - 0x07, 0x4f, 0x07, 0x61, 0x07, 0x74, 0x07, 0x86, 0x07, 0x99, 0x07, 0xac, - 0x07, 0xbf, 0x07, 0xd2, 0x07, 0xe5, 0x07, 0xf8, 0x08, 0x0b, 0x08, 0x1f, - 0x08, 0x32, 0x08, 0x46, 0x08, 0x5a, 0x08, 0x6e, 0x08, 0x82, 0x08, 0x96, - 0x08, 0xaa, 0x08, 0xbe, 0x08, 0xd2, 0x08, 0xe7, 0x08, 0xfb, 0x09, 0x10, - 0x09, 0x25, 0x09, 0x3a, 0x09, 0x4f, 0x09, 0x64, 0x09, 0x79, 0x09, 0x8f, - 0x09, 0xa4, 0x09, 0xba, 0x09, 0xcf, 0x09, 0xe5, 0x09, 0xfb, 0x0a, 0x11, - 0x0a, 0x27, 0x0a, 0x3d, 0x0a, 0x54, 0x0a, 0x6a, 0x0a, 0x81, 0x0a, 0x98, - 0x0a, 0xae, 0x0a, 0xc5, 0x0a, 0xdc, 0x0a, 0xf3, 0x0b, 0x0b, 0x0b, 0x22, - 0x0b, 0x39, 0x0b, 0x51, 0x0b, 0x69, 0x0b, 0x80, 0x0b, 0x98, 0x0b, 0xb0, - 0x0b, 0xc8, 0x0b, 0xe1, 0x0b, 0xf9, 0x0c, 0x12, 0x0c, 0x2a, 0x0c, 0x43, - 0x0c, 0x5c, 0x0c, 0x75, 0x0c, 0x8e, 0x0c, 0xa7, 0x0c, 0xc0, 0x0c, 0xd9, - 0x0c, 0xf3, 0x0d, 0x0d, 0x0d, 0x26, 0x0d, 0x40, 0x0d, 0x5a, 0x0d, 0x74, - 0x0d, 0x8e, 0x0d, 0xa9, 0x0d, 0xc3, 0x0d, 0xde, 0x0d, 0xf8, 0x0e, 0x13, - 0x0e, 0x2e, 0x0e, 0x49, 0x0e, 0x64, 0x0e, 0x7f, 0x0e, 0x9b, 0x0e, 0xb6, - 0x0e, 0xd2, 0x0e, 0xee, 0x0f, 0x09, 0x0f, 0x25, 0x0f, 0x41, 0x0f, 0x5e, - 0x0f, 0x7a, 0x0f, 0x96, 0x0f, 0xb3, 0x0f, 0xcf, 0x0f, 0xec, 0x10, 0x09, - 0x10, 0x26, 0x10, 0x43, 0x10, 0x61, 0x10, 0x7e, 0x10, 0x9b, 0x10, 0xb9, - 0x10, 0xd7, 0x10, 0xf5, 0x11, 0x13, 0x11, 0x31, 0x11, 0x4f, 0x11, 0x6d, - 0x11, 0x8c, 0x11, 0xaa, 0x11, 0xc9, 0x11, 0xe8, 0x12, 0x07, 0x12, 0x26, - 0x12, 0x45, 0x12, 0x64, 0x12, 0x84, 0x12, 0xa3, 0x12, 0xc3, 0x12, 0xe3, - 0x13, 0x03, 0x13, 0x23, 0x13, 0x43, 0x13, 0x63, 0x13, 0x83, 0x13, 0xa4, - 0x13, 0xc5, 0x13, 0xe5, 0x14, 0x06, 0x14, 0x27, 0x14, 0x49, 0x14, 0x6a, - 0x14, 0x8b, 0x14, 0xad, 0x14, 0xce, 0x14, 0xf0, 0x15, 0x12, 0x15, 0x34, - 0x15, 0x56, 0x15, 0x78, 0x15, 0x9b, 0x15, 0xbd, 0x15, 0xe0, 0x16, 0x03, - 0x16, 0x26, 0x16, 0x49, 0x16, 0x6c, 0x16, 0x8f, 0x16, 0xb2, 0x16, 0xd6, - 0x16, 0xfa, 0x17, 0x1d, 0x17, 0x41, 0x17, 0x65, 0x17, 0x89, 0x17, 0xae, - 0x17, 0xd2, 0x17, 0xf7, 0x18, 0x1b, 0x18, 0x40, 0x18, 0x65, 0x18, 0x8a, - 0x18, 0xaf, 0x18, 0xd5, 0x18, 0xfa, 0x19, 0x20, 0x19, 0x45, 0x19, 0x6b, - 0x19, 0x91, 0x19, 0xb7, 0x19, 0xdd, 0x1a, 0x04, 0x1a, 0x2a, 0x1a, 0x51, - 0x1a, 0x77, 0x1a, 0x9e, 0x1a, 0xc5, 0x1a, 0xec, 0x1b, 0x14, 0x1b, 0x3b, - 0x1b, 0x63, 0x1b, 0x8a, 0x1b, 0xb2, 0x1b, 0xda, 0x1c, 0x02, 0x1c, 0x2a, - 0x1c, 0x52, 0x1c, 0x7b, 0x1c, 0xa3, 0x1c, 0xcc, 0x1c, 0xf5, 0x1d, 0x1e, - 0x1d, 0x47, 0x1d, 0x70, 0x1d, 0x99, 0x1d, 0xc3, 0x1d, 0xec, 0x1e, 0x16, - 0x1e, 0x40, 0x1e, 0x6a, 0x1e, 0x94, 0x1e, 0xbe, 0x1e, 0xe9, 0x1f, 0x13, - 0x1f, 0x3e, 0x1f, 0x69, 0x1f, 0x94, 0x1f, 0xbf, 0x1f, 0xea, 0x20, 0x15, - 0x20, 0x41, 0x20, 0x6c, 0x20, 0x98, 0x20, 0xc4, 0x20, 0xf0, 0x21, 0x1c, - 0x21, 0x48, 0x21, 0x75, 0x21, 0xa1, 0x21, 0xce, 0x21, 0xfb, 0x22, 0x27, - 0x22, 0x55, 0x22, 0x82, 0x22, 0xaf, 0x22, 0xdd, 0x23, 0x0a, 0x23, 0x38, - 0x23, 0x66, 0x23, 0x94, 0x23, 0xc2, 0x23, 0xf0, 0x24, 0x1f, 0x24, 0x4d, - 0x24, 0x7c, 0x24, 0xab, 0x24, 0xda, 0x25, 0x09, 0x25, 0x38, 0x25, 0x68, - 0x25, 0x97, 0x25, 0xc7, 0x25, 0xf7, 0x26, 0x27, 0x26, 0x57, 0x26, 0x87, - 0x26, 0xb7, 0x26, 0xe8, 0x27, 0x18, 0x27, 0x49, 0x27, 0x7a, 0x27, 0xab, - 0x27, 0xdc, 0x28, 0x0d, 0x28, 0x3f, 0x28, 0x71, 0x28, 0xa2, 0x28, 0xd4, - 0x29, 0x06, 0x29, 0x38, 0x29, 0x6b, 0x29, 0x9d, 0x29, 0xd0, 0x2a, 0x02, - 0x2a, 0x35, 0x2a, 0x68, 0x2a, 0x9b, 0x2a, 0xcf, 0x2b, 0x02, 0x2b, 0x36, - 0x2b, 0x69, 0x2b, 0x9d, 0x2b, 0xd1, 0x2c, 0x05, 0x2c, 0x39, 0x2c, 0x6e, - 0x2c, 0xa2, 0x2c, 0xd7, 0x2d, 0x0c, 0x2d, 0x41, 0x2d, 0x76, 0x2d, 0xab, - 0x2d, 0xe1, 0x2e, 0x16, 0x2e, 0x4c, 0x2e, 0x82, 0x2e, 0xb7, 0x2e, 0xee, - 0x2f, 0x24, 0x2f, 0x5a, 0x2f, 0x91, 0x2f, 0xc7, 0x2f, 0xfe, 0x30, 0x35, - 0x30, 0x6c, 0x30, 0xa4, 0x30, 0xdb, 0x31, 0x12, 0x31, 0x4a, 0x31, 0x82, - 0x31, 0xba, 0x31, 0xf2, 0x32, 0x2a, 0x32, 0x63, 0x32, 0x9b, 0x32, 0xd4, - 0x33, 0x0d, 0x33, 0x46, 0x33, 0x7f, 0x33, 0xb8, 0x33, 0xf1, 0x34, 0x2b, - 0x34, 0x65, 0x34, 0x9e, 0x34, 0xd8, 0x35, 0x13, 0x35, 0x4d, 0x35, 0x87, - 0x35, 0xc2, 0x35, 0xfd, 0x36, 0x37, 0x36, 0x72, 0x36, 0xae, 0x36, 0xe9, - 0x37, 0x24, 0x37, 0x60, 0x37, 0x9c, 0x37, 0xd7, 0x38, 0x14, 0x38, 0x50, - 0x38, 0x8c, 0x38, 0xc8, 0x39, 0x05, 0x39, 0x42, 0x39, 0x7f, 0x39, 0xbc, - 0x39, 0xf9, 0x3a, 0x36, 0x3a, 0x74, 0x3a, 0xb2, 0x3a, 0xef, 0x3b, 0x2d, - 0x3b, 0x6b, 0x3b, 0xaa, 0x3b, 0xe8, 0x3c, 0x27, 0x3c, 0x65, 0x3c, 0xa4, - 0x3c, 0xe3, 0x3d, 0x22, 0x3d, 0x61, 0x3d, 0xa1, 0x3d, 0xe0, 0x3e, 0x20, - 0x3e, 0x60, 0x3e, 0xa0, 0x3e, 0xe0, 0x3f, 0x21, 0x3f, 0x61, 0x3f, 0xa2, - 0x3f, 0xe2, 0x40, 0x23, 0x40, 0x64, 0x40, 0xa6, 0x40, 0xe7, 0x41, 0x29, - 0x41, 0x6a, 0x41, 0xac, 0x41, 0xee, 0x42, 0x30, 0x42, 0x72, 0x42, 0xb5, - 0x42, 0xf7, 0x43, 0x3a, 0x43, 0x7d, 0x43, 0xc0, 0x44, 0x03, 0x44, 0x47, - 0x44, 0x8a, 0x44, 0xce, 0x45, 0x12, 0x45, 0x55, 0x45, 0x9a, 0x45, 0xde, - 0x46, 0x22, 0x46, 0x67, 0x46, 0xab, 0x46, 0xf0, 0x47, 0x35, 0x47, 0x7b, - 0x47, 0xc0, 0x48, 0x05, 0x48, 0x4b, 0x48, 0x91, 0x48, 0xd7, 0x49, 0x1d, - 0x49, 0x63, 0x49, 0xa9, 0x49, 0xf0, 0x4a, 0x37, 0x4a, 0x7d, 0x4a, 0xc4, - 0x4b, 0x0c, 0x4b, 0x53, 0x4b, 0x9a, 0x4b, 0xe2, 0x4c, 0x2a, 0x4c, 0x72, - 0x4c, 0xba, 0x4d, 0x02, 0x4d, 0x4a, 0x4d, 0x93, 0x4d, 0xdc, 0x4e, 0x25, - 0x4e, 0x6e, 0x4e, 0xb7, 0x4f, 0x00, 0x4f, 0x49, 0x4f, 0x93, 0x4f, 0xdd, - 0x50, 0x27, 0x50, 0x71, 0x50, 0xbb, 0x51, 0x06, 0x51, 0x50, 0x51, 0x9b, - 0x51, 0xe6, 0x52, 0x31, 0x52, 0x7c, 0x52, 0xc7, 0x53, 0x13, 0x53, 0x5f, - 0x53, 0xaa, 0x53, 0xf6, 0x54, 0x42, 0x54, 0x8f, 0x54, 0xdb, 0x55, 0x28, - 0x55, 0x75, 0x55, 0xc2, 0x56, 0x0f, 0x56, 0x5c, 0x56, 0xa9, 0x56, 0xf7, - 0x57, 0x44, 0x57, 0x92, 0x57, 0xe0, 0x58, 0x2f, 0x58, 0x7d, 0x58, 0xcb, - 0x59, 0x1a, 0x59, 0x69, 0x59, 0xb8, 0x5a, 0x07, 0x5a, 0x56, 0x5a, 0xa6, - 0x5a, 0xf5, 0x5b, 0x45, 0x5b, 0x95, 0x5b, 0xe5, 0x5c, 0x35, 0x5c, 0x86, - 0x5c, 0xd6, 0x5d, 0x27, 0x5d, 0x78, 0x5d, 0xc9, 0x5e, 0x1a, 0x5e, 0x6c, - 0x5e, 0xbd, 0x5f, 0x0f, 0x5f, 0x61, 0x5f, 0xb3, 0x60, 0x05, 0x60, 0x57, - 0x60, 0xaa, 0x60, 0xfc, 0x61, 0x4f, 0x61, 0xa2, 0x61, 0xf5, 0x62, 0x49, - 0x62, 0x9c, 0x62, 0xf0, 0x63, 0x43, 0x63, 0x97, 0x63, 0xeb, 0x64, 0x40, - 0x64, 0x94, 0x64, 0xe9, 0x65, 0x3d, 0x65, 0x92, 0x65, 0xe7, 0x66, 0x3d, - 0x66, 0x92, 0x66, 0xe8, 0x67, 0x3d, 0x67, 0x93, 0x67, 0xe9, 0x68, 0x3f, - 0x68, 0x96, 0x68, 0xec, 0x69, 0x43, 0x69, 0x9a, 0x69, 0xf1, 0x6a, 0x48, - 0x6a, 0x9f, 0x6a, 0xf7, 0x6b, 0x4f, 0x6b, 0xa7, 0x6b, 0xff, 0x6c, 0x57, - 0x6c, 0xaf, 0x6d, 0x08, 0x6d, 0x60, 0x6d, 0xb9, 0x6e, 0x12, 0x6e, 0x6b, - 0x6e, 0xc4, 0x6f, 0x1e, 0x6f, 0x78, 0x6f, 0xd1, 0x70, 0x2b, 0x70, 0x86, - 0x70, 0xe0, 0x71, 0x3a, 0x71, 0x95, 0x71, 0xf0, 0x72, 0x4b, 0x72, 0xa6, - 0x73, 0x01, 0x73, 0x5d, 0x73, 0xb8, 0x74, 0x14, 0x74, 0x70, 0x74, 0xcc, - 0x75, 0x28, 0x75, 0x85, 0x75, 0xe1, 0x76, 0x3e, 0x76, 0x9b, 0x76, 0xf8, - 0x77, 0x56, 0x77, 0xb3, 0x78, 0x11, 0x78, 0x6e, 0x78, 0xcc, 0x79, 0x2a, - 0x79, 0x89, 0x79, 0xe7, 0x7a, 0x46, 0x7a, 0xa5, 0x7b, 0x04, 0x7b, 0x63, - 0x7b, 0xc2, 0x7c, 0x21, 0x7c, 0x81, 0x7c, 0xe1, 0x7d, 0x41, 0x7d, 0xa1, - 0x7e, 0x01, 0x7e, 0x62, 0x7e, 0xc2, 0x7f, 0x23, 0x7f, 0x84, 0x7f, 0xe5, - 0x80, 0x47, 0x80, 0xa8, 0x81, 0x0a, 0x81, 0x6b, 0x81, 0xcd, 0x82, 0x30, - 0x82, 0x92, 0x82, 0xf4, 0x83, 0x57, 0x83, 0xba, 0x84, 0x1d, 0x84, 0x80, - 0x84, 0xe3, 0x85, 0x47, 0x85, 0xab, 0x86, 0x0e, 0x86, 0x72, 0x86, 0xd7, - 0x87, 0x3b, 0x87, 0x9f, 0x88, 0x04, 0x88, 0x69, 0x88, 0xce, 0x89, 0x33, - 0x89, 0x99, 0x89, 0xfe, 0x8a, 0x64, 0x8a, 0xca, 0x8b, 0x30, 0x8b, 0x96, - 0x8b, 0xfc, 0x8c, 0x63, 0x8c, 0xca, 0x8d, 0x31, 0x8d, 0x98, 0x8d, 0xff, - 0x8e, 0x66, 0x8e, 0xce, 0x8f, 0x36, 0x8f, 0x9e, 0x90, 0x06, 0x90, 0x6e, - 0x90, 0xd6, 0x91, 0x3f, 0x91, 0xa8, 0x92, 0x11, 0x92, 0x7a, 0x92, 0xe3, - 0x93, 0x4d, 0x93, 0xb6, 0x94, 0x20, 0x94, 0x8a, 0x94, 0xf4, 0x95, 0x5f, - 0x95, 0xc9, 0x96, 0x34, 0x96, 0x9f, 0x97, 0x0a, 0x97, 0x75, 0x97, 0xe0, - 0x98, 0x4c, 0x98, 0xb8, 0x99, 0x24, 0x99, 0x90, 0x99, 0xfc, 0x9a, 0x68, - 0x9a, 0xd5, 0x9b, 0x42, 0x9b, 0xaf, 0x9c, 0x1c, 0x9c, 0x89, 0x9c, 0xf7, - 0x9d, 0x64, 0x9d, 0xd2, 0x9e, 0x40, 0x9e, 0xae, 0x9f, 0x1d, 0x9f, 0x8b, - 0x9f, 0xfa, 0xa0, 0x69, 0xa0, 0xd8, 0xa1, 0x47, 0xa1, 0xb6, 0xa2, 0x26, - 0xa2, 0x96, 0xa3, 0x06, 0xa3, 0x76, 0xa3, 0xe6, 0xa4, 0x56, 0xa4, 0xc7, - 0xa5, 0x38, 0xa5, 0xa9, 0xa6, 0x1a, 0xa6, 0x8b, 0xa6, 0xfd, 0xa7, 0x6e, - 0xa7, 0xe0, 0xa8, 0x52, 0xa8, 0xc4, 0xa9, 0x37, 0xa9, 0xa9, 0xaa, 0x1c, - 0xaa, 0x8f, 0xab, 0x02, 0xab, 0x75, 0xab, 0xe9, 0xac, 0x5c, 0xac, 0xd0, - 0xad, 0x44, 0xad, 0xb8, 0xae, 0x2d, 0xae, 0xa1, 0xaf, 0x16, 0xaf, 0x8b, - 0xb0, 0x00, 0xb0, 0x75, 0xb0, 0xea, 0xb1, 0x60, 0xb1, 0xd6, 0xb2, 0x4b, - 0xb2, 0xc2, 0xb3, 0x38, 0xb3, 0xae, 0xb4, 0x25, 0xb4, 0x9c, 0xb5, 0x13, - 0xb5, 0x8a, 0xb6, 0x01, 0xb6, 0x79, 0xb6, 0xf0, 0xb7, 0x68, 0xb7, 0xe0, - 0xb8, 0x59, 0xb8, 0xd1, 0xb9, 0x4a, 0xb9, 0xc2, 0xba, 0x3b, 0xba, 0xb5, - 0xbb, 0x2e, 0xbb, 0xa7, 0xbc, 0x21, 0xbc, 0x9b, 0xbd, 0x15, 0xbd, 0x8f, - 0xbe, 0x0a, 0xbe, 0x84, 0xbe, 0xff, 0xbf, 0x7a, 0xbf, 0xf5, 0xc0, 0x70, - 0xc0, 0xec, 0xc1, 0x67, 0xc1, 0xe3, 0xc2, 0x5f, 0xc2, 0xdb, 0xc3, 0x58, - 0xc3, 0xd4, 0xc4, 0x51, 0xc4, 0xce, 0xc5, 0x4b, 0xc5, 0xc8, 0xc6, 0x46, - 0xc6, 0xc3, 0xc7, 0x41, 0xc7, 0xbf, 0xc8, 0x3d, 0xc8, 0xbc, 0xc9, 0x3a, - 0xc9, 0xb9, 0xca, 0x38, 0xca, 0xb7, 0xcb, 0x36, 0xcb, 0xb6, 0xcc, 0x35, - 0xcc, 0xb5, 0xcd, 0x35, 0xcd, 0xb5, 0xce, 0x36, 0xce, 0xb6, 0xcf, 0x37, - 0xcf, 0xb8, 0xd0, 0x39, 0xd0, 0xba, 0xd1, 0x3c, 0xd1, 0xbe, 0xd2, 0x3f, - 0xd2, 0xc1, 0xd3, 0x44, 0xd3, 0xc6, 0xd4, 0x49, 0xd4, 0xcb, 0xd5, 0x4e, - 0xd5, 0xd1, 0xd6, 0x55, 0xd6, 0xd8, 0xd7, 0x5c, 0xd7, 0xe0, 0xd8, 0x64, - 0xd8, 0xe8, 0xd9, 0x6c, 0xd9, 0xf1, 0xda, 0x76, 0xda, 0xfb, 0xdb, 0x80, - 0xdc, 0x05, 0xdc, 0x8a, 0xdd, 0x10, 0xdd, 0x96, 0xde, 0x1c, 0xde, 0xa2, - 0xdf, 0x29, 0xdf, 0xaf, 0xe0, 0x36, 0xe0, 0xbd, 0xe1, 0x44, 0xe1, 0xcc, - 0xe2, 0x53, 0xe2, 0xdb, 0xe3, 0x63, 0xe3, 0xeb, 0xe4, 0x73, 0xe4, 0xfc, - 0xe5, 0x84, 0xe6, 0x0d, 0xe6, 0x96, 0xe7, 0x1f, 0xe7, 0xa9, 0xe8, 0x32, - 0xe8, 0xbc, 0xe9, 0x46, 0xe9, 0xd0, 0xea, 0x5b, 0xea, 0xe5, 0xeb, 0x70, - 0xeb, 0xfb, 0xec, 0x86, 0xed, 0x11, 0xed, 0x9c, 0xee, 0x28, 0xee, 0xb4, - 0xef, 0x40, 0xef, 0xcc, 0xf0, 0x58, 0xf0, 0xe5, 0xf1, 0x72, 0xf1, 0xff, - 0xf2, 0x8c, 0xf3, 0x19, 0xf3, 0xa7, 0xf4, 0x34, 0xf4, 0xc2, 0xf5, 0x50, - 0xf5, 0xde, 0xf6, 0x6d, 0xf6, 0xfb, 0xf7, 0x8a, 0xf8, 0x19, 0xf8, 0xa8, - 0xf9, 0x38, 0xf9, 0xc7, 0xfa, 0x57, 0xfa, 0xe7, 0xfb, 0x77, 0xfc, 0x07, - 0xfc, 0x98, 0xfd, 0x29, 0xfd, 0xba, 0xfe, 0x4b, 0xfe, 0xdc, 0xff, 0x6d, - 0xff, 0xff, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x02, 0x02, 0x03, 0x04, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x02, 0x03, 0x05, 0x05, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0xff, - 0xdb, 0x00, 0x43, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, - 0x01, 0x02, 0x04, 0x03, 0x02, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xff, 0xc0, 0x00, 0x11, - 0x08, 0x00, 0x2e, 0x00, 0x2e, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, - 0x03, 0x11, 0x01, 0xff, 0xc4, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x04, 0x03, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x05, 0x07, 0x08, 0x0a, 0x01, 0x02, 0x06, 0x03, 0xff, 0xc4, 0x00, - 0x31, 0x10, 0x00, 0x00, 0x06, 0x02, 0x01, 0x03, 0x03, 0x03, 0x03, 0x02, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x11, 0x00, 0x09, 0x12, 0x13, 0x14, 0x21, 0x22, 0x31, 0x41, - 0x15, 0x23, 0x32, 0x16, 0x19, 0x35, 0x42, 0x52, 0x61, 0x74, 0x91, 0xb3, - 0xff, 0xc4, 0x00, 0x1e, 0x01, 0x00, 0x02, 0x01, 0x04, 0x03, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x05, - 0x01, 0x04, 0x06, 0x09, 0x02, 0x03, 0x0a, 0x00, 0xff, 0xc4, 0x00, 0x39, - 0x11, 0x00, 0x02, 0x01, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x07, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x11, 0x06, - 0x12, 0x21, 0x00, 0x07, 0x31, 0x08, 0x13, 0x22, 0x32, 0x41, 0x51, 0x14, - 0x23, 0x61, 0x15, 0x42, 0x62, 0x81, 0xb1, 0x09, 0x17, 0x18, 0x24, 0x33, - 0x34, 0x71, 0x52, 0x72, 0x91, 0xa1, 0xd1, 0xff, 0xda, 0x00, 0x0c, 0x03, - 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, 0x1c, 0x6e, 0xdd, - 0xae, 0x9a, 0xce, 0x4c, 0x77, 0x6b, 0x11, 0x34, 0x94, 0x39, 0x8e, 0xa2, - 0x8e, 0x4c, 0x05, 0x21, 0x4a, 0x22, 0x22, 0x63, 0x18, 0x47, 0xec, 0x00, - 0x1c, 0x88, 0x88, 0xfe, 0x3e, 0x7a, 0xd4, 0xdb, 0x33, 0xef, 0x20, 0x13, - 0xe7, 0xaf, 0x5e, 0x50, 0xc3, 0x1b, 0xa2, 0x05, 0x40, 0x49, 0x03, 0x80, - 0x07, 0x93, 0xf6, 0x03, 0xff, 0x00, 0x40, 0x74, 0xb3, 0x53, 0xae, 0x5e, - 0x6f, 0xd6, 0xa8, 0x5a, 0x1d, 0x0e, 0xb1, 0x71, 0xba, 0xde, 0xec, 0x6e, - 0x45, 0xa4, 0x05, 0x26, 0xb1, 0x0c, 0xee, 0x5e, 0xd7, 0x2c, 0xa1, 0x4b, - 0xe6, 0x72, 0xa4, 0xc4, 0x85, 0xf5, 0x40, 0x0a, 0x41, 0x03, 0x98, 0xe7, - 0x02, 0x90, 0x85, 0x10, 0x31, 0x8c, 0x50, 0x10, 0x11, 0xbd, 0xa0, 0xb6, - 0xdd, 0x2e, 0x95, 0x8b, 0x41, 0x6e, 0x85, 0xe4, 0x99, 0x8e, 0x02, 0xa8, - 0x2c, 0xc7, 0xf9, 0x0c, 0x9f, 0xb9, 0xe3, 0xe8, 0x09, 0xf0, 0x0f, 0x51, - 0xf7, 0x9b, 0xae, 0x9e, 0xd3, 0x76, 0x79, 0xf5, 0x1e, 0xa2, 0xab, 0x82, - 0x96, 0xdd, 0x00, 0xdd, 0x25, 0x44, 0xd2, 0x22, 0x42, 0x80, 0x9c, 0x02, - 0x64, 0x27, 0x6e, 0x49, 0xe0, 0x00, 0x4b, 0x31, 0xc8, 0x00, 0x90, 0x47, - 0x4e, 0x93, 0x0c, 0x13, 0x90, 0x22, 0x32, 0x9d, 0x73, 0x16, 0x67, 0xb7, - 0x32, 0x7a, 0x87, 0xfd, 0x40, 0xba, 0xed, 0x57, 0xc8, 0x3b, 0x23, 0x4e, - 0xb0, 0x54, 0x68, 0xd0, 0x0a, 0x22, 0x82, 0x8a, 0xa6, 0x47, 0x0b, 0x15, - 0xb8, 0x8a, 0x82, 0xb9, 0xc8, 0x54, 0x08, 0x64, 0x44, 0x48, 0x53, 0x28, - 0x06, 0x50, 0xe4, 0x21, 0x4c, 0x60, 0xc8, 0x68, 0xf4, 0x7d, 0xdc, 0x5e, - 0x21, 0xb5, 0x5f, 0xc1, 0xa2, 0x57, 0x24, 0x6f, 0x9d, 0x64, 0x40, 0x30, - 0x09, 0xe7, 0xe0, 0x2d, 0x83, 0x8c, 0x67, 0x6e, 0x39, 0x04, 0x90, 0x32, - 0x46, 0x1d, 0x55, 0xdc, 0x7d, 0x33, 0x59, 0xa3, 0xaa, 0xb5, 0x87, 0x6e, - 0x55, 0x35, 0x27, 0xb2, 0x14, 0x8a, 0x6b, 0x54, 0xf4, 0xd3, 0xd4, 0x48, - 0x19, 0x82, 0x92, 0xa0, 0xc9, 0x85, 0xd8, 0x0e, 0xf6, 0x0c, 0x03, 0x10, - 0x36, 0xa2, 0xb3, 0x90, 0x3a, 0x20, 0x39, 0x0f, 0xb2, 0xae, 0xf0, 0x56, - 0x29, 0x6d, 0x72, 0x36, 0x28, 0x96, 0xc3, 0xbb, 0x51, 0x48, 0x7b, 0x1a, - 0x33, 0x0c, 0xa5, 0x30, 0x3e, 0x41, 0x33, 0x99, 0x49, 0x66, 0xc0, 0x26, - 0x0f, 0x52, 0x39, 0xab, 0xd2, 0x24, 0x83, 0xde, 0x7c, 0x47, 0x80, 0x6a, - 0xe9, 0x43, 0x1b, 0x81, 0x02, 0x94, 0xc3, 0xf1, 0xd1, 0x06, 0xe5, 0xd8, - 0x5d, 0x69, 0x05, 0x17, 0xed, 0x2b, 0x3c, 0xb0, 0xd6, 0x40, 0x40, 0x2a, - 0x61, 0x93, 0x71, 0x23, 0x3c, 0x91, 0xb8, 0x20, 0x60, 0x07, 0x20, 0x26, - 0xe2, 0x7c, 0x01, 0x9e, 0x96, 0xbd, 0x33, 0xeb, 0xe3, 0xd3, 0xed, 0xda, - 0xfc, 0xfa, 0x5b, 0x59, 0x43, 0x5d, 0xa7, 0xee, 0x0a, 0xfb, 0x19, 0x2e, - 0x34, 0xc0, 0x22, 0x3f, 0x1c, 0x4a, 0xf0, 0xb3, 0xbc, 0x3e, 0x79, 0x32, - 0x42, 0xa0, 0x79, 0x24, 0x0e, 0x7a, 0x13, 0x32, 0x4d, 0xe7, 0x61, 0x25, - 0xa5, 0xab, 0xf3, 0xec, 0x67, 0x6b, 0xd6, 0x2a, 0xfc, 0x82, 0x91, 0x36, - 0x0a, 0xe5, 0x81, 0x8b, 0x98, 0x3b, 0x04, 0x03, 0xb4, 0x87, 0x85, 0x1b, - 0x3d, 0x64, 0xb9, 0x48, 0xb2, 0x0a, 0x94, 0x7e, 0xe4, 0x50, 0xa0, 0x3c, - 0x70, 0x21, 0xc8, 0x08, 0x08, 0x85, 0xaa, 0xa9, 0xeb, 0x68, 0x67, 0x6a, - 0x5a, 0xd4, 0x68, 0xe5, 0x5f, 0x2a, 0xc0, 0x86, 0x07, 0xec, 0x41, 0xe4, - 0x11, 0xe0, 0x8f, 0x20, 0xe4, 0x1e, 0x41, 0xe9, 0xd0, 0xa4, 0x96, 0xdd, - 0x71, 0xa2, 0x86, 0xe7, 0x6d, 0x92, 0x39, 0xa9, 0x66, 0x50, 0xf1, 0x4b, - 0x13, 0x24, 0x91, 0x48, 0x87, 0xc3, 0xc7, 0x22, 0x12, 0x8e, 0xa7, 0xee, - 0xa4, 0xfd, 0x8f, 0x3c, 0x74, 0xa3, 0x5e, 0x5d, 0xc2, 0x8f, 0xd4, 0x29, - 0x9c, 0xba, 0x00, 0xf6, 0x67, 0x37, 0xd0, 0xe9, 0x44, 0x87, 0xf9, 0xa5, - 0xf9, 0x01, 0x01, 0xfc, 0xfd, 0xba, 0xa5, 0x33, 0x31, 0x97, 0x19, 0x3e, - 0x0f, 0xd4, 0xfd, 0xc7, 0x56, 0xf7, 0x24, 0x8d, 0x29, 0xc1, 0x08, 0x3e, - 0x61, 0xe4, 0x03, 0xf4, 0x3f, 0x71, 0xd4, 0xaf, 0xd4, 0x1c, 0x73, 0x8e, - 0x9d, 0xcb, 0xe6, 0x7d, 0x9c, 0xcf, 0x30, 0x49, 0xd9, 0xb5, 0xeb, 0x4e, - 0x2a, 0x6d, 0xf2, 0x55, 0xb6, 0x9a, 0xe8, 0xe5, 0x49, 0x86, 0x5c, 0xb7, - 0x49, 0xbe, 0x33, 0x0a, 0x15, 0x29, 0x73, 0x9b, 0x90, 0xf6, 0xef, 0xa4, - 0x13, 0x33, 0x87, 0x60, 0x24, 0x50, 0xbe, 0xdd, 0x88, 0x11, 0x42, 0x0a, - 0x6b, 0x1f, 0xa2, 0x1f, 0x6f, 0x6c, 0xd4, 0x13, 0x4f, 0x5b, 0xaa, 0x6f, - 0x51, 0xfb, 0x94, 0x54, 0x2a, 0x1c, 0xc6, 0x79, 0x12, 0xca, 0xe7, 0x6c, - 0x31, 0x37, 0x04, 0x85, 0x77, 0xe5, 0x8e, 0xd6, 0x1b, 0x12, 0x40, 0x47, - 0x82, 0x02, 0xfd, 0xef, 0xd5, 0x3a, 0xa2, 0x0a, 0x1b, 0x0f, 0x69, 0x7b, - 0x73, 0x52, 0x60, 0xd4, 0xda, 0x9a, 0x67, 0xa4, 0x82, 0x71, 0x92, 0xd4, - 0x54, 0x50, 0xc7, 0xee, 0x5c, 0xab, 0xd4, 0x0c, 0x7e, 0x64, 0x30, 0x10, - 0x90, 0x61, 0x95, 0xbd, 0xd9, 0x37, 0x23, 0x07, 0x41, 0xd1, 0x7a, 0xed, - 0xc9, 0x96, 0xfb, 0x81, 0x63, 0x9b, 0x76, 0xc3, 0x6d, 0xe6, 0x44, 0xed, - 0xf1, 0x98, 0x76, 0x4a, 0xd5, 0xb5, 0x4f, 0x20, 0xe7, 0x8d, 0x93, 0x62, - 0x1c, 0x41, 0xe2, 0xb9, 0x88, 0x78, 0xd6, 0x08, 0x39, 0x21, 0x58, 0x42, - 0x46, 0xc9, 0x01, 0x5f, 0xab, 0x14, 0xa2, 0x4a, 0x47, 0x11, 0xba, 0x64, - 0x2a, 0x65, 0x14, 0xa2, 0x9b, 0x09, 0x85, 0x51, 0x02, 0x9c, 0x0e, 0x3d, - 0xb9, 0xba, 0xeb, 0xfa, 0x3a, 0xeb, 0x8e, 0xae, 0xb9, 0x58, 0xa4, 0xa9, - 0x7a, 0xd2, 0x84, 0x49, 0x91, 0x1b, 0xaa, 0xae, 0xee, 0x15, 0x4a, 0x92, - 0xca, 0xc0, 0xa6, 0x36, 0x9d, 0xb8, 0x45, 0xc1, 0x23, 0x18, 0x48, 0xbd, - 0x52, 0xe8, 0xaf, 0x4d, 0x5a, 0xa2, 0xc9, 0xa6, 0x7b, 0x23, 0xa5, 0xfb, - 0x99, 0x45, 0x63, 0xa3, 0xd3, 0xcb, 0x51, 0x1f, 0xe1, 0x1c, 0x54, 0x56, - 0x24, 0x92, 0xc8, 0xc8, 0x4c, 0x95, 0x13, 0x41, 0x98, 0x16, 0xa5, 0x58, - 0x4a, 0x65, 0x66, 0x2c, 0x77, 0xcd, 0x20, 0x50, 0x83, 0x2a, 0x4a, 0xdd, - 0x7f, 0xb9, 0xe6, 0xa0, 0x66, 0x09, 0x84, 0xb5, 0xef, 0x6d, 0xb1, 0x8d, - 0xe7, 0x59, 0x6e, 0x96, 0xd1, 0xfd, 0x38, 0x31, 0x5e, 0xe9, 0xe2, 0xe4, - 0xa0, 0x29, 0x76, 0xd5, 0x04, 0xe0, 0x90, 0x24, 0xd2, 0x59, 0x70, 0x5a, - 0x25, 0xc1, 0x4d, 0xea, 0x90, 0x08, 0x2b, 0x28, 0x97, 0x98, 0xa8, 0x00, - 0x50, 0x11, 0xf8, 0xe8, 0xb1, 0x07, 0x71, 0x74, 0x9d, 0xe6, 0x4f, 0xd8, - 0x3a, 0xa6, 0x99, 0xe9, 0x64, 0x7e, 0x3d, 0xaa, 0xc8, 0xb6, 0xa3, 0xfd, - 0x0e, 0x0b, 0x65, 0x4a, 0xf3, 0x80, 0x5c, 0x28, 0x39, 0xe3, 0x39, 0x19, - 0x4d, 0x2e, 0x5e, 0x92, 0x3b, 0xdf, 0xa1, 0xe8, 0x4f, 0x73, 0x3b, 0x2b, - 0x77, 0xa7, 0xbe, 0xd0, 0x53, 0x7c, 0x5f, 0x8c, 0xb0, 0xd6, 0x19, 0x67, - 0x84, 0x60, 0xb6, 0x5e, 0x14, 0xf6, 0xea, 0x50, 0x8d, 0xa7, 0x70, 0x45, - 0x7d, 0xa0, 0x65, 0x88, 0x1c, 0xf4, 0xdd, 0x64, 0x1d, 0x15, 0xcc, 0x3a, - 0x43, 0x2d, 0x35, 0xb0, 0xbd, 0xad, 0x64, 0x9c, 0x23, 0x09, 0xe6, 0x13, - 0xd9, 0x4b, 0x42, 0x6d, 0x13, 0x2b, 0xc9, 0x61, 0x9c, 0xb4, 0xd0, 0x82, - 0x2a, 0xbc, 0x5a, 0x9e, 0xa2, 0xa7, 0x39, 0xe1, 0x66, 0x4c, 0x4e, 0x45, - 0x1f, 0x44, 0x45, 0x25, 0x4d, 0xe0, 0x42, 0xf0, 0x42, 0xfb, 0x65, 0xec, - 0x6b, 0xf4, 0x6d, 0xd7, 0x48, 0x4a, 0xd7, 0xee, 0xdc, 0xb9, 0xf6, 0xf3, - 0xba, 0x5a, 0x36, 0x25, 0xa3, 0x94, 0x7d, 0x4c, 0x79, 0x24, 0xab, 0xe3, - 0xc0, 0x07, 0xec, 0x14, 0x80, 0x3d, 0xb7, 0xc9, 0xb4, 0xc7, 0xa8, 0x6d, - 0x0f, 0xea, 0x02, 0x8a, 0x9f, 0xb6, 0x1e, 0xaf, 0x61, 0x06, 0x7e, 0x63, - 0xa4, 0xd4, 0x70, 0xa2, 0xa5, 0x75, 0x13, 0x9c, 0x04, 0x5a, 0xd0, 0xa1, - 0x56, 0xae, 0x94, 0x1f, 0x9f, 0x70, 0xdc, 0xa3, 0x2c, 0x72, 0xe7, 0xde, - 0x8a, 0x3c, 0x6e, 0x06, 0x0a, 0xc0, 0xfd, 0xdf, 0xb5, 0x11, 0xde, 0xe4, - 0x6b, 0x14, 0x1a, 0x90, 0x7b, 0x49, 0x8a, 0xa2, 0x5d, 0xb1, 0x98, 0xac, - 0x3f, 0x62, 0x10, 0xf7, 0xf7, 0xcf, 0x21, 0x12, 0xf5, 0x26, 0xb1, 0xb5, - 0xc1, 0xa8, 0x07, 0x91, 0x9f, 0x22, 0x5f, 0x21, 0x8e, 0x5d, 0x42, 0x89, - 0x88, 0xa9, 0x9b, 0x89, 0x0e, 0x0d, 0xdc, 0x28, 0x06, 0xc5, 0x75, 0xc6, - 0x9c, 0xb0, 0xf7, 0x73, 0x48, 0x3e, 0xa8, 0xb1, 0x47, 0xb6, 0xe5, 0x00, - 0x39, 0x5c, 0x7e, 0x66, 0x54, 0x65, 0xa1, 0x70, 0x3e, 0x66, 0xc7, 0x31, - 0x93, 0xe7, 0x81, 0x95, 0x0d, 0x95, 0x28, 0x76, 0x3b, 0xb8, 0xbd, 0xc6, - 0xf4, 0x45, 0xde, 0xc4, 0xec, 0x5f, 0x76, 0xaa, 0x44, 0xda, 0x3e, 0xe2, - 0xe8, 0xd1, 0xcc, 0xad, 0xee, 0x53, 0x2a, 0x4e, 0x71, 0x05, 0xd6, 0x89, - 0xc9, 0xc0, 0x85, 0x8f, 0x15, 0x48, 0xa4, 0x06, 0x41, 0x20, 0x65, 0x33, - 0x44, 0x98, 0xa9, 0xed, 0x49, 0xc2, 0x4e, 0xdc, 0x91, 0xca, 0x22, 0x61, - 0x49, 0xc4, 0x68, 0xac, 0x9f, 0x99, 0x05, 0x33, 0xf0, 0x63, 0x22, 0x20, - 0x06, 0x28, 0xfc, 0x80, 0xfc, 0xfc, 0x80, 0xfc, 0x80, 0xf2, 0x1d, 0x25, - 0x74, 0xc0, 0xac, 0xe5, 0x4f, 0x90, 0x0f, 0xeb, 0xf5, 0x1d, 0x6e, 0x82, - 0xf3, 0x1b, 0xc3, 0x11, 0x89, 0xfe, 0x65, 0x7c, 0x1f, 0xe4, 0x1b, 0xff, - 0x00, 0x23, 0xf5, 0xe8, 0xe4, 0x76, 0xe3, 0xa4, 0xd1, 0x6d, 0x38, 0xb7, - 0x4d, 0xe8, 0x77, 0x68, 0xa8, 0x97, 0x95, 0x8c, 0xe3, 0xdd, 0x46, 0xcb, - 0x66, 0xbe, 0x92, 0x58, 0xa0, 0x78, 0xeb, 0x31, 0xb1, 0xbe, 0x33, 0x5d, - 0xdd, 0x52, 0x11, 0xf2, 0x46, 0xfd, 0xb5, 0xd0, 0x3c, 0x92, 0x89, 0xac, - 0x0d, 0x95, 0x03, 0x11, 0x55, 0x38, 0x28, 0x94, 0xc0, 0x3c, 0x0b, 0x27, - 0xda, 0xda, 0x0a, 0x2a, 0x9b, 0x1d, 0xa2, 0xdf, 0x70, 0x50, 0x62, 0x9e, - 0xe5, 0x23, 0xb1, 0x3e, 0x0f, 0xb1, 0x4e, 0x1a, 0x28, 0xdb, 0xe8, 0xca, - 0xcf, 0x23, 0x7c, 0x24, 0x1c, 0x96, 0xc1, 0xeb, 0x5e, 0x7e, 0xa9, 0xef, - 0xda, 0x86, 0xcf, 0xac, 0x75, 0xd6, 0xa2, 0xb0, 0x4c, 0xe9, 0x57, 0x6a, - 0xd1, 0xf4, 0x90, 0xd3, 0x6c, 0xf9, 0xa2, 0xfd, 0xa9, 0x76, 0x54, 0xad, - 0xa8, 0x8c, 0x8f, 0x89, 0x24, 0x14, 0xe0, 0xa9, 0x91, 0x08, 0x64, 0x5c, - 0x90, 0x41, 0x19, 0x16, 0x66, 0xda, 0xcc, 0xeb, 0xb4, 0x98, 0x59, 0xf5, - 0x2d, 0xe6, 0x05, 0xd3, 0x59, 0x5d, 0xab, 0xaa, 0x48, 0x36, 0x7a, 0xe3, - 0x21, 0x3d, 0xae, 0xe6, 0x18, 0x6c, 0x7d, 0x67, 0xa7, 0x9d, 0x13, 0x20, - 0x0c, 0xd1, 0x67, 0x16, 0xf5, 0x33, 0x1d, 0xf0, 0xae, 0x53, 0xb8, 0x38, - 0x99, 0x23, 0x00, 0x17, 0xdb, 0x81, 0x04, 0x39, 0x39, 0x47, 0xa6, 0x73, - 0x54, 0x5f, 0x35, 0x35, 0x9a, 0x48, 0x5a, 0xc5, 0x68, 0x35, 0xb1, 0x1c, - 0xfb, 0x84, 0x4c, 0xb1, 0x94, 0xc7, 0x8c, 0x29, 0x56, 0x67, 0xcf, 0xf0, - 0x83, 0xf6, 0xe3, 0xcf, 0x5a, 0x97, 0xec, 0xd7, 0x6e, 0xbb, 0x3f, 0xaf, - 0xa9, 0xae, 0x10, 0xf7, 0x1f, 0x5d, 0xa6, 0x9f, 0xad, 0x43, 0x18, 0xa6, - 0x59, 0x68, 0x67, 0xaa, 0x8a, 0x70, 0xc1, 0xb7, 0xb3, 0xcd, 0x0b, 0x05, - 0x87, 0x61, 0x0a, 0x30, 0xe3, 0x9d, 0xdb, 0x81, 0xc2, 0x9e, 0x98, 0x0c, - 0x73, 0xb4, 0x5a, 0x6d, 0xdc, 0x99, 0x9d, 0xbf, 0x55, 0xb3, 0x9e, 0x22, - 0x95, 0xab, 0xe5, 0x88, 0xa6, 0x2a, 0x39, 0xbb, 0xea, 0x9e, 0xcf, 0x52, - 0xbf, 0xa6, 0x72, 0x2c, 0x72, 0x69, 0x7d, 0x2a, 0x49, 0x42, 0x98, 0xc3, - 0xfb, 0xe5, 0x4c, 0x40, 0x4e, 0x47, 0xb1, 0x8b, 0x15, 0x74, 0x8a, 0x05, - 0x50, 0x41, 0x20, 0x12, 0x98, 0x61, 0x2d, 0xfa, 0x97, 0x49, 0xf7, 0x05, - 0x24, 0xd3, 0x97, 0x9a, 0x53, 0x1d, 0x48, 0xf9, 0xa9, 0xea, 0x13, 0x6c, - 0x83, 0xf8, 0x90, 0xf9, 0xc8, 0x1c, 0x82, 0xa5, 0x64, 0x51, 0x86, 0x21, - 0x7a, 0x25, 0x6a, 0x9e, 0xd0, 0xf7, 0xd3, 0xd2, 0xac, 0xf4, 0x5d, 0xe0, - 0xed, 0xed, 0xed, 0x2a, 0x2c, 0xb2, 0x30, 0x10, 0x5e, 0x2d, 0x33, 0xfb, - 0xb4, 0xac, 0x5b, 0x91, 0x14, 0xe0, 0x7c, 0x85, 0xbc, 0x34, 0x33, 0xa1, - 0x89, 0xce, 0x53, 0x2e, 0x43, 0x00, 0xc5, 0x61, 0xe9, 0x9c, 0x8b, 0xda, - 0xe7, 0x61, 0xb1, 0xce, 0xa7, 0xe5, 0x0b, 0xb4, 0xfe, 0x47, 0xd1, 0x6d, - 0x89, 0x9f, 0x3d, 0x53, 0x53, 0x32, 0xad, 0xd6, 0x40, 0xd2, 0x76, 0xcc, - 0x03, 0x6a, 0x30, 0x7a, 0x8d, 0xb1, 0xcc, 0xeb, 0xf3, 0x7c, 0xac, 0xc1, - 0xe1, 0x79, 0x2c, 0x62, 0xe7, 0xe0, 0x4a, 0x62, 0x81, 0x0a, 0x50, 0x21, - 0x17, 0x14, 0x61, 0x2d, 0x73, 0xd7, 0x76, 0xda, 0xfd, 0x4f, 0xa6, 0x2e, - 0x12, 0x34, 0xb6, 0x6a, 0xa3, 0xb2, 0x9a, 0x46, 0xe4, 0xc3, 0x27, 0xd2, - 0x17, 0x3f, 0xf4, 0x9e, 0x02, 0xf1, 0x8e, 0x41, 0x50, 0x14, 0x49, 0xb4, - 0x87, 0xae, 0x28, 0x34, 0xbf, 0xab, 0xee, 0xd8, 0xdd, 0x3b, 0xcb, 0xa4, - 0x68, 0x23, 0xa1, 0xee, 0x1d, 0x96, 0x31, 0x35, 0xe6, 0x8e, 0x9d, 0x76, - 0xc3, 0x72, 0xa3, 0x1c, 0x3d, 0xd2, 0x9e, 0x31, 0xf2, 0xcd, 0x11, 0xe6, - 0xad, 0x06, 0x72, 0x32, 0xcc, 0x77, 0xb4, 0x42, 0x45, 0x8d, 0x8b, 0x88, - 0x0e, 0xdf, 0xfb, 0xd3, 0x8b, 0xf7, 0x22, 0x98, 0x51, 0x86, 0xd7, 0xcd, - 0xc5, 0xb8, 0xc7, 0x6b, 0xde, 0xe4, 0xd5, 0x99, 0x94, 0x1b, 0x57, 0xa1, - 0xed, 0x0f, 0x45, 0x42, 0x53, 0x32, 0x08, 0xa2, 0x50, 0xf1, 0x4d, 0x61, - 0x5c, 0x55, 0x68, 0xf9, 0x7e, 0x00, 0xa2, 0x45, 0x14, 0x31, 0xbc, 0xd6, - 0x74, 0x63, 0xf5, 0xcb, 0x50, 0x42, 0x34, 0x26, 0xb5, 0xa6, 0xd5, 0x94, - 0x63, 0x6d, 0x05, 0x7b, 0x88, 0x2a, 0xd4, 0x70, 0xa2, 0x43, 0x93, 0x1c, - 0xde, 0x70, 0x3f, 0x79, 0x9d, 0x88, 0xe3, 0x0f, 0xe5, 0xe6, 0xcf, 0x56, - 0x3d, 0xae, 0xae, 0xff, 0x00, 0x12, 0x9e, 0x9e, 0x6e, 0xfd, 0x8d, 0xbf, - 0x7e, 0x6e, 0xa6, 0xd3, 0x30, 0x4b, 0x73, 0xb1, 0xcc, 0xdc, 0xca, 0xf4, - 0x91, 0xe0, 0xd7, 0x5b, 0x72, 0x79, 0x65, 0xd9, 0xb6, 0x4a, 0x74, 0xc9, - 0x3b, 0x82, 0xa8, 0xdb, 0x14, 0x01, 0x7a, 0xa9, 0xa6, 0xca, 0x53, 0x61, - 0x31, 0xd6, 0xe4, 0x6d, 0x65, 0x06, 0xb2, 0x44, 0x93, 0xad, 0xd4, 0xb3, - 0xcd, 0xbe, 0x32, 0x05, 0x24, 0x04, 0xa6, 0x41, 0x06, 0xa7, 0x9a, 0x3b, - 0xb4, 0x91, 0x20, 0x97, 0xe9, 0xf1, 0x48, 0x1c, 0xfa, 0x40, 0x01, 0xf6, - 0xf4, 0xf8, 0xf8, 0xe3, 0x8e, 0x93, 0x0d, 0x65, 0x43, 0x15, 0xbb, 0x5b, - 0xdc, 0xe8, 0xe9, 0xc8, 0xf6, 0xd2, 0x69, 0x42, 0x81, 0x8c, 0x05, 0x12, - 0x10, 0xa3, 0x8f, 0xb0, 0x00, 0x75, 0xba, 0x6e, 0xd4, 0x5f, 0x6e, 0x1a, - 0x9f, 0xb1, 0x9a, 0x37, 0x51, 0xdd, 0x89, 0x35, 0x55, 0x36, 0xda, 0x17, - 0x90, 0x9c, 0xe4, 0xb8, 0xa7, 0x08, 0xcc, 0x73, 0xce, 0x5b, 0x6e, 0xee, - 0x7c, 0xe7, 0x3f, 0x5e, 0x9f, 0x5c, 0x41, 0x2b, 0x3b, 0x7e, 0xd0, 0x5d, - 0x88, 0xa2, 0x52, 0x25, 0x5f, 0x43, 0x65, 0xcd, 0x33, 0xd8, 0xea, 0xfe, - 0xfa, 0x63, 0xf7, 0xd5, 0xb7, 0x0e, 0x1a, 0x5d, 0x9a, 0x57, 0x9d, 0x34, - 0x2d, 0x5e, 0xd9, 0x25, 0x16, 0xaa, 0x40, 0x22, 0x51, 0x85, 0x70, 0x84, - 0x64, 0xaa, 0xa7, 0x1f, 0xe0, 0x51, 0x20, 0x8f, 0x20, 0x22, 0x03, 0x97, - 0x69, 0x9a, 0x9a, 0xaa, 0xfe, 0xde, 0xd7, 0xdb, 0xed, 0x4e, 0x56, 0xb6, - 0x82, 0xa1, 0x2b, 0x53, 0x1f, 0x3b, 0x21, 0x1e, 0xd4, 0x9b, 0x79, 0xca, - 0xac, 0x67, 0xd9, 0x76, 0x6e, 0x36, 0xf2, 0xc0, 0xf1, 0xd0, 0xe7, 0x5c, - 0xd1, 0x5b, 0xb4, 0xdf, 0xa9, 0x2d, 0x31, 0xa8, 0xf5, 0x04, 0x2b, 0x2d, - 0x97, 0x53, 0xda, 0xaa, 0x74, 0xe5, 0x4a, 0xca, 0x15, 0xa9, 0xcd, 0x52, - 0x39, 0xac, 0xa3, 0x8a, 0x60, 0xde, 0x7f, 0x16, 0x8d, 0x2d, 0x32, 0x0f, - 0xde, 0x3b, 0x87, 0x07, 0x07, 0xa2, 0xbb, 0x82, 0x7b, 0xd2, 0xef, 0xfc, - 0x26, 0x15, 0x8c, 0xcd, 0x79, 0xa7, 0x48, 0x24, 0x33, 0x66, 0xbf, 0x56, - 0xcc, 0x2c, 0x6e, 0x1b, 0x29, 0x8e, 0x90, 0x75, 0x8f, 0x82, 0x4d, 0x04, - 0x16, 0x16, 0xae, 0x64, 0xc1, 0x8a, 0x89, 0x2c, 0xc5, 0x4f, 0x49, 0x5e, - 0x48, 0xab, 0x86, 0xfe, 0x83, 0x11, 0x51, 0x33, 0x97, 0xd4, 0x6f, 0xf3, - 0xe0, 0x63, 0xd3, 0x7d, 0xe6, 0xd7, 0x22, 0xc0, 0x97, 0xcb, 0xe5, 0x99, - 0xa6, 0xa3, 0x53, 0x86, 0x9d, 0x15, 0x93, 0x20, 0x70, 0x5f, 0xe5, 0x64, - 0x38, 0x3c, 0x36, 0xd0, 0xab, 0xbb, 0x2b, 0xf0, 0x9e, 0x93, 0x3e, 0xe3, - 0x7a, 0x09, 0xf4, 0xd5, 0x70, 0xd7, 0xd3, 0x68, 0x2d, 0x05, 0xdc, 0x05, - 0xb5, 0x6a, 0x59, 0xfe, 0x28, 0x2d, 0x55, 0x45, 0x2a, 0x76, 0x33, 0x2e, - 0xf4, 0x8b, 0xdc, 0x0d, 0x1c, 0xcb, 0xb9, 0x79, 0x44, 0x7f, 0x72, 0xa3, - 0x69, 0x0d, 0xb6, 0x4e, 0x37, 0x12, 0x8d, 0xbb, 0xc5, 0xf8, 0xdf, 0xb8, - 0x56, 0xa0, 0x52, 0xb7, 0x27, 0x58, 0xa6, 0xd4, 0x89, 0xce, 0xd8, 0xd2, - 0xa0, 0x7c, 0xf3, 0xa9, 0xb9, 0xa6, 0x29, 0xb7, 0xe9, 0x17, 0x58, 0x77, - 0xf1, 0x40, 0xab, 0xc7, 0x35, 0x99, 0x01, 0x00, 0x13, 0x19, 0x07, 0x4a, - 0x36, 0x77, 0x1c, 0xe9, 0x82, 0xc2, 0x74, 0x93, 0x73, 0xc9, 0x84, 0xa6, - 0x02, 0x18, 0xa7, 0x25, 0x6a, 0xba, 0x0b, 0x7e, 0xbb, 0xd2, 0x31, 0xea, - 0xed, 0x38, 0xe5, 0x6b, 0x21, 0x43, 0x35, 0x3c, 0xab, 0x8d, 0xe0, 0xa6, - 0x4b, 0x44, 0x7c, 0x8c, 0xe5, 0x59, 0x70, 0x49, 0x55, 0x90, 0x67, 0x90, - 0x18, 0x32, 0xa1, 0xd9, 0x4d, 0x5b, 0xaa, 0xbd, 0x33, 0x77, 0xba, 0xbf, - 0xb1, 0x3d, 0xdb, 0x80, 0x49, 0xa7, 0x6b, 0xa7, 0x16, 0xeb, 0xcd, 0x03, - 0x9d, 0xf4, 0xef, 0x1c, 0xd8, 0x44, 0xab, 0x8f, 0xc0, 0x0f, 0x1a, 0xba, - 0x4f, 0x14, 0xc9, 0xb5, 0xda, 0x1e, 0x01, 0x52, 0xca, 0x57, 0x39, 0x89, - 0xc4, 0x3f, 0x73, 0x5e, 0xd0, 0x72, 0x19, 0x19, 0x28, 0xf4, 0x62, 0x2d, - 0x19, 0x03, 0x01, 0x06, 0x65, 0xa9, 0x99, 0x98, 0x98, 0x8b, 0x53, 0x2f, - 0x15, 0x74, 0x95, 0x7e, 0x5f, 0xd3, 0xd7, 0x01, 0xf5, 0x13, 0xf4, 0xa5, - 0x22, 0xdd, 0x34, 0x05, 0x4a, 0x20, 0x71, 0x41, 0x63, 0x80, 0xff, 0x00, - 0x23, 0x07, 0x5c, 0x6f, 0x2d, 0x17, 0x70, 0xfb, 0x4e, 0xf7, 0x17, 0x41, - 0xef, 0x34, 0x26, 0x50, 0x17, 0xf7, 0x67, 0x87, 0x3b, 0x82, 0x13, 0xc8, - 0x05, 0xd1, 0xa3, 0xcf, 0x9d, 0x8c, 0x73, 0xe4, 0xf5, 0xf6, 0x87, 0x8a, - 0xb7, 0xd2, 0x77, 0xad, 0xc8, 0xf4, 0xb3, 0x4a, 0x64, 0xa3, 0xa4, 0xb9, - 0x7e, 0x06, 0x6d, 0xc0, 0x11, 0x3d, 0xbe, 0xb0, 0x88, 0xff, 0x00, 0x35, - 0x48, 0xda, 0xc5, 0xa9, 0xa6, 0x49, 0x4a, 0x91, 0xb4, 0x48, 0xaa, 0x47, - 0x80, 0x7a, 0x48, 0xcc, 0x76, 0x98, 0x8d, 0xdc, 0xec, 0x8f, 0x64, 0xc9, - 0x37, 0x99, 0x18, 0xa8, 0x87, 0xb7, 0xcd, 0x42, 0x4b, 0x26, 0x4a, 0x4e, - 0x4c, 0xb9, 0x49, 0xab, 0x18, 0xbb, 0x3d, 0x79, 0x92, 0x72, 0x62, 0xe0, - 0xab, 0x08, 0x00, 0x26, 0x3f, 0xab, 0x44, 0x89, 0x48, 0x21, 0xc0, 0xfe, - 0xe0, 0x14, 0x3e, 0xfc, 0x75, 0xd1, 0x7c, 0x9e, 0x3d, 0x5d, 0xd9, 0x89, - 0xab, 0x6e, 0x25, 0x4b, 0xb5, 0x2f, 0xb8, 0xc4, 0xf0, 0x0c, 0xb0, 0x8d, - 0xc7, 0xfe, 0x03, 0x4a, 0x98, 0x03, 0xec, 0x71, 0xce, 0x71, 0xd5, 0xf6, - 0x84, 0xb4, 0xd6, 0xf6, 0x07, 0xfb, 0x40, 0x29, 0x34, 0xb6, 0x9d, 0x89, - 0xe4, 0x8e, 0x92, 0xf6, 0x69, 0x12, 0x34, 0x04, 0xb3, 0xd1, 0xd5, 0x48, - 0x61, 0x0a, 0x54, 0x64, 0xb7, 0xf9, 0x59, 0xb2, 0xd9, 0xc8, 0xe0, 0x9e, - 0xa9, 0x27, 0x51, 0x50, 0x55, 0x70, 0x9a, 0xa2, 0x45, 0x13, 0x15, 0x63, - 0x05, 0x53, 0x26, 0xb0, 0x88, 0xac, 0x41, 0x39, 0x91, 0x30, 0x81, 0xc4, - 0x7e, 0x7c, 0xb9, 0x11, 0xe4, 0x47, 0xe7, 0x9e, 0x79, 0xe9, 0x00, 0xa6, - 0x18, 0x98, 0xe7, 0xec, 0x7c, 0x7f, 0xc8, 0xeb, 0xd0, 0x15, 0xe9, 0x76, - 0x46, 0x53, 0x20, 0xe1, 0xf1, 0x91, 0xe3, 0x80, 0xc3, 0x8f, 0xd3, 0xed, - 0xfa, 0x74, 0xe7, 0x60, 0xcc, 0xe3, 0x75, 0xd6, 0xec, 0xcf, 0x59, 0xcc, - 0xd4, 0x14, 0x22, 0xe4, 0xe6, 0x2b, 0x0e, 0x9d, 0xb0, 0x99, 0xa9, 0xd8, - 0x52, 0x2b, 0xaa, 0x9e, 0x45, 0x82, 0x91, 0x48, 0xed, 0x26, 0xeb, 0x53, - 0x28, 0x18, 0xa6, 0x2a, 0x8c, 0xa4, 0x5b, 0x1c, 0xe9, 0x1b, 0xc8, 0xa6, - 0xf4, 0xd4, 0x2a, 0x0b, 0x14, 0x3c, 0x92, 0x2f, 0x53, 0xba, 0x63, 0x52, - 0x55, 0xe9, 0x5b, 0xe4, 0x77, 0x6a, 0x50, 0x18, 0x02, 0x43, 0xa3, 0x72, - 0xb2, 0x23, 0x02, 0xae, 0x8e, 0xa7, 0x86, 0x56, 0x52, 0x41, 0x07, 0xef, - 0x91, 0x86, 0xc3, 0x0c, 0x43, 0xb8, 0x7d, 0xbd, 0xb0, 0x77, 0x57, 0x42, - 0x55, 0xe8, 0x4d, 0x48, 0xcf, 0x1c, 0x13, 0x84, 0x68, 0xe6, 0x88, 0xe2, - 0x6a, 0x5a, 0x88, 0x88, 0x7a, 0x7a, 0xb8, 0x18, 0x10, 0x56, 0x58, 0x24, - 0x01, 0x86, 0x08, 0xde, 0xa5, 0xe3, 0x3f, 0x0b, 0x9e, 0xac, 0xbf, 0x6b, - 0xdf, 0xf8, 0x6f, 0xed, 0x9f, 0x31, 0x5a, 0xd1, 0x3d, 0x76, 0xb2, 0x66, - 0x2c, 0x73, 0x1d, 0x87, 0x9e, 0xe1, 0xdb, 0x04, 0x3a, 0x73, 0x68, 0x4f, - 0xdc, 0xb5, 0x45, 0x07, 0xec, 0x97, 0x66, 0x76, 0x37, 0x4a, 0x92, 0x65, - 0x3c, 0xa3, 0xb6, 0xcd, 0x1a, 0x2a, 0xeb, 0xda, 0xca, 0xb4, 0x2a, 0xec, - 0x9d, 0xa6, 0xd0, 0x86, 0x5d, 0xc2, 0x7f, 0x59, 0xce, 0xda, 0x56, 0x6b, - 0xa8, 0xa5, 0xed, 0xac, 0x94, 0xba, 0x1e, 0x81, 0xaa, 0xa9, 0x8c, 0x2d, - 0x11, 0xf8, 0xc3, 0x3d, 0x38, 0x70, 0x54, 0x89, 0x63, 0x20, 0xbb, 0x05, - 0x05, 0xb6, 0xc9, 0x82, 0x8c, 0x14, 0xfb, 0x8c, 0x08, 0x20, 0xea, 0x76, - 0xcd, 0xe9, 0xaa, 0xb8, 0x7a, 0xb0, 0x82, 0xef, 0xea, 0x23, 0x53, 0xc5, - 0x6c, 0xba, 0x3d, 0x74, 0x75, 0xd1, 0x3f, 0xb6, 0xd1, 0x53, 0xde, 0x5a, - 0x39, 0x16, 0x41, 0x25, 0x05, 0x69, 0x2b, 0x4d, 0x14, 0x92, 0xca, 0xa8, - 0x26, 0xa6, 0x94, 0xc7, 0x3c, 0x2d, 0x21, 0x58, 0xa2, 0x6f, 0x84, 0x2b, - 0xd3, 0xdb, 0x5f, 0x35, 0xeb, 0x7e, 0xb5, 0xf6, 0x87, 0x88, 0x97, 0x6d, - 0x9e, 0xf1, 0xed, 0xf1, 0x7c, 0x61, 0x8a, 0x6c, 0xd9, 0x13, 0x22, 0xc4, - 0x30, 0xb2, 0x24, 0x69, 0xda, 0xcc, 0xc4, 0x8a, 0xaf, 0xe5, 0x14, 0xad, - 0x2d, 0x14, 0xb0, 0x95, 0xe2, 0x4e, 0x51, 0x59, 0xd2, 0x2c, 0x0a, 0x45, - 0x12, 0x0f, 0x70, 0xb7, 0xd6, 0x97, 0x9a, 0x6b, 0x26, 0x63, 0x4d, 0x76, - 0xf6, 0xf7, 0xa7, 0xf4, 0xf7, 0x6a, 0x04, 0xc2, 0xba, 0x39, 0x5e, 0x38, - 0xa4, 0x95, 0xd4, 0x30, 0x0c, 0xae, 0xe5, 0x9c, 0x47, 0xb0, 0x90, 0x43, - 0x65, 0x95, 0x06, 0x46, 0x1d, 0x8e, 0xe5, 0xca, 0xb0, 0x3d, 0x60, 0x3e, - 0xaa, 0xf4, 0x0f, 0x74, 0xfb, 0xaf, 0xeb, 0x6e, 0x6a, 0x29, 0x34, 0xdd, - 0x4d, 0x22, 0x57, 0xd6, 0x52, 0x52, 0xd2, 0xc8, 0xd1, 0x37, 0xb7, 0x34, - 0x11, 0x2c, 0x70, 0x8a, 0xa5, 0x99, 0x73, 0x13, 0x46, 0xc8, 0x8d, 0x39, - 0x2a, 0xe7, 0xda, 0x4f, 0x82, 0x4d, 0xaf, 0x1b, 0x01, 0xc5, 0xe8, 0xd6, - 0xd4, 0x6a, 0xfe, 0xb7, 0x76, 0x79, 0xc7, 0x70, 0x37, 0x5d, 0x84, 0xc4, - 0xc7, 0xbc, 0xa3, 0x8a, 0x6d, 0x48, 0x2b, 0x8f, 0x98, 0xdc, 0xda, 0x49, - 0x5e, 0x97, 0xb1, 0xce, 0x38, 0x9a, 0x94, 0x46, 0xb0, 0xda, 0x05, 0x33, - 0x19, 0xf9, 0xde, 0x90, 0xf2, 0x2d, 0xdb, 0x19, 0xba, 0x68, 0x9b, 0xc4, - 0xe2, 0x3f, 0x22, 0x4e, 0x0e, 0x36, 0x3a, 0x1b, 0x52, 0x69, 0x7d, 0x3d, - 0xda, 0x48, 0xe8, 0x9a, 0xe3, 0x13, 0xcc, 0x23, 0x9c, 0x84, 0x12, 0x06, - 0x90, 0xb4, 0x8d, 0x23, 0xaa, 0x6c, 0xce, 0xfd, 0xd8, 0x75, 0x07, 0x8c, - 0x0c, 0xe7, 0x38, 0xe7, 0xa9, 0xef, 0x50, 0xbd, 0x9f, 0xee, 0xf7, 0x75, - 0x3d, 0x71, 0x5c, 0xee, 0x76, 0x2d, 0x33, 0x5a, 0x2d, 0xe6, 0xb2, 0x8c, - 0x8a, 0x96, 0x81, 0xd6, 0x9c, 0x52, 0xd3, 0xa4, 0x10, 0xb5, 0x5b, 0x54, - 0xb0, 0x10, 0x88, 0x48, 0x89, 0xa4, 0x12, 0x19, 0x06, 0x57, 0xf8, 0xb2, - 0x3a, 0x05, 0x77, 0x94, 0x77, 0x2b, 0x1f, 0xf6, 0xf5, 0xa9, 0x62, 0x3d, - 0xa6, 0xce, 0x6a, 0x60, 0xfc, 0x5a, 0xa3, 0x38, 0x77, 0x5a, 0xe9, 0xa5, - 0x93, 0xf5, 0x16, 0xa8, 0xe5, 0xfc, 0xd8, 0x8b, 0x79, 0x5f, 0x74, 0xf5, - 0xfc, 0xca, 0x2d, 0x48, 0x49, 0x18, 0x98, 0x36, 0x2b, 0x19, 0xc3, 0xd4, - 0x55, 0x9d, 0x30, 0x91, 0xcb, 0x86, 0x88, 0x90, 0x5b, 0x97, 0x86, 0xe2, - 0x60, 0x65, 0xf2, 0x3d, 0x67, 0x6c, 0xd0, 0x0d, 0x6e, 0xd4, 0xd7, 0x3f, - 0xc3, 0x52, 0x96, 0x06, 0x9e, 0x91, 0x91, 0x7d, 0xc9, 0x94, 0xb9, 0x62, - 0x5b, 0x68, 0x12, 0x22, 0x29, 0x2c, 0xca, 0x65, 0xc8, 0x2c, 0xa3, 0x6a, - 0xe4, 0x23, 0x8d, 0x88, 0xe9, 0xd7, 0xec, 0x56, 0xa5, 0xf5, 0x33, 0x59, - 0xad, 0x3b, 0x3f, 0xa7, 0x45, 0xd6, 0xee, 0x1a, 0x75, 0xba, 0x5f, 0xa2, - 0x9d, 0xcd, 0x0d, 0xbd, 0x9a, 0x1d, 0x91, 0xc7, 0x03, 0x48, 0x5a, 0x0a, - 0xaa, 0xc9, 0x94, 0x24, 0x2e, 0xb4, 0x60, 0x34, 0x51, 0x3b, 0x37, 0xb8, - 0x7f, 0x34, 0x01, 0xf1, 0x5b, 0xff, 0x00, 0x11, 0x53, 0xfe, 0x11, 0xff, - 0x00, 0xf4, 0x4b, 0xa0, 0xad, 0x2f, 0xfa, 0xbf, 0xc8, 0xff, 0x00, 0x51, - 0xd3, 0x39, 0x74, 0xff, 0x00, 0x6c, 0x3f, 0xee, 0x1f, 0xd0, 0xf5, 0x87, - 0x30, 0x8f, 0x3d, 0xc2, 0xfe, 0x47, 0x6c, 0x06, 0x15, 0x8c, 0x26, 0x02, - 0xa8, 0x73, 0x14, 0x07, 0x91, 0xf8, 0x01, 0xf1, 0x0e, 0x7f, 0xeb, 0xaa, - 0xb4, 0x0d, 0xb8, 0xe4, 0xf5, 0x58, 0x6b, 0xa1, 0x31, 0x29, 0x50, 0x71, - 0x81, 0xf4, 0x1f, 0xfd, 0xeb, 0xa7, 0xa0, 0x59, 0x72, 0x56, 0x26, 0xb8, - 0xc6, 0xe4, 0x3c, 0x53, 0x7e, 0xb2, 0xe3, 0x3b, 0xf4, 0x3a, 0x66, 0x42, - 0x36, 0xe3, 0x46, 0x9f, 0x71, 0x5e, 0x9f, 0x41, 0x23, 0xf2, 0x0a, 0x37, - 0x3a, 0xa9, 0x87, 0x0b, 0x20, 0xa0, 0x09, 0x80, 0xed, 0x97, 0x2a, 0x88, - 0x9c, 0x0c, 0x20, 0x64, 0xcd, 0xcf, 0x52, 0x56, 0x8b, 0x9d, 0xda, 0xc3, - 0x5a, 0xb7, 0x0b, 0x45, 0x43, 0x45, 0x32, 0xf8, 0x65, 0x25, 0x4f, 0x38, - 0xc8, 0xe0, 0x8e, 0x0e, 0x00, 0x23, 0xea, 0x38, 0x3c, 0x75, 0x13, 0xa9, - 0x6c, 0xfa, 0x57, 0x5a, 0x58, 0xe5, 0xd3, 0x1a, 0xca, 0xdb, 0x15, 0x7d, - 0xb6, 0x52, 0x0b, 0xc1, 0x51, 0x1a, 0xcb, 0x19, 0x61, 0xe1, 0x82, 0xb7, - 0x28, 0xeb, 0xe5, 0x64, 0x42, 0xae, 0xa4, 0x0d, 0xac, 0x3a, 0x99, 0x6e, - 0xf7, 0xc2, 0xff, 0x00, 0x72, 0x59, 0xd4, 0x9e, 0x7d, 0xd5, 0xfd, 0x0e, - 0xd9, 0xbb, 0x5b, 0xd5, 0x81, 0x67, 0x99, 0x17, 0x29, 0x6b, 0xab, 0x7a, - 0xfe, 0x4e, 0x92, 0x31, 0x43, 0xf9, 0x3d, 0x99, 0x84, 0x59, 0x97, 0xb8, - 0x30, 0xf2, 0x22, 0x22, 0xa2, 0x3f, 0x71, 0x11, 0xfb, 0x88, 0xf2, 0x41, - 0xfe, 0xf4, 0xae, 0x95, 0x23, 0x37, 0xab, 0x6d, 0x15, 0x54, 0xad, 0xcb, - 0xcb, 0x24, 0x01, 0x64, 0x63, 0xf7, 0x2d, 0x09, 0x8b, 0x3f, 0xae, 0xec, - 0x9f, 0xd7, 0xa0, 0x44, 0x5e, 0x9c, 0x34, 0xd5, 0x8d, 0x12, 0x97, 0xb6, - 0xfa, 0xbb, 0x51, 0xd8, 0x68, 0xd0, 0x61, 0x69, 0x68, 0xee, 0x8d, 0x2d, - 0x22, 0x0f, 0xb4, 0x70, 0x56, 0x25, 0x46, 0xc0, 0x3c, 0x0d, 0xaf, 0xe3, - 0x8e, 0xb5, 0x2e, 0xfc, 0x65, 0xfa, 0xa0, 0xfa, 0xda, 0xf3, 0x83, 0xb4, - 0xc7, 0x51, 0xa5, 0xce, 0xc9, 0x68, 0xe5, 0x6e, 0xda, 0xff, 0x00, 0xaf, - 0x2c, 0x10, 0xca, 0x7e, 0x8a, 0xe4, 0x14, 0xd4, 0x2a, 0x56, 0x69, 0x63, - 0x3e, 0x72, 0x90, 0xf8, 0x88, 0x80, 0x19, 0x12, 0x90, 0x4b, 0xf7, 0x28, - 0x94, 0xdf, 0x3d, 0x51, 0xbb, 0xa7, 0x7b, 0x80, 0x03, 0x64, 0xa1, 0xa3, - 0xa2, 0x90, 0x64, 0x09, 0x20, 0x80, 0x7b, 0x9b, 0x4f, 0xcc, 0x37, 0xc9, - 0xee, 0x38, 0xcf, 0x8c, 0xab, 0x29, 0x1e, 0x47, 0x23, 0xaa, 0x9f, 0x4d, - 0x7a, 0x22, 0xf1, 0x94, 0xee, 0x66, 0xa1, 0xbf, 0x6a, 0x38, 0x37, 0x2b, - 0x8a, 0x7b, 0x9d, 0xd2, 0x43, 0x47, 0xb9, 0x4e, 0x46, 0x69, 0x29, 0x45, - 0x3c, 0x6c, 0x33, 0xc9, 0x0c, 0x58, 0x1f, 0x0d, 0x91, 0xc7, 0x50, 0x82, - 0xc6, 0xbd, 0xbe, 0xe7, 0x64, 0x9a, 0xba, 0x5d, 0xad, 0x33, 0x57, 0x5b, - 0x9d, 0x95, 0xd7, 0xbe, 0xb1, 0xdc, 0x2d, 0xf3, 0xae, 0xec, 0x96, 0x79, - 0xd5, 0xbf, 0xd6, 0xe9, 0xf2, 0xe2, 0x75, 0x4f, 0xc7, 0xf9, 0x4a, 0x26, - 0xf1, 0x20, 0x0f, 0x05, 0x29, 0x43, 0xe3, 0xa1, 0xc5, 0xc2, 0xaa, 0xe1, - 0x75, 0xaa, 0x6a, 0xdb, 0x94, 0xed, 0x2c, 0xac, 0x72, 0x59, 0x89, 0x62, - 0x4f, 0xdc, 0x93, 0xc9, 0x38, 0x03, 0x93, 0xc9, 0xc0, 0xcf, 0x4c, 0x15, - 0xaa, 0x0b, 0x25, 0x86, 0xd5, 0x4f, 0x61, 0xb0, 0x51, 0xc7, 0x4b, 0x41, - 0x00, 0xdb, 0x14, 0x10, 0x46, 0x91, 0x43, 0x1a, 0xfd, 0x92, 0x34, 0xc2, - 0x8f, 0xd4, 0xe3, 0x27, 0xcb, 0x12, 0x79, 0xeb, 0xd6, 0xbd, 0x0a, 0xfc, - 0x24, 0x0f, 0xe9, 0x0b, 0x43, 0x9b, 0xd9, 0x9f, 0x90, 0x51, 0x73, 0xa6, - 0x5e, 0x3c, 0xd2, 0xfc, 0x81, 0x07, 0xfd, 0xbf, 0x1d, 0x74, 0xd3, 0x40, - 0xfe, 0xef, 0xc3, 0x8f, 0x07, 0xfa, 0x8e, 0xb8, 0xdc, 0xeb, 0xa9, 0xc5, - 0x30, 0xdf, 0xbb, 0x1b, 0x87, 0x80, 0x0f, 0xd0, 0xfe, 0xa3, 0xaf, 0xff, - 0xd9 -}; -unsigned int logo_jpg_len = 7561; +extern const unsigned char logo_jpg[] asm("_binary_logo_jpg_start"); +const unsigned int logo_jpg_len = 7561; diff --git a/esp_jpeg/test_apps/main/test_usb_camera_jpg.h b/esp_jpeg/test_apps/main/test_usb_camera_jpg.h new file mode 100644 index 0000000000..5e0d8d51ba --- /dev/null +++ b/esp_jpeg/test_apps/main/test_usb_camera_jpg.h @@ -0,0 +1,8 @@ +/* +Raw data from Logitech C270 USB camera was reconstructed to usb_camera.jpg +The it was converted to RGB888 array with jpg_to_rgb888_hex.py +*/ + +// JPEG encoded frame 160x120, 2632 bytes, no huffman tables, double block size (16x8 pixels) +extern const unsigned char jpeg_no_huffman[] asm("_binary_usb_camera_jpg_start"); +const unsigned int jpeg_no_huffman_len = 2632; diff --git a/esp_jpeg/test_apps/main/test_usb_camera_rgb888.h b/esp_jpeg/test_apps/main/test_usb_camera_rgb888.h new file mode 100644 index 0000000000..db4e12de94 --- /dev/null +++ b/esp_jpeg/test_apps/main/test_usb_camera_rgb888.h @@ -0,0 +1,19202 @@ +unsigned int jpeg_no_huffman_rgb888[19200] = { + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000E00, + 0x000900, + 0x000800, + 0x000600, + 0x131E10, + 0x767E71, + 0x787E72, + 0x74776C, + 0x787B70, + 0x7F8176, + 0x84867B, + 0x86887A, + 0x87897B, + 0x888A7C, + 0x888A7C, + 0x888A7C, + 0x898B7D, + 0x898B7D, + 0x8A8C7E, + 0x8A8C7E, + 0x898B7D, + 0x888A7C, + 0x888A7C, + 0x848678, + 0x87897B, + 0x8A8C7E, + 0x8C8E80, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8C8E80, + 0x8B8D7F, + 0x8B8D7F, + 0x8B8D7F, + 0x8B8D7F, + 0x8A8C7E, + 0x8A8C7E, + 0x898B7D, + 0x898B7D, + 0x878B7C, + 0x818A79, + 0x7F8A79, + 0x7F8A79, + 0x808B7A, + 0x818C7B, + 0x808B7A, + 0x7D8A78, + 0x7B8876, + 0x788573, + 0x788573, + 0x788774, + 0x788774, + 0x778673, + 0x768572, + 0x748370, + 0x73826F, + 0x74816F, + 0x73806E, + 0x73806E, + 0x727F6D, + 0x707F6C, + 0x6F7E6B, + 0x6E7D6A, + 0x6E7D6A, + 0x6A7B68, + 0x6A7B68, + 0x687B67, + 0x677A66, + 0x667965, + 0x657864, + 0x647763, + 0x657664, + 0x667463, + 0x667264, + 0x657362, + 0x657362, + 0x647563, + 0x647563, + 0x617461, + 0x5F7161, + 0x627363, + 0x5D6D62, + 0x5E6B61, + 0x5D6A63, + 0x626D67, + 0x495450, + 0x313A39, + 0x000802, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000D00, + 0x000900, + 0x000900, + 0x000800, + 0x182315, + 0x788073, + 0x797F73, + 0x7A7D72, + 0x7D8075, + 0x818378, + 0x83857A, + 0x848678, + 0x858779, + 0x86887A, + 0x87897B, + 0x87897B, + 0x888A7C, + 0x898B7D, + 0x8A8C7E, + 0x8B8D7F, + 0x8C8E80, + 0x8D8F81, + 0x8D8F81, + 0x858779, + 0x888A7C, + 0x8B8D7F, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8E9082, + 0x8B8D7F, + 0x8B8D7F, + 0x8A8C7E, + 0x8A8C7E, + 0x898B7D, + 0x898B7D, + 0x888A7C, + 0x878B7C, + 0x888F7F, + 0x868F7E, + 0x848D7C, + 0x838C7B, + 0x828B7A, + 0x7F8877, + 0x798473, + 0x768170, + 0x768170, + 0x768170, + 0x768170, + 0x768170, + 0x74816F, + 0x73806E, + 0x727F6D, + 0x717E6C, + 0x727D6C, + 0x727D6C, + 0x727D6C, + 0x727D6C, + 0x707D6B, + 0x707D6B, + 0x707D6B, + 0x707D6B, + 0x6C7B68, + 0x6C7B68, + 0x6B7A67, + 0x6A7966, + 0x687966, + 0x677865, + 0x677865, + 0x687665, + 0x6D7B6A, + 0x6D796B, + 0x6A7867, + 0x697766, + 0x677866, + 0x657664, + 0x627562, + 0x607262, + 0x637464, + 0x5F6F64, + 0x616E64, + 0x5E6B64, + 0x636E68, + 0x4E5955, + 0x363F3E, + 0x000802, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000D00, + 0x000A00, + 0x000B00, + 0x000A00, + 0x202B1D, + 0x798174, + 0x787E72, + 0x797C71, + 0x7A7D72, + 0x7C7E73, + 0x7C7E73, + 0x7D7F71, + 0x7E8072, + 0x808274, + 0x828476, + 0x808274, + 0x808274, + 0x818375, + 0x818375, + 0x838577, + 0x858779, + 0x87897B, + 0x888A7C, + 0x86887A, + 0x898B7D, + 0x8D8F81, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x909284, + 0x909284, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8C8E80, + 0x8C8E80, + 0x888C7D, + 0x878B7C, + 0x868A7B, + 0x868A7B, + 0x868A7B, + 0x848879, + 0x808777, + 0x7D8474, + 0x707767, + 0x707767, + 0x6F7867, + 0x6E7766, + 0x6D7665, + 0x6C7564, + 0x6B7463, + 0x6A7362, + 0x6B7463, + 0x6A7362, + 0x6A7362, + 0x697261, + 0x687160, + 0x67705F, + 0x67705F, + 0x666F5E, + 0x687362, + 0x687362, + 0x677261, + 0x677261, + 0x667160, + 0x65705F, + 0x63705E, + 0x63705E, + 0x646F5F, + 0x646F5F, + 0x63705F, + 0x657261, + 0x657664, + 0x677866, + 0x667765, + 0x667765, + 0x647565, + 0x627265, + 0x627265, + 0x5E6B62, + 0x626F66, + 0x56615D, + 0x3E4945, + 0x000903, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000D00, + 0x000B00, + 0x000C00, + 0x000A00, + 0x293426, + 0x798174, + 0x767C70, + 0x7B7E73, + 0x7C7F74, + 0x7F8176, + 0x808277, + 0x818375, + 0x828476, + 0x858779, + 0x87897B, + 0x87897B, + 0x86887A, + 0x858779, + 0x858779, + 0x858779, + 0x87897B, + 0x898B7D, + 0x8A8C7E, + 0x87897B, + 0x898B7D, + 0x8D8F81, + 0x8F9183, + 0x909284, + 0x909284, + 0x909284, + 0x919385, + 0x8E9082, + 0x8F9183, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8F9183, + 0x909284, + 0x8C8E80, + 0x8C8E80, + 0x8C8E80, + 0x8B8D7F, + 0x8B8D7F, + 0x8A8C7E, + 0x8A8C7E, + 0x8A8C7E, + 0x898A7C, + 0x898A7C, + 0x87897B, + 0x888A7C, + 0x898B7D, + 0x898B7D, + 0x888A7C, + 0x86887A, + 0x7D8172, + 0x7D8172, + 0x7C8071, + 0x7C8071, + 0x7B7F70, + 0x797D6E, + 0x787C6D, + 0x787C6D, + 0x757C6C, + 0x747B6B, + 0x737A6A, + 0x717868, + 0x6E7565, + 0x6C7363, + 0x6A7161, + 0x697060, + 0x6A7161, + 0x697060, + 0x686F5F, + 0x676E5E, + 0x666D5D, + 0x656C5C, + 0x646B5B, + 0x636A5A, + 0x5B6656, + 0x5C6757, + 0x5D6A59, + 0x616E5D, + 0x647360, + 0x687764, + 0x677866, + 0x677866, + 0x647666, + 0x627466, + 0x657568, + 0x5D6D63, + 0x626F66, + 0x5B6861, + 0x48534F, + 0x010C04, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000C00, + 0x000A00, + 0x333E30, + 0x798174, + 0x757B6F, + 0x76796E, + 0x787B70, + 0x7C7E73, + 0x7E8075, + 0x7E8072, + 0x7E8072, + 0x7E8072, + 0x7F8173, + 0x848678, + 0x838577, + 0x828476, + 0x828476, + 0x828476, + 0x848678, + 0x86887A, + 0x87897B, + 0x86887A, + 0x898B7D, + 0x8D8F81, + 0x8F9183, + 0x909284, + 0x909284, + 0x909284, + 0x919385, + 0x919385, + 0x929486, + 0x929486, + 0x909284, + 0x8F9183, + 0x8F9183, + 0x919385, + 0x939587, + 0x919385, + 0x909284, + 0x909284, + 0x909284, + 0x8F9183, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x909183, + 0x8E8F81, + 0x8C8D7F, + 0x8C8D7F, + 0x8B8C7E, + 0x8A8B7D, + 0x88897B, + 0x87887A, + 0x888A7C, + 0x888A7C, + 0x87897B, + 0x86887A, + 0x838778, + 0x838778, + 0x828677, + 0x828677, + 0x808475, + 0x7F8374, + 0x7D8172, + 0x7B7F70, + 0x797D6E, + 0x767A6B, + 0x75796A, + 0x747869, + 0x767A6B, + 0x75796A, + 0x747869, + 0x727667, + 0x707465, + 0x6E7263, + 0x6D7162, + 0x6C7061, + 0x6C7465, + 0x6B7364, + 0x687362, + 0x697463, + 0x687764, + 0x687764, + 0x657663, + 0x637461, + 0x657865, + 0x617363, + 0x677868, + 0x5F6F64, + 0x5E6E64, + 0x5D6C65, + 0x4F5B57, + 0x07140B, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000D00, + 0x000A00, + 0x3D483A, + 0x7C8477, + 0x777D71, + 0x777A6F, + 0x797C71, + 0x7C7E73, + 0x7D7F74, + 0x7C7E70, + 0x7A7C6E, + 0x7A7C6E, + 0x7A7C6E, + 0x7B7D6F, + 0x7B7D6F, + 0x7B7D6F, + 0x7C7E70, + 0x7E8072, + 0x808274, + 0x828476, + 0x838577, + 0x87897B, + 0x8A8C7E, + 0x8D8F81, + 0x909284, + 0x909284, + 0x909284, + 0x909284, + 0x919385, + 0x8F9183, + 0x909284, + 0x909284, + 0x8E9082, + 0x8C8E80, + 0x8B8D7F, + 0x8E9082, + 0x919385, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8C8E80, + 0x8C8E80, + 0x8C8E80, + 0x8E8F81, + 0x8C8D7F, + 0x8B8C7E, + 0x8A8B7D, + 0x8B8C7E, + 0x8B8C7E, + 0x898B7D, + 0x888A7C, + 0x888A7C, + 0x87897B, + 0x858779, + 0x848678, + 0x818576, + 0x818576, + 0x808475, + 0x808475, + 0x7C8373, + 0x7C8373, + 0x7C8373, + 0x7B8272, + 0x7A8171, + 0x798070, + 0x7B7F70, + 0x7A7E6F, + 0x7C8071, + 0x7B7F70, + 0x7A7E6F, + 0x797D6E, + 0x787A6C, + 0x77796B, + 0x76786A, + 0x747869, + 0x767D6D, + 0x747D6C, + 0x707B6A, + 0x6F7A69, + 0x6D7A68, + 0x6C7967, + 0x677865, + 0x657663, + 0x677A67, + 0x607262, + 0x677969, + 0x617367, + 0x5E6E63, + 0x5E6E64, + 0x55645D, + 0x0F1F15, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000A00, + 0x000D00, + 0x000C00, + 0x485345, + 0x828A7D, + 0x7D8377, + 0x878A7F, + 0x888B80, + 0x8A8C81, + 0x8A8C81, + 0x888A7C, + 0x888A7C, + 0x898B7D, + 0x8A8C7E, + 0x86887A, + 0x87897B, + 0x888A7C, + 0x898B7D, + 0x8A8C7E, + 0x8B8D7F, + 0x8C8E80, + 0x8C8E80, + 0x888A7C, + 0x8B8D7F, + 0x8F9183, + 0x919385, + 0x919385, + 0x919385, + 0x929486, + 0x929486, + 0x8F9183, + 0x919385, + 0x909284, + 0x8D8F81, + 0x8A8C7E, + 0x898B7D, + 0x8C8E80, + 0x909284, + 0x848678, + 0x848678, + 0x848678, + 0x838577, + 0x838577, + 0x828476, + 0x828476, + 0x818375, + 0x898A7C, + 0x87887A, + 0x868779, + 0x87887A, + 0x87897B, + 0x888A7C, + 0x87897B, + 0x87897B, + 0x888C7D, + 0x878B7C, + 0x85897A, + 0x838778, + 0x828677, + 0x818576, + 0x818576, + 0x818576, + 0x7D8675, + 0x7D8675, + 0x7D8675, + 0x7D8675, + 0x7D8675, + 0x7C8574, + 0x7D8474, + 0x7D8474, + 0x767D6D, + 0x767D6D, + 0x787C6D, + 0x787C6D, + 0x777B6C, + 0x777B6C, + 0x787A6C, + 0x787A6C, + 0x737A6A, + 0x727969, + 0x717A69, + 0x717A69, + 0x6F7C68, + 0x6F7C68, + 0x6A7B68, + 0x697A67, + 0x6A7D6A, + 0x5F7161, + 0x687A6A, + 0x65776B, + 0x5F6F64, + 0x5E6E64, + 0x5B6A63, + 0x1A2A20, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000C00, + 0x000A00, + 0x000E00, + 0x000E00, + 0x4F5A4C, + 0x868E81, + 0x82887C, + 0x878A7F, + 0x888B80, + 0x898B80, + 0x888A7F, + 0x888A7C, + 0x8A8C7E, + 0x8D8F81, + 0x909284, + 0x8D8F81, + 0x8D8F81, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8C8E80, + 0x898B7D, + 0x8C8E80, + 0x909284, + 0x929486, + 0x939587, + 0x929486, + 0x939587, + 0x939587, + 0x959789, + 0x96988A, + 0x96988A, + 0x939587, + 0x8F9183, + 0x8E9082, + 0x919385, + 0x959789, + 0x909284, + 0x909284, + 0x909284, + 0x8F9183, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8C8E80, + 0x898B7D, + 0x86887A, + 0x848678, + 0x828476, + 0x818375, + 0x7D8172, + 0x7C8071, + 0x7F8374, + 0x7D8172, + 0x7B7F70, + 0x797D6E, + 0x767D6D, + 0x757C6C, + 0x757C6C, + 0x757C6C, + 0x737E6D, + 0x727D6C, + 0x727D6C, + 0x717C6B, + 0x727B6A, + 0x717A69, + 0x707968, + 0x707968, + 0x727969, + 0x727969, + 0x75796A, + 0x767A6B, + 0x767A6B, + 0x777B6C, + 0x787C6D, + 0x787C6D, + 0x747B6B, + 0x737A6A, + 0x727B68, + 0x727B68, + 0x6F7C68, + 0x6F7C68, + 0x6A7C66, + 0x697A67, + 0x6C7F6B, + 0x5E7060, + 0x697B6B, + 0x687A6E, + 0x5E7064, + 0x5D6E64, + 0x5F6E67, + 0x223228, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000E00, + 0x000800, + 0x001300, + 0x000600, + 0x000E00, + 0x606B5B, + 0x7C8475, + 0x777D6F, + 0x787C6E, + 0x7B7F71, + 0x818376, + 0x86887B, + 0x8A8C7F, + 0x8C8E81, + 0x8C8E81, + 0x8B8D80, + 0x8E9082, + 0x8E9082, + 0x8E9082, + 0x8F9183, + 0x8E9082, + 0x8E9082, + 0x8D8F81, + 0x8C8E80, + 0x8A8C7E, + 0x8D8F81, + 0x919385, + 0x949688, + 0x949688, + 0x949688, + 0x949688, + 0x949688, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x949688, + 0x939587, + 0x929486, + 0x929486, + 0x848678, + 0x848678, + 0x848678, + 0x838577, + 0x818375, + 0x818375, + 0x828476, + 0x828476, + 0x848678, + 0x848678, + 0x838577, + 0x838577, + 0x848678, + 0x86887A, + 0x858779, + 0x828476, + 0x858779, + 0x86887A, + 0x888A7C, + 0x888A7C, + 0x87897B, + 0x858779, + 0x828476, + 0x808274, + 0x838578, + 0x838578, + 0x828477, + 0x808275, + 0x7F8174, + 0x7E8073, + 0x7C7E71, + 0x7C7E71, + 0x76786B, + 0x75776A, + 0x747669, + 0x737568, + 0x717366, + 0x707265, + 0x6F7164, + 0x6E7063, + 0x6B7163, + 0x6D7365, + 0x6F7768, + 0x727A6B, + 0x707D6B, + 0x707D6B, + 0x6D7F69, + 0x6C7E68, + 0x6A7D69, + 0x687B67, + 0x677A67, + 0x657865, + 0x647666, + 0x657769, + 0x536356, + 0x344437, + 0x000900, + 0x000F00, + 0x000900, + 0x000700, + 0x000900, + 0x000D00, + 0x000900, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000800, + 0x001200, + 0x000700, + 0x031100, + 0x6D7868, + 0x858D7E, + 0x808678, + 0x84887A, + 0x868A7C, + 0x898B7E, + 0x8C8E81, + 0x8E9083, + 0x8F9184, + 0x909285, + 0x909285, + 0x8F9183, + 0x8F9183, + 0x8F9183, + 0x909284, + 0x909284, + 0x919385, + 0x919385, + 0x919385, + 0x8A8C7E, + 0x8D8F81, + 0x919385, + 0x949688, + 0x949688, + 0x949688, + 0x949688, + 0x949688, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x949688, + 0x939587, + 0x939587, + 0x929486, + 0x929486, + 0x929486, + 0x929486, + 0x929486, + 0x919385, + 0x909284, + 0x909284, + 0x919385, + 0x8F9183, + 0x8E9082, + 0x8C8E80, + 0x8A8C7E, + 0x898B7D, + 0x87897B, + 0x858779, + 0x828476, + 0x828476, + 0x818375, + 0x7F8173, + 0x7D7F71, + 0x7C7E70, + 0x7C7E70, + 0x7D7F71, + 0x7E8072, + 0x797B6E, + 0x797B6E, + 0x787A6D, + 0x76786B, + 0x75776A, + 0x737568, + 0x727467, + 0x727467, + 0x797B6E, + 0x797B6E, + 0x787A6D, + 0x76786B, + 0x75776A, + 0x737568, + 0x727467, + 0x727467, + 0x6E7466, + 0x6F7567, + 0x71796A, + 0x737B6C, + 0x717E6C, + 0x717E6C, + 0x6D7F69, + 0x6C7E68, + 0x6B7E6A, + 0x697C68, + 0x697C69, + 0x667966, + 0x657666, + 0x667669, + 0x57675A, + 0x3C4C3F, + 0x000900, + 0x000D00, + 0x000A00, + 0x000700, + 0x000900, + 0x000C00, + 0x000900, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000C00, + 0x000B00, + 0x001100, + 0x000900, + 0x000E00, + 0x737E6E, + 0x828A7B, + 0x7E8476, + 0x868A7C, + 0x868A7C, + 0x86887B, + 0x86887B, + 0x87897C, + 0x888A7D, + 0x898B7E, + 0x898B7E, + 0x8B8D7F, + 0x8A8C7E, + 0x8A8C7E, + 0x8B8D7F, + 0x8C8E80, + 0x8E9082, + 0x909284, + 0x919385, + 0x8B8D7F, + 0x8E9082, + 0x929486, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x96988A, + 0x96988A, + 0x96988A, + 0x96988A, + 0x959789, + 0x949688, + 0x949688, + 0x939587, + 0x848678, + 0x858779, + 0x858779, + 0x858779, + 0x858779, + 0x858779, + 0x848678, + 0x838577, + 0x848678, + 0x848678, + 0x86887A, + 0x8A8C7E, + 0x8E9082, + 0x909284, + 0x909284, + 0x909284, + 0x8F9183, + 0x8D8F81, + 0x8A8C7E, + 0x87897B, + 0x86887A, + 0x86887A, + 0x87897B, + 0x87897B, + 0x86887B, + 0x85877A, + 0x848679, + 0x838578, + 0x828477, + 0x808275, + 0x7F8174, + 0x7F8174, + 0x7E8073, + 0x7D7F72, + 0x7C7E71, + 0x7B7D70, + 0x7A7C6F, + 0x787A6D, + 0x77796C, + 0x767A6C, + 0x717769, + 0x71796A, + 0x717C6C, + 0x737E6E, + 0x727F6D, + 0x727F6D, + 0x6E806A, + 0x6D7F69, + 0x6B7E6A, + 0x6A7D69, + 0x6B7E6B, + 0x687B68, + 0x667767, + 0x67776A, + 0x5D6D60, + 0x47574A, + 0x000A00, + 0x000B00, + 0x000A00, + 0x000800, + 0x000900, + 0x000A00, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x001000, + 0x000F00, + 0x000A00, + 0x021000, + 0x7A8575, + 0x81897A, + 0x7D8375, + 0x84887A, + 0x84887A, + 0x848679, + 0x848679, + 0x848679, + 0x838578, + 0x848679, + 0x848679, + 0x898B7D, + 0x888A7C, + 0x888A7C, + 0x888A7C, + 0x898B7D, + 0x8B8D7F, + 0x8E9082, + 0x8F9183, + 0x8C8E80, + 0x8F9183, + 0x939587, + 0x959789, + 0x96988A, + 0x959789, + 0x959789, + 0x96988A, + 0x96988A, + 0x96988A, + 0x97998B, + 0x97998B, + 0x96988A, + 0x96988A, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x959789, + 0x96988A, + 0x96988A, + 0x96988A, + 0x949688, + 0x939587, + 0x909485, + 0x8E9283, + 0x8E9283, + 0x909485, + 0x919586, + 0x8F9384, + 0x8D9182, + 0x8D9182, + 0x8F9384, + 0x8F9384, + 0x8E9283, + 0x8D9182, + 0x8C9081, + 0x898D7E, + 0x878B7C, + 0x868A7B, + 0x898B7D, + 0x898B7D, + 0x888A7C, + 0x87897B, + 0x86887A, + 0x858779, + 0x848678, + 0x838577, + 0x818375, + 0x808274, + 0x7F8173, + 0x7E8072, + 0x7D7F71, + 0x7C7E70, + 0x7B7D6F, + 0x7A7E6F, + 0x757B6D, + 0x757D6E, + 0x747F6F, + 0x758070, + 0x72816E, + 0x72816E, + 0x6E806A, + 0x6E806A, + 0x6B7E6A, + 0x6B7E6A, + 0x6D7E6C, + 0x6A7B69, + 0x657666, + 0x67776A, + 0x637164, + 0x536154, + 0x000E00, + 0x000900, + 0x000A00, + 0x000B00, + 0x000800, + 0x000800, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000E00, + 0x000D00, + 0x000C00, + 0x0C1A09, + 0x859080, + 0x889081, + 0x868C7E, + 0x8A8E80, + 0x8A8E80, + 0x8D8F82, + 0x8E9083, + 0x8E9083, + 0x8D8F82, + 0x8C8E81, + 0x8C8E81, + 0x8F9183, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8F9183, + 0x919385, + 0x929486, + 0x8C8E80, + 0x909284, + 0x949688, + 0x96988A, + 0x97998B, + 0x96988A, + 0x96988A, + 0x96988A, + 0x97998B, + 0x97998B, + 0x989A8C, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x96988A, + 0x96988A, + 0x949688, + 0x929486, + 0x919385, + 0x929486, + 0x939587, + 0x939587, + 0x929486, + 0x909284, + 0x949889, + 0x909485, + 0x909485, + 0x949889, + 0x949889, + 0x909485, + 0x8D9182, + 0x8D9182, + 0x888C7D, + 0x888C7D, + 0x888C7D, + 0x898D7E, + 0x898D7E, + 0x898D7E, + 0x888C7D, + 0x888C7D, + 0x86887A, + 0x86887A, + 0x858779, + 0x848678, + 0x838577, + 0x828476, + 0x818375, + 0x818375, + 0x828476, + 0x828476, + 0x818375, + 0x808274, + 0x7F8173, + 0x7E8072, + 0x7D7F71, + 0x7C8071, + 0x788071, + 0x768171, + 0x758271, + 0x758271, + 0x73826F, + 0x72816E, + 0x6F816B, + 0x6F816B, + 0x6B7E6A, + 0x6A7D69, + 0x6D7E6C, + 0x6B7C6A, + 0x677566, + 0x69776A, + 0x677367, + 0x5B675B, + 0x051604, + 0x000900, + 0x000900, + 0x000D00, + 0x000800, + 0x000700, + 0x000B00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000C00, + 0x162413, + 0x838E7E, + 0x848C7D, + 0x848A7C, + 0x8A8E80, + 0x8B8F81, + 0x8E9083, + 0x909285, + 0x919386, + 0x929487, + 0x919386, + 0x909285, + 0x929486, + 0x929486, + 0x919385, + 0x909284, + 0x909284, + 0x919385, + 0x929486, + 0x939587, + 0x8D8F81, + 0x909284, + 0x949688, + 0x97998B, + 0x97998B, + 0x97998B, + 0x97998B, + 0x97998B, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x989A8C, + 0x97998B, + 0x858779, + 0x838577, + 0x808274, + 0x808274, + 0x828476, + 0x828476, + 0x818375, + 0x7F8173, + 0x727667, + 0x6F7364, + 0x717566, + 0x787C6D, + 0x7B7F70, + 0x787C6D, + 0x767A6B, + 0x797D6E, + 0x838778, + 0x818576, + 0x7E8273, + 0x7D8172, + 0x7F8374, + 0x848879, + 0x8A8E7F, + 0x8D9182, + 0x8A8C7E, + 0x8A8C7E, + 0x898B7D, + 0x888A7C, + 0x888A7C, + 0x87897B, + 0x86887A, + 0x86887A, + 0x838577, + 0x828476, + 0x828476, + 0x818375, + 0x808274, + 0x7F8173, + 0x7E8072, + 0x7D8172, + 0x7A8273, + 0x778272, + 0x768372, + 0x768372, + 0x728370, + 0x71826F, + 0x70826C, + 0x70826C, + 0x6E7F6C, + 0x6B7C69, + 0x6D7E6C, + 0x6D7B6A, + 0x687667, + 0x6B776B, + 0x697569, + 0x5F6B5F, + 0x10210F, + 0x000A00, + 0x000800, + 0x000F00, + 0x000800, + 0x000700, + 0x000C00, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000E00, + 0x000A00, + 0x000E00, + 0x000B00, + 0x202E1D, + 0x7E8979, + 0x7E8677, + 0x7F8577, + 0x868A7C, + 0x868A7C, + 0x888A7D, + 0x8A8C7F, + 0x8C8E81, + 0x8D8F82, + 0x8F9184, + 0x8F9184, + 0x909284, + 0x909284, + 0x909284, + 0x919385, + 0x919385, + 0x919385, + 0x919385, + 0x929486, + 0x8E9082, + 0x919385, + 0x959789, + 0x97998B, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x9C9E90, + 0x989A8C, + 0x949688, + 0x939587, + 0x959789, + 0x96988A, + 0x959789, + 0x939587, + 0x929989, + 0x8D9484, + 0x8C9383, + 0x919888, + 0x8F9686, + 0x878E7E, + 0x838A7A, + 0x848B7B, + 0x7F8676, + 0x7D8474, + 0x798070, + 0x777E6E, + 0x798070, + 0x7D8474, + 0x838A7A, + 0x898D7E, + 0x878B7A, + 0x888B7A, + 0x878A79, + 0x878A79, + 0x868978, + 0x858877, + 0x858877, + 0x848776, + 0x838675, + 0x838675, + 0x828574, + 0x818473, + 0x818473, + 0x808372, + 0x7F8271, + 0x7E8273, + 0x798473, + 0x778473, + 0x768473, + 0x758372, + 0x728370, + 0x71826F, + 0x70836D, + 0x6F826C, + 0x71826F, + 0x6C7D6A, + 0x6F7D6C, + 0x6F7D6C, + 0x6B7769, + 0x6C786C, + 0x6C766B, + 0x616D61, + 0x1C2A19, + 0x000C00, + 0x000700, + 0x000F00, + 0x000800, + 0x000800, + 0x000D00, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000E00, + 0x000800, + 0x001000, + 0x000D00, + 0x2B3928, + 0x828D7D, + 0x858D7E, + 0x878D7F, + 0x888C7E, + 0x878B7D, + 0x888A7D, + 0x888A7D, + 0x8A8C7F, + 0x8D8F82, + 0x909285, + 0x929487, + 0x909284, + 0x909284, + 0x919385, + 0x939587, + 0x939587, + 0x939587, + 0x939587, + 0x939587, + 0x8E9082, + 0x919385, + 0x959789, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x9A9C8E, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x939587, + 0x8D8F81, + 0x8C8E80, + 0x8D8F81, + 0x8F9183, + 0x8E9082, + 0x8D8F81, + 0x8C9383, + 0x878E7E, + 0x899080, + 0x929989, + 0x949B8B, + 0x8E9585, + 0x8C9383, + 0x8F9686, + 0x8F9686, + 0x8E9585, + 0x8C9383, + 0x8B9282, + 0x8A9181, + 0x8B9282, + 0x8B9282, + 0x8E9283, + 0x898D7C, + 0x8A8D7C, + 0x8A8D7C, + 0x898C7B, + 0x888B7A, + 0x888B7A, + 0x878A79, + 0x878A79, + 0x838675, + 0x838675, + 0x838675, + 0x828574, + 0x818473, + 0x808372, + 0x808372, + 0x7F8374, + 0x798473, + 0x778473, + 0x768473, + 0x758372, + 0x728370, + 0x71826F, + 0x70836D, + 0x70836D, + 0x738471, + 0x6D7E6B, + 0x707E6D, + 0x707E6D, + 0x6D796B, + 0x6E7A6E, + 0x6D776C, + 0x616D61, + 0x22301F, + 0x000E00, + 0x000700, + 0x000F00, + 0x000800, + 0x000800, + 0x000E00, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000E00, + 0x000C00, + 0x364433, + 0x838E80, + 0x7F877A, + 0x848A7E, + 0x8C8F84, + 0x8C8F84, + 0x8E9085, + 0x8E9085, + 0x8F9183, + 0x919385, + 0x929486, + 0x939587, + 0x909284, + 0x919385, + 0x939587, + 0x949688, + 0x949688, + 0x949688, + 0x939587, + 0x939587, + 0x8D8F81, + 0x949688, + 0x999B8D, + 0x9A9C8E, + 0x999B8D, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x9A9C8E, + 0x9A9C8E, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x97998B, + 0x97998B, + 0x949688, + 0x909284, + 0x8F9183, + 0x8F9183, + 0x8D8F81, + 0x898B7D, + 0x85897A, + 0x878B7C, + 0x8B8F80, + 0x8F9384, + 0x929687, + 0x939788, + 0x929687, + 0x929687, + 0x919586, + 0x919586, + 0x919586, + 0x8F9384, + 0x8E9283, + 0x8D9182, + 0x8E9283, + 0x909485, + 0x8A8E7F, + 0x898D7E, + 0x898D7E, + 0x888C7D, + 0x878B7C, + 0x878B7C, + 0x868A7B, + 0x868A7B, + 0x848879, + 0x838778, + 0x838778, + 0x828677, + 0x818576, + 0x808475, + 0x808475, + 0x7E8575, + 0x788675, + 0x768775, + 0x758674, + 0x748573, + 0x748572, + 0x738471, + 0x73856F, + 0x73856F, + 0x728370, + 0x70816E, + 0x6F806E, + 0x6E7F6D, + 0x6D7E6E, + 0x6A7A6D, + 0x667669, + 0x637368, + 0x324237, + 0x000C01, + 0x000A00, + 0x000700, + 0x000F00, + 0x000B00, + 0x000700, + 0x000C00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000E00, + 0x001200, + 0x010F00, + 0x3F4D3C, + 0x869183, + 0x838B7E, + 0x888E82, + 0x85887D, + 0x85887D, + 0x85877C, + 0x84867B, + 0x838577, + 0x838577, + 0x838577, + 0x838577, + 0x808274, + 0x828476, + 0x858779, + 0x898B7D, + 0x8E9082, + 0x939587, + 0x97998B, + 0x999B8D, + 0x8E9082, + 0x959789, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x9A9C8E, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x9D9F91, + 0x9EA092, + 0x9D9F91, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x97998B, + 0x929486, + 0x929687, + 0x949889, + 0x95998A, + 0x979B8C, + 0x979B8C, + 0x969A8B, + 0x949889, + 0x939788, + 0x8F9384, + 0x8F9384, + 0x8F9384, + 0x8E9283, + 0x8E9283, + 0x8D9182, + 0x8C9081, + 0x8B8F80, + 0x8B8F80, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x888C7D, + 0x878B7C, + 0x878B7C, + 0x868A7B, + 0x888C7D, + 0x878B7C, + 0x878B7C, + 0x868A7B, + 0x85897A, + 0x848879, + 0x848879, + 0x818878, + 0x788675, + 0x768775, + 0x758674, + 0x758674, + 0x748572, + 0x748572, + 0x748670, + 0x748670, + 0x728370, + 0x71826F, + 0x6F806E, + 0x6E7F6D, + 0x6D7E6E, + 0x6A7A6D, + 0x67776A, + 0x647469, + 0x3D4D42, + 0x000C01, + 0x000B00, + 0x000800, + 0x000F00, + 0x000A00, + 0x000700, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000D00, + 0x001000, + 0x000E00, + 0x485645, + 0x848F81, + 0x848C7F, + 0x878D81, + 0x8C8F84, + 0x8C8F84, + 0x8E9085, + 0x8F9186, + 0x909284, + 0x929486, + 0x939587, + 0x939587, + 0x9A9C8E, + 0x999B8D, + 0x97998B, + 0x949688, + 0x939587, + 0x939587, + 0x939587, + 0x939587, + 0x8E9082, + 0x959789, + 0x9A9C8E, + 0x9A9C8E, + 0x9A9C8E, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x9B9D8F, + 0x9B9D8F, + 0x9C9E90, + 0x9C9E90, + 0x9C9E90, + 0x9C9E90, + 0x9B9D8F, + 0x9B9D8F, + 0x8F9183, + 0x8F9183, + 0x8C8E80, + 0x888A7C, + 0x87897B, + 0x888A7C, + 0x86887A, + 0x838577, + 0x8B8F80, + 0x8B8F80, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x878B7C, + 0x85897A, + 0x848879, + 0x929687, + 0x909485, + 0x8F9384, + 0x909485, + 0x919586, + 0x919586, + 0x8E9283, + 0x8C9081, + 0x8C9081, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x888C7D, + 0x878B7C, + 0x868A7B, + 0x85897A, + 0x848879, + 0x848879, + 0x838778, + 0x828677, + 0x818576, + 0x818576, + 0x808475, + 0x7E8575, + 0x798776, + 0x778876, + 0x768775, + 0x768775, + 0x768774, + 0x768774, + 0x768872, + 0x768872, + 0x738471, + 0x728370, + 0x70816F, + 0x6F806E, + 0x6E7F6F, + 0x6B7B6E, + 0x68786B, + 0x65756A, + 0x4C5C51, + 0x000D02, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000800, + 0x000700, + 0x000900, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000B00, + 0x000E00, + 0x000E00, + 0x546251, + 0x828D7F, + 0x858D80, + 0x868C80, + 0x84877C, + 0x85887D, + 0x888A7F, + 0x8A8C81, + 0x8D8F81, + 0x8E9082, + 0x909284, + 0x919385, + 0x929486, + 0x929486, + 0x929486, + 0x939587, + 0x959789, + 0x96988A, + 0x97998B, + 0x989A8C, + 0x8F9183, + 0x96988A, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x9C9E90, + 0x9C9E90, + 0x9B9D8F, + 0x9C9E90, + 0x9C9E90, + 0x9C9E90, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9C9E90, + 0x9C9E90, + 0xA6A89A, + 0xA3A597, + 0x9C9E90, + 0x959789, + 0x949688, + 0x97998B, + 0x989A8C, + 0x96988A, + 0x969A8B, + 0x969A8B, + 0x969A8B, + 0x95998A, + 0x949889, + 0x939788, + 0x929687, + 0x919586, + 0x868A7B, + 0x828677, + 0x7F8374, + 0x808475, + 0x848879, + 0x868A7B, + 0x848879, + 0x818576, + 0x7F8374, + 0x7E8273, + 0x7D8172, + 0x7C8071, + 0x7A7E6F, + 0x797D6E, + 0x787C6D, + 0x777B6C, + 0x7F8374, + 0x7F8374, + 0x7E8273, + 0x7D8172, + 0x7C8071, + 0x7C8071, + 0x7B7F70, + 0x798070, + 0x768473, + 0x738472, + 0x738472, + 0x738472, + 0x738471, + 0x738471, + 0x748670, + 0x748670, + 0x748572, + 0x738471, + 0x718270, + 0x718270, + 0x6F8070, + 0x6D7D70, + 0x69796C, + 0x66766B, + 0x59695E, + 0x000D02, + 0x000900, + 0x000E00, + 0x000C00, + 0x000700, + 0x000A00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000E00, + 0x000C00, + 0x001000, + 0x021000, + 0x647261, + 0x838E80, + 0x8A9285, + 0x888E82, + 0x8A8D82, + 0x8B8E83, + 0x8C8E83, + 0x8D8F84, + 0x8D8F81, + 0x8D8F81, + 0x8C8E80, + 0x8C8E80, + 0x86887A, + 0x888A7C, + 0x8D8F81, + 0x929486, + 0x96988A, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x909284, + 0x97998B, + 0x9C9E90, + 0x9C9E90, + 0x9B9D8F, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9C9E90, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9A9C8E, + 0x989A8C, + 0x939587, + 0x8E9082, + 0x8D8F81, + 0x909284, + 0x919385, + 0x8F9183, + 0x8C9081, + 0x8B8F80, + 0x8B8F80, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x898D7E, + 0x888C7D, + 0x939788, + 0x8E9283, + 0x8A8E7F, + 0x8B8F80, + 0x8F9384, + 0x939788, + 0x939788, + 0x929687, + 0x919586, + 0x909485, + 0x8F9384, + 0x8E9283, + 0x8C9081, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x838778, + 0x828677, + 0x828677, + 0x818576, + 0x808475, + 0x7F8374, + 0x7F8374, + 0x7D8474, + 0x738170, + 0x718270, + 0x70816F, + 0x70816F, + 0x70816E, + 0x71826F, + 0x71836D, + 0x71836D, + 0x758673, + 0x748572, + 0x738472, + 0x728371, + 0x718272, + 0x6F7F72, + 0x6B7B6E, + 0x68786D, + 0x617166, + 0x011106, + 0x000900, + 0x000C00, + 0x000B00, + 0x000800, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000E00, + 0x000B00, + 0x000E00, + 0x010F00, + 0x707E6D, + 0x818C7E, + 0x8B9386, + 0x878D81, + 0x8F9287, + 0x909388, + 0x93958A, + 0x94968B, + 0x959789, + 0x959789, + 0x949688, + 0x949688, + 0x929486, + 0x949688, + 0x97998B, + 0x999B8D, + 0x9A9C8E, + 0x989A8C, + 0x959789, + 0x939587, + 0x919385, + 0x97998B, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9D9F91, + 0x9EA092, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9EA092, + 0x9EA092, + 0x9EA092, + 0x9EA092, + 0x9D9F91, + 0x9D9F91, + 0x9B9D8F, + 0x9C9E90, + 0x9C9E90, + 0x9A9C8E, + 0x9B9D8F, + 0x9EA092, + 0x9C9E90, + 0x989A8C, + 0x979B8C, + 0x979B8C, + 0x979B8C, + 0x969A8B, + 0x95998A, + 0x949889, + 0x929687, + 0x919586, + 0x8D9182, + 0x8A8E7F, + 0x878B7C, + 0x868A7B, + 0x898D7E, + 0x8C9081, + 0x8D9182, + 0x8D9182, + 0x8C9081, + 0x8C9081, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x878B7C, + 0x878B7C, + 0x868A7B, + 0x888C7D, + 0x878B7C, + 0x878B7C, + 0x868A7B, + 0x85897A, + 0x848879, + 0x848879, + 0x818878, + 0x7A8877, + 0x778876, + 0x778876, + 0x768775, + 0x768774, + 0x778875, + 0x778973, + 0x778973, + 0x768774, + 0x758673, + 0x748573, + 0x738472, + 0x728373, + 0x708073, + 0x6D7D70, + 0x6A7A6F, + 0x647469, + 0x0A1A0F, + 0x000C00, + 0x000800, + 0x000B00, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000900, + 0x000D00, + 0x010F00, + 0x798776, + 0x808B7D, + 0x8B9386, + 0x868C80, + 0x82857A, + 0x83867B, + 0x87897E, + 0x898B80, + 0x8B8D7F, + 0x8C8E80, + 0x8C8E80, + 0x8C8E80, + 0x8B8D7F, + 0x8D8F81, + 0x919385, + 0x959789, + 0x97998B, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x919385, + 0x989A8C, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9EA092, + 0x9EA092, + 0x9D9F91, + 0x9EA092, + 0x9EA092, + 0x9EA092, + 0x9FA193, + 0x9FA193, + 0x9EA092, + 0x9EA092, + 0x9EA092, + 0xA0A294, + 0xA0A294, + 0x9EA092, + 0x9B9D8F, + 0x9C9E90, + 0x9FA193, + 0x9FA193, + 0x9D9F91, + 0x989C8D, + 0x999D8E, + 0x9A9E8F, + 0x9A9E8F, + 0x999D8E, + 0x979B8C, + 0x95998A, + 0x939788, + 0x95998A, + 0x949889, + 0x949889, + 0x939788, + 0x939788, + 0x939788, + 0x929687, + 0x929687, + 0x919586, + 0x909485, + 0x909485, + 0x8F9384, + 0x8E9283, + 0x8D9182, + 0x8C9081, + 0x8C9081, + 0x898D7E, + 0x898D7E, + 0x888C7D, + 0x888C7D, + 0x878B7C, + 0x868A7B, + 0x85897A, + 0x838A7A, + 0x808E7D, + 0x7D8E7C, + 0x7D8E7C, + 0x7C8D7B, + 0x7C8D7A, + 0x7B8C79, + 0x7C8E78, + 0x7C8E78, + 0x768774, + 0x758673, + 0x748573, + 0x748573, + 0x738474, + 0x718174, + 0x6E7E71, + 0x6B7B70, + 0x66766B, + 0x16261B, + 0x011202, + 0x000700, + 0x000C00, + 0x000B00, + 0x000700, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x001100, + 0x000C00, + 0x001000, + 0x041201, + 0x82907F, + 0x838E80, + 0x90988B, + 0x898F83, + 0x93968B, + 0x94978C, + 0x96988D, + 0x97998E, + 0x97998B, + 0x959789, + 0x949688, + 0x939587, + 0x959789, + 0x96988A, + 0x97998B, + 0x989A8C, + 0x999B8D, + 0x9A9C8E, + 0x9A9C8E, + 0x9A9C8E, + 0x929486, + 0x989A8C, + 0x9EA092, + 0x9EA092, + 0x9D9F91, + 0x9EA092, + 0x9FA193, + 0x9D9F91, + 0x9EA092, + 0x9EA092, + 0x9FA193, + 0x9FA193, + 0x9FA193, + 0x9FA193, + 0x9EA092, + 0x9EA092, + 0x949688, + 0x909284, + 0x87897B, + 0x7F8173, + 0x7E8072, + 0x848678, + 0x888A7C, + 0x898B7D, + 0x8F9384, + 0x919586, + 0x939788, + 0x95998A, + 0x95998A, + 0x939788, + 0x919586, + 0x909485, + 0x949889, + 0x969A8B, + 0x979B8C, + 0x979B8C, + 0x949889, + 0x919586, + 0x8F9384, + 0x8E9283, + 0x8F9384, + 0x8F9384, + 0x8E9283, + 0x8E9283, + 0x8D9182, + 0x8C9081, + 0x8C9081, + 0x8B8F80, + 0x8B8F80, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x898D7E, + 0x888C7D, + 0x878B7C, + 0x858C7C, + 0x7E8C7B, + 0x7B8C7A, + 0x7A8B79, + 0x798A78, + 0x798A77, + 0x788976, + 0x788A74, + 0x788A74, + 0x778875, + 0x768774, + 0x758674, + 0x758674, + 0x748575, + 0x728275, + 0x6E7E71, + 0x6C7C71, + 0x67776C, + 0x1F2F24, + 0x061707, + 0x000700, + 0x000E00, + 0x000C00, + 0x000700, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000E00, + 0x000800, + 0x031100, + 0x0E1B0A, + 0x838E7E, + 0x888E80, + 0x81877B, + 0x85887D, + 0x8B8D82, + 0x8D8F84, + 0x909189, + 0x91928A, + 0x92938B, + 0x94958D, + 0x949790, + 0x969990, + 0x8F9587, + 0x929989, + 0x929989, + 0x919888, + 0x95998A, + 0x999D8E, + 0x9A9E8F, + 0x999D8E, + 0x929687, + 0x999D8E, + 0x9FA193, + 0x9EA092, + 0x9EA092, + 0x9FA193, + 0xA0A294, + 0x9FA193, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0x9C9E90, + 0x9A9C8E, + 0x989A8C, + 0x96988A, + 0x939587, + 0x8F9183, + 0x8B8D7F, + 0x888A7C, + 0x848879, + 0x818576, + 0x838778, + 0x878B7C, + 0x838778, + 0x7C8071, + 0x7E8273, + 0x868A7B, + 0x818576, + 0x848879, + 0x7D8172, + 0x707465, + 0x727667, + 0x7F8374, + 0x7E8273, + 0x6F7666, + 0x6F7A69, + 0x75806F, + 0x7B8473, + 0x7E8273, + 0x828476, + 0x8A8B7D, + 0x8E9082, + 0x8E9283, + 0x8B9282, + 0x889180, + 0x85907F, + 0x868F7E, + 0x868F7E, + 0x898D7E, + 0x8A8B7D, + 0x888A7C, + 0x818C7B, + 0x7E8D7A, + 0x7D8C79, + 0x7C8B78, + 0x7B8A77, + 0x7B8A77, + 0x7C8977, + 0x7C8977, + 0x7C8977, + 0x7B8876, + 0x798674, + 0x798674, + 0x788573, + 0x778472, + 0x74816F, + 0x727F6D, + 0x6B7C6A, + 0x2F402E, + 0x021301, + 0x000900, + 0x000900, + 0x000700, + 0x000D00, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000700, + 0x021000, + 0x162312, + 0x889383, + 0x8F9587, + 0x8B9185, + 0x909388, + 0x8D8F84, + 0x8E9085, + 0x8E8F87, + 0x8D8E86, + 0x8B8C84, + 0x8A8B83, + 0x888B82, + 0x898C81, + 0x858B7D, + 0x888F7F, + 0x8A9181, + 0x8A9181, + 0x8E9283, + 0x939788, + 0x969A8B, + 0x95998A, + 0x939788, + 0x999D8E, + 0x9FA193, + 0x9FA193, + 0x9EA092, + 0x9FA193, + 0xA0A294, + 0x9FA193, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0xA1A395, + 0x9D9F91, + 0x9C9E90, + 0x9EA092, + 0xA2A496, + 0xA5A799, + 0xA4A698, + 0x9EA092, + 0x989A8C, + 0x9DA192, + 0x9B9F90, + 0x9DA192, + 0xA1A596, + 0x9FA394, + 0x999D8E, + 0x9B9F90, + 0xA2A697, + 0x969A8B, + 0x999D8E, + 0x95998A, + 0x8F9384, + 0x919586, + 0x989C8D, + 0x949889, + 0x868D7D, + 0x7D8877, + 0x818C7B, + 0x858E7D, + 0x85897A, + 0x87897B, + 0x8C8D7F, + 0x8E9283, + 0x8D9484, + 0x899281, + 0x85907F, + 0x82917E, + 0x828F7D, + 0x838E7D, + 0x868D7D, + 0x878B7C, + 0x848B7B, + 0x83907E, + 0x7F907D, + 0x81907D, + 0x808F7C, + 0x7F8E7B, + 0x7F8E7B, + 0x7E8D7A, + 0x7E8D7A, + 0x7B8A77, + 0x7A8976, + 0x798875, + 0x788774, + 0x788774, + 0x768572, + 0x73826F, + 0x71806D, + 0x6B7C6A, + 0x3B4C3A, + 0x000F00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000C00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000A00, + 0x021000, + 0x202D1C, + 0x879282, + 0x8D9385, + 0x888E80, + 0x8E9284, + 0x97998E, + 0x989A8F, + 0x9A9C91, + 0x9A9C91, + 0x9A9C91, + 0x999B90, + 0x999C93, + 0x9A9D92, + 0x979D8F, + 0x99A090, + 0x99A090, + 0x969D8D, + 0x979B8C, + 0x9A9E8F, + 0x9A9E8F, + 0x989C8D, + 0x939788, + 0x9A9E8F, + 0x9FA193, + 0x9FA193, + 0x9FA193, + 0xA0A294, + 0xA1A395, + 0xA0A294, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA5A799, + 0x9A9C8E, + 0x8C8E80, + 0x858779, + 0x86887A, + 0x8A8C7E, + 0x8C8E80, + 0x8B8D7F, + 0x8B8F80, + 0x898D7E, + 0x8B8F80, + 0x8F9384, + 0x8D9182, + 0x898D7E, + 0x8B8F80, + 0x919586, + 0x969A8B, + 0x95998A, + 0x929687, + 0x919586, + 0x939788, + 0x95998A, + 0x919586, + 0x899080, + 0x8A9382, + 0x8C9584, + 0x8C9383, + 0x8B8D7F, + 0x8A8C7E, + 0x8E8F81, + 0x8E9283, + 0x8D9484, + 0x8A9584, + 0x889583, + 0x839481, + 0x829380, + 0x859481, + 0x869381, + 0x869180, + 0x848F7E, + 0x81907D, + 0x7F907D, + 0x7F907D, + 0x7E8F7C, + 0x7D8E7B, + 0x7C8D7A, + 0x7B8C79, + 0x7A8B78, + 0x7A8B78, + 0x798A77, + 0x788976, + 0x778875, + 0x778875, + 0x758673, + 0x728370, + 0x70816E, + 0x6B7C6A, + 0x4D5E4C, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x000C00, + 0x010F00, + 0x2C3928, + 0x869181, + 0x8A9082, + 0x858B7D, + 0x8C9082, + 0x808275, + 0x838578, + 0x86887B, + 0x888A7D, + 0x898B80, + 0x8A8C81, + 0x8C8F84, + 0x8D9085, + 0x878E7E, + 0x8A9181, + 0x8C9383, + 0x8D9484, + 0x929687, + 0x989C8D, + 0x9B9F90, + 0x9A9E8F, + 0x949889, + 0x9A9E8F, + 0xA0A294, + 0xA0A294, + 0x9FA193, + 0xA1A395, + 0xA2A496, + 0xA1A395, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA1A395, + 0x9FA193, + 0x9D9F91, + 0x9FA193, + 0xA1A395, + 0xA1A395, + 0x9C9E90, + 0x989A8C, + 0x95998A, + 0x949889, + 0x95998A, + 0x979B8C, + 0x969A8B, + 0x929687, + 0x949889, + 0x989C8D, + 0x8D9182, + 0x878B7C, + 0x828677, + 0x838778, + 0x85897A, + 0x85897A, + 0x848879, + 0x85897A, + 0x87907F, + 0x878E7E, + 0x858C7C, + 0x86887A, + 0x858779, + 0x87897B, + 0x888C7D, + 0x87907F, + 0x869381, + 0x81927F, + 0x7F927E, + 0x7E917D, + 0x7E917D, + 0x81907D, + 0x808F7C, + 0x7F8E7B, + 0x7E8F7C, + 0x7D907C, + 0x7E917D, + 0x7D907C, + 0x7D907C, + 0x7B8E7A, + 0x7A8D79, + 0x798C78, + 0x7A8D79, + 0x798C78, + 0x768C77, + 0x758B76, + 0x758B76, + 0x738974, + 0x708671, + 0x70836F, + 0x697C69, + 0x5E6F5D, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000D00, + 0x000D00, + 0x3C4938, + 0x8A9585, + 0x8F9587, + 0x8B9183, + 0x939789, + 0x989A8D, + 0x9A9C8F, + 0x9B9D90, + 0x9B9D90, + 0x9A9C8E, + 0x9A9C8E, + 0x9A9E8F, + 0x9A9E8F, + 0x909787, + 0x929989, + 0x939A8A, + 0x919888, + 0x95998A, + 0x989C8D, + 0x999D8E, + 0x989C8D, + 0x95998A, + 0x9B9F90, + 0xA1A395, + 0xA1A395, + 0xA0A294, + 0xA2A496, + 0xA2A496, + 0xA2A496, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA1A395, + 0xA2A496, + 0xA2A496, + 0xA1A395, + 0x9FA193, + 0x9D9F91, + 0x9C9E90, + 0x9C9E90, + 0x9CA091, + 0x9B9F90, + 0x9B9F90, + 0x9CA091, + 0x9B9F90, + 0x989C8D, + 0x989C8D, + 0x9A9E8F, + 0xA0A495, + 0x9A9E8F, + 0x969A8B, + 0x989C8D, + 0x999D8E, + 0x979B8C, + 0x979B8C, + 0x9A9E8F, + 0x909988, + 0x8F9686, + 0x8E9283, + 0x8F9183, + 0x909183, + 0x909183, + 0x8F9384, + 0x8E9585, + 0x8A9785, + 0x879683, + 0x839682, + 0x829581, + 0x839481, + 0x859481, + 0x859280, + 0x84917F, + 0x82917E, + 0x81927F, + 0x81927F, + 0x81927F, + 0x80917E, + 0x7F907D, + 0x7D907C, + 0x7D907C, + 0x7B8E7A, + 0x7A8D79, + 0x778D78, + 0x768C77, + 0x768C77, + 0x748A75, + 0x708872, + 0x6F8570, + 0x6A7D6A, + 0x677866, + 0x001100, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000800, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x001000, + 0x000C00, + 0x485544, + 0x899484, + 0x8C9284, + 0x888E80, + 0x919587, + 0x959789, + 0x96988A, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x96988A, + 0x959988, + 0x969A89, + 0x9DA494, + 0x9EA595, + 0x9DA494, + 0x99A090, + 0x9A9E8F, + 0x9B9F90, + 0x9B9F90, + 0x989C8D, + 0x95998A, + 0x9CA091, + 0xA2A496, + 0xA2A496, + 0xA1A395, + 0xA2A496, + 0xA3A597, + 0xA2A496, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA3A597, + 0xA7A99B, + 0xA1A395, + 0x959789, + 0x898B7D, + 0x828476, + 0x848678, + 0x8D8F81, + 0x959789, + 0x8F9384, + 0x8E9283, + 0x8E9283, + 0x8D9182, + 0x8C9081, + 0x8B8F80, + 0x8A8E7F, + 0x8A8E7F, + 0x8D9182, + 0x8B8F80, + 0x8C9081, + 0x8E9283, + 0x8F9384, + 0x8C9081, + 0x888C7D, + 0x878B7C, + 0x949D8C, + 0x919888, + 0x909485, + 0x939486, + 0x929385, + 0x929083, + 0x8E9082, + 0x8E9283, + 0x8B9483, + 0x879281, + 0x849380, + 0x84917F, + 0x84917F, + 0x87907F, + 0x868F7E, + 0x858E7D, + 0x828D7C, + 0x818E7C, + 0x7F8E7B, + 0x7F8E7B, + 0x7F8E7B, + 0x7F8E7B, + 0x7E8F7C, + 0x7E8F7C, + 0x7C8F7B, + 0x7B8E7A, + 0x7A8D79, + 0x798C78, + 0x778D78, + 0x758B76, + 0x728873, + 0x728571, + 0x6D806D, + 0x687967, + 0x0E1F0D, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x011202, + 0x000C00, + 0x525F4E, + 0x889383, + 0x8A9082, + 0x858C7C, + 0x8F9384, + 0x87897B, + 0x898B7D, + 0x8C8F7E, + 0x8D907F, + 0x8D907F, + 0x8E9180, + 0x8E9281, + 0x909483, + 0x818878, + 0x858C7C, + 0x888F7F, + 0x899080, + 0x909485, + 0x969A8B, + 0x9A9E8F, + 0x9A9E8F, + 0x969A8B, + 0x9CA091, + 0xA2A496, + 0xA2A496, + 0xA1A395, + 0xA3A597, + 0xA4A698, + 0xA3A597, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA1A395, + 0xA3A597, + 0xA4A698, + 0xA5A799, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA5A799, + 0x9FA394, + 0x9FA394, + 0x9EA293, + 0x9DA192, + 0x9DA192, + 0x9DA192, + 0x9CA091, + 0x9B9F90, + 0x939788, + 0x95998A, + 0x969A8B, + 0x95998A, + 0x95998A, + 0x95998A, + 0x919586, + 0x8D9182, + 0x8A9382, + 0x868D7D, + 0x868A7B, + 0x8A8B7D, + 0x8A8B7D, + 0x888679, + 0x848577, + 0x838577, + 0x848879, + 0x818878, + 0x7C8776, + 0x7D8675, + 0x7E8776, + 0x818576, + 0x818274, + 0x808173, + 0x818A79, + 0x7E8978, + 0x7D8877, + 0x7C8776, + 0x7C8977, + 0x7D8A78, + 0x7E8D7A, + 0x808F7C, + 0x7E8F7C, + 0x7D8E7B, + 0x7B8E7A, + 0x7A8D79, + 0x7A8D79, + 0x788B77, + 0x738974, + 0x738672, + 0x718471, + 0x657664, + 0x1F301E, + 0x000C00, + 0x000A00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000900, + 0x001101, + 0x000B00, + 0x5A6756, + 0x8D9888, + 0x919789, + 0x8E9585, + 0x999D8E, + 0x97998B, + 0x999B8D, + 0x9B9E8D, + 0x9B9E8D, + 0x9B9E8D, + 0x9B9E8D, + 0x9A9F8B, + 0x9CA08F, + 0x9BA290, + 0x9CA393, + 0x9BA292, + 0x989F8F, + 0x9A9E8F, + 0x9CA091, + 0x9CA091, + 0x9A9E8F, + 0x969A8B, + 0x9DA192, + 0xA3A597, + 0xA3A597, + 0xA2A496, + 0xA3A597, + 0xA4A698, + 0xA3A597, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA2A496, + 0x9EA092, + 0x999B8D, + 0x959789, + 0x959789, + 0x96988A, + 0x96988A, + 0x96988A, + 0x9CA091, + 0x9CA091, + 0x9B9F90, + 0x9B9F90, + 0x9B9F90, + 0x9CA091, + 0x9CA091, + 0x9A9E8F, + 0x9CA091, + 0x9EA293, + 0x9CA091, + 0x969A8B, + 0x95998A, + 0x999D8E, + 0x9A9E8F, + 0x969A8B, + 0x949D8C, + 0x919888, + 0x929687, + 0x98998B, + 0x9B998C, + 0x989488, + 0x949285, + 0x929385, + 0x929486, + 0x8F9384, + 0x8B9282, + 0x8D9182, + 0x8E9082, + 0x918F82, + 0x918D81, + 0x8F8D80, + 0x868A7B, + 0x818A79, + 0x808978, + 0x7F8877, + 0x7E8978, + 0x808B7A, + 0x828F7D, + 0x84917F, + 0x808F7C, + 0x7F8E7B, + 0x7C8D7A, + 0x7B8C79, + 0x7A8D79, + 0x788B77, + 0x768975, + 0x738672, + 0x758674, + 0x627361, + 0x2A3B29, + 0x000C00, + 0x000A00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000E00, + 0x000D00, + 0x000D00, + 0x657261, + 0x889383, + 0x848A7C, + 0x848B7B, + 0x888C7D, + 0x8F9183, + 0x8F9183, + 0x919385, + 0x929486, + 0x939685, + 0x949786, + 0x949887, + 0x949887, + 0x9A9C8E, + 0x9C9E90, + 0x9D9F91, + 0x9C9E90, + 0x9C9E90, + 0x9EA092, + 0x9D9F91, + 0x9A9C8E, + 0x999B8D, + 0x9FA193, + 0xA3A597, + 0xA2A496, + 0xA2A496, + 0xA3A597, + 0xA4A698, + 0xA3A597, + 0xA3A597, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA4A698, + 0xA1A395, + 0x9EA092, + 0x9A9C8E, + 0x96988A, + 0x939587, + 0x919385, + 0x95998A, + 0x969A8B, + 0x939788, + 0x8E9283, + 0x8D9182, + 0x909485, + 0x929687, + 0x919586, + 0x8A8E7F, + 0x898D7E, + 0x898D7E, + 0x898D7E, + 0x8A8E7F, + 0x8A8E7F, + 0x898D7E, + 0x878B7C, + 0x8F9183, + 0x919385, + 0x949688, + 0x949688, + 0x939587, + 0x929486, + 0x929486, + 0x929486, + 0x919385, + 0x919385, + 0x919385, + 0x919385, + 0x909284, + 0x8E9082, + 0x8D8F81, + 0x8C8E80, + 0x888E80, + 0x898F81, + 0x879282, + 0x869181, + 0x82907F, + 0x818F7E, + 0x80917F, + 0x819280, + 0x7D907D, + 0x7D907D, + 0x7D907D, + 0x7C8F7C, + 0x7B8E7B, + 0x798C79, + 0x788977, + 0x778878, + 0x708075, + 0x6D7D73, + 0x35453A, + 0x000B00, + 0x000F00, + 0x000700, + 0x000700, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000E00, + 0x001000, + 0x031102, + 0x737F71, + 0x8F9A8C, + 0x8E9488, + 0x8E9486, + 0x979B8D, + 0x96988B, + 0x96988B, + 0x96988B, + 0x97998C, + 0x96988A, + 0x96988A, + 0x95998A, + 0x949889, + 0x9D9F91, + 0xA0A294, + 0xA0A294, + 0x9EA092, + 0x9D9F91, + 0x9FA193, + 0x9D9F91, + 0x9A9C8E, + 0x999B8D, + 0x9FA193, + 0xA4A698, + 0xA3A597, + 0xA2A496, + 0xA3A597, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA0A294, + 0xA1A395, + 0xA3A597, + 0xA4A698, + 0xA6A89A, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA2A697, + 0xA4A899, + 0xA3A798, + 0xA0A495, + 0x9FA394, + 0xA1A596, + 0xA1A596, + 0x9EA293, + 0x9FA394, + 0x9EA293, + 0x9EA293, + 0x9EA293, + 0x9FA394, + 0x9FA394, + 0x9EA293, + 0x9DA192, + 0x97998B, + 0x989A8C, + 0x999B8D, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x989A8C, + 0x96988A, + 0x919385, + 0x919385, + 0x909284, + 0x909284, + 0x909284, + 0x8F9183, + 0x8F9183, + 0x8E9283, + 0x8C9284, + 0x8C9485, + 0x8A9585, + 0x889383, + 0x849281, + 0x82907F, + 0x80917F, + 0x80917F, + 0x7D907D, + 0x7D907D, + 0x7D907D, + 0x7C8F7C, + 0x7C8D7B, + 0x7A8B79, + 0x7A8877, + 0x798778, + 0x728277, + 0x6F7F75, + 0x3E4E43, + 0x000A00, + 0x001000, + 0x000700, + 0x000A00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000E01, + 0x021003, + 0x7E8A7E, + 0x8D978C, + 0x8F958B, + 0x8B9187, + 0x999C93, + 0x9B9D92, + 0x9B9D92, + 0x9B9D92, + 0x9B9D92, + 0x9B9D90, + 0x9A9C8F, + 0x989C8E, + 0x989C8E, + 0x989A8C, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x9B9D8F, + 0x9B9D8F, + 0x989A8C, + 0x9A9C8E, + 0xA0A294, + 0xA4A698, + 0xA3A597, + 0xA2A496, + 0xA4A698, + 0xA5A799, + 0xA4A698, + 0xA4A698, + 0xA4A698, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA6A89A, + 0xA6A89A, + 0xA9AB9D, + 0xA8AA9C, + 0xA5A799, + 0xA2A496, + 0x9D9F91, + 0x999B8D, + 0x96988A, + 0x949688, + 0x9A9E8F, + 0x9EA293, + 0xA0A495, + 0x9EA293, + 0x9EA293, + 0x9EA293, + 0x9CA091, + 0x989C8D, + 0x9CA091, + 0x9B9F90, + 0x999D8E, + 0x999D8E, + 0x999D8E, + 0x989C8D, + 0x969A8B, + 0x95998A, + 0x97998B, + 0x959789, + 0x949688, + 0x959789, + 0x97998B, + 0x97998B, + 0x949688, + 0x919385, + 0x929486, + 0x919385, + 0x909284, + 0x909284, + 0x909284, + 0x909284, + 0x919385, + 0x919586, + 0x868E7F, + 0x859080, + 0x849180, + 0x83907F, + 0x808E7D, + 0x7F8D7C, + 0x7D8E7C, + 0x7E8F7D, + 0x7F907E, + 0x7F907E, + 0x7F907E, + 0x808E7D, + 0x7F8D7C, + 0x7E8B7A, + 0x7C8978, + 0x7B8779, + 0x748479, + 0x718177, + 0x4C5C51, + 0x000900, + 0x001101, + 0x000700, + 0x000F00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D02, + 0x000D03, + 0x849086, + 0x889289, + 0x8D928B, + 0x83897F, + 0x91948B, + 0x8B8C84, + 0x8C8D85, + 0x8D8E86, + 0x8D8E86, + 0x8E9085, + 0x8E9085, + 0x8D9085, + 0x8D9085, + 0x919385, + 0x949688, + 0x96988A, + 0x96988A, + 0x989A8C, + 0x9B9D8F, + 0x9B9D8F, + 0x999B8D, + 0x9B9D8F, + 0xA1A395, + 0xA5A799, + 0xA4A698, + 0xA3A597, + 0xA5A799, + 0xA6A89A, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA5A799, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA7A99B, + 0xA8AA9C, + 0xA7A99B, + 0xA6A89A, + 0xA4A698, + 0xA2A496, + 0xA0A294, + 0x9EA092, + 0x9D9F91, + 0x949889, + 0x979B8C, + 0x999D8E, + 0x989C8D, + 0x989C8D, + 0x999D8E, + 0x979B8C, + 0x939788, + 0x969A8B, + 0x949889, + 0x919586, + 0x8F9384, + 0x8E9283, + 0x8D9182, + 0x8B8F80, + 0x898D7E, + 0x949688, + 0x909284, + 0x8E9082, + 0x8F9183, + 0x919385, + 0x919385, + 0x8D8F81, + 0x898B7D, + 0x909284, + 0x8F9183, + 0x8D8F81, + 0x8C8E80, + 0x8B8D7F, + 0x8C8E80, + 0x8D8F81, + 0x8D9182, + 0x889081, + 0x889383, + 0x889584, + 0x889584, + 0x869483, + 0x869483, + 0x869785, + 0x879886, + 0x80917F, + 0x80917F, + 0x818F7E, + 0x818F7E, + 0x808D7C, + 0x7F8C7B, + 0x7E8979, + 0x7C887A, + 0x78857B, + 0x728278, + 0x5A6A5F, + 0x000B00, + 0x001101, + 0x000700, + 0x001100, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000F02, + 0x001005, + 0x07140A, + 0x8D998F, + 0x8E988F, + 0x949992, + 0x8C9288, + 0x94978E, + 0x9A9B93, + 0x9B9C94, + 0x9C9D95, + 0x9D9E96, + 0x9EA095, + 0x9EA095, + 0x9DA095, + 0x9DA095, + 0x96988A, + 0x999B8D, + 0x9B9D8F, + 0x9B9D8F, + 0x9C9E90, + 0x9FA193, + 0xA0A294, + 0x9D9F91, + 0x9B9D8F, + 0xA1A395, + 0xA6A89A, + 0xA5A799, + 0xA4A698, + 0xA5A799, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA5A799, + 0xA4A698, + 0xA3A597, + 0xA3A597, + 0x9EA293, + 0xA0A495, + 0xA0A495, + 0x9EA293, + 0x9EA293, + 0xA0A495, + 0x9FA394, + 0x9DA192, + 0xA1A596, + 0x9FA394, + 0x9DA192, + 0x9CA091, + 0x9B9F90, + 0x9B9F90, + 0x9A9E8F, + 0x989C8D, + 0x999B8D, + 0x959789, + 0x929486, + 0x929486, + 0x949688, + 0x949688, + 0x919385, + 0x8D8F81, + 0x8F9183, + 0x8E9082, + 0x8B8D7F, + 0x898B7D, + 0x888A7C, + 0x888A7C, + 0x888A7C, + 0x888C7D, + 0x797F71, + 0x798172, + 0x788373, + 0x798474, + 0x778473, + 0x778473, + 0x788675, + 0x798776, + 0x80917F, + 0x80917F, + 0x82907F, + 0x82907F, + 0x818E7D, + 0x7F8C7B, + 0x7F8A7A, + 0x7C887A, + 0x78857B, + 0x738379, + 0x647469, + 0x021207, + 0x000F00, + 0x000700, + 0x001000, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x001003, + 0x122013, + 0x909C90, + 0x929C91, + 0x989E94, + 0x999F95, + 0x9B9E95, + 0x9A9C91, + 0x9A9C91, + 0x9B9D92, + 0x9C9E93, + 0x9C9E91, + 0x9C9E91, + 0x9B9F91, + 0x9B9F91, + 0x9C9E90, + 0x9FA193, + 0xA0A294, + 0x9EA092, + 0x9EA092, + 0xA0A294, + 0x9FA193, + 0x9D9F91, + 0x9C9E90, + 0xA2A496, + 0xA6A89A, + 0xA6A89A, + 0xA5A799, + 0xA6A89A, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xABAD9F, + 0xA9AB9D, + 0xA6A89A, + 0xA3A597, + 0x9EA092, + 0x9A9C8E, + 0x97998B, + 0x959789, + 0x9DA192, + 0x9EA293, + 0x9DA192, + 0x999D8E, + 0x999D8E, + 0x9CA091, + 0x9CA091, + 0x9B9F90, + 0x9EA293, + 0x9DA192, + 0x9B9F90, + 0x9CA091, + 0x9DA192, + 0x9FA394, + 0x9FA394, + 0x9FA394, + 0x9EA092, + 0x9C9E90, + 0x999B8D, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x96988A, + 0x949688, + 0x959789, + 0x949688, + 0x929486, + 0x909284, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8D8F81, + 0x8D9183, + 0x8E9284, + 0x8D9385, + 0x8C9284, + 0x879282, + 0x869181, + 0x859382, + 0x869483, + 0x819280, + 0x819280, + 0x819280, + 0x80917F, + 0x818F7E, + 0x7F8D7C, + 0x7E8B7A, + 0x7D897B, + 0x76867B, + 0x738379, + 0x6B7B70, + 0x0D1D12, + 0x000E00, + 0x000700, + 0x000C00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000900, + 0x011202, + 0x1D2B1C, + 0x8C988A, + 0x8D988A, + 0x8D9387, + 0x989E90, + 0x95998B, + 0x9C9E91, + 0x9D9F92, + 0x9EA093, + 0xA0A295, + 0xA1A395, + 0xA2A496, + 0xA1A596, + 0xA2A697, + 0x9EA092, + 0xA1A395, + 0xA1A395, + 0x9FA193, + 0x9EA092, + 0x9FA193, + 0x9EA092, + 0x9B9D8F, + 0x9D9F91, + 0xA3A597, + 0xA7A99B, + 0xA6A89A, + 0xA5A799, + 0xA7A99B, + 0xA8AA9C, + 0xA7A99B, + 0xA7A99B, + 0xA7A99B, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA9AB9D, + 0xA9AB9D, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA7A99B, + 0xA7A99B, + 0xA6A89A, + 0xA5A799, + 0xA4A698, + 0x999D8E, + 0x9B9F90, + 0x999D8E, + 0x969A8B, + 0x95998A, + 0x979B8C, + 0x989C8D, + 0x969A8B, + 0x979B8C, + 0x95998A, + 0x949889, + 0x949889, + 0x969A8B, + 0x989C8D, + 0x999D8E, + 0x999D8E, + 0x9EA092, + 0x9D9F91, + 0x9B9D8F, + 0x9A9C8E, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x989A8C, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x949688, + 0x939587, + 0x929486, + 0x929486, + 0x919185, + 0x929286, + 0x919386, + 0x8F9385, + 0x8B9183, + 0x899182, + 0x879483, + 0x889584, + 0x829381, + 0x829381, + 0x829381, + 0x819280, + 0x80917F, + 0x7E8F7D, + 0x7C8D7B, + 0x7B8C7C, + 0x77877C, + 0x738379, + 0x6E7E73, + 0x1A2A1F, + 0x000E00, + 0x000B00, + 0x000900, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x061705, + 0x283625, + 0x8A9786, + 0x859080, + 0x7F8577, + 0x909787, + 0x8A8E7F, + 0x909284, + 0x919385, + 0x949688, + 0x97998B, + 0x9A9D8C, + 0x9C9F8E, + 0x9DA190, + 0x9DA190, + 0x9EA092, + 0xA1A395, + 0xA2A496, + 0xA0A294, + 0xA0A294, + 0xA2A496, + 0xA1A395, + 0x9FA193, + 0x9D9F91, + 0xA3A597, + 0xA7A99B, + 0xA7A99B, + 0xA6A89A, + 0xA7A99B, + 0xA8AA9C, + 0xA7A99B, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA8AA9C, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA8AA9C, + 0xA7A99B, + 0xA6A89A, + 0xA5A799, + 0xA4A698, + 0xA5A99A, + 0xA7AB9C, + 0xA7AB9C, + 0xA4A899, + 0xA3A798, + 0xA4A899, + 0xA3A798, + 0xA0A495, + 0xA2A697, + 0xA0A495, + 0x9EA293, + 0x9DA192, + 0x9DA192, + 0x9EA293, + 0x9FA394, + 0x9EA293, + 0x9C9E90, + 0x9D9F91, + 0x9C9E90, + 0x9A9C8E, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x989A8C, + 0x939587, + 0x939587, + 0x939587, + 0x939587, + 0x929486, + 0x919385, + 0x909284, + 0x909183, + 0x908E82, + 0x938F84, + 0x919185, + 0x8F9184, + 0x8E9284, + 0x8A9283, + 0x899484, + 0x8A9786, + 0x829381, + 0x829381, + 0x819481, + 0x809380, + 0x7D927F, + 0x7B907D, + 0x798E7B, + 0x7A8C7C, + 0x77897D, + 0x74847A, + 0x6F7F74, + 0x233328, + 0x000E00, + 0x000E00, + 0x000700, + 0x000E00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000E01, + 0x000800, + 0x404E41, + 0x8D998D, + 0x8F998E, + 0x8E948A, + 0x959B91, + 0x95988F, + 0x999B90, + 0x9A9C91, + 0x9C9E93, + 0x9B9D92, + 0x999B90, + 0x9A9C91, + 0x9CA092, + 0x9FA395, + 0xA0A294, + 0xA0A294, + 0xA0A294, + 0x9FA193, + 0xA1A395, + 0xA3A597, + 0xA1A395, + 0x9C9E90, + 0x9EA092, + 0xA3A597, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA8AA9C, + 0xA9AB9D, + 0xA8AA9C, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xADAFA1, + 0xA1A395, + 0xA7A99B, + 0x939587, + 0x929486, + 0x929486, + 0x949688, + 0x9EA092, + 0x989A8C, + 0x919385, + 0x989A8C, + 0x989A8C, + 0x929486, + 0x97998B, + 0x959789, + 0x999B8D, + 0x9C9E90, + 0x9B9D8F, + 0x989A8C, + 0x989A8C, + 0x9C9E90, + 0xA0A294, + 0x9FA193, + 0x9EA092, + 0x9C9E90, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x96988A, + 0x96988A, + 0x96988A, + 0x959789, + 0x949688, + 0x939587, + 0x939587, + 0x929486, + 0x8F9384, + 0x8F9384, + 0x8D9484, + 0x8D9484, + 0x8A9584, + 0x899684, + 0x889784, + 0x859683, + 0x829581, + 0x829581, + 0x7F9580, + 0x7F9580, + 0x7E947F, + 0x7C927D, + 0x7D907C, + 0x7C8F7C, + 0x798A78, + 0x778878, + 0x708171, + 0x2E3F2F, + 0x011202, + 0x000900, + 0x000700, + 0x000F00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000800, + 0x445245, + 0x8D998D, + 0x909A8F, + 0x91978D, + 0x999F95, + 0x999C93, + 0x9C9E93, + 0x9C9E93, + 0x9B9D92, + 0x9C9E93, + 0x9D9F94, + 0x9FA196, + 0x9FA395, + 0xA0A496, + 0xA4A698, + 0xA4A698, + 0xA2A496, + 0xA0A294, + 0xA0A294, + 0xA2A496, + 0x9EA092, + 0x989A8C, + 0x9FA193, + 0xA3A597, + 0xA6A89A, + 0xA6A89A, + 0xA6A89A, + 0xA8AA9C, + 0xA9AB9D, + 0xA8AA9C, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA6A89A, + 0xA7A99B, + 0xACAEA0, + 0xA5A799, + 0xB0B2A4, + 0xA3A597, + 0xA6A89A, + 0xAAAC9E, + 0xA3A597, + 0xA9AB9D, + 0xA7A99B, + 0xA3A597, + 0xA6A89A, + 0xA6A89A, + 0xA3A597, + 0xA3A597, + 0x9D9F91, + 0x9D9F91, + 0x9B9D8F, + 0x97998B, + 0x939587, + 0x919385, + 0x939587, + 0x949688, + 0x9C9E90, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9B9D8F, + 0x9B9D8F, + 0x9B9D8F, + 0x97998B, + 0x97998B, + 0x96988A, + 0x959789, + 0x949688, + 0x949688, + 0x939587, + 0x939587, + 0x909485, + 0x909485, + 0x8E9585, + 0x8C9584, + 0x8A9584, + 0x899684, + 0x869784, + 0x869784, + 0x829581, + 0x829581, + 0x809681, + 0x7F9580, + 0x80937F, + 0x7F927E, + 0x7D907C, + 0x7D907D, + 0x798A78, + 0x788979, + 0x728373, + 0x3C4D3D, + 0x001101, + 0x000B00, + 0x000800, + 0x000D00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x021205, + 0x000E03, + 0x4E5C4F, + 0x8A968A, + 0x879186, + 0x83897F, + 0x888E84, + 0x868980, + 0x919388, + 0x8F9186, + 0x8D8F84, + 0x8F9186, + 0x93958A, + 0x95978C, + 0x94988A, + 0x929688, + 0x919385, + 0x939587, + 0x949688, + 0x96988A, + 0x9C9E90, + 0xA2A496, + 0xA1A395, + 0x9EA092, + 0x9FA193, + 0xA4A698, + 0xA7A99B, + 0xA6A89A, + 0xA6A89A, + 0xA8AA9C, + 0xA9AB9D, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xAAAC9E, + 0xABAD9F, + 0xA6A89A, + 0xAEB0A2, + 0xA3A597, + 0xA4A698, + 0xA8AA9C, + 0xA4A698, + 0xA3A597, + 0xA6A89A, + 0xA6A89A, + 0xA2A496, + 0xA4A698, + 0xA5A799, + 0x9FA193, + 0xA6A89A, + 0xA5A799, + 0xA2A496, + 0xA0A294, + 0x9EA092, + 0x9FA193, + 0xA0A294, + 0xA1A395, + 0x9C9E90, + 0x9EA092, + 0x9FA193, + 0x9EA092, + 0x9B9D8F, + 0x999B8D, + 0x999B8D, + 0x9A9C8E, + 0x97998B, + 0x97998B, + 0x96988A, + 0x96988A, + 0x959789, + 0x949688, + 0x949688, + 0x939587, + 0x919586, + 0x919586, + 0x8D9685, + 0x8D9685, + 0x8A9785, + 0x899684, + 0x869784, + 0x869784, + 0x839682, + 0x839682, + 0x829581, + 0x829581, + 0x819480, + 0x7F927E, + 0x7E917D, + 0x7D907D, + 0x7A8B79, + 0x788979, + 0x738474, + 0x516252, + 0x000F00, + 0x000D00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000E01, + 0x000E03, + 0x5A685B, + 0x8F9B8F, + 0x909A8F, + 0x90968C, + 0x989E94, + 0x989B92, + 0x9EA095, + 0x9D9F94, + 0x9C9E93, + 0x9EA095, + 0xA0A297, + 0xA1A398, + 0xA0A496, + 0x9FA395, + 0xA0A294, + 0xA1A395, + 0xA0A294, + 0x9FA193, + 0xA0A294, + 0xA3A597, + 0xA0A294, + 0x9B9D8F, + 0xA0A294, + 0xA4A698, + 0xA7A99B, + 0xA6A89A, + 0xA6A89A, + 0xA8AA9C, + 0xA9AB9D, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xACAEA0, + 0xADAFA1, + 0xAAAC9E, + 0xA6A89A, + 0xA8AA9C, + 0x9EA092, + 0x999B8D, + 0x9D9F91, + 0x979B8C, + 0x919586, + 0x969A8B, + 0x999D8E, + 0x909485, + 0x939788, + 0x989C8D, + 0x8F9384, + 0x929687, + 0x939788, + 0x949889, + 0x949889, + 0x939788, + 0x939788, + 0x969A8B, + 0x989C8D, + 0x959789, + 0x97998B, + 0x989A8C, + 0x97998B, + 0x949688, + 0x949688, + 0x96988A, + 0x999B8D, + 0x989A8C, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x96988A, + 0x959789, + 0x949688, + 0x949688, + 0x909787, + 0x909787, + 0x8E9786, + 0x8E9786, + 0x8A9785, + 0x8A9785, + 0x879885, + 0x869784, + 0x849783, + 0x839682, + 0x839682, + 0x829581, + 0x829380, + 0x81927F, + 0x80917E, + 0x7F907E, + 0x7C8D7B, + 0x798A7A, + 0x738474, + 0x637464, + 0x000D00, + 0x000E00, + 0x000C00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x001005, + 0x657366, + 0x8F9B8F, + 0x909A8F, + 0x91978D, + 0x9AA096, + 0x9B9E95, + 0x9D9F94, + 0x9EA095, + 0xA0A297, + 0xA0A297, + 0x9EA095, + 0x9EA095, + 0x9EA294, + 0x9FA395, + 0xA1A395, + 0xA1A395, + 0xA0A294, + 0x9FA193, + 0xA1A395, + 0xA3A597, + 0xA0A294, + 0x9B9D8F, + 0xA0A294, + 0xA5A799, + 0xA8AA9C, + 0xA7A99B, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA8AA9C, + 0xABAD9F, + 0xA8AA9C, + 0xABAD9F, + 0xAEB0A2, + 0xAAAC9E, + 0xA2A496, + 0xA7A99B, + 0xACB0A1, + 0xA3A798, + 0xA8AC9D, + 0xAAAE9F, + 0xA1A596, + 0xA4A899, + 0xAAAE9F, + 0xA4A899, + 0x9CA091, + 0x9FA394, + 0xA2A697, + 0xA0A495, + 0x9B9F90, + 0x989C8D, + 0x989C8D, + 0x9A9E8F, + 0x939587, + 0x949688, + 0x949688, + 0x939587, + 0x929486, + 0x949688, + 0x999B8D, + 0x9D9F91, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x96988A, + 0x959789, + 0x949889, + 0x919888, + 0x909988, + 0x8D9887, + 0x8D9887, + 0x8A9986, + 0x8A9986, + 0x879885, + 0x879885, + 0x849783, + 0x849783, + 0x849783, + 0x839682, + 0x839481, + 0x829380, + 0x83927F, + 0x82907F, + 0x7F907E, + 0x7B8C7C, + 0x728373, + 0x6E7F6F, + 0x001000, + 0x000D00, + 0x000D00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000E01, + 0x041409, + 0x6F7D70, + 0x8B978B, + 0x889287, + 0x868C82, + 0x8B9187, + 0x8B8E85, + 0x8E9085, + 0x919388, + 0x94968B, + 0x93958A, + 0x919388, + 0x8F9186, + 0x909486, + 0x929688, + 0x919385, + 0x939587, + 0x959789, + 0x97998B, + 0x9D9F91, + 0xA2A496, + 0xA2A496, + 0x9EA092, + 0xA1A395, + 0xA6A89A, + 0xA8AA9C, + 0xA7A99B, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA7A99B, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xA3A597, + 0xA8AA9C, + 0xA2A496, + 0xABAD9F, + 0xADAFA1, + 0xAFB1A3, + 0xA7A99B, + 0xAEB0A2, + 0xA9AD9E, + 0xA4A899, + 0xA5A99A, + 0xA7AB9C, + 0xA3A798, + 0xA3A798, + 0xA5A99A, + 0xA4A899, + 0xA3A798, + 0xA4A899, + 0xA5A99A, + 0xA4A899, + 0xA1A596, + 0x9EA293, + 0x9DA192, + 0x9DA192, + 0xA3A597, + 0xA0A294, + 0x9D9F91, + 0x9A9C8E, + 0x999B8D, + 0x9A9C8E, + 0x9C9E90, + 0x9D9F91, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x96988A, + 0x95998A, + 0x929989, + 0x919A89, + 0x8E9988, + 0x8E9988, + 0x8B9A87, + 0x8A9986, + 0x889986, + 0x879885, + 0x859884, + 0x859884, + 0x869784, + 0x859683, + 0x869582, + 0x859481, + 0x83927F, + 0x839180, + 0x80917F, + 0x7D8E7E, + 0x738474, + 0x738474, + 0x091A0A, + 0x000C00, + 0x000D00, + 0x000800, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x041409, + 0x79877A, + 0x909C90, + 0x909A8F, + 0x93998F, + 0x9BA197, + 0x9DA097, + 0x9C9E93, + 0x9D9F94, + 0x9FA196, + 0xA0A297, + 0xA1A398, + 0xA1A398, + 0xA0A496, + 0xA0A496, + 0xA5A799, + 0xA5A799, + 0xA3A597, + 0xA1A395, + 0xA2A496, + 0xA3A597, + 0x9FA193, + 0x999B8D, + 0xA1A395, + 0xA6A89A, + 0xA9AB9D, + 0xA7A99B, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA7A99B, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xA1A395, + 0xA3A597, + 0x97998B, + 0x9EA092, + 0x9B9D8F, + 0x9FA193, + 0x96988A, + 0x9EA092, + 0xA1A898, + 0xA2A999, + 0xA1A898, + 0xA3AA9A, + 0xA6AD9D, + 0xA0A797, + 0x9CA393, + 0xA0A797, + 0xA4AB9B, + 0xA0A797, + 0x9CA393, + 0x9DA494, + 0xA1A898, + 0xA4AB9B, + 0xA2A999, + 0xA2A697, + 0xA1A596, + 0x9FA193, + 0x9C9E90, + 0x9C9E90, + 0x9EA092, + 0x9FA193, + 0x9D9F91, + 0x9A9C8E, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x95998A, + 0x929B8A, + 0x909B8A, + 0x8E9B89, + 0x8D9A88, + 0x8B9A87, + 0x8A9986, + 0x889986, + 0x889986, + 0x869985, + 0x869985, + 0x869784, + 0x869784, + 0x869582, + 0x859481, + 0x859280, + 0x849180, + 0x7F907E, + 0x7F9080, + 0x758676, + 0x778878, + 0x172818, + 0x000E00, + 0x000E00, + 0x000700, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000F02, + 0x09190E, + 0x808E81, + 0x919D91, + 0x8E988D, + 0x8F958B, + 0x969C92, + 0x979A91, + 0x9C9E93, + 0x9B9D92, + 0x9B9D92, + 0x9EA095, + 0xA2A499, + 0xA4A69B, + 0xA2A698, + 0xA0A496, + 0xA1A395, + 0xA2A496, + 0xA1A395, + 0xA0A294, + 0xA2A496, + 0xA5A799, + 0xA2A496, + 0x9D9F91, + 0xA2A496, + 0xA6A89A, + 0xA9AB9D, + 0xA8AA9C, + 0xA7A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA7A99B, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0x9EA092, + 0x9EA092, + 0x8C8E80, + 0x909284, + 0x8A8C7E, + 0x8F9183, + 0x858779, + 0x8F9183, + 0x7C8373, + 0x838A7A, + 0x818878, + 0x848B7B, + 0x8B9282, + 0x818878, + 0x777E6E, + 0x7F8676, + 0x8A9181, + 0x7F8676, + 0x767D6D, + 0x777E6E, + 0x7F8676, + 0x848B7B, + 0x818878, + 0x7D8172, + 0x868A7B, + 0x87897B, + 0x898B7D, + 0x919385, + 0x9B9D8F, + 0xA0A294, + 0x9FA193, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x9A9C8E, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x969A8B, + 0x929B8A, + 0x909B8A, + 0x8E9B89, + 0x8E9B89, + 0x8C9B88, + 0x8B9A87, + 0x889986, + 0x889986, + 0x869985, + 0x869985, + 0x879885, + 0x869784, + 0x879683, + 0x859481, + 0x859280, + 0x859281, + 0x7E8F7D, + 0x809181, + 0x778878, + 0x798A7A, + 0x223323, + 0x000F00, + 0x000E00, + 0x000700, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000900, + 0x021303, + 0x8E9C8F, + 0x8C988C, + 0x8C988E, + 0x8B958C, + 0x919891, + 0x939A93, + 0x929791, + 0x90958F, + 0x8F948D, + 0x8F948D, + 0x90988B, + 0x90988B, + 0x8E9687, + 0x8D9385, + 0x8F9384, + 0x919385, + 0x929486, + 0x96988A, + 0x9A9C8E, + 0x9EA092, + 0x9FA193, + 0x9FA193, + 0xA3A597, + 0xA7A99B, + 0xA9AB9D, + 0xA8AA9C, + 0xA7A99B, + 0xA9AB9D, + 0xAAAC9E, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xABAD9F, + 0xABAD9F, + 0xA8AA9C, + 0xACAEA0, + 0xADAFA1, + 0xABAD9F, + 0xAAAC9E, + 0xAAAC9E, + 0xA9AB9D, + 0xA6A89A, + 0xACAEA0, + 0xAAAC9E, + 0xA6A89A, + 0xA4A698, + 0xA7A99B, + 0xAAAC9E, + 0xA8AA9C, + 0xA3A597, + 0xA5A799, + 0xA3A597, + 0xA1A395, + 0xA0A294, + 0xA0A294, + 0x9FA193, + 0x9D9F91, + 0x9B9D8F, + 0x939587, + 0x8F9183, + 0x8D8F81, + 0x919385, + 0x9A9C8E, + 0x9FA193, + 0x9D9F91, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x949B8B, + 0x8F9C8A, + 0x8C9D8A, + 0x8C9D8A, + 0x8C9D8A, + 0x8B9C89, + 0x8A9B88, + 0x899A87, + 0x899A87, + 0x879885, + 0x879885, + 0x879885, + 0x869784, + 0x869784, + 0x859683, + 0x859683, + 0x849583, + 0x819282, + 0x829285, + 0x819184, + 0x738376, + 0x354538, + 0x021205, + 0x000700, + 0x000E00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000D00, + 0x051302, + 0x142213, + 0x96A296, + 0x949E93, + 0x939D94, + 0x929991, + 0x969B95, + 0x989D97, + 0x9EA09B, + 0x9EA09B, + 0x9FA299, + 0xA0A39A, + 0xA0A69A, + 0xA1A79B, + 0xA0A698, + 0xA2A698, + 0xA2A697, + 0xA3A597, + 0xA2A496, + 0xA3A597, + 0xA4A698, + 0xA3A597, + 0xA1A395, + 0x9FA193, + 0xA3A597, + 0xA7A99B, + 0xA9AB9D, + 0xA8AA9C, + 0xA8AA9C, + 0xAAAC9E, + 0xAAAC9E, + 0xA9AB9D, + 0xA9AB9D, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xAAAC9E, + 0xA6A89A, + 0x9FA193, + 0x999B8D, + 0x9B9D8F, + 0xA2A496, + 0xA6A89A, + 0xA6A89A, + 0x9EA092, + 0x9EA092, + 0xA1A395, + 0xA8AA9C, + 0xAEB0A2, + 0xB0B2A4, + 0xADAFA1, + 0xAAAC9E, + 0xA7A99B, + 0xA5A799, + 0xA3A597, + 0xA3A597, + 0xA2A496, + 0xA2A496, + 0xA0A294, + 0x9EA092, + 0xA3A597, + 0x9FA193, + 0x9C9E90, + 0x9D9F91, + 0xA1A395, + 0xA2A496, + 0xA0A294, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9D9F91, + 0x9C9E90, + 0x9B9D8F, + 0x9A9C8E, + 0x999B8D, + 0x979B8C, + 0x929F8D, + 0x91A08D, + 0x909F8C, + 0x8F9E8B, + 0x8B9C89, + 0x8A9B88, + 0x899A87, + 0x889986, + 0x879885, + 0x879885, + 0x879885, + 0x869784, + 0x869784, + 0x859683, + 0x849783, + 0x849784, + 0x819282, + 0x819184, + 0x809083, + 0x758578, + 0x425343, + 0x001000, + 0x000A00, + 0x000F00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000C00, + 0x000E00, + 0x1A261A, + 0x909A91, + 0x8E958D, + 0x8E958D, + 0x8B9089, + 0x92948F, + 0x949691, + 0x94958F, + 0x969791, + 0x989991, + 0x999A92, + 0x999C91, + 0x999C91, + 0x9A9E90, + 0x9B9F91, + 0x9FA193, + 0x9FA193, + 0xA1A395, + 0xA3A597, + 0xA4A698, + 0xA4A698, + 0xA1A395, + 0x9FA193, + 0xA3A597, + 0xA7A99B, + 0xA9AB9D, + 0xA8AA9C, + 0xA8AA9C, + 0xAAAC9E, + 0xAAAC9E, + 0xA9AB9D, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xA8AA9C, + 0xA2A496, + 0x9D9F91, + 0x9EA092, + 0x9EA092, + 0x9A9C8E, + 0x939587, + 0x96988A, + 0x949688, + 0x989A8C, + 0xA2A496, + 0xA7A99B, + 0xA5A799, + 0xA2A496, + 0xA3A597, + 0xAAAC9E, + 0xA8AA9C, + 0xA7A99B, + 0xA6A89A, + 0xA7A99B, + 0xA6A89A, + 0xA5A799, + 0xA3A597, + 0xA3A597, + 0xA1A395, + 0x9EA092, + 0x9C9E90, + 0x9C9E90, + 0x9B9D8F, + 0x999B8D, + 0x97998B, + 0x9C9E90, + 0x9B9D8F, + 0x9B9D8F, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x949889, + 0x8E9988, + 0x8C9987, + 0x8B9A87, + 0x8B9A87, + 0x8B9A87, + 0x8C9B88, + 0x8D9C89, + 0x8E9D8A, + 0x889986, + 0x889986, + 0x879885, + 0x879885, + 0x859884, + 0x859884, + 0x849783, + 0x849784, + 0x829383, + 0x819184, + 0x7E8F7F, + 0x798A7A, + 0x566757, + 0x000C00, + 0x001000, + 0x000E00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000C00, + 0x030F03, + 0x2C362D, + 0x929991, + 0x91968F, + 0x949993, + 0x92948F, + 0x9A9B96, + 0x9C9D98, + 0x979691, + 0x9A9994, + 0x9C9C94, + 0x9C9C94, + 0x9A9C8F, + 0x999B8E, + 0x9A9C8E, + 0x9D9F91, + 0x949688, + 0x96988A, + 0x9A9C8E, + 0x9FA193, + 0xA2A496, + 0xA2A496, + 0xA0A294, + 0x9EA092, + 0xA3A597, + 0xA8AA9C, + 0xAAAC9E, + 0xA8AA9C, + 0xA8AA9C, + 0xAAAC9E, + 0xABAD9F, + 0xA9AB9D, + 0xA9AD9E, + 0xA9AD9E, + 0xA9AD9E, + 0xA9AD9E, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xA6AA9B, + 0xA7AB9C, + 0xA8AC9D, + 0xA8AC9D, + 0xAAAE9F, + 0xACB0A1, + 0xA9AD9E, + 0xA3A798, + 0xABAFA0, + 0xA4A899, + 0xA4A899, + 0xABAFA0, + 0xADB1A2, + 0xAAAE9F, + 0xAAAE9F, + 0xAEB2A3, + 0xA3A798, + 0xA2A697, + 0xA1A596, + 0xA1A596, + 0xA1A596, + 0xA1A596, + 0xA0A495, + 0x9FA394, + 0xA4A698, + 0xA4A698, + 0xA3A597, + 0xA1A395, + 0x9FA193, + 0x9EA092, + 0x9FA193, + 0x9FA193, + 0x9C9E90, + 0x9B9D8F, + 0x9A9C8E, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x97998B, + 0x95998A, + 0x919A89, + 0x8E9988, + 0x8D9A88, + 0x8C9987, + 0x8D9A88, + 0x8E9B89, + 0x8E9D8A, + 0x8E9D8A, + 0x889986, + 0x889986, + 0x889986, + 0x879885, + 0x869985, + 0x859884, + 0x859884, + 0x859885, + 0x859684, + 0x819282, + 0x7D8E7E, + 0x7C8D7D, + 0x697A6A, + 0x000B00, + 0x021301, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000C00, + 0x041004, + 0x3D473E, + 0x929992, + 0x919690, + 0x979C96, + 0x949691, + 0x9C9D98, + 0x9D9E99, + 0x9D9C97, + 0xA09F9A, + 0xA2A298, + 0xA2A298, + 0xA0A295, + 0x9FA194, + 0xA1A493, + 0xA3A695, + 0x9D9F91, + 0x9EA092, + 0xA1A395, + 0xA4A698, + 0xA6A89A, + 0xA4A698, + 0xA1A395, + 0x9D9F91, + 0xA4A698, + 0xA8AA9C, + 0xAAAC9E, + 0xA9AB9D, + 0xA8AA9C, + 0xAAAC9E, + 0xABAD9F, + 0xA9AB9D, + 0xA9AD9E, + 0xA9AD9E, + 0xA9AD9E, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xABAFA0, + 0xABAFA0, + 0xAAAE9F, + 0xA4A899, + 0x9CA091, + 0x989C8D, + 0x9CA091, + 0xA2A697, + 0xA5A99A, + 0xA6AA9B, + 0xA0A495, + 0x9FA394, + 0xA3A798, + 0xA4A899, + 0xA1A596, + 0xA2A697, + 0xA7AB9C, + 0xA6AA9B, + 0xA5A99A, + 0xA4A899, + 0xA4A899, + 0xA5A99A, + 0xA5A99A, + 0xA4A899, + 0xA2A697, + 0x9EA092, + 0x9FA193, + 0x9FA193, + 0x9EA092, + 0x9C9E90, + 0x9C9E90, + 0x9D9F91, + 0x9FA193, + 0x9C9E90, + 0x9B9D8F, + 0x9B9D8F, + 0x9A9C8E, + 0x999B8D, + 0x999B8D, + 0x999B8D, + 0x999D8E, + 0x989F8F, + 0x969F8E, + 0x939E8D, + 0x919C8B, + 0x909B8A, + 0x8F9A89, + 0x8D9A88, + 0x8D9A88, + 0x8B9A87, + 0x8B9A87, + 0x889986, + 0x889986, + 0x869985, + 0x869985, + 0x859884, + 0x859885, + 0x879886, + 0x819282, + 0x7E8F7F, + 0x7E8F7F, + 0x768775, + 0x000F00, + 0x001100, + 0x000700, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000C00, + 0x000B01, + 0x465149, + 0x8A948C, + 0x8B928B, + 0x919793, + 0x8B908C, + 0x939590, + 0x92948F, + 0x93948E, + 0x959690, + 0x97998E, + 0x999B90, + 0x999D8E, + 0x9A9E8F, + 0x9B9F8E, + 0x9CA08F, + 0x9EA092, + 0x9FA193, + 0xA2A496, + 0xA4A698, + 0xA6A89A, + 0xA4A698, + 0xA0A294, + 0x9D9F91, + 0xA4A698, + 0xA8AA9C, + 0xAAAC9E, + 0xA9AB9D, + 0xA9AB9D, + 0xABAD9F, + 0xABAD9F, + 0xAAAC9E, + 0xA9AD9E, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xAAAE9F, + 0xABAFA0, + 0xABAFA0, + 0xABAFA0, + 0xAAAE9F, + 0xACB0A1, + 0xA9AD9E, + 0x9FA394, + 0x979B8C, + 0x979B8C, + 0x9A9E8F, + 0x9CA091, + 0x9A9E8F, + 0x9A9E8F, + 0x9B9F90, + 0x9A9E8F, + 0x999D8E, + 0x979B8C, + 0x95998A, + 0x949889, + 0x949889, + 0x939788, + 0x929687, + 0x929687, + 0x939788, + 0x939788, + 0x929687, + 0x909485, + 0x959789, + 0x959789, + 0x959789, + 0x939587, + 0x919385, + 0x919385, + 0x919385, + 0x929486, + 0x939587, + 0x929486, + 0x919385, + 0x909284, + 0x909284, + 0x919385, + 0x919385, + 0x929486, + 0x8F9686, + 0x909787, + 0x909988, + 0x919A89, + 0x909B8A, + 0x909B8A, + 0x8F9C8A, + 0x8F9C8A, + 0x8B9A87, + 0x8B9A87, + 0x899A87, + 0x889986, + 0x879A86, + 0x869985, + 0x869985, + 0x869985, + 0x889987, + 0x819280, + 0x819280, + 0x80917F, + 0x7C8D7B, + 0x0B1C0A, + 0x000F00, + 0x000800, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000D00, + 0x031006, + 0x556259, + 0x8E9993, + 0x8F9893, + 0x97A09B, + 0x919793, + 0x999E98, + 0x969B95, + 0x979A93, + 0x979A93, + 0x989B90, + 0x9A9D92, + 0x9BA292, + 0x9CA393, + 0x9CA48F, + 0x9EA291, + 0x999D8C, + 0x9B9D8F, + 0x9EA092, + 0xA1A395, + 0xA3A597, + 0xA3A597, + 0xA0A294, + 0x9EA092, + 0xA4A698, + 0xA8AA9C, + 0xAAAC9E, + 0xA9AB9D, + 0xA9AB9D, + 0xABAD9F, + 0xABAD9F, + 0xAAAC9E, + 0xA8AF9F, + 0xA8AF9F, + 0xA8AF9F, + 0xA8AF9F, + 0xA8AF9F, + 0xA9B0A0, + 0xA9B0A0, + 0xA9B0A0, + 0xA0A797, + 0xA5AC9C, + 0xA9B0A0, + 0xA8AF9F, + 0xA7AE9E, + 0xA9B0A0, + 0xAAB1A1, + 0xA9B0A0, + 0xA4AB9B, + 0xA9B0A0, + 0xA9B0A0, + 0xA3AA9A, + 0xA2A999, + 0xA6AD9D, + 0xA6AD9D, + 0xA1A898, + 0xA4AB9B, + 0xA3AA9A, + 0xA1A898, + 0xA1A898, + 0xA2A999, + 0xA2A999, + 0xA0A797, + 0xA1A596, + 0x9EA293, + 0x9EA092, + 0x9C9E90, + 0x9A9C8E, + 0x999B8D, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x929486, + 0x919385, + 0x8F9183, + 0x8E9082, + 0x8D8F81, + 0x8D8F81, + 0x8E9082, + 0x8F9183, + 0x888F7F, + 0x8A9181, + 0x8D9484, + 0x909787, + 0x929B8A, + 0x939C8B, + 0x919C8B, + 0x919C8B, + 0x8C9B88, + 0x8C9B88, + 0x899A87, + 0x899A87, + 0x879A86, + 0x879A86, + 0x849A85, + 0x869985, + 0x879A87, + 0x80917F, + 0x849583, + 0x819280, + 0x7F907E, + 0x1A2B19, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000F04, + 0x586760, + 0x8D9A93, + 0x919C96, + 0x9AA59F, + 0x949D98, + 0x9DA49D, + 0x9AA19A, + 0xA0A59E, + 0x9EA39C, + 0x9DA397, + 0x9EA496, + 0xA0A998, + 0xA1AA97, + 0x9FA893, + 0x9EA593, + 0xA2A695, + 0xA3A597, + 0xA3A597, + 0xA4A698, + 0xA5A799, + 0xA4A698, + 0xA1A395, + 0x9EA092, + 0xA4A698, + 0xA8AA9C, + 0xABAD9F, + 0xA9AB9D, + 0xA9AB9D, + 0xABAD9F, + 0xABAD9F, + 0xAAAC9E, + 0xA8AF9F, + 0xA8AF9F, + 0xA8AF9F, + 0xA8AF9F, + 0xA9B0A0, + 0xA9B0A0, + 0xA9B0A0, + 0xA9B0A0, + 0xABB2A2, + 0xA8AF9F, + 0x9FA696, + 0x959C8C, + 0x919888, + 0x939A8A, + 0x959C8C, + 0x949B8B, + 0x929989, + 0x99A090, + 0x979E8E, + 0x8F9686, + 0x929989, + 0xA0A797, + 0xA8AF9F, + 0xA6AD9D, + 0xA6AD9D, + 0xA4AB9B, + 0xA3AA9A, + 0xA2A999, + 0xA3AA9A, + 0xA3AA9A, + 0xA1A898, + 0xA2A697, + 0xA5A99A, + 0xA3A597, + 0xA1A395, + 0xA0A294, + 0xA0A294, + 0xA0A294, + 0x9EA092, + 0x9C9E90, + 0xA0A294, + 0x9EA092, + 0x9C9E90, + 0x9A9C8E, + 0x989A8C, + 0x989A8C, + 0x999B8D, + 0x999B8D, + 0x949889, + 0x95998A, + 0x969D8D, + 0x979E8E, + 0x959E8D, + 0x939C8B, + 0x8E9988, + 0x8D9887, + 0x8C9B88, + 0x8C9B88, + 0x899A87, + 0x899A87, + 0x879A86, + 0x879A86, + 0x849A85, + 0x869985, + 0x869986, + 0x7F907E, + 0x869785, + 0x829381, + 0x7F907E, + 0x263725, + 0x000E00, + 0x001000, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000D00, + 0x000E00, + 0x0C1510, + 0x696F6F, + 0x8F9591, + 0x898E8A, + 0x848982, + 0x91948D, + 0x84877C, + 0x909388, + 0x989A8C, + 0x959789, + 0x929687, + 0x939788, + 0x939B8C, + 0x969E8F, + 0x969E91, + 0x949C8F, + 0x97A08F, + 0x9DA695, + 0xA1A898, + 0x9FA696, + 0xA0A495, + 0xA2A496, + 0xA0A294, + 0x9E9F91, + 0xA6A799, + 0xA8A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AD9E, + 0xABAD9F, + 0xAAAC9E, + 0xABAC9E, + 0xABAD9F, + 0xABAD9F, + 0xABAFA0, + 0xABAFA0, + 0xA9B2A1, + 0xA9B2A1, + 0xA9B2A1, + 0xA9B2A1, + 0xA8AF9F, + 0xA6AD9D, + 0xA8AC9D, + 0xABAFA0, + 0xABAD9F, + 0xA8AA9C, + 0xA8AB9A, + 0xA9AC9B, + 0xA9AC9B, + 0xAAAD9C, + 0xABAE9D, + 0xABAE9D, + 0xAAAD9C, + 0xA9AC9B, + 0xA7AA99, + 0xA7AA99, + 0xA6A998, + 0xA6A998, + 0xA5A897, + 0xA5A897, + 0xA5A897, + 0xA5A897, + 0xA2A697, + 0xA1A596, + 0x9FA394, + 0x9EA293, + 0x9EA293, + 0x9EA293, + 0x9DA192, + 0x9CA091, + 0x9DA192, + 0x9CA091, + 0x9A9E8F, + 0x989C8D, + 0x989C8D, + 0x989C8D, + 0x9A9E8F, + 0x9B9F90, + 0x95998A, + 0x969A8B, + 0x949D8C, + 0x919C8B, + 0x8F9C8A, + 0x8B9C89, + 0x8B9E8A, + 0x8AA08B, + 0x889E89, + 0x889E89, + 0x8A9D89, + 0x8B9C89, + 0x8D9C89, + 0x8E9988, + 0x8D9887, + 0x8D9887, + 0x8A9986, + 0x839481, + 0x889986, + 0x869784, + 0x829380, + 0x344532, + 0x051603, + 0x000900, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000D00, + 0x000E00, + 0x000B04, + 0x6E7877, + 0x949D98, + 0x979D99, + 0x9AA199, + 0xA0A59E, + 0x95988D, + 0x9C9F94, + 0xA0A295, + 0x9FA194, + 0x9CA092, + 0x9B9F91, + 0x999F91, + 0x999F91, + 0x989E92, + 0x979D91, + 0x9DA695, + 0xA0A998, + 0xA3AA9A, + 0xA2A999, + 0xA3A798, + 0xA4A698, + 0xA1A395, + 0x9D9E90, + 0xA6A799, + 0xA8A99B, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AB9D, + 0xA9AD9E, + 0xAAAE9F, + 0xAAAC9E, + 0xAAAC9E, + 0xABAD9F, + 0xABAD9F, + 0xA9B0A0, + 0xAAB1A1, + 0xA9B2A1, + 0xA9B2A1, + 0xA4AD9C, + 0xA4AD9C, + 0xA4AB9B, + 0xA2A999, + 0xA6AA9B, + 0xAAAE9F, + 0xACAEA0, + 0xAAAC9E, + 0xA7AA99, + 0xAAAD9C, + 0xACAF9E, + 0xABAE9D, + 0xA8AB9A, + 0xA6A998, + 0xA7AA99, + 0xA8AB9A, + 0xA8AB9A, + 0xA7AA99, + 0xA7AA99, + 0xA7AA99, + 0xA6A998, + 0xA6A998, + 0xA5A897, + 0xA5A897, + 0xA3A798, + 0xA1A596, + 0xA0A495, + 0x9FA394, + 0xA0A495, + 0xA1A596, + 0xA0A495, + 0x9FA394, + 0x9CA091, + 0x9CA091, + 0x9B9F90, + 0x9A9E8F, + 0x9A9E8F, + 0x999D8E, + 0x999D8E, + 0x999D8E, + 0x999B8D, + 0x979B8C, + 0x949B8B, + 0x909B8A, + 0x8F9C8A, + 0x8E9D8A, + 0x8A9D89, + 0x8A9D89, + 0x889E89, + 0x889E89, + 0x8A9D89, + 0x8B9C89, + 0x8D9C89, + 0x8D9A88, + 0x8E9988, + 0x8C9987, + 0x899885, + 0x849582, + 0x889986, + 0x869784, + 0x839481, + 0x435441, + 0x021300, + 0x000D00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000D00, + 0x000F00, + 0x011009, + 0x818D8B, + 0x909C98, + 0x8F9895, + 0x97A199, + 0x99A099, + 0x9AA096, + 0xA1A49B, + 0x9C9F94, + 0x9FA196, + 0xA0A295, + 0xA1A396, + 0x9FA395, + 0x9FA395, + 0xA0A496, + 0xA1A597, + 0x9CA594, + 0x9EA796, + 0x9FA696, + 0xA0A797, + 0xA4A899, + 0xA5A799, + 0xA1A395, + 0x9D9E90, + 0xA7A89A, + 0xA8A99B, + 0xA9AB9D, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAE9F, + 0xABAFA0, + 0xABAD9F, + 0xABAD9F, + 0xAAAE9F, + 0xABAFA0, + 0xA9B0A0, + 0xAAB1A1, + 0xA9B2A1, + 0xA9B2A1, + 0xA4AD9C, + 0xA2AB9A, + 0x9CA393, + 0x949B8B, + 0x929687, + 0x929687, + 0x909284, + 0x8C8E80, + 0x96988A, + 0x9A9C8E, + 0x9D9F91, + 0x9B9D8F, + 0x97998B, + 0x959789, + 0x96988A, + 0x999B8D, + 0x989A8C, + 0x989A8C, + 0x989A8C, + 0x97998B, + 0x96988A, + 0x96988A, + 0x959789, + 0x959789, + 0x989C8D, + 0x969A8B, + 0x95998A, + 0x95998A, + 0x969A8B, + 0x979B8C, + 0x979B8C, + 0x969A8B, + 0x9A9E8F, + 0x9B9F90, + 0x9CA091, + 0x9CA091, + 0x9B9F90, + 0x9A9E8F, + 0x999D8E, + 0x989C8D, + 0x9B9D8F, + 0x989A8C, + 0x939A8A, + 0x929B8A, + 0x929D8C, + 0x93A08E, + 0x90A18E, + 0x8FA08D, + 0x8A9D89, + 0x8A9D89, + 0x8B9C89, + 0x8C9D8A, + 0x8D9C89, + 0x8D9C89, + 0x8D9A88, + 0x8D9A88, + 0x889986, + 0x869784, + 0x889986, + 0x869784, + 0x859683, + 0x5A6B58, + 0x000D00, + 0x001100, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x000F00, + 0x001006, + 0x889993, + 0x85948F, + 0x818D89, + 0x8A978E, + 0x869088, + 0x929991, + 0x969992, + 0x8E9188, + 0x93948C, + 0x97998E, + 0x989A8F, + 0x97998C, + 0x97998C, + 0x999B8E, + 0x9A9E90, + 0x979E8E, + 0x969F8E, + 0x989F8F, + 0x9BA292, + 0xA2A697, + 0xA5A799, + 0xA1A395, + 0x9C9D8F, + 0xA7A89A, + 0xA9AA9C, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAC9E, + 0xAAAE9F, + 0xABAFA0, + 0xAAAE9F, + 0xAAAE9F, + 0xA9B0A0, + 0xA9B0A0, + 0xA8B1A0, + 0xA9B2A1, + 0xA7B2A1, + 0xA7B2A1, + 0xACB5A4, + 0xABB4A3, + 0xA9B0A0, + 0xA6AD9D, + 0xA9AD9E, + 0xAEB2A3, + 0xB1B3A5, + 0xB0B2A4, + 0xA2A697, + 0xA5A99A, + 0xA7AB9C, + 0xA7AB9C, + 0xA6AA9B, + 0xA5A99A, + 0xA5A99A, + 0xA7AB9C, + 0xA3A798, + 0xA2A697, + 0xA2A697, + 0xA1A596, + 0xA0A495, + 0xA0A495, + 0x9FA394, + 0x9FA394, + 0x989C8D, + 0x979B8C, + 0x95998A, + 0x95998A, + 0x969A8B, + 0x969A8B, + 0x95998A, + 0x949889, + 0x888C7D, + 0x888C7D, + 0x888C7D, + 0x888C7D, + 0x878B7C, + 0x868A7B, + 0x85897A, + 0x85897A, + 0x8D8F81, + 0x898B7D, + 0x838A7A, + 0x858C7C, + 0x879281, + 0x8B9685, + 0x8A9986, + 0x889784, + 0x8B9C89, + 0x8B9C89, + 0x8C9D8A, + 0x8C9D8A, + 0x8E9D8A, + 0x8E9D8A, + 0x8D9C89, + 0x8D9C89, + 0x899A87, + 0x899A87, + 0x899A87, + 0x859683, + 0x869784, + 0x6F806D, + 0x000A00, + 0x011200, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x000F00, + 0x001409, + 0x92A39D, + 0x8FA09A, + 0x939F9B, + 0x9DAAA3, + 0x939C97, + 0x9BA59D, + 0x999E98, + 0x979C95, + 0x9C9F98, + 0x9FA098, + 0x9FA098, + 0x9C9E91, + 0x9A9C8F, + 0x999D8F, + 0x9A9E90, + 0x969F8E, + 0x949D8C, + 0x969D8D, + 0x9BA292, + 0xA3A798, + 0xA4A698, + 0xA0A294, + 0x9E9F91, + 0xA8A99B, + 0xAAAB9D, + 0xAAAC9E, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xABAFA0, + 0xACB0A1, + 0xA9B0A0, + 0xA9B0A0, + 0xA8B1A0, + 0xA8B1A0, + 0xA6B1A0, + 0xA7B2A1, + 0xA7B2A1, + 0xA7B2A1, + 0xA7B2A1, + 0xA6AF9E, + 0x9EA796, + 0x969D8D, + 0x949889, + 0x939788, + 0x929486, + 0x8E9082, + 0x9DA192, + 0x9CA091, + 0x9B9F90, + 0x9CA091, + 0x9EA293, + 0x9EA293, + 0x9CA091, + 0x9A9E8F, + 0xA4A899, + 0xA4A899, + 0xA3A798, + 0xA2A697, + 0xA2A697, + 0xA1A596, + 0xA0A495, + 0xA0A495, + 0xA4A899, + 0xA2A697, + 0xA0A495, + 0x9FA394, + 0x9FA394, + 0x9FA394, + 0x9DA192, + 0x9CA091, + 0xA0A495, + 0x9EA293, + 0x9DA192, + 0x9B9F90, + 0x9B9F90, + 0x9B9F90, + 0x9CA091, + 0x9DA192, + 0x9A9C8E, + 0x96988A, + 0x919586, + 0x939788, + 0x959E8D, + 0x99A291, + 0x96A391, + 0x95A290, + 0x8D9C89, + 0x8E9D8A, + 0x8C9D8A, + 0x8C9D8A, + 0x8D9E8B, + 0x8C9D8A, + 0x8C9D8A, + 0x8C9D8A, + 0x8A9B88, + 0x8B9C89, + 0x8A9B88, + 0x859683, + 0x879885, + 0x7D8E7B, + 0x000E00, + 0x001100, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E00, + 0x001000, + 0x13241A, + 0x93A49E, + 0x909F9A, + 0x929E9A, + 0x98A4A0, + 0x929B98, + 0x9DA6A1, + 0x9BA19D, + 0x9DA29C, + 0x9FA49E, + 0xA2A59C, + 0xA2A59C, + 0xA0A698, + 0xA0A698, + 0xA0A797, + 0xA1A898, + 0x9BA493, + 0x99A291, + 0x9CA393, + 0xA0A797, + 0xA5A99A, + 0xA4A698, + 0xA1A395, + 0xA0A193, + 0xA8A99B, + 0xAAAB9D, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xABAD9F, + 0xABAFA0, + 0xACB0A1, + 0xA9B2A1, + 0xA9B2A1, + 0xA7B2A1, + 0xA7B2A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA8B3A2, + 0xAAB3A2, + 0xA7B09F, + 0xA6AD9D, + 0xAAAE9F, + 0xAFB1A3, + 0xB1B3A5, + 0xB0B1A3, + 0xA8AC9E, + 0xA4A89A, + 0xA2A698, + 0xA3A799, + 0xA6AA9C, + 0xA7AB9D, + 0xA3A799, + 0x9EA294, + 0x9B9F91, + 0x9A9E90, + 0x9A9E90, + 0x999D8F, + 0x989C8E, + 0x979B8D, + 0x969A8C, + 0x969A8C, + 0x909485, + 0x8E9283, + 0x8C9081, + 0x8B8F80, + 0x8A8E7F, + 0x898D7E, + 0x888C7D, + 0x868A7B, + 0x8B8F80, + 0x8A8E7F, + 0x878B7C, + 0x85897A, + 0x85897A, + 0x868A7B, + 0x878B7C, + 0x888C7D, + 0x919385, + 0x8E9082, + 0x8B8D7F, + 0x8A8C7E, + 0x899080, + 0x8A9181, + 0x899281, + 0x889180, + 0x8E9B89, + 0x8F9C8A, + 0x8E9D8A, + 0x8F9E8B, + 0x8D9E8B, + 0x8D9E8B, + 0x8C9F8B, + 0x8C9F8B, + 0x8C9D8A, + 0x8B9C89, + 0x8B9C89, + 0x869784, + 0x899A87, + 0x839481, + 0x091A07, + 0x001000, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E00, + 0x001000, + 0x1E2E23, + 0x889790, + 0x86928E, + 0x838E8A, + 0x828D89, + 0x828B88, + 0x929896, + 0x929896, + 0x929793, + 0x919692, + 0x919890, + 0x939A92, + 0x969E91, + 0x98A093, + 0x98A392, + 0x98A392, + 0x9BA493, + 0x9AA392, + 0x9DA494, + 0xA2A999, + 0xA5A99A, + 0xA2A496, + 0xA0A294, + 0xA2A395, + 0xA9AA9C, + 0xAAAB9D, + 0xABAD9F, + 0xACAEA0, + 0xACAEA0, + 0xACAEA0, + 0xACB0A1, + 0xABB2A2, + 0xA9B2A1, + 0xA7B2A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA7B2A1, + 0xA8B1A0, + 0xA3AC9B, + 0xA0A495, + 0x9DA192, + 0x9EA092, + 0x9C9D8F, + 0x97998B, + 0xA6AA9C, + 0xA2A89A, + 0xA2A89A, + 0xA4AA9C, + 0xA7AD9F, + 0xA7AD9F, + 0xA5AB9D, + 0xA3A99B, + 0xA8AEA0, + 0xA7AD9F, + 0xA6AC9E, + 0xA5AB9D, + 0xA4AA9C, + 0xA3A99B, + 0xA2A89A, + 0xA2A89A, + 0xA5A99A, + 0xA3A798, + 0xA1A596, + 0xA0A495, + 0xA0A495, + 0xA0A495, + 0x9EA293, + 0x9DA192, + 0x9FA394, + 0x9EA293, + 0x9DA192, + 0x9CA091, + 0x9CA091, + 0x9CA091, + 0x9CA091, + 0x9D9F91, + 0x97998B, + 0x97988A, + 0x949688, + 0x939587, + 0x919586, + 0x909485, + 0x8D9484, + 0x8C9383, + 0x909B8A, + 0x909B8A, + 0x8F9E8B, + 0x8F9E8B, + 0x8DA08C, + 0x8DA08C, + 0x8C9F8B, + 0x8C9F8B, + 0x8C9D8A, + 0x8A9B88, + 0x8C9D8A, + 0x879885, + 0x8C9D8A, + 0x869784, + 0x1B2C19, + 0x001100, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000D00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E00, + 0x001000, + 0x2C392F, + 0x8E9B94, + 0x97A29E, + 0x9AA3A0, + 0x97A09F, + 0x989E9E, + 0x9EA4A4, + 0x9BA1A1, + 0x9BA19D, + 0x999F9B, + 0x969D95, + 0x979E96, + 0x96A294, + 0x98A496, + 0x97A492, + 0x97A291, + 0x939E8D, + 0x959E8D, + 0x9AA191, + 0xA0A797, + 0xA3A798, + 0xA0A294, + 0x9FA193, + 0xA3A496, + 0xA9AA9C, + 0xABAC9E, + 0xABAD9F, + 0xACAEA0, + 0xACAEA0, + 0xACAEA0, + 0xACB0A1, + 0xABB2A2, + 0xA7B2A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA6B3A1, + 0xA7B2A1, + 0xA9B2A1, + 0xA7B09F, + 0xA6AA9B, + 0xA5A99A, + 0xA8AA9C, + 0xA7A89A, + 0xA2A496, + 0x9CA092, + 0x9CA294, + 0x9FA597, + 0xA2A89A, + 0xA5AB9D, + 0xA7AD9F, + 0xA8AEA0, + 0xA9AFA1, + 0xA6AC9E, + 0xA5AB9D, + 0xA4AA9C, + 0xA3A99B, + 0xA2A89A, + 0xA1A799, + 0xA0A698, + 0xA0A698, + 0xA3A798, + 0xA2A697, + 0xA0A495, + 0x9FA394, + 0xA0A495, + 0xA0A495, + 0x9FA394, + 0x9EA293, + 0x9CA091, + 0x9CA091, + 0x9DA192, + 0x9DA192, + 0x9CA091, + 0x9B9F90, + 0x9A9E8F, + 0x9A9C8E, + 0x9A9C8E, + 0x9B9C8E, + 0x9B9D8F, + 0x9A9C8E, + 0x979B8C, + 0x95998A, + 0x939A8A, + 0x949B8B, + 0x909B8A, + 0x909B8A, + 0x8F9E8B, + 0x8F9E8B, + 0x8DA08C, + 0x8DA08C, + 0x8BA18C, + 0x8DA08C, + 0x8B9E8A, + 0x899A87, + 0x8D9E8B, + 0x899A87, + 0x8FA08D, + 0x869784, + 0x273825, + 0x011200, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000E00, + 0x001101, + 0x37443A, + 0x8F9C95, + 0x96A19B, + 0x95A09A, + 0x97A29A, + 0x97A29A, + 0x96A298, + 0x9DA99F, + 0x99A398, + 0x9BA59A, + 0x9DA89A, + 0x9FAA9C, + 0xA0AB9B, + 0xA0AB9B, + 0xA2AB9A, + 0x9FAA99, + 0x9AA796, + 0x9CA998, + 0x9EAB9A, + 0xA2AA9B, + 0xA2AA9B, + 0xA3A799, + 0xA1A597, + 0xA1A396, + 0xABAB9F, + 0xACACA0, + 0xADADA1, + 0xAEAEA2, + 0xAEAEA2, + 0xAEAEA2, + 0xADAFA2, + 0xACB0A2, + 0xA7B2A1, + 0xA7B4A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA4B5A3, + 0xA3B4A2, + 0xA4B5A3, + 0xA8B6A5, + 0x9FAD9E, + 0xA3AFA1, + 0xA4AFA1, + 0xA1AC9E, + 0xACB4A7, + 0xABB1A5, + 0xAAB1A1, + 0xACB0A1, + 0xABB2A2, + 0xACB3A3, + 0xA8AF9F, + 0xA4AB9B, + 0xA5AE9D, + 0xABB4A3, + 0xA6B1A0, + 0xA4AF9E, + 0xA3AE9D, + 0xA4AF9E, + 0xA1AE9C, + 0x9DAA98, + 0x9CA997, + 0x9DAA98, + 0x9BAA95, + 0x99A893, + 0x99A692, + 0x9AA793, + 0x9DA995, + 0x9DA995, + 0x9DA693, + 0x9AA390, + 0x9BA290, + 0x9DA190, + 0x9CA08F, + 0x9C9F8E, + 0x9D9E8E, + 0x9D9E8E, + 0x9D9E8E, + 0x9D9E8E, + 0x9A9B8D, + 0x9A9B8D, + 0x999B8D, + 0x999B8D, + 0x959C8C, + 0x969D8D, + 0x969F8E, + 0x97A08F, + 0x909D8B, + 0x909D8B, + 0x8D9E8B, + 0x8D9E8B, + 0x8C9F8B, + 0x8C9F8B, + 0x8AA08B, + 0x8C9F8B, + 0x8C9F8B, + 0x90A18E, + 0x889986, + 0x8C9D8A, + 0x90A18E, + 0x81927F, + 0x425340, + 0x000D00, + 0x000E00, + 0x000C00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000E00, + 0x001101, + 0x404D44, + 0x8E9A96, + 0x8C9793, + 0x88938F, + 0x8A958F, + 0x8B9690, + 0x8A958D, + 0x8F9A92, + 0x949E95, + 0x949E95, + 0x949F91, + 0x939E90, + 0x939E90, + 0x939E90, + 0x959D8E, + 0x949F8F, + 0x9EAB9A, + 0x9DAB9A, + 0x9EAB9A, + 0x9FAA9A, + 0x9EA999, + 0xA0A698, + 0xA0A698, + 0xA2A497, + 0xABADA0, + 0xACACA0, + 0xADADA1, + 0xAEAEA2, + 0xAEAEA2, + 0xAEAEA2, + 0xADAFA2, + 0xACB0A2, + 0xA7B2A1, + 0xA7B4A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA6B5A2, + 0xA4B5A3, + 0xA3B4A2, + 0x9BAC9A, + 0xA3B1A0, + 0xA1AFA0, + 0xACB8AA, + 0xB0BBAD, + 0xAAB5A7, + 0xAFB7AA, + 0xA7AFA2, + 0xA3AA9A, + 0xA4AB9B, + 0xA6AD9D, + 0xA8AF9F, + 0xA8B1A0, + 0xA7B09F, + 0xA2AD9C, + 0xA0AB9A, + 0xA1AC9B, + 0x9FAA99, + 0x9FAC9A, + 0xA2AF9D, + 0xA2B19E, + 0xA0AF9C, + 0xA0AF9C, + 0xA2B19E, + 0xA2B19C, + 0x9FAE99, + 0x9CAB96, + 0x9AA994, + 0x9AA793, + 0x99A692, + 0x99A591, + 0x98A490, + 0x9AA692, + 0x99A591, + 0x9AA390, + 0x99A28F, + 0x99A08E, + 0x989F8D, + 0x989F8D, + 0x989F8D, + 0x989F8F, + 0x989F8F, + 0x989F8F, + 0x979E8E, + 0x959E8D, + 0x949D8C, + 0x919E8C, + 0x919E8C, + 0x909F8C, + 0x909F8C, + 0x8E9F8C, + 0x8E9F8C, + 0x8DA08C, + 0x8DA08C, + 0x8BA18C, + 0x8DA08C, + 0x8EA18D, + 0x8FA08D, + 0x8A9B88, + 0x8B9C89, + 0x8E9F8C, + 0x859683, + 0x4F604D, + 0x000F00, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000C00, + 0x000F00, + 0x001101, + 0x4B5851, + 0x919D9B, + 0x919B9A, + 0x959F9E, + 0x9AA5A1, + 0x98A39F, + 0x929D97, + 0x919C96, + 0x9CA69E, + 0x9AA49C, + 0x99A39A, + 0x97A198, + 0x97A196, + 0x97A196, + 0x9BA396, + 0x99A496, + 0x9FAC9B, + 0x9EAC9B, + 0x9EAB9A, + 0x9EA999, + 0x9DA898, + 0xA0A698, + 0xA0A698, + 0xA2A698, + 0xABADA0, + 0xABADA0, + 0xADADA1, + 0xAEAEA2, + 0xADAFA2, + 0xAEB0A3, + 0xAEB0A3, + 0xACB0A2, + 0xA8B3A2, + 0xA7B4A2, + 0xA6B5A2, + 0xA7B6A3, + 0xA7B6A3, + 0xA6B5A2, + 0xA4B5A3, + 0xA4B5A3, + 0x94A593, + 0x97A594, + 0x8D9B8C, + 0x929E90, + 0x96A193, + 0x949F91, + 0x9CA497, + 0x959D90, + 0xA1AA99, + 0xA2AB9A, + 0xA0A998, + 0x9FA897, + 0xA2AD9C, + 0xA6B1A0, + 0xA0AD9B, + 0x96A391, + 0x9AA795, + 0x98A593, + 0x98A794, + 0x9BAA97, + 0x9AAB98, + 0x98A996, + 0x98A996, + 0x9AAB98, + 0x94A592, + 0x96A794, + 0x99AA97, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9DAC99, + 0x9DAC99, + 0x9BAA97, + 0x9AA996, + 0x98A794, + 0x97A693, + 0x95A491, + 0x94A390, + 0x94A390, + 0x93A28F, + 0x95A491, + 0x95A491, + 0x95A491, + 0x94A390, + 0x94A390, + 0x93A28F, + 0x8FA08D, + 0x8FA08D, + 0x8E9F8C, + 0x8E9F8C, + 0x8E9F8C, + 0x8E9F8C, + 0x8DA08C, + 0x8DA08C, + 0x8DA08C, + 0x8DA08C, + 0x90A18E, + 0x8D9E8B, + 0x8C9D8A, + 0x8C9D8A, + 0x8B9C89, + 0x8A9B88, + 0x61725F, + 0x001100, + 0x000E00, + 0x000D00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000F00, + 0x011202, + 0x596561, + 0x94A0A0, + 0x919B9C, + 0x99A3A4, + 0x9CA6A5, + 0x9CA6A5, + 0x99A4A0, + 0x98A39F, + 0x9EA7A2, + 0x9DA6A1, + 0x9DA79E, + 0x9CA69D, + 0x9DA79E, + 0x9EA89F, + 0xA1A99E, + 0xA0AA9F, + 0x9BA998, + 0x9CAA99, + 0x9CAA99, + 0x9EA999, + 0x9EA999, + 0xA0A698, + 0xA0A698, + 0xA1A597, + 0xABADA0, + 0xABADA0, + 0xACAEA1, + 0xADAFA2, + 0xAEB0A3, + 0xAEB0A3, + 0xAEB0A3, + 0xADB1A3, + 0xA8B3A2, + 0xA7B4A2, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA4B5A3, + 0xA4B5A3, + 0x9AAB99, + 0x9AA897, + 0x8B998A, + 0x8C988A, + 0x909B8D, + 0x919C8E, + 0x9AA295, + 0x929A8D, + 0x8E9687, + 0x8E9687, + 0x859080, + 0x7D8878, + 0x808B7B, + 0x8A9585, + 0x879483, + 0x7C8978, + 0x7E8C7B, + 0x7C8A79, + 0x798A78, + 0x7A8B79, + 0x788977, + 0x748573, + 0x728572, + 0x748573, + 0x7F907D, + 0x899885, + 0x90A18E, + 0x97A895, + 0x98A996, + 0x96A794, + 0x93A692, + 0x93A692, + 0x94AA95, + 0x93A994, + 0x92A893, + 0x91A792, + 0x8FA791, + 0x8EA690, + 0x8DA58F, + 0x8DA58F, + 0x8EA48F, + 0x8EA48F, + 0x8EA48F, + 0x8FA590, + 0x91A490, + 0x91A490, + 0x8FA28E, + 0x8EA18D, + 0x8EA18D, + 0x8EA18D, + 0x8EA18D, + 0x8EA18D, + 0x8FA08D, + 0x8FA08D, + 0x8FA08D, + 0x8FA08D, + 0x90A18E, + 0x8B9C89, + 0x8FA08D, + 0x8D9E8B, + 0x8A9B88, + 0x8D9E8B, + 0x71826F, + 0x001100, + 0x000F00, + 0x000D00, + 0x000B00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x001000, + 0x021303, + 0x687470, + 0x94A0A0, + 0x879192, + 0x8A9495, + 0x889291, + 0x899392, + 0x919C98, + 0x96A19D, + 0x939C97, + 0x949D98, + 0x959F96, + 0x96A097, + 0x96A097, + 0x96A097, + 0x98A095, + 0x959F94, + 0x97A594, + 0x97A896, + 0x9CAA99, + 0x9FAC9B, + 0x9FAC9B, + 0xA1A99A, + 0x9EA697, + 0xA0A496, + 0xAAAEA0, + 0xACAEA1, + 0xADAFA2, + 0xADAFA2, + 0xAEB0A3, + 0xAEB0A3, + 0xADB1A3, + 0xABB1A3, + 0xA8B3A2, + 0xA7B4A2, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA4B5A3, + 0xA4B5A3, + 0xA3B4A2, + 0xA9B7A6, + 0xA2B0A1, + 0xA8B4A6, + 0xAEB9AB, + 0xADB8AA, + 0xB0B8AB, + 0xA3AB9E, + 0xABB3A4, + 0xAEB6A7, + 0xA9B1A2, + 0xA0A899, + 0x9FAA9A, + 0xA8B3A3, + 0xA7B4A3, + 0x9FAC9B, + 0xA2AF9E, + 0x9FAC9B, + 0x9DAB9A, + 0x9EAC9B, + 0x9BAC9A, + 0x97A896, + 0x95A694, + 0x96A795, + 0x909F8C, + 0x96A592, + 0x9DAC99, + 0xA0AF9C, + 0x9CAD9A, + 0x98A996, + 0x94A793, + 0x93A692, + 0x92A893, + 0x92A893, + 0x90A892, + 0x8FA791, + 0x8FA791, + 0x8FA791, + 0x8EA791, + 0x8EA791, + 0x8DA58F, + 0x8CA48E, + 0x8BA38D, + 0x8CA48E, + 0x8EA48F, + 0x8EA48F, + 0x8CA28D, + 0x8AA08B, + 0x8FA28E, + 0x8FA28E, + 0x8FA28E, + 0x8FA28E, + 0x90A18E, + 0x90A18E, + 0x90A18E, + 0x90A18E, + 0x8E9F8C, + 0x8B9C89, + 0x91A28F, + 0x8FA08D, + 0x8C9D8A, + 0x8E9F8C, + 0x7C8D7A, + 0x021300, + 0x000F00, + 0x000D00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000D00, + 0x001100, + 0x021303, + 0x6F7C75, + 0x95A19F, + 0x8D9796, + 0x98A2A1, + 0x95A09C, + 0x929D99, + 0x96A19B, + 0x97A29C, + 0x959F97, + 0x96A098, + 0x97A198, + 0x98A299, + 0x97A196, + 0x96A095, + 0x969E91, + 0x939E90, + 0x96A493, + 0x96A795, + 0x9CAA99, + 0xA0AD9C, + 0xA1AE9D, + 0xA2AA9B, + 0x9EA697, + 0x9DA395, + 0xABAFA1, + 0xABAFA1, + 0xADAFA2, + 0xAEB0A3, + 0xADB1A3, + 0xADB1A3, + 0xADB1A3, + 0xABB1A3, + 0xA8B3A2, + 0xA8B5A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA5B6A4, + 0xA4B5A3, + 0xA2B3A1, + 0xA8B6A5, + 0x9EAC9D, + 0x9FAB9D, + 0xA3AEA0, + 0xA3AEA0, + 0xA9B1A4, + 0x9EA699, + 0x9FA599, + 0xA5AB9F, + 0xA8AEA2, + 0xA5AB9F, + 0xA4AC9F, + 0xA8B0A3, + 0xA7AFA2, + 0xA2AA9D, + 0xA2AD9F, + 0xA0AB9D, + 0xA0AC9E, + 0xA3AFA1, + 0xA3B1A2, + 0xA1AFA0, + 0xA1AFA0, + 0xA3B1A2, + 0xA1AE9D, + 0xA1AE9D, + 0x9FAC9B, + 0x9DAA99, + 0x9BA897, + 0x9BA897, + 0x9BA998, + 0x9CAA99, + 0x98A997, + 0x98A997, + 0x97A896, + 0x97A896, + 0x95A895, + 0x95A895, + 0x96A996, + 0x96A996, + 0x94AA95, + 0x91A792, + 0x8EA48F, + 0x8EA48F, + 0x92A591, + 0x92A591, + 0x91A490, + 0x8FA28E, + 0x90A38F, + 0x90A38F, + 0x90A38F, + 0x90A38F, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x8D9E8B, + 0x8E9F8C, + 0x92A390, + 0x8E9F8C, + 0x90A18E, + 0x8C9D8A, + 0x849582, + 0x0C1D0A, + 0x000F00, + 0x000D00, + 0x000C00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E00, + 0x001100, + 0x031404, + 0x78857C, + 0x98A4A0, + 0x919C98, + 0xA4AFAB, + 0xA3AEA8, + 0x9EA9A3, + 0x9DA8A0, + 0x97A29A, + 0x9EA89F, + 0x9EA89F, + 0x9EA99B, + 0x9EA99B, + 0x9EA99B, + 0x9EA99B, + 0x9FA798, + 0x9DA898, + 0x98A997, + 0x9AAB99, + 0x9DAE9C, + 0xA1AE9D, + 0xA1AE9D, + 0xA2AA9B, + 0x9FA798, + 0x9EA496, + 0xABAFA1, + 0xABAFA1, + 0xACB0A2, + 0xADB1A3, + 0xADB1A3, + 0xAEB2A4, + 0xAEB2A4, + 0xABB1A3, + 0xA9B4A3, + 0xA8B5A3, + 0xA7B6A3, + 0xA8B7A4, + 0xA8B7A4, + 0xA7B6A3, + 0xA5B6A4, + 0xA5B6A4, + 0x9FB09E, + 0xA4B2A1, + 0x94A293, + 0x8E9A8C, + 0x8E998B, + 0x919C8E, + 0x9CA497, + 0x969C90, + 0x8E9186, + 0x929489, + 0x96988D, + 0x999B90, + 0x999C91, + 0x999C91, + 0x969C90, + 0x949A8E, + 0x939B8E, + 0x91998C, + 0x929A8D, + 0x959D90, + 0x939E90, + 0x919C8E, + 0x919C8E, + 0x939E90, + 0x99A192, + 0x959D8E, + 0x8E9989, + 0x8B9686, + 0x8C9787, + 0x8F9A8A, + 0x929D8D, + 0x949F8F, + 0x98A393, + 0x97A292, + 0x96A191, + 0x95A090, + 0x94A190, + 0x93A08F, + 0x93A08F, + 0x93A08F, + 0x92A390, + 0x8FA08D, + 0x8C9D8A, + 0x8D9E8B, + 0x91A28F, + 0x94A592, + 0x94A592, + 0x93A491, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x90A38F, + 0x90A38F, + 0x8E9F8C, + 0x91A28F, + 0x91A28F, + 0x8B9C89, + 0x94A592, + 0x8B9C89, + 0x8B9C89, + 0x1B2C19, + 0x000F00, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E00, + 0x001100, + 0x031404, + 0x869389, + 0x96A39C, + 0x7F8A84, + 0x8B9690, + 0x8A958D, + 0x8B968E, + 0x919D93, + 0x8E9A90, + 0x9AA499, + 0x9AA499, + 0x99A496, + 0x99A496, + 0x9AA595, + 0x9CA797, + 0xA1AA99, + 0xA0AB9A, + 0x9EAF9D, + 0x9DB09D, + 0x9EAF9D, + 0xA0AE9D, + 0xA0AD9C, + 0xA1A99A, + 0x9FA798, + 0x9FA597, + 0xABAFA1, + 0xABAFA1, + 0xACB0A2, + 0xADB1A3, + 0xADB1A3, + 0xAEB2A4, + 0xACB2A4, + 0xABB3A4, + 0xA9B4A3, + 0xA8B5A3, + 0xA7B6A3, + 0xA8B7A4, + 0xA8B7A4, + 0xA7B6A3, + 0xA5B6A4, + 0xA5B6A4, + 0xA2B3A1, + 0xADBBAA, + 0xA7B5A6, + 0xA6B2A4, + 0xA6B1A3, + 0xA6B1A3, + 0xADB5A8, + 0xA4AA9E, + 0xABADA2, + 0xA9A99F, + 0xA8A89E, + 0xACACA2, + 0xADAFA4, + 0xACAEA3, + 0xABAEA3, + 0xADB0A5, + 0xA7ADA1, + 0xA4AA9E, + 0xA3A99D, + 0xA4AA9E, + 0xA2AA9D, + 0x9EA699, + 0x9CA497, + 0x9DA598, + 0x9DA596, + 0x98A091, + 0x939B8C, + 0x909889, + 0x91998A, + 0x939B8C, + 0x949A8C, + 0x93998B, + 0x8F9587, + 0x8E9486, + 0x8D9385, + 0x8B9183, + 0x8A9082, + 0x898F81, + 0x898F81, + 0x878F80, + 0x889382, + 0x84917F, + 0x828F7D, + 0x859280, + 0x8A9986, + 0x909F8C, + 0x93A28F, + 0x93A28F, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x91A490, + 0x91A490, + 0x8E9F8C, + 0x93A491, + 0x90A18E, + 0x899A87, + 0x96A794, + 0x8A9B88, + 0x8FA08D, + 0x273825, + 0x000F00, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000F00, + 0x000700, + 0x001100, + 0x000900, + 0x000C00, + 0x001003, + 0x08180E, + 0x90A096, + 0x909F98, + 0x929F98, + 0x939E98, + 0x939E96, + 0x949E96, + 0x969D96, + 0x969D96, + 0x979E97, + 0x979E97, + 0x969D95, + 0x959C94, + 0x929C93, + 0x939D94, + 0x96A298, + 0x98A59B, + 0x9DAE9E, + 0x9FB1A1, + 0x9CAE9E, + 0x9DAE9E, + 0xA1B2A2, + 0x9FAB9D, + 0x9BA897, + 0xA1AC9C, + 0xA9B1A2, + 0xAAB0A2, + 0xAAB1A1, + 0xAEB0A2, + 0xAEB0A2, + 0xAFB0A2, + 0xAFB0A2, + 0xAEB2A3, + 0xA8B5A1, + 0xA5B7A1, + 0xA5B7A1, + 0xA5B7A1, + 0xA5B6A3, + 0xA5B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA5B4A1, + 0xAAB9A6, + 0xAFBCAB, + 0xADBAA9, + 0xA6B3A2, + 0xA2AF9E, + 0xA4B1A0, + 0xA9B4A4, + 0xA9B1A2, + 0xA9AFA1, + 0xA8AEA0, + 0xA9AFA1, + 0xABB1A3, + 0xABB1A3, + 0xA9AFA1, + 0xA7AD9F, + 0xA7AD9F, + 0xA5AB9D, + 0xA3A99B, + 0xA2A89A, + 0xA4AA9C, + 0xA6AC9E, + 0xA7AD9F, + 0xA9AD9F, + 0xA6AA9C, + 0xA7A99C, + 0xA6A89B, + 0xA5A79A, + 0xA4A699, + 0xA3A598, + 0xA2A698, + 0xA1A597, + 0x9FA395, + 0x9EA294, + 0x9BA193, + 0x9BA193, + 0x9BA193, + 0x9BA193, + 0x999F91, + 0x979F90, + 0x95A491, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x91A28F, + 0x91A28F, + 0x91A28F, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x91A28F, + 0x94A592, + 0x8C9D8A, + 0x96A794, + 0x8FA08D, + 0x91A28F, + 0x8C9D8A, + 0x3E4F3C, + 0x000D00, + 0x000D00, + 0x000D00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000E00, + 0x000700, + 0x001100, + 0x000900, + 0x000D00, + 0x001003, + 0x0E1E14, + 0x91A197, + 0x92A19A, + 0x95A29B, + 0x98A39D, + 0x9AA59D, + 0x9DA79F, + 0xA0A7A0, + 0xA1A8A1, + 0xA0A7A0, + 0xA0A7A0, + 0xA0A79F, + 0x9EA59D, + 0x9CA69D, + 0x9DA79E, + 0xA0ACA2, + 0xA2AFA5, + 0x9DAE9E, + 0x9FB1A1, + 0x9DAE9E, + 0x9DAE9E, + 0xA3B1A2, + 0x9EAC9D, + 0x9BA897, + 0xA0AD9C, + 0xA7B2A2, + 0xA7B2A2, + 0xAAB3A2, + 0xAAB3A2, + 0xABB2A2, + 0xABB2A2, + 0xADB1A2, + 0xACB3A3, + 0xA7B6A1, + 0xA5B7A1, + 0xA5B7A1, + 0xA5B7A1, + 0xA5B6A3, + 0xA5B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0x9FAE9B, + 0x9DAC99, + 0x99A695, + 0x909D8C, + 0x8A9786, + 0x8B9887, + 0x929F8E, + 0x99A494, + 0x9BA394, + 0x989E90, + 0x959B8D, + 0x959B8D, + 0x979D8F, + 0x979D8F, + 0x959B8D, + 0x92988A, + 0x9EA496, + 0x9DA395, + 0x9BA193, + 0x9BA193, + 0x9BA193, + 0x9BA193, + 0x9AA092, + 0x989E90, + 0x9B9F91, + 0x9CA092, + 0x9EA294, + 0xA0A496, + 0x9FA597, + 0x9EA496, + 0x9DA395, + 0x9DA395, + 0xA1A799, + 0xA0A698, + 0x9EA697, + 0x9FA798, + 0x9FA798, + 0x9FA798, + 0x9EA697, + 0x9AA595, + 0x95A491, + 0x93A491, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x91A28F, + 0x91A28F, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x90A18E, + 0x94A592, + 0x8E9F8C, + 0x96A794, + 0x8FA08D, + 0x91A28F, + 0x8D9E8B, + 0x485946, + 0x001000, + 0x001000, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000D00, + 0x000700, + 0x001000, + 0x000900, + 0x000D00, + 0x001003, + 0x18281E, + 0x90A096, + 0x909F98, + 0x929F98, + 0x949F99, + 0x949F97, + 0x959F97, + 0x979E97, + 0x989F98, + 0x9EA59E, + 0x9EA59E, + 0x9EA59D, + 0x9DA49C, + 0x9BA59C, + 0x9CA69D, + 0x9FABA1, + 0xA1ADA3, + 0x9DAE9E, + 0x9FB0A0, + 0x9DAE9E, + 0x9DAE9E, + 0xA1B2A2, + 0x9CAD9D, + 0x9AA897, + 0xA0AE9D, + 0xA5B3A2, + 0xA6B4A3, + 0xA7B4A2, + 0xA7B4A2, + 0xA7B4A2, + 0xA7B4A2, + 0xA8B5A3, + 0xA8B5A3, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B7A4, + 0xA6B7A4, + 0xA8B7A4, + 0xA8B7A4, + 0xADBCA9, + 0xACBBA8, + 0xACB9A8, + 0xA9B6A5, + 0xA7B4A3, + 0xA7B4A3, + 0xA9B6A5, + 0xACB7A7, + 0xA9B4A4, + 0xA8B0A1, + 0xA4AC9D, + 0xA4AC9D, + 0xA6AE9F, + 0xA6AE9F, + 0xA4AC9D, + 0xA1A99A, + 0x9CA495, + 0x9BA394, + 0x9BA394, + 0x9BA394, + 0x9BA394, + 0x9AA293, + 0x98A091, + 0x959D8E, + 0x99A192, + 0x9BA394, + 0x9EA697, + 0xA1A99A, + 0xA3AB9C, + 0xA3AB9C, + 0x9FAA9A, + 0x9EA999, + 0x9BA696, + 0x9AA595, + 0x97A493, + 0x97A493, + 0x98A594, + 0x97A493, + 0x95A291, + 0x93A08F, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x90A18E, + 0x94A592, + 0x90A18E, + 0x96A794, + 0x8E9F8C, + 0x91A28F, + 0x90A18E, + 0x586956, + 0x021300, + 0x001100, + 0x000F00, + 0x000C00, + 0x000A00, + 0x000900, + 0x000A00, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000C00, + 0x000800, + 0x000F00, + 0x000A00, + 0x000E01, + 0x011104, + 0x26362C, + 0x91A197, + 0x91A099, + 0x929F98, + 0x939E98, + 0x929D95, + 0x939D95, + 0x959C95, + 0x949B94, + 0x949B94, + 0x959C95, + 0x959C94, + 0x949B93, + 0x929C93, + 0x949E95, + 0x96A298, + 0x99A59B, + 0x9DAE9E, + 0x9FB0A0, + 0x9DAE9E, + 0x9EAF9F, + 0xA2B3A3, + 0x9DAE9E, + 0x99AA98, + 0x9EAF9D, + 0xA4B5A3, + 0xA4B5A3, + 0xA3B6A2, + 0xA3B6A2, + 0xA4B7A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B7A4, + 0xA6B7A4, + 0xA8B7A4, + 0xA8B7A4, + 0xA5B4A1, + 0xA4B3A0, + 0xA5B2A1, + 0xA6B3A2, + 0xA6B3A2, + 0xA5B2A1, + 0xA4B1A0, + 0xA3AE9E, + 0xA7B2A2, + 0xA9B1A2, + 0xAAB2A3, + 0xABB3A4, + 0xAAB2A3, + 0xAAB2A3, + 0xA9B1A2, + 0xA9B1A2, + 0xA7AFA0, + 0xA6AE9F, + 0xA6AE9F, + 0xA7AFA0, + 0xA8B0A1, + 0xA8B0A1, + 0xA7AFA0, + 0xA6AE9F, + 0x9AA796, + 0x9BA897, + 0x9CA998, + 0x9EAB9A, + 0x9EAB9A, + 0x9DAA99, + 0x9CA998, + 0x9BA897, + 0x9DAB9A, + 0x9CAA99, + 0x9BA998, + 0x9BA998, + 0x9BA998, + 0x9AA897, + 0x96A795, + 0x94A593, + 0x94A592, + 0x94A592, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x92A390, + 0x90A18E, + 0x94A592, + 0x93A491, + 0x95A693, + 0x8E9F8C, + 0x91A28F, + 0x92A390, + 0x6B7C69, + 0x021300, + 0x001000, + 0x000E00, + 0x000D00, + 0x000A00, + 0x000800, + 0x000900, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000E00, + 0x000B00, + 0x000E01, + 0x011104, + 0x35453B, + 0x94A49A, + 0x95A49D, + 0x98A59E, + 0x9AA59F, + 0x9CA79F, + 0x9FA9A1, + 0xA2A9A2, + 0xA2A9A2, + 0xA0A7A0, + 0xA1A8A1, + 0xA2A9A1, + 0xA2A9A1, + 0xA0AAA1, + 0xA1ABA2, + 0xA3AFA5, + 0xA5B1A7, + 0x9FAD9E, + 0xA1AFA0, + 0x9DAE9E, + 0x9EAF9F, + 0xA2B3A3, + 0x9DAE9E, + 0x99AA98, + 0x9FB09E, + 0xA3B6A3, + 0xA3B6A3, + 0xA3B6A2, + 0xA3B6A2, + 0xA2B8A3, + 0xA2B8A3, + 0xA2B8A3, + 0xA4B7A3, + 0xA5B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B7A4, + 0xA6B7A4, + 0xA8B7A4, + 0xA8B7A4, + 0xA5B4A1, + 0x9EAD9A, + 0x96A392, + 0x8F9C8B, + 0x8E9B8A, + 0x909D8C, + 0x93A08F, + 0x94A190, + 0x939E8E, + 0x99A494, + 0x9EA999, + 0x9EA999, + 0x9AA595, + 0x96A191, + 0x97A292, + 0x99A494, + 0x9FAA9A, + 0x9DA898, + 0x9AA595, + 0x9AA595, + 0x9BA696, + 0x9CA797, + 0x9DA898, + 0x9CA797, + 0xA1AE9D, + 0xA0AD9C, + 0x9FAC9B, + 0x9EAB9A, + 0x9DAB9A, + 0x9CAA99, + 0x9DAB9A, + 0x9DAB9A, + 0x94A593, + 0x93A492, + 0x93A492, + 0x95A694, + 0x97A896, + 0x97A896, + 0x96A795, + 0x95A694, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x91A28F, + 0x93A491, + 0x94A592, + 0x95A693, + 0x8E9F8C, + 0x91A28F, + 0x93A491, + 0x7C8D7A, + 0x031401, + 0x000F00, + 0x000C00, + 0x000D00, + 0x000C00, + 0x000900, + 0x000900, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000A00, + 0x000D00, + 0x000C00, + 0x000F02, + 0x011104, + 0x435349, + 0x92A298, + 0x93A29B, + 0x95A29B, + 0x97A29C, + 0x98A39B, + 0x99A39B, + 0x9CA39C, + 0x9CA39C, + 0x9FA69F, + 0xA0A7A0, + 0xA1A8A0, + 0xA1A8A0, + 0x9FA9A0, + 0xA0AAA1, + 0xA1ADA3, + 0xA3AFA5, + 0x9FAD9E, + 0xA1AFA0, + 0x9DAE9E, + 0x9EAF9F, + 0xA2B3A3, + 0x9EAF9F, + 0x9AAB99, + 0xA0B19F, + 0xA4B5A3, + 0xA4B5A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA4B7A3, + 0xA5B8A4, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B8A2, + 0xA6B7A4, + 0xA6B7A4, + 0xA8B7A4, + 0xA8B7A4, + 0xADBCA9, + 0xAAB9A6, + 0xA6B3A2, + 0xA3B09F, + 0xA1AE9D, + 0xA1AE9D, + 0xA2AF9E, + 0xA2AF9E, + 0x9BA897, + 0xA0AD9C, + 0xA5B2A1, + 0xA4B1A0, + 0x9EAB9A, + 0x9AA796, + 0x9AA796, + 0x9CA998, + 0x9AA796, + 0x97A493, + 0x94A190, + 0x929F8E, + 0x919E8D, + 0x929F8E, + 0x929F8E, + 0x929F8E, + 0x8E9B8A, + 0x8D9A89, + 0x8B9887, + 0x8A9786, + 0x899786, + 0x8A9887, + 0x8C9A89, + 0x8D9B8A, + 0x8C9A89, + 0x8C9A89, + 0x8B9C8A, + 0x8E9F8D, + 0x91A290, + 0x93A492, + 0x94A593, + 0x93A492, + 0x95A693, + 0x95A693, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x92A390, + 0x93A491, + 0x95A693, + 0x94A592, + 0x8FA08D, + 0x92A390, + 0x92A390, + 0x889986, + 0x091A07, + 0x001100, + 0x000A00, + 0x000C00, + 0x000E00, + 0x000A00, + 0x000800, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000A00, + 0x000C00, + 0x000C00, + 0x000F02, + 0x011104, + 0x4E5E54, + 0x91A197, + 0x909F98, + 0x929F98, + 0x929D97, + 0x929D95, + 0x929C94, + 0x949B94, + 0x939A93, + 0x919891, + 0x929992, + 0x939A92, + 0x939A92, + 0x909A91, + 0x919B92, + 0x919D93, + 0x939F95, + 0x9DAE9E, + 0x9FB0A0, + 0x9DAE9E, + 0x9EAF9F, + 0xA3B4A4, + 0x9EAF9F, + 0x9CAA99, + 0xA2B09F, + 0xA6B4A3, + 0xA7B5A4, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA7B6A3, + 0xA8B7A4, + 0xA8B7A4, + 0xA7B9A3, + 0xA7B9A3, + 0xA7B9A3, + 0xA7B9A3, + 0xA7B8A5, + 0xA7B8A5, + 0xA9B8A5, + 0xA9B8A5, + 0xA1B09D, + 0xA5B4A1, + 0xAAB7A6, + 0xADBAA9, + 0xADBAA9, + 0xAAB7A6, + 0xA7B4A3, + 0xA4B1A0, + 0xA8B5A4, + 0xA9B6A5, + 0xAAB7A6, + 0xA8B5A4, + 0xA6B3A2, + 0xA4B1A0, + 0xA4B1A0, + 0xA5B2A1, + 0xA9B6A5, + 0xA7B4A3, + 0xA4B1A0, + 0xA3B09F, + 0xA2AF9E, + 0xA2AF9E, + 0xA1AE9D, + 0xA0AD9C, + 0x9FAC9B, + 0x9FAC9B, + 0x9EAB9A, + 0x9EAB9A, + 0x9DAA99, + 0x9EAB9A, + 0x9FAC9B, + 0x9FAC9B, + 0x97A594, + 0x96A493, + 0x97A594, + 0x99A796, + 0x99AA98, + 0x9BAC9A, + 0x9AAB99, + 0x99AA98, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x94A592, + 0x92A390, + 0x96A794, + 0x93A491, + 0x91A28F, + 0x93A491, + 0x90A18E, + 0x8FA08D, + 0x152613, + 0x051603, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000C00, + 0x000800, + 0x000B00, + 0x000B00, + 0x000C00, + 0x001003, + 0x011104, + 0x536359, + 0x95A59B, + 0x95A49D, + 0x98A59E, + 0x9AA59F, + 0x9CA79F, + 0x9EA8A0, + 0xA1A8A1, + 0xA1A8A1, + 0xA2A9A2, + 0xA3AAA3, + 0xA4ABA3, + 0xA4ABA3, + 0xA1ABA2, + 0xA1ABA2, + 0xA2AEA4, + 0xA3AFA5, + 0x9DAE9E, + 0x9FB0A0, + 0x9DAE9E, + 0x9EAF9F, + 0xA5B3A4, + 0xA0AE9F, + 0x9DAB9A, + 0xA2B09F, + 0xA7B4A3, + 0xA8B5A4, + 0xA8B5A3, + 0xA8B5A3, + 0xA9B4A3, + 0xAAB5A4, + 0xAAB5A4, + 0xA9B6A4, + 0xA9B8A3, + 0xA7B9A3, + 0xA7B9A3, + 0xA7B9A3, + 0xA7B8A5, + 0xA7B8A5, + 0xA9B8A5, + 0xA9B8A5, + 0xACBBA8, + 0xABBAA7, + 0xABB8A7, + 0xA8B5A4, + 0xA6B3A2, + 0xA6B3A2, + 0xA8B5A4, + 0xABB8A7, + 0xABB9A8, + 0xA7B5A4, + 0xA4B2A1, + 0xA3B1A0, + 0xA6B4A3, + 0xA8B6A5, + 0xA8B6A5, + 0xA7B5A4, + 0xA3B1A0, + 0xA2B09F, + 0xA2B09F, + 0xA3B1A0, + 0xA3B1A0, + 0xA3B1A0, + 0xA1AF9E, + 0xA0AD9C, + 0xA0AD9C, + 0xA1AC9C, + 0xA1AC9C, + 0xA1AC9C, + 0x9FAC9B, + 0x9EAB9A, + 0x9CA998, + 0x9CA998, + 0x9EAB9A, + 0x9DAA99, + 0x9BA998, + 0x9BA998, + 0x9BA998, + 0x9AA897, + 0x98A695, + 0x96A493, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x95A693, + 0x92A390, + 0x96A794, + 0x93A491, + 0x92A390, + 0x93A491, + 0x8FA08D, + 0x92A390, + 0x1F301D, + 0x0A1B08, + 0x000A00, + 0x000900, + 0x000C00, + 0x000B00, + 0x000900, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000800, + 0x000E00, + 0x000B00, + 0x000B00, + 0x011106, + 0x041409, + 0x5F6F65, + 0x99A69F, + 0x96A39C, + 0x96A39C, + 0x99A69F, + 0x9AA79E, + 0x9AA79E, + 0x9CA79F, + 0x9FAAA2, + 0x9CA89E, + 0x9DA99F, + 0x9FAB9F, + 0xA1ADA1, + 0xA4AFA1, + 0xA4AFA1, + 0xA4AFA1, + 0xA3AFA1, + 0xA1B09D, + 0xA0B19E, + 0xA1B29F, + 0xA1B29F, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0xA1B29F, + 0xA5B6A3, + 0xA5B6A3, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA7B8A5, + 0xA7B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA6B9A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA8B9A7, + 0xA8B9A7, + 0xA8B9A7, + 0xA9B7A6, + 0xA6B4A3, + 0xA1AF9E, + 0x9AA897, + 0x94A291, + 0x919D8F, + 0x8B978B, + 0x919B92, + 0x959F96, + 0x949E95, + 0x949E93, + 0x96A095, + 0x94A094, + 0x929E92, + 0x98A498, + 0x95A195, + 0x919D8F, + 0x8E9A8C, + 0x909E8F, + 0x94A293, + 0x93A192, + 0x8F9D8C, + 0x8C9F8B, + 0x90A38D, + 0x97AA94, + 0x9DB09A, + 0x9FB29C, + 0x9EB19B, + 0x9AAD97, + 0x98AB95, + 0x98AB95, + 0x97AA94, + 0x97AA94, + 0x97AA94, + 0x98AB95, + 0x98AB95, + 0x96A993, + 0x95A892, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x92A390, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x91A28F, + 0x90A18E, + 0x90A18E, + 0x334431, + 0x021300, + 0x001100, + 0x000700, + 0x000C00, + 0x000B00, + 0x000700, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000E01, + 0x001005, + 0x041409, + 0x6A7A70, + 0x8D9A93, + 0x8A9790, + 0x89968F, + 0x8C9992, + 0x8D9A93, + 0x8C9992, + 0x8F9A92, + 0x929D95, + 0x8D9890, + 0x8E9991, + 0x8F9B91, + 0x8F9B91, + 0x919B92, + 0x909A91, + 0x909A8F, + 0x8E9A8C, + 0x9BA998, + 0x9BAC99, + 0x9EAF9C, + 0x9FB09D, + 0xA0B19E, + 0xA1B29F, + 0xA3B4A1, + 0xA4B5A2, + 0xA5B6A3, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA7B8A5, + 0xA7B8A5, + 0xA7B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA6B9A6, + 0xA6B9A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA8B9A7, + 0xA8B9A7, + 0xA5B6A4, + 0xA5B6A4, + 0xA8B6A5, + 0xA8B6A5, + 0xAAB8A7, + 0xABB9A8, + 0xADBBAA, + 0xAFBBAD, + 0xA9B5A9, + 0xADB7AE, + 0xADB9AF, + 0xAAB6AC, + 0xA8B4A8, + 0xA9B5A9, + 0xA8B4A8, + 0xA6B2A6, + 0xA7B5A6, + 0xA6B4A5, + 0xA2B0A1, + 0x9EAC9D, + 0x9DAB9C, + 0x9EAC9D, + 0x99AA9A, + 0x94A593, + 0x96A995, + 0x97AA94, + 0x99AC96, + 0x9AAD97, + 0x9BAE98, + 0x9BAE98, + 0x9BAE98, + 0x9BAE98, + 0x99AC96, + 0x9AAD97, + 0x9BAE98, + 0x99AC96, + 0x97AA94, + 0x96A993, + 0x95A892, + 0x96A993, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x95A693, + 0x95A693, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x92A390, + 0x93A491, + 0x93A491, + 0x93A491, + 0x93A491, + 0x92A390, + 0x90A18E, + 0x90A18E, + 0x41523F, + 0x021300, + 0x001000, + 0x000900, + 0x000C00, + 0x000A00, + 0x000800, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000900, + 0x000C00, + 0x000B00, + 0x000A00, + 0x021205, + 0x000E03, + 0x041409, + 0x7A8A80, + 0x9DAAA3, + 0x9AA7A0, + 0x99A69F, + 0x9BA8A1, + 0x9BA8A1, + 0x9BA8A1, + 0x9EA9A3, + 0xA2ADA7, + 0x9FAAA4, + 0x9FAAA4, + 0xA0ABA5, + 0xA0ABA5, + 0xA1AAA5, + 0xA0A9A4, + 0xA0A9A4, + 0x9EA9A1, + 0xA1AF9E, + 0xA1B29F, + 0xA2B3A0, + 0xA3B4A1, + 0xA2B3A0, + 0xA2B3A0, + 0xA3B4A1, + 0xA4B5A2, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA6B7A4, + 0xA7B8A5, + 0xA7B8A5, + 0xA7B8A5, + 0xA6B9A6, + 0xA6B9A6, + 0xA6B9A6, + 0xA6B9A6, + 0xA8B9A7, + 0xA8B9A7, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA8, + 0xA8B9A7, + 0xA9B7A6, + 0xA8B6A5, + 0xA7B5A4, + 0xA6B4A3, + 0xA6B4A3, + 0xA6B4A5, + 0xA2AEA0, + 0xA5B1A5, + 0xA5B3A6, + 0xA2B0A3, + 0xA1AFA2, + 0xA4B2A5, + 0xA6B4A7, + 0xA5B3A6, + 0xA0B1A1, + 0xA2B3A3, + 0xA2B3A3, + 0xA0B1A1, + 0xA0B19F, + 0xA3B4A2, + 0xA2B3A1, + 0xA0B19F, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9BAC99, + 0x9DAE9B, + 0x9EAF9C, + 0x9DAE9B, + 0x9AAB98, + 0x98A996, + 0x98A996, + 0x99AA97, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x93A491, + 0x93A491, + 0x94A592, + 0x94A592, + 0x93A491, + 0x92A390, + 0x91A28F, + 0x90A18E, + 0x566754, + 0x011200, + 0x000E00, + 0x000E00, + 0x000B00, + 0x000800, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000900, + 0x000E00, + 0x000B00, + 0x000900, + 0x031306, + 0x000B00, + 0x031308, + 0x889790, + 0x9CA9A2, + 0x99A5A1, + 0x97A39F, + 0x99A5A1, + 0x99A5A1, + 0x99A5A1, + 0x9DA8A4, + 0xA1ACA8, + 0xA2ADA9, + 0xA2ADA9, + 0xA3AEAA, + 0xA4AFAB, + 0xA5AEAB, + 0xA6AFAC, + 0xA6AFAC, + 0xA5B0AA, + 0xA1AFA0, + 0xA1B2A0, + 0xA2B3A1, + 0xA3B4A2, + 0xA2B3A1, + 0xA2B3A1, + 0xA3B4A2, + 0xA4B5A3, + 0xA6B7A5, + 0xA6B7A5, + 0xA6B7A5, + 0xA6B7A5, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA6B9A6, + 0xA6B9A6, + 0xA7BAA7, + 0xA7BAA7, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xABB9A8, + 0xA9B7A6, + 0xA5B3A2, + 0x9FAD9C, + 0x98A695, + 0x95A394, + 0x93A192, + 0x95A396, + 0x96A497, + 0x93A194, + 0x93A194, + 0x97A598, + 0x98A999, + 0x98A999, + 0x91A292, + 0x95A696, + 0x96A996, + 0x95A895, + 0x97AA97, + 0x9CAF9C, + 0xA0B3A0, + 0xA0B3A0, + 0x9EAF9C, + 0x9FB09D, + 0xA0B19E, + 0xA1B29F, + 0xA0B19E, + 0x9DAE9B, + 0x9AAB98, + 0x98A996, + 0x99AA97, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x93A491, + 0x94A592, + 0x94A592, + 0x94A592, + 0x94A592, + 0x93A491, + 0x91A28F, + 0x91A28F, + 0x6A7B68, + 0x001100, + 0x000A00, + 0x011200, + 0x000900, + 0x000700, + 0x000E00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x000E00, + 0x000B00, + 0x000900, + 0x011104, + 0x000A00, + 0x06160B, + 0x8F9E97, + 0x8F9C95, + 0x8C9894, + 0x8B9793, + 0x8C9894, + 0x8D9995, + 0x8D9995, + 0x909B97, + 0x949F9B, + 0x95A09C, + 0x95A09C, + 0x96A19D, + 0x96A19D, + 0x98A19E, + 0x99A29F, + 0x99A29F, + 0x99A49E, + 0x95A394, + 0x96A795, + 0x9AAB99, + 0x9DAE9C, + 0x9FB09E, + 0xA2B3A1, + 0xA5B6A4, + 0xA7B8A6, + 0xA6B7A5, + 0xA6B7A5, + 0xA6B7A5, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA8B9A7, + 0xA7BAA7, + 0xA7BAA7, + 0xA7BAA7, + 0xA7BAA7, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA3B4A2, + 0xA5B6A4, + 0xAAB8A7, + 0xACBAA9, + 0xACBAA9, + 0xA9B7A6, + 0xA6B4A3, + 0xA4B2A3, + 0xA4B0A2, + 0xA6B2A6, + 0xA4B2A3, + 0xA0AE9F, + 0x9EAC9D, + 0x9FAD9E, + 0xA0AE9F, + 0x9FAD9E, + 0x9AAB99, + 0x9CAD9B, + 0x9BAC9A, + 0x98A997, + 0x98A997, + 0x9CAD9B, + 0x9FB29E, + 0x9FB29E, + 0x9DAE9B, + 0x9EAF9C, + 0x9FB09D, + 0xA0B19E, + 0x9FB09D, + 0x9DAE9B, + 0x9AAB98, + 0x99AA97, + 0x9BAC99, + 0x99AA97, + 0x97A895, + 0x98A996, + 0x9AAB98, + 0x9AAB98, + 0x97A895, + 0x95A693, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x94A592, + 0x94A592, + 0x95A693, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x91A28F, + 0x7A8B78, + 0x021300, + 0x000800, + 0x011200, + 0x000900, + 0x000700, + 0x001000, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000A00, + 0x000E01, + 0x000B00, + 0x0E1E13, + 0x93A29B, + 0x99A5A1, + 0x97A3A1, + 0x97A3A1, + 0x9AA6A4, + 0x9BA7A3, + 0x9BA7A3, + 0x9DA8A4, + 0xA0ABA7, + 0x9FAAA4, + 0x9EA9A3, + 0x9EA9A1, + 0x9DA8A0, + 0x9EA89F, + 0x9EA89F, + 0x9FA9A0, + 0x9EAAA0, + 0x99A798, + 0x99AA9A, + 0x9CAD9D, + 0x9EAF9F, + 0xA0B1A1, + 0xA2B3A3, + 0xA4B5A5, + 0xA6B7A7, + 0xA6B7A7, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA8B9A9, + 0xA8B9A9, + 0xA8B9A9, + 0xA7BAA7, + 0xA7BAA7, + 0xA8BBA8, + 0xA8BBA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xA8B9A7, + 0xA7B8A6, + 0xA9B7A6, + 0xA8B6A5, + 0xA8B6A5, + 0xA9B7A6, + 0xA9B7A6, + 0xAAB7A6, + 0xA8B4A6, + 0xADB8AA, + 0xAEB9AB, + 0xABB6A8, + 0xA8B4A6, + 0xA9B5A7, + 0xA9B6A5, + 0xA7B4A3, + 0xA9B6A5, + 0xAAB7A6, + 0xA7B5A4, + 0xA4B2A1, + 0xA4B3A0, + 0xA8B7A4, + 0xA9B8A5, + 0xA8B7A4, + 0xA5B3A2, + 0xA4B2A1, + 0xA2B09F, + 0xA0AE9D, + 0xA0AE9D, + 0xA1AF9E, + 0xA2B09F, + 0xA3B1A0, + 0xA2B09F, + 0xA0AE9D, + 0x9FAD9C, + 0x9EAC9B, + 0x9FAD9C, + 0x9EAC9B, + 0x9BA998, + 0x99A796, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x94A592, + 0x95A693, + 0x95A693, + 0x95A693, + 0x95A693, + 0x94A592, + 0x92A390, + 0x92A390, + 0x849582, + 0x091A07, + 0x000900, + 0x001100, + 0x000A00, + 0x000700, + 0x001000, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000E00, + 0x000C00, + 0x000B00, + 0x001005, + 0x19291E, + 0x96A59E, + 0x9BA7A5, + 0x9AA6A6, + 0x9BA7A7, + 0x9FABAB, + 0xA1ADA9, + 0xA0ACA8, + 0xA1ACA6, + 0xA4AFA9, + 0xA3AFA5, + 0xA3AFA5, + 0xA2AEA0, + 0xA1AD9F, + 0xA3AE9E, + 0xA3AE9E, + 0xA4AF9F, + 0xA4B1A0, + 0xA3B1A2, + 0xA2B3A3, + 0xA4B5A5, + 0xA4B5A5, + 0xA3B4A4, + 0xA2B3A3, + 0xA3B4A4, + 0xA4B5A5, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA8B9A9, + 0xA8B9A9, + 0xA8B9A9, + 0xA8BBA8, + 0xA8BBA8, + 0xA8BBA8, + 0xA8BBA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xADBEAC, + 0xACBDAB, + 0xAAB8A7, + 0xA7B5A4, + 0xA3B1A0, + 0xA0AE9D, + 0x9EAC9B, + 0x9EAB9A, + 0x9AA597, + 0xA2AA9D, + 0xA6AEA1, + 0xA5ADA0, + 0xA5AD9E, + 0xA6AE9F, + 0xA3AE9E, + 0xA1AC9C, + 0xA2AD9D, + 0xA3AE9E, + 0xA2AD9C, + 0xA2AD9C, + 0xA3B09E, + 0xA6B3A1, + 0xA4B19F, + 0xA0AD9B, + 0x9FAD9C, + 0x9EAC9B, + 0x9DAB9A, + 0x9CAA99, + 0x9CAA99, + 0x9DAB9A, + 0x9EAC9B, + 0x9EAC9B, + 0x97A594, + 0x9BA998, + 0x9DAB9A, + 0x9CAA99, + 0x99A796, + 0x98A695, + 0x9AA897, + 0x9CAA99, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x95A693, + 0x95A693, + 0x96A794, + 0x96A794, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x8C9D8A, + 0x142512, + 0x000D00, + 0x000F00, + 0x000B00, + 0x000800, + 0x000D00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000B00, + 0x000700, + 0x000F00, + 0x000E00, + 0x000900, + 0x041409, + 0x213126, + 0x97A69F, + 0x8E9A9A, + 0x8E999B, + 0x909C9C, + 0x95A1A1, + 0x97A39F, + 0x96A29E, + 0x97A29A, + 0x99A49C, + 0x9CA89C, + 0x9CA89C, + 0x9CA998, + 0x9DAA99, + 0x9FAB97, + 0xA1AD99, + 0xA3AF99, + 0xA4B19D, + 0xA0AE9D, + 0xA0B1A1, + 0xA2B3A3, + 0xA3B4A4, + 0xA3B4A4, + 0xA4B5A5, + 0xA5B6A6, + 0xA6B7A7, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA7B8A8, + 0xA8B9A9, + 0xA8B9A9, + 0xA8B9A9, + 0xA8B9A9, + 0xA8BBA8, + 0xA8BBA8, + 0xA8BBA8, + 0xA8BBA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xA8B9A7, + 0xAABBA9, + 0xADBBAA, + 0xADBBAA, + 0xAAB8A7, + 0xA6B4A3, + 0xA2B09F, + 0xA0AD9C, + 0x9CA497, + 0xA3A99D, + 0xA7ADA1, + 0xA6ACA0, + 0xA4AA9C, + 0xA2A89A, + 0x9DA596, + 0x99A192, + 0x959D8E, + 0x969E8F, + 0x959E8D, + 0x959E8D, + 0x96A190, + 0x96A190, + 0x909B8A, + 0x889382, + 0x8D9B8A, + 0x8F9D8C, + 0x92A08F, + 0x94A291, + 0x94A291, + 0x92A08F, + 0x8F9D8C, + 0x8C9A89, + 0x82907F, + 0x8B9988, + 0x92A08F, + 0x92A08F, + 0x8C9A89, + 0x8B9988, + 0x92A08F, + 0x99A796, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x95A693, + 0x95A693, + 0x96A794, + 0x96A794, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x91A28F, + 0x1C2D1A, + 0x001100, + 0x000F00, + 0x000D00, + 0x000900, + 0x000C00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x001000, + 0x000900, + 0x001000, + 0x000E00, + 0x000A00, + 0x35443D, + 0x94A39C, + 0x93A097, + 0x95A299, + 0x95A299, + 0x95A29B, + 0x95A19D, + 0x96A29E, + 0x96A09F, + 0x959F9E, + 0x98A39F, + 0x97A29E, + 0x95A09A, + 0x949F99, + 0x949E95, + 0x949E95, + 0x949F91, + 0x94A092, + 0x919F90, + 0x94A595, + 0x9BAC9C, + 0x9FB0A0, + 0xA1B2A0, + 0xA2B3A1, + 0xA4B5A3, + 0xA6B7A5, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A5, + 0xA8B9A6, + 0xA9BAA7, + 0xA9BAA7, + 0xAABBA8, + 0xAABBA8, + 0xA6BCA5, + 0xA6BCA5, + 0xA7BDA6, + 0xA7BDA6, + 0xA9BCA8, + 0xA9BCA8, + 0xA9BCA8, + 0xA8BBA7, + 0xA8BBA7, + 0xABBEAA, + 0xAEBFAD, + 0xAABBA9, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA8B6A5, + 0xAAB8A7, + 0xA6B3A2, + 0xA5B2A1, + 0xA8B5A4, + 0xA9B6A5, + 0xA8B5A4, + 0xA7B4A3, + 0xA9B6A5, + 0xA8B5A4, + 0xADBAA9, + 0xA3B09F, + 0xABB8A7, + 0xA5B2A1, + 0xA8B5A4, + 0x9DAA99, + 0xA6B3A2, + 0x9DAE9B, + 0x9EAF9C, + 0x9FB09D, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9EAF9C, + 0x9DAE9B, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x98A996, + 0x97A895, + 0x96A794, + 0x95A693, + 0x95A693, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A892, + 0x96A892, + 0x96A892, + 0x96A892, + 0x95A791, + 0x94A690, + 0x93A58F, + 0x92A48E, + 0x849680, + 0x3C4E38, + 0x000B00, + 0x011300, + 0x000D00, + 0x000800, + 0x000F00, + 0x000E00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000E00, + 0x000800, + 0x001000, + 0x000E00, + 0x000C01, + 0x3C4B44, + 0x96A5A0, + 0x9CA9A0, + 0x9DAAA1, + 0x9EABA4, + 0x9FACA5, + 0xA1ADA9, + 0xA2AEAA, + 0xA4AFAB, + 0xA4AFAB, + 0xA4AFAB, + 0xA3AEAA, + 0xA3AEA8, + 0xA3AEA8, + 0xA5AFA6, + 0xA6B0A7, + 0xA6B0A5, + 0xA6B2A6, + 0xA0AE9F, + 0xA1B2A2, + 0xA5B6A6, + 0xA5B6A6, + 0xA4B5A3, + 0xA2B3A1, + 0xA2B3A1, + 0xA3B4A2, + 0xA7B8A6, + 0xA7B8A6, + 0xA8B9A6, + 0xA8B9A6, + 0xA9BAA7, + 0xA9BAA7, + 0xAABBA8, + 0xAABBA8, + 0xA7BDA6, + 0xA7BDA6, + 0xA7BDA6, + 0xA7BDA6, + 0xA9BCA8, + 0xA9BCA8, + 0xA8BBA7, + 0xA8BBA7, + 0xA7B8A5, + 0xA7B8A5, + 0xA8B9A7, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xADBEAC, + 0xB3C1B0, + 0xAAB8A7, + 0xABB8A7, + 0xABB8A7, + 0xACB9A8, + 0xADBAA9, + 0xADBAA9, + 0xADBAA9, + 0xACB9A8, + 0xA4B1A0, + 0xA7B4A3, + 0x9FAC9B, + 0xA3B09F, + 0xA4B1A0, + 0xA6B3A2, + 0xA2AF9E, + 0xACB9A8, + 0xA4B5A2, + 0xA2B3A0, + 0xA0B19E, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A892, + 0x96A892, + 0x96A892, + 0x96A892, + 0x95A791, + 0x94A690, + 0x93A58F, + 0x92A48E, + 0x899B85, + 0x455741, + 0x000D00, + 0x011300, + 0x000E00, + 0x000800, + 0x000E00, + 0x000C00, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000800, + 0x000F00, + 0x000E00, + 0x000F04, + 0x485750, + 0x97A6A1, + 0x96A39A, + 0x96A39A, + 0x98A59E, + 0x9AA7A0, + 0x9BA7A3, + 0x9CA8A4, + 0x9DA8A4, + 0x9EA9A5, + 0x9FAAA4, + 0xA0ABA5, + 0xA1ACA4, + 0xA2ADA5, + 0xA3ADA4, + 0xA4AEA5, + 0xA4AEA3, + 0xA3AFA3, + 0x9EAC9D, + 0x9FB0A0, + 0xA3B4A4, + 0xA4B5A5, + 0xA3B4A4, + 0xA2B3A3, + 0xA4B5A3, + 0xA6B7A5, + 0xA7B8A6, + 0xA8B9A7, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA7, + 0xA9BAA7, + 0xAABBA8, + 0xAABBA8, + 0xA9BCA6, + 0xA9BCA6, + 0xAABDA7, + 0xA9BCA6, + 0xA9BCA8, + 0xA8BBA7, + 0xA8BBA7, + 0xA7BAA6, + 0xADBEAB, + 0xA8B9A6, + 0xA5B6A4, + 0xA6B7A5, + 0xA5B3A2, + 0xA1AF9E, + 0xA4B2A1, + 0xAAB8A7, + 0xA7B4A3, + 0xAAB7A6, + 0xA8B5A4, + 0xA2AF9E, + 0xA1AE9D, + 0xA7B4A3, + 0xAAB7A6, + 0xA8B5A4, + 0xACB9A8, + 0xACB9A8, + 0xABB8A7, + 0xA7B4A3, + 0xAEBBAA, + 0xA5B2A1, + 0xA4B1A0, + 0xA8B5A4, + 0xA0B19E, + 0xA0B19E, + 0xA1B29F, + 0xA2B3A0, + 0xA2B3A0, + 0xA2B3A0, + 0xA1B29F, + 0xA1B29F, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x8FA08D, + 0x536451, + 0x000E00, + 0x001100, + 0x000D00, + 0x000900, + 0x000C00, + 0x000A00, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000F00, + 0x000E00, + 0x001005, + 0x55645D, + 0x97A6A1, + 0x8D9A93, + 0x8C9992, + 0x8D9A93, + 0x8F9C95, + 0x909D96, + 0x8E9B94, + 0x8F9A94, + 0x919C96, + 0x929D97, + 0x929D97, + 0x939E96, + 0x949F97, + 0x959F96, + 0x949E95, + 0x939D94, + 0x919D93, + 0x9AA89B, + 0x9BAB9E, + 0x9FB0A0, + 0xA1B2A2, + 0xA1B2A2, + 0xA3B4A4, + 0xA6B7A7, + 0xAABBAB, + 0xA8B9A7, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA8, + 0xAABBA8, + 0xAABDA7, + 0xAABDA7, + 0xAABDA7, + 0xAABDA7, + 0xA9BCA8, + 0xA8BBA7, + 0xA8B9A6, + 0xA8B9A6, + 0x8FA08D, + 0x879885, + 0x849281, + 0x839180, + 0x7E8C7B, + 0x768473, + 0x768473, + 0x7C8A79, + 0x8D9B8A, + 0x909E8D, + 0x8B9988, + 0x7E8C7B, + 0x7B8978, + 0x859382, + 0x8B9988, + 0x8A9887, + 0x707E6D, + 0x748271, + 0x808E7D, + 0x808E7D, + 0x93A190, + 0x879584, + 0x8A9887, + 0x8B9988, + 0x839481, + 0x899A87, + 0x92A390, + 0x9BAC99, + 0xA0B19E, + 0xA0B19E, + 0x9EAF9C, + 0x9CAD9A, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x91A28F, + 0x627360, + 0x001000, + 0x000F00, + 0x000C00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000F00, + 0x000B00, + 0x000B00, + 0x001000, + 0x000D00, + 0x011106, + 0x62716A, + 0x95A49F, + 0x9EAAA6, + 0x9CA8A4, + 0x9CA8A4, + 0xA0ACA8, + 0xA1AEA7, + 0x9EABA4, + 0x9FAAA2, + 0xA2ADA5, + 0x9FAAA2, + 0xA0ABA3, + 0xA1ACA4, + 0xA2ADA5, + 0xA3ADA5, + 0xA3ADA5, + 0xA2ACA4, + 0xA0ABA3, + 0xA2B0A3, + 0xA3B3A6, + 0xA5B5A8, + 0xA5B5A8, + 0xA3B3A6, + 0xA3B3A6, + 0xA5B6A6, + 0xA7B8A8, + 0xA9BAAA, + 0xA9BAAA, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABDA7, + 0xAABDA7, + 0xABBDA7, + 0xABBDA7, + 0xAABBA8, + 0xA9BAA7, + 0xA8B9A6, + 0xA8B9A6, + 0xB3C2AF, + 0xADBCA9, + 0xABB9A8, + 0xAEBCAB, + 0xADBBAA, + 0xA8B6A5, + 0xA9B6A5, + 0xADBAA9, + 0xA6B4A3, + 0xAAB8A7, + 0xA6B4A3, + 0x9AA897, + 0x98A695, + 0xA0AE9D, + 0xA3B1A0, + 0x9FAD9C, + 0x9BA998, + 0x9BA998, + 0xA0AE9D, + 0x96A493, + 0x9FAD9C, + 0x8A9887, + 0x869483, + 0x839180, + 0x839481, + 0x899A87, + 0x92A390, + 0x9AAB98, + 0x9FB09D, + 0xA0B19E, + 0x9EAF9C, + 0x9CAD9A, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x96A794, + 0x96A794, + 0x96A794, + 0x96A794, + 0x95A693, + 0x94A592, + 0x93A491, + 0x92A390, + 0x90A18E, + 0x70816E, + 0x011200, + 0x000E00, + 0x000B00, + 0x000D00, + 0x000B00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x001200, + 0x000B00, + 0x000D00, + 0x001000, + 0x000D00, + 0x031308, + 0x6E7D76, + 0x94A39E, + 0x9BA7A5, + 0x98A4A2, + 0x9AA6A2, + 0xA0ACA8, + 0xA2AFA8, + 0x9FACA5, + 0xA1ACA4, + 0xA6B1A9, + 0xA3AFA5, + 0xA4B0A6, + 0xA5B1A7, + 0xA7B3A9, + 0xA9B3AB, + 0xABB5AD, + 0xABB4AF, + 0xABB6AE, + 0xA1AEA4, + 0xA2B2A5, + 0xA5B5A8, + 0xA5B5A8, + 0xA4B4A7, + 0xA3B3A6, + 0xA5B5A8, + 0xA7B7AA, + 0xA9BAAA, + 0xA9BAAA, + 0xA9BAAA, + 0xA9BAAA, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABCA6, + 0xAABCA6, + 0xABBDA7, + 0xAABCA6, + 0xAABBA8, + 0xA9BAA7, + 0xABBAA7, + 0xAAB9A6, + 0xAAB9A6, + 0xA8B7A4, + 0xA7B5A4, + 0xA8B6A5, + 0xABB8A7, + 0xACB9A8, + 0xACB9A8, + 0xACB9A8, + 0xA5B6A4, + 0xA9BAA8, + 0xAABBA9, + 0xA7B8A6, + 0xA9BAA8, + 0xACBDAB, + 0xA9BAA8, + 0xA2B3A1, + 0xA3B4A2, + 0xA3B4A2, + 0xA4B5A3, + 0xA2B3A1, + 0xABBCAA, + 0xA4B5A3, + 0xA5B6A4, + 0xAABBA9, + 0xA0B19E, + 0xA0B19E, + 0xA1B29F, + 0xA2B3A0, + 0xA2B3A0, + 0xA2B3A0, + 0xA1B29F, + 0xA1B29F, + 0x9FB09D, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x96A795, + 0x96A795, + 0x96A795, + 0x96A795, + 0x95A694, + 0x94A593, + 0x93A492, + 0x92A391, + 0x8E9F8D, + 0x7E8F7D, + 0x051604, + 0x000E00, + 0x000A00, + 0x000D00, + 0x000A00, + 0x000C00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x011300, + 0x000A00, + 0x000D00, + 0x001000, + 0x000C00, + 0x041409, + 0x798881, + 0x94A39E, + 0x899593, + 0x85918F, + 0x87938F, + 0x8E9A96, + 0x909D94, + 0x8D9A91, + 0x8F9B91, + 0x94A096, + 0x929E94, + 0x939F95, + 0x939F95, + 0x95A197, + 0x97A199, + 0x99A39B, + 0x9BA49F, + 0x9BA6A0, + 0x98A59B, + 0x9AAA9F, + 0x9FAFA4, + 0xA2B2A7, + 0xA3B3A6, + 0xA3B3A6, + 0xA6B6A9, + 0xA8B8AB, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xA9BAAA, + 0xA9BAA8, + 0xAABBA8, + 0xAABCA6, + 0xAABCA6, + 0xAABCA6, + 0xACBBA8, + 0xACBBA8, + 0xABBAA7, + 0xABBAA7, + 0xA9B8A5, + 0xAAB9A6, + 0xA6B3A2, + 0x9FAC9B, + 0x9FAC9B, + 0xA4B1A0, + 0xA4B1A0, + 0x9EAB9A, + 0x98A997, + 0x98A997, + 0x9AAB99, + 0xA0B19F, + 0xA7B8A6, + 0xAABBA9, + 0xA7B8A6, + 0xA2B3A1, + 0xAABBA9, + 0xACBDAB, + 0xA3B4A2, + 0xA4B5A3, + 0xA3B4A2, + 0xA3B4A2, + 0x9EAF9D, + 0xA6B7A5, + 0xA6B7A4, + 0xA4B5A2, + 0xA2B3A0, + 0x9FB09D, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x96A795, + 0x96A795, + 0x96A795, + 0x96A795, + 0x95A694, + 0x94A593, + 0x93A492, + 0x92A391, + 0x8D9E8C, + 0x8B9C8A, + 0x0B1C0A, + 0x001100, + 0x000B00, + 0x000D00, + 0x000800, + 0x000D00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x011300, + 0x000900, + 0x000D00, + 0x001000, + 0x000D00, + 0x06160B, + 0x7F8E87, + 0x95A4A1, + 0x9CA8A6, + 0x98A4A4, + 0x99A5A1, + 0x9FABA7, + 0xA0ADA4, + 0x9BA89F, + 0x9DA99F, + 0xA2AEA4, + 0x9DA99D, + 0x9CA89C, + 0x9CA89E, + 0x9CA89E, + 0x9DA79F, + 0x9FA8A3, + 0xA0A9A4, + 0xA0ABA5, + 0x98A59C, + 0x9BABA0, + 0xA0B0A5, + 0xA3B3A8, + 0xA3B3A6, + 0xA3B3A6, + 0xA4B4A7, + 0xA6B6A9, + 0xAABAAD, + 0xAABAAD, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xAABBAB, + 0xA9BAAA, + 0xA9BAA8, + 0xA9BAA7, + 0xA9BBA5, + 0xAABCA6, + 0xAABCA6, + 0xACBBA8, + 0xACBBA8, + 0xACBBA8, + 0xABBAA7, + 0xA8B7A4, + 0xAAB9A6, + 0xA4B1A0, + 0x97A493, + 0x96A392, + 0x9EAB9A, + 0x9EAB9A, + 0x96A392, + 0x94A593, + 0x8D9E8C, + 0x8D9E8C, + 0x96A795, + 0xA1B2A0, + 0xA7B8A6, + 0xA8B9A7, + 0xA9BAA8, + 0xA5B6A4, + 0xAABBA9, + 0xA1B2A0, + 0xABBCAA, + 0xA5B6A4, + 0xAABBA9, + 0x9FB09E, + 0xA9BAA8, + 0xA2B3A0, + 0xA2B3A0, + 0xA4B5A2, + 0xA4B5A2, + 0xA4B5A2, + 0xA4B5A2, + 0xA2B3A0, + 0xA1B29F, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x96A795, + 0x96A795, + 0x96A795, + 0x96A795, + 0x95A694, + 0x94A593, + 0x93A492, + 0x92A391, + 0x8E9F8D, + 0x93A492, + 0x10210F, + 0x031402, + 0x000B00, + 0x000D00, + 0x000800, + 0x000E00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000A00, + 0x000B00, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000700, + 0x000A00, + 0x000C00, + 0x000900, + 0x000B00, + 0x000E00, + 0x000B00, + 0x000800, + 0x000600, + 0x011104, + 0x000F02, + 0x000700, + 0x000900, + 0x000D00, + 0x000C00, + 0x000F00, + 0x000E00, + 0x000D00, + 0x000E01, + 0x000B00, + 0x08180D, + 0x8A9A90, + 0x97A69F, + 0x98A7A0, + 0x9BAAA5, + 0x9EADA8, + 0x9FAEA9, + 0x9FAEA9, + 0x9EADA8, + 0x9EADA6, + 0x9EADA6, + 0x9EADA6, + 0xA0AFA8, + 0xA1B0A9, + 0xA0AFA8, + 0xA1B1A7, + 0xA4B4AA, + 0xA5B5AB, + 0xA3B3A9, + 0xA3B3A6, + 0xA4B4A7, + 0xA4B4A7, + 0xA4B4A7, + 0xA3B3A6, + 0xA4B4A7, + 0xA6B7A7, + 0xA8B9A9, + 0xA8B9A9, + 0xA9BAAA, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xADBBAA, + 0xADBBAA, + 0xAAB8A7, + 0xAAB8A7, + 0xA9B5A7, + 0xADB9AB, + 0xB4C0B2, + 0xAEBAAC, + 0xA7B3A5, + 0xA9B7A8, + 0xA5B8A5, + 0xA3B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA5B8A5, + 0xA6B7A5, + 0xA7B8A6, + 0xA6B7A5, + 0xA8B9A7, + 0xA9B7A6, + 0xA6B4A3, + 0xA5B3A2, + 0xA7B5A4, + 0xA7B4A3, + 0xA4B1A0, + 0xA1B2A0, + 0x9FB09E, + 0xA0B19F, + 0xA2B3A1, + 0xA2B3A1, + 0x9FB09E, + 0x9EAF9D, + 0xA0B19F, + 0xA1B2A0, + 0xA0B19F, + 0x9EAF9D, + 0x9EAF9D, + 0x9EAF9D, + 0x9EAF9D, + 0x9CAD9B, + 0x9BAC9A, + 0x9BAC9A, + 0x9BAC9A, + 0x9AAB99, + 0x9AAB99, + 0x99AA98, + 0x99AA98, + 0x98A997, + 0x98A997, + 0x96A795, + 0x9AAB99, + 0x9BAC9A, + 0x98A997, + 0x98A997, + 0x9AAB99, + 0x9AAB99, + 0x97A895, + 0x97A993, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x8D9D90, + 0x8B9B8E, + 0x2E3F2F, + 0x000E00, + 0x000F00, + 0x000C00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000900, + 0x000C00, + 0x001000, + 0x000D00, + 0x000700, + 0x000700, + 0x001100, + 0x000800, + 0x001000, + 0x001000, + 0x000A00, + 0x000A00, + 0x000E00, + 0x000B00, + 0x000700, + 0x000700, + 0x000F02, + 0x000600, + 0x000600, + 0x001000, + 0x000D00, + 0x000A00, + 0x031402, + 0x000E00, + 0x000E00, + 0x000D00, + 0x000E01, + 0x000C00, + 0x0F1F14, + 0x8E9E94, + 0x99A8A1, + 0x8F9E97, + 0x91A09B, + 0x94A39E, + 0x97A6A1, + 0x99A8A3, + 0x9CABA6, + 0x9FAEA7, + 0xA1B0A9, + 0x9FAEA7, + 0xA1B0A9, + 0xA1B0A9, + 0x9FAEA7, + 0x9FAFA5, + 0xA2B2A8, + 0xA3B3A9, + 0xA1B1A7, + 0xA4B4A7, + 0xA4B4A7, + 0xA5B5A8, + 0xA4B4A7, + 0xA4B5A5, + 0xA4B5A5, + 0xA6B7A7, + 0xA8B9A9, + 0xA9BAAA, + 0xA9BAAA, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xADBBAA, + 0xADBBAA, + 0xB2C0AF, + 0xB2C0AF, + 0xADB9AB, + 0xAAB6A8, + 0xACB8AA, + 0xA8B4A6, + 0xA8B4A6, + 0xB1BFB0, + 0xA7B8A6, + 0xA4B7A4, + 0xA3B6A3, + 0xA4B7A4, + 0xA6B9A6, + 0xA7BAA7, + 0xA6B7A5, + 0xA4B5A3, + 0xA4B5A3, + 0xA6B7A5, + 0xA8B6A5, + 0xA6B4A3, + 0xA7B5A4, + 0xA9B7A6, + 0xAAB7A6, + 0xA8B5A4, + 0xA7B8A6, + 0xA5B6A4, + 0xA5B6A4, + 0xA7B8A6, + 0xA5B6A4, + 0xA2B3A1, + 0xA0B19F, + 0xA1B2A0, + 0x9DAE9C, + 0x9CAD9B, + 0x9BAC9A, + 0x9CAD9B, + 0x9DAE9C, + 0x9DAE9C, + 0x9CAD9B, + 0x9BAC9A, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9BAC9A, + 0x98A997, + 0x9BAC9A, + 0x9BAC9A, + 0x98A997, + 0x98A997, + 0x9AAB99, + 0x9AAB99, + 0x97A895, + 0x97A993, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x8F9F92, + 0x8B9B8E, + 0x364737, + 0x000F00, + 0x000F00, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000F00, + 0x000700, + 0x000700, + 0x000F00, + 0x021300, + 0x081906, + 0x21321F, + 0x40513E, + 0x001100, + 0x132411, + 0x10210E, + 0x031401, + 0x0A1B08, + 0x0F200D, + 0x061704, + 0x011200, + 0x102111, + 0x203023, + 0x091A0A, + 0x000D00, + 0x000E00, + 0x001100, + 0x041503, + 0x000700, + 0x000D00, + 0x000D00, + 0x000D00, + 0x000F02, + 0x000E01, + 0x19291E, + 0x91A197, + 0x9AA9A2, + 0x8A9992, + 0x8B9A95, + 0x8C9B96, + 0x8C9B96, + 0x8C9B96, + 0x8E9D98, + 0x909F98, + 0x93A29B, + 0x86958E, + 0x899891, + 0x8C9B94, + 0x8E9D96, + 0x93A399, + 0x9CACA2, + 0xA1B1A7, + 0xA1B1A7, + 0xA4B4A7, + 0xA5B5A8, + 0xA5B6A6, + 0xA5B6A6, + 0xA4B5A5, + 0xA5B6A6, + 0xA7B8A8, + 0xA8B9A9, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xADBBAA, + 0xADBBAA, + 0xA2B09F, + 0xA4B2A1, + 0x9DA99B, + 0x94A092, + 0x919D8F, + 0x8C988A, + 0x8F9B8D, + 0x9BA99A, + 0x97A896, + 0x93A693, + 0x92A391, + 0x93A492, + 0x97A896, + 0x98A997, + 0x95A694, + 0x92A391, + 0x98A695, + 0x9AA897, + 0x9AA897, + 0x97A594, + 0x98A695, + 0x9AA897, + 0x9BA998, + 0x99A796, + 0x97A896, + 0x96A795, + 0x98A997, + 0x9CAD9B, + 0x9DAE9C, + 0x9CAD9B, + 0x9CAD9B, + 0x9EAF9D, + 0xA1B2A0, + 0xA0B19F, + 0x9EAF9D, + 0x9EAF9D, + 0x9FB09E, + 0x9FB09E, + 0x9EAF9D, + 0x9DAE9C, + 0x9BAC9A, + 0x9BAC9A, + 0x9BAC9A, + 0x9BAC9A, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x9AAB99, + 0x98A997, + 0x9AAB99, + 0x99AA98, + 0x97A896, + 0x97A896, + 0x99AA98, + 0x9AAB99, + 0x99AA97, + 0x97A993, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x91A194, + 0x8B9B8E, + 0x445545, + 0x001000, + 0x000F00, + 0x000C00, + 0x000C00, + 0x000D00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000A00, + 0x000800, + 0x000B00, + 0x000D00, + 0x000700, + 0x000700, + 0x000700, + 0x000D00, + 0x000A00, + 0x0D1E0B, + 0x061704, + 0x000D00, + 0x091A07, + 0x0B1C09, + 0x011200, + 0x051604, + 0x000900, + 0x061707, + 0x051604, + 0x051604, + 0x000A00, + 0x1B2C19, + 0x425340, + 0x061704, + 0x000D00, + 0x000D00, + 0x000C00, + 0x000E01, + 0x000E01, + 0x233328, + 0x92A298, + 0x99A8A1, + 0xA0AFA8, + 0xA0AFAA, + 0xA1B0AB, + 0xA0AFAA, + 0x9EADA8, + 0x9EADA8, + 0x9FAEA7, + 0xA0AFA8, + 0xA3B2AB, + 0xA4B3AC, + 0xA2B1AA, + 0x9FAEA7, + 0xA0B0A6, + 0xA4B4AA, + 0xA6B6AC, + 0xA6B6AB, + 0xA4B4A7, + 0xA5B6A6, + 0xA6B7A7, + 0xA5B6A6, + 0xA4B5A5, + 0xA5B6A6, + 0xA7B8A6, + 0xA9BAA8, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA8, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xADBBAA, + 0xADBBAA, + 0xAEBCAB, + 0xB3C1B0, + 0xB1BDAF, + 0xABB7A9, + 0xA9B5A7, + 0xA4B0A2, + 0xA4B0A2, + 0xADB9AB, + 0xA6B7A5, + 0xA4B5A3, + 0xA4B5A3, + 0xA4B5A3, + 0xA8B6A5, + 0xA8B6A5, + 0xA6B4A3, + 0xA4B2A1, + 0xA0AE9D, + 0xA2B09F, + 0xA1AF9E, + 0x9DAB9A, + 0x9CAA99, + 0x9EAC9B, + 0x9EAC9B, + 0x9CAA99, + 0x9AAB99, + 0x99AA98, + 0x9BAC9A, + 0xA0B19F, + 0xA2B3A1, + 0xA2B3A1, + 0xA2B3A1, + 0xA5B6A4, + 0xA0B19F, + 0x9FB09E, + 0x9DAE9C, + 0x9CAD9B, + 0x9CAD9B, + 0x9BAC9A, + 0x9AAB99, + 0x98A997, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x96A794, + 0x97A895, + 0x99AA97, + 0x9AAB98, + 0x99AA97, + 0x97A991, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x92A295, + 0x8A9A8D, + 0x556656, + 0x001101, + 0x000E00, + 0x000A00, + 0x000C00, + 0x000D00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000700, + 0x000700, + 0x000C00, + 0x000D00, + 0x000D00, + 0x000D00, + 0x000E00, + 0x000C00, + 0x000700, + 0x000F00, + 0x000700, + 0x000700, + 0x021300, + 0x000E00, + 0x000700, + 0x041502, + 0x122311, + 0x182917, + 0x162714, + 0x182916, + 0x001100, + 0x10210E, + 0x324330, + 0x000E00, + 0x000D00, + 0x000D00, + 0x000C00, + 0x000D00, + 0x000D00, + 0x2E3E33, + 0x93A399, + 0x95A49D, + 0x93A29B, + 0x96A5A0, + 0x9AA9A4, + 0x9DACA7, + 0x9EADA8, + 0x9FAEA9, + 0xA1B0A9, + 0xA2B1AA, + 0xA4B3AC, + 0xA5B4AD, + 0xA4B3AC, + 0xA1B0A9, + 0xA2B2A8, + 0xA6B6AC, + 0xA8B8AE, + 0xA7B7AC, + 0xA5B5A8, + 0xA6B7A7, + 0xA6B7A7, + 0xA6B7A7, + 0xA5B6A4, + 0xA6B7A5, + 0xA8B9A7, + 0xAABBA9, + 0xAABBA9, + 0xAABBA9, + 0xAABBA8, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xADBBAA, + 0xADBBAA, + 0xA8B6A5, + 0xADBBAA, + 0xABB7A9, + 0xA9B5A7, + 0xADB9AB, + 0xADB9AB, + 0xAAB6A8, + 0xAEBAAC, + 0xAAB7A6, + 0xACB9A8, + 0xAEBBAA, + 0xAEBBAA, + 0xABB9A8, + 0xA9B7A6, + 0xA9B7A6, + 0xAAB8A7, + 0xA8B6A5, + 0xA9B7A6, + 0xA8B6A5, + 0xA4B2A1, + 0xA3B1A0, + 0xA5B3A2, + 0xA6B4A3, + 0xA4B2A1, + 0xA2B3A1, + 0xA0B19F, + 0xA0B19F, + 0xA2B3A1, + 0xA2B3A1, + 0x9EAF9D, + 0x9DAE9C, + 0x9EAF9D, + 0xA3B4A2, + 0xA2B3A1, + 0xA1B2A0, + 0xA0B19F, + 0xA1B2A0, + 0xA0B19F, + 0x9FB09E, + 0x9EAF9D, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x9CAD9A, + 0x9AAB98, + 0x98A996, + 0x98A996, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x97A991, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x91A194, + 0x87978A, + 0x677868, + 0x011202, + 0x000D00, + 0x000900, + 0x000C00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000C00, + 0x000E00, + 0x000800, + 0x000700, + 0x000700, + 0x000700, + 0x000A00, + 0x000700, + 0x000B00, + 0x000C00, + 0x000700, + 0x000800, + 0x001000, + 0x000900, + 0x000700, + 0x031401, + 0x000700, + 0x000C00, + 0x000800, + 0x000D00, + 0x001000, + 0x000800, + 0x000B00, + 0x000D00, + 0x000D00, + 0x000C00, + 0x000C00, + 0x000D00, + 0x000E01, + 0x39493F, + 0x94A49A, + 0x93A29B, + 0x81908B, + 0x84938E, + 0x899893, + 0x8D9C97, + 0x8F9E99, + 0x909F9A, + 0x91A099, + 0x92A19A, + 0x899891, + 0x8D9C95, + 0x8F9E97, + 0x91A099, + 0x97A79D, + 0x9FAFA5, + 0xA4B4AA, + 0xA5B5AA, + 0xA5B6A6, + 0xA6B7A5, + 0xA7B8A6, + 0xA6B7A5, + 0xA5B6A4, + 0xA6B7A5, + 0xA8B9A7, + 0xAABBA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xACBDAA, + 0xACBEA8, + 0xACBEA8, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xAEBCAB, + 0xAEBCAB, + 0xABB9A8, + 0xACBAA9, + 0xA4B0A2, + 0x9EAA9C, + 0xA3AFA1, + 0xA3AFA1, + 0x9FAB9D, + 0x9FAB9D, + 0xA5B0A0, + 0xAAB5A5, + 0xACB9A8, + 0xABB8A7, + 0xA7B4A3, + 0xA4B1A0, + 0xA5B2A1, + 0xA7B4A3, + 0xA9B7A6, + 0xABB9A8, + 0xAAB8A7, + 0xA7B5A4, + 0xA7B5A4, + 0xAAB8A7, + 0xACBAA9, + 0xABB9A8, + 0xA5B6A4, + 0xA3B4A2, + 0xA3B4A2, + 0xA5B6A4, + 0xA5B6A4, + 0xA1B2A0, + 0xA0B19F, + 0xA1B2A0, + 0x9DAE9C, + 0x9CAD9B, + 0x9BAC9A, + 0x9CAD9B, + 0x9DAE9C, + 0x9EAF9D, + 0x9DAE9C, + 0x9CAD9B, + 0x98A996, + 0x98A996, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9EAF9C, + 0x9AAB98, + 0x98A996, + 0x9BAC99, + 0x9CAD9A, + 0x9AAB98, + 0x97A895, + 0x96A794, + 0x97A991, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x91A194, + 0x859588, + 0x798A7A, + 0x041505, + 0x000E00, + 0x000800, + 0x000C00, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000700, + 0x000800, + 0x000B00, + 0x000D00, + 0x000E00, + 0x000D00, + 0x000800, + 0x000700, + 0x000800, + 0x000700, + 0x000700, + 0x000700, + 0x000700, + 0x000700, + 0x000700, + 0x000900, + 0x000900, + 0x000E00, + 0x000800, + 0x000E00, + 0x061800, + 0x000B00, + 0x000800, + 0x061802, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000D00, + 0x000F02, + 0x435349, + 0x97A79D, + 0x94A39C, + 0x98A7A2, + 0x9AA9A4, + 0x9CABA6, + 0x9DACA7, + 0x9DACA7, + 0x9DACA7, + 0x9EADA6, + 0x9FAEA7, + 0xA1B0A9, + 0xA4B3AC, + 0xA4B3AC, + 0xA2B1AA, + 0xA2B2A8, + 0xA5B5AB, + 0xA6B6AC, + 0xA4B4A9, + 0xA6B7A7, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA6B7A5, + 0xA7B8A6, + 0xA9BAA7, + 0xAABBA8, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xACBDAA, + 0xACBEA8, + 0xACBEA8, + 0xACBEA8, + 0xACBEA8, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xAEBCAB, + 0xAEBCAB, + 0xA9B7A6, + 0xA9B7A6, + 0x9FAB9D, + 0x97A395, + 0x9AA698, + 0x9AA698, + 0x95A193, + 0x94A092, + 0x97A292, + 0x9AA595, + 0x9DA898, + 0x9CA797, + 0x9AA595, + 0x97A292, + 0x95A291, + 0x96A392, + 0x93A08F, + 0x94A190, + 0x92A08F, + 0x8F9D8C, + 0x8F9D8C, + 0x92A08F, + 0x92A391, + 0x91A290, + 0x8B9C8A, + 0x8A9B89, + 0x8B9C8A, + 0x8E9F8D, + 0x8FA08E, + 0x8D9E8C, + 0x8C9D8B, + 0x8E9F8D, + 0x90A18F, + 0x8FA08E, + 0x8E9F8D, + 0x8E9F8D, + 0x8E9F8D, + 0x8E9F8D, + 0x8D9E8C, + 0x8B9C8A, + 0x95A791, + 0x95A791, + 0x94A690, + 0x94A690, + 0x94A690, + 0x93A58F, + 0x93A58F, + 0x93A58F, + 0x95A791, + 0x91A38D, + 0x92A48E, + 0x98AA94, + 0x9CAE98, + 0x9AAC96, + 0x97A993, + 0x97A993, + 0x97A991, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x91A194, + 0x849487, + 0x879888, + 0x071808, + 0x000F00, + 0x000900, + 0x000C00, + 0x000900, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000D00, + 0x000800, + 0x000700, + 0x000900, + 0x000900, + 0x000700, + 0x000700, + 0x000D00, + 0x000800, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000800, + 0x000D00, + 0x001000, + 0x000700, + 0x000A00, + 0x000800, + 0x000F00, + 0x000900, + 0x000800, + 0x000D00, + 0x000E00, + 0x000800, + 0x000C00, + 0x000B00, + 0x000C00, + 0x000E01, + 0x001005, + 0x49594F, + 0x9BAAA3, + 0x97A69F, + 0x9BAAA5, + 0x9CABA6, + 0x9DACA7, + 0x9DACA7, + 0x9DACA7, + 0x9FAEA9, + 0xA1B0A9, + 0xA4B3AC, + 0x9FAEA7, + 0xA2B1AA, + 0xA3B2AB, + 0xA2B1AA, + 0xA3B3A9, + 0xA6B6AC, + 0xA6B6AC, + 0xA4B4A9, + 0xA6B7A7, + 0xA7B8A6, + 0xA7B8A6, + 0xA7B8A6, + 0xA6B7A5, + 0xA7B8A6, + 0xA9BAA7, + 0xABBCA9, + 0xABBCA9, + 0xABBCA9, + 0xABBDA7, + 0xACBEA8, + 0xACBEA8, + 0xACBEA8, + 0xACBEA8, + 0xADBFA9, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xAEBCAB, + 0xAEBCAB, + 0xACBAA9, + 0xB1BFAE, + 0xADB9AB, + 0xA9B5A7, + 0xAEBAAC, + 0xB0BCAE, + 0xACB8AA, + 0xACB7A9, + 0xAEB9A9, + 0xB1B9AA, + 0xB0BBAB, + 0xB1BCAC, + 0xB1BCAC, + 0xAFBAAA, + 0xABB8A7, + 0xAAB7A6, + 0xADBAA9, + 0xAEBBAA, + 0xAAB8A7, + 0xA6B4A3, + 0xA5B3A2, + 0xA8B6A5, + 0xA7B8A6, + 0xA6B7A5, + 0xA4B5A3, + 0xA2B3A1, + 0xA2B3A1, + 0xA3B4A2, + 0xA2B3A1, + 0x9EAF9D, + 0x9CAD9B, + 0x9DAE9C, + 0x9EAF9D, + 0x9CAD9B, + 0x99AA98, + 0x97A896, + 0x96A795, + 0x94A593, + 0x91A290, + 0x8FA08E, + 0x94A690, + 0x93A58F, + 0x91A38D, + 0x8FA18B, + 0x8D9F89, + 0x8B9D87, + 0x899B85, + 0x889A84, + 0x889A84, + 0x859781, + 0x899B85, + 0x93A58F, + 0x9AAC96, + 0x9AAC96, + 0x99AB95, + 0x99AB95, + 0x97A991, + 0x97A993, + 0x97A993, + 0x97A895, + 0x96A795, + 0x94A593, + 0x93A494, + 0x92A393, + 0x91A194, + 0x849487, + 0x90A191, + 0x0A1B0B, + 0x001100, + 0x000A00, + 0x000D00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000C00, + 0x000800, + 0x000800, + 0x000700, + 0x000900, + 0x000A00, + 0x000B00, + 0x000D00, + 0x000D00, + 0x000800, + 0x000D00, + 0x000F00, + 0x07170A, + 0x5B6B61, + 0x94A3A0, + 0x8A9898, + 0x909F9A, + 0x92A19C, + 0x96A5A0, + 0x98A7A2, + 0x99A8A3, + 0x99A8A3, + 0x9AA9A2, + 0x9BAAA3, + 0x9FAEA7, + 0xA0AFA8, + 0xA0AFA8, + 0xA1B0A9, + 0xA2B2A8, + 0xA3B3A9, + 0xA4B4AA, + 0xA4B3AC, + 0xA5B4AD, + 0xA6B5B0, + 0xA6B5AE, + 0xA6B6AC, + 0xA6B6AB, + 0xA7B7AA, + 0xA9BAA8, + 0xABBCAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAB, + 0xACBDAB, + 0xAABDA7, + 0xABBEA8, + 0xABBEAA, + 0xABBEAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAB, + 0xACBDAB, + 0xAFC0AE, + 0xACBDAB, + 0xA6B4A5, + 0x9BA99A, + 0x97A596, + 0x9AA899, + 0x9CAA9D, + 0x9BA99C, + 0x97A493, + 0xA3B09F, + 0xA8B5A4, + 0xA1AE9D, + 0x9FAC9B, + 0xA6B3A2, + 0xA7B4A3, + 0xA1AE9D, + 0xA3B09F, + 0xA0AD9C, + 0x9EAB9A, + 0xA0AD9C, + 0xA5B2A1, + 0xA9B6A5, + 0xAAB7A6, + 0xA9B6A5, + 0xA3AFA1, + 0xA0AC9E, + 0xA1AD9F, + 0xA5B1A3, + 0xA7B3A5, + 0xA3AFA1, + 0xA1AE9D, + 0xA2AF9E, + 0xA2AF9E, + 0xA2AF9E, + 0xA2AF9D, + 0xA2AF9D, + 0xA2AF9D, + 0xA1AE9C, + 0xA1AE9C, + 0xA0AD9B, + 0x98A996, + 0x9BAC99, + 0x9DAE9B, + 0x9CAD9A, + 0x99AA97, + 0x99AA97, + 0x9CAD9A, + 0x9FB09D, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x8FA08D, + 0x8C9D8A, + 0x869785, + 0x243523, + 0x000B00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000F00, + 0x011200, + 0x000E00, + 0x000B00, + 0x000900, + 0x001200, + 0x000D00, + 0x000D00, + 0x000E00, + 0x021205, + 0x637369, + 0x98A7A4, + 0x909E9E, + 0x8B9A95, + 0x8D9C97, + 0x909F9A, + 0x91A09B, + 0x91A09B, + 0x909F9A, + 0x909F98, + 0x91A099, + 0x8A9992, + 0x8C9B94, + 0x909F98, + 0x95A49D, + 0x9BABA1, + 0xA0B0A6, + 0xA4B4AA, + 0xA6B5AE, + 0xA5B4AD, + 0xA6B5B0, + 0xA6B5AE, + 0xA6B6AC, + 0xA6B6AB, + 0xA7B7AA, + 0xA9BAA8, + 0xABBCAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAB, + 0xACBDAB, + 0xAABDA9, + 0xAABDA9, + 0xABBEAA, + 0xABBEAA, + 0xADBEAB, + 0xACBDAA, + 0xACBDAB, + 0xACBDAB, + 0xA5B6A4, + 0xA6B7A5, + 0xA6B4A5, + 0xA2B0A1, + 0xA1AFA0, + 0xA4B2A3, + 0xA5B3A4, + 0xA3B1A2, + 0xA0AD9C, + 0xA6B3A2, + 0xA5B2A1, + 0x9DAA99, + 0x99A695, + 0x9DAA99, + 0xA0AD9C, + 0x9EAB9A, + 0xA0AD9C, + 0x9BA897, + 0x97A493, + 0x96A392, + 0x97A493, + 0x97A493, + 0x95A291, + 0x929F8E, + 0x95A193, + 0x929E90, + 0x919D8F, + 0x94A092, + 0x939F91, + 0x8F9B8D, + 0x8C9988, + 0x8C9988, + 0x8D9A89, + 0x8D9A89, + 0x8E9B89, + 0x8E9B89, + 0x8D9A88, + 0x8D9A88, + 0x8C9987, + 0x8C9987, + 0x889986, + 0x8B9C89, + 0x8D9E8B, + 0x8D9E8B, + 0x8C9D8A, + 0x8C9D8A, + 0x8FA08D, + 0x93A491, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x8E9F8C, + 0x8C9D8A, + 0x879886, + 0x2E3F2D, + 0x000F00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000C00, + 0x001100, + 0x021301, + 0x000F00, + 0x000A00, + 0x000900, + 0x000B00, + 0x000E00, + 0x000800, + 0x000F00, + 0x000F02, + 0x74847A, + 0x9CABA8, + 0x97A5A5, + 0x9BAAA5, + 0x9DACA7, + 0xA0AFAA, + 0xA1B0AB, + 0xA0AFAA, + 0xA0AFAA, + 0xA1B0A9, + 0xA1B0A9, + 0xA7B6AF, + 0xA7B6AF, + 0xA6B5AE, + 0xA6B5AE, + 0xA5B5AB, + 0xA4B4AA, + 0xA3B3A9, + 0xA3B2AB, + 0xA5B4AD, + 0xA6B5B0, + 0xA7B6AF, + 0xA6B5AE, + 0xA6B6AB, + 0xA7B7AC, + 0xA9BAAA, + 0xABBCAC, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAB, + 0xACBDAB, + 0xAABDA9, + 0xAABDA9, + 0xABBEAA, + 0xABBEAA, + 0xADBEAB, + 0xADBEAB, + 0xADBEAC, + 0xACBDAB, + 0xB1C2B0, + 0xB2C3B1, + 0xB2C0B1, + 0xADBBAC, + 0xABB9AA, + 0xACBAAB, + 0xACBAAB, + 0xAAB8A9, + 0xADBAA9, + 0xAEBBAA, + 0xAEBBAA, + 0xACB9A8, + 0xA9B6A5, + 0xA9B6A5, + 0xABB8A7, + 0xAFBCAB, + 0xABB8A7, + 0xA8B5A4, + 0xA6B3A2, + 0xA6B3A2, + 0xA8B5A4, + 0xAAB7A6, + 0xAAB7A6, + 0xA8B5A4, + 0xABB7A9, + 0xA8B4A6, + 0xA7B3A5, + 0xA8B4A6, + 0xA7B3A5, + 0xA4B0A2, + 0xA0AD9C, + 0xA0AD9C, + 0xA1AE9D, + 0xA2AF9E, + 0xA2AF9D, + 0xA2AF9D, + 0xA2AF9D, + 0xA1AE9C, + 0xA0AD9B, + 0xA0AD9B, + 0x94A592, + 0x96A794, + 0x97A895, + 0x97A895, + 0x96A794, + 0x96A794, + 0x98A996, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x8E9F8C, + 0x8C9D8A, + 0x899A88, + 0x3D4E3C, + 0x011200, + 0x000E00, + 0x000C00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000800, + 0x000800, + 0x000A00, + 0x000B00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000800, + 0x001000, + 0x000700, + 0x011200, + 0x001003, + 0x819187, + 0x97A6A3, + 0x919F9F, + 0x94A39E, + 0x96A5A0, + 0x99A8A3, + 0x9BAAA5, + 0x9CABA6, + 0x9DACA7, + 0x9FAEA7, + 0xA1B0A9, + 0xA2B1AA, + 0xA2B1AA, + 0xA2B1AA, + 0xA3B2AB, + 0xA4B4AA, + 0xA5B5AB, + 0xA5B5AB, + 0xA6B5AE, + 0xA5B4AD, + 0xA6B5B0, + 0xA7B6AF, + 0xA7B6AF, + 0xA6B6AC, + 0xA7B7AD, + 0xA9B9AC, + 0xABBBAE, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAA, + 0xA9BCA9, + 0xAABDAA, + 0xABBEAB, + 0xABBEAB, + 0xADBEAC, + 0xADBEAC, + 0xADBEAC, + 0xADBEAC, + 0xA8B9A7, + 0xA4B5A3, + 0xA0AE9D, + 0x99A796, + 0x95A392, + 0x95A392, + 0x96A493, + 0x97A594, + 0x98A695, + 0x97A594, + 0x9AA897, + 0xA0AE9D, + 0x9EAC9B, + 0x98A695, + 0x96A493, + 0x9AA897, + 0x98A695, + 0x97A594, + 0x98A695, + 0x9CAA99, + 0xA1AF9E, + 0xA5B3A2, + 0xA7B5A4, + 0xA7B5A4, + 0xA5B3A4, + 0xA3B1A2, + 0xA3B1A2, + 0xA4B2A3, + 0xA5B3A4, + 0xA4B2A3, + 0xA2B09F, + 0xA1AF9E, + 0xA0AE9D, + 0xA0AE9D, + 0xA0AF9C, + 0xA0AF9C, + 0xA0AF9C, + 0x9FAE9B, + 0x9FAE9B, + 0x9EAD9A, + 0x9DAE9B, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9AAB98, + 0x99AA97, + 0x9AAB98, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x8FA08D, + 0x8C9D8A, + 0x889987, + 0x4D5E4C, + 0x011200, + 0x000D00, + 0x000D00, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000C00, + 0x000800, + 0x000800, + 0x000700, + 0x000700, + 0x000700, + 0x000900, + 0x000E00, + 0x000A00, + 0x041600, + 0x000A00, + 0x021301, + 0x021205, + 0x87978D, + 0x8E9D9A, + 0x8B9999, + 0x879691, + 0x899893, + 0x8B9A95, + 0x8D9C97, + 0x8E9D98, + 0x909F9A, + 0x92A19A, + 0x94A39C, + 0x92A19A, + 0x93A29B, + 0x95A49D, + 0x97A69F, + 0x99A99F, + 0x9CACA2, + 0x9EAEA4, + 0x9EAEA4, + 0xA6B5AE, + 0xA6B5AE, + 0xA7B6AF, + 0xA7B6AF, + 0xA6B6AC, + 0xA7B7AD, + 0xAABAAF, + 0xACBCB1, + 0xACBCAF, + 0xACBCAF, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAA, + 0xAABDAA, + 0xAABDAA, + 0xABBEAB, + 0xABBEAB, + 0xADBEAC, + 0xADBEAC, + 0xACBDAB, + 0xACBDAB, + 0xB3C4B2, + 0xB0C1AF, + 0xAEBCAB, + 0xABB9A8, + 0xA9B7A6, + 0xA9B7A6, + 0xABB9A8, + 0xADBBAA, + 0xAAB8A7, + 0xA6B4A3, + 0xA8B6A5, + 0xAEBCAB, + 0xABB9A8, + 0xA1AF9E, + 0x9DAB9A, + 0xA1AF9E, + 0xA3B1A0, + 0xA3B1A0, + 0xA3B1A0, + 0xA5B3A2, + 0xA7B5A4, + 0xA8B6A5, + 0xA9B7A6, + 0xA9B7A6, + 0xA7B5A6, + 0xA7B5A6, + 0xA7B5A6, + 0xA7B5A6, + 0xA9B7A8, + 0xAAB8A9, + 0xA9B7A6, + 0xA7B5A4, + 0xA4B2A1, + 0xA4B2A1, + 0xA4B3A0, + 0xA4B3A0, + 0xA4B3A0, + 0xA4B3A0, + 0xA3B29F, + 0xA3B29F, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x99AA97, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x91A28F, + 0x8B9C89, + 0x869785, + 0x5D6E5C, + 0x001100, + 0x000B00, + 0x000F00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000A00, + 0x000900, + 0x000A00, + 0x000B00, + 0x000A00, + 0x000800, + 0x000900, + 0x000C00, + 0x000C00, + 0x011300, + 0x000800, + 0x001000, + 0x08180B, + 0x8E9E94, + 0x93A29F, + 0x95A3A3, + 0x94A39E, + 0x96A5A0, + 0x97A6A1, + 0x98A7A2, + 0x98A7A2, + 0x99A8A3, + 0x9BAAA3, + 0x9DACA5, + 0xA2B1AA, + 0xA1B0A9, + 0xA0AFA8, + 0x9FAEA7, + 0x9DADA3, + 0x9CACA2, + 0x9AAAA0, + 0x9AAAA0, + 0xA6B5AE, + 0xA7B6AF, + 0xA7B6AF, + 0xA7B6AF, + 0xA7B6AF, + 0xA8B7B0, + 0xAAB9B2, + 0xACBBB4, + 0xACBCB1, + 0xACBCB1, + 0xACBCAF, + 0xACBCAF, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAB, + 0xABBEAB, + 0xABBDAD, + 0xABBDAD, + 0xACBEAE, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xABBCAA, + 0xADBEAC, + 0xABBCAA, + 0xAEBDAA, + 0xB1C0AD, + 0xB0BFAC, + 0xADBCA9, + 0xACBBA8, + 0xADBCA9, + 0xADBEAC, + 0xA8B9A7, + 0xA7B8A6, + 0xAABBA9, + 0xA9BAA8, + 0xA5B6A4, + 0xA5B6A4, + 0xA9BAA8, + 0xA5B6A4, + 0xA5B6A4, + 0xA4B5A3, + 0xA4B5A3, + 0xA3B4A2, + 0xA3B4A2, + 0xA2B3A1, + 0xA1B2A0, + 0xA2B3A3, + 0xA2B3A3, + 0xA1B2A2, + 0x9FB0A0, + 0xA0B1A1, + 0xA2B3A3, + 0xA1B2A0, + 0x9EAF9D, + 0x9CAD9B, + 0x9CAD9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9EAF9C, + 0x9EAF9C, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x92A390, + 0x8B9C89, + 0x859684, + 0x6D7E6C, + 0x001100, + 0x000B00, + 0x001000, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000D00, + 0x000B00, + 0x000800, + 0x000800, + 0x000B00, + 0x000A00, + 0x000C00, + 0x000800, + 0x000F00, + 0x132316, + 0x94A49A, + 0x96A5A2, + 0x9AA8A8, + 0x9AA9A4, + 0x9BAAA5, + 0x9DACA7, + 0x9DACA7, + 0x9EADA8, + 0x9FAEA9, + 0xA1B0A9, + 0xA3B2AB, + 0x9FAEA7, + 0xA0AFA8, + 0xA0AFA8, + 0xA2B1AA, + 0xA3B3A9, + 0xA4B4AA, + 0xA5B5AB, + 0xA5B5AB, + 0xA6B5AE, + 0xA7B6AF, + 0xA8B7B0, + 0xA7B6AF, + 0xA7B6B1, + 0xA8B7B2, + 0xAAB9B2, + 0xACBBB4, + 0xACBCB2, + 0xACBCB2, + 0xACBCAF, + 0xACBCAF, + 0xACBDAB, + 0xACBDAB, + 0xACBEA8, + 0xACBDAA, + 0xACBFAC, + 0xACBEAE, + 0xACBEAE, + 0xACBEAE, + 0xACBDAD, + 0xACBDAD, + 0xABBCAA, + 0xAABBA9, + 0xA9BAA8, + 0xA7B8A6, + 0xABBAA7, + 0xAEBDAA, + 0xAEBDAA, + 0xAAB9A6, + 0xA8B7A4, + 0xAAB9A6, + 0xA8B9A7, + 0xA7B8A6, + 0xA8B9A7, + 0xAABBA9, + 0xABBCAA, + 0xACBDAB, + 0xADBEAC, + 0xAEBFAD, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA9BAA8, + 0xA8B9A7, + 0xA9BAA8, + 0xA8B9A9, + 0xA9BAAA, + 0xA7B8A8, + 0xA4B5A5, + 0xA4B5A5, + 0xA7B8A8, + 0xA6B7A5, + 0xA3B4A2, + 0xA1B2A0, + 0xA2B3A1, + 0xA2B3A0, + 0xA2B3A0, + 0xA2B3A0, + 0xA1B29F, + 0xA0B19E, + 0xA0B19E, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x92A390, + 0x8B9C89, + 0x879886, + 0x7C8D7B, + 0x041503, + 0x000C00, + 0x001100, + 0x000800, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000B00, + 0x000900, + 0x000A00, + 0x000A00, + 0x000800, + 0x000700, + 0x000800, + 0x000D00, + 0x000D00, + 0x000D00, + 0x000E00, + 0x031402, + 0x1C2C1F, + 0x92A298, + 0x8D9C99, + 0x909E9E, + 0x93A29D, + 0x95A49F, + 0x97A6A1, + 0x98A7A2, + 0x9AA9A4, + 0x9CABA6, + 0x9FAEA7, + 0xA2B1AA, + 0xA5B4AD, + 0xA5B4AD, + 0xA5B4AD, + 0xA5B4AD, + 0xA5B5AB, + 0xA5B5AB, + 0xA6B6AC, + 0xA6B6AC, + 0xA6B6AC, + 0xA7B7AD, + 0xA8B7B0, + 0xA7B6AF, + 0xA7B6B1, + 0xA8B7B2, + 0xAAB9B4, + 0xACBBB6, + 0xACBBB4, + 0xACBCB2, + 0xACBCB1, + 0xACBCAF, + 0xACBDAB, + 0xACBDAB, + 0xACBEA8, + 0xACBDAA, + 0xACBEAE, + 0xACBEB0, + 0xACBEAE, + 0xACBEAE, + 0xACBDAD, + 0xABBCAC, + 0xAABBA9, + 0xAABBA9, + 0xA6B7A5, + 0xA3B4A2, + 0xA5B4A1, + 0xA8B7A4, + 0xAAB9A6, + 0xAAB9A6, + 0xADBCA7, + 0xB2C1AE, + 0xA1B29F, + 0xA5B6A4, + 0xA8B9A7, + 0xA8B9A7, + 0xA9BAA8, + 0xA8B9A7, + 0xA4B5A3, + 0x9FB09E, + 0xA3B4A2, + 0xA4B5A3, + 0xA5B6A4, + 0xA5B6A4, + 0xA4B5A3, + 0xA4B5A3, + 0xA3B4A2, + 0xA4B5A3, + 0xA2B3A3, + 0xA4B5A5, + 0xA3B4A4, + 0x9FB0A0, + 0xA1B2A2, + 0xA4B5A5, + 0xA4B5A3, + 0xA0B19F, + 0xA0B19F, + 0xA0B19F, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0xA0B19E, + 0x9FB09D, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x99AB95, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A491, + 0x92A390, + 0x8B9C89, + 0x889987, + 0x869785, + 0x071806, + 0x000D00, + 0x011200, + 0x000700, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x011202, + 0x000D02, + 0x2A3A2F, + 0x90A096, + 0x8B9A93, + 0x94A39C, + 0x85958B, + 0x84948A, + 0x85958B, + 0x88988E, + 0x8B9B91, + 0x8C9C92, + 0x8A9A90, + 0x87978D, + 0x92A298, + 0x94A49A, + 0x95A59B, + 0x95A59B, + 0x93A399, + 0x92A298, + 0x92A298, + 0x92A298, + 0xA0B0A6, + 0xA2B2A8, + 0xA5B5AB, + 0xA7B7AD, + 0xA8B8AD, + 0xA8B8AD, + 0xA8B8AB, + 0xA9B9AC, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xADBEAB, + 0xACBDAA, + 0xAABBA8, + 0xABBCA9, + 0xAABBA8, + 0xA1B29F, + 0x96A794, + 0x97A895, + 0x98A996, + 0x768774, + 0x768774, + 0x7B8C79, + 0x7C8D7A, + 0x8B9C89, + 0x768774, + 0x94A592, + 0x798A77, + 0x879885, + 0x7E8F7C, + 0x7F907D, + 0x92A390, + 0x80917E, + 0x788976, + 0x7A8B78, + 0x7A8B78, + 0x8A9B88, + 0x80917E, + 0x6C7D6A, + 0x889986, + 0x98A996, + 0x728370, + 0x899A87, + 0x92A390, + 0x9EAF9C, + 0xA5B6A3, + 0xA5B6A3, + 0xA3B4A1, + 0xA1B29F, + 0xA0B19E, + 0xA1B29F, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x97A895, + 0x96A794, + 0x94A593, + 0x93A492, + 0x93A492, + 0x8A9B89, + 0x8B9C8C, + 0x7E8F7F, + 0x1E2F1F, + 0x000A00, + 0x000C00, + 0x000E00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000C00, + 0x000F00, + 0x000B00, + 0x324237, + 0x95A59B, + 0x93A29B, + 0x9AA9A2, + 0x9BABA1, + 0x9CACA2, + 0x9DADA3, + 0xA0B0A6, + 0xA2B2A8, + 0xA4B4AA, + 0xA3B3A9, + 0xA2B2A8, + 0xA1B1A7, + 0xA1B1A7, + 0xA2B2A8, + 0xA1B1A7, + 0xA1B1A7, + 0xA2B2A8, + 0xA5B5AB, + 0xA7B7AD, + 0xA3B3A9, + 0xA5B5AB, + 0xA7B7AD, + 0xA8B8AE, + 0xA8B8AD, + 0xA8B8AD, + 0xAABAAD, + 0xABBBAE, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xACBDAB, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xACBDAA, + 0xAABBA8, + 0xACBDAA, + 0xADBEAB, + 0xABBCA9, + 0xABBCA9, + 0xACBDAA, + 0xA9BAA7, + 0xA4B5A2, + 0xA9BAA7, + 0xB2C3B0, + 0x9EAF9C, + 0xA4B5A2, + 0xA9BAA7, + 0xA6B7A4, + 0xB3C4B1, + 0xA0B19E, + 0xADBEAB, + 0x9CAD9A, + 0xA7B8A5, + 0x9DAE9B, + 0x9EAF9C, + 0xADBEAB, + 0x9CAD9A, + 0x9CAD9A, + 0x9AAB98, + 0x94A592, + 0x9DAE9B, + 0x98A996, + 0x869784, + 0x92A390, + 0x9BAC99, + 0x849582, + 0x92A390, + 0x99AA97, + 0xA0B19E, + 0xA4B5A2, + 0xA4B5A2, + 0xA2B3A0, + 0xA1B29F, + 0xA2B3A0, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x97A895, + 0x96A794, + 0x94A593, + 0x93A492, + 0x92A391, + 0x8B9C8A, + 0x8D9E8E, + 0x819282, + 0x273828, + 0x000C00, + 0x000C00, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000B00, + 0x000E00, + 0x000C01, + 0x3F4F44, + 0x96A69C, + 0x92A19A, + 0x94A39C, + 0x95A49D, + 0x97A69F, + 0x99A8A1, + 0x9BAAA3, + 0x9CABA4, + 0x9EADA6, + 0xA0AFA8, + 0xA2B1AA, + 0xA3B2AB, + 0xA5B4AD, + 0xA7B6AF, + 0xA8B7B0, + 0xA7B6AF, + 0xA7B6AF, + 0xA9B8B1, + 0xAAB9B2, + 0xA6B6AB, + 0xA7B7AC, + 0xA8B8AD, + 0xA8B8AD, + 0xA8B8AD, + 0xA9B9AE, + 0xABBBAE, + 0xADBDB0, + 0xACBDAD, + 0xACBDAD, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xACBDAB, + 0xA9BAA7, + 0xACBDAA, + 0xADBEAB, + 0xABBCA9, + 0xAABBA8, + 0xABBCA9, + 0xAEBFAC, + 0xAEBFAC, + 0xA0B19E, + 0xAEBFAC, + 0xA4B5A2, + 0xAABBA8, + 0xABBCA9, + 0xA7B8A5, + 0xB2C3B0, + 0xA6B7A4, + 0xADBEAB, + 0xA8B9A6, + 0xB0C1AE, + 0xA3B4A1, + 0xA5B6A3, + 0xAEBFAC, + 0x9FB09D, + 0xA7B8A5, + 0xACBDAA, + 0xA3B4A1, + 0xA6B7A4, + 0xAABBA8, + 0xA3B4A1, + 0xA1B29F, + 0xA4B5A2, + 0xA1B29F, + 0x9DAE9B, + 0xA0B19E, + 0xA4B5A2, + 0xA4B5A2, + 0xA2B3A0, + 0xA1B29F, + 0xA1B29F, + 0xA3B4A1, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x97A895, + 0x95A693, + 0x94A593, + 0x93A492, + 0x91A290, + 0x8C9D8B, + 0x8E9F8F, + 0x839484, + 0x364737, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x001000, + 0x000F04, + 0x4B5B50, + 0x90A096, + 0x8B9A93, + 0x889790, + 0x8C9B94, + 0x8E9D96, + 0x91A099, + 0x91A099, + 0x91A099, + 0x93A29B, + 0x97A69F, + 0x9AA9A2, + 0x95A49D, + 0x9AA9A2, + 0xA0AFA8, + 0xA4B3AC, + 0xA6B5AE, + 0xA5B4AD, + 0xA4B3AC, + 0xA3B2AB, + 0xA9B9AE, + 0xA9B9AE, + 0xA8B8AD, + 0xA7B7AC, + 0xA6B6A9, + 0xA8B8AB, + 0xABBBAE, + 0xADBDB0, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAA, + 0xABBCAA, + 0xABBCAA, + 0xABBCAA, + 0xABBCA9, + 0xACBDAA, + 0xACBDAA, + 0xAABBA8, + 0xA8B9A6, + 0xA9BAA7, + 0xAABBA8, + 0xABBCA9, + 0xAABBA8, + 0xB1C2AF, + 0xA7B8A5, + 0xA6B7A4, + 0xA2B3A0, + 0x9FB09D, + 0xABBCA9, + 0xA5B6A3, + 0x9DAE9B, + 0xA2B3A0, + 0xA5B6A3, + 0x9CAD9A, + 0xA7B8A5, + 0xAEBFAC, + 0xA3B4A1, + 0xAFC0AD, + 0xA8B9A6, + 0xA5B6A3, + 0xA4B5A2, + 0xAABBA8, + 0xACBDAA, + 0xA7B8A5, + 0xA6B7A4, + 0xADBEAB, + 0xA2B3A0, + 0xA4B5A2, + 0xA5B6A3, + 0xA4B5A2, + 0xA2B3A0, + 0xA1B29F, + 0xA1B29F, + 0xA2B3A0, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x95A693, + 0x94A593, + 0x93A492, + 0x91A290, + 0x8E9F8D, + 0x8D9E8E, + 0x839484, + 0x465747, + 0x000E00, + 0x000C00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000B00, + 0x000B00, + 0x011202, + 0x001005, + 0x57675C, + 0x8C9C92, + 0x8D9C95, + 0x8C9B94, + 0x8F9E97, + 0x92A19A, + 0x94A39C, + 0x94A39C, + 0x94A39C, + 0x95A49D, + 0x98A7A0, + 0x9BAAA3, + 0x94A39C, + 0x99A8A1, + 0x9EADA6, + 0xA3B2AB, + 0xA6B5AE, + 0xA7B6AF, + 0xA8B7B0, + 0xA9B9AF, + 0xA8B8AD, + 0xA8B8AB, + 0xA7B7AA, + 0xA6B6A9, + 0xA5B5A8, + 0xA6B6A9, + 0xA9B9AC, + 0xACBCAF, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCA9, + 0xAABBA8, + 0xA9BAA7, + 0xAABBA8, + 0xAABBA8, + 0xA9BAA7, + 0xA8B9A6, + 0xA7B8A5, + 0xA2B3A0, + 0xA2B3A0, + 0x97A895, + 0x91A28F, + 0x8E9F8C, + 0x8E9F8C, + 0x96A794, + 0x95A693, + 0x849582, + 0x8A9B88, + 0x8B9C89, + 0x8A9B88, + 0x9AAB98, + 0xA4B5A2, + 0x9DAE9B, + 0xA6B7A4, + 0xA6B7A4, + 0xAABBA8, + 0xA6B7A4, + 0xA3B4A1, + 0xA8B9A6, + 0xA5B6A3, + 0xA1B29F, + 0xA5B6A3, + 0xA2B3A0, + 0xA3B4A1, + 0xA4B5A2, + 0xA4B5A2, + 0xA3B4A1, + 0xA1B29F, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x95A693, + 0x93A492, + 0x92A391, + 0x91A290, + 0x8FA08E, + 0x8A9B8B, + 0x809181, + 0x556656, + 0x000D00, + 0x000C00, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000B00, + 0x001000, + 0x000E03, + 0x627267, + 0x8D9D93, + 0x97A69F, + 0x97A69F, + 0x97A6A1, + 0x99A8A3, + 0x9BAAA5, + 0x9CABA6, + 0x9CABA6, + 0x9DACA7, + 0x9FAEA9, + 0xA1B0AB, + 0xA5B4AF, + 0xA5B4AF, + 0xA5B4AF, + 0xA4B3AE, + 0xA3B2AD, + 0xA4B3AE, + 0xA7B6B1, + 0xA9B8B1, + 0xA7B7AC, + 0xA7B7AA, + 0xA6B6A9, + 0xA5B5A8, + 0xA4B4A7, + 0xA6B6A9, + 0xA9B9AC, + 0xABBBAE, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xABBCAC, + 0xAABBA8, + 0xA8B9A6, + 0xA8B9A6, + 0xACBDAA, + 0xADBEAB, + 0xABBCA9, + 0xA9BAA7, + 0xA8B9A6, + 0xADBEAB, + 0xABBCA9, + 0xA6B7A4, + 0xA3B4A1, + 0xA3B4A1, + 0xA4B5A2, + 0xA6B7A4, + 0xA5B6A3, + 0xA1B29F, + 0xA3B4A1, + 0xA0B19E, + 0xA0B19E, + 0xAABBA8, + 0xB0C1AE, + 0xACBDAA, + 0xABBCA9, + 0xA4B5A2, + 0xABBCA9, + 0xA8B9A6, + 0xA2B3A0, + 0xA5B6A3, + 0xA6B7A4, + 0xA3B4A1, + 0xA3B4A1, + 0xA0B19E, + 0xA1B29F, + 0xA2B3A0, + 0xA3B4A1, + 0xA3B4A1, + 0xA2B3A0, + 0xA0B19E, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9CAD9A, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x96A794, + 0x95A693, + 0x93A492, + 0x92A391, + 0x91A290, + 0x90A18F, + 0x899A8A, + 0x7F9080, + 0x647565, + 0x000E00, + 0x000D00, + 0x000C00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000D00, + 0x000A00, + 0x000F00, + 0x000E03, + 0x6D7D72, + 0x8B9B91, + 0x94A39C, + 0x8F9E97, + 0x97A6A1, + 0x98A7A2, + 0x99A8A3, + 0x9CABA6, + 0x9FAEA9, + 0xA1B0AB, + 0xA1B0AB, + 0xA0AFAA, + 0xA3B2AD, + 0xA4B3AE, + 0xA4B3AE, + 0xA4B3AE, + 0xA2B1AC, + 0xA2B1AC, + 0xA3B2AD, + 0xA4B3AC, + 0xA6B6A9, + 0xA6B7A7, + 0xA7B8A8, + 0xA6B7A7, + 0xA5B6A6, + 0xA6B7A7, + 0xA9BAAA, + 0xABBCAC, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBCAC, + 0xA9BAA8, + 0xA8B9A6, + 0xAABBA8, + 0xADBEAB, + 0xACBDAA, + 0xA8B9A6, + 0xA9BAA7, + 0xACBDAA, + 0xABBCA9, + 0xAABBA8, + 0xACBDAA, + 0xAABBA8, + 0xA9BAA7, + 0xA9BAA7, + 0xA7B8A5, + 0xA9BAA7, + 0xABBCA9, + 0xA7B8A5, + 0xA4B5A2, + 0xA4B5A2, + 0xA3B4A1, + 0xA5B6A3, + 0xA7B8A5, + 0x9DAE9B, + 0xA5B6A3, + 0xA5B6A3, + 0xA5B6A3, + 0xA6B7A4, + 0xA5B6A3, + 0xA6B7A4, + 0xA7B8A5, + 0xA6B7A4, + 0xA2B3A0, + 0xA1B29F, + 0xA1B29F, + 0xA1B29F, + 0xA1B29F, + 0xA1B29F, + 0xA1B29F, + 0xA0B19E, + 0x9FB09D, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9DAE9B, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x98A996, + 0x98A996, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A492, + 0x92A391, + 0x90A18F, + 0x92A391, + 0x8A9B8B, + 0x819282, + 0x738474, + 0x001000, + 0x000D00, + 0x000B00, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000900, + 0x000800, + 0x000800, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000A00, + 0x000C00, + 0x000900, + 0x000F00, + 0x001005, + 0x748479, + 0x87978D, + 0x87968F, + 0x798881, + 0x83928D, + 0x83928D, + 0x84938E, + 0x899893, + 0x8E9D98, + 0x909F9A, + 0x8F9E99, + 0x8D9C97, + 0x8B9A95, + 0x91A09B, + 0x9BAAA5, + 0xA3B2AD, + 0xA7B6B1, + 0xA8B7B2, + 0xA7B6B1, + 0xA7B6AF, + 0xA5B5A8, + 0xA6B7A7, + 0xA7B8A8, + 0xA7B8A8, + 0xA6B7A7, + 0xA7B8A8, + 0xA9BAAA, + 0xABBCAC, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBBAE, + 0xABBCAC, + 0xA9BAA8, + 0xA9BAA7, + 0xACBDAA, + 0xACBDAA, + 0xA8B9A6, + 0xA3B4A1, + 0xA6B7A4, + 0xADBEAB, + 0xA3B4A1, + 0xA1B29F, + 0xA6B7A4, + 0xA2B3A0, + 0x9DAE9B, + 0x9CAD9A, + 0x98A996, + 0x9EAF9C, + 0xA4B5A2, + 0xA0B19E, + 0xA0B19E, + 0xA4B5A2, + 0x9EAF9C, + 0xA2B3A0, + 0xABBCA9, + 0x9DAE9B, + 0xABBCA9, + 0xA2B3A0, + 0xA4B5A2, + 0xA9BAA7, + 0xA4B5A2, + 0xA0B19E, + 0xA1B29F, + 0xA2B3A0, + 0xA4B5A2, + 0xA3B4A1, + 0xA0B19E, + 0x9FB09D, + 0xA0B19E, + 0xA1B29F, + 0xA1B29F, + 0xA1B29F, + 0x9FB09D, + 0x9FB09D, + 0x9FB09D, + 0x9EAF9C, + 0x9EAF9C, + 0x9DAE9B, + 0x9DAE9B, + 0x9CAD9A, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9BAC99, + 0x9AAB98, + 0x9AAB98, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x99AA97, + 0x98A996, + 0x98A996, + 0x98A996, + 0x98A996, + 0x97A895, + 0x98A996, + 0x98A996, + 0x97A895, + 0x96A794, + 0x94A592, + 0x93A492, + 0x92A391, + 0x8FA08E, + 0x92A391, + 0x8C9D8D, + 0x849585, + 0x7D8E7E, + 0x011202, + 0x000D00, + 0x000900 +}; diff --git a/esp_jpeg/test_apps/main/tjpgd_test.c b/esp_jpeg/test_apps/main/tjpgd_test.c index 0cabb054eb..a7e58838de 100644 --- a/esp_jpeg/test_apps/main/tjpgd_test.c +++ b/esp_jpeg/test_apps/main/tjpgd_test.c @@ -11,7 +11,7 @@ #include "unity.h" -#include "../include/jpeg_decoder.h" +#include "jpeg_decoder.h" #include "test_logo_jpg.h" #include "test_logo_rgb888.h" @@ -21,7 +21,8 @@ TEST_CASE("Test JPEG decompression library", "[esp_jpeg]") { char aapix[] = " .:;+=xX$$"; - unsigned char *decoded, *p, *o; + unsigned char *decoded, *p; + const unsigned char *o; int x, y, v; int decoded_outsize = TESTW * TESTH * 3; @@ -34,7 +35,7 @@ TEST_CASE("Test JPEG decompression library", "[esp_jpeg]") /* JPEG decode */ esp_jpeg_image_cfg_t jpeg_cfg = { .indata = (uint8_t *)logo_jpg, - .indata_size = sizeof(logo_jpg), + .indata_size = logo_jpg_len, .outbuf = decoded, .outbuf_size = decoded_outsize, .out_format = JPEG_IMAGE_FORMAT_RGB888, @@ -55,9 +56,9 @@ TEST_CASE("Test JPEG decompression library", "[esp_jpeg]") o = logo_rgb888; for (x = 0; x < outimg.width * outimg.height; x++) { /* The color can be +- 2 */ - TEST_ASSERT(p[0] >= (o[0] - 2) && p[0] <= (o[0] + 2)); - TEST_ASSERT(p[1] >= (o[1] - 2) && p[1] <= (o[1] + 2)); - TEST_ASSERT(p[2] >= (o[2] - 2) && p[2] <= (o[2] + 2)); + TEST_ASSERT_UINT8_WITHIN(2, o[0], p[0]); + TEST_ASSERT_UINT8_WITHIN(2, o[1], p[1]); + TEST_ASSERT_UINT8_WITHIN(2, o[2], p[2]); p += 3; o += 3; @@ -76,3 +77,87 @@ TEST_CASE("Test JPEG decompression library", "[esp_jpeg]") free(decoded); } + +#if CONFIG_JD_DEFAULT_HUFFMAN +#include "test_usb_camera_jpg.h" +#include "test_usb_camera_rgb888.h" + +/** + * @brief Test for JPEG decompression without Huffman tables + * + * This test case verifies the functionality of the JPEG decompression library + * when decoding an image that lacks Huffman tables, such as a USB frame + * from a Logitech C270 USB camera. The image was reconstructed from raw USB data + * (using `hex_to_jpg.py`) and then converted into an RGB888 C-style array + * (using `jpg_to_rgb888_hex.py`). + * + * Due to the unique structure of the JPEG data (double block size, 16x8 pixels) + * and absence of Huffman tables, this test assesses whether the decompression + * library correctly decodes the image and outputs RGB888 pixel data within + * an acceptable tolerance range. + * + * The test performs the following steps: + * - Allocates a buffer for the decoded image. + * - Configures and runs the JPEG decoder with the RGB888 output format. + * - Checks that the decoded image dimensions match expected values. + * - Compares the decompressed image data against the reference RGB888 data, + * allowing a tolerance of ±16 in each color component due to potential + * differences in Huffman tables or decompression accuracy. + * + * @note This test allows a margin of error in pixel values due to potential + * differences in how color data is interpreted across different decoders. + * + * @param None + * + * @return None + * + * @test Requirements: + * - JPEG decompression library support for images without Huffman tables. + * - JPEG decompression accuracy within acceptable error margins. + */ +TEST_CASE("Test JPEG decompression library: No Huffman tables", "[esp_jpeg]") +{ + unsigned char *decoded, *p; + const unsigned int *o; + int decoded_outsize = 160 * 120 * 3; + + decoded = malloc(decoded_outsize); + + /* JPEG decode */ + esp_jpeg_image_cfg_t jpeg_cfg = { + .indata = (uint8_t *)jpeg_no_huffman, + .indata_size = jpeg_no_huffman_len, + .outbuf = decoded, + .outbuf_size = decoded_outsize, + .out_format = JPEG_IMAGE_FORMAT_RGB888, + .out_scale = JPEG_IMAGE_SCALE_0, + .flags = { + .swap_color_bytes = 0, + } + }; + esp_jpeg_image_output_t outimg; + esp_err_t err = esp_jpeg_decode(&jpeg_cfg, &outimg); + TEST_ASSERT_EQUAL(err, ESP_OK); + + /* Decoded image size */ + TEST_ASSERT_EQUAL(outimg.width, 160); + TEST_ASSERT_EQUAL(outimg.height, 120); + + p = decoded; + o = jpeg_no_huffman_rgb888; + for (int x = 0; x < outimg.width * outimg.height; x++) { + /* The color can be +- 16 */ + // Here we allow bigger decoding error + // It might be that the Windows decoder used slightly different Huffman tables + TEST_ASSERT_UINT8_WITHIN(16, (*o) & 0xff, p[0]); + TEST_ASSERT_UINT8_WITHIN(16, (*o >> 8) & 0xff, p[1]); + TEST_ASSERT_UINT8_WITHIN(16, (*o >> 16) & 0xff, p[2]); + + p += 3; // this is uint8_t + o ++; // this is unt32_t + } + + free(decoded); +} + +#endif diff --git a/esp_jpeg/test_apps/main/usb_camera.jpg b/esp_jpeg/test_apps/main/usb_camera.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c34683508375ec8491ca1d8d480345b50b09121 GIT binary patch literal 2632 zcmb7`X*kqt8^HfFmNCdAhM5L~8T*n6rDA4e3DL;TajdzR6GE%P*gDmOktL3nnUh3> zBTJ%?ZG@Op%-D*ILK0;OGyGq@?>X0duIv5u-p{A!!~I;p`@Wy&cRk<`I02|xde{>H z2m}IL*k1n|;3!}Ph>MDfiHeAeiHeDfi^JduI9x&kzH7%0Nd!_(K>;a;R77Fal~HI_ zv^-KpOGOoj*VNKfRMIuj)i6-k(A4;G2xL1I4ui|W;j$ViBueA|4)84?3P^4vivj@H z0?0~i^Rh%BY5-IgA|eX`M*wLN$o57=79auZe)NwAlIegpOQ!$5>C;=2qSA$$W+zSw z&ttjI-)Vm&16IqTt}`boL1&gucki?K>JdnJo1wE?M(R@4L zmc)h|r})cd++iyf8<()0UD6RZwmtwyYQpiO-LdRN5U@I);~C%NTei}tjqJK#=eoHd zm>HxRIIrI06mw~QBIolGBZIax;Z7eKWSTjl>7llt?mrajTEv3p zIK#@~;7`Wm%bXZbm8fq9sz6})!*_~9#fXeb{2o}oVDX* zhaz19($)MA64-}(m>#WbD{_hW-9O%C-JbG%?U;dL39}?-0bz&obvl>HyumA3q&H&^y2tekW zCn=?`(iRF#X7464Hw&Hz;wH`tWv{FhU&2@gd1b?zDYn?Y@>XVpf06nP!;xb1fG*E0 zgdiWwG?7jng)rWVq%iAqMQ_rN%1Oo$wn{>=ccAJ!^$l`-A#4e1g)LVd_|G>;}q z+GLK5#uL}IacJJk%)-VhV$&@vg2v08*U2r^m5aV>K&E%fMm01<`Oqil^RhuJ+DwddmGXA z-1@a;v3^Am*DV&$?m1gf@5EoHQNa?s2lu zxtThBiq-M6&4hWC@` zG_{a^H(k1ZmX!kX{+_V=LmWEO8OCeyg^oJZrKrXpSEoICfjT}?14O=PN}8h%)i_#y z`(|rVI+>xTKC!Hvp<5VR^4WZP_J-j0>dNov@~-cFE%SM4(fJtFt+R5beIy>6x5hg4 z^>9n4Pc*9*geIQ7T9p-n z53p#>BIU+C;%AewKQ#B(sF9}~Qs#YXYp_eN-6_3EPLZ%7hh~2P-&9xo9UQwZ!F^O) zbt0{DQnw44t+B68nO>SXve0&-vW$+ zGX+_s&fj`Oa`aX@pfSOcuY+!gDso%rCH9(-qc~AfeqZaol#hEAa$S=+1SCnkRC3OzwRtH)ELbOq}Pb+XjNpTebC9$-d_Cs zVjv*1M1oW#5k~FuU0^adLf2{>!q2|LZOMy0GJXX~2%2WDe>}2W^6o-sj90uH zM}1!bVK8xnQ&9o8m4+#~)Jtc7;q}p!%AYZ=Ci_NPJSI(f(^h>>2K+;l?q;Z#sg(u4 zJBu<1V>WN^PKk_{{pQj)EjOLq_LJjxNbUl@@fI@&>j$&%hi(b9*15e>cEmtekJCSs z56b-V?2l_F#vT}t=Hfx%V0w~lz6{5W%~ozp@nj7;zNOypuzt$WU(gSP7_iG(%0_#g`chWF1;xUU6YGaw*QcheFx_OFrzm%gqslSygRKM4Q+xw0ZDrmUz)4L;wETI^T?QOLt=~Igdo- z2?eZ)N~Nfabl_qs8)c0WsU@TXwrrEuFz5k9kDtZYt19 literal 0 HcmV?d00001 diff --git a/esp_jpeg/test_apps/sdkconfig.ci b/esp_jpeg/test_apps/sdkconfig.ci new file mode 100644 index 0000000000..e62d3dff41 --- /dev/null +++ b/esp_jpeg/test_apps/sdkconfig.ci @@ -0,0 +1,6 @@ +# This file was generated using idf.py save-defconfig. It can be edited manually. +# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Minimal Configuration +# +CONFIG_ESP_TASK_WDT_INIT=n +CONFIG_JD_USE_ROM=n +CONFIG_JD_DEFAULT_HUFFMAN=y diff --git a/esp_jpeg/tjpgd/tjpgd.c b/esp_jpeg/tjpgd/tjpgd.c index 51856fbedc..3fd42c9070 100644 --- a/esp_jpeg/tjpgd/tjpgd.c +++ b/esp_jpeg/tjpgd/tjpgd.c @@ -154,6 +154,75 @@ static void *alloc_pool ( /* Pointer to allocated memory block (NULL:no memory +#if JD_DEFAULT_HUFFMAN +/*-----------------------------------------------------------------------*/ +/* Load default Huffman table */ +/*-----------------------------------------------------------------------*/ + +extern unsigned char esp_jpeg_lum_dc_num_bits[], esp_jpeg_lum_dc_values[]; +extern unsigned char esp_jpeg_chrom_dc_num_bits[], esp_jpeg_chrom_dc_values[]; +extern unsigned char esp_jpeg_lum_ac_num_bits[], esp_jpeg_lum_ac_values[]; +extern unsigned char esp_jpeg_chrom_ac_num_bits[], esp_jpeg_chrom_ac_values[]; +extern unsigned esp_jpeg_lum_dc_codes_total, esp_jpeg_lum_ac_codes_total, esp_jpeg_chrom_dc_codes_total, esp_jpeg_chrom_ac_codes_total; +JRESULT jd_load_default_huffman (JDEC *jd) +{ + // Variable declarations to keep a similar structure to create_huffman_tbl() + unsigned int i, j, b; + uint8_t *pb; + uint16_t hc, *ph; + + // Group default tables for Y/CbCr channels and DC/AC components to access them in loops + // These arrays store predefined Huffman bit lengths and values for JPEG decoding + unsigned char *num_bits[2][2] = { + {esp_jpeg_lum_dc_num_bits, esp_jpeg_lum_ac_num_bits}, // Luminance (Y) DC and AC bit lengths + {esp_jpeg_chrom_dc_num_bits, esp_jpeg_chrom_ac_num_bits} // Chrominance (CbCr) DC and AC bit lengths + }; + unsigned codes_total[2][2] = { + {esp_jpeg_lum_dc_codes_total, esp_jpeg_lum_ac_codes_total}, // Total codes for Y DC and AC components + {esp_jpeg_chrom_dc_codes_total, esp_jpeg_chrom_ac_codes_total} // Total codes for CbCr DC and AC components + }; + unsigned char *values[2][2] = { + {esp_jpeg_lum_dc_values, esp_jpeg_lum_ac_values}, // Default Huffman values for Y DC and AC components + {esp_jpeg_chrom_dc_values, esp_jpeg_chrom_ac_values} // Default Huffman values for CbCr DC and AC components + }; + + // Loop over Y/CbCr channels and DC/AC components to initialize Huffman tables + for (int ycbcr = 0; ycbcr < 2; ycbcr++) { // Loop for Luminance (Y) and Chrominance (CbCr) + for (int dcac = 0; dcac < 2; dcac++) { // Loop for DC and AC tables + // Assign the bit lengths and values arrays to Huffman table fields in the JDEC structure + jd->huffbits[ycbcr][dcac] = num_bits[ycbcr][dcac]; + jd->huffdata[ycbcr][dcac] = values[ycbcr][dcac]; + + // Calculate Huffman codes from bit lengths to construct codeword tables + pb = num_bits[ycbcr][dcac]; // Access bit length array + size_t np = codes_total[ycbcr][dcac]; // Total number of codes + + // The bits and values are usually in the Huffman table of the JPEG picture. + // The codes themselves must be calculated based on the bits and values; that is what we do here. + // Since this function uses default bits and values that are constant and known at compile time, + // We could optimize this even more by providing pre-calculated codes too... + + // Allocate memory for the Huffman codeword table + ph = alloc_pool(jd, np * sizeof(uint16_t)); + if (!ph) { + return JDR_MEM1; // Error: Memory allocation failed + } + jd->huffcode[ycbcr][dcac] = ph; // Store allocated memory address for code table + hc = 0; // Initialize Huffman code + + // Generate Huffman codes based on the bit lengths in pb + for (j = i = 0; i < 16; i++) { // Iterate over 16 possible code lengths + b = pb[i]; // Number of codes with length (i+1) bits + while (b--) { + ph[j++] = hc++; // Assign code and increment index + } + hc <<= 1; // Left shift code to increase bit length + } + } + } + return JDR_OK; // Return success status +} +#endif /*-----------------------------------------------------------------------*/ /* Create de-quantization and prescaling tables with a DQT segment */ @@ -906,7 +975,10 @@ static JRESULT mcu_output ( if (ix == 8) { py += 64 - 8; /* Jump to next block if double block heigt */ } - pc += ix & 1; /* Step forward chroma pointer every two pixels */ + /* Step forward chroma pointer every two pixels */ + if (ix % 2) { + pc++; + } } else { /* Single block width */ pc++; /* Step forward chroma pointer every pixel */ } @@ -1187,7 +1259,11 @@ JRESULT jd_prepare ( } n = i ? 1 : 0; /* Component class */ if (!jd->huffbits[n][0] || !jd->huffbits[n][1]) { /* Check huffman table for this component */ +#if JD_DEFAULT_HUFFMAN + jd_load_default_huffman(jd); // Always returns OK +#else return JDR_FMT1; /* Err: Nnot loaded */ +#endif } if (!jd->qttbl[jd->qtid[i]]) { /* Check dequantizer table for this component */ return JDR_FMT1; /* Err: Not loaded */ diff --git a/esp_jpeg/tjpgd/tjpgdcnf.h b/esp_jpeg/tjpgd/tjpgdcnf.h index 36dab28bd1..fa6a28c915 100644 --- a/esp_jpeg/tjpgd/tjpgdcnf.h +++ b/esp_jpeg/tjpgd/tjpgdcnf.h @@ -41,3 +41,8 @@ / 2: + Table conversion for huffman decoding (wants 6 << HUFF_BIT bytes of RAM) */ +#if defined(CONFIG_JD_DEFAULT_HUFFMAN) +#define JD_DEFAULT_HUFFMAN CONFIG_JD_DEFAULT_HUFFMAN +#else +#define JD_DEFAULT_HUFFMAN 0 +#endif