From fbadf313ef227af0c4117326d67a85fb809a2573 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Fri, 2 Nov 2018 19:54:37 +0800 Subject: [PATCH] drivers/input: remove unused auto touchscreen support Change-Id: Idc012f66abfcad6e5d601f97bded60f230b6fdcc Signed-off-by: Tao Huang --- drivers/input/ts/Kconfig | 16 - drivers/input/ts/Makefile | 7 - drivers/input/ts/chips/Kconfig | 40 - drivers/input/ts/chips/Makefile | 5 - drivers/input/ts/chips/ct360.c | 497 ----------- drivers/input/ts/chips/ct360_firmware.h | 1028 ----------------------- drivers/input/ts/chips/ft5306.c | 270 ------ drivers/input/ts/chips/gt8110.c | 374 --------- drivers/input/ts/chips/gt828.c | 391 --------- drivers/input/ts/ts-auto.c | 610 -------------- drivers/input/ts/ts-i2c.c | 302 ------- drivers/input/ts/ts-serial.c | 2 - drivers/input/ts/ts-spi.c | 2 - include/linux/ts-auto.h | 152 ---- 14 files changed, 3696 deletions(-) delete mode 100644 drivers/input/ts/Kconfig delete mode 100644 drivers/input/ts/Makefile delete mode 100644 drivers/input/ts/chips/Kconfig delete mode 100644 drivers/input/ts/chips/Makefile delete mode 100755 drivers/input/ts/chips/ct360.c delete mode 100644 drivers/input/ts/chips/ct360_firmware.h delete mode 100755 drivers/input/ts/chips/ft5306.c delete mode 100755 drivers/input/ts/chips/gt8110.c delete mode 100755 drivers/input/ts/chips/gt828.c delete mode 100755 drivers/input/ts/ts-auto.c delete mode 100755 drivers/input/ts/ts-i2c.c delete mode 100644 drivers/input/ts/ts-serial.c delete mode 100644 drivers/input/ts/ts-spi.c delete mode 100644 include/linux/ts-auto.h diff --git a/drivers/input/ts/Kconfig b/drivers/input/ts/Kconfig deleted file mode 100644 index ca184e2d04e6..000000000000 --- a/drivers/input/ts/Kconfig +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# -# all auto touch screen drivers configuration -# - -menuconfig TS_AUTO - bool "auto touch screen driver support" - default n - -if TS_AUTO - -source "drivers/input/ts/chips/Kconfig" - -endif - - diff --git a/drivers/input/ts/Makefile b/drivers/input/ts/Makefile deleted file mode 100644 index da734f0c0e2b..000000000000 --- a/drivers/input/ts/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# auto touch screen drivers -obj-$(CONFIG_TS_AUTO_I2C) += ts-i2c.o -obj-$(CONFIG_TS_AUTO_SPI) += ts-spi.o -obj-$(CONFIG_TS_AUTO_SERIAL) += ts-serial.o -obj-$(CONFIG_TS_AUTO) += chips/ -obj-$(CONFIG_TS_AUTO) += ts-auto.o \ No newline at end of file diff --git a/drivers/input/ts/chips/Kconfig b/drivers/input/ts/chips/Kconfig deleted file mode 100644 index e310d77e641e..000000000000 --- a/drivers/input/ts/chips/Kconfig +++ /dev/null @@ -1,40 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -menuconfig TS_AUTO_I2C - bool "Support auto touch screen with I2C" - default n - -if TS_AUTO_I2C - -config TS_FT5306 -bool "touch screen ft5306" - default n - -config TS_GT8110 - bool "touch screen gt8110" - default n - -config TS_GT828 - bool "touch screen gt828" - default n - -config TS_CT360 - bool "touch screen ct360" - default n - -endif - -config TS_AUTO_SPI - bool "Support auto touch screen with SPI" - depends on SPI_MASTER - -if TS_AUTO_SPI - -endif - -config TS_AUTO_SERIAL - bool "Support auto touch screen with UART" - -if TS_AUTO_SERIAL - -endif - diff --git a/drivers/input/ts/chips/Makefile b/drivers/input/ts/chips/Makefile deleted file mode 100644 index 435ac4a35033..000000000000 --- a/drivers/input/ts/chips/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_TS_FT5306) += ft5306.o -obj-$(CONFIG_TS_GT8110) += gt8110.o -obj-$(CONFIG_TS_CT360) += ct360.o -obj-$(CONFIG_TS_GT828) += gt828.o \ No newline at end of file diff --git a/drivers/input/ts/chips/ct360.c b/drivers/input/ts/chips/ct360.c deleted file mode 100755 index 7dee729df30a..000000000000 --- a/drivers/input/ts/chips/ct360.c +++ /dev/null @@ -1,497 +0,0 @@ -/* drivers/input/ts/chips/ct360.c - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif -#include -#include "ct360_firmware.h" - -static struct i2c_client *this_client; - -#if 0 -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - - -#define CT360_ID_REG 0x00 -#define CT360_DEVID 0x00 -#define CT360_DATA_REG 0x00 - - -/****************operate according to ts chip:start************/ - -static int ts_active(struct ts_private_data *ts, int enable) -{ - int result = 0; - - if(enable) - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - msleep(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(100); - } - else - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - } - - - return result; -} - - -static int ts_firmware(struct ts_private_data *ts) -{ - int i = 0, j = 0; - unsigned int ver_chk_cnt = 0; - unsigned int flash_addr = 0; - unsigned char CheckSum[16]; - unsigned char buf[32]; - char slave_addr = ts->ops->slave_addr; - int ret = 0; - - ret = ts_bulk_read_normal(ts, 1, buf, 200*1000); - if (Binary_Data_Ct360[16372] <= buf[0] ) - { - printk("%s:%s,firmware is new\n",__func__,ts->ops->name); - return 0; - } - - ts->ops->slave_addr = 0x7F; - - //------------------------------ - // Step1 --> initial BootLoader - // Note. 0x7F -> 0x00 -> 0xA5 ; - // MCU goto idle - //------------------------------ - printk("%s() Set mcu to idle \n", __FUNCTION__); - buf[0] = 0x00; - buf[1] = 0xA5; - ts_bulk_write_normal(ts, 2, buf, 200*1000); - mdelay(10); - - //------------------------------ - // Reset I2C Offset address - // Note. 0x7F -> 0x00 - //------------------------------ - printk("%s() Reset i2c offset address \n", __FUNCTION__); - buf[0] = 0x00; - ts_bulk_write_normal(ts, 1, buf, 200*1000); - mdelay(10); - - //------------------------------ - // Read I2C Bus status - //------------------------------ - printk("%s() Read i2c bus status \n", __FUNCTION__); - ts_bulk_read_normal(ts, 1, buf, 200*1000); - mdelay(10); // Delay 1 ms - - // if return "AAH" then going next step - if (buf[0] != 0xAA) - { - printk("%s() i2c bus status: 0x%x \n", __FUNCTION__, buf[0]); - goto exit; - } - - //------------------------------ - // Check incomplete flash erase - //------------------------------ - printk("%s() Flash erase verify \n", __FUNCTION__); - buf[0] = 0x00; - buf[1] = 0x99; // Generate check sum command -->read flash, set addr - buf[2] = 0x00; // define a flash address for CT36x to generate check sum - buf[3] = 0x00; // - buf[4] = 0x08; // Define a data length for CT36x to generate check sum - - // Write Genertate check sum command to CT36x - ts_bulk_write_normal(ts, 5, buf, 200*1000); - mdelay(10); // Delay 10 ms - - ts_bulk_read_normal(ts, 13, buf, 200*1000); - mdelay(10); // Delay 10 ms - - CheckSum[0] = buf[5]; - CheckSum[1] = buf[6]; - - buf[0] = 0x00; - buf[1] = 0x99; // Generate check sum command -->read flash, set addr - buf[2] = 0x3F; // define a flash address for CT36x to generate check sum - buf[3] = 0xE0; // - buf[4] = 0x08; // Define a data length for CT36x to generate check sum - // Write Genertate check sum command to CT36x - ts_bulk_write_normal(ts, 5, buf, 200*1000); - mdelay(10); // Delay 10 ms - - ts_bulk_read_normal(ts, 13, buf, 200*1000); - mdelay(10); - - CheckSum[2] = buf[5]; - CheckSum[3] = buf[6]; - - if ( (CheckSum[0] ^ CheckSum[2]) == 0xFF && (CheckSum[1] ^ CheckSum[3]) == 0xFF ) - goto FLASH_ERASE; - - //------------------------------ - // check valid Vendor ID - //------------------------------ - printk("%s() Vendor ID Check \n", __FUNCTION__); - buf[0] = 0x00; - buf[1] = 0x99; // Generate check sum command -->read flash, set addr - buf[2] = 0x00; // define a flash address for CT365 to generate check sum - buf[3] = 0x44; // - buf[4] = 0x08; // Define a data length for CT365 to generate check sum - - // Write Genertate check sum command to CT36x - ts_bulk_write_normal(ts, 5, buf, 200*1000); - mdelay(10); // Delay 10 ms - - ts_bulk_read_normal(ts, 13, buf, 200*1000); - mdelay(10); // Delay 10 ms - - // Read check sum and flash data from CT36x - if ( (buf[5] != 'V') || (buf[9] != 'T') ) - ver_chk_cnt++; - - buf[0] = 0x00; - buf[1] = 0x99; // Generate check sum command -->read flash,set addr - buf[2] = 0x00; // define a flash address for CT365 to generate check sum - buf[3] = 0xA4; // - buf[4] = 0x08; // Define a data length for CT365 to generate check sum - - // Write Genertate check sum command to CT365 - ts_bulk_write_normal(ts, 5, buf, 200*1000); - mdelay(10); // Delay 10 ms - - ts_bulk_read_normal(ts, 13, buf, 200*1000); - mdelay(10); // Delay 10 ms - - if ((buf[5] != 'V') || (buf[9] != 'T')) - ver_chk_cnt++; - - if ( ver_chk_cnt >= 2 ) { - printk("%s() Invalid FW Version \n", __FUNCTION__); - goto exit; - } - -FLASH_ERASE: - //----------------------------------------------------- - // Step 2 : Erase 32K flash memory via Mass Erase (33H) - // 0x7F --> 0x00 --> 0x33 --> 0x00; - //----------------------------------------------------- - printk("%s() Erase flash \n", __FUNCTION__); - for(i = 0; i < 8; i++ ) { - buf[0] = 0x00; // Offset address - buf[1] = 0x33; // Mass Erase command - buf[2] = 0x00 + (i * 8); - ts_bulk_write_normal(ts, 3, buf, 200*1000); - mdelay(120); // Delay 10 mS - - //------------------------------ - // Reset I2C Offset address - // Note. 0x7F -> 0x00 - //------------------------------ - buf[0] = 0x00; - ts_bulk_write_normal(ts, 1, buf, 200*1000); - mdelay(120); // Delay 10 mS - - //------------------------------ - // Read I2C Bus status - //------------------------------ - ts_bulk_read_normal(ts, 1, buf, 200*1000); - mdelay(10); // Delay 1 ms - - // if return "AAH" then going next step - if( buf[0] != 0xAA ) - { - goto exit; - } - } - - //---------------------------------------- - // Step3. Host write 128 bytes to CT36x - // Step4. Host read checksum to verify ; - // Write/Read for 256 times ( 32k Bytes ) - //---------------------------------------- - printk("%s() flash FW start \n", __FUNCTION__); - for ( flash_addr = 0; flash_addr < 0x3FFF; flash_addr+=8 ) { - // Step 3 : write binary data to CT36x - buf[0] = 0x00; // Offset address - buf[1] = 0x55; // Flash write command - buf[2] = (char)(flash_addr >> 8); // Flash address [15:8] - buf[3] = (char)(flash_addr & 0xFF); // Flash address [7:0] - buf[4] = 0x08; // Data Length - - if( flash_addr == 160 || flash_addr == 168 ) { - buf[6] = ~Binary_Data_Ct360[flash_addr + 0]; // Binary data 1 - buf[7] = ~Binary_Data_Ct360[flash_addr + 1]; // Binary data 2 - buf[8] = ~Binary_Data_Ct360[flash_addr + 2]; // Binary data 3 - buf[9] = ~Binary_Data_Ct360[flash_addr + 3]; // Binary data 4 - buf[10] = ~Binary_Data_Ct360[flash_addr + 4]; // Binary data 5 - buf[11] = ~Binary_Data_Ct360[flash_addr + 5]; // Binary data 6 - buf[12] = ~Binary_Data_Ct360[flash_addr + 6]; // Binary data 7 - buf[13] = ~Binary_Data_Ct360[flash_addr + 7]; // Binary data 8 - } else { - buf[6] = Binary_Data_Ct360[flash_addr + 0]; // Binary data 1 - buf[7] = Binary_Data_Ct360[flash_addr + 1]; // Binary data 2 - buf[8] = Binary_Data_Ct360[flash_addr + 2]; // Binary data 3 - buf[9] = Binary_Data_Ct360[flash_addr + 3]; // Binary data 4 - buf[10] = Binary_Data_Ct360[flash_addr + 4]; // Binary data 5 - buf[11] = Binary_Data_Ct360[flash_addr + 5]; // Binary data 6 - buf[12] = Binary_Data_Ct360[flash_addr + 6]; // Binary data 7 - buf[13] = Binary_Data_Ct360[flash_addr + 7]; // Binary data 8 - } - // Calculate a check sum by Host controller. - // Checksum = / (FLASH_ADRH+FLASH_ADRL+LENGTH+ - // Binary_Data_Ct3601+Binary_Data_Ct3602+Binary_Data_Ct3603+Binary_Data_Ct3604+ - // Binary_Data_Ct3605+Binary_Data_Ct3606+Binary_Data_Ct3607+Binary_Data_Ct3608) + 1 - CheckSum[0] = ~(buf[2] + buf[3] + buf[4] + buf[6] + buf[7] + - buf[8] + buf[9] + buf[10] + buf[11] + buf[12] + - buf[13]) + 1; - - buf[5] = CheckSum[0]; // Load check sum to I2C Buffer - - ts_bulk_write_normal(ts, 14, buf, 200*1000); // Host write I2C_Buf[0?K12] to CT365. - mdelay(1); // 8 Bytes program --> Need 1 ms delay time - - // Step4. Verify process - //printk("%s(flash_addr:0x%04x) Verify FW \n", __FUNCTION__, flash_addr); - //Step 4 : Force CT365 generate check sum for host to compare data. - //Prepare get check sum from CT36x - buf[0] = 0x00; - buf[1] = 0x99; // Generate check sum command - buf[2] = (char)(flash_addr >> 8); // define a flash address for NT1100x to generate check sum - buf[3] = (char)(flash_addr & 0xFF); // - buf[4] = 0x08; // Define a data length for CT36x to generate check sum - - ts_bulk_write_normal(ts, 5, buf, 200*1000); // Write Genertate check sum command to CT365 - mdelay(1); // Delay 1 ms - - ts_bulk_read_normal(ts, 13, buf, 200*1000); // Read check sum and flash data from CT365 - - // Compare host check sum with CT365 check sum(I2C_Buf[4]) - if ( buf[4] != CheckSum[0] ) { - goto exit; - } - } - - - printk("%s() flash FW complete \n", __FUNCTION__); - -exit: - ts->ops->slave_addr = slave_addr; - if(ts->ops->active) - ts->ops->active(ts, 0); - if(ts->ops->active) - ts->ops->active(ts, 1); - return 0; - -} - - -static int ts_init(struct ts_private_data *ts) -{ - int irq_pin = irq_to_gpio(ts->pdata->irq); - int result = 0; - int uc_reg_value ; - - - char loader_buf[3] = {0xfF,0x0f,0x2A}; - - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - mdelay(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(300); - - //init some register - //to do - ts_bulk_write_normal(ts, 3, loader_buf, 200*1000); - - return result; -} - - -static int ts_report_value(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - struct ts_event *event = &ts->event; - unsigned char buf[20] = {0}; - int result = 0 , i = 0, off = 0, id = 0; - int syn_flag = 0; - - result = ts_bulk_read(ts, (unsigned short)ts->ops->read_reg, ts->ops->read_len, buf); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - //for(i=0; iops->read_len; i++) - //DBG("buf[%d]=0x%x\n",i,buf[i]); - - for(i = 0; iops->max_point; i++) - { - off = i*4; - id = buf[off] >> 4; - event->point[id].id = id; - event->point[id].status = buf[off+0] & 0x0f; - event->point[id].x = (((s16)buf[i+1] << 4)|((s16)buf[i+3] >> 4)); - event->point[id].y = (((s16)buf[i+2] << 4)|((s16)buf[i+3] & 0x0f)); - - if(ts->ops->xy_swap) - { - swap(event->point[id].x, event->point[id].y); - } - - if(ts->ops->x_revert) - { - event->point[id].x = ts->ops->range[0] - event->point[id].x; - } - - if(ts->ops->y_revert) - { - event->point[id].y = ts->ops->range[1] - event->point[id].y; - } - - if((event->point[id].status == 1) || (event->point[id].status == 2)) - { - input_mt_slot(ts->input_dev, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 1); - input_report_abs(ts->input_dev, ABS_MT_POSITION_X, event->point[id].x); - input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, event->point[id].y); - input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 1); - syn_flag = 1; - DBG("%s:%s press down,id=%d,x=%d,y=%d\n",__func__,ts->ops->name, event->point[id].id, event->point[id].x,event->point[id].y); - } - else if ((event->point[id].status == 3) || (event->point[id].status == 0)) - { - input_mt_slot(ts->input_dev, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - syn_flag = 1; - DBG("%s:%s press up,id=%d\n",__func__,ts->ops->name, event->point[id].id); - } - - event->point[id].last_status = event->point[id].status; - - } - - if(syn_flag) - { - syn_flag = 0; - input_sync(ts->input_dev); - } - - return 0; -} - -static int ts_suspend(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 0); - - return 0; -} - - -static int ts_resume(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 1); - return 0; -} - - -struct ts_operate ts_ct360_ops = { - .name = "ct360", - .slave_addr = 0x01, - .ts_id = TS_ID_CT360, //i2c id number - .bus_type = TS_BUS_TYPE_I2C, - .reg_size = 1, - .id_reg = CT360_ID_REG, - .id_data = TS_UNKNOW_DATA, - .version_reg = TS_UNKNOW_DATA, - .version_len = 0, - .version_data = NULL, - .read_reg = CT360_DATA_REG, //read data - .read_len = 4*5, //data length - .trig = IRQF_TRIGGER_FALLING, - .max_point = 5, - .xy_swap = 0, - .x_revert = 0, - .y_revert = 0, - .range = {800,480}, - .irq_enable = 1, - .poll_delay_ms = 0, - .active = ts_active, - .init = ts_init, - .check_irq = NULL, - .report = ts_report_value, - .firmware = ts_firmware, - .suspend = ts_suspend, - .resume = ts_resume, -}; - -/****************operate according to ts chip:end************/ - -//function name should not be changed -static struct ts_operate *ts_get_ops(void) -{ - return &ts_ct360_ops; -} - - -static int __init ts_ct360_init(void) -{ - struct ts_operate *ops = ts_get_ops(); - int result = 0; - result = ts_register_slave(NULL, NULL, ts_get_ops); - DBG("%s\n",__func__); - return result; -} - -static void __exit ts_ct360_exit(void) -{ - struct ts_operate *ops = ts_get_ops(); - ts_unregister_slave(NULL, NULL, ts_get_ops); -} - - -subsys_initcall(ts_ct360_init); -module_exit(ts_ct360_exit); - diff --git a/drivers/input/ts/chips/ct360_firmware.h b/drivers/input/ts/chips/ct360_firmware.h deleted file mode 100644 index 8905f1e40ffc..000000000000 --- a/drivers/input/ts/chips/ct360_firmware.h +++ /dev/null @@ -1,1028 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -static char Binary_Data_Ct360 [16384] = -{ -0x00,0x02,0x2E,0x26,0xD2,0x0B,0x32,0x32,0x32,0x32,0x00,0x02,0x00,0x04,0x00,0x00, -0x00,0x00,0x00,0x02,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x08,0x00,0x00, -0x00,0x00,0x00,0x02,0x2E,0xB2,0x00,0x00,0x00,0x00,0x00,0x02,0x2E,0xEA,0x00,0x00, -0x00,0x00,0x00,0x02,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x90,0x0C,0x2A,0x74,0x56,0xF0,0xA3,0x74,0x54,0xF0,0xA3,0x74,0x4C,0xF0,0x22,0x90, -0x08,0xD9,0xE4,0xF0,0xA3,0x74,0x04,0xF0,0x78,0xDB,0x7C,0x08,0x7A,0x2E,0x79,0x94, -0x7F,0x0A,0x12,0x11,0x74,0x78,0xE5,0x7C,0x08,0x7A,0x2E,0x79,0x9E,0x7F,0x14,0x12, -0x11,0x74,0xC2,0x11,0xC2,0x12,0xE4,0x90,0x08,0xC5,0x12,0x11,0x18,0xE4,0x90,0x08, -0xCD,0xF0,0x90,0x0B,0x47,0xE0,0x90,0x08,0xCE,0xF0,0x90,0x08,0xC6,0xF0,0x75,0x9E, -0x55,0xE4,0x90,0x08,0xC3,0xF0,0x12,0x0F,0x9F,0x40,0x03,0x02,0x01,0x96,0x12,0x0D, -0x44,0x1F,0x8F,0xFC,0xFD,0xFE,0x77,0x9B,0xFC,0x8F,0xFC,0xFD,0xFE,0x77,0x6F,0xF7, -0xC5,0xE0,0x04,0xF0,0x12,0x11,0x7D,0x12,0x0D,0xBE,0x74,0x04,0xF0,0xE4,0x90,0x08, -0xC4,0xF0,0x12,0x0F,0x3F,0x40,0x03,0x02,0x01,0x90,0x90,0x08,0xC3,0xE0,0xFF,0x12, -0x0E,0x20,0x12,0x0D,0xAA,0xFD,0xEE,0x12,0x0E,0x0B,0x12,0x10,0x01,0x40,0x11,0xEF, -0x12,0x0E,0x20,0x12,0x0E,0x55,0xFF,0x90,0x08,0xC4,0xE0,0x12,0x0E,0x0B,0x80,0x11, -0x90,0x08,0xC4,0xE0,0x12,0x0E,0x0B,0x12,0x0E,0x55,0xFF,0x90,0x08,0xC3,0x12,0x0E, -0x1F,0x12,0x0D,0xAA,0xC3,0x9F,0xFF,0xEC,0x9E,0x90,0x08,0xCF,0xF0,0xA3,0xEF,0xF0, -0x90,0x08,0xC3,0xE0,0xFF,0x12,0x0D,0xFC,0x12,0x0D,0xAA,0xFD,0x90,0x08,0xC4,0xE0, -0xFE,0x12,0x11,0x84,0x12,0x10,0x01,0x40,0x12,0xEF,0x12,0x0D,0xFC,0x12,0x0D,0xAA, -0xFD,0x12,0x0E,0x4B,0xC3,0x9D,0xFF,0xEE,0x9C,0x80,0x16,0x90,0x08,0xC4,0xE0,0x12, -0x0E,0x4C,0xFF,0x90,0x08,0xC3,0x12,0x0D,0xFB,0x12,0x0D,0xAA,0xC3,0x9F,0xFF,0xEC, -0x9E,0x90,0x08,0xD1,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xD1,0xE0,0xFE,0xA3,0xE0,0xFF, -0x90,0x08,0xD0,0xE0,0x2F,0xFF,0x90,0x08,0xCF,0xE0,0x3E,0xFE,0x12,0x0F,0x59,0xC0, -0x83,0xC0,0x82,0x90,0x08,0xC4,0xE0,0xD0,0x82,0xD0,0x83,0x12,0x11,0x8E,0xEE,0xF0, -0xA3,0xEF,0x12,0x10,0x7A,0x02,0x00,0xC2,0x12,0x11,0x7D,0x12,0x0D,0xBE,0xE4,0xF0, -0x12,0x10,0x31,0x02,0x00,0x96,0xE4,0x90,0x08,0xC4,0xF0,0x12,0x0F,0x3F,0x50,0x0A, -0x12,0x0F,0x87,0x74,0x01,0x12,0x10,0x7A,0x80,0xF1,0x02,0x04,0xB0,0x90,0x08,0xC5, -0xE0,0xD3,0x94,0x00,0x50,0x03,0x02,0x05,0x06,0xA3,0xE0,0xD3,0x94,0x00,0x50,0x03, -0x02,0x05,0x06,0xE4,0x90,0x08,0xC4,0xF0,0x12,0x0F,0x3F,0x50,0x70,0x12,0x0F,0x87, -0xE0,0x64,0x01,0x70,0x62,0x90,0x08,0xC3,0xF0,0x12,0x0F,0x9F,0x50,0x59,0x12,0x0D, -0xBB,0xE0,0x64,0x04,0x70,0x4B,0x12,0x0F,0x59,0xC0,0x83,0xC0,0x82,0x90,0x08,0xC4, -0xE0,0xD0,0x82,0xD0,0x83,0x12,0x11,0x8E,0xE0,0xFE,0xA3,0xE0,0x90,0x08,0xC7,0x12, -0x0E,0x41,0x12,0x10,0x82,0x50,0x2A,0x90,0x08,0xC3,0xE0,0xFF,0x12,0x0F,0x5D,0xC0, -0x83,0xC0,0x82,0x90,0x08,0xC4,0xE0,0xFE,0xD0,0x82,0xD0,0x83,0x12,0x11,0x8E,0xE0, -0xFD,0xA3,0xE0,0x90,0x08,0xC7,0xCD,0xF0,0xA3,0xED,0xF0,0xA3,0xEE,0xF0,0xA3,0xEF, -0xF0,0x12,0x10,0x31,0x02,0x01,0xD9,0x12,0x10,0x7B,0x02,0x01,0xC8,0xC3,0x90,0x08, -0xC8,0xE0,0x94,0x85,0x90,0x08,0xC7,0xE0,0x64,0x80,0x94,0x81,0x40,0x03,0x02,0x04, -0xB6,0x90,0x08,0xC9,0xE0,0x12,0x0E,0x0B,0x12,0x0E,0x55,0xFF,0x90,0x08,0xCA,0x12, -0x0F,0xA8,0x12,0x0D,0xAA,0xC3,0x9F,0xFF,0xEC,0x9E,0xFE,0x12,0x2F,0x22,0x90,0x08, -0xD7,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC9,0xE0,0x12,0x0E,0x4C,0xFF,0x90,0x08, -0xCA,0xE0,0x12,0x11,0x94,0x12,0x0D,0xAA,0xC3,0x9F,0xFF,0xEC,0x9E,0xFE,0x12,0x2F, -0x22,0x90,0x08,0xD8,0xE0,0x2F,0xFF,0x90,0x08,0xD7,0xE0,0x3E,0xFE,0xC3,0xEF,0x94, -0x03,0xEE,0x64,0x80,0x94,0x80,0x50,0x13,0x90,0x08,0xD9,0x74,0x03,0xF0,0xA3,0x74, -0x39,0xF0,0x90,0xF0,0x3D,0x74,0x03,0xF0,0x02,0x03,0x88,0xC3,0xEF,0x94,0x08,0xEE, -0x64,0x80,0x94,0x80,0x50,0x07,0x12,0x10,0x38,0x74,0xF7,0x80,0x34,0xC3,0xEF,0x94, -0x0A,0xEE,0x64,0x80,0x94,0x80,0x50,0x07,0x12,0x10,0x38,0x74,0xB5,0x80,0x22,0xC3, -0xEF,0x94,0x0F,0xEE,0x64,0x80,0x94,0x80,0x50,0x07,0x12,0x10,0x38,0x74,0x73,0x80, -0x10,0xC3,0xEF,0x94,0x10,0xEE,0x64,0x80,0x94,0x80,0x50,0x0F,0x12,0x10,0x38,0x74, -0x31,0xF0,0x90,0xF0,0x3D,0x74,0x02,0xF0,0x02,0x03,0x88,0xC3,0xEF,0x94,0x14,0xEE, -0x64,0x80,0x94,0x80,0x50,0x11,0x90,0xF0,0x3D,0x74,0x02,0xF0,0x90,0x08,0xD9,0x14, -0xF0,0xA3,0x74,0xEF,0xF0,0x80,0x61,0xC3,0xEF,0x94,0x18,0xEE,0x64,0x80,0x94,0x80, -0x50,0x07,0x12,0x11,0x24,0x74,0xAD,0x80,0x22,0xC3,0xEF,0x94,0x1C,0xEE,0x64,0x80, -0x94,0x80,0x50,0x07,0x12,0x11,0x24,0x74,0x6B,0x80,0x10,0xC3,0xEF,0x94,0x20,0xEE, -0x64,0x80,0x94,0x80,0x50,0x0E,0x12,0x11,0x24,0x74,0x29,0xF0,0x90,0xF0,0x3D,0x74, -0x01,0xF0,0x80,0x24,0xC3,0xEF,0x94,0x24,0xEE,0x64,0x80,0x94,0x80,0x50,0x0C,0x90, -0xF0,0x3D,0x74,0x01,0xF0,0x90,0x08,0xD9,0xE4,0x80,0x08,0xE4,0x90,0xF0,0x3D,0xF0, -0x90,0x08,0xD9,0xF0,0xA3,0x74,0xE7,0xF0,0xD3,0xEF,0x94,0x08,0xEE,0x64,0x80,0x94, -0x80,0x40,0x26,0x12,0x0E,0x5C,0xE0,0xD3,0x94,0x04,0x40,0x0A,0x74,0x57,0x2D,0x12, -0x0E,0x63,0xE0,0x24,0xFC,0xF0,0x12,0x0E,0x5C,0xE0,0xC3,0x94,0x01,0x50,0x27,0x74, -0x57,0x2D,0x12,0x0E,0x63,0xE4,0xF0,0x80,0x1D,0x12,0x0E,0x5C,0xE0,0x24,0x03,0xF0, -0x74,0x57,0x2D,0x12,0x0E,0x63,0xE0,0xD3,0x94,0x16,0x40,0x0A,0x90,0x08,0xCA,0xE0, -0x12,0x0E,0x61,0x74,0x16,0xF0,0x12,0x0E,0x5C,0xE0,0xFB,0xD3,0xEF,0x9B,0x74,0x80, -0xF8,0x6E,0x98,0x40,0x09,0x74,0x4A,0x2D,0x12,0x11,0x2C,0x74,0x01,0xF0,0x90,0x08, -0xCA,0xE0,0x24,0x4A,0x12,0x11,0x2C,0xE0,0xB4,0x01,0x15,0xD3,0xEF,0x94,0x02,0xEE, -0x64,0x80,0x94,0x80,0x40,0x06,0xD2,0x11,0xD2,0x12,0x80,0x04,0xC2,0x11,0xC2,0x12, -0xA2,0x12,0x82,0x11,0x50,0x72,0x30,0x07,0x17,0x12,0x0E,0x06,0x12,0x0D,0xAA,0x90, -0x08,0xCA,0x12,0x0D,0x8D,0xFD,0xEE,0x12,0x0D,0xFC,0x12,0x0E,0x76,0x02,0x04,0x73, -0x12,0x0F,0x6B,0x12,0x0E,0x0B,0x12,0x0D,0xAA,0x12,0x0F,0xB7,0x90,0x08,0xD9,0xE0, -0xFE,0xA3,0xE0,0xFF,0x12,0x0E,0x15,0x12,0x0D,0xAA,0x12,0x11,0x48,0x12,0x0E,0x15, -0x12,0x11,0x34,0x12,0x0F,0x6B,0x12,0x0D,0xA1,0x12,0x0F,0xB7,0x90,0x08,0xD9,0xE0, -0xFE,0xA3,0xE0,0xFF,0x12,0x0D,0xF1,0x12,0x0D,0xAA,0x12,0x11,0x48,0x12,0x0D,0xF1, -0x12,0x11,0x34,0x12,0x0E,0x06,0x12,0x0D,0xAA,0xFD,0x90,0x08,0xCA,0xE0,0xFE,0x12, -0x0F,0xA9,0x12,0x0D,0x99,0x12,0x0E,0x6B,0x90,0x08,0xCA,0xE0,0xFF,0x12,0x0F,0x2D, -0x74,0x03,0xF0,0x12,0x0D,0xBB,0x74,0x02,0xF0,0x90,0x08,0xC9,0xE0,0x24,0xB8,0x12, -0x0F,0x8A,0xE4,0x12,0x11,0x18,0x90,0x08,0xC5,0xE0,0x14,0xF0,0xA3,0x12,0x0E,0x30, -0x75,0x9E,0x55,0x02,0x01,0xAD,0xE4,0x90,0x08,0xC3,0xF0,0x12,0x0F,0x9F,0x50,0x46, -0x12,0x0D,0xBB,0xE0,0x64,0x04,0x70,0x38,0x90,0x08,0xC3,0x12,0x0F,0xA8,0x12,0x0D, -0xAA,0xFD,0xEF,0x12,0x0E,0x20,0x12,0x0E,0x76,0x90,0x08,0xC3,0xE0,0xFF,0x12,0x11, -0x94,0x12,0x0D,0xAA,0xFD,0xEF,0x12,0x0D,0xFC,0x12,0x0E,0x76,0x90,0x08,0xC3,0xE0, -0xFF,0x24,0x20,0x12,0x0D,0xBE,0x12,0x0E,0x2A,0x12,0x0E,0xF6,0xF5,0x83,0xE4,0xF0, -0x12,0x10,0x31,0x02,0x04,0xBB,0x12,0x10,0x40,0x40,0x03,0x02,0x05,0xC4,0x90,0x08, -0xC5,0xE0,0x94,0x00,0x50,0x03,0x02,0x05,0xC4,0xE4,0x90,0x08,0xC3,0xF0,0x12,0x0F, -0x9F,0x40,0x03,0x02,0x05,0xC4,0x12,0x0D,0xBB,0xE0,0x64,0x04,0x60,0x03,0x02,0x05, -0xBE,0x12,0x10,0x40,0x40,0x03,0x02,0x05,0xBE,0x20,0x16,0x14,0x12,0x11,0x7D,0x12, -0x0D,0xBE,0x12,0x0E,0x2A,0x74,0xAE,0x2F,0xF5,0x82,0xE4,0x34,0x0B,0x02,0x05,0xBA, -0x12,0x0F,0x29,0xE0,0xFF,0x70,0x14,0x90,0x08,0xC3,0xE0,0xFE,0x24,0x20,0x12,0x0D, -0xBE,0x74,0x02,0x12,0x0E,0x2C,0x74,0xAE,0x2E,0x80,0x31,0xEF,0xB4,0x01,0x14,0x90, -0x08,0xC3,0xE0,0xFF,0x24,0x20,0x12,0x0D,0xBE,0x74,0x02,0x12,0x0E,0x2C,0x74,0xAE, -0x2F,0x80,0x19,0x12,0x0F,0x29,0xE0,0x90,0x08,0xC3,0xB4,0x02,0x17,0xE0,0xFF,0x24, -0x20,0x12,0x0D,0xBE,0x74,0x02,0x12,0x0E,0x2C,0x74,0xAE,0x2F,0x12,0x0F,0x2F,0xE0, -0x04,0xF0,0x80,0x1A,0xE0,0xFF,0x24,0x20,0x12,0x0D,0xBE,0x12,0x0E,0x2A,0x74,0xAE, -0x2F,0x12,0x0F,0x2F,0x74,0x03,0xF0,0x12,0x0E,0xF6,0xF5,0x83,0xE4,0xF0,0x12,0x10, -0x31,0x02,0x05,0x1E,0x12,0x10,0x40,0x40,0x03,0x02,0x07,0x67,0x90,0x08,0xC6,0xE0, -0x94,0x00,0x50,0x03,0x02,0x07,0x67,0xE4,0x90,0x08,0xC4,0xF0,0x12,0x0F,0x3F,0x40, -0x03,0x02,0x07,0x67,0x12,0x0F,0x87,0xE0,0x64,0x01,0x60,0x03,0x02,0x07,0x61,0x90, -0x08,0xC3,0xF0,0x12,0x0F,0x9F,0x40,0x03,0x02,0x07,0x61,0x12,0x0D,0xBB,0xE0,0x60, -0x03,0x02,0x07,0x5B,0x12,0x10,0x40,0x40,0x03,0x02,0x07,0x5B,0x90,0x08,0xC4,0xE0, -0xFF,0x24,0xDB,0xF5,0x82,0xE4,0x34,0x08,0xF5,0x83,0xE0,0xFE,0x90,0x08,0xC3,0xE0, -0x12,0x0F,0xCF,0xE0,0xFD,0xD3,0x9E,0x40,0x03,0x02,0x06,0xC6,0xED,0x70,0x22,0xEF, -0x12,0x0E,0x0B,0x12,0x0D,0xAA,0xFD,0x12,0x0F,0xC0,0x12,0x0D,0x99,0xFD,0x12,0x10, -0x12,0x12,0x0E,0x76,0x74,0x3B,0x2E,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0x74,0x01, -0xF0,0x90,0x08,0xC4,0xE0,0x25,0xE0,0x24,0xE5,0xF5,0x82,0xE4,0x34,0x08,0xF5,0x83, -0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x08,0xC3,0xE0,0x25,0xE0,0x24,0x26,0xF5,0x82,0xE4, -0x34,0x0B,0xF5,0x83,0xE0,0xFC,0xA3,0xE0,0xC3,0x9F,0xEC,0x9E,0x90,0x08,0xC3,0xE0, -0xFF,0x40,0x11,0x12,0x0F,0xCF,0xE0,0x04,0xF0,0x74,0x20,0x2F,0xF5,0x82,0xE4,0x34, -0x0C,0x02,0x07,0x55,0x12,0x0F,0xCF,0xE4,0xF0,0x90,0x08,0xC4,0xE0,0xFE,0x12,0x0E, -0x0B,0x12,0x0D,0xAA,0xFD,0xEF,0x12,0x0F,0xC5,0x12,0x0E,0x76,0x12,0x0E,0x4B,0xFF, -0x90,0x08,0xC3,0xE0,0xFD,0x12,0x10,0x13,0x12,0x11,0x34,0x74,0x3B,0x2D,0xF5,0x82, -0xE4,0x34,0x0B,0x02,0x07,0x55,0x90,0x08,0xC4,0xE0,0xFF,0x24,0x3B,0xF5,0x82,0xE4, -0x34,0x0B,0xF5,0x83,0xE0,0xB4,0x01,0x1C,0x12,0x0F,0xC0,0x12,0x0D,0xAA,0xFD,0xEF, -0x12,0x0E,0x0B,0x12,0x0E,0x76,0x12,0x10,0x12,0x12,0x0D,0xAA,0xFD,0xEF,0x12,0x11, -0x84,0x12,0x0E,0x76,0x90,0x08,0xC4,0x12,0x0E,0x09,0x12,0x0D,0xAA,0x90,0x08,0xC3, -0x12,0x0D,0x8D,0xFD,0xEE,0x12,0x0D,0xFC,0x12,0x0E,0x76,0x90,0x08,0xC4,0x12,0x0E, -0x09,0x12,0x0D,0xAA,0xFD,0xEE,0x12,0x0F,0xA9,0x12,0x0D,0x99,0x12,0x0E,0x6B,0x74, -0x20,0x2E,0x12,0x0D,0xBE,0x74,0x01,0xF0,0x90,0x08,0xC4,0xE0,0x24,0xB8,0x12,0x0F, -0x8A,0xE4,0x12,0x0E,0x32,0x74,0x4A,0x2E,0x12,0x11,0x2C,0xE4,0xF0,0x74,0xAE,0x2E, -0x12,0x0F,0x2F,0xE4,0xF0,0x74,0x2D,0x2E,0x12,0x0F,0xD1,0xE4,0xF0,0x74,0x3B,0x2E, -0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0xE4,0xF0,0x80,0x06,0x12,0x10,0x31,0x02,0x05, -0xF3,0x12,0x10,0x7B,0x02,0x05,0xDC,0x75,0x9E,0x55,0x22,0xC2,0x1B,0xE4,0x90,0x0B, -0x8E,0xF0,0xD2,0x17,0x30,0x14,0x03,0x02,0x09,0xFD,0x90,0x08,0xC3,0xF0,0x12,0x0F, -0xDF,0x40,0x03,0x02,0x09,0xA6,0x12,0x0D,0xBB,0xE0,0xFF,0x70,0x03,0x02,0x09,0xA0, -0x64,0x03,0x60,0x06,0xEF,0xF4,0x60,0x02,0xC2,0x17,0xEF,0xB4,0x03,0x02,0xD2,0x1B, -0x12,0x0C,0x91,0x12,0x0D,0x57,0x12,0x0F,0x4C,0x12,0x10,0x1D,0x50,0x0C,0xE4,0x7B, -0x20,0x0A,0x12,0x0D,0x7D,0x12,0x0E,0xAC,0x80,0x06,0x12,0x0D,0x7E,0x12,0x10,0x27, -0x12,0x0E,0xA6,0x12,0x0D,0x7E,0x12,0x11,0x5E,0x12,0x0C,0xED,0xEE,0xF0,0xA3,0xEF, -0xF0,0xED,0x12,0x0D,0x13,0x12,0x0E,0x8C,0x7B,0xA0,0x7A,0x01,0x12,0x0D,0x7B,0x12, -0x0F,0x4C,0x7B,0xD0,0xFA,0x12,0x10,0x21,0x50,0x0C,0xE4,0x7B,0xA0,0x0A,0x12,0x0D, -0x7D,0x12,0x0E,0xAC,0x80,0x0A,0x12,0x0D,0x7E,0x7B,0xA0,0x7A,0x01,0x12,0x10,0x2B, -0x12,0x0E,0xA6,0x12,0x0C,0xF9,0x12,0x0C,0x83,0x12,0x0C,0xED,0x12,0x10,0xAE,0x50, -0x43,0xEF,0x12,0x0C,0xED,0x12,0x0D,0x1F,0x50,0x05,0x12,0x0F,0x37,0x80,0x0A,0x12, -0x0E,0x7E,0x94,0x7F,0x40,0x03,0x12,0x10,0xBB,0x90,0x08,0xC3,0xE0,0x12,0x0C,0xED, -0xC0,0x83,0xC0,0x82,0x12,0x0E,0x3A,0xFF,0xEE,0x9C,0xD0,0x82,0xD0,0x83,0x12,0x11, -0x9E,0x12,0x0C,0xED,0x12,0x0E,0xE0,0x50,0x43,0xEF,0x12,0x0C,0xED,0xE4,0xF0,0xA3, -0xF0,0x02,0x08,0x8C,0x90,0x08,0xC3,0xE0,0x12,0x0C,0xED,0x12,0x0D,0xC6,0x12,0x0D, -0x45,0x50,0x05,0x12,0x0F,0x37,0x80,0x0D,0x12,0x10,0x48,0x12,0x0E,0x85,0x94,0x80, -0x40,0x03,0x12,0x10,0xC2,0x12,0x0F,0x1B,0x12,0x0C,0xED,0x12,0x0F,0xD9,0x12,0x0C, -0xEC,0x12,0x10,0xC9,0x40,0x06,0x12,0x0C,0xEC,0x12,0x10,0x50,0x12,0x0D,0x0E,0x12, -0x10,0xD6,0x50,0x44,0xEF,0x12,0x0D,0x13,0x12,0x0D,0x1F,0x50,0x05,0x12,0x0F,0x37, -0x80,0x0A,0x12,0x0E,0x7E,0x94,0x7F,0x40,0x03,0x12,0x10,0xBB,0x90,0x08,0xC3,0xE0, -0x12,0x0D,0x13,0xC0,0x83,0xC0,0x82,0x12,0x0E,0x3A,0xFF,0xEE,0x9C,0xD0,0x82,0xD0, -0x83,0xF0,0xA3,0xEF,0xF0,0x12,0x0D,0x0E,0x12,0x0E,0xE0,0x50,0x48,0xEF,0x12,0x0D, -0x13,0xE4,0xF0,0xA3,0xF0,0x02,0x09,0x15,0x90,0x08,0xC3,0xE0,0x12,0x0D,0x13,0x12, -0x10,0x58,0x12,0x0D,0xD5,0x12,0x0D,0x45,0x50,0x05,0x12,0x0F,0x37,0x80,0x0D,0x12, -0x10,0x48,0x12,0x0E,0x85,0x94,0x80,0x40,0x03,0x12,0x10,0xC2,0x12,0x0F,0x1B,0x12, -0x0D,0x13,0x12,0x0F,0xD9,0xED,0x12,0x0D,0x13,0x12,0x10,0xE3,0x40,0x07,0xED,0x12, -0x0D,0x13,0x12,0x10,0x68,0x90,0x08,0xC3,0xE0,0xFF,0x12,0x0C,0xED,0x12,0x10,0xF0, -0x40,0x07,0xEF,0x12,0x0C,0xED,0x12,0x10,0x50,0x12,0x0D,0x0E,0x12,0x10,0xFD,0x40, -0x07,0xEF,0x12,0x0D,0x13,0x12,0x10,0x68,0x12,0x0D,0xB1,0x12,0x0F,0x92,0x24,0x00, -0xF5,0x82,0xE4,0x34,0x0F,0x12,0x10,0x70,0x12,0x0C,0xED,0x12,0x11,0x0A,0x12,0x11, -0x11,0xD8,0xFB,0x12,0x0F,0xEE,0x24,0x01,0xF5,0x82,0xE4,0x34,0x0F,0xF5,0x83,0xEF, -0xF0,0xEC,0x12,0x0D,0x13,0x12,0x11,0x0A,0x12,0x11,0x11,0xD8,0xFB,0xFF,0x12,0x0F, -0x95,0x24,0x02,0xF5,0x82,0xE4,0x34,0x0F,0xF5,0x83,0xEF,0x12,0x10,0x73,0x12,0x0C, -0xED,0x12,0x11,0x3C,0xD5,0x82,0x02,0x15,0x83,0x15,0x82,0xEF,0x54,0xF0,0xFF,0xEC, -0x12,0x0D,0x13,0x12,0x0F,0xE8,0x24,0x03,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x11,0x69, -0x12,0x0F,0xFA,0x02,0x07,0x7E,0x90,0x0B,0x8E,0xE0,0xD3,0x94,0x00,0x40,0x05,0x30, -0x17,0x02,0xD2,0x0F,0x30,0x1B,0x07,0x7F,0x70,0x7E,0x17,0x12,0x2F,0x02,0x90,0x0B, -0x8E,0xE0,0x90,0x08,0xC3,0xF0,0x12,0x0F,0xDF,0x40,0x03,0x02,0x0C,0x82,0xEF,0x25, -0xE0,0x25,0xE0,0x24,0x00,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x0E,0xEB,0x24,0x01,0xF5, -0x82,0xE4,0x34,0x0F,0x12,0x0E,0xEB,0x24,0x02,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x0E, -0xEB,0x24,0x03,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x0F,0xF5,0x80,0xC9,0xE4,0x90,0x08, -0xC3,0xF0,0x12,0x0F,0xDF,0x40,0x03,0x02,0x0C,0x2E,0x12,0x0D,0xBB,0xE0,0xFF,0x70, -0x03,0x02,0x0C,0x28,0x64,0x03,0x60,0x06,0xEF,0xF4,0x60,0x02,0xC2,0x17,0xEF,0xB4, -0x03,0x02,0xD2,0x1B,0x12,0x0C,0x91,0x12,0x0D,0x57,0x12,0x0F,0x4C,0x12,0x10,0x1D, -0x50,0x0C,0xE4,0x7B,0x20,0x0A,0x12,0x0D,0x7D,0x12,0x0E,0xAC,0x80,0x06,0x12,0x0D, -0x7E,0x12,0x10,0x27,0x12,0x0E,0xA6,0x12,0x0D,0x7E,0x12,0x11,0x5E,0x12,0x0C,0xED, -0xEE,0xF0,0xA3,0xEF,0xF0,0xED,0x12,0x0D,0x13,0x12,0x0E,0x8C,0xE4,0x7B,0xA0,0x7A, -0x01,0x12,0x0D,0x7C,0x12,0x0F,0x4C,0x7B,0xD0,0xFA,0x12,0x10,0x21,0x50,0x0C,0xE4, -0x7B,0xA0,0x0A,0x12,0x0D,0x7D,0x12,0x0E,0xAC,0x80,0x0D,0x12,0x0D,0x7E,0xE4,0x7B, -0xA0,0x7A,0x01,0xF9,0xF8,0x12,0x13,0xDC,0x12,0x0E,0xA6,0x12,0x0C,0xF9,0x12,0x0C, -0x83,0x12,0x0C,0xED,0x12,0x10,0xAE,0x50,0x43,0xEF,0x12,0x0C,0xED,0x12,0x0D,0x1F, -0x50,0x05,0x12,0x0F,0x37,0x80,0x0A,0x12,0x0E,0x7E,0x94,0x7F,0x40,0x03,0x12,0x10, -0xBB,0x90,0x08,0xC3,0xE0,0x12,0x0C,0xED,0xC0,0x83,0xC0,0x82,0x12,0x0E,0x3A,0xFF, -0xEE,0x9C,0xD0,0x82,0xD0,0x83,0x12,0x11,0x9E,0x12,0x0C,0xED,0x12,0x0E,0xE0,0x50, -0x43,0xEF,0x12,0x0C,0xED,0xE4,0xF0,0xA3,0xF0,0x02,0x0B,0x14,0x90,0x08,0xC3,0xE0, -0x12,0x0C,0xED,0x12,0x0D,0xC6,0x12,0x0D,0x45,0x50,0x05,0x12,0x0F,0x37,0x80,0x0D, -0x12,0x10,0x48,0x12,0x0E,0x85,0x94,0x80,0x40,0x03,0x12,0x10,0xC2,0x12,0x0F,0x1B, -0x12,0x0C,0xED,0x12,0x0F,0xD9,0x12,0x0C,0xEC,0x12,0x10,0xC9,0x40,0x06,0x12,0x0C, -0xEC,0x12,0x10,0x50,0x12,0x0D,0x0E,0x12,0x10,0xD6,0x50,0x44,0xEF,0x12,0x0D,0x13, -0x12,0x0D,0x1F,0x50,0x05,0x12,0x0F,0x37,0x80,0x0A,0x12,0x0E,0x7E,0x94,0x7F,0x40, -0x03,0x12,0x10,0xBB,0x90,0x08,0xC3,0xE0,0x12,0x0D,0x13,0xC0,0x83,0xC0,0x82,0x12, -0x0E,0x3A,0xFF,0xEE,0x9C,0xD0,0x82,0xD0,0x83,0xF0,0xA3,0xEF,0xF0,0x12,0x0D,0x0E, -0x12,0x0E,0xE0,0x50,0x48,0xEF,0x12,0x0D,0x13,0xE4,0xF0,0xA3,0xF0,0x02,0x0B,0x9D, -0x90,0x08,0xC3,0xE0,0x12,0x0D,0x13,0x12,0x10,0x58,0x12,0x0D,0xD5,0x12,0x0D,0x45, -0x50,0x05,0x12,0x0F,0x37,0x80,0x0D,0x12,0x10,0x48,0x12,0x0E,0x85,0x94,0x80,0x40, -0x03,0x12,0x10,0xC2,0x12,0x0F,0x1B,0x12,0x0D,0x13,0x12,0x0F,0xD9,0xED,0x12,0x0D, -0x13,0x12,0x10,0xE3,0x40,0x07,0xED,0x12,0x0D,0x13,0x12,0x10,0x68,0x90,0x08,0xC3, -0xE0,0xFF,0x12,0x0C,0xED,0x12,0x10,0xF0,0x40,0x07,0xEF,0x12,0x0C,0xED,0x12,0x10, -0x50,0x12,0x0D,0x0E,0x12,0x10,0xFD,0x40,0x07,0xEF,0x12,0x0D,0x13,0x12,0x10,0x68, -0x12,0x0D,0xB1,0x12,0x0F,0x92,0x24,0x3D,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x10,0x70, -0x12,0x0C,0xED,0x12,0x11,0x0A,0x12,0x11,0x11,0xD8,0xFB,0x12,0x0F,0xEE,0x24,0x3E, -0xF5,0x82,0xE4,0x34,0x0F,0xF5,0x83,0xEF,0xF0,0xEC,0x12,0x0D,0x13,0x12,0x11,0x0A, -0x12,0x11,0x11,0xD8,0xFB,0xFF,0x12,0x0F,0x95,0x24,0x3F,0xF5,0x82,0xE4,0x34,0x0F, -0xF5,0x83,0xEF,0x12,0x10,0x73,0x12,0x0C,0xED,0x12,0x11,0x3C,0xD5,0x82,0x02,0x15, -0x83,0x15,0x82,0xEF,0x54,0xF0,0xFF,0xEC,0x12,0x0D,0x13,0x12,0x0F,0xE8,0x24,0x40, -0xF5,0x82,0xE4,0x34,0x0F,0x12,0x11,0x69,0x12,0x0F,0xFA,0x02,0x0A,0x02,0x90,0x0B, -0x8E,0xE0,0xD3,0x94,0x00,0x40,0x05,0x30,0x17,0x02,0xD2,0x0F,0x30,0x1B,0x07,0x7F, -0x70,0x7E,0x17,0x12,0x2F,0x02,0x90,0x0B,0x8E,0xE0,0x90,0x08,0xC3,0xF0,0x12,0x0F, -0xDF,0x50,0x2F,0xEF,0x25,0xE0,0x25,0xE0,0x24,0x3D,0xF5,0x82,0xE4,0x34,0x0F,0x12, -0x0E,0xEB,0x24,0x3E,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x0E,0xEB,0x24,0x3F,0xF5,0x82, -0xE4,0x34,0x0F,0x12,0x0E,0xEB,0x24,0x40,0xF5,0x82,0xE4,0x34,0x0F,0x12,0x0F,0xF5, -0x80,0xCC,0x22,0xEE,0xF0,0xA3,0xED,0xF0,0x12,0x28,0xE6,0x90,0x08,0xC3,0xE0,0xFF, -0x22,0x90,0x08,0xC3,0xE0,0xFF,0x25,0xE0,0x24,0x78,0xF5,0x82,0xE4,0x34,0x0E,0xF5, -0x83,0xE0,0xFD,0xA3,0xE0,0x90,0x08,0xC8,0xCD,0xF0,0xA3,0xED,0xF0,0xEF,0x25,0xE0, -0x24,0x8C,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0xFF,0x90,0x08, -0xC3,0xE0,0xFD,0x25,0xE0,0x24,0x78,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEE,0xF0, -0xA3,0xEF,0xF0,0x90,0x08,0xC8,0xE0,0xFE,0xA3,0xE0,0xFF,0xED,0x25,0xE0,0x24,0x8C, -0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEE,0xF0,0xA3,0xEF,0xF0,0xED,0x25,0xE0,0x24, -0x78,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0x22,0x90,0x08,0xCA,0xE0,0xFC,0xA3,0xE0, -0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x78,0x04,0x12,0x14,0x7F,0xAD,0x07,0x90,0x08, -0xC3,0xE0,0xFF,0x25,0xE0,0x24,0x8C,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0x22,0xE0, -0xFF,0xA3,0xE0,0x90,0x08,0xC8,0xCF,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC8,0xE0,0xFE, -0xA3,0xE0,0xFF,0xC3,0x74,0xF8,0x9F,0xFF,0x74,0xFF,0x9E,0xFE,0x7C,0xFF,0x7D,0xFE, -0x12,0x12,0x9E,0x7D,0xF8,0x12,0x13,0x05,0x90,0x08,0xD0,0xEE,0xF0,0xA3,0xEF,0xF0, -0xC3,0xEE,0x64,0x80,0x94,0x80,0x22,0xE0,0xFE,0xA3,0xE0,0xFF,0xEE,0x33,0x95,0xE0, -0xFD,0xFC,0xE4,0x7B,0x20,0x7A,0x03,0xF9,0xF8,0x12,0x13,0x51,0x78,0x04,0x12,0x14, -0x92,0x90,0x08,0xCA,0x12,0x14,0xA5,0x7B,0x20,0x7A,0x02,0xE4,0xF9,0xF8,0x90,0x08, -0xCA,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x22,0xFD,0xE0,0xFE, -0x25,0xE0,0x24,0x28,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEC,0xF0,0xA3,0xED,0xF0, -0xEF,0x25,0xE0,0x24,0x14,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xE0,0xFC,0xA3,0xE0, -0x22,0x90,0x08,0xC3,0xE0,0xFF,0x04,0xC4,0x54,0xF0,0xFE,0x74,0x20,0x2F,0xF5,0x82, -0xE4,0x34,0x0C,0xF5,0x83,0x22,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x74,0x20,0x9F,0x90, -0x08,0xC9,0xF0,0x74,0x03,0x9E,0x90,0x08,0xC8,0xF0,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3, -0x74,0x11,0x9F,0xFF,0xE4,0x9E,0xFE,0x7C,0x00,0x7D,0x03,0x12,0x12,0x9E,0x7D,0x07, -0x22,0x7C,0x00,0x7D,0x21,0x12,0x12,0xB0,0x90,0x08,0xCA,0xE0,0x25,0xE0,0x24,0x3C, -0xF5,0x82,0xE4,0x34,0x0E,0x22,0x90,0x08,0xC9,0xE0,0xFF,0x25,0xE0,0x24,0x00,0xF5, -0x82,0xE4,0x34,0x0E,0x22,0x7C,0x00,0x7D,0x21,0x12,0x12,0xB0,0x90,0x08,0xCA,0xE0, -0x25,0xE0,0x24,0x28,0xF5,0x82,0xE4,0x34,0x0E,0x22,0x74,0x03,0xF0,0x90,0x08,0xC5, -0xE0,0x14,0xF0,0x90,0x08,0xCD,0xE0,0x04,0xF0,0x22,0xE0,0xFE,0xA3,0xE0,0x90,0x08, -0xD0,0xFF,0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEF,0x9D,0x22,0xEE,0x25,0xE0,0x24,0x14, -0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xE0,0xFE,0xA3,0xE0,0x22,0x90,0x08,0xCA,0xE0, -0xFD,0x24,0x57,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0x22,0xFD,0xEE,0x25,0xE0,0x24, -0x64,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEC,0xF0,0xA3,0xED,0xF0,0x22,0xD3,0x90, -0x08,0xD1,0xE0,0x94,0xFE,0x90,0x08,0xD0,0xE0,0x64,0x80,0x22,0xE0,0xFE,0xA3,0xE0, -0xFF,0xEE,0x33,0x95,0xE0,0xFD,0xFC,0xE4,0x7B,0xE0,0x7A,0x01,0xF9,0xF8,0x12,0x13, -0x51,0x78,0x04,0x12,0x14,0x92,0x90,0x08,0xCA,0x02,0x14,0xA5,0x12,0x13,0xDC,0xEF, -0x24,0x01,0xFF,0xE4,0x3E,0xFE,0xE4,0x3D,0xFD,0xE4,0x3C,0xFC,0x22,0x24,0xF0,0xFF, -0xE0,0x34,0xFF,0xFE,0x7C,0x00,0x7D,0x02,0x12,0x13,0x05,0xEB,0x2F,0xFF,0xEA,0x3E, -0xFE,0xE0,0xFA,0xA3,0xE0,0xFB,0x24,0xF0,0xFD,0xEA,0x34,0xFF,0xFC,0x02,0x13,0x05, -0xE0,0xFC,0xA3,0xE0,0xC3,0xEC,0x64,0x80,0x94,0x80,0x22,0xF5,0x83,0x74,0xFF,0xF0, -0xEF,0x25,0xE0,0x25,0xE0,0x22,0x74,0x2D,0x2F,0xF5,0x82,0xE4,0x34,0x0C,0xF5,0x83, -0xE4,0xF0,0xEF,0x25,0xE0,0x24,0x26,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0xE4,0xF0, -0xA3,0xF0,0x74,0x3B,0x2F,0xF5,0x82,0xE4,0x34,0x0B,0x22,0x90,0x08,0xD0,0xE0,0xFE, -0xA3,0xE0,0xFF,0x90,0x08,0xC3,0xE0,0xFD,0x22,0x90,0x08,0xC3,0xE0,0x24,0xAE,0xF5, -0x82,0xE4,0x34,0x0B,0xF5,0x83,0x22,0xE4,0x90,0x08,0xD0,0xF0,0xA3,0xF0,0x22,0x90, -0x08,0xCE,0xE0,0xFF,0x90,0x08,0xC4,0xE0,0xFE,0xC3,0x9F,0x22,0x12,0x13,0xDC,0xAC, -0x00,0xAD,0x01,0xAE,0x02,0xAF,0x03,0xE4,0x22,0x90,0x08,0xC3,0xE0,0x75,0xF0,0x14, -0xA4,0x24,0x00,0xF5,0x82,0xE4,0x34,0x0D,0xF5,0x83,0x22,0x90,0x08,0xD9,0xE0,0xFE, -0xA3,0xE0,0xFF,0x7C,0x00,0x7D,0x21,0x12,0x12,0xB0,0xC3,0x74,0x21,0x9F,0xFF,0xE4, -0x9E,0xFE,0x90,0x08,0xC9,0xE0,0x22,0x74,0xB8,0x2E,0xF5,0x82,0xE4,0x34,0x0B,0xF5, -0x83,0x22,0xE0,0x4E,0xFF,0x90,0x0B,0x8E,0xE0,0xFD,0x25,0xE0,0x25,0xE0,0x22,0x90, -0x08,0xC3,0xE0,0xFF,0xC3,0x94,0x05,0x22,0xE0,0x25,0xE0,0x24,0x50,0xF5,0x82,0xE4, -0x34,0x0E,0x22,0xE0,0xFC,0xA3,0xE0,0xFD,0x12,0x12,0x9E,0xAA,0x06,0xAB,0x07,0x22, -0x90,0x08,0xC3,0xE0,0xFE,0x25,0xE0,0x24,0x64,0xF5,0x82,0xE4,0x34,0x0B,0x22,0x24, -0x2D,0xF5,0x82,0xE4,0x34,0x0C,0xF5,0x83,0x22,0xEE,0x8F,0xF0,0x02,0x13,0x3B,0x90, -0x08,0xC3,0xE0,0xFF,0xC3,0x94,0x05,0x22,0xE0,0xA3,0xE0,0x54,0x0F,0x4F,0xFF,0xED, -0x25,0xE0,0x25,0xE0,0x22,0xF5,0x83,0x74,0xFF,0xF0,0x90,0x08,0xC3,0xE0,0x04,0xF0, -0x22,0xF5,0x83,0xE0,0xFA,0xA3,0xE0,0xC3,0x9D,0xEC,0x64,0x80,0xF8,0xEA,0x64,0x80, -0x98,0x22,0xEE,0x25,0xE0,0x24,0x78,0xF5,0x82,0xE4,0x34,0x0B,0x22,0x7B,0x10,0x7A, -0x01,0xF9,0xF8,0xD3,0x02,0x14,0x6E,0x7B,0x20,0x7A,0x02,0xE4,0xF9,0xF8,0x02,0x13, -0xDC,0x90,0x08,0xC3,0xE0,0x04,0xF0,0x22,0x90,0x08,0xD9,0x74,0x02,0xF0,0xA3,0x22, -0x90,0x08,0xCD,0xE0,0xC3,0x94,0x05,0x22,0xD3,0x90,0x08,0xD1,0xE0,0x94,0x03,0x22, -0x74,0x03,0xF0,0xA3,0x74,0x1F,0xF0,0x22,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x74,0xE0, -0x9F,0x90,0x08,0xC9,0xF0,0x74,0x01,0x22,0x74,0x01,0xF0,0xA3,0x74,0xDF,0xF0,0x22, -0xF5,0x83,0xEF,0xF0,0x90,0x08,0xC3,0xE0,0xFC,0x22,0xF0,0x90,0x08,0xC4,0xE0,0x04, -0xF0,0x22,0xEC,0x64,0x80,0xF8,0xEE,0x64,0x80,0x98,0x22,0xF5,0x83,0xE0,0xFA,0xA3, -0xE0,0xC3,0x9D,0xFD,0xEA,0x9C,0xFC,0xE9,0x22,0xE0,0xFC,0xA3,0xE0,0xFD,0xC3,0xEF, -0x9D,0xFF,0xEE,0x9C,0xFE,0xE9,0x22,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x22,0xE0,0xFC, -0xA3,0xE0,0xC3,0x94,0x90,0xEC,0x64,0x80,0x94,0x81,0x22,0x74,0xFF,0xF0,0xA3,0x14, -0xF0,0x22,0xE4,0xF0,0xA3,0x74,0x03,0xF0,0x22,0xE0,0xFE,0xA3,0xE0,0xD3,0x94,0x1F, -0xEE,0x64,0x80,0x94,0x83,0x22,0xE0,0xFC,0xA3,0xE0,0xC3,0x94,0xF0,0xEC,0x64,0x80, -0x94,0x80,0x22,0xE0,0xFE,0xA3,0xE0,0xD3,0x94,0xDF,0xEE,0x64,0x80,0x94,0x81,0x22, -0xE0,0xFC,0xA3,0xE0,0xC3,0x94,0x20,0xEC,0x64,0x80,0x94,0x83,0x22,0xE0,0xFC,0xA3, -0xE0,0xC3,0x94,0xE0,0xEC,0x64,0x80,0x94,0x81,0x22,0xE0,0xFE,0xA3,0xE0,0x78,0x04, -0x22,0xCE,0xA2,0xE7,0x13,0xCE,0x13,0x22,0xF0,0x90,0x08,0xC7,0x74,0x75,0xF0,0xA3, -0x74,0x30,0xF0,0x22,0x90,0x08,0xD9,0x74,0x01,0xF0,0xA3,0x22,0xF5,0x82,0xE4,0x34, -0x0B,0xF5,0x83,0x22,0xF5,0x83,0xEE,0xF0,0xA3,0xEF,0xF0,0x22,0xA3,0xE0,0xC4,0xF8, -0x54,0x0F,0xC8,0x68,0xFF,0x05,0x82,0x22,0xFD,0x12,0x12,0x9E,0xEB,0x2F,0xFF,0xEA, -0x3E,0xFE,0x22,0xD3,0x9F,0xEE,0x64,0x80,0xF8,0xEC,0x64,0x80,0x98,0x22,0x78,0x04, -0x12,0x14,0x7F,0x90,0x08,0xC3,0xE0,0xFD,0x22,0xF5,0x83,0xEF,0xF0,0x90,0x0B,0x8E, -0xE0,0x04,0xF0,0x22,0x7D,0x01,0x7B,0xFF,0x7E,0x00,0x02,0x12,0x78,0x90,0x08,0xC3, -0xE0,0x24,0x20,0x22,0x25,0xE0,0x24,0x14,0xF5,0x82,0xE4,0x34,0x0E,0x22,0x75,0xF0, -0x02,0x02,0x14,0xB1,0x25,0xE0,0x24,0x64,0xF5,0x82,0xE4,0x34,0x0E,0x22,0xF0,0xA3, -0xEF,0xF0,0x90,0x08,0xC3,0xE0,0xFF,0x22,0xE7,0x09,0xF6,0x08,0xDF,0xFA,0x80,0x46, -0xE7,0x09,0xF2,0x08,0xDF,0xFA,0x80,0x3E,0x88,0x82,0x8C,0x83,0xE7,0x09,0xF0,0xA3, -0xDF,0xFA,0x80,0x32,0xE3,0x09,0xF6,0x08,0xDF,0xFA,0x80,0x78,0xE3,0x09,0xF2,0x08, -0xDF,0xFA,0x80,0x70,0x88,0x82,0x8C,0x83,0xE3,0x09,0xF0,0xA3,0xDF,0xFA,0x80,0x64, -0x89,0x82,0x8A,0x83,0xE0,0xA3,0xF6,0x08,0xDF,0xFA,0x80,0x58,0x89,0x82,0x8A,0x83, -0xE0,0xA3,0xF2,0x08,0xDF,0xFA,0x80,0x4C,0x80,0xD2,0x80,0xFA,0x80,0xC6,0x80,0xD4, -0x80,0x69,0x80,0xF2,0x80,0x33,0x80,0x10,0x80,0xA6,0x80,0xEA,0x80,0x9A,0x80,0xA8, -0x80,0xDA,0x80,0xE2,0x80,0xCA,0x80,0x33,0x89,0x82,0x8A,0x83,0xEC,0xFA,0xE4,0x93, -0xA3,0xC8,0xC5,0x82,0xC8,0xCC,0xC5,0x83,0xCC,0xF0,0xA3,0xC8,0xC5,0x82,0xC8,0xCC, -0xC5,0x83,0xCC,0xDF,0xE9,0xDE,0xE7,0x80,0x0D,0x89,0x82,0x8A,0x83,0xE4,0x93,0xA3, -0xF6,0x08,0xDF,0xF9,0xEC,0xFA,0xA9,0xF0,0xED,0xFB,0x22,0x89,0x82,0x8A,0x83,0xEC, -0xFA,0xE0,0xA3,0xC8,0xC5,0x82,0xC8,0xCC,0xC5,0x83,0xCC,0xF0,0xA3,0xC8,0xC5,0x82, -0xC8,0xCC,0xC5,0x83,0xCC,0xDF,0xEA,0xDE,0xE8,0x80,0xDB,0x89,0x82,0x8A,0x83,0xE4, -0x93,0xA3,0xF2,0x08,0xDF,0xF9,0x80,0xCC,0x88,0xF0,0xEF,0x60,0x01,0x0E,0x4E,0x60, -0xC3,0x88,0xF0,0xED,0x24,0x02,0xB4,0x04,0x00,0x50,0xB9,0xF5,0x82,0xEB,0x24,0x02, -0xB4,0x04,0x00,0x50,0xAF,0x23,0x23,0x45,0x82,0x23,0x90,0x11,0xF8,0x73,0xEF,0x8D, -0xF0,0xA4,0xA8,0xF0,0xCF,0x8C,0xF0,0xA4,0x28,0xCE,0x8D,0xF0,0xA4,0x2E,0xFE,0x22, -0xBC,0x00,0x0B,0xBE,0x00,0x29,0xEF,0x8D,0xF0,0x84,0xFF,0xAD,0xF0,0x22,0xE4,0xCC, -0xF8,0x75,0xF0,0x08,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xEC,0x33,0xFC,0xEE,0x9D,0xEC, -0x98,0x40,0x05,0xFC,0xEE,0x9D,0xFE,0x0F,0xD5,0xF0,0xE9,0xE4,0xCE,0xFD,0x22,0xED, -0xF8,0xF5,0xF0,0xEE,0x84,0x20,0xD2,0x1C,0xFE,0xAD,0xF0,0x75,0xF0,0x08,0xEF,0x2F, -0xFF,0xED,0x33,0xFD,0x40,0x07,0x98,0x50,0x06,0xD5,0xF0,0xF2,0x22,0xC3,0x98,0xFD, -0x0F,0xD5,0xF0,0xEA,0x22,0xC2,0xD5,0xEC,0x30,0xE7,0x09,0xB2,0xD5,0xE4,0xC3,0x9D, -0xFD,0xE4,0x9C,0xFC,0xEE,0x30,0xE7,0x15,0xB2,0xD5,0xE4,0xC3,0x9F,0xFF,0xE4,0x9E, -0xFE,0x12,0x12,0xB0,0xC3,0xE4,0x9D,0xFD,0xE4,0x9C,0xFC,0x80,0x03,0x12,0x12,0xB0, -0x30,0xD5,0x07,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0xFE,0x22,0xC5,0xF0,0xF8,0xA3,0xE0, -0x28,0xF0,0xC5,0xF0,0xF8,0xE5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xE0,0x38,0xF0, -0x22,0xE8,0x8F,0xF0,0xA4,0xCC,0x8B,0xF0,0xA4,0x2C,0xFC,0xE9,0x8E,0xF0,0xA4,0x2C, -0xFC,0x8A,0xF0,0xED,0xA4,0x2C,0xFC,0xEA,0x8E,0xF0,0xA4,0xCD,0xA8,0xF0,0x8B,0xF0, -0xA4,0x2D,0xCC,0x38,0x25,0xF0,0xFD,0xE9,0x8F,0xF0,0xA4,0x2C,0xCD,0x35,0xF0,0xFC, -0xEB,0x8E,0xF0,0xA4,0xFE,0xA9,0xF0,0xEB,0x8F,0xF0,0xA4,0xCF,0xC5,0xF0,0x2E,0xCD, -0x39,0xFE,0xE4,0x3C,0xFC,0xEA,0xA4,0x2D,0xCE,0x35,0xF0,0xFD,0xE4,0x3C,0xFC,0x22, -0x75,0xF0,0x08,0x75,0x82,0x00,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xCD,0x33,0xCD,0xCC, -0x33,0xCC,0xC5,0x82,0x33,0xC5,0x82,0x9B,0xED,0x9A,0xEC,0x99,0xE5,0x82,0x98,0x40, -0x0C,0xF5,0x82,0xEE,0x9B,0xFE,0xED,0x9A,0xFD,0xEC,0x99,0xFC,0x0F,0xD5,0xF0,0xD6, -0xE4,0xCE,0xFB,0xE4,0xCD,0xFA,0xE4,0xCC,0xF9,0xA8,0x82,0x22,0xB8,0x00,0xC1,0xB9, -0x00,0x59,0xBA,0x00,0x2D,0xEC,0x8B,0xF0,0x84,0xCF,0xCE,0xCD,0xFC,0xE5,0xF0,0xCB, -0xF9,0x78,0x18,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,0xEC,0x33,0xFC,0xEB, -0x33,0xFB,0x10,0xD7,0x03,0x99,0x40,0x04,0xEB,0x99,0xFB,0x0F,0xD8,0xE5,0xE4,0xF9, -0xFA,0x22,0x78,0x18,0xEF,0x2F,0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,0xEC,0x33,0xFC, -0xC9,0x33,0xC9,0x10,0xD7,0x05,0x9B,0xE9,0x9A,0x40,0x07,0xEC,0x9B,0xFC,0xE9,0x9A, -0xF9,0x0F,0xD8,0xE0,0xE4,0xC9,0xFA,0xE4,0xCC,0xFB,0x22,0x75,0xF0,0x10,0xEF,0x2F, -0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,0xCC,0x33,0xCC,0xC8,0x33,0xC8,0x10,0xD7,0x07, -0x9B,0xEC,0x9A,0xE8,0x99,0x40,0x0A,0xED,0x9B,0xFD,0xEC,0x9A,0xFC,0xE8,0x99,0xF8, -0x0F,0xD5,0xF0,0xDA,0xE4,0xCD,0xFB,0xE4,0xCC,0xFA,0xE4,0xC8,0xF9,0x22,0xEB,0x9F, -0xF5,0xF0,0xEA,0x9E,0x42,0xF0,0xE9,0x9D,0x42,0xF0,0xE8,0x9C,0x45,0xF0,0x22,0xE8, -0x60,0x0F,0xEC,0xC3,0x13,0xFC,0xED,0x13,0xFD,0xEE,0x13,0xFE,0xEF,0x13,0xFF,0xD8, -0xF1,0x22,0xE8,0x60,0x0F,0xEF,0xC3,0x33,0xFF,0xEE,0x33,0xFE,0xED,0x33,0xFD,0xEC, -0x33,0xFC,0xD8,0xF1,0x22,0xEC,0xF0,0xA3,0xED,0xF0,0xA3,0xEE,0xF0,0xA3,0xEF,0xF0, -0x22,0xA4,0x25,0x82,0xF5,0x82,0xE5,0xF0,0x35,0x83,0xF5,0x83,0x22,0xD2,0x15,0xE4, -0x90,0x0B,0x63,0xF0,0x90,0x0B,0x47,0xF0,0x90,0x08,0xC4,0xF0,0x30,0x16,0x03,0x02, -0x16,0x67,0x90,0x08,0xC3,0xF0,0x90,0x09,0x00,0xE0,0x75,0xF0,0x02,0xA4,0xFF,0x90, -0x08,0xC3,0xE0,0x12,0x1F,0xBF,0x40,0x03,0x02,0x16,0x54,0x30,0xD9,0x13,0xE0,0xFF, -0x24,0xE4,0x12,0x1F,0x65,0xF5,0xCB,0x74,0xE5,0x2F,0xF5,0x82,0xE4,0x34,0x07,0x80, -0x14,0x90,0x08,0xC3,0xE0,0xFF,0x24,0x08,0x12,0x1F,0x76,0xF5,0xCB,0x74,0x09,0x2F, -0xF5,0x82,0xE4,0x34,0x07,0xF5,0x83,0xE0,0xF5,0xCC,0xD2,0xDA,0x30,0xDA,0x05,0x75, -0x9E,0x55,0x80,0xF8,0xAF,0xCA,0xAD,0xB9,0xED,0xAD,0xC3,0x12,0x1F,0x86,0xAD,0xCB, -0x12,0x20,0xA6,0x12,0x1F,0x7F,0xAD,0xCB,0x12,0x21,0x2C,0xAF,0xBE,0xAD,0xBA,0xED, -0x2F,0xFF,0xEC,0xAD,0xC4,0x12,0x1F,0x8B,0xAD,0xCB,0x12,0x1F,0xEB,0x12,0x1F,0x7F, -0xAD,0xB9,0x12,0x1F,0x8D,0xAD,0xCA,0x12,0x1F,0x8D,0xAD,0xC3,0x12,0x1F,0x8D,0xAD, -0xBA,0x12,0x1F,0x8D,0xAD,0xBE,0x12,0x1F,0x8D,0x12,0x1F,0x9A,0xAF,0xCB,0x12,0x2D, -0xC3,0x90,0x08,0xCC,0xEE,0xF0,0xA3,0xEF,0xF0,0xE0,0x24,0xF0,0xF0,0x90,0x08,0xCC, -0xE0,0x34,0xFF,0xF0,0xAF,0xCA,0xAD,0xBD,0xED,0xAD,0xBE,0x12,0x1F,0xE3,0x12,0x1F, -0x8D,0xAD,0xCC,0x12,0x20,0xA6,0x12,0x1F,0xDC,0x12,0x1F,0x8D,0xAD,0xCC,0x12,0x21, -0x2C,0xAF,0xC3,0xAD,0xC2,0xED,0x2F,0xFF,0xEC,0x33,0xFE,0xAD,0xC4,0x12,0x1F,0x8D, -0xAD,0xCC,0x12,0x1F,0xEB,0x12,0x1F,0xDC,0x12,0x1F,0x8D,0xAD,0xBD,0x12,0x1F,0x8D, -0xAD,0xCA,0x12,0x1F,0x8D,0xAD,0xBE,0x12,0x1F,0x8D,0xAD,0xC2,0x12,0x1F,0x8D,0xAD, -0xC3,0x12,0x1F,0x8D,0x12,0x1F,0x9A,0xAF,0xCC,0x12,0x2D,0xC3,0x74,0xF0,0x2F,0xFF, -0x74,0xFF,0x3E,0xFE,0xAD,0xCA,0xAB,0xB9,0xEB,0x2D,0xFD,0xE4,0x33,0xFC,0xAB,0xC3, -0x7A,0x00,0x12,0x21,0x36,0xAB,0xBD,0x12,0x21,0x36,0xAB,0xBE,0x12,0x21,0x36,0x90, -0x08,0xC4,0xE0,0xFB,0x25,0xE0,0x24,0x26,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0xEC, -0xF0,0xA3,0xED,0xF0,0x90,0x08,0xCC,0xE0,0xFC,0xA3,0xE0,0xFD,0xEB,0x25,0xE0,0x24, -0x00,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEC,0xF0,0xA3,0xED,0xF0,0xEB,0x25,0xE0, -0x24,0x14,0xF5,0x82,0xE4,0x34,0x0E,0xF5,0x83,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x0B, -0x47,0xE0,0x04,0xF0,0x90,0x08,0xC4,0xE0,0x04,0xF0,0x90,0x08,0xC3,0xE0,0x24,0x02, -0xF0,0x02,0x14,0xD6,0x20,0x15,0x03,0x02,0x17,0xA9,0x90,0x0B,0x63,0xE0,0x70,0x03, -0x02,0x17,0xA9,0x74,0x05,0xF0,0x22,0x90,0x0B,0x47,0x74,0x01,0xF0,0x90,0x0B,0x20, -0xE0,0xF5,0xCB,0x90,0x0B,0x21,0xE0,0xF5,0xCC,0xD2,0xDA,0x30,0xDA,0x05,0x75,0x9E, -0x55,0x80,0xF8,0xAF,0xBD,0xAD,0xB7,0xED,0x2F,0xFF,0xE4,0x33,0xFE,0xAD,0xC2,0x7C, -0x00,0xEF,0x2D,0xFF,0xEC,0x3E,0x12,0x1F,0xFA,0xAF,0xCA,0xAD,0xB9,0xED,0xAD,0xC3, -0x12,0x20,0x6E,0xAF,0xBE,0xAD,0xBA,0x12,0x1F,0x94,0x12,0x20,0xB5,0xAF,0xCB,0x12, -0x2D,0xC3,0x90,0x0E,0x00,0xEE,0xF0,0xA3,0xEF,0xF0,0x20,0x05,0x0C,0x90,0x0E,0x00, -0xE0,0xFF,0xA3,0xE0,0x90,0x0B,0x22,0x80,0x4E,0x90,0x0B,0x22,0xE0,0xFE,0xA3,0xE0, -0xFF,0x12,0x1F,0xCA,0x40,0x1F,0x90,0x0B,0x23,0xE0,0x24,0x32,0xFF,0x90,0x0B,0x22, -0xE0,0x34,0x00,0xFE,0x12,0x1F,0xCA,0x50,0x33,0x90,0x0B,0x22,0xE0,0xFF,0xA3,0xE0, -0x90,0x0E,0x00,0x80,0x22,0x90,0x0E,0x01,0xE0,0x24,0x32,0xFF,0x90,0x0E,0x00,0xE0, -0x34,0x00,0xFE,0xC3,0x90,0x0B,0x23,0xE0,0x90,0x0B,0x22,0x12,0x1F,0xD2,0x50,0x0C, -0xE0,0xFF,0xA3,0xE0,0x90,0x0E,0x00,0xCF,0xF0,0xA3,0xEF,0xF0,0x12,0x1F,0xDC,0xEF, -0x2D,0xFF,0xEC,0x3E,0x12,0x1F,0xFA,0xAF,0xCA,0xAD,0xBD,0xED,0xAD,0xBE,0x12,0x20, -0x6E,0xAF,0xC3,0xAD,0xC2,0x12,0x1F,0x94,0x12,0x20,0xB5,0xAF,0xCC,0x12,0x2D,0xC3, -0x90,0x0E,0x14,0xEE,0xF0,0xA3,0xEF,0xF0,0x20,0x05,0x12,0x90,0x0E,0x14,0xE0,0xFF, -0xA3,0xE0,0x90,0x0B,0x24,0xCF,0xF0,0xA3,0xEF,0xF0,0xD2,0x05,0x22,0x90,0x0B,0x24, -0xE0,0xFE,0xA3,0xE0,0xFF,0x12,0x20,0x49,0x40,0x18,0x90,0x0B,0x25,0xE0,0x24,0xC0, -0xFF,0x90,0x0B,0x24,0xE0,0x34,0x00,0xFE,0x12,0x20,0x49,0x50,0x2C,0x90,0x0B,0x24, -0x80,0x1B,0x90,0x0E,0x15,0xE0,0x24,0xC0,0xFF,0x90,0x0E,0x14,0xE0,0x34,0x00,0xFE, -0xC3,0x90,0x0B,0x25,0xE0,0x90,0x0B,0x24,0x12,0x20,0x51,0x50,0x0C,0xE0,0xFF,0xA3, -0xE0,0x90,0x0E,0x14,0xCF,0xF0,0xA3,0xEF,0xF0,0x22,0x90,0x08,0xC4,0xE4,0xF0,0xA3, -0x74,0x20,0xF0,0xE4,0x90,0x08,0xC8,0xF0,0xA3,0xF0,0x90,0x08,0xC6,0xF0,0xA3,0x74, -0x20,0xF0,0xE4,0x90,0x08,0xCA,0xF0,0xA3,0xF0,0x90,0x08,0xC3,0xF0,0x90,0x08,0xC3, -0xE0,0xFF,0xC3,0x94,0x05,0x40,0x03,0x02,0x1A,0x4B,0x12,0x0D,0xBB,0xE0,0x70,0x03, -0x02,0x1A,0x42,0x90,0x08,0xC3,0xE0,0xFB,0x12,0x0E,0x20,0x12,0x0E,0x55,0xFF,0x90, -0x08,0xC4,0x12,0x0E,0x42,0x12,0x10,0x82,0x50,0x77,0x90,0x08,0xC3,0xE0,0xFF,0x12, -0x0E,0x20,0x12,0x0D,0xAA,0x24,0xF0,0xFD,0xEC,0x34,0xFF,0xFC,0xEF,0x12,0x0C,0xED, -0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x08,0xC8,0x12,0x10,0xA7,0x90,0x08,0xC5,0xE0,0x9F, -0xFF,0x90,0x08,0xC4,0xE0,0x9E,0xFE,0xEB,0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xFD, -0x12,0x12,0x9E,0x90,0x08,0xC5,0xE0,0x24,0xF0,0xFD,0x90,0x08,0xC4,0xE0,0x12,0x0E, -0xDA,0x90,0x08,0xC9,0xE0,0x2F,0xFF,0x90,0x08,0xC8,0xE0,0x3E,0xFE,0xEB,0x12,0x0C, -0xED,0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC3,0xE0,0xFF,0x12,0x0C,0xED,0x12,0x0E, -0xE0,0x40,0x03,0x02,0x19,0x12,0xEF,0x12,0x0C,0xED,0xE4,0xF0,0xA3,0xF0,0x02,0x19, -0x12,0x90,0x08,0xC4,0x12,0x10,0xA7,0x74,0xA0,0x9F,0xFF,0x74,0x01,0x9E,0xFE,0x90, -0x08,0xC3,0xE0,0xF9,0x12,0x0E,0x20,0x12,0x0D,0xAA,0x12,0x11,0x53,0x40,0x6E,0x90, -0x08,0xC4,0xE0,0xFE,0xA3,0xE0,0xFF,0x74,0xA0,0x9F,0xFD,0x74,0x01,0x9E,0xFC,0xE9, -0x12,0x0E,0x20,0x12,0x10,0x8B,0x12,0x0C,0xED,0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x08, -0xC8,0x12,0x10,0x99,0x12,0x0C,0xED,0x12,0x0F,0xB3,0x90,0x08,0xC5,0xE0,0x90,0x08, -0xC4,0x12,0x0E,0xBD,0x90,0x08,0xC3,0xE0,0xFD,0x12,0x0C,0xED,0xEE,0xF0,0xA3,0xEF, -0xF0,0xC3,0x74,0xA0,0x9B,0xFF,0x74,0x01,0x9A,0xFE,0x12,0x0C,0xEC,0x12,0x0F,0xD9, -0x12,0x0C,0xEC,0xE0,0xFE,0xA3,0xE0,0xD3,0x94,0xA0,0xEE,0x64,0x80,0x94,0x81,0x40, -0x21,0x12,0x0C,0xEC,0x74,0x01,0xF0,0xA3,0x74,0xA0,0xF0,0x80,0x15,0x90,0x08,0xC3, -0xE0,0xFF,0x12,0x0E,0x20,0x12,0x0D,0xAA,0xFD,0xEF,0x12,0x0C,0xED,0xEC,0xF0,0xA3, -0xED,0xF0,0x90,0x08,0xC3,0xE0,0xFB,0x12,0x0D,0xFC,0x12,0x0E,0x55,0xFF,0x90,0x08, -0xC6,0x12,0x0E,0x42,0x12,0x10,0x82,0x50,0x75,0x90,0x08,0xC3,0xE0,0xFF,0x12,0x0D, -0xFC,0x12,0x0D,0xAA,0x24,0xF0,0xFD,0xEC,0x34,0xFF,0xFC,0xEF,0x12,0x0D,0x13,0xEC, -0xF0,0xA3,0xED,0xF0,0x90,0x08,0xCA,0x12,0x10,0xA7,0x90,0x08,0xC7,0xE0,0x9F,0xFF, -0x90,0x08,0xC6,0xE0,0x9E,0xFE,0xEB,0x12,0x0D,0x13,0xE0,0xFC,0xA3,0xE0,0xFD,0x12, -0x12,0x9E,0x90,0x08,0xC7,0xE0,0x24,0xF0,0xFD,0x90,0x08,0xC6,0xE0,0x12,0x0E,0xDA, -0x90,0x08,0xCB,0xE0,0x2F,0xFF,0x90,0x08,0xCA,0xE0,0x3E,0xFE,0xEB,0x12,0x0D,0x13, -0xEE,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC3,0x12,0x0D,0x11,0x12,0x0E,0xE0,0x40,0x03, -0x02,0x1A,0x42,0xEF,0x12,0x0D,0x13,0xE4,0xF0,0xA3,0xF0,0x02,0x1A,0x42,0x90,0x08, -0xC6,0x12,0x10,0xA7,0x74,0x20,0x9F,0xFF,0x74,0x02,0x9E,0xFE,0x90,0x08,0xC3,0xE0, -0xF9,0x12,0x0D,0xFC,0x12,0x0D,0xAA,0x12,0x11,0x53,0x40,0x71,0x90,0x08,0xC6,0xE0, -0xFE,0xA3,0xE0,0xFF,0x74,0x20,0x9F,0xFD,0x74,0x02,0x9E,0xFC,0xE9,0x12,0x0D,0xFC, -0x12,0x10,0x8B,0x12,0x0D,0x13,0xEC,0xF0,0xA3,0xED,0xF0,0x90,0x08,0xCA,0x12,0x10, -0x99,0x12,0x0D,0x13,0x12,0x0F,0xB3,0x90,0x08,0xC7,0xE0,0x90,0x08,0xC6,0x12,0x0E, -0xBD,0x90,0x08,0xC3,0xE0,0xFD,0x12,0x0D,0x13,0xEE,0xF0,0xA3,0xEF,0xF0,0xC3,0x74, -0x20,0x9B,0xFF,0x74,0x02,0x9A,0xFE,0xED,0x12,0x0D,0x13,0x12,0x0F,0xD9,0xED,0x12, -0x0D,0x13,0xE0,0xFE,0xA3,0xE0,0xD3,0x94,0x20,0xEE,0x64,0x80,0x94,0x82,0x40,0x22, -0xED,0x12,0x0D,0x13,0x74,0x02,0xF0,0xA3,0x74,0x20,0xF0,0x80,0x15,0x90,0x08,0xC3, -0xE0,0xFF,0x12,0x0D,0xFC,0x12,0x0D,0xAA,0xFD,0xEF,0x12,0x0D,0x13,0xEC,0xF0,0xA3, -0xED,0xF0,0x90,0x08,0xC3,0xE0,0x04,0xF0,0x02,0x17,0xCD,0x22,0x12,0x2F,0x14,0xE4, -0xF5,0x80,0x12,0x27,0x4F,0x90,0x0F,0xF0,0x12,0x26,0xE7,0xD2,0x80,0x12,0x27,0x87, -0xC2,0x85,0xC2,0x86,0xC2,0x87,0x12,0x27,0x4F,0x20,0x80,0x07,0x90,0x0F,0xF0,0xE0, -0x44,0x01,0xF0,0xC2,0x80,0xD2,0x81,0xC2,0x82,0x12,0x27,0x44,0x20,0x81,0x07,0x90, -0x0F,0xF0,0xE0,0x44,0x02,0xF0,0xC2,0x80,0xC2,0x81,0xD2,0x82,0x12,0x27,0x44,0x20, -0x82,0x07,0x90,0x0F,0xF0,0xE0,0x44,0x04,0xF0,0xC2,0x80,0xC2,0x81,0xC2,0x82,0xD2, -0x83,0x12,0x27,0x46,0x20,0x83,0x07,0x90,0x0F,0xF0,0xE0,0x44,0x08,0xF0,0xC2,0x80, -0xC2,0x81,0xC2,0x82,0xC2,0x83,0xD2,0x84,0x12,0x27,0x48,0x20,0x84,0x07,0x90,0x0F, -0xF0,0xE0,0x44,0x10,0xF0,0x12,0x27,0x85,0xD2,0x85,0x12,0x27,0x4A,0x20,0x85,0x07, -0x90,0x0F,0xF0,0xE0,0x44,0x20,0xF0,0x12,0x27,0x85,0xC2,0x85,0xD2,0x86,0x12,0x27, -0x4C,0x20,0x86,0x07,0x90,0x0F,0xF0,0xE0,0x44,0x40,0xF0,0x12,0x27,0x85,0xC2,0x85, -0xC2,0x86,0xD2,0x87,0x12,0x27,0x4E,0x20,0x87,0x07,0x90,0x0F,0xF0,0xE0,0x44,0x80, -0xF0,0xD2,0x90,0xC2,0x91,0x12,0x27,0x1C,0x20,0x90,0x07,0x90,0x0F,0xF1,0xE0,0x44, -0x01,0xF0,0xC2,0x90,0xD2,0x91,0x12,0x27,0x1C,0x20,0x91,0x07,0x90,0x0F,0xF1,0xE0, -0x44,0x02,0xF0,0xC2,0x90,0xC2,0x91,0xD2,0x92,0x12,0x27,0x1E,0x20,0x92,0x07,0x90, -0x0F,0xF1,0xE0,0x44,0x04,0xF0,0xC2,0x90,0xC2,0x91,0xC2,0x92,0xD2,0x93,0x12,0x27, -0x20,0x20,0x93,0x07,0x90,0x0F,0xF1,0xE0,0x44,0x08,0xF0,0x12,0x27,0x90,0xD2,0x94, -0x12,0x27,0x22,0x20,0x94,0x07,0x90,0x0F,0xF1,0xE0,0x44,0x10,0xF0,0x12,0x27,0x90, -0xC2,0x94,0xD2,0x95,0x12,0x27,0x24,0x20,0x95,0x07,0x90,0x0F,0xF1,0xE0,0x44,0x20, -0xF0,0x12,0x27,0x90,0xC2,0x94,0xC2,0x95,0xD2,0x96,0x12,0x27,0x26,0x20,0x96,0x07, -0x90,0x0F,0xF1,0xE0,0x44,0x40,0xF0,0x12,0x27,0x90,0xC2,0x94,0xC2,0x95,0xC2,0x96, -0xD2,0x97,0x12,0x27,0x28,0x20,0x97,0x07,0x90,0x0F,0xF1,0xE0,0x44,0x80,0xF0,0xD2, -0xA0,0xC2,0xA1,0x12,0x27,0x30,0x20,0xA0,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x01,0xF0, -0xC2,0xA0,0xD2,0xA1,0x12,0x27,0x30,0x20,0xA1,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x02, -0xF0,0xC2,0xA0,0xC2,0xA1,0xD2,0xA2,0x12,0x27,0x32,0x20,0xA2,0x07,0x90,0x0F,0xF2, -0xE0,0x44,0x04,0xF0,0xC2,0xA0,0xC2,0xA1,0xC2,0xA2,0xD2,0xA3,0x12,0x27,0x34,0x20, -0xA3,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x08,0xF0,0x12,0x27,0x99,0xD2,0xA4,0x12,0x27, -0x36,0x20,0xA4,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x10,0xF0,0x12,0x27,0x99,0xC2,0xA4, -0xD2,0xA5,0x12,0x27,0x38,0x20,0xA5,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x20,0xF0,0x12, -0x27,0x99,0xC2,0xA4,0xC2,0xA5,0xD2,0xA6,0x12,0x27,0x3A,0x20,0xA6,0x07,0x90,0x0F, -0xF2,0xE0,0x44,0x40,0xF0,0x12,0x27,0x99,0xC2,0xA4,0xC2,0xA5,0xC2,0xA6,0xD2,0xA7, -0x12,0x27,0x3C,0x20,0xA7,0x07,0x90,0x0F,0xF2,0xE0,0x44,0x80,0xF0,0xD2,0xB0,0xC2, -0xB1,0x12,0x27,0x56,0x20,0xB0,0x07,0x90,0x0F,0xF3,0xE0,0x44,0x01,0xF0,0xC2,0xB0, -0xD2,0xB1,0x12,0x27,0x56,0x20,0xB1,0x07,0x90,0x0F,0xF3,0xE0,0x44,0x02,0xF0,0xC2, -0xB0,0xC2,0xB1,0xD2,0xB2,0x12,0x27,0x58,0x20,0xB2,0x07,0x90,0x0F,0xF3,0xE0,0x44, -0x04,0xF0,0x12,0x27,0xD1,0xD2,0xB3,0x12,0x27,0x5A,0x20,0xB3,0x07,0x90,0x0F,0xF3, -0xE0,0x44,0x08,0xF0,0x12,0x27,0xD1,0xC2,0xB3,0xD2,0xB4,0x12,0x27,0x5C,0x20,0xB4, -0x07,0x90,0x0F,0xF3,0xE0,0x44,0x10,0xF0,0x12,0x27,0xD1,0xC2,0xB3,0xC2,0xB4,0xD2, -0xB5,0x12,0x27,0x5E,0x20,0xB5,0x07,0x90,0x0F,0xF3,0xE0,0x44,0x20,0xF0,0x90,0x0F, -0xFD,0x74,0xBB,0xF0,0x22,0x7D,0x0D,0x90,0x09,0x01,0xE4,0xF0,0xA3,0xDD,0xFC,0x7D, -0x0D,0x90,0x09,0x0E,0xE4,0xF0,0xA3,0xDD,0xFC,0x7D,0x64,0x90,0x0B,0xC4,0xE4,0xF0, -0xA3,0xDD,0xFC,0xE4,0xFC,0x90,0x09,0x1E,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xFD, -0x12,0x1F,0xB5,0x40,0x03,0x02,0x1E,0x38,0x20,0xD9,0x03,0x02,0x1D,0x8F,0x12,0x1F, -0x62,0x12,0x20,0x86,0x12,0x1F,0x5D,0x12,0x20,0x02,0x12,0x20,0x8E,0x20,0xDA,0xFD, -0x12,0x1F,0x19,0x12,0x20,0x96,0xE5,0xCA,0xD3,0x9C,0x40,0x02,0xAC,0xCA,0x12,0x20, -0x18,0x40,0x08,0x90,0x09,0x20,0xEA,0xF0,0xA3,0xEB,0xF0,0x12,0x1F,0x62,0x12,0x20, -0x86,0xF5,0x83,0xE0,0xD3,0x94,0x01,0x50,0x09,0xE5,0xCA,0x94,0x73,0x50,0x03,0x02, -0x1E,0x33,0x90,0x09,0x00,0xE0,0xD3,0x94,0x01,0x50,0x03,0x02,0x1E,0x33,0x12,0x1F, -0x62,0x12,0x20,0x9E,0x12,0x1F,0x5D,0xD3,0x94,0x00,0x40,0x06,0x12,0x1F,0x62,0x12, -0x20,0xD8,0x90,0xF0,0x37,0xE0,0x14,0xFF,0x12,0x1F,0x62,0xC3,0x9F,0x50,0x06,0x12, -0x1F,0x62,0x12,0x20,0xE5,0x12,0x1F,0x62,0xD3,0x94,0x01,0x40,0x06,0x12,0x1F,0x62, -0x12,0x20,0xF2,0x90,0xF0,0x37,0xE0,0x24,0xFE,0xFF,0x12,0x1F,0x62,0xC3,0x9F,0x40, -0x03,0x02,0x1E,0x33,0x74,0xE4,0x2D,0xF5,0x82,0xE4,0x34,0x07,0x02,0x1E,0x24,0x12, -0x1F,0x73,0x12,0x20,0x86,0x12,0x1F,0x6E,0x12,0x20,0x0D,0x12,0x20,0x8E,0x20,0xDA, -0xFD,0x12,0x1F,0x19,0x12,0x20,0x96,0xE5,0xCA,0xD3,0x9C,0x40,0x02,0xAC,0xCA,0x12, -0x20,0x18,0x40,0x08,0x90,0x09,0x20,0xEA,0xF0,0xA3,0xEB,0xF0,0x12,0x1F,0x73,0x12, -0x20,0x86,0xF5,0x83,0xE0,0xD3,0x94,0x01,0x50,0x06,0xE5,0xCA,0x94,0x73,0x40,0x63, -0x90,0x09,0x00,0xE0,0xD3,0x94,0x01,0x40,0x5A,0x12,0x1F,0x73,0x12,0x20,0x9E,0x12, -0x1F,0x6E,0xD3,0x94,0x00,0x40,0x06,0x12,0x1F,0x73,0x12,0x20,0xD8,0x90,0xF0,0x37, -0xE0,0x14,0xFF,0x12,0x1F,0x73,0xC3,0x9F,0x50,0x06,0x12,0x1F,0x73,0x12,0x20,0xE5, -0x12,0x1F,0x73,0xD3,0x94,0x01,0x40,0x06,0x12,0x1F,0x73,0x12,0x20,0xF2,0x90,0xF0, -0x37,0xE0,0x24,0xFE,0xFF,0x12,0x1F,0x73,0xC3,0x9F,0x50,0x17,0x74,0x08,0x2D,0xF5, -0x82,0xE4,0x34,0x07,0xF5,0x83,0xE0,0x24,0x10,0xF5,0x82,0xE4,0x34,0x09,0xF5,0x83, -0xE0,0x04,0xF0,0x0D,0x0D,0x02,0x1C,0xE0,0x90,0x09,0x1B,0xE0,0xD3,0x9C,0x40,0x06, -0xEC,0x24,0xA1,0xF0,0x80,0x06,0x90,0x09,0x1B,0x74,0x1E,0xF0,0xEC,0xC3,0x94,0x1E, -0x40,0x08,0x90,0x09,0x1B,0xE0,0x94,0x1E,0x50,0x06,0x90,0x09,0x1B,0x74,0x1E,0xF0, -0x90,0x09,0x20,0xE0,0xFE,0xA3,0xE0,0xFF,0x7C,0x00,0x7D,0x03,0x12,0x12,0xB0,0x90, -0x09,0x1E,0xEE,0xF0,0xA3,0xEF,0xF0,0xE4,0xFC,0xFD,0x12,0x1F,0xB5,0x40,0x03,0x02, -0x1F,0x0F,0x30,0xD9,0x3B,0x12,0x1F,0x62,0x12,0x20,0x02,0x12,0x20,0x8E,0x20,0xDA, -0xFD,0x12,0x1F,0x19,0x12,0x20,0x96,0x12,0x1F,0x62,0x12,0x20,0x9E,0xF5,0x83,0xE0, -0xD3,0x94,0x00,0x40,0x0F,0x12,0x20,0x5B,0x40,0x60,0x90,0x09,0x1B,0xE0,0xFF,0xE5, -0xCA,0x9F,0x40,0x56,0x12,0x1F,0x62,0x12,0x20,0xC3,0x12,0x20,0x04,0x02,0x1E,0xF8, -0x12,0x1F,0x73,0x12,0x20,0x0D,0x12,0x20,0x8E,0x20,0xDA,0xFD,0x12,0x1F,0x19,0x12, -0x20,0x96,0x12,0x1F,0x73,0x12,0x20,0x9E,0xF5,0x83,0xE0,0xD3,0x94,0x00,0x40,0x0F, -0x12,0x20,0x5B,0x40,0x25,0x90,0x09,0x1B,0xE0,0xFF,0xE5,0xCA,0x9F,0x40,0x1B,0x12, -0x1F,0x73,0x12,0x20,0xC3,0x12,0x20,0x0F,0xF5,0x83,0xE0,0xFF,0x74,0xC5,0x2C,0xF5, -0x82,0xE4,0x34,0x0B,0xF5,0x83,0xEF,0xF0,0x0C,0x0C,0x0D,0x0D,0x02,0x1E,0x7A,0xAF, -0x04,0xEF,0xC3,0x13,0x90,0x09,0x00,0xF0,0x22,0xAF,0xB9,0xAB,0xB7,0xEB,0x2F,0xFF, -0xE4,0x33,0xFE,0xAB,0xBA,0x7A,0x00,0xEF,0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xCA,0xEF, -0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xBD,0xEF,0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xBE,0xEF, -0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xC2,0xEF,0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xC3,0xEF, -0x2B,0xFF,0xEA,0x3E,0xFE,0xAB,0xC4,0xEF,0x2B,0xFF,0xEA,0x3E,0x22,0xF5,0x83,0xE0, -0x04,0xF0,0x74,0xE4,0x2D,0xF5,0x82,0xE4,0x34,0x07,0xF5,0x83,0xE0,0x22,0xF5,0x83, -0xE0,0x04,0xF0,0x74,0x08,0x2D,0xF5,0x82,0xE4,0x34,0x07,0xF5,0x83,0xE0,0x22,0xAF, -0xBD,0xAD,0xB7,0xED,0xAD,0xC2,0x2F,0xFF,0xE4,0x7C,0x00,0x33,0xFE,0xEF,0x2D,0xFF, -0xEC,0x3E,0xFE,0x22,0xED,0x2F,0xFF,0xEC,0x33,0xFE,0xAD,0xC4,0xEF,0x2D,0xFF,0xEC, -0x3E,0xA3,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC6,0xE0,0xFC,0xA3,0xE0,0xFD,0xA3,0xE0, -0xFA,0xA3,0xE0,0xFB,0x22,0x90,0x09,0x00,0xE0,0x75,0xF0,0x02,0xA4,0xFF,0xED,0xC3, -0x9F,0xE5,0xF0,0x64,0x80,0xF8,0x74,0x80,0x98,0x22,0xC3,0x90,0x0E,0x01,0xE0,0x90, -0x0E,0x00,0x9F,0xEE,0x64,0x80,0xF8,0xE0,0x64,0x80,0x98,0x22,0xAF,0xB9,0xAD,0xB7, -0xED,0xAD,0xBA,0x2F,0xFF,0xE4,0x33,0xFE,0x7C,0x00,0x22,0xED,0x24,0x02,0xFD,0xEC, -0x33,0xFC,0x12,0x12,0x9E,0xEF,0x2B,0xFF,0xEE,0x3A,0x90,0x08,0xC6,0xF0,0xA3,0xEF, -0xF0,0x22,0xF5,0xCB,0x74,0xE5,0x2D,0xF5,0x82,0xE4,0x34,0x07,0x22,0xF5,0xCB,0x74, -0x09,0x2D,0xF5,0x82,0xE4,0x34,0x07,0x22,0x90,0x09,0x20,0xE0,0xFE,0xA3,0xE0,0x90, -0x09,0x1C,0xFF,0xE0,0xFA,0xA3,0xE0,0xFB,0xD3,0x9F,0xEA,0x9E,0x22,0xF5,0x82,0x74, -0x03,0x3C,0xF5,0x83,0xE0,0xFE,0x74,0x85,0x2D,0xF5,0x82,0x74,0x03,0x3C,0xF5,0x83, -0xE0,0x7A,0x00,0x24,0x00,0xFF,0xEA,0x3E,0x22,0xC3,0x90,0x0E,0x15,0xE0,0x90,0x0E, -0x14,0x9F,0xEE,0x64,0x80,0xF8,0xE0,0x64,0x80,0x98,0x22,0x90,0x09,0x1E,0xE0,0xFE, -0xA3,0xE0,0xFF,0x90,0x09,0x1D,0xE0,0x9F,0x90,0x09,0x1C,0xE0,0x9E,0x22,0x2F,0xFF, -0xEC,0x33,0xFE,0xEF,0x2D,0xFF,0xEC,0x3E,0xA3,0xF0,0xA3,0xEF,0xF0,0x22,0xF0,0x75, -0xF0,0x02,0xE5,0x0C,0xA4,0x22,0x24,0x01,0xF5,0x82,0xE4,0x34,0x09,0x22,0xF5,0x83, -0xE0,0xF5,0xCC,0xD2,0xDA,0x22,0x90,0x09,0x1C,0xF0,0xA3,0xEF,0xF0,0x22,0x24,0x0E, -0xF5,0x82,0xE4,0x34,0x09,0x22,0xED,0x24,0x01,0xFD,0xEC,0x33,0xFC,0x12,0x12,0x9E, -0xAA,0x06,0xAB,0x07,0x22,0xA3,0xE0,0xFF,0xA3,0xE0,0x90,0x08,0xD3,0xCF,0xF0,0xA3, -0xEF,0xF0,0x22,0xFF,0x74,0xC4,0x2C,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0xEF,0xF0, -0x22,0xF5,0x83,0xE0,0xD3,0x94,0x01,0x22,0x24,0x0D,0xF5,0x82,0xE4,0x34,0x09,0xF5, -0x83,0xE0,0x04,0xF0,0x22,0x24,0x0F,0xF5,0x82,0xE4,0x34,0x09,0xF5,0x83,0xE0,0x04, -0xF0,0x22,0x24,0x0C,0xF5,0x82,0xE4,0x34,0x09,0xF5,0x83,0xE0,0x04,0xF0,0x22,0x90, -0xF0,0x34,0xF0,0x90,0xF0,0x36,0xE0,0x44,0x01,0xF0,0x22,0x74,0x24,0x2C,0xF5,0x82, -0xE4,0x34,0x09,0xF5,0x83,0x22,0x90,0xF0,0x37,0xE0,0xFE,0xEF,0x8E,0xF0,0xA4,0x2D, -0x22,0x74,0xC3,0x2C,0xF5,0x82,0xE4,0x34,0x08,0xF5,0x83,0x22,0x12,0x12,0x9E,0xEF, -0x2B,0xFB,0xEE,0x3A,0xFA,0x22,0xED,0x2B,0xFD,0xEA,0x3C,0xFC,0x22,0x9E,0xFE,0xD3, -0xEF,0x94,0x28,0xEE,0x94,0x00,0x22,0x75,0x81,0x6C,0xD2,0xAF,0x75,0x96,0x03,0x12, -0x00,0x40,0x12,0x3F,0xF0,0x12,0x2D,0x87,0x75,0x9E,0x55,0x90,0x0F,0x2B,0xE0,0x64, -0x01,0x60,0x23,0x74,0x01,0xF0,0xE4,0x90,0xF0,0x63,0xF0,0x90,0xF0,0x60,0x74,0xD0, -0xF0,0x7F,0xFA,0x7E,0x00,0x12,0x2F,0x02,0x75,0x9E,0x55,0x75,0xC8,0xE0,0x75,0x87, -0x02,0x75,0x97,0x55,0x00,0x00,0x30,0x0B,0x0C,0x7F,0x01,0x7E,0x00,0x12,0x2F,0x02, -0xC2,0x0B,0x02,0x22,0x88,0x20,0x00,0x03,0x02,0x22,0x88,0xC2,0x00,0x12,0x2C,0xEF, -0x30,0x06,0x06,0x12,0x2E,0x4E,0x02,0x22,0x88,0x30,0x10,0x06,0x12,0x2B,0xED,0x02, -0x22,0x88,0x90,0x0B,0x8F,0xE0,0xFF,0x12,0x27,0xE2,0x12,0x2D,0x40,0x12,0x2C,0x73, -0x30,0x13,0x0C,0xC2,0x13,0xC2,0x16,0x12,0x14,0xBD,0x12,0x2E,0xCF,0x80,0x0B,0x12, -0x27,0xA2,0x90,0x0B,0x63,0xF0,0x90,0x0B,0x47,0xF0,0x12,0x00,0x4F,0x12,0x17,0xAA, -0x12,0x07,0x6B,0x30,0x19,0x12,0x90,0x0B,0x8E,0xE0,0xD3,0x94,0x00,0x40,0x4A,0xB2, -0x14,0xC2,0x19,0x30,0x14,0x2C,0x80,0x22,0xD2,0x1A,0xE4,0xFF,0x30,0xC0,0x07,0x0F, -0xEF,0xB4,0x19,0xF8,0x80,0x02,0xC2,0x1A,0x90,0x0B,0x8E,0xE0,0xFF,0xD3,0x94,0x00, -0x40,0x18,0x30,0x1A,0x15,0xB2,0x14,0x30,0x14,0x08,0x75,0x8A,0x0F,0xE4,0xF5,0x8B, -0x80,0x17,0x75,0x8A,0x0F,0x75,0x8B,0x3D,0x80,0x0F,0xEF,0xD3,0x94,0x00,0x40,0x09, -0x30,0x0F,0x04,0xD2,0x0E,0x80,0x02,0xC2,0x0E,0x90,0x0B,0x8E,0xE0,0xD3,0x94,0x00, -0x40,0x02,0x80,0x39,0x30,0x0F,0x41,0x90,0x0B,0x55,0xE4,0xF0,0xA3,0x74,0x03,0xF0, -0x7F,0x19,0x7E,0x00,0x12,0x2F,0x02,0x90,0x0B,0x56,0xE0,0x24,0xFF,0xF0,0x90,0x0B, -0x55,0xE0,0x34,0xFF,0xF0,0x75,0x9E,0x55,0x30,0x0F,0x0F,0xD3,0xA3,0xE0,0x94,0x00, -0x90,0x0B,0x55,0xE0,0x64,0x80,0x94,0x80,0x50,0xD6,0x30,0x0F,0x0B,0xC2,0xC4,0x7F, -0x32,0x7E,0x00,0x12,0x2F,0x02,0xD2,0xC4,0x30,0x9F,0x03,0x02,0x21,0x58,0x30,0x08, -0x69,0xC2,0x08,0xC2,0x06,0x90,0x0F,0xFF,0xE0,0xB4,0xBF,0x07,0xD2,0x06,0xC2,0x10, -0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0xB4,0xAF,0x0D,0x90,0x0F,0xFE,0xE0,0xF5,0x0C, -0xD2,0x10,0xC2,0x06,0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0xB4,0xC5,0x09,0x12,0x27, -0xBE,0x12,0x1A,0x4C,0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0xB4,0xCA,0x09,0x12,0x27, -0xBE,0x12,0x2D,0xF8,0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0xB4,0xCC,0x0C,0xE4,0xF0, -0x90,0xF0,0x1F,0xF0,0x12,0x24,0x71,0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0x64,0xC3, -0x60,0x03,0x02,0x21,0x58,0xD2,0x07,0x02,0x21,0x58,0x90,0x0F,0xFF,0xE0,0xB4,0xE1, -0x06,0x12,0x2B,0x5C,0x02,0x21,0x58,0x20,0x09,0x03,0x02,0x21,0x58,0xC2,0x09,0x02, -0x21,0x58,0xC2,0x1D,0xC2,0x1E,0x7D,0x0D,0x90,0x0B,0x90,0xE4,0xF0,0xA3,0xDD,0xFC, -0x7D,0x11,0x90,0x0B,0x9D,0xE4,0xF0,0xA3,0xDD,0xFC,0xE4,0x90,0x0B,0x20,0xF0,0x90, -0x0B,0x21,0xF0,0x90,0x09,0x22,0xF0,0xFC,0xA3,0xF0,0xFD,0x12,0x1F,0xB5,0x50,0x3E, -0x30,0xD9,0x08,0x12,0x1F,0x62,0x12,0x20,0x02,0x80,0x06,0x12,0x1F,0x73,0x12,0x20, -0x0D,0xF5,0x83,0xE0,0xF5,0xCC,0xD2,0xDA,0x30,0xDA,0x05,0x75,0x9E,0x55,0x80,0xF8, -0x12,0x21,0x0B,0xE5,0xCA,0xF0,0x12,0x21,0x0B,0xE0,0xFF,0x90,0x09,0x23,0xE0,0xFE, -0xEF,0xD3,0x9E,0x40,0x04,0xEF,0xF0,0xA9,0x04,0x0C,0x0D,0x0D,0x80,0xBD,0xE4,0xFD, -0xE4,0xFF,0x12,0x21,0x16,0x24,0xA3,0xF5,0x82,0xE4,0x34,0x02,0xF5,0x83,0xE0,0xD3, -0x94,0x6E,0x40,0x02,0x80,0x12,0x12,0x21,0x16,0x24,0xC2,0xF5,0x82,0xE4,0x34,0x01, -0xF5,0x83,0xE0,0xD3,0x94,0x6E,0x40,0x20,0x90,0x09,0x22,0xE0,0x04,0xF0,0x74,0x90, -0x2D,0xF5,0x82,0xE4,0x34,0x0B,0xF5,0x83,0xE0,0x04,0xF0,0x74,0x9D,0x2F,0xF5,0x82, -0xE4,0x34,0x0B,0xF5,0x83,0xE0,0x04,0xF0,0x0F,0xEF,0x64,0x11,0x70,0xB4,0x0D,0xED, -0x64,0x0D,0x70,0xAC,0x75,0x9E,0x55,0xE4,0xFD,0xED,0xD3,0x94,0x0B,0x50,0x1F,0x74, -0x90,0x2D,0xF5,0x82,0xE4,0x34,0x0B,0x12,0x20,0xD1,0x40,0x12,0x74,0x91,0x2D,0xF5, -0x82,0xE4,0x34,0x0B,0x12,0x20,0xD1,0x40,0x05,0x20,0x1D,0x02,0xD2,0x1D,0x0D,0xED, -0xB4,0x0D,0xD6,0x75,0x9E,0x55,0xE4,0xFD,0xED,0xD3,0x94,0x0F,0x50,0x1F,0x74,0x9D, -0x2D,0xF5,0x82,0xE4,0x34,0x0B,0x12,0x20,0xD1,0x40,0x12,0x74,0x9E,0x2D,0xF5,0x82, -0xE4,0x34,0x0B,0x12,0x20,0xD1,0x40,0x05,0x20,0x1E,0x02,0xD2,0x1E,0x0D,0xED,0xB4, -0x11,0xD6,0x20,0x1D,0x03,0x30,0x1E,0x37,0xE9,0x25,0xE0,0x30,0xD9,0x15,0x24,0xE4, -0x12,0x1F,0x65,0x90,0x0B,0x20,0xF0,0xE9,0x25,0xE0,0x24,0xE5,0xF5,0x82,0xE4,0x34, -0x07,0x80,0x13,0x24,0x08,0x12,0x1F,0x76,0x90,0x0B,0x20,0xF0,0xE9,0x25,0xE0,0x24, -0x09,0xF5,0x82,0xE4,0x34,0x07,0xF5,0x83,0xE0,0x90,0x0B,0x21,0xF0,0xD3,0x22,0xC3, -0x22,0xC2,0x04,0xC2,0x1B,0xC2,0x1C,0x90,0x08,0xC4,0x74,0x11,0xF0,0xE4,0x90,0x08, -0xC3,0xF0,0x90,0x08,0xC3,0xE0,0xFF,0xC3,0x94,0x0D,0x40,0x03,0x02,0x25,0x80,0xE4, -0xF9,0xEF,0x75,0xF0,0x02,0xA4,0xFD,0xAC,0xF0,0xE4,0x90,0x08,0xC5,0xF0,0xA3,0xF0, -0x12,0x27,0x66,0x90,0x08,0xC5,0xF0,0xA3,0xEF,0xF0,0xE0,0x24,0xD8,0xF0,0x90,0x08, -0xC5,0xE0,0x34,0xFF,0xF0,0x09,0x90,0x08,0xC4,0xE0,0xFF,0xE9,0xC3,0x9F,0x40,0x03, -0x02,0x25,0x77,0xA3,0xE0,0xFE,0xA3,0xE0,0xFF,0x94,0x84,0xEE,0x94,0x03,0x40,0x06, -0xD2,0x1B,0xD2,0x04,0x80,0x0D,0xC3,0xEF,0x94,0xC8,0xEE,0x94,0x00,0x50,0x04,0xD2, -0x1C,0xD2,0x04,0x90,0x08,0xC3,0xE0,0x75,0xF0,0x02,0xA4,0xFB,0xAA,0xF0,0xE9,0x75, -0xF0,0x1A,0xA4,0x2B,0xFD,0xE5,0xF0,0x3A,0xFC,0x12,0x27,0x66,0x90,0x08,0xC7,0xF0, -0xA3,0xEF,0xF0,0x90,0x08,0xC3,0xE0,0xB4,0x02,0x12,0xE9,0xB4,0x03,0x0E,0x90,0x08, -0xC8,0xE0,0x24,0xC9,0xF0,0x90,0x08,0xC7,0xE0,0x34,0xFF,0xF0,0x90,0x08,0xC7,0xE0, -0xFE,0xA3,0xE0,0xFF,0x90,0x08,0xC5,0xE0,0xFA,0xA3,0xE0,0xFB,0xD3,0x9F,0xEA,0x9E, -0x40,0x0B,0xEB,0x9F,0xFF,0xEA,0x12,0x27,0xD8,0x40,0x29,0x80,0x18,0x90,0x08,0xC5, -0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x90,0x08,0xC8,0xE0,0x9F,0xFF,0x90,0x08,0xC7,0xE0, -0x12,0x27,0xD8,0x40,0x0F,0xD2,0x04,0x90,0x08,0xC3,0xE0,0x04,0x90,0x0F,0xE1,0xF0, -0xE9,0x04,0xA3,0xF0,0x90,0x08,0xC7,0xE0,0xFF,0xA3,0xE0,0x90,0x08,0xC5,0xCF,0xF0, -0xA3,0xEF,0xF0,0x09,0x02,0x24,0xB6,0x90,0x08,0xC3,0xE0,0x04,0xF0,0x02,0x24,0x82, -0x75,0x9E,0x55,0x30,0x04,0x18,0x30,0x1B,0x07,0x90,0x0F,0xE0,0x74,0xEF,0xF0,0x22, -0x90,0x0F,0xE0,0x30,0x1C,0x04,0x74,0xE0,0xF0,0x22,0x74,0xEE,0xF0,0x22,0x90,0x0F, -0xE0,0x74,0xAA,0xF0,0x22,0x90,0xF0,0x48,0x74,0x41,0xF0,0xA3,0x74,0x04,0xF0,0xA3, -0x74,0x06,0xF0,0xA3,0xF0,0xA3,0x74,0x01,0xF0,0xE4,0x12,0x26,0xE8,0xE0,0x24,0x01, -0xFF,0xE4,0x33,0x90,0xF0,0x4A,0x12,0x27,0xB4,0xFF,0xED,0x3E,0xA3,0x12,0x27,0xB4, -0xFF,0xED,0x3E,0xFE,0x90,0xF0,0x4F,0x12,0x27,0xB5,0xCD,0x3E,0xFC,0x90,0xF0,0x48, -0xE0,0x24,0x01,0xFF,0xE4,0x33,0xFE,0x12,0x12,0x9E,0x90,0xF0,0x4F,0xE0,0xFD,0x90, -0xF0,0x49,0xE0,0x2D,0xFD,0xE4,0x33,0xCD,0x2F,0xFB,0xED,0x3E,0xFA,0x90,0xF0,0x4D, -0xE0,0xFF,0x7E,0x00,0x7C,0x00,0x7D,0x0A,0x12,0x12,0x9E,0xEF,0x2B,0xFF,0xEE,0x3A, -0xCF,0x24,0x20,0xCF,0x34,0x00,0xAD,0x07,0xFC,0x13,0x13,0x54,0x3F,0xFB,0x90,0xF0, -0x66,0xF0,0x7E,0x00,0xEF,0x78,0x02,0xCE,0xC3,0x13,0xCE,0x13,0xD8,0xF9,0x14,0xFF, -0x90,0xF0,0x67,0xF0,0xA3,0xEB,0xF0,0xA3,0xEF,0xF0,0x90,0xF0,0x60,0x74,0xD1,0xF0, -0xE4,0xF5,0x80,0x12,0x27,0x4F,0x90,0xF0,0x01,0x74,0xA0,0xF0,0xA3,0x74,0x82,0x12, -0x27,0x00,0xA3,0x74,0x62,0x12,0x27,0x00,0xA3,0x74,0x42,0x12,0x27,0x00,0xA3,0x74, -0x22,0x12,0x27,0x00,0xA3,0x74,0xF0,0xF0,0x12,0x26,0xEF,0x12,0x26,0xEF,0x90,0xF0, -0x20,0x74,0xCE,0xF0,0xA3,0x74,0x02,0xF0,0xA3,0x74,0x0C,0xF0,0x90,0xF0,0x30,0x74, -0x19,0xF0,0xA3,0xF0,0xA3,0x74,0x1E,0xF0,0x90,0xF0,0x34,0x74,0x20,0xF0,0x74,0x0A, -0x12,0x27,0xC9,0x74,0x0D,0xF0,0xA3,0x74,0x11,0xF0,0x90,0xF0,0x3A,0x74,0xFF,0xF0, -0xE4,0xA3,0xF0,0xA3,0xF0,0xA3,0x74,0x02,0xF0,0x74,0x14,0x12,0x27,0xC9,0x74,0x20, -0xF0,0xA3,0x74,0x03,0x12,0x26,0xE5,0xA3,0x74,0x01,0xF0,0xE4,0xA3,0xF0,0x90,0xF0, -0x54,0x74,0x18,0xF0,0xA3,0x74,0x7F,0xF0,0xE4,0x90,0xF0,0x53,0xF0,0xD2,0xAD,0x90, -0xF0,0x1F,0xF0,0x04,0xF0,0x22,0xE4,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0, -0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x22,0xA3, -0x14,0xF0,0xA3,0x14,0xF0,0xA3,0x14,0xF0,0xA3,0x14,0xF0,0xA3,0x14,0xF0,0xA3,0x14, -0xF0,0xA3,0x14,0xF0,0xA3,0x14,0xF0,0x22,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3, -0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0xA3,0xF0,0x22,0xC2,0x92,0xC2,0x93, -0xC2,0x94,0xC2,0x95,0xC2,0x96,0xC2,0x97,0xE4,0xF5,0x80,0xF5,0xA0,0xF5,0xB0,0x22, -0xC2,0xA2,0xC2,0xA3,0xC2,0xA4,0xC2,0xA5,0xC2,0xA6,0xC2,0xA7,0xE4,0xF5,0x80,0xF5, -0x90,0xF5,0xB0,0x22,0xC2,0x83,0xC2,0x84,0xC2,0x85,0xC2,0x86,0xC2,0x87,0xE4,0xF5, -0x90,0xF5,0xA0,0xF5,0xB0,0x22,0xC2,0xB2,0xC2,0xB3,0xC2,0xB4,0xC2,0xB5,0xE4,0xF5, -0x80,0xF5,0x90,0xF5,0xA0,0x22,0x74,0x84,0x2D,0xF5,0x82,0x74,0x03,0x3C,0xF5,0x83, -0xE0,0xFE,0x74,0x85,0x2D,0xF5,0x82,0x74,0x03,0x3C,0xF5,0x83,0xE0,0x7A,0x00,0x24, -0x00,0xFF,0xEA,0x3E,0x22,0xC2,0x80,0xC2,0x81,0xC2,0x82,0xC2,0x83,0xC2,0x84,0x22, -0xC2,0x90,0xC2,0x91,0xC2,0x92,0xC2,0x93,0x22,0xC2,0xA0,0xC2,0xA1,0xC2,0xA2,0xC2, -0xA3,0x22,0xC2,0x16,0xC2,0x05,0xE4,0x90,0x0B,0x22,0xF0,0xA3,0xF0,0x90,0x0B,0x24, -0xF0,0xA3,0xF0,0x22,0xFE,0xE0,0x24,0x01,0xFD,0xE4,0x33,0xCD,0x2F,0x22,0xE4,0xF0, -0x90,0xF0,0x1F,0xF0,0x90,0x0F,0xFD,0xF0,0x22,0xA3,0xF0,0xA3,0x74,0x01,0xF0,0xA3, -0x22,0xC2,0xB0,0xC2,0xB1,0xC2,0xB2,0x22,0x9E,0xFE,0xD3,0xEF,0x94,0x28,0xEE,0x94, -0x00,0x22,0xAB,0x07,0xC2,0x1B,0xEB,0x25,0xE0,0xFE,0xE4,0x33,0x90,0x08,0xC5,0xF0, -0xA3,0xCE,0xF0,0xE4,0xFA,0xEA,0xFF,0x7E,0x00,0x7C,0x00,0x7D,0x22,0x12,0x12,0x9E, -0xAC,0x06,0xAD,0x07,0xEB,0x25,0xE0,0xFF,0xE4,0x33,0xFE,0xED,0x2F,0xFF,0xEC,0x3E, -0x90,0x08,0xC5,0xF0,0xA3,0xEF,0xF0,0x90,0x08,0xC5,0xE0,0xFC,0xA3,0xE0,0xFD,0x24, -0x85,0xF5,0x82,0x74,0x03,0x3C,0xF5,0x83,0xE0,0xFE,0x74,0x84,0x2D,0xF5,0x82,0x74, -0x03,0x3C,0xF5,0x83,0xE0,0xFD,0xED,0xFF,0x90,0x08,0xC3,0xEE,0xF0,0xA3,0xEF,0xF0, -0xA3,0xA3,0xE0,0xFD,0x24,0x01,0xF5,0x82,0x74,0x00,0x3C,0xF5,0x83,0xE0,0xFE,0x74, -0x00,0x2D,0xF5,0x82,0x74,0x00,0x3C,0xF5,0x83,0xE0,0xFD,0xED,0xFF,0x90,0x08,0xC4, -0xE0,0x24,0x50,0xFD,0x90,0x08,0xC3,0xE0,0x34,0x00,0xFC,0xD3,0xEF,0x9D,0xEE,0x9C, -0x40,0x0E,0x90,0x0B,0x46,0xE0,0x04,0xF0,0x70,0x06,0x90,0x0B,0x45,0xE0,0x04,0xF0, -0xEF,0x24,0x50,0xFF,0xE4,0x3E,0xFE,0xD3,0x90,0x08,0xC4,0xE0,0x9F,0x90,0x08,0xC3, -0xE0,0x9E,0x40,0x0E,0x90,0x0B,0x8D,0xE0,0x04,0xF0,0x70,0x06,0x90,0x0B,0x8C,0xE0, -0x04,0xF0,0x0A,0xEA,0x64,0x11,0x60,0x03,0x02,0x27,0xF5,0x90,0x0B,0x8F,0xE0,0x04, -0xF0,0xE0,0x64,0x11,0x70,0x2F,0xF0,0x90,0x0B,0x8C,0xE0,0xFE,0xA3,0xE0,0xFF,0xD3, -0x90,0x0B,0x46,0xE0,0x9F,0x90,0x0B,0x45,0xE0,0x9E,0x40,0x02,0xD2,0x1B,0x30,0x1B, -0x14,0xC2,0x1B,0xE4,0x90,0x0B,0x45,0xF0,0xA3,0xF0,0x90,0x0B,0x8C,0xF0,0xA3,0xF0, -0x74,0x1E,0x12,0x20,0xFF,0x22,0xEF,0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xD3,0x94, -0x84,0xEC,0x64,0x80,0x94,0x83,0x50,0x03,0x02,0x29,0xC4,0xEF,0x12,0x0C,0xED,0xE0, -0xFC,0xA3,0xE0,0xC3,0x94,0xFA,0xEC,0x64,0x80,0x94,0x83,0x40,0x03,0x02,0x29,0xC4, -0xEF,0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xD3,0x94,0xD4,0xEC,0x64,0x80,0x94,0x83, -0x40,0x0B,0xEF,0x12,0x0C,0xED,0xE4,0x75,0xF0,0x0A,0x02,0x29,0xC1,0xEF,0x12,0x0C, -0xED,0xE0,0xFC,0xA3,0xE0,0xD3,0x94,0xC0,0xEC,0x64,0x80,0x94,0x83,0x40,0x0B,0xEF, -0x12,0x0C,0xED,0xE4,0x75,0xF0,0x08,0x02,0x29,0xC1,0xEF,0x12,0x0C,0xED,0xE0,0xFC, -0xA3,0xE0,0xD3,0x94,0xAC,0xEC,0x64,0x80,0x94,0x83,0x40,0x0B,0xEF,0x12,0x0C,0xED, -0xE4,0x75,0xF0,0x06,0x02,0x29,0xC1,0xEF,0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xD3, -0x94,0xA2,0xEC,0x64,0x80,0x94,0x83,0x40,0x0A,0xEF,0x12,0x0C,0xED,0xE4,0x75,0xF0, -0x04,0x80,0x3E,0xEF,0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xD3,0x94,0x98,0xEC,0x64, -0x80,0x94,0x83,0x40,0x0A,0xEF,0x12,0x0C,0xED,0xE4,0x75,0xF0,0x02,0x80,0x22,0xEF, -0x12,0x0C,0xED,0xE0,0xFC,0xA3,0xE0,0xD3,0x94,0x8E,0xEC,0x64,0x80,0x94,0x83,0xEF, -0x40,0x09,0x12,0x0C,0xED,0xE4,0x75,0xF0,0x01,0x80,0x06,0x12,0x0C,0xED,0xE4,0xF5, -0xF0,0x12,0x13,0x3B,0x22,0xC2,0x04,0xE4,0x90,0x08,0xF9,0xF0,0x90,0x08,0xF9,0xE0, -0xFF,0xC3,0x94,0x0D,0x40,0x03,0x02,0x2A,0x8E,0xE4,0xF9,0xEF,0x75,0xF0,0x02,0xA4, -0xFD,0xAC,0xF0,0x24,0x84,0x12,0x20,0x2D,0x90,0x08,0xFA,0xF0,0xA3,0xEF,0xF0,0xE0, -0x24,0xD8,0xF0,0x90,0x08,0xFA,0xE0,0x34,0xFF,0xF0,0x09,0x90,0x08,0xF9,0xE0,0x75, -0xF0,0x02,0xA4,0xFB,0xAA,0xF0,0xE9,0x75,0xF0,0x1A,0xA4,0x2B,0xFD,0xE5,0xF0,0x3A, -0xFC,0x74,0x84,0x2D,0x12,0x20,0x2D,0x90,0x08,0xFC,0xF0,0xA3,0xEF,0xF0,0x90,0x08, -0xF9,0xE0,0xB4,0x02,0x12,0xE9,0xB4,0x03,0x0E,0x90,0x08,0xFD,0xE0,0x24,0xC9,0xF0, -0x90,0x08,0xFC,0xE0,0x34,0xFF,0xF0,0x90,0x08,0xFC,0xE0,0xFE,0xA3,0xE0,0x90,0x08, -0xFA,0x12,0x20,0x22,0x40,0x0D,0xEB,0x9F,0xFF,0xEA,0x12,0x21,0x3D,0x40,0x1E,0xD2, -0x04,0x80,0x1A,0x90,0x08,0xFA,0xE0,0xFE,0xA3,0xE0,0xFF,0xC3,0x90,0x08,0xFD,0xE0, -0x9F,0xFF,0x90,0x08,0xFC,0xE0,0x12,0x21,0x3D,0x40,0x02,0xD2,0x04,0x90,0x08,0xFC, -0xE0,0xFF,0xA3,0xE0,0x90,0x08,0xFA,0xCF,0xF0,0xA3,0xEF,0xF0,0x09,0xE9,0x64,0x11, -0x60,0x03,0x02,0x29,0xFB,0x90,0x08,0xF9,0xE0,0x04,0xF0,0x02,0x29,0xCC,0x75,0x9E, -0x55,0x22,0xC2,0x00,0xC2,0x0B,0xC2,0x13,0xC2,0x18,0xC2,0x08,0xC2,0x09,0xC2,0x06, -0xC2,0x10,0xD2,0x01,0xC2,0x03,0xE4,0x90,0x0B,0x8E,0xF0,0x90,0x09,0x00,0xF0,0x90, -0x0C,0x20,0x12,0x27,0x08,0x90,0x0B,0x57,0x74,0x05,0x12,0x27,0x08,0xE4,0x90,0x0B, -0x4A,0x12,0x27,0x08,0xC2,0x0A,0x90,0x0B,0xC2,0xF0,0xA3,0xF0,0x90,0x0F,0xFC,0x74, -0x20,0xF0,0x12,0x27,0xA2,0xF5,0x08,0xF5,0x09,0x90,0x0B,0xF6,0xF0,0xA3,0xF0,0x90, -0x0B,0x3A,0x74,0xFF,0xF0,0x90,0x0F,0x2A,0x74,0x05,0x12,0x27,0xCA,0x74,0x8A,0xF0, -0x90,0x0F,0x2E,0x74,0x02,0xF0,0xE4,0x90,0xF0,0x61,0xF0,0x75,0x8A,0x0F,0xF5,0x8B, -0x90,0x0B,0x63,0xF0,0xC2,0x0F,0x90,0x0F,0xE6,0x74,0x32,0xF0,0xA3,0x74,0x1E,0xF0, -0xE4,0xA3,0xF0,0xA3,0xF0,0xC2,0x14,0xD2,0x19,0xC2,0x0E,0xC2,0x07,0x90,0x0B,0x45, -0xF0,0xA3,0xF0,0x90,0x0B,0x8C,0xF0,0xA3,0xF0,0x90,0x0B,0x8F,0xF0,0xFF,0x74,0x2D, -0x2F,0xF5,0x82,0xE4,0x34,0x0C,0xF5,0x83,0xE4,0xF0,0xEF,0x25,0xE0,0x24,0x26,0xF5, -0x82,0xE4,0x34,0x0B,0xF5,0x83,0xE4,0xF0,0xA3,0xF0,0x74,0x3B,0x2F,0xF5,0x82,0xE4, -0x34,0x0B,0xF5,0x83,0xE4,0xF0,0x0F,0xEF,0xB4,0x0A,0xD3,0x22,0xE4,0x90,0x08,0xC6, -0xF0,0xA3,0xF0,0x90,0x08,0xC3,0xF0,0xA3,0xF0,0xFC,0x75,0x9E,0x55,0xEC,0x75,0xF0, -0x80,0xA4,0xFF,0x90,0x08,0xC3,0xE5,0xF0,0xF0,0xA3,0xEF,0xF0,0xE4,0xFB,0x90,0x08, -0xC3,0xE0,0xA3,0xA3,0xF0,0x90,0x08,0xC3,0xA3,0xE0,0xF9,0xE4,0xFD,0xFA,0x90,0x08, -0xC3,0xE0,0xFE,0xA3,0xE0,0xFF,0x12,0x2F,0x40,0xEF,0x2D,0xFD,0x90,0x08,0xC4,0xE0, -0x04,0xF0,0x70,0x06,0x90,0x08,0xC3,0xE0,0x04,0xF0,0x0A,0xEA,0xB4,0x08,0xDF,0x90, -0x08,0xC5,0xE0,0x2D,0x29,0x24,0x08,0xF4,0x04,0xFD,0xFF,0x90,0x08,0xC7,0xE0,0x2F, -0xF0,0x90,0x08,0xC6,0xE0,0x34,0x00,0xF0,0x0B,0xEB,0xB4,0x10,0xB1,0x0C,0xEC,0xB4, -0x80,0x98,0x90,0x08,0xC6,0xE0,0xFA,0xA3,0xE0,0xFB,0xEA,0x90,0x0A,0x0D,0xF0,0xEB, -0xA3,0xF0,0x90,0x0A,0x0B,0x74,0xAA,0xF0,0x75,0x9E,0x55,0x80,0xFB,0x20,0x01,0x03, -0x02,0x2C,0x72,0x90,0x0A,0x00,0x74,0xF5,0x12,0x20,0x7E,0x24,0x00,0xF5,0x82,0xE5, -0xF0,0x34,0x00,0xF5,0x83,0xE0,0x90,0x0A,0x01,0x12,0x20,0x7E,0x24,0x01,0xF5,0x82, -0xE5,0xF0,0x34,0x00,0xF5,0x83,0xE0,0x90,0x0A,0x02,0x12,0x20,0x7E,0x24,0x84,0xF5, -0x82,0xE5,0xF0,0x34,0x03,0xF5,0x83,0xE0,0x90,0x0A,0x03,0x12,0x20,0x7E,0x24,0x85, -0xF5,0x82,0xE5,0xF0,0x34,0x03,0xF5,0x83,0xE0,0x90,0x0A,0x04,0xF0,0xD2,0xD8,0x30, -0xD9,0x0B,0x74,0xA3,0x25,0x0C,0xF5,0x82,0xE4,0x34,0x02,0x80,0x09,0x74,0xC2,0x25, -0x0C,0xF5,0x82,0xE4,0x34,0x01,0xF5,0x83,0xE0,0x90,0x0A,0x05,0xF0,0xC2,0x01,0xC2, -0xC4,0x7F,0x64,0x7E,0x00,0x12,0x2F,0x02,0xD2,0xC4,0x90,0xF0,0x1F,0x74,0x01,0xF0, -0xD2,0x03,0x22,0xE4,0xFD,0xFC,0xF9,0x90,0x0B,0x48,0xF0,0x12,0x1F,0xB5,0x50,0x3E, -0x30,0xD9,0x08,0x12,0x1F,0x62,0x12,0x20,0x02,0x80,0x06,0x12,0x1F,0x73,0x12,0x20, -0x0D,0xF5,0x83,0xE0,0xF5,0xCC,0xD2,0xDA,0x30,0xDA,0x05,0x75,0x9E,0x55,0x80,0xF8, -0x12,0x21,0x21,0xE5,0xCA,0xF0,0x12,0x21,0x21,0xE0,0xFF,0x90,0x0B,0x48,0xE0,0xFE, -0xEF,0xD3,0x9E,0x40,0x04,0xEF,0xF0,0xA9,0x04,0x0C,0x0D,0x0D,0x80,0xBD,0x90,0x0B, -0x48,0xE0,0xFF,0xC3,0x94,0x96,0x40,0x0D,0xEC,0xD3,0x94,0x01,0x40,0x07,0x90,0xF0, -0x32,0x74,0x2D,0xF0,0x22,0xEF,0xC3,0x94,0x6E,0x40,0x0D,0xEC,0xD3,0x94,0x01,0x40, -0x07,0x90,0xF0,0x32,0x74,0x23,0xF0,0x22,0x90,0xF0,0x32,0x74,0x1E,0xF0,0x22,0x20, -0xFA,0x10,0x90,0xF0,0x36,0xE0,0x20,0xE0,0x09,0xE0,0x30,0xE2,0x05,0x75,0x9E,0x55, -0x80,0xED,0x90,0xF0,0x36,0x74,0x46,0xF0,0x30,0xF9,0x08,0x74,0x05,0x12,0x20,0xFF, -0xC2,0x18,0x22,0x30,0xF8,0x03,0xD2,0x13,0x22,0x90,0x0B,0x49,0x74,0x64,0xF0,0x90, -0xF0,0x51,0xE0,0xD3,0x94,0x00,0x40,0x07,0x90,0xF0,0x36,0xE0,0x44,0x10,0xF0,0x90, -0xF0,0x50,0xE0,0xD3,0x94,0x00,0x40,0x07,0x90,0xF0,0x36,0xE0,0x44,0x08,0xF0,0x22, -0x90,0xF0,0x33,0xE0,0x90,0x09,0x00,0xF0,0xE0,0xD3,0x94,0x05,0x40,0x03,0x74,0x05, -0xF0,0x20,0xF8,0x23,0xE5,0x09,0x45,0x08,0x70,0x1D,0xC3,0x90,0x0B,0xF7,0xE0,0x95, -0x0B,0x90,0x0B,0xF6,0xE0,0x95,0x0A,0x50,0x15,0xA3,0xE0,0x04,0xF0,0x70,0x0F,0x90, -0x0B,0xF6,0xE0,0x04,0xF0,0x80,0x07,0xE4,0x90,0x0B,0xF6,0xF0,0xA3,0xF0,0xD2,0xD8, -0x90,0xF0,0x1F,0x74,0x01,0xF0,0x22,0xE5,0xC9,0x30,0xE3,0x02,0x80,0x22,0xE5,0xC9, -0x30,0xE0,0x1D,0xE4,0x90,0xF0,0x61,0xF0,0xE5,0xC9,0x30,0xE4,0x0B,0x20,0xC4,0x03, -0x75,0x9E,0x55,0x12,0x25,0xA5,0x80,0x17,0x90,0xF0,0x60,0x74,0xD1,0xF0,0x80,0x0F, -0x12,0x2A,0x92,0x12,0x2F,0x37,0x12,0x25,0xA5,0x12,0x2F,0x2E,0x12,0x2E,0xCF,0xE4, -0xF5,0xC9,0x22,0x90,0x08,0xCE,0xEF,0xF0,0xE4,0xF5,0xAE,0x75,0xAF,0x20,0xED,0xF5, -0xAB,0xEC,0xFF,0x8F,0xAA,0xEB,0xF5,0xAD,0xEA,0xFF,0x8F,0xAC,0x75,0xA9,0x01,0xE5, -0xA9,0xB4,0x01,0x05,0x75,0x9E,0x55,0x80,0xF6,0xAF,0xA6,0xEF,0xFE,0xAD,0xA7,0x7C, -0x00,0xE4,0x2D,0xFF,0xEC,0x3E,0xFE,0x22,0x12,0x2F,0x14,0x75,0x80,0xFF,0x75,0x90, -0xFF,0x75,0xA0,0xFF,0x75,0xB0,0xFF,0x90,0x0F,0xF0,0x12,0x26,0xD6,0x90,0x0F,0xF0, -0xE5,0x80,0xF0,0xA3,0xE5,0x90,0xF0,0xA3,0xE5,0xA0,0xF0,0xA3,0xE5,0xB0,0xF0,0x90, -0x0F,0xFD,0x74,0xBB,0xF0,0x22,0xE5,0xC9,0x54,0x02,0x60,0x06,0x78,0xFF,0xE4,0xF6, -0xD8,0xFD,0xE5,0xC9,0x54,0x02,0x60,0x11,0x90,0x00,0x00,0x7F,0x00,0x7E,0x10,0xE4, -0xF0,0xA3,0x75,0x9E,0x55,0xDF,0xF9,0xDE,0xF7,0x02,0x21,0x47,0x00,0x00,0x90,0x0F, -0xFD,0x74,0xBB,0xF0,0x90,0x0A,0x01,0xE0,0x64,0xAA,0x60,0x05,0x75,0x9E,0x55,0x80, -0xF3,0xE4,0x90,0x0A,0x01,0xF0,0x90,0x0F,0xFD,0xF0,0xD2,0xD8,0x90,0xF0,0x1F,0x04, -0xF0,0xD2,0x03,0x22,0x00,0x00,0x00,0x50,0x00,0xA0,0x00,0xF0,0x01,0x40,0x01,0x90, -0x01,0xE0,0x02,0x30,0x02,0x80,0x02,0xD0,0x03,0x20,0x03,0x70,0x03,0xC0,0x04,0x10, -0x04,0x60,0x04,0x88,0x01,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x50, -0x00,0x5A,0x00,0x64,0x00,0x64,0x00,0x64,0x00,0x64,0x00,0x64,0x00,0x64,0x00,0x64, -0x00,0x64,0x30,0x98,0x04,0xD2,0x08,0xC2,0x98,0x30,0x99,0x12,0xD2,0x09,0xC2,0x99, -0xD2,0x01,0x30,0x0E,0x05,0xB2,0x14,0xC2,0x0E,0x32,0xD2,0x19,0xC2,0x0F,0x32,0x90, -0x0F,0x2C,0xE0,0x54,0x0F,0x25,0xE0,0x24,0x74,0xF5,0x82,0xE4,0x34,0x2E,0xF5,0x83, -0xE4,0x93,0xF5,0x0A,0x74,0x01,0x93,0xF5,0x0B,0x22,0xC0,0xE0,0xC0,0x83,0xC0,0x82, -0xB2,0xC3,0xD2,0x00,0x90,0xF0,0x1F,0xE4,0xF0,0xC2,0xD8,0xD0,0x82,0xD0,0x83,0xD0, -0xE0,0x32,0xEF,0x1F,0x70,0x01,0x1E,0x75,0x9E,0x55,0xD3,0xEF,0x94,0x00,0xEE,0x94, -0x00,0x50,0xEF,0x22,0x90,0xF0,0x01,0x12,0x26,0xD6,0xA3,0x12,0x26,0xD7,0x12,0x26, -0xE2,0x22,0xEE,0x30,0xE7,0x07,0xC3,0xE4,0x9F,0xFF,0xE4,0x9E,0xFE,0x22,0x75,0x91, -0x01,0x75,0x89,0x01,0xD2,0xAC,0x22,0x75,0x86,0x08,0x75,0x84,0x9C,0xC2,0xA9,0x22, -0x8F,0x82,0x8E,0x83,0xE4,0x93,0xFF,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x90,0x0F,0x2A,0x74,0x05,0xF0,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; diff --git a/drivers/input/ts/chips/ft5306.c b/drivers/input/ts/chips/ft5306.c deleted file mode 100755 index bdf2952d2f28..000000000000 --- a/drivers/input/ts/chips/ft5306.c +++ /dev/null @@ -1,270 +0,0 @@ -/* drivers/input/ts/chips/ts_ft5306.c - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif -#include - - -#if 0 -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - - -#define FT5306_ID_REG 0x00 -#define FT5306_DEVID 0x00 -#define FT5306_DATA_REG 0x00 - - -/****************operate according to ts chip:start************/ - -static int ts_active(struct ts_private_data *ts, int enable) -{ - int result = 0; - - if(enable) - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - msleep(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(100); - } - else - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - } - - - return result; -} - -static int ts_init(struct ts_private_data *ts) -{ - int irq_pin = irq_to_gpio(ts->pdata->irq); - int result = 0; - - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - mdelay(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(100); - - //init some register - //to do - - return result; -} - - -static int ts_report_value(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - struct ts_event *event = &ts->event; - unsigned char buf[32] = {0}; - int result = 0 , i = 0, off = 0, id = 0; - - result = ts_bulk_read(ts, (unsigned short)ts->ops->read_reg, ts->ops->read_len, (unsigned short *)buf); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - //for(i=0; iops->read_len; i++) - //DBG("buf[%d]=0x%x\n",i,buf[i]); - - event->touch_point = buf[2] & 0x07;// 0000 1111 - - for(i=0; iops->max_point; i++) - { - event->point[i].status = 0; - event->point[i].x = 0; - event->point[i].y = 0; - } - - if(event->touch_point == 0) - { - for(i=0; iops->max_point; i++) - { - if(event->point[i].last_status != 0) - { - event->point[i].last_status = 0; - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - DBG("%s:%s press up,id=%d\n",__func__,ts->ops->name, event->point[i].id); - } - } - - input_sync(ts->input_dev); - memset(event, 0x00, sizeof(struct ts_event)); - - return 0; - } - - for(i = 0; itouch_point; i++) - { - off = i*6+3; - id = (buf[off+2] & 0xf0) >> 4; - event->point[id].id = id; - event->point[id].status = (buf[off+0] & 0xc0) >> 6; - event->point[id].x = ((buf[off+0] & 0x0f)<<8) | buf[off+1]; - event->point[id].y = ((buf[off+2] & 0x0f)<<8) | buf[off+3]; - - if(ts->ops->xy_swap) - { - swap(event->point[id].x, event->point[id].y); - } - - if(ts->ops->x_revert) - { - event->point[id].x = ts->ops->range[0] - event->point[id].x; - } - - if(ts->ops->y_revert) - { - event->point[id].y = ts->ops->range[1] - event->point[id].y; - } - - } - - for(i=0; iops->max_point; i++) - { - if(event->point[i].status != 0) - { - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 1); - input_report_abs(ts->input_dev, ABS_MT_POSITION_X, event->point[i].x); - input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, event->point[i].y); - input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 1); - DBG("%s:%s press down,id=%d,x=%d,y=%d\n",__func__,ts->ops->name, event->point[id].id, event->point[id].x,event->point[id].y); - } - else if ((event->point[i].status == 0) && (event->point[i].last_status != 0)) - { - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - DBG("%s:%s press up1,id=%d\n",__func__,ts->ops->name, event->point[i].id); - } - - event->point[i].last_status = event->point[i].status; - } - input_sync(ts->input_dev); - - return 0; -} - -static int ts_suspend(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 0); - - return 0; -} - - - - -static int ts_resume(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 1); - return 0; -} - - - - - -struct ts_operate ts_ft5306_ops = { - .name = "ft5306", - .slave_addr = 0x3e, - .ts_id = TS_ID_FT5306, //i2c id number - .bus_type = TS_BUS_TYPE_I2C, - .reg_size = 1, - .id_reg = FT5306_ID_REG, - .id_data = TS_UNKNOW_DATA, - .version_reg = TS_UNKNOW_DATA, - .version_len = 0, - .version_data = NULL, - .read_reg = FT5306_DATA_REG, //read data - .read_len = 32, //data length - .trig = IRQF_TRIGGER_FALLING, - .max_point = 5, - .xy_swap = 1, - .x_revert = 1, - .y_revert = 0, - .range = {1024,768}, - .irq_enable = 1, - .poll_delay_ms = 0, - .active = ts_active, - .init = ts_init, - .check_irq = NULL, - .report = ts_report_value, - .firmware = NULL, - .suspend = ts_suspend, - .resume = ts_resume, -}; - -/****************operate according to ts chip:end************/ - -//function name should not be changed -static struct ts_operate *ts_get_ops(void) -{ - return &ts_ft5306_ops; -} - - -static int __init ts_ft5306_init(void) -{ - struct ts_operate *ops = ts_get_ops(); - int result = 0; - result = ts_register_slave(NULL, NULL, ts_get_ops); - DBG("%s\n",__func__); - return result; -} - -static void __exit ts_ft5306_exit(void) -{ - struct ts_operate *ops = ts_get_ops(); - ts_unregister_slave(NULL, NULL, ts_get_ops); -} - - -subsys_initcall(ts_ft5306_init); -module_exit(ts_ft5306_exit); - diff --git a/drivers/input/ts/chips/gt8110.c b/drivers/input/ts/chips/gt8110.c deleted file mode 100755 index bc49cb40cda0..000000000000 --- a/drivers/input/ts/chips/gt8110.c +++ /dev/null @@ -1,374 +0,0 @@ -/* drivers/input/ts/chips/gt8110.c - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif -#include - - -#if 0 -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - -#define PEN_DOWN 1 -#define PEN_RELEASE 0 -#define PEN_DOWN_UP 2 //from down to up - - -#define GT8110_ID_REG 0x00 -#define GT8110_DATA_REG 0x00 - - -/****************operate according to ts chip:start************/ - -static int ts_active(struct ts_private_data *ts, int enable) -{ - unsigned char buf_suspend[2] = {0x38, 0x56}; //suspend cmd - int result = 0; - - if(enable) - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - mdelay(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(200); - } - else - { - result = ts_bulk_write(ts, (unsigned short )buf_suspend[0], 2, (unsigned short *)&buf_suspend[1]); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - } - - - return result; -} - -static int ts_init(struct ts_private_data *ts) -{ - int irq_pin = irq_to_gpio(ts->pdata->irq); - char version_data[18] = {240}; - char init_data[95] = { - 0x65,0x02,0x00,0x10,0x00,0x10,0x0A,0x62,0x4A,0x00, - 0x0F,0x28,0x02,0x10,0x10,0x00,0x00,0x20,0x00,0x00, - 0x10,0x10,0x10,0x00,0x37,0x00,0x00,0x00,0x01,0x02, - 0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C, - 0x0D,0xFF,0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06, - 0x07,0x08,0x09,0x0A,0x0B,0x0C,0xFF,0xFF,0xFF,0x00, - 0x00,0x3C,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00 - }; - int result = 0, i = 0; - - //read version - result = ts_bulk_read(ts, (unsigned short)version_data[0], 16, (unsigned short *)&version_data[1]); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - version_data[17]='\0'; - - printk("%s:%s version is %s\n",__func__,ts->ops->name, version_data); -#if 1 - //init some register - result = ts_bulk_write(ts, (unsigned short )init_data[0], 94, (unsigned short *)&init_data[1]); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } -#endif - result = ts_bulk_read(ts, (unsigned short)init_data[0], 94, (unsigned short *)&init_data[1]); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - - DBG("%s:rx:",__func__); - for(i=0; i<95; i++) - DBG("0x%x,",init_data[i]); - - DBG("\n"); - - return result; -} - -static bool goodix_get_status(int *p1,int*p2) -{ - bool status = PEN_DOWN; - if((*p2==PEN_DOWN) && (*p1==PEN_RELEASE)) - { - *p2 = PEN_DOWN_UP; //¸Õ¸Õµ¯Æð - status = PEN_RELEASE; - } - else if((*p2==PEN_RELEASE) && (*p1==PEN_RELEASE)) - { - *p2 = PEN_RELEASE; - status = PEN_RELEASE; - } - else - { - *p2 = PEN_DOWN; - } - return status; -} - - - -static int ts_check_irq(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - struct ts_event *event = &ts->event; - int gpio_level_no_int = GPIO_HIGH; - int id = 0, i = 0; - - if((ts->ops->trig & IRQF_TRIGGER_LOW) || (ts->ops->trig & IRQF_TRIGGER_FALLING)) - gpio_level_no_int = GPIO_HIGH; - else - gpio_level_no_int = GPIO_LOW; - - if(gpio_get_value(ts->pdata->irq) == gpio_level_no_int) - { - for(i = 0; iops->max_point; i++) - { - id = i; - if(event->point[id].last_status != 0) - { - event->point[i].last_status = PEN_RELEASE; - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - DBG("%s:%s press up,id=%d\n\n",__func__,ts->ops->name, event->point[i].id); - } - } - - input_sync(ts->input_dev); - memset(event, 0x00, sizeof(struct ts_event)); - enable_irq(ts->irq); - } - else - schedule_delayed_work(&ts->delaywork, msecs_to_jiffies(ts->ops->poll_delay_ms)); - - return 0; - -} - - -static int ts_report_value(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - struct ts_event *event = &ts->event; - unsigned char buf[54] = {0}; - int result = 0 , i = 0, j = 0, off = 0, id = 0; - int temp = 0, num = 0; - - result = ts_bulk_read(ts, ts->ops->read_reg, ts->ops->read_len, (unsigned short *)buf); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - //for(i=0; iops->read_len; i++) - //DBG("buf[%d]=0x%x\n",i,buf[i]); - - temp = (buf[1] << 8) | buf[0]; - - for(i=0; iops->max_point; i++) - { - if(temp & (1 << i)) - { - event->point[i].status = PEN_DOWN; - num++; - } - } - - if(num > event->touch_point) - event->touch_point = num; - - for(i = 0; itouch_point; i++) - { - off = 2 + i*4; - - id = i; - event->point[id].id = id; - - if(goodix_get_status(&event->point[id].status,&event->point[id].last_status)) - { - event->point[id].x = (unsigned int)(buf[off+1]<<8) + (unsigned int)buf[off+0]; - event->point[id].y = (unsigned int)(buf[off+3]<<8) + (unsigned int)buf[off+2]; - } - - if((event->point[id].x <= 0) || (event->point[id].x >= ts->ops->range[0]) || (event->point[id].y <= 0) || (event->point[id].y >= ts->ops->range[1])) - { - event->point[id].status = 0; - continue; - } - //for(j=0; j<(2 + (i+1)*4); j++) - //DBG("buf[%d]=0x%x\n",j,buf[j]); - - if(ts->ops->xy_swap) - { - swap(event->point[id].x, event->point[id].y); - } - - if(ts->ops->x_revert) - { - event->point[id].x = ts->ops->range[0] - event->point[id].x; - } - - if(ts->ops->y_revert) - { - event->point[id].y = ts->ops->range[1] - event->point[id].y; - } - - - if(event->point[id].status==PEN_DOWN_UP) - { - event->point[id].status=PEN_RELEASE; - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - DBG("%s:%s press is uping,id=%d\n\n",__func__,ts->ops->name, event->point[i].id); - continue; - } - - if(event->point[id].status==PEN_DOWN) - { - input_mt_slot(ts->input_dev, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 1); - input_report_abs(ts->input_dev, ABS_MT_POSITION_X, event->point[id].x); - input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, event->point[id].y); - input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 1); - DBG("%s:%s press down,id=%d,x=%d,y=%d\n\n",__func__,ts->ops->name, event->point[id].id, event->point[id].x,event->point[id].y); - } - - event->point[id].last_status = event->point[id].status; - } - - input_sync(ts->input_dev); - - return 0; -} - -static int ts_suspend(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 0); - - return 0; -} - - -static int ts_resume(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 1); - return 0; -} - - - -struct ts_operate ts_gt8110_ops = { - .name = "gt8110", - .slave_addr = 0x5c, - .ts_id = TS_ID_GT8110, //i2c id number - .bus_type = TS_BUS_TYPE_I2C, - .reg_size = 1, - .id_reg = GT8110_ID_REG, - .id_data = TS_UNKNOW_DATA, - .version_reg = TS_UNKNOW_DATA, - .version_len = 0, - .version_data = NULL, - .read_reg = GT8110_DATA_REG, //read data - .read_len = 5*10+3+1, //data length - .trig = IRQ_TYPE_LEVEL_LOW, - .max_point = 10, - .xy_swap = 0, - .x_revert = 0, - .y_revert = 0, - .range = {4096,4096}, - .irq_enable = 1, - .poll_delay_ms = 30, - .active = ts_active, - .init = ts_init, - .check_irq = ts_check_irq, - .report = ts_report_value, - .firmware = NULL, - .suspend = ts_suspend, - .resume = ts_resume, -}; - -/****************operate according to ts chip:end************/ - -//function name should not be changed -static struct ts_operate *ts_get_ops(void) -{ - return &ts_gt8110_ops; -} - - -static int __init ts_gt8110_init(void) -{ - struct ts_operate *ops = ts_get_ops(); - int result = 0; - result = ts_register_slave(NULL, NULL, ts_get_ops); - DBG("%s\n",__func__); - return result; -} - -static void __exit ts_gt8110_exit(void) -{ - struct ts_operate *ops = ts_get_ops(); - ts_unregister_slave(NULL, NULL, ts_get_ops); -} - - -subsys_initcall(ts_gt8110_init); -module_exit(ts_gt8110_exit); - diff --git a/drivers/input/ts/chips/gt828.c b/drivers/input/ts/chips/gt828.c deleted file mode 100755 index ca5f691466ef..000000000000 --- a/drivers/input/ts/chips/gt828.c +++ /dev/null @@ -1,391 +0,0 @@ -/* drivers/input/ts/chips/gt828.c - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif -#include - - -#if 0 -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - - -//Register define -#define GTP_READ_COOR_ADDR 0x0F40 -#define GTP_REG_SLEEP 0x0FF2 -#define GTP_REG_SENSOR_ID 0x0FF5 -#define GTP_REG_CONFIG_DATA 0x0F80 -#define GTP_REG_VERSION 0x0F7D - -#define GTP_CONFIG_LENGTH 112 -#define TRIGGER_LOC 64 - -//STEP_1(REQUIRED):Change config table. -/*TODO: puts the config info corresponded to your TP here, the following is just -a sample config, send this config should cause the chip cannot work normally*/ -//default or float - -u8 cfg_info_group[][GTP_CONFIG_LENGTH] = -{ - { - 0x00,0x0F,0x01,0x10,0x02,0x11,0x03,0x12,0x04,0x13, - 0x05,0x14,0x06,0x15,0x07,0x16,0x08,0x17,0x09,0x18, - 0x0A,0x19,0x0B,0x1A,0x0C,0x1B,0x0D,0x1C,0xFF,0xFF, - 0x02,0x0C,0x03,0x0D,0x04,0x0E,0x05,0x0F,0x06,0x10, - 0x07,0x11,0x08,0x12,0x09,0x13,0xFF,0x11,0x12,0x13, - 0x0F,0x03,0x88,0x10,0x10,0x2A,0x00,0x00,0x00,0x00, - 0x00,0x0E,0x45,0x30,0x58,0x03,0x00,0x05,0x00,0x02, - 0x58,0x03,0x20,0x55,0x5E,0x50,0x58,0x27,0x00,0x05, - 0x19,0x05,0x14,0x10,0x00,0x05,0x00,0x00,0x00,0x00, - 0x00,0x00,0x40,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, - 0x0F,0x88,0x28,0x05,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01 - }, - { - 0x00,0x0F,0x01,0x10,0x02,0x11,0x03,0x12,0x04,0x13, - 0x05,0x14,0x06,0x15,0x07,0x16,0x08,0x17,0x09,0x18, - 0x0A,0x19,0x0B,0x1A,0x0C,0x1B,0x0D,0x1C,0xFF,0xFF, - 0x02,0x0C,0x03,0x0D,0x04,0x0E,0x05,0x0F,0x06,0x10, - 0x07,0x11,0x08,0x12,0x09,0x13,0xFF,0x11,0x12,0x13, - 0x0F,0x03,0x88,0x10,0x10,0x2A,0x00,0x00,0x00,0x00, - 0x00,0x0E,0x45,0x30,0x58,0x03,0x00,0x05,0x00,0x02, - 0x58,0x03,0x20,0x55,0x5E,0x50,0x58,0x27,0x00,0x05, - 0x19,0x05,0x14,0x10,0x00,0x05,0x00,0x00,0x00,0x00, - 0x00,0x00,0x40,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, - 0x0F,0x88,0x28,0x05,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01 - }, - - { - 0x00,0x0F,0x01,0x10,0x02,0x11,0x03,0x12,0x04,0x13, - 0x05,0x14,0x06,0x15,0x07,0x16,0x08,0x17,0x09,0x18, - 0x0A,0x19,0x0B,0x1A,0x0C,0x1B,0x0D,0x1C,0xFF,0xFF, - 0x02,0x0C,0x03,0x0D,0x04,0x0E,0x05,0x0F,0x06,0x10, - 0x07,0x11,0x08,0x12,0x09,0x13,0xFF,0x11,0x12,0x13, - 0x0F,0x03,0x88,0x10,0x10,0x2A,0x00,0x00,0x00,0x00, - 0x00,0x0E,0x45,0x30,0x58,0x03,0x00,0x05,0x00,0x02, - 0x58,0x03,0x20,0x55,0x5E,0x50,0x58,0x27,0x00,0x05, - 0x19,0x05,0x14,0x10,0x00,0x05,0x00,0x00,0x00,0x00, - 0x00,0x00,0x40,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, - 0x0F,0x88,0x28,0x05,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x01 - } - -}; - -static u8 config[GTP_CONFIG_LENGTH+2] = {GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff}; - - -/****************operate according to ts chip:start************/ - -int ts_i2c_end_cmd(struct ts_private_data *ts) -{ - int result = -1; - char end_cmd_data[2]={0x80, 0x00}; - - result = ts_reg_write(ts, end_cmd_data[0], end_cmd_data[1]); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - return result; -} - - -static int ts_active(struct ts_private_data *ts, int enable) -{ - int result = 0; - - if(enable) - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - msleep(10); - gpio_direction_output(ts->pdata->reset_pin, GPIO_HIGH); - msleep(100); - } - else - { - gpio_direction_output(ts->pdata->reset_pin, GPIO_LOW); - } - - - return result; -} - -static int ts_init(struct ts_private_data *ts) -{ - int result = 0; - char version_data[5] = {ts->ops->version_reg >> 8, ts->ops->version_reg & 0xff}; - u8 rd_cfg_buf[2]; - - //init some register - result = ts_bulk_read(ts, ts->ops->version_reg, 1, rd_cfg_buf); - if(result < 0) - { - printk("%s:fail to read rd_cfg_buf\n",__func__); - return result; - } - - result = ts_i2c_end_cmd(ts); - if(result < 0) - { - printk("%s:fail to end cmd\n",__func__); - rd_cfg_buf[0] = 0; - //return result; - } - - rd_cfg_buf[0] &= 0x03; - - printk("%s:%s id is %d\n",__func__,ts->ops->name, rd_cfg_buf[0]); - - memcpy(&config[2], cfg_info_group[rd_cfg_buf[0]], GTP_CONFIG_LENGTH); - - if((ts->ops->trig & IRQF_TRIGGER_FALLING) || (ts->ops->trig & IRQF_TRIGGER_LOW)) //FALLING - { - config[TRIGGER_LOC+2] &= 0xf7; - } - else if((ts->ops->trig & IRQF_TRIGGER_RISING) || (ts->ops->trig & IRQF_TRIGGER_HIGH)) //RISING - { - config[TRIGGER_LOC+2] |= 0x08; - } - - result = ts_bulk_write(ts, GTP_REG_CONFIG_DATA, GTP_CONFIG_LENGTH, config); - if(result < 0) - { - printk("%s:fail to send config data\n",__func__); - return result; - } - - result = ts_i2c_end_cmd(ts); - if(result < 0) - { - printk("%s:fail to end cmd\n",__func__); - //return result; - } - - //read version - result = ts_bulk_read(ts, ts->ops->version_reg, 4, version_data); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - version_data[4]='\0'; - - result = ts_i2c_end_cmd(ts); - if(result < 0) - { - printk("%s:fail to end cmd\n",__func__); - //return result; - } - - printk("%s:%s version is %s\n",__func__,ts->ops->name, version_data); - - return result; -} - - -static int ts_report_value(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - struct ts_event *event = &ts->event; - unsigned char buf[2 + 2 + 5 * 5 + 1] = {0}; - int result = 0 , i = 0, off = 0, id = 0; - int finger = 0; - int checksum = 0; - - result = ts_bulk_read(ts, ts->ops->read_reg, ts->ops->read_len, buf); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - return result; - } - - result = ts_i2c_end_cmd(ts); - if(result < 0) - { - printk("%s:fail to end ts\n",__func__); - return result; - } - - //for(i=0; iops->read_len; i++) - //DBG("buf[%d]=0x%x\n",i,buf[i]); - finger = buf[0]; - if((finger & 0x80) != 0x80) - { - DBG("%s:data not ready!,finger=0x%x\n",__func__,finger); - //return -1; - } - - for(i = 0; iops->max_point; i++) - { - off = i*5+2; - - id = i; - event->point[id].id = id; - event->point[id].status = !!(finger & (1 << i)); - event->point[id].x = (buf[off+0]<<8) | buf[off+1]; - event->point[id].y = (buf[off+2]<<8) | buf[off+3]; - event->point[id].press = buf[off+4]; - - DBG("data:0x%x,0x%x,0x%x,0x%x\n",buf[off+0],buf[off+1],buf[off+2],buf[off+3]); - - if(ts->ops->xy_swap) - { - swap(event->point[id].x, event->point[id].y); - } - - if(ts->ops->x_revert) - { - event->point[id].x = ts->ops->range[0] - event->point[id].x; - } - - if(ts->ops->y_revert) - { - event->point[id].y = ts->ops->range[1] - event->point[id].y; - } - - if(event->point[id].status != 0) - { - input_mt_slot(ts->input_dev, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, event->point[id].id); - input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, event->point[id].press); - input_report_abs(ts->input_dev, ABS_MT_POSITION_X, event->point[id].x); - input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, event->point[id].y); - input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 1); - DBG("%s:%s press down,id=%d,x=%d,y=%d\n",__func__,ts->ops->name, event->point[id].id, event->point[id].x,event->point[id].y); - } - else if ((event->point[id].status == 0) && (event->point[id].last_status != 0)) - { - input_mt_slot(ts->input_dev, event->point[i].id); - input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, -1); - input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); - DBG("%s:%s press up,id=%d\n",__func__,ts->ops->name, event->point[i].id); - } - - event->point[i].last_status = event->point[i].status; - - } - - input_sync(ts->input_dev); - - return 0; -} - -static int ts_suspend(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 0); - - return 0; -} - - - - -static int ts_resume(struct ts_private_data *ts) -{ - struct ts_platform_data *pdata = ts->pdata; - - if(ts->ops->active) - ts->ops->active(ts, 1); - return 0; -} - - - - - -struct ts_operate ts_gt828_ops = { - .name = "gt828", - .slave_addr = 0x5d, - .ts_id = TS_ID_GT828, //i2c id number - .bus_type = TS_BUS_TYPE_I2C, - .reg_size = 2, - .id_reg = GTP_REG_SENSOR_ID, - .id_data = TS_UNKNOW_DATA, - .version_reg = 0x0F7D, - .version_len = 0, - .version_data = NULL, - .read_reg = GTP_READ_COOR_ADDR, //read data - .read_len = 2 + 2 + 5 * 5 + 1, //data length - .trig = IRQF_TRIGGER_FALLING, - .max_point = 5, - .xy_swap = 0, - .x_revert = 0, - .y_revert = 0, - .range = {800,1280}, - .irq_enable = 1, - .poll_delay_ms = 0, - .active = ts_active, - .init = ts_init, - .check_irq = NULL, - .report = ts_report_value, - .firmware = NULL, - .suspend = ts_suspend, - .resume = ts_resume, -}; - -/****************operate according to ts chip:end************/ - -//function name should not be changed -static struct ts_operate *ts_get_ops(void) -{ - return &ts_gt828_ops; -} - - -static int __init ts_gt828_init(void) -{ - struct ts_operate *ops = ts_get_ops(); - int result = 0; - result = ts_register_slave(NULL, NULL, ts_get_ops); - DBG("%s\n",__func__); - return result; -} - -static void __exit ts_gt828_exit(void) -{ - struct ts_operate *ops = ts_get_ops(); - ts_unregister_slave(NULL, NULL, ts_get_ops); -} - - -subsys_initcall(ts_gt828_init); -module_exit(ts_gt828_exit); - diff --git a/drivers/input/ts/ts-auto.c b/drivers/input/ts/ts-auto.c deleted file mode 100755 index af98f482d9cf..000000000000 --- a/drivers/input/ts/ts-auto.c +++ /dev/null @@ -1,610 +0,0 @@ -/* drivers/input/ts/ts-auto.c - handle all touchscreen in this file - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif - -#include - - -#if 0 -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - -struct ts_private_data *g_ts; -static struct class *g_ts_class; -static struct ts_operate *g_ts_ops[TS_NUM_ID]; - - -/** - * ts_reg_read: Read a single ts register. - * - * @ts: Device to read from. - * @reg: Register to read. - */ -int ts_reg_read(struct ts_private_data *ts, unsigned short reg) -{ - unsigned short val; - int ret; - - mutex_lock(&ts->io_lock); - - ret = ts->read_dev(ts, reg, ts->ops->reg_size, &val, ts->ops->reg_size); - - mutex_unlock(&ts->io_lock); - - if (ret < 0) - return ret; - else - return val; -} -EXPORT_SYMBOL_GPL(ts_reg_read); - -/** - * ts_bulk_read: Read multiple ts registers - * - * @ts: Device to read from - * @reg: First register - * @count: Number of registers - * @buf: Buffer to fill. - */ -int ts_bulk_read(struct ts_private_data *ts, unsigned short reg, - int count, unsigned char *buf) -{ - int ret; - - mutex_lock(&ts->io_lock); - - ret = ts->read_dev(ts, reg, count, buf, ts->ops->reg_size); - - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_bulk_read); - - -/** - * ts_reg_write: Write a single ts register. - * - * @ts: Device to write to. - * @reg: Register to write to. - * @val: Value to write. - */ -int ts_reg_write(struct ts_private_data *ts, unsigned short reg, - unsigned short val) -{ - int ret; - - mutex_lock(&ts->io_lock); - - ret = ts->write_dev(ts, reg, ts->ops->reg_size, &val, ts->ops->reg_size); - - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_reg_write); - - -int ts_bulk_write(struct ts_private_data *ts, unsigned short reg, - int count, unsigned char *buf) -{ - int ret; - - mutex_lock(&ts->io_lock); - - ret = ts->write_dev(ts, reg, count, buf, ts->ops->reg_size); - - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_bulk_write); - - - -/** - * ts_set_bits: Set the value of a bitfield in a ts register - * - * @ts: Device to write to. - * @reg: Register to write to. - * @mask: Mask of bits to set. - * @val: Value to set (unshifted) - */ -int ts_set_bits(struct ts_private_data *ts, unsigned short reg, - unsigned short mask, unsigned short val) -{ - int ret; - u16 r; - - mutex_lock(&ts->io_lock); - - ret = ts->read_dev(ts, reg, ts->ops->reg_size, &r, ts->ops->reg_size); - if (ret < 0) - goto out; - - r &= ~mask; - r |= val; - - ret = ts->write_dev(ts, reg, ts->ops->reg_size, &r, ts->ops->reg_size); - -out: - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_set_bits); - -static int ts_get_id(struct ts_operate *ops, struct ts_private_data *ts, int *value) -{ - int result = 0; - char temp[4] = {ops->id_reg & 0xff}; - int i = 0; - - DBG("%s:start\n",__func__); - if(ops->id_reg >= 0) - { - for(i=0; i<2; i++) - { - if(ops->reg_size == 2) - { - temp[0] = ops->id_reg >> 8; - temp[1] = ops->id_reg & 0xff; - result = ts->read_dev(ts, ops->id_reg, 2, temp, ops->reg_size); - *value = (temp[0] << 8) | temp[1]; - } - else - { - result = ts->read_dev(ts, ops->id_reg, 1, temp, ops->reg_size); - *value = temp[0]; - } - if(!result) - break; - - } - - if(result) - return result; - - if((ops->id_data != TS_UNKNOW_DATA)&&(ops->id_data != *value)) - { - printk("%s:id=0x%x is not 0x%x\n",__func__,*value, ops->id_data); - result = -1; - } - - DBG("%s:devid=0x%x\n",__func__,*value); - } - - return result; -} - - -static int ts_get_version(struct ts_operate *ops, struct ts_private_data *ts) -{ - int result = 0; - char temp[TS_MAX_VER_LEN + 1] = {0}; - int i = 0; - - DBG("%s:start\n",__func__); - - if(ops->version_reg >= 0) - { - if((ops->version_len < 0) || (ops->version_len > TS_MAX_VER_LEN)) - { - printk("%s:version_len %d is error\n",__func__,ops->version_len); - ops->version_len = TS_MAX_VER_LEN; - } - - result = ts->read_dev(ts, ops->version_reg, ops->version_len, temp, ops->reg_size); - if(result) - return result; - - if(ops->version_data) - { - for(i=0; iversion_len; i++) - { - if(temp[i] == ops->version_data[i]) - continue; - printk("%s:version %s is not %s\n",__func__,temp, ops->version_data); - result = -1; - } - } - - DBG("%s:%s version: %s\n",__func__,ops->name, temp); - } - - return result; -} - - -static int ts_chip_init(struct ts_private_data *ts, int type) -{ - struct ts_operate *ops = NULL; - int result = 0; - int i = 0; - - if((type <= TS_BUS_TYPE_INVALID) || (type >= TS_BUS_TYPE_NUM_ID)) - { - printk("%s:type=%d is error\n",__func__,type); - return -1; - } - - if(ts->pdata->init_platform_hw) - ts->pdata->init_platform_hw(); - - for(i=TS_ID_INVALID+1; ibus_type == type) - { - - if(!ops->init || !ops->report) - { - printk("%s:error:%p,%p\n",__func__,ops->init,ops->report); - result = -1; - continue; - } - - ts->ops = ops; //save ops - - result = ts_get_id(ops, ts, &ts->devid);//get id - if(result < 0) - { - printk("%s:fail to read %s devid:0x%x\n",__func__, ops->name, ts->devid); - continue; - } - - result = ts_get_version(ops, ts); //get version - if(result < 0) - { - printk("%s:fail to read %s version\n",__func__, ops->name); - continue; - } - - result = ops->init(ts); - if(result < 0) - { - printk("%s:fail to init ts\n",__func__); - continue; - } - - if(ops->firmware) - { - result = ops->firmware(ts); - if(result < 0) - { - printk("%s:fail to updata firmware ts\n",__func__); - return result; - } - } - - printk("%s:%s devid:0x%x\n",__func__, ts->ops->name, ts->devid); - } - - break; - - } - - - return result; - -} - -static int ts_get_data(struct ts_private_data *ts) -{ - return ts->ops->report(ts); -} - - -static void ts_delaywork_func(struct work_struct *work) -{ - struct delayed_work *delaywork = container_of(work, struct delayed_work, work); - struct ts_private_data *ts = container_of(delaywork, struct ts_private_data, delaywork); - - mutex_lock(&ts->ts_lock); - if (ts_get_data(ts) < 0) - DBG(KERN_ERR "%s: Get data failed\n",__func__); - - if(!ts->ops->irq_enable)//restart work while polling - schedule_delayed_work(&ts->delaywork, msecs_to_jiffies(ts->ops->poll_delay_ms)); - else - { - if(ts->ops->check_irq) - { - ts->ops->check_irq(ts); - } - else - { - if((ts->ops->trig & IRQF_TRIGGER_LOW) || (ts->ops->trig & IRQF_TRIGGER_HIGH)) - enable_irq(ts->irq); - } - } - mutex_unlock(&ts->ts_lock); - - DBG("%s:%s\n",__func__,ts->i2c_id->name); -} - -/* - * This is a threaded IRQ handler so can access I2C/SPI. Since all - * interrupts are clear on read the IRQ line will be reasserted and - * the physical IRQ will be handled again if another interrupt is - * asserted while we run - in the normal course of events this is a - * rare occurrence so we save I2C/SPI reads. We're also assuming that - * it's rare to get lots of interrupts firing simultaneously so try to - * minimise I/O. - */ -static irqreturn_t ts_interrupt(int irq, void *dev_id) -{ - struct ts_private_data *ts = (struct ts_private_data *)dev_id; - - //use threaded IRQ - //if (ts_get_data(ts->client) < 0) - // DBG(KERN_ERR "%s: Get data failed\n",__func__); - //msleep(ts->ops->poll_delay_ms); - if(ts->ops->check_irq) - { - disable_irq_nosync(irq); - } - else - { - if((ts->ops->trig & IRQF_TRIGGER_LOW) || (ts->ops->trig & IRQF_TRIGGER_HIGH)) - disable_irq_nosync(irq); - } - schedule_delayed_work(&ts->delaywork, msecs_to_jiffies(ts->ops->poll_delay_ms)); - DBG("%s:irq=%d\n",__func__,irq); - return IRQ_HANDLED; -} - - -static int ts_irq_init(struct ts_private_data *ts) -{ - int result = 0; - int irq; - if((ts->ops->irq_enable)&&(ts->ops->trig != TS_UNKNOW_DATA)) - { - INIT_DELAYED_WORK(&ts->delaywork, ts_delaywork_func); - if(ts->ops->poll_delay_ms < 0) - ts->ops->poll_delay_ms = 30; - - //result = gpio_request(ts->irq, ts->i2c_id->name); - //if (result) - //{ - // printk("%s:fail to request gpio :%d\n",__func__,ts->irq); - //} - - gpio_pull_updown(ts->irq, PullEnable); - irq = gpio_to_irq(ts->irq); - result = request_irq(irq, ts_interrupt, ts->ops->trig, ts->ops->name, ts); - //result = request_threaded_irq(irq, NULL, ts_interrupt, ts->ops->trig, ts->ops->name, ts); - if (result) { - printk(KERN_ERR "%s:fail to request irq = %d, ret = 0x%x\n",__func__, irq, result); - goto error; - } - ts->irq = irq; - printk("%s:use irq=%d\n",__func__,irq); - } - else if(!ts->ops->irq_enable) - { - INIT_DELAYED_WORK(&ts->delaywork, ts_delaywork_func); - if(ts->ops->poll_delay_ms < 0) - ts->ops->poll_delay_ms = 30; - - schedule_delayed_work(&ts->delaywork, msecs_to_jiffies(ts->ops->poll_delay_ms)); - printk("%s:use polling,delay=%d ms\n",__func__,ts->ops->poll_delay_ms); - } - -error: - return result; -} - - - -int ts_device_init(struct ts_private_data *ts, int type, int irq) -{ - struct ts_platform_data *pdata = ts->dev->platform_data; - int result = -1, i; - - mutex_init(&ts->io_lock); - mutex_init(&ts->ts_lock); - dev_set_drvdata(ts->dev, ts); - - ts->pdata = pdata; - result = ts_chip_init(ts, type); - if(result < 0) - { - printk("%s:touch screen with bus type %d is not exist\n",__func__,type); - goto out_free_memory; - } - - ts->input_dev = input_allocate_device(); - if (!ts->input_dev) { - result = -ENOMEM; - dev_err(ts->dev, - "Failed to allocate input device %s\n", ts->input_dev->name); - goto out_free_memory; - } - - ts->input_dev->dev.parent = ts->dev; - ts->input_dev->name = ts->ops->name; - - result = input_register_device(ts->input_dev); - if (result) { - dev_err(ts->dev, - "Unable to register input device %s\n", ts->input_dev->name); - goto out_input_register_device_failed; - } - - result = ts_irq_init(ts); - if (result) { - dev_err(ts->dev, - "fail to init ts irq,ret=%d\n",result); - goto out_input_register_device_failed; - } - - __set_bit(EV_ABS, ts->input_dev->evbit); - __set_bit(EV_KEY, ts->input_dev->evbit); - __set_bit(EV_REP, ts->input_dev->evbit); - __set_bit(INPUT_PROP_DIRECT, ts->input_dev->propbit); - set_bit(ABS_MT_POSITION_X, ts->input_dev->absbit); - set_bit(ABS_MT_POSITION_Y, ts->input_dev->absbit); - set_bit(ABS_MT_TOUCH_MAJOR, ts->input_dev->absbit); - set_bit(ABS_MT_WIDTH_MAJOR, ts->input_dev->absbit); - - if(ts->ops->max_point <= 0) - ts->ops->max_point = 1; - - input_mt_init_slots(ts->input_dev, ts->ops->max_point); - - if((ts->ops->range[0] <= 0) || (ts->ops->range[1] <= 0)) - { - ts->ops->range[0] = 1024; - ts->ops->range[1] = 600; - } - - input_set_abs_params(ts->input_dev,ABS_MT_POSITION_X, 0, ts->ops->range[0], 0, 0); - input_set_abs_params(ts->input_dev,ABS_MT_POSITION_Y, 0, ts->ops->range[1], 0, 0); - input_set_abs_params(ts->input_dev,ABS_MT_TOUCH_MAJOR, 0, 10, 0, 0); - input_set_abs_params(ts->input_dev,ABS_MT_WIDTH_MAJOR, 0, 10, 0, 0); - - g_ts = ts; - - printk("%s:initialized ok,ts name:%s,devid=%d\n\n",__func__,ts->ops->name,ts->devid); - - return result; - -out_misc_device_register_device_failed: - input_unregister_device(ts->input_dev); -out_input_register_device_failed: - input_free_device(ts->input_dev); -out_free_memory: - kfree(ts); - - printk("%s:line=%d\n",__func__,__LINE__); - return result; -} - - -void ts_device_exit(struct ts_private_data *ts) -{ - if(!ts->ops->irq_enable) - cancel_delayed_work_sync(&ts->delaywork); - input_unregister_device(ts->input_dev); - input_free_device(ts->input_dev); -#ifdef CONFIG_HAS_EARLYSUSPEND - if((ts->ops->suspend) && (ts->ops->resume)) - unregister_early_suspend(&ts->early_suspend); -#endif - kfree(ts); -} - - -int ts_device_suspend(struct ts_private_data *ts) -{ - if(ts->ops->suspend) - ts->ops->suspend(ts); - - if(ts->ops->irq_enable) - disable_irq_nosync(ts->irq); - else - cancel_delayed_work_sync(&ts->delaywork); - - return 0; -} - - -int ts_device_resume(struct ts_private_data *ts) -{ - if(ts->ops->resume) - ts->ops->resume(ts); - - if(ts->ops->irq_enable) - enable_irq(ts->irq); - else - { - PREPARE_DELAYED_WORK(&ts->delaywork, ts_delaywork_func); - schedule_delayed_work(&ts->delaywork, msecs_to_jiffies(ts->ops->poll_delay_ms)); - } - - return 0; -} - - - -int ts_register_slave(struct ts_private_data *ts, - struct ts_platform_data *slave_pdata, - struct ts_operate *(*get_ts_ops)(void)) -{ - int result = 0; - struct ts_operate *ops = get_ts_ops(); - if((ops->ts_id >= TS_NUM_ID) || (ops->ts_id <= TS_ID_INVALID)) - { - printk("%s:%s id is error %d\n", __func__, ops->name, ops->ts_id); - return -1; - } - g_ts_ops[ops->ts_id] = ops; - printk("%s:%s,id=%d\n",__func__,g_ts_ops[ops->ts_id]->name, ops->ts_id); - return result; -} - - -int ts_unregister_slave(struct ts_private_data *ts, - struct ts_platform_data *slave_pdata, - struct ts_operate *(*get_ts_ops)(void)) -{ - int result = 0; - struct ts_operate *ops = get_ts_ops(); - if((ops->ts_id >= TS_NUM_ID) || (ops->ts_id <= TS_ID_INVALID)) - { - printk("%s:%s id is error %d\n", __func__, ops->name, ops->ts_id); - return -1; - } - printk("%s:%s,id=%d\n",__func__,g_ts_ops[ops->ts_id]->name, ops->ts_id); - g_ts_ops[ops->ts_id] = NULL; - return result; -} - - -MODULE_AUTHOR("ROCKCHIP Corporation:lw@rock-chips.com"); -MODULE_DESCRIPTION("device interface for auto touch screen"); -MODULE_LICENSE("GPL"); - - diff --git a/drivers/input/ts/ts-i2c.c b/drivers/input/ts/ts-i2c.c deleted file mode 100755 index fe56136d7ee6..000000000000 --- a/drivers/input/ts/ts-i2c.c +++ /dev/null @@ -1,302 +0,0 @@ -/* drivers/input/ts/ts-i2c.c - touchscreen i2c handle - * - * Copyright (C) 2012-2015 ROCKCHIP. - * Author: luowei - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef CONFIG_HAS_EARLYSUSPEND -#include -#endif -#include - -#define TS_I2C_RATE 200*1000 - -#if 0 -#define TS_DEBUG_ENABLE -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif - - -static int ts_i2c_read_device(struct ts_private_data *ts, unsigned short reg, - int bytes, void *dest, int reg_size) -{ - struct i2c_client *client = ts->control_data; - struct i2c_adapter *i2c_adap = client->adapter; - struct i2c_msg msgs[2]; - int i,res; - - if (!dest || !i2c_adap) { - printk("%s:line=%d,error\n",__func__,__LINE__); - return -EINVAL; - } - - client->addr = ts->ops->slave_addr; - - msgs[0].addr = client->addr; - msgs[0].flags = 0; /* write */ - msgs[0].buf = (unsigned char *)® - if(reg_size == 2) - msgs[0].len = 2; - else - msgs[0].len = 1; - msgs[0].scl_rate = TS_I2C_RATE; - - msgs[1].addr = client->addr; - msgs[1].flags = I2C_M_RD; - msgs[1].buf = dest; - msgs[1].len = bytes; - msgs[1].scl_rate = TS_I2C_RATE; - - res = i2c_transfer(i2c_adap, msgs, 2); - if (res == 2) - return 0; - else if(res == 0) - return -EBUSY; - else - return res; - -#ifdef TS_DEBUG_ENABLE - DBG("%s:reg=0x%x,len=%d,rxdata:",__func__, reg, bytes); - for(i=0; icontrol_data; - struct i2c_adapter *i2c_adap = client->adapter; - struct i2c_msg msgs[1]; - int res; - unsigned char buf[bytes + 2]; - - if (!src || !i2c_adap) { - printk("%s:line=%d,error\n",__func__,__LINE__); - return -EINVAL; - } - - - client->addr = ts->ops->slave_addr; - - if(ts->ops->reg_size == 2) - { - buf[0] = (reg & 0xff00) >> 8; - buf[1] = (reg & 0x00ff) & 0xff; - memcpy(&buf[2], src, bytes); - } - else - { - buf[0] = reg & 0xff; - memcpy(&buf[1], src, bytes); - } - -#ifdef TS_DEBUG_ENABLE - int i = 0; - DBG("%s:reg=0x%x,len=%d,txdata:",__func__, reg, bytes); - for(i=0; iaddr; - msgs[0].flags = 0; /* write */ - msgs[0].buf = buf; - if(ts->ops->reg_size == 2) - msgs[0].len = bytes+2; - else - msgs[0].len = bytes+1; - msgs[0].scl_rate = TS_I2C_RATE; - - res = i2c_transfer(i2c_adap, msgs, 1); - if (res == 1) - return 0; - else if(res == 0) - return -EBUSY; - else - return res; - -} - -int ts_bulk_read_normal(struct ts_private_data *ts, - int count, unsigned char *buf, int rate) -{ - int ret; - unsigned short reg; - struct i2c_client *client = ts->control_data; - client->addr = ts->ops->slave_addr; - - mutex_lock(&ts->io_lock); - ret = i2c_master_normal_recv(client, buf, count, rate); - if(ret == 1) - ret = 0; - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_bulk_read_normal); - - -int ts_bulk_write_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate) -{ - int ret; - unsigned short reg; - struct i2c_client *client = ts->control_data; - client->addr = ts->ops->slave_addr; - - mutex_lock(&ts->io_lock); - ret = i2c_master_normal_send(client, buf, count, rate); - if(ret == 1) - ret = 0; - mutex_unlock(&ts->io_lock); - - return ret; -} -EXPORT_SYMBOL_GPL(ts_bulk_write_normal); - - - -#ifdef CONFIG_HAS_EARLYSUSPEND -static void ts_suspend(struct early_suspend *h) -{ - struct ts_private_data *ts = - container_of(h, struct ts_private_data, early_suspend); - - return ts_device_suspend(ts); -} - -static void ts_resume(struct early_suspend *h) -{ - struct ts_private_data *ts = - container_of(h, struct ts_private_data, early_suspend); - - return ts_device_resume(ts); -} -#endif - -static int ts_i2c_probe(struct i2c_client *i2c, - const struct i2c_device_id *id) -{ - struct ts_private_data *ts; - int ret,gpio,irq; - int type = TS_BUS_TYPE_I2C; - - if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C)) { - dev_err(&i2c->adapter->dev, "%s failed\n", __func__); - return -ENODEV; - } - - ts = kzalloc(sizeof(struct ts_private_data), GFP_KERNEL); - if (ts == NULL) - return -ENOMEM; - - i2c_set_clientdata(i2c, ts); - - ts->irq = i2c->irq; - ts->dev = &i2c->dev; - ts->control_data = i2c; - ts->read_dev = ts_i2c_read_device; - ts->write_dev = ts_i2c_write_device; - - ret = ts_device_init(ts, type, ts->irq); - if(ret) - { - printk("%s:fail to regist touch, type is %d\n",__func__, type); - return -1; - } - -#ifdef CONFIG_HAS_EARLYSUSPEND - if((ts->ops->suspend) && (ts->ops->resume)) - { - ts->early_suspend.suspend = ts_suspend; - ts->early_suspend.resume = ts_resume; - ts->early_suspend.level = 0x02; - register_early_suspend(&ts->early_suspend); - } -#endif - - return 0; -} - -static int ts_i2c_remove(struct i2c_client *i2c) -{ - struct ts_private_data *ts = i2c_get_clientdata(i2c); - - ts_device_exit(ts); - - return 0; -} - - -static const struct i2c_device_id ts_i2c_id[] = { - {"auto_ts_i2c", 0}, - {}, -}; -MODULE_DEVICE_TABLE(i2c, ts_i2c_id); - -static struct i2c_driver ts_i2c_driver = { - .driver = { - .name = "auto_ts_i2c", - .owner = THIS_MODULE, - }, - .probe = ts_i2c_probe, - .remove = ts_i2c_remove, - .id_table = ts_i2c_id, -}; - -static int __init ts_i2c_init(void) -{ - int ret; - - printk("%s\n", __FUNCTION__); - ret = i2c_add_driver(&ts_i2c_driver); - if (ret != 0) - pr_err("Failed to register ts I2C driver: %d\n", ret); - - return ret; -} -subsys_initcall_sync(ts_i2c_init); - -static void __exit ts_i2c_exit(void) -{ - i2c_del_driver(&ts_i2c_driver); -} -module_exit(ts_i2c_exit); - diff --git a/drivers/input/ts/ts-serial.c b/drivers/input/ts/ts-serial.c deleted file mode 100644 index 4df52c1de85b..000000000000 --- a/drivers/input/ts/ts-serial.c +++ /dev/null @@ -1,2 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -//to do diff --git a/drivers/input/ts/ts-spi.c b/drivers/input/ts/ts-spi.c deleted file mode 100644 index 4df52c1de85b..000000000000 --- a/drivers/input/ts/ts-spi.c +++ /dev/null @@ -1,2 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -//to do diff --git a/include/linux/ts-auto.h b/include/linux/ts-auto.h deleted file mode 100644 index d029328e7005..000000000000 --- a/include/linux/ts-auto.h +++ /dev/null @@ -1,152 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __TS_AUTO_H -#define __TS_AUTO_H -#include - -#define TS_ENABLE 1 -#define TS_DISABLE 0 -#define TS_UNKNOW_DATA -1 -#define TS_MAX_POINT 20 -#define TS_MAX_VER_LEN 64 - -struct ts_private_data; - -enum ts_bus_type{ - TS_BUS_TYPE_INVALID = 0, - - TS_BUS_TYPE_I2C, - TS_BUS_TYPE_SPI, - TS_BUS_TYPE_SERIAL, - - TS_BUS_TYPE_NUM_ID, -}; - -enum ts_id { - TS_ID_INVALID = 0, - - TS_ID_FT5306, - TS_ID_CT360, - TS_ID_GT8110, - TS_ID_GT828, - TS_ID_GT8005, - - TS_NUM_ID, -}; - -struct point_data { - int status; - int id; - int x; - int y; - int press; - int last_status; -}; - -struct ts_event { - int touch_point; - struct point_data point[TS_MAX_POINT]; -}; - - -/* Platform data for the auto touchscreen */ -struct ts_platform_data { - unsigned char slave_addr; - int irq; - int power_pin; - int reset_pin; - - int (*init_platform_hw)(void); -}; - -struct ts_max_pixel{ - int max_x; - int max_y; -}; - -struct ts_operate { - char *name; - char slave_addr; - int ts_id; - int bus_type; - struct ts_max_pixel pixel; - int reg_size; - int id_reg; - int id_data; - int version_reg; - char *version_data; - int version_len; //<64 - int read_reg; - int read_len; - int trig; //intterupt trigger - int max_point; - int xy_swap; - int x_revert; - int y_revert; - int range[2]; - int irq_enable; //if irq_enable=1 then use irq else use polling - int poll_delay_ms; //polling - int gpio_level_no_int; - int (*active)(struct ts_private_data *ts, int enable); - int (*init)(struct ts_private_data *ts); - int (*check_irq)(struct ts_private_data *ts); - int (*report)(struct ts_private_data *ts); - int (*firmware)(struct ts_private_data *ts); - int (*suspend)(struct ts_private_data *ts); - int (*resume)(struct ts_private_data *ts); - struct miscdevice *misc_dev; -}; - - -struct ts_private_data { - struct mutex io_lock; - struct device *dev; - int (*read_dev)(struct ts_private_data *ts, unsigned short reg, - int bytes, void *dest, int reg_size); - int (*write_dev)(struct ts_private_data *ts, unsigned short reg, - int bytes, void *src, int reg_size); - void *control_data; - int irq; - //struct i2c_client *client; - struct input_dev *input_dev; - struct ts_event event; - struct work_struct work; - struct delayed_work delaywork; /*report second event*/ - struct delayed_work poll_work; /*poll at last*/ - char ts_data[40]; //max support40 bytes data - struct mutex data_mutex; - struct mutex ts_lock; - int devid; - struct i2c_device_id *i2c_id; - struct ts_platform_data *pdata; - struct ts_operate *ops; - struct file_operations fops; - struct miscdevice miscdev; -#ifdef CONFIG_HAS_EARLYSUSPEND - struct early_suspend early_suspend; -#endif -}; - -extern int ts_device_init(struct ts_private_data *ts, int type, int irq); -extern void ts_device_exit(struct ts_private_data *ts); -extern int ts_register_slave(struct ts_private_data *ts, - struct ts_platform_data *slave_pdata, - struct ts_operate *(*get_ts_ops)(void)); -extern int ts_unregister_slave(struct ts_private_data *ts, - struct ts_platform_data *slave_pdata, - struct ts_operate *(*get_ts_ops)(void)); -extern int ts_reg_read(struct ts_private_data *ts, unsigned short reg); -extern int ts_reg_write(struct ts_private_data *ts, unsigned short reg, - unsigned short val); -extern int ts_bulk_read(struct ts_private_data *ts, unsigned short reg, - int count, unsigned char *buf); -extern int ts_bulk_read_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate); -extern int ts_bulk_write(struct ts_private_data *ts, unsigned short reg, - int count, unsigned char *buf); -extern int ts_bulk_write_normal(struct ts_private_data *ts, int count, unsigned char *buf, int rate); -extern int ts_set_bits(struct ts_private_data *ts, unsigned short reg, - unsigned short mask, unsigned short val); -extern int ts_device_suspend(struct ts_private_data *ts); - -extern int ts_device_resume(struct ts_private_data *ts); - -#endif