Touch driver porting
Root cause:N/A
How to fix:N/A
Feature:Touch driver porting on Android 10
Change-Id: I410640b03f15c06b9f67e6096aea4daa19a23a30
RiskArea:Touch
diff --git a/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi b/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
index 957f6ac..908cdd0 100644
--- a/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
@@ -1432,65 +1432,67 @@
};
};
- spi3 {
- spi3_default: spi3_default {
- /* active state */
- mux {
- /* MOSI, MISO, CLK */
- pins = "gpio8", "gpio9", "gpio11";
- function = "blsp_spi3";
- };
+/*[20200429][TracyChui]Touch driver porting start*/
+// spi3 {
+// spi3_default: spi3_default {
+// /* active state */
+// mux {
+// /* MOSI, MISO, CLK */
+// pins = "gpio8", "gpio9", "gpio11";
+// function = "blsp_spi3";
+// };
- config {
- pins = "gpio8", "gpio9", "gpio11";
- drive-strength = <12>; /* 12 MA */
- bias-disable = <0>; /* No PULL */
- };
- };
+// config {
+// pins = "gpio8", "gpio9", "gpio11";
+// drive-strength = <12>; /* 12 MA */
+// bias-disable = <0>; /* No PULL */
+// };
+// };
- spi3_sleep: spi3_sleep {
- /* suspended state */
- mux {
- /* MOSI, MISO, CLK */
- pins = "gpio8", "gpio9", "gpio11";
- function = "gpio";
- };
+// spi3_sleep: spi3_sleep {
+// /* suspended state */
+// mux {
+// /* MOSI, MISO, CLK */
+// pins = "gpio8", "gpio9", "gpio11";
+// function = "gpio";
+// };
- config {
- pins = "gpio8", "gpio9", "gpio11";
- drive-strength = <2>; /* 2 MA */
- bias-pull-down; /* PULL Down */
- };
- };
+// config {
+// pins = "gpio8", "gpio9", "gpio11";
+// drive-strength = <2>; /* 2 MA */
+// bias-pull-down; /* PULL Down */
+// };
+// };
- spi3_cs0_active: cs0_active {
- /* CS */
- mux {
- pins = "gpio10";
- function = "blsp_spi3";
- };
+// spi3_cs0_active: cs0_active {
+// /* CS */
+// mux {
+// pins = "gpio10";
+// function = "blsp_spi3";
+// };
- config {
- pins = "gpio10";
- drive-strength = <2>;
- bias-disable = <0>;
- };
- };
+// config {
+// pins = "gpio10";
+// drive-strength = <2>;
+// bias-disable = <0>;
+// };
+// };
- spi3_cs0_sleep: cs0_sleep {
- /* CS */
- mux {
- pins = "gpio10";
- function = "gpio";
- };
+// spi3_cs0_sleep: cs0_sleep {
+// /* CS */
+// mux {
+// pins = "gpio10";
+// function = "gpio";
+// };
- config {
- pins = "gpio10";
- drive-strength = <2>;
- bias-disable = <0>;
- };
- };
- };
+// config {
+// pins = "gpio10";
+// drive-strength = <2>;
+// bias-disable = <0>;
+// };
+// };
+// };
+/*[20200429][TracyChui]Touch driver porting end*/
spi6 {
spi6_default: spi6_default {
diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi
index cd084ca..f42b0f7 100644
--- a/arch/arm64/boot/dts/qcom/msm8953.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi
@@ -188,7 +188,9 @@
i2c2 = &i2c_2;
i2c3 = &i2c_3;
i2c5 = &i2c_5;
- spi3 = &spi_3;
+/*[20200429][TracyChui]Touch driver porting start*/
+// spi3 = &spi_3;
+/*[20200429][TracyChui]Touch driver porting end*/
spi6 = &spi_6;
};
@@ -687,31 +689,33 @@
qcom,summing-threshold = <10>;
};
- spi_3: spi@78b7000 { /* BLSP1 QUP3 */
- compatible = "qcom,spi-qup-v2";
- #address-cells = <1>;
- #size-cells = <0>;
- reg-names = "spi_physical", "spi_bam_physical";
- reg = <0x78b7000 0x600>,
- <0x7884000 0x1f000>;
- interrupt-names = "spi_irq", "spi_bam_irq";
- interrupts = <0 97 0>, <0 238 0>;
- spi-max-frequency = <19200000>;
- pinctrl-names = "spi_default", "spi_sleep";
- pinctrl-0 = <&spi3_default &spi3_cs0_active>;
- pinctrl-1 = <&spi3_sleep &spi3_cs0_sleep>;
- clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
- <&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>;
- clock-names = "iface_clk", "core_clk";
- qcom,infinite-mode = <0>;
- qcom,use-bam;
- qcom,use-pinctrl;
- qcom,ver-reg-exists;
- qcom,bam-consumer-pipe-index = <8>;
- qcom,bam-producer-pipe-index = <9>;
- qcom,master-id = <86>;
- status = "disabled";
- };
+/*[20200429][TracyChui]Touch driver porting start*/
+// spi_3: spi@78b7000 { /* BLSP1 QUP3 */
+// compatible = "qcom,spi-qup-v2";
+// #address-cells = <1>;
+// #size-cells = <0>;
+// reg-names = "spi_physical", "spi_bam_physical";
+// reg = <0x78b7000 0x600>,
+// <0x7884000 0x1f000>;
+// interrupt-names = "spi_irq", "spi_bam_irq";
+// interrupts = <0 97 0>, <0 238 0>;
+// spi-max-frequency = <19200000>;
+// pinctrl-names = "spi_default", "spi_sleep";
+// pinctrl-0 = <&spi3_default &spi3_cs0_active>;
+// pinctrl-1 = <&spi3_sleep &spi3_cs0_sleep>;
+// clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,
+// <&clock_gcc clk_gcc_blsp1_qup3_spi_apps_clk>;
+// clock-names = "iface_clk", "core_clk";
+// qcom,infinite-mode = <0>;
+// qcom,use-bam;
+// qcom,use-pinctrl;
+// qcom,ver-reg-exists;
+// qcom,bam-consumer-pipe-index = <8>;
+// qcom,bam-producer-pipe-index = <9>;
+// qcom,master-id = <86>;
+// status = "disabled";
+// };
+/*[20200429][TracyChui]Touch driver porting end*/
spi_6: spi@7af6000 { /* BLSP2 QUP2 */
compatible = "qcom,spi-qup-v2";
@@ -813,7 +817,10 @@
dmas = <&dma_blsp1 8 64 0x20000020 0x20>,
<&dma_blsp1 9 32 0x20000020 0x20>;
dma-names = "tx", "rx";
- status = "disabled";
+/*[20200429][TracyChui]Touch driver porting start*/
+ //status = "disabled";
+ status = "ok";
+/*[20200429][TracyChui]Touch driver porting end*/
};
i2c_5: i2c@7af5000 { /* BLSP2 QUP1 */
@@ -2331,4 +2338,4 @@
elan,vdd-gpio = <&tlmm 90 0>;
};
};
-// //>2020/04/23-louisliu
\ No newline at end of file
+// //>2020/04/23-louisliu
diff --git a/arch/arm64/boot/dts/qcom/sdm450-pmi632.dtsi b/arch/arm64/boot/dts/qcom/sdm450-pmi632.dtsi
index 2319b3e..b4870b6 100644
--- a/arch/arm64/boot/dts/qcom/sdm450-pmi632.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm450-pmi632.dtsi
@@ -401,4 +401,22 @@
};
};
};
-*/
\ No newline at end of file
+*/
+/*[20200429][TracyChui]Touch driver porting start */
+&i2c_3 {
+ status = "ok";
+ himax_ts@48 {
+ compatible = "himax,hxcommon";
+ reg = <0x48>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <65 0x2008>;
+ vcc_i2c-supply = <&pm8953_l6>;
+ vdd-ana-supply = <&pm8953_l10>;
+ himax,display-coords = <0 1080 0 2160>;
+ himax,panel-coords = <0 1080 0 2160>;
+ himax,irq-gpio = <&tlmm 65 0x2008>;
+ himax,rst-gpio = <&tlmm 64 0x00>;
+ report_type = <1>;
+ };
+};
+/*[20200429][TracyChui]Touch driver porting end */
diff --git a/arch/arm64/configs/msm8953-perf_defconfig b/arch/arm64/configs/msm8953-perf_defconfig
index 221622c..4ff6c5b 100755
--- a/arch/arm64/configs/msm8953-perf_defconfig
+++ b/arch/arm64/configs/msm8953-perf_defconfig
@@ -321,12 +321,17 @@
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_JOYSTICK=y
CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_CORE_v26=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_v26=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_v26=y
-CONFIG_SECURE_TOUCH_SYNAPTICS_DSX_V26=y
+#[20200429][TracyChui]Touch driver porting start
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_CORE_v26=y
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_v26=y
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_v26=y
+#CONFIG_SECURE_TOUCH_SYNAPTICS_DSX_V26=y
+CONFIG_TOUCHSCREEN_HIMAX_CHIPSET=y
+CONFIG_TOUCHSCREEN_HIMAX_I2C=y
+CONFIG_TOUCHSCREEN_HIMAX_DEBUG=y
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_HBTP_INPUT=y
+# CONFIG_INPUT_HBTP_INPUT=y
+#[20200429][TracyChui]Touch driver porting end
CONFIG_INPUT_QPNP_POWER_ON=y
CONFIG_INPUT_UINPUT=y
# CONFIG_SERIO_SERPORT is not set
diff --git a/arch/arm64/configs/msm8953_defconfig b/arch/arm64/configs/msm8953_defconfig
index ad12e19..830d3db 100755
--- a/arch/arm64/configs/msm8953_defconfig
+++ b/arch/arm64/configs/msm8953_defconfig
@@ -328,12 +328,17 @@
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_JOYSTICK=y
CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_CORE_v26=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_v26=y
-CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_v26=y
-CONFIG_SECURE_TOUCH_SYNAPTICS_DSX_V26=y
+#[20200429][TracyChui]Touch driver porting start
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_CORE_v26=y
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_RMI_DEV_v26=y
+#CONFIG_TOUCHSCREEN_SYNAPTICS_DSX_FW_UPDATE_v26=y
+#CONFIG_SECURE_TOUCH_SYNAPTICS_DSX_V26=y
+CONFIG_TOUCHSCREEN_HIMAX_CHIPSET=y
+CONFIG_TOUCHSCREEN_HIMAX_I2C=y
+CONFIG_TOUCHSCREEN_HIMAX_DEBUG=y
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_HBTP_INPUT=y
+# CONFIG_INPUT_HBTP_INPUT=y
+#[20200429][TracyChui]Touch driver porting end
CONFIG_INPUT_QPNP_POWER_ON=y
CONFIG_INPUT_UINPUT=y
# CONFIG_SERIO_SERPORT is not set
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 1e620a9..daf4203 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -11,7 +11,9 @@
if INPUT_TOUCHSCREEN
-source "drivers/input/touchscreen/synaptics_dsx_2.6/Kconfig"
+#[20200429][TracyChui]Touch driver porting start
+#source "drivers/input/touchscreen/synaptics_dsx_2.6/Kconfig"
+#[20200429][TracyChui]Touch driver porting end
config TOUCHSCREEN_PROPERTIES
def_tristate INPUT
@@ -1373,7 +1375,9 @@
If unsure, say N.
-source "drivers/input/touchscreen/synaptics_dsx/Kconfig"
+#[20200429][TracyChui]Touch driver porting start
+#source "drivers/input/touchscreen/synaptics_dsx/Kconfig"
+#[20200429][TracyChui]Touch driver porting end
source "drivers/input/touchscreen/focaltech_touch/Kconfig"
config TOUCHSCREEN_FT5X06
@@ -1432,7 +1436,10 @@
If unsure, say N.
-source "drivers/input/touchscreen/hxchipset/Kconfig"
+#[20200429][TracyChui]Touch driver porting start
+#source "drivers/input/touchscreen/hxchipset/Kconfig"
+source "drivers/input/touchscreen/hxchipset83112b/Kconfig"
+#[20200429][TracyChui]Touch driver porting end
config TOUCHSCREEN_EKTF3XXX_CHIPSET
bool "Elan EKTF3XXX touchpanel CHIPSET"
diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 59cf967..a164c99 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -106,6 +106,9 @@
obj-$(CONFIG_TOUCHSCREEN_ROHM_BU21023) += rohm_bu21023.o
obj-$(CONFIG_TOUCHSCREEN_FTS) += focaltech_touch/
obj-$(CONFIG_TOUCHSCREEN_GT9XX_v28) += gt9xx_v2.8/
-obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += hxchipset/
+#[20200429][TracyChui]Touch driver porting start
+# obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += hxchipset/
+obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += hxchipset83112b/
+#[20200429][TracyChui]Touch driver porting end
obj-$(CONFIG_TOUCHSCREEN_EKTF3XXX_CHIPSET) += ektf3xxx/
obj-$(CONFIG_TOUCHSCREEN_RAYDIUM_CHIPSET) += raydium_wt030/
diff --git a/drivers/input/touchscreen/hxchipset83112b/FP_DJN_Arima_CID0804_D02_C14_20190903.i b/drivers/input/touchscreen/hxchipset83112b/FP_DJN_Arima_CID0804_D02_C14_20190903.i
new file mode 100644
index 0000000..fdb82bf
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/FP_DJN_Arima_CID0804_D02_C14_20190903.i
@@ -0,0 +1,4096 @@
+0x48,0x00,0x01,0x94,0x48,0x00,0x00,0x30,0x48,0x00,0x00,0x2E,0x48,0x00,0x00,0x2C,
+0x48,0x00,0x00,0x2A,0x48,0x00,0x00,0x49,0x48,0x00,0x00,0x69,0x48,0x00,0x00,0x89,
+0x48,0x00,0x00,0xA9,0x48,0x00,0x00,0xDE,0x48,0x00,0x01,0x38,0x48,0x00,0x01,0x3A,
+0x48,0x00,0x01,0x3C,0x48,0x00,0x01,0x3E,0x48,0x00,0x01,0x2C,0x48,0x00,0x01,0x3E,
+0x50,0x03,0x00,0x40,0x50,0x03,0x00,0x40,0x50,0x03,0x00,0x40,0x8E,0x03,0x00,0x40,
+0x96,0x03,0x00,0x40,0x9E,0x03,0x00,0x40,0xA4,0x03,0x00,0x40,0xAC,0x03,0x00,0x40,
+0xB2,0x03,0x00,0x40,0xD5,0x00,0x3A,0x0F,0x94,0x3C,0x3A,0xFF,0xEF,0xBC,0x42,0x2E,
+0x80,0x20,0x3A,0x2F,0x88,0x3C,0x64,0x02,0x00,0x02,0x64,0x12,0xA4,0x02,0x64,0x22,
+0x04,0x02,0x3A,0x0F,0x88,0x3C,0x9E,0x02,0x64,0x02,0x00,0x03,0x64,0x00,0x00,0x08,
+0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,0x46,0xF4,0x00,0x00,0x58,0xF7,
+0x83,0x50,0x4A,0x00,0x3C,0x00,0xD5,0x00,0x3A,0x0F,0x94,0x3C,0x3A,0xFF,0xEF,0xBC,
+0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,0x64,0x02,0x00,0x02,0x64,0x12,0xA4,0x02,
+0x64,0x22,0x04,0x02,0x3A,0x0F,0x88,0x3C,0x9E,0x02,0x64,0x02,0x00,0x03,0x64,0x00,
+0x00,0x08,0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,0x84,0x05,0x46,0xF4,
+0x00,0x00,0x58,0xF7,0x83,0x50,0x4A,0x00,0x3C,0x00,0xD5,0x00,0x3A,0x0F,0x94,0x3C,
+0x3A,0xFF,0xEF,0xBC,0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,0x64,0x02,0x00,0x02,
+0x64,0x12,0xA4,0x02,0x64,0x22,0x04,0x02,0x3A,0x0F,0x88,0x3C,0x9E,0x02,0x64,0x02,
+0x00,0x03,0x64,0x00,0x00,0x08,0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,
+0x84,0x06,0x46,0xF4,0x00,0x00,0x58,0xF7,0x83,0x50,0x4A,0x00,0x3C,0x00,0xD5,0x00,
+0x3A,0x0F,0x94,0x3C,0x3A,0xFF,0xEF,0xBC,0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,
+0x64,0x02,0x00,0x02,0x64,0x12,0xA4,0x02,0x64,0x22,0x04,0x02,0x3A,0x0F,0x88,0x3C,
+0x9E,0x02,0x64,0x02,0x00,0x03,0x64,0x00,0x00,0x08,0x80,0x5F,0xEF,0xFC,0x43,0xFF,
+0x88,0x09,0xB6,0x5F,0x84,0x07,0x46,0xF4,0x00,0x00,0x58,0xF7,0x83,0x50,0x4A,0x00,
+0x3C,0x00,0x3A,0x1F,0xA4,0x3C,0x3A,0xFF,0xEF,0xBC,0x42,0x6E,0x80,0x20,0x3A,0x6F,
+0x98,0x3C,0x64,0x62,0x00,0x02,0x64,0x72,0xA4,0x02,0x9D,0xFC,0x64,0x82,0x04,0x02,
+0x3A,0x6F,0xA0,0x3C,0x9F,0xB2,0x64,0x62,0x00,0x03,0x64,0x00,0x00,0x08,0x80,0xDF,
+0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0xDF,0x46,0xF4,0x00,0x00,0x58,0xF7,0x83,0x50,
+0x4B,0xE0,0x3C,0x01,0x05,0xFF,0x80,0x00,0x3A,0x6F,0xA0,0x04,0x64,0x62,0x00,0x03,
+0x64,0x00,0x00,0x08,0x64,0x72,0xA4,0x03,0x64,0x82,0x04,0x03,0x3A,0x6F,0x98,0x04,
+0x42,0x6E,0x80,0x21,0x3A,0xFF,0xEF,0x84,0x3A,0x1F,0xA4,0x04,0x64,0x00,0x00,0x04,
+0x3A,0x0F,0x94,0x3C,0x3A,0xFF,0xEF,0xBC,0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,
+0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,0x84,0x00,0x46,0x14,0x00,0x00,
+0x58,0x10,0x83,0x8E,0xDD,0x21,0x05,0xFF,0x80,0x00,0x3A,0x2F,0x88,0x04,0x42,0x2E,
+0x80,0x21,0x3A,0xFF,0xEF,0x84,0x3A,0x0F,0x94,0x04,0x64,0x00,0x00,0x04,0x3A,0x1F,
+0x94,0x3C,0x3A,0xFF,0xEF,0xBC,0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,0x64,0x12,
+0x00,0x02,0x64,0x22,0xA4,0x02,0x64,0x32,0x04,0x02,0x3A,0x1F,0x8C,0x3C,0x9E,0x4A,
+0x64,0x12,0x00,0x03,0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,0x46,0x14,
+0x00,0x00,0x58,0x10,0x80,0x4C,0x38,0x10,0x82,0x02,0xDD,0x21,0x05,0xFF,0x80,0x00,
+0x3A,0x0F,0x88,0x04,0x64,0x02,0x00,0x43,0x64,0x00,0x00,0x08,0x64,0x02,0x00,0x03,
+0x64,0x12,0xA4,0x03,0x64,0x22,0x04,0x03,0x3A,0x2F,0x88,0x04,0x42,0x2E,0x80,0x21,
+0x3A,0xFF,0xEF,0x84,0x3A,0x1F,0x94,0x04,0x3A,0x0F,0x80,0x04,0x64,0x00,0x00,0x04,
+0x3A,0x0F,0x80,0x3C,0x84,0x05,0xD5,0xC4,0x3A,0x0F,0x80,0x3C,0x84,0x01,0xD5,0xC0,
+0x3A,0x0F,0x80,0x3C,0x84,0x02,0xD5,0xBC,0x3A,0x0F,0x80,0x3C,0x84,0x03,0xD5,0xB8,
+0x3A,0x0F,0x80,0x3C,0x84,0x04,0xD5,0xB4,0x3A,0x0F,0x94,0x3C,0x3A,0xFF,0xEF,0xBC,
+0x42,0x2E,0x80,0x20,0x3A,0x2F,0x88,0x3C,0x64,0x02,0x00,0x02,0x64,0x12,0xA4,0x02,
+0x64,0x22,0x04,0x02,0x3A,0x0F,0x88,0x3C,0x9E,0x02,0x64,0x02,0x00,0x03,0x64,0x00,
+0x00,0x08,0x80,0x5F,0xEF,0xFC,0x43,0xFF,0x88,0x09,0xB6,0x5F,0x84,0x0F,0x46,0x14,
+0x00,0x00,0x58,0x10,0x83,0x50,0xDD,0x21,0x05,0xFF,0x80,0x00,0x3A,0x0F,0x88,0x04,
+0x64,0x02,0x00,0x03,0x64,0x00,0x00,0x08,0x64,0x12,0xA4,0x03,0x64,0x22,0x04,0x03,
+0x3A,0x2F,0x88,0x04,0x42,0x2E,0x80,0x21,0x3A,0xFF,0xEF,0x84,0x3A,0x0F,0x94,0x04,
+0x64,0x00,0x00,0x04,0x40,0x00,0x00,0x09,0x47,0xD4,0x00,0x0B,0x59,0xDE,0x82,0x08,
+0x3E,0x0F,0xF5,0x0C,0x42,0x0E,0x00,0x21,0x3F,0xC8,0x00,0x00,0x3F,0xF8,0x0D,0xF8,
+0x49,0x00,0x00,0x1E,0x49,0x00,0x00,0x18,0x49,0x00,0x11,0xA6,0xD5,0x00,0x92,0x00,
+0xD5,0x00,0x84,0x00,0x64,0x05,0xE4,0x03,0x46,0x04,0x00,0x00,0x58,0x00,0x00,0x00,
+0x64,0x02,0x24,0x03,0x64,0x02,0x00,0x02,0x66,0x00,0x00,0x06,0x64,0x02,0x00,0x03,
+0xEA,0x5C,0xDD,0x9E,0xFC,0x00,0x49,0xFF,0xFF,0xEE,0xFC,0x80,0x46,0x04,0x00,0x00,
+0x58,0x00,0x00,0x00,0xEA,0x37,0x64,0x04,0xC0,0x03,0xEA,0x5C,0xDD,0x9E,0xFC,0x00,
+0x49,0x00,0x44,0xF2,0xFC,0x80,0xFC,0x00,0x49,0x00,0x4A,0x1C,0xFC,0x80,0x40,0x00,
+0x00,0x09,0xDD,0x9E,0xFC,0x00,0x49,0x00,0x45,0x49,0xFC,0x80,0x40,0x00,0x00,0x09,
+0xDD,0x9E,0xFC,0x00,0x49,0x00,0x47,0xEA,0xFC,0x80,0x00,0x00,0x80,0xA0,0x94,0x91,
+0x88,0x02,0x92,0x00,0x1A,0x12,0x80,0x01,0xD8,0xFE,0xDD,0x9E,0x80,0xA0,0x80,0x62,
+0x96,0x8F,0x8A,0x62,0xC2,0x06,0x88,0x02,0x18,0x12,0x80,0x01,0xD8,0xFE,0x8A,0x02,
+0xC3,0x06,0x88,0x02,0x88,0x03,0x3A,0x12,0x84,0x24,0xD8,0xFE,0xDD,0x9E,0x80,0xA2,
+0x80,0x60,0x96,0x0F,0x8A,0x60,0xC0,0x08,0x88,0x02,0x28,0x42,0x80,0x01,0x18,0x40,
+0x80,0x01,0xD8,0xFC,0x8A,0x02,0xC3,0x08,0x88,0x02,0x88,0x03,0x3A,0x42,0x90,0x04,
+0x3A,0x40,0x90,0x24,0xD8,0xFC,0xDD,0x9E,0xFC,0x01,0xF0,0x81,0xF0,0x01,0x8E,0x01,
+0xF0,0x81,0xC0,0x03,0xEA,0x6E,0xD5,0xFB,0xFC,0x81,0xFC,0x01,0xF0,0x81,0xF0,0x01,
+0x8E,0x01,0xF0,0x81,0xC0,0x05,0xEA,0x33,0xC0,0x03,0xEA,0x6E,0xD5,0xF9,0xFC,0x81,
+0xFC,0x01,0x84,0xCE,0xF0,0x81,0xF0,0x01,0x8E,0xC1,0xDD,0x4A,0x97,0xB0,0x84,0x05,
+0xDD,0x50,0xCE,0xFA,0xFC,0x81,0x80,0x3F,0x3E,0x08,0x03,0x08,0x9A,0x08,0x5C,0xF0,
+0x00,0x3D,0xE8,0x05,0x3C,0x1F,0xFF,0x7F,0x84,0x01,0xDD,0x9E,0x3E,0x08,0x0D,0xF8,
+0x8A,0x01,0x3C,0x1D,0xFF,0x7F,0xE2,0x20,0xE8,0x03,0x3C,0x0F,0xFF,0x7F,0x84,0x00,
+0xDD,0x9E,0xFC,0x00,0xDD,0x4B,0x5A,0x00,0x08,0x18,0x5A,0x00,0x06,0x16,0xEA,0xB2,
+0xEB,0x22,0xEB,0x2F,0xEB,0x57,0xEA,0x67,0xDD,0x48,0x2E,0x07,0xFD,0x71,0x3E,0x07,
+0xFD,0x77,0x46,0x21,0x00,0x05,0x58,0x21,0x08,0x88,0xEA,0x5A,0x46,0x11,0x00,0x05,
+0x58,0x10,0x86,0xD8,0xD5,0x06,0xEA,0x5A,0xEB,0x22,0xEB,0x2F,0xEB,0x57,0xEA,0x67,
+0xDD,0x48,0x84,0x00,0xDD,0x55,0xDD,0x4B,0x5A,0x00,0x08,0x17,0x5A,0x00,0x06,0x15,
+0x84,0xA0,0x80,0x05,0xEB,0x6F,0x58,0x31,0x81,0x44,0xDD,0x4F,0x50,0x12,0x8F,0x34,
+0x88,0x23,0xA4,0x48,0x8C,0xA2,0xE6,0x21,0x88,0x0F,0x96,0x01,0xDA,0xF8,0x5C,0xF0,
+0x00,0xD9,0xE9,0x02,0xD5,0x00,0xFC,0x80,0xFC,0x41,0x3F,0xCF,0xFD,0xD8,0x84,0x00,
+0x3E,0x07,0xFD,0x0A,0x49,0x00,0x4B,0xB8,0x3E,0x07,0xFD,0x17,0x84,0x20,0xF1,0x81,
+0x4E,0x02,0x00,0xB6,0xEB,0x5A,0x02,0x50,0x80,0x00,0x44,0x10,0xA5,0x5A,0x46,0x71,
+0x00,0x00,0x58,0x73,0x80,0x00,0x4C,0x50,0x80,0xAB,0xEB,0x5A,0x02,0x50,0x80,0x00,
+0x44,0x10,0xA3,0x3A,0x4C,0x50,0x80,0xA4,0x9E,0x41,0xE6,0x27,0xE9,0x04,0x5A,0x08,
+0x09,0x14,0xD5,0x06,0x84,0x21,0x3E,0x17,0xFD,0x0A,0x5A,0x08,0x01,0x0E,0xB8,0x00,
+0x5A,0x00,0x08,0x07,0x5A,0x00,0x06,0x05,0xEB,0x54,0xEA,0xAC,0xD5,0x03,0xEB,0x51,
+0xEA,0xFA,0xF0,0x81,0xD5,0x0E,0x54,0x10,0x00,0xF7,0x5A,0x18,0x02,0x05,0xEB,0x54,
+0xEA,0x72,0xD5,0xF8,0x5A,0x18,0x03,0x04,0xB8,0x1A,0xD5,0xF4,0x5A,0x00,0x08,0xFE,
+0xB0,0x41,0x3E,0x0F,0xFD,0x17,0x49,0x00,0x07,0x09,0xF5,0x01,0x46,0x11,0x00,0x04,
+0x58,0x10,0x84,0xB8,0x84,0xC1,0xD1,0x07,0x50,0x10,0x85,0xF0,0x40,0x62,0x84,0x03,
+0x5C,0x63,0x00,0x01,0xEA,0xAE,0xEA,0xD1,0x84,0x20,0xFE,0x84,0xEB,0x81,0x58,0x00,
+0x00,0x04,0x94,0x91,0xDD,0x42,0xB8,0x00,0x5A,0x08,0x08,0x08,0xEA,0x5A,0xEB,0x5A,
+0xEB,0x30,0xF2,0x01,0xDD,0x48,0xD5,0x46,0x5A,0x00,0x06,0xFA,0x84,0x00,0xF1,0x01,
+0x49,0x00,0x07,0x18,0xC8,0xF4,0xF1,0x01,0xB8,0x1A,0x4C,0x10,0x40,0x0E,0x46,0x91,
+0x00,0x04,0x58,0x94,0x8A,0xA8,0xF0,0x01,0x80,0x29,0x84,0x40,0x49,0x00,0x41,0x48,
+0x14,0x9F,0x80,0x01,0xD5,0x09,0xEB,0x54,0xEA,0x72,0x4C,0x10,0x3F,0xF2,0x84,0x01,
+0x49,0x00,0x07,0x00,0xC8,0xED,0x2F,0x30,0x00,0x11,0x2F,0x10,0x00,0x10,0x50,0x03,
+0x00,0x12,0x94,0x41,0x42,0x60,0x98,0x73,0x94,0x82,0x84,0x00,0x05,0x2F,0x80,0x01,
+0x40,0x98,0x84,0x08,0x95,0xB1,0x80,0xA0,0x80,0x80,0x9C,0x6C,0xE2,0x93,0x41,0x03,
+0x84,0x00,0xE8,0x10,0x98,0xC6,0x88,0x72,0x84,0x20,0xE2,0x31,0xE8,0x07,0x38,0xA1,
+0x85,0x01,0x38,0xA8,0x05,0x09,0x8C,0x21,0xD5,0xF9,0x8C,0x81,0x88,0xA9,0x88,0x02,
+0xD5,0xED,0xEA,0xAE,0x2E,0x10,0x00,0x10,0x42,0x01,0x04,0x24,0x88,0x41,0x8C,0x02,
+0x40,0x03,0x80,0x20,0x84,0x20,0x94,0x91,0xDD,0x42,0xEA,0x84,0x54,0x00,0x00,0xF7,
+0x5A,0x08,0x01,0x04,0x49,0x00,0x00,0xCC,0x49,0x00,0x4B,0x66,0xFC,0xC1,0xFC,0x00,
+0xDD,0x4D,0x96,0x04,0xC0,0x09,0xEA,0x33,0xC0,0x08,0x2E,0x07,0xFE,0x79,0xC8,0x05,
+0x49,0x00,0x4A,0x6E,0xD5,0x02,0xEA,0x6D,0xFC,0x80,0x2E,0x17,0xFD,0x1C,0xFE,0x0C,
+0x96,0x01,0xDD,0x9E,0xFC,0x60,0xDD,0x57,0x04,0x70,0x00,0x3F,0x92,0xF8,0x96,0x78,
+0x5A,0x10,0xAA,0x06,0x5A,0x10,0xCC,0x04,0x5A,0x18,0xDD,0x46,0x04,0x60,0x00,0x3F,
+0x40,0x03,0x40,0x09,0xEA,0xEB,0x96,0x31,0x40,0x90,0x20,0x09,0x97,0xB0,0xEA,0x4A,
+0x5A,0x70,0xCC,0x19,0x5A,0x70,0xDD,0x28,0x5A,0x78,0xAA,0x2D,0x84,0xE0,0x46,0xC1,
+0x00,0x07,0x58,0xC6,0x0F,0x80,0x96,0x38,0xE2,0x06,0xE8,0x24,0x50,0xB3,0x80,0x01,
+0x80,0x0A,0x80,0x29,0x40,0x25,0x80,0x13,0xEA,0x3A,0x38,0x06,0x1C,0x08,0x80,0xEB,
+0xD5,0xF3,0x84,0x40,0x46,0xB1,0x00,0x07,0x58,0xB5,0x8F,0x80,0x96,0x10,0xE2,0x06,
+0xE8,0x11,0x9D,0xD1,0x38,0x35,0x88,0x00,0x80,0x0A,0x96,0xB9,0x80,0x29,0xDD,0x4E,
+0x80,0x47,0xD5,0xF5,0xEB,0x61,0x00,0x30,0x0F,0x80,0x80,0x29,0x80,0x0A,0x80,0x46,
+0xDD,0x4E,0xEA,0x3E,0x83,0x81,0xB8,0x3F,0x46,0x2B,0xB0,0x00,0xEA,0xB1,0x40,0x01,
+0x01,0x15,0xB8,0xBF,0xFC,0xE0,0xFC,0x00,0xDD,0x52,0x4E,0x00,0x4C,0x03,0x84,0x62,
+0xDD,0x4E,0xF8,0x24,0x84,0x42,0xDD,0x4E,0xF8,0x21,0x84,0x43,0xDD,0x4E,0xF8,0x15,
+0xDD,0x4E,0x84,0x0A,0xDD,0x50,0xF8,0x1A,0x84,0x44,0xDD,0x4E,0xF8,0x1D,0xEA,0x3A,
+0x3E,0x07,0xFD,0x1B,0xF8,0x13,0x84,0x41,0xDD,0x4E,0x4E,0x00,0x4B,0xF3,0xFA,0x64,
+0xDD,0x4E,0xF8,0x0C,0x84,0x43,0xDD,0x4E,0x84,0x20,0x84,0x44,0x44,0x30,0x00,0x80,
+0xDD,0x53,0x83,0xFF,0xDD,0x4E,0x84,0x0A,0xDD,0x50,0x84,0x20,0x80,0x61,0xDD,0x53,
+0x83,0xFF,0x84,0x44,0xDD,0x4E,0x84,0x20,0x84,0x45,0xDD,0x53,0x83,0xFF,0xEA,0x3A,
+0x3E,0x07,0xFD,0x04,0xFC,0x80,0xFC,0x00,0x84,0x0E,0xDD,0x40,0xC8,0x1B,0xFA,0x02,
+0xDD,0x40,0xC8,0x18,0xFA,0x06,0xDD,0x40,0xC8,0x15,0x84,0x0A,0xDD,0x40,0xC8,0x12,
+0xFA,0x0A,0xDD,0x40,0xC8,0x0F,0xFA,0x13,0xDD,0x40,0xC8,0x0C,0xFA,0x0E,0xDD,0x40,
+0xC8,0x09,0xFA,0x18,0xDD,0x40,0xC8,0x06,0xFA,0x1C,0xDD,0x40,0xC8,0x03,0xDD,0x47,
+0xDD,0x40,0xEA,0x28,0x02,0x00,0x80,0x9C,0x02,0x10,0x80,0x0A,0x8A,0x01,0x44,0x10,
+0x06,0x5C,0xFE,0x0C,0x84,0x2A,0xEA,0xDD,0x92,0x04,0xFC,0x80,0xFC,0x40,0x3F,0xCF,
+0xFD,0xD8,0xEB,0x51,0x00,0x20,0x02,0xC0,0xC2,0x04,0xEB,0x51,0x10,0x20,0x02,0xC1,
+0xBD,0x11,0x5A,0x58,0x05,0x06,0x84,0x00,0xEB,0x78,0x10,0x00,0x82,0xC1,0x2E,0x47,
+0xFD,0x4B,0xEB,0x43,0x44,0x30,0x03,0xE8,0x44,0x10,0x27,0x10,0xFE,0x1C,0x42,0x02,
+0x04,0x73,0xB9,0x0C,0x84,0x8A,0x88,0x01,0x42,0x02,0x90,0x73,0xEB,0x84,0x96,0x01,
+0x12,0x00,0x87,0xA2,0x2E,0x57,0xFD,0x65,0xEB,0x61,0x00,0x00,0x00,0x80,0xEA,0x2A,
+0xFE,0x24,0x42,0x02,0x84,0x73,0x2E,0x57,0xFD,0x50,0x96,0x91,0x88,0x05,0x96,0x01,
+0xEB,0x5F,0x12,0x02,0x87,0xA3,0xEB,0x4E,0xEA,0xA4,0xEB,0x5F,0x12,0x02,0x87,0xA5,
+0xEB,0x64,0x02,0x00,0x00,0x5E,0xEB,0x5F,0x92,0x01,0x12,0x02,0x87,0xA6,0xEB,0x64,
+0x02,0x00,0x00,0x64,0xEB,0x5F,0x92,0x01,0x12,0x02,0x87,0xA7,0xEA,0x40,0xEB,0x5F,
+0x12,0x02,0x87,0xA8,0xB8,0x19,0xEB,0x5F,0x96,0x01,0x12,0x02,0x87,0xA9,0x3C,0x03,
+0xFF,0x1A,0xEB,0x5F,0x12,0x02,0x87,0xAA,0xEA,0xE3,0xEB,0x5F,0x12,0x02,0x87,0xAB,
+0xEA,0xC9,0xEB,0x5F,0x12,0x02,0x87,0xAC,0x3C,0x03,0xFE,0xFE,0xEB,0x5F,0x12,0x02,
+0x87,0xB0,0x2E,0x07,0xFD,0x43,0xEB,0x5F,0x12,0x02,0x87,0xB1,0xEB,0x61,0x12,0x20,
+0x07,0xB2,0xEB,0x51,0x00,0x00,0x02,0xC1,0xEB,0x72,0x12,0x01,0x07,0xB3,0x2E,0x27,
+0xFD,0x29,0xEA,0xE6,0xEB,0x01,0xEB,0x72,0x12,0x01,0x07,0xB4,0x2E,0x27,0xFD,0x6C,
+0xEB,0x61,0x02,0x00,0x07,0xB5,0xEB,0x01,0xEB,0x72,0x96,0x01,0x12,0x01,0x07,0xB5,
+0x2E,0x27,0xFD,0x6E,0xEA,0x2B,0xFE,0x1C,0x42,0x01,0x10,0x73,0xEB,0x72,0x96,0x01,
+0x12,0x01,0x07,0xB6,0x3C,0x03,0xFF,0x38,0xEB,0x72,0x12,0x01,0x07,0xB7,0x3C,0x03,
+0xFF,0x36,0xEB,0x72,0x12,0x01,0x07,0xB8,0xBA,0x10,0x2E,0x07,0xFD,0x22,0xEB,0x01,
+0xEB,0x72,0x96,0x01,0x12,0x01,0x07,0xB9,0xEB,0x61,0x02,0x20,0x07,0xBA,0x2E,0x47,
+0xFD,0x68,0x2E,0x07,0xFD,0x55,0xFE,0x0C,0x42,0x02,0x0C,0x73,0x88,0x02,0x96,0x01,
+0xEB,0x72,0x12,0x01,0x07,0xBA,0xEB,0x72,0x3C,0x03,0xFE,0xFC,0x12,0x01,0x07,0xBE,
+0x3C,0x03,0xFE,0xC3,0x12,0x01,0x07,0xBE,0x2E,0x27,0xFF,0xA4,0x42,0x01,0x18,0x0B,
+0xC0,0x0B,0x2E,0x38,0x02,0xD4,0x2E,0x08,0x02,0xD5,0x42,0x01,0x84,0x73,0xEB,0x84,
+0x96,0x01,0x12,0x00,0x87,0xBF,0xEB,0x4E,0x02,0x00,0x02,0xD5,0xEB,0x84,0x96,0x92,
+0x12,0x00,0x81,0xD8,0x4E,0x25,0x00,0x17,0x2E,0x00,0x00,0x65,0x92,0x07,0x4E,0x02,
+0x00,0x76,0xEB,0x4A,0xEA,0xD1,0xEB,0x57,0x58,0x21,0x00,0x00,0xFE,0x44,0xEB,0x4D,
+0x8C,0x22,0x40,0x11,0x04,0x20,0xEB,0x72,0x58,0x21,0x0F,0x44,0xDD,0x48,0x48,0x00,
+0x00,0x66,0x84,0x0E,0xDD,0x40,0xC8,0xE9,0xFA,0x02,0xDD,0x40,0xC8,0xE6,0xFA,0x06,
+0xDD,0x40,0xC8,0xE3,0x84,0x0A,0xDD,0x40,0xC8,0xE0,0xFA,0x0A,0xDD,0x40,0xC8,0xDD,
+0xFA,0x13,0xDD,0x40,0xC8,0xDA,0xFA,0x0E,0xDD,0x40,0xC8,0xD7,0xFA,0x18,0xDD,0x40,
+0xC8,0xD4,0xFA,0x1C,0xDD,0x40,0xC8,0xD1,0xDD,0x47,0xDD,0x40,0xC8,0xCE,0xB8,0x12,
+0x5A,0x08,0x01,0xCC,0x2E,0x60,0x00,0x10,0xB8,0x00,0x46,0x41,0x00,0x00,0x58,0x42,
+0x00,0x00,0x5A,0x08,0x08,0x0C,0x2E,0x30,0x00,0x11,0x42,0x21,0x98,0x24,0x9C,0x52,
+0x8A,0x46,0x40,0x12,0x04,0x20,0x8C,0x42,0xD5,0x09,0x2E,0x00,0x00,0x65,0x96,0x37,
+0xFE,0x34,0x8C,0x02,0x40,0x12,0x00,0x20,0x98,0x86,0x40,0x62,0x08,0x20,0xEB,0x4D,
+0xEB,0x72,0x58,0x21,0x0F,0x44,0xDD,0x48,0x46,0x97,0xFF,0xFF,0x80,0x26,0xEB,0x4D,
+0xEB,0x72,0x58,0x21,0x03,0xB0,0xDD,0x48,0x84,0xC0,0x50,0x94,0x8F,0xFF,0x46,0xA1,
+0x00,0x00,0x58,0xA5,0x00,0x04,0xEA,0xB0,0xE2,0xC0,0x4E,0xF2,0xFF,0x97,0xEA,0x3C,
+0x40,0x70,0x24,0x00,0x42,0x73,0x00,0x73,0x80,0x06,0x40,0x75,0x1C,0x20,0x49,0x00,
+0x23,0xF1,0x8C,0xC1,0xAC,0x38,0x97,0xB0,0xD5,0xEF,0xFC,0xC0,0xFC,0x60,0x84,0x07,
+0x46,0x11,0x00,0x07,0x10,0x00,0x8B,0x0E,0x46,0x11,0x00,0x07,0x10,0x00,0x8B,0x22,
+0x46,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x5A,0x00,0xA5,0x04,0x48,0x00,0x01,0x87,
+0xEB,0x61,0x04,0x50,0x03,0xC0,0xEB,0x04,0x97,0x69,0x4C,0x50,0x00,0xDA,0xEB,0x7E,
+0x00,0x00,0x08,0x3B,0xEB,0x5D,0x10,0x00,0x8B,0x8B,0xEB,0x7E,0x00,0x00,0x08,0x3C,
+0xEB,0x5D,0x10,0x00,0x8B,0x8C,0xEB,0x7E,0x00,0x00,0x08,0x3D,0xEB,0x5D,0x10,0x00,
+0x8B,0x8D,0xEB,0x7E,0x00,0x00,0x08,0x3E,0xEB,0x5D,0x10,0x00,0x8B,0x8E,0xEB,0x7E,
+0x00,0x00,0x08,0x3F,0xEB,0x5D,0x10,0x00,0x8B,0x8F,0xEB,0x7E,0x02,0x00,0x04,0x0F,
+0xEB,0x5D,0x12,0x00,0x85,0xB7,0xEB,0x7E,0x02,0x00,0x04,0x10,0xEB,0x5D,0x12,0x00,
+0x85,0xB8,0xEB,0x7E,0x02,0x00,0x04,0x11,0xEB,0x5D,0x12,0x00,0x85,0xB9,0xEB,0x7E,
+0x04,0x00,0x01,0xF8,0xEB,0x5D,0x14,0x00,0x82,0xCC,0xEB,0x7E,0x02,0x00,0x04,0x0D,
+0xEB,0x5D,0x12,0x00,0x85,0xB5,0xEB,0x7E,0x02,0x00,0x04,0x0E,0xEB,0x5D,0x12,0x00,
+0x85,0xB6,0xEB,0x7E,0x00,0x00,0x09,0xE7,0xEB,0x5D,0x10,0x00,0x8D,0x37,0xEB,0x7E,
+0x00,0x00,0x09,0xE8,0xEB,0x5D,0x10,0x00,0x8D,0x38,0xEB,0x7E,0x00,0x00,0x09,0xE9,
+0xEB,0x5D,0x10,0x00,0x8D,0x39,0xEB,0x7E,0x00,0x00,0x09,0xEA,0xEB,0x5D,0x10,0x00,
+0x8D,0x3A,0xEB,0x7E,0x00,0x00,0x09,0xEB,0xEB,0x5D,0x10,0x00,0x8D,0x3B,0xEB,0x7E,
+0x02,0x00,0x04,0xE5,0xEB,0x5D,0x12,0x00,0x86,0x8D,0xEB,0x7E,0x02,0x00,0x04,0xE6,
+0xEB,0x5D,0x12,0x00,0x86,0x8E,0xEB,0x7E,0x02,0x00,0x04,0xE7,0xEB,0x5D,0x12,0x00,
+0x86,0x8F,0xEB,0x7E,0x04,0x00,0x02,0x63,0xEB,0x5D,0x14,0x00,0x83,0x37,0xEB,0x7E,
+0x02,0x00,0x04,0xE3,0xEB,0x5D,0x12,0x00,0x86,0x8B,0xEB,0x7E,0x02,0x00,0x04,0xE4,
+0xEB,0x5D,0x12,0x00,0x86,0x8C,0x44,0x20,0xC0,0x00,0x44,0x00,0x00,0x80,0x46,0x11,
+0x00,0x07,0x58,0x10,0x80,0x00,0xDD,0x48,0x44,0x00,0x01,0x80,0x46,0x11,0x00,0x07,
+0x58,0x10,0x80,0x86,0x44,0x20,0xC1,0x00,0xDD,0x48,0xFA,0x1A,0x46,0x11,0x00,0x07,
+0x58,0x10,0x82,0x66,0x44,0x20,0xC2,0xE0,0xDD,0x48,0x44,0x00,0x00,0x38,0x46,0x11,
+0x00,0x07,0x58,0x10,0x83,0x48,0x44,0x20,0xCA,0x48,0xDD,0x48,0xDD,0x47,0x46,0x11,
+0x00,0x07,0x58,0x10,0x83,0x80,0x44,0x20,0xCA,0x80,0xDD,0x48,0xFA,0x08,0x46,0x11,
+0x00,0x07,0x58,0x10,0x82,0x06,0x44,0x20,0xC2,0x80,0xDD,0x48,0xFA,0x08,0x46,0x11,
+0x00,0x07,0x58,0x10,0x82,0x36,0x44,0x20,0xC2,0xB0,0xDD,0x48,0xFA,0x08,0x46,0x11,
+0x00,0x07,0x58,0x10,0x82,0x1E,0x44,0x20,0xC2,0x98,0xDD,0x48,0xFA,0x08,0x46,0x11,
+0x00,0x07,0x58,0x10,0x82,0x4E,0x44,0x20,0xC2,0xC8,0xDD,0x48,0x46,0x00,0x00,0x0C,
+0x04,0x00,0x00,0xCF,0x46,0x11,0x00,0x07,0x14,0x00,0x80,0xA5,0xD5,0x04,0xEB,0x61,
+0x04,0x00,0x00,0xA5,0x3C,0x0F,0xFF,0x88,0x84,0x08,0x46,0x11,0x00,0x07,0x10,0x00,
+0x80,0x02,0x84,0x04,0x46,0x11,0x00,0x07,0x10,0x00,0x80,0x03,0x46,0x21,0x00,0x07,
+0x58,0x21,0x00,0x86,0x44,0x00,0x01,0x80,0xEA,0x4C,0xDD,0x48,0x2E,0x00,0x00,0x11,
+0x3E,0x00,0x01,0x29,0x2E,0x10,0x00,0x10,0x88,0x01,0x3E,0x10,0x01,0x28,0x2E,0x20,
+0x00,0x12,0x84,0xA0,0x3E,0x00,0x01,0x31,0x45,0x00,0xE0,0x00,0xEB,0x61,0x3E,0x20,
+0x01,0x2B,0x14,0x50,0x00,0xB1,0x80,0x45,0x44,0x90,0xFF,0xFF,0x81,0x50,0x44,0xB0,
+0x00,0x48,0x46,0xC1,0x00,0x07,0x58,0xC6,0x05,0x00,0x44,0x40,0x00,0x6C,0x86,0x23,
+0x45,0x20,0x00,0xD8,0x44,0xDF,0xFF,0x94,0x45,0x30,0x05,0x10,0x38,0x08,0x14,0x01,
+0x4C,0x04,0x80,0x32,0x80,0xCC,0x42,0x61,0x2C,0x73,0x84,0x60,0x40,0xE5,0x14,0x00,
+0x38,0x17,0x0D,0x01,0x95,0xD9,0x9E,0x09,0x41,0x40,0x12,0x96,0x40,0x8A,0x46,0x96,
+0x5C,0xF0,0x81,0x45,0x40,0x8A,0x00,0x13,0xE8,0x05,0x42,0x04,0x34,0x73,0x96,0x01,
+0xD5,0x11,0x52,0x00,0x82,0x88,0x40,0x10,0x10,0x16,0x50,0x00,0x00,0x6C,0x96,0x01,
+0x4E,0x83,0x00,0x07,0x50,0x1A,0x00,0x02,0x42,0x00,0xC8,0x73,0xD5,0x05,0x5A,0x80,
+0x02,0x04,0x42,0x04,0x48,0x73,0x8C,0x61,0x38,0x03,0x1C,0x09,0x5A,0x38,0x24,0xDA,
+0x8C,0x41,0x96,0x91,0x50,0x52,0x80,0x48,0x4C,0x59,0xFF,0xCA,0x46,0x00,0x00,0x0C,
+0x04,0x00,0x02,0xC3,0x46,0x11,0x00,0x07,0x14,0x00,0x83,0xF7,0x46,0x00,0x00,0x0C,
+0x02,0x00,0x05,0x85,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xED,0x46,0x00,0x00,0x0C,
+0x02,0x00,0x05,0x84,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xEC,0x46,0x00,0x00,0x0C,
+0x04,0x00,0x02,0xC1,0x46,0x11,0x00,0x07,0x14,0x00,0x83,0xF5,0x46,0x00,0x00,0x0C,
+0x46,0x11,0x00,0x07,0x04,0x00,0x02,0xC0,0x14,0x00,0x83,0xF4,0xEA,0x9B,0x44,0x00,
+0x72,0xC0,0x46,0x11,0x00,0x07,0x14,0x00,0x80,0xB0,0xFC,0xE0,0xFC,0x21,0x46,0x69,
+0x00,0x08,0x44,0x70,0x35,0xCA,0x12,0x73,0x00,0x08,0xEA,0x4A,0xC8,0x20,0x12,0x73,
+0x00,0x08,0x46,0x10,0x00,0x0C,0x00,0x10,0x81,0x03,0xEA,0x5B,0xC1,0x13,0xF0,0x81,
+0x49,0xFF,0xFC,0xAB,0x46,0x00,0x00,0x0C,0x00,0x10,0x01,0x06,0xF0,0x01,0xC9,0x04,
+0x44,0x00,0xE8,0x00,0xD5,0x05,0x5A,0x18,0x02,0x06,0x44,0x00,0xEC,0x00,0x49,0x00,
+0x3B,0x57,0xEA,0xE9,0x12,0x13,0x00,0x08,0x96,0x00,0xD5,0x03,0x44,0x00,0x00,0xF0,
+0xFC,0xA1,0xFC,0x00,0x46,0x09,0x00,0x08,0xEA,0xE9,0x12,0x10,0x00,0x08,0xEA,0xB9,
+0x02,0x01,0x00,0x72,0x42,0x30,0x0C,0x0B,0xCB,0x34,0x02,0x11,0x00,0x72,0x42,0x00,
+0x90,0x0B,0xC8,0x31,0x02,0x11,0x00,0x72,0xEA,0xD7,0xC9,0x2E,0x2E,0x17,0xFF,0xA3,
+0x42,0x00,0x88,0x0B,0xC8,0x03,0xEB,0x2B,0xD5,0x06,0x49,0x00,0x3B,0xF8,0x44,0x00,
+0x00,0xF1,0xD5,0x22,0xB4,0x02,0x96,0x16,0xC0,0xFE,0x46,0x09,0x00,0x08,0x44,0x20,
+0x35,0xCA,0x12,0x20,0x00,0x08,0x42,0x20,0x8C,0x0B,0x80,0x20,0xCA,0x04,0xEA,0xB9,
+0xEB,0x2B,0xD5,0x06,0x49,0x00,0x3B,0xEC,0x44,0x00,0x00,0xF2,0xD5,0x0D,0xB4,0x02,
+0x92,0x0C,0x96,0x0F,0x5A,0x08,0x03,0xFD,0x44,0x00,0x35,0xCA,0x12,0x00,0x80,0x08,
+0x84,0x00,0xD5,0x02,0x80,0x03,0xFC,0x80,0xFC,0x00,0x5C,0xF0,0x00,0x31,0x4E,0xF2,
+0x01,0x56,0x3E,0xFF,0x5C,0xB8,0x38,0x07,0x81,0x01,0x40,0xF0,0x3C,0x00,0xDD,0x0F,
+0x62,0x00,0x68,0x00,0x72,0x00,0x7C,0x00,0x86,0x00,0x90,0x00,0x9A,0x00,0xAC,0x00,
+0xB6,0x00,0xC0,0x00,0xCA,0x00,0xDC,0x00,0xE6,0x00,0xF0,0x00,0xFA,0x00,0x06,0x01,
+0x10,0x01,0x1A,0x01,0x26,0x01,0x32,0x01,0x3C,0x01,0x46,0x01,0x50,0x01,0x5E,0x01,
+0x68,0x01,0x72,0x01,0x7C,0x01,0x92,0x01,0x9C,0x01,0xA6,0x01,0xB0,0x01,0xC8,0x01,
+0x9A,0x02,0xD4,0x01,0xDE,0x01,0xE8,0x01,0xFE,0x01,0x9A,0x02,0x08,0x02,0x12,0x02,
+0x1C,0x02,0x32,0x02,0x3C,0x02,0x46,0x02,0x50,0x02,0x5E,0x02,0x68,0x02,0x72,0x02,
+0x80,0x02,0xEB,0x61,0xDD,0x5E,0xF8,0x5E,0xEB,0x61,0xDD,0x5E,0x50,0x00,0x76,0xF7,
+0xF8,0x59,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x66,0x67,0xF8,0xAB,0xEB,0x61,0xDD,0x5E,
+0x50,0x00,0x7E,0xFF,0xF8,0x4F,0xEB,0x61,0xDD,0x5E,0x50,0x00,0x7E,0x6F,0xF8,0x4A,
+0xEB,0x61,0xDD,0x44,0x44,0x0F,0x6E,0x6F,0xF8,0x9C,0x84,0x04,0xDD,0x40,0x80,0xC0,
+0xC0,0x04,0x85,0xE1,0x48,0x00,0x00,0xFC,0x84,0x05,0xF8,0x8D,0xEB,0x61,0xDD,0x5E,
+0x50,0x00,0x5D,0xDE,0xF8,0x37,0xEB,0x61,0xDD,0x5E,0x50,0x00,0x5B,0xDC,0xF8,0x32,
+0xEB,0x61,0xDD,0x44,0x44,0x0F,0xBB,0xBC,0xF8,0x84,0x84,0x07,0xDD,0x40,0xC8,0xEA,
+0x84,0x08,0xDD,0x40,0x80,0xC0,0x84,0x09,0xCE,0xE5,0xF8,0x75,0xEB,0x61,0xDD,0x44,
+0x44,0x0F,0x55,0x56,0xF8,0x76,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x53,0x54,0xF8,0x71,
+0xEB,0x61,0xDD,0x44,0x44,0x0F,0x33,0x34,0xF8,0x6C,0x84,0x0C,0xDD,0x40,0x80,0xC0,
+0x84,0x0D,0xCE,0xD0,0xF8,0x60,0xEB,0x61,0xDD,0x5E,0x50,0x00,0x6E,0xEF,0xF8,0x0A,
+0xEB,0x61,0xDD,0x5E,0x50,0x00,0x6C,0xED,0xF8,0x05,0xEB,0x61,0xDD,0x5E,0x50,0x00,
+0x4C,0xCD,0x48,0x00,0x00,0xAD,0xFA,0x00,0xDD,0x40,0x80,0xC0,0xC8,0xBB,0xFA,0x01,
+0xF8,0x4A,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x88,0x89,0xF8,0x4B,0xEB,0x61,0xDD,0x44,
+0x44,0x0F,0x87,0x88,0xF8,0x46,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x77,0x78,0xF8,0x41,
+0xFA,0x04,0xDD,0x40,0x80,0xC0,0x4E,0x03,0xFF,0xA6,0xFA,0x05,0xF8,0x34,0xEB,0x61,
+0xDD,0x44,0x44,0x0F,0xAA,0xAB,0xF8,0x35,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xA9,0xAA,
+0xF8,0x30,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x99,0x9A,0xF8,0x2B,0xFA,0x07,0xDD,0x40,
+0x4E,0x03,0xFF,0x91,0xFA,0x08,0xDD,0x40,0x80,0xC0,0x4E,0x03,0xFF,0x8C,0xFA,0x09,
+0xF8,0x1A,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xAE,0xAF,0xF8,0x1B,0xEB,0x61,0xDD,0x44,
+0x44,0x0F,0xAE,0x9F,0xF8,0x16,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x9E,0x9F,0xF8,0x11,
+0xFA,0x0B,0xDD,0x40,0x4E,0x03,0xFF,0x77,0xFA,0x0C,0xDD,0x40,0x80,0xC0,0x4E,0x03,
+0xFF,0x72,0xFA,0x0D,0x48,0x00,0x00,0x68,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xAF,0xB0,
+0x48,0x00,0x00,0x55,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xAF,0xA0,0xD5,0x4F,0xEB,0x61,
+0xDD,0x44,0x44,0x0F,0x9F,0xA0,0xD5,0x4A,0xFA,0x0F,0xDD,0x40,0x4E,0x03,0xFF,0x5B,
+0xFA,0x11,0xDD,0x40,0x80,0xC0,0x4E,0x03,0xFF,0x56,0xFA,0x12,0xD5,0x4C,0xEB,0x61,
+0xDD,0x44,0x44,0x0F,0xAD,0xAE,0xD5,0x3A,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xAD,0x9E,
+0xD5,0x35,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x9D,0x9E,0xD5,0x30,0xFA,0x14,0xDD,0x40,
+0x4E,0x03,0xFF,0x41,0xFA,0x16,0xDD,0x40,0x80,0xC0,0x4E,0x03,0xFF,0x3C,0xFA,0x17,
+0xD5,0x32,0xEB,0x61,0xDD,0x44,0x44,0x0F,0xAC,0xAD,0xD5,0x20,0xEB,0x61,0xDD,0x44,
+0x44,0x0F,0xAC,0x9D,0xD5,0x1B,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x9C,0x9D,0xD5,0x16,
+0xFA,0x1A,0xDD,0x40,0x80,0xC0,0x4E,0x03,0xFF,0x26,0xFA,0x1B,0xD5,0x1C,0xEB,0x61,
+0xDD,0x44,0x44,0x0F,0x44,0x45,0xD5,0x0A,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x40,0x41,
+0xD5,0x05,0xEB,0x61,0xDD,0x44,0x44,0x0F,0x00,0x01,0x88,0x01,0xE6,0x01,0xD5,0x0F,
+0xFA,0x1D,0xDD,0x40,0x4E,0x03,0xFF,0x0F,0xFA,0x1E,0xDD,0x40,0x80,0xC0,0x4E,0x03,
+0xFF,0x0A,0xFA,0x1F,0xDD,0x40,0xE2,0xC0,0xD5,0x02,0x85,0xE0,0x80,0x0F,0xFC,0x80,
+0x92,0x00,0xFC,0x00,0x84,0x00,0xDD,0x40,0xC8,0x43,0x84,0x0B,0xDD,0x40,0xC0,0x04,
+0x44,0x00,0xAC,0xAC,0xD5,0x3F,0x84,0x0F,0xDD,0x40,0xC0,0x04,0x44,0x00,0x13,0x13,
+0xD5,0x39,0xFA,0x03,0xDD,0x40,0xC0,0x04,0x44,0x00,0x78,0x78,0xD5,0x33,0x84,0x07,
+0xDD,0x40,0xC0,0x04,0x44,0x00,0x22,0x22,0xD5,0x2D,0xFA,0x07,0xDD,0x40,0xC0,0x04,
+0x44,0x00,0x55,0x55,0xD5,0x27,0xFA,0x0B,0xDD,0x40,0xC0,0x04,0x44,0x00,0x51,0x51,
+0xD5,0x21,0xFA,0x0F,0xDD,0x40,0xC0,0x04,0x44,0x00,0x50,0x50,0xD5,0x1B,0xFA,0x14,
+0xDD,0x40,0xC0,0x04,0x44,0x00,0x52,0x52,0xD5,0x15,0xFA,0x19,0xDD,0x40,0xC0,0x04,
+0x44,0x00,0x53,0x63,0xD5,0x0F,0xFA,0x1D,0xDD,0x40,0xC0,0x04,0x44,0x00,0xBB,0xBB,
+0xD5,0x09,0x84,0x03,0xDD,0x40,0xC0,0x04,0x44,0x00,0x01,0x91,0xD5,0x03,0x44,0x00,
+0x09,0x09,0x46,0x11,0x00,0x07,0xEA,0x30,0xFC,0x80,0xFC,0x00,0x3F,0xCF,0xFD,0xF8,
+0xEB,0x81,0x58,0x00,0x06,0x04,0x84,0x20,0xDD,0x4F,0xDD,0x42,0x84,0x00,0x3E,0x07,
+0xFD,0x51,0x84,0x20,0xB9,0x80,0xEB,0x6A,0x46,0x27,0x2C,0x80,0x14,0x21,0x80,0xB2,
+0x3E,0x17,0xFD,0x3F,0x3E,0x07,0xFD,0x63,0xB8,0x0A,0x44,0x10,0x72,0xC8,0x40,0x50,
+0x40,0x09,0xD9,0x07,0x96,0x01,0xB8,0x8A,0x84,0x01,0x3E,0x07,0xFD,0x3F,0xD5,0x09,
+0x44,0x10,0x7F,0x0C,0xD9,0x06,0x96,0x01,0xB8,0x8A,0x84,0x01,0x3E,0x07,0xFD,0x63,
+0xB8,0x0A,0x44,0x10,0xFF,0xFE,0x8E,0x01,0xE2,0x20,0xE8,0x03,0x84,0x01,0xB8,0x8A,
+0x84,0x0E,0xDD,0x40,0xC0,0x06,0xDD,0x4D,0x96,0x37,0x3E,0x07,0xFF,0xA3,0xD5,0x1F,
+0xFA,0x02,0xDD,0x40,0xC8,0xF9,0xFA,0x06,0xDD,0x40,0xC8,0xF6,0x84,0x0A,0xDD,0x40,
+0xC8,0xF3,0xFA,0x0A,0xDD,0x40,0xC8,0xF0,0xFA,0x13,0xDD,0x40,0xC8,0xED,0xFA,0x0E,
+0xDD,0x40,0xC8,0xEA,0xFA,0x18,0xDD,0x40,0xC8,0xE7,0xFA,0x1C,0xDD,0x40,0xC8,0xE4,
+0xDD,0x47,0xDD,0x40,0xC8,0xE1,0xB8,0x0A,0x5A,0x08,0x01,0xDF,0xDD,0x47,0xDD,0x40,
+0xC0,0x0B,0xEB,0x64,0xDD,0x5D,0x84,0x20,0xDD,0x4F,0xEB,0x1F,0xEB,0x54,0xEA,0x72,
+0x84,0x3F,0xDD,0x4F,0xEB,0x1F,0xFC,0x80,0xEA,0x40,0x8C,0x01,0x96,0x00,0xEA,0xC3,
+0xEA,0x40,0x2E,0x10,0x00,0x0E,0xE2,0x01,0x56,0x07,0x80,0x01,0xEA,0xAA,0xEA,0x40,
+0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xA5,0xDD,0x9E,0xFC,0x00,0x84,0x0E,0xDD,0x40,
+0xC0,0x07,0x84,0x0C,0xDD,0x40,0xC0,0x0B,0x44,0x00,0xCC,0xCC,0xD5,0x13,0xFA,0x02,
+0xDD,0x40,0xC8,0xF8,0xFA,0x06,0xDD,0x40,0xC8,0xF5,0xD5,0x12,0xFA,0x00,0xDD,0x40,
+0xC0,0x04,0x44,0x00,0x33,0x33,0xD5,0x06,0xFA,0x04,0xDD,0x40,0xC0,0x3D,0x44,0x00,
+0x88,0x88,0x46,0x11,0x00,0x07,0xEA,0x30,0x84,0x01,0xDD,0x55,0xD5,0x35,0x84,0x0A,
+0xDD,0x40,0xC0,0x04,0x44,0x00,0x44,0x44,0xD5,0x2C,0xFA,0x0A,0xDD,0x40,0xC0,0x04,
+0x44,0x00,0x66,0x66,0xD5,0x26,0xFA,0x0E,0xDD,0x40,0xC0,0x04,0x44,0x00,0x61,0x61,
+0xD5,0x20,0xFA,0x13,0xDD,0x40,0xC0,0x04,0x44,0x00,0x60,0x60,0xD5,0x1A,0xFA,0x18,
+0xDD,0x40,0xC0,0x04,0x44,0x00,0x62,0x62,0xD5,0x14,0xFA,0x1C,0xDD,0x40,0xC0,0x04,
+0x44,0x00,0x63,0x63,0xD5,0x0E,0xDD,0x47,0xDD,0x40,0xC0,0x03,0xEA,0x29,0xD5,0x09,
+0x84,0x06,0xDD,0x40,0xC0,0x04,0x44,0x00,0x91,0x91,0xD5,0x03,0x44,0x00,0x99,0x99,
+0x46,0x11,0x00,0x07,0xEA,0x30,0xFC,0x80,0xFC,0x00,0xA6,0x00,0x80,0xC1,0x5A,0x08,
+0x0A,0x0E,0x84,0x0E,0xDD,0x40,0xC8,0x07,0xFA,0x02,0xDD,0x40,0xC8,0x04,0xFA,0x06,
+0xDD,0x40,0xC0,0x26,0xEB,0x54,0xEA,0x72,0xD5,0x22,0x5A,0x08,0x0B,0x04,0xDD,0x47,
+0xD5,0xF8,0x5A,0x08,0x0C,0x18,0xFA,0x0A,0xDD,0x40,0xC0,0x05,0xEB,0x64,0xDD,0x5D,
+0xB6,0x06,0xD5,0x0A,0xFA,0x13,0xDD,0x40,0xC8,0xFA,0xFA,0x0E,0xDD,0x40,0xC8,0xF7,
+0xFA,0x18,0xDD,0x40,0xC8,0xF4,0xDD,0x47,0xDD,0x40,0xC0,0x0A,0xEB,0x64,0xDD,0x5D,
+0xD5,0x06,0x5A,0x08,0x0F,0x06,0xEB,0x81,0x58,0x00,0x06,0x04,0xB6,0x06,0xFC,0x80,
+0xC0,0x04,0x5A,0x00,0x01,0x1A,0xD5,0x29,0xFC,0x00,0xFA,0x13,0x80,0xC1,0xDD,0x40,
+0xC0,0x07,0xEB,0x64,0xDD,0x5D,0x4C,0x60,0x40,0x04,0x84,0x01,0xD5,0x20,0xFA,0x18,
+0xDD,0x40,0xC0,0x1D,0x46,0x31,0x00,0x02,0x58,0x31,0x86,0x58,0x40,0x03,0x0C,0x03,
+0x5C,0x00,0x00,0x01,0xD5,0x14,0x46,0x21,0x00,0x03,0x58,0x21,0x00,0x78,0x4C,0x11,
+0x00,0x10,0x50,0x01,0x75,0xE0,0x4C,0x10,0x00,0x0C,0x50,0x21,0x70,0xD0,0x40,0x00,
+0x88,0x03,0x5C,0x00,0x00,0x01,0xDD,0x9E,0x84,0x00,0xDD,0x9E,0xFC,0x80,0x84,0x01,
+0xDD,0x9E,0xEA,0x4C,0x00,0x00,0x80,0x70,0x00,0x10,0x80,0x71,0x8C,0x01,0x42,0x00,
+0x80,0x73,0x96,0x01,0x2E,0x37,0xFD,0x3F,0x9E,0x86,0xEB,0x5A,0x58,0x10,0x80,0x00,
+0xEA,0xBD,0xEB,0x6A,0x9E,0x85,0x02,0x31,0x81,0x64,0xEA,0xBD,0x46,0x21,0x00,0x07,
+0x04,0x21,0x03,0xF2,0x9E,0xC4,0x96,0x91,0x38,0x20,0x8D,0x09,0x9E,0x83,0x3C,0x33,
+0xFE,0xFC,0xEA,0xBD,0x9E,0x82,0x3C,0x33,0xFF,0x10,0xEA,0xBD,0x46,0x21,0x00,0x07,
+0x04,0x21,0x03,0xC1,0x9E,0xC1,0x96,0x91,0x92,0x48,0x38,0x20,0x8D,0x09,0x46,0x21,
+0x00,0x07,0x04,0x21,0x03,0xC1,0x96,0x90,0x38,0x20,0x81,0x09,0xDD,0x9E,0x44,0x10,
+0x22,0xB8,0x50,0x00,0x7C,0x18,0xFE,0x0C,0x44,0x11,0x86,0xA0,0xEA,0xDD,0x50,0x00,
+0x00,0x56,0x96,0x01,0xDD,0x9E,0xFC,0x00,0xFA,0x02,0xDD,0x40,0xC0,0x05,0x2E,0x10,
+0x00,0xD9,0xDD,0x5C,0xD5,0x0E,0xFA,0x06,0xDD,0x40,0xC0,0x0F,0x49,0x00,0x43,0xBC,
+0xEA,0x2A,0x5A,0x08,0x0C,0x05,0x2E,0x00,0x00,0xDB,0xD5,0x03,0x2E,0x00,0x00,0xDA,
+0xFE,0x0C,0x49,0xFF,0xFF,0xDE,0xD5,0x03,0x49,0xFF,0xF9,0x4F,0x46,0x11,0x00,0x07,
+0x14,0x00,0x83,0xF2,0xFC,0x80,0xFC,0x00,0x84,0xA0,0x97,0x29,0xE2,0x81,0xE8,0x10,
+0xA5,0x18,0x38,0x61,0x15,0x01,0x5A,0x08,0x01,0x06,0xE2,0x86,0x40,0x43,0x3C,0x1B,
+0xD5,0x03,0x42,0x42,0x18,0x01,0x1A,0x41,0x80,0x01,0x8C,0xA1,0xD5,0xEF,0xFC,0x80,
+0xFC,0x20,0x2F,0x17,0xFD,0x63,0x84,0x60,0xFB,0x94,0x2E,0x20,0x01,0x29,0xE2,0x62,
+0xE8,0x22,0x42,0x71,0xC0,0x24,0x84,0x40,0x2E,0x40,0x01,0x28,0xE2,0x44,0xE8,0x18,
+0x99,0x57,0x40,0x60,0x94,0x20,0x22,0x43,0x00,0x00,0x38,0x50,0x15,0x11,0x4F,0x12,
+0x00,0x0A,0x43,0x32,0x00,0x03,0x42,0xF2,0x80,0x03,0xE1,0xEF,0x40,0x42,0xBC,0x1B,
+0xD5,0x03,0x42,0x42,0x90,0x00,0x8C,0x41,0xAD,0x30,0x96,0x90,0xD5,0xE6,0x8C,0x61,
+0x96,0xD8,0xD5,0xDC,0xFC,0xA0,0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0xB8,0x12,0xB9,0x08,
+0xE2,0x20,0xE8,0x10,0xB8,0x00,0x5A,0x00,0x08,0x04,0x5A,0x08,0x06,0x05,0xEB,0x51,
+0xEA,0xFA,0xD5,0x05,0xEB,0x46,0xC8,0x06,0xEB,0x54,0xEA,0xAC,0xEB,0x5A,0xEA,0x8C,
+0xEB,0x13,0xB8,0x08,0xB9,0x12,0xE2,0x01,0xE8,0x04,0x8C,0x01,0xB8,0x88,0xD5,0x02,
+0xEA,0x53,0xFC,0x80,0xFC,0x00,0x3C,0x0D,0xFF,0x88,0x3C,0x2D,0xFF,0x7E,0xE2,0x40,
+0xE8,0x19,0xEB,0x61,0x04,0x00,0x00,0xB2,0x96,0x81,0xE2,0x41,0xE8,0x13,0x96,0x49,
+0x92,0x10,0xEB,0x49,0x46,0x11,0x00,0x07,0x14,0x00,0x80,0xB2,0xEB,0x46,0x5A,0x08,
+0x01,0x0A,0xEA,0xB2,0xEB,0x5A,0xEA,0x8C,0x46,0x21,0x00,0x03,0x58,0x21,0x0A,0x98,
+0xDD,0x48,0xFC,0x80,0x46,0x38,0x00,0x30,0x4E,0x00,0x42,0xE9,0xCA,0xFE,0x4E,0x00,
+0x42,0xEC,0xDD,0x9E,0xFC,0x63,0x3F,0xCF,0xFD,0xD4,0x81,0x20,0xB1,0x81,0x3E,0x0F,
+0xFB,0x28,0x3B,0x00,0x4C,0x04,0x80,0xE1,0x80,0x26,0x3B,0x00,0xCC,0x24,0xA4,0x00,
+0xAC,0x08,0x2E,0x80,0x00,0xD5,0x81,0x42,0x40,0x04,0x00,0x10,0x85,0x81,0x4E,0x04,
+0x00,0x04,0x44,0xC0,0xFF,0xFF,0xEA,0x28,0x02,0x00,0x80,0x9C,0x02,0x30,0x80,0x0A,
+0x40,0xB0,0x0C,0x01,0x84,0x0E,0xDD,0x40,0x40,0xB5,0xA4,0x08,0x84,0x60,0xC8,0x09,
+0x54,0x44,0x00,0x7F,0x44,0x50,0x00,0x64,0xFF,0x2C,0x42,0x46,0x10,0x24,0x96,0xE3,
+0x88,0x6B,0xBB,0x80,0x3C,0x0D,0xFF,0x75,0xFE,0x02,0xB8,0x84,0x84,0x04,0x49,0xFF,
+0xFF,0xC3,0xB9,0x04,0xEB,0x57,0xEA,0x67,0x80,0x09,0x49,0x00,0x42,0xBF,0x84,0x06,
+0x42,0x64,0x80,0x73,0x40,0x25,0x00,0x13,0x84,0x00,0x46,0x41,0x00,0x00,0x58,0x42,
+0x0B,0x14,0x44,0x30,0x01,0xB0,0x38,0x13,0x00,0x00,0x81,0x27,0x42,0x90,0x8C,0x73,
+0x38,0x52,0x09,0x01,0x38,0x54,0x89,0x09,0x99,0x70,0xA7,0x69,0x81,0x27,0x50,0x11,
+0x00,0x6C,0x42,0x92,0x8C,0x73,0x39,0x02,0x05,0x01,0x50,0x21,0x00,0x24,0x8C,0x02,
+0x39,0x04,0x85,0x09,0x96,0x91,0x5A,0x08,0x06,0xE8,0xFC,0xE3,0x46,0x10,0x00,0xE0,
+0xDD,0x43,0x8C,0x27,0xEA,0xCB,0x46,0x10,0x01,0xC0,0x8C,0x35,0x14,0x10,0x01,0x60,
+0x46,0x10,0x02,0xA0,0x50,0x10,0x80,0x23,0x14,0x10,0x01,0x61,0x84,0x20,0x14,0x10,
+0x01,0x62,0x14,0x10,0x01,0x63,0x14,0x10,0x01,0x64,0x14,0x10,0x01,0x65,0x14,0x10,
+0x01,0x66,0x14,0x10,0x01,0x67,0x14,0x10,0x01,0x68,0xDD,0x9E,0xFC,0x60,0xEE,0xE0,
+0x3E,0x1F,0xFB,0x3C,0x80,0xE0,0x50,0xAF,0x80,0x30,0x3E,0x0F,0xFB,0x60,0xB1,0x83,
+0x3B,0x00,0xE0,0x00,0x44,0x20,0x00,0xF0,0x3B,0x03,0x60,0x20,0x84,0x20,0x3B,0x00,
+0x48,0x00,0x80,0x0A,0x3B,0x0F,0xC8,0x20,0xDD,0x42,0x84,0x20,0x80,0x0A,0xA8,0x41,
+0xA8,0x42,0xA8,0x43,0xA8,0x44,0xA8,0x45,0xA8,0x46,0xF1,0x8C,0xFA,0x22,0x40,0x13,
+0x84,0x57,0x96,0x90,0x81,0x3F,0x94,0x91,0x86,0x67,0x44,0x00,0x00,0x55,0x46,0xE3,
+0x00,0x00,0x45,0x43,0x00,0x00,0xE6,0x42,0xE8,0x0A,0x38,0x53,0x08,0x00,0x84,0x20,
+0x40,0x50,0x14,0x0C,0xF8,0x12,0x82,0x21,0x82,0x41,0xD5,0x3D,0xE6,0x48,0xE8,0x07,
+0xEA,0xBE,0x41,0x20,0x04,0x0C,0xF8,0x08,0x82,0x21,0xD5,0x0C,0xE6,0x4E,0xE8,0x0C,
+0xEA,0xBE,0x41,0x10,0x04,0x0C,0x84,0x20,0x80,0x61,0x80,0xE1,0x82,0x01,0x83,0xFF,
+0x82,0x41,0x80,0xA1,0xD5,0x28,0xE6,0x54,0xE8,0x08,0xEA,0xBE,0x41,0x00,0x04,0x0C,
+0x84,0x20,0x80,0x61,0x80,0xE1,0xD5,0x14,0xE6,0x5A,0xE8,0x08,0x38,0x73,0x08,0x00,
+0x84,0x20,0x40,0x70,0x1C,0x0C,0x80,0x61,0xD5,0x0A,0x5C,0xF1,0x00,0x20,0xE8,0x0A,
+0x38,0x33,0x08,0x00,0x84,0x20,0x40,0x30,0x0C,0x0C,0x80,0xE1,0x82,0x01,0x82,0x21,
+0xD5,0xE0,0xEA,0xBE,0x84,0x60,0x40,0x10,0x04,0x0C,0x80,0xE3,0x82,0x03,0x82,0x23,
+0x82,0x43,0x80,0xA3,0x80,0x93,0x85,0x60,0x88,0xAE,0x88,0x34,0x38,0x84,0xAE,0x02,
+0x50,0xC2,0x00,0x01,0xEA,0x56,0x89,0x05,0x38,0x85,0x12,0x0A,0x39,0x25,0x32,0x0A,
+0x50,0xC2,0x00,0x02,0xEA,0x56,0x39,0x15,0x32,0x0A,0x50,0xC2,0x00,0x03,0xEA,0x56,
+0x39,0x05,0x32,0x0A,0x50,0xC2,0x00,0x04,0xEA,0x56,0x38,0x75,0x32,0x0A,0x50,0xD2,
+0x00,0x05,0x50,0xC2,0x00,0x06,0xEA,0x56,0x54,0xD6,0x80,0xFF,0x8C,0x87,0x8D,0x61,
+0x38,0x35,0x36,0x0A,0x97,0x20,0x38,0x15,0x32,0x0A,0x5A,0xB8,0x03,0xD9,0x50,0x19,
+0x80,0x15,0x8C,0x41,0x55,0x30,0x80,0xFF,0x96,0x91,0x5B,0x30,0x31,0x04,0x48,0xFF,
+0xFF,0x84,0x84,0x00,0x46,0x32,0x00,0x00,0x40,0x15,0x00,0x00,0x5A,0x00,0xC8,0x0A,
+0x98,0x83,0xB4,0x81,0xB6,0x82,0xB4,0xA2,0xB4,0x81,0xDC,0xFC,0x8C,0x04,0xD5,0xF5,
+0xED,0x20,0xFC,0xE0,0xFC,0x00,0x80,0xC0,0x5A,0x08,0x01,0x0C,0xDD,0x43,0x84,0x22,
+0xEA,0x58,0x84,0x23,0xEA,0x47,0xEA,0x59,0xC8,0x04,0xEA,0x42,0xE6,0x01,0xEA,0x66,
+0x9E,0x31,0x96,0x40,0xE6,0x26,0xE8,0x18,0x84,0x43,0x40,0x10,0x08,0x16,0xE2,0x46,
+0x2E,0x27,0xFD,0x51,0x96,0x00,0x40,0x27,0x88,0x20,0xEB,0x22,0xEB,0x2F,0x96,0x90,
+0x49,0xFF,0xFE,0xA2,0x5A,0x68,0x06,0x16,0xEA,0x59,0x5A,0x08,0x11,0x13,0xEA,0x24,
+0x96,0x00,0xDD,0x55,0xD5,0x0E,0x5A,0x68,0x08,0x0D,0xEA,0x59,0x8C,0x01,0x96,0x00,
+0xE6,0x12,0xE9,0x02,0x84,0x00,0x3E,0x07,0xFD,0x51,0xEA,0x59,0x49,0xFF,0xFF,0x10,
+0xFC,0x80,0xFC,0x00,0x2E,0x17,0xFD,0x24,0x2E,0x07,0xFF,0xDB,0xFE,0x0C,0x3C,0x0F,
+0xFF,0x8D,0x84,0x00,0x3C,0x0F,0xFF,0x87,0x49,0x00,0x2C,0xAD,0xFC,0x80,0xFC,0x40,
+0x2E,0x47,0xFF,0xA9,0x84,0x20,0xFF,0x04,0x2F,0x20,0x01,0x29,0x2F,0x30,0x01,0x28,
+0x80,0x41,0x84,0x01,0x80,0xA1,0x45,0x10,0x00,0x48,0x47,0x01,0x00,0x00,0x59,0x08,
+0x06,0x04,0x44,0x90,0x00,0x64,0x4C,0x59,0x00,0x19,0x80,0xF0,0x42,0x72,0xC4,0x73,
+0x84,0x60,0x97,0x98,0xE2,0xD3,0xE8,0x0E,0x38,0x63,0x8D,0x11,0x42,0xF3,0x24,0x24,
+0xE0,0x8F,0xE8,0x04,0x8C,0x21,0x96,0x48,0x84,0x00,0x42,0x23,0x08,0x00,0x8C,0x61,
+0xD5,0xF1,0x8C,0xA1,0x97,0x68,0xD5,0xE8,0x96,0x91,0x46,0x31,0x00,0x07,0x12,0x21,
+0x87,0x99,0x96,0x49,0x46,0x21,0x00,0x07,0x12,0x11,0x07,0x9A,0xFC,0xC0,0x46,0x11,
+0x00,0x07,0x04,0x20,0x80,0xB2,0xEA,0x2A,0x96,0xD1,0xFE,0xCC,0x2E,0x47,0xFF,0xB6,
+0x2E,0x17,0xFF,0xAF,0xFE,0x64,0xFE,0x0C,0xE2,0x03,0xE8,0x04,0x84,0x21,0x84,0x00,
+0xD5,0x03,0x84,0x20,0x84,0x01,0x96,0x91,0x46,0x31,0x00,0x07,0x12,0x21,0x87,0x99,
+0x96,0x49,0x46,0x21,0x00,0x07,0x12,0x11,0x07,0x9A,0xDD,0x9E,0xFC,0x42,0x44,0x00,
+0x87,0x87,0x46,0x11,0x00,0x07,0x14,0x00,0x83,0xC6,0x3C,0x2D,0xFF,0x90,0x84,0x00,
+0x12,0x0F,0x80,0x07,0x12,0x0F,0x80,0x03,0x12,0x0F,0x80,0x02,0x12,0x0F,0x80,0x01,
+0x84,0x1F,0x12,0x0F,0x80,0x06,0x12,0x0F,0x80,0x05,0x12,0x0F,0x80,0x04,0xEB,0x61,
+0x00,0x70,0x0F,0x1C,0xEB,0x61,0x00,0x60,0x0F,0x1D,0xEB,0x61,0x00,0x00,0x0F,0x20,
+0x97,0xF8,0x97,0xB0,0x54,0x90,0x00,0xFF,0x84,0xA0,0x44,0x10,0x05,0x10,0x98,0x15,
+0xA4,0x00,0x96,0x01,0x12,0x0F,0x80,0x07,0xEA,0x26,0x02,0x3F,0x80,0x01,0xE2,0x60,
+0xEA,0x26,0xE8,0x05,0x96,0x01,0x12,0x0F,0x80,0x01,0xD5,0x1F,0x02,0x3F,0x80,0x02,
+0xE2,0x60,0xE8,0x0A,0xEA,0x23,0xEA,0xD2,0x4C,0x30,0x00,0x07,0xEA,0x26,0x96,0x01,
+0x12,0x0F,0x80,0x02,0xD5,0x12,0xEA,0x26,0x02,0x3F,0x80,0x03,0xE2,0x60,0xE8,0x0D,
+0xEA,0x23,0xEA,0xD2,0x4C,0x30,0x00,0x0A,0xEA,0x23,0xEA,0xD3,0x4C,0x30,0x00,0x06,
+0xEA,0x26,0x96,0x01,0x12,0x0F,0x80,0x03,0xEA,0x23,0xEA,0x81,0xE2,0x60,0xE8,0x06,
+0xEA,0x26,0x96,0x01,0x12,0x0F,0x80,0x04,0xD5,0x1F,0xEA,0x23,0xEA,0xE5,0xE2,0x60,
+0xE8,0x0A,0xEA,0x23,0xEA,0x81,0x4C,0x30,0x00,0x07,0xEA,0x26,0x96,0x01,0x12,0x0F,
+0x80,0x05,0xD5,0x12,0xEA,0x23,0x02,0x0F,0x80,0x06,0xE2,0x60,0xE8,0x0D,0xEA,0x23,
+0xEA,0x81,0x4C,0x30,0x00,0x0A,0xEA,0x23,0xEA,0xE5,0x4C,0x30,0x00,0x06,0xEA,0x26,
+0x96,0x01,0x12,0x0F,0x80,0x06,0x8C,0xA2,0xD9,0xAB,0x84,0x20,0xFA,0x44,0xEB,0x61,
+0x58,0x00,0x0F,0x24,0xDD,0x42,0x49,0xFF,0xF6,0x60,0xFF,0xC4,0xEA,0x2A,0x40,0x73,
+0x84,0xF7,0x02,0x2F,0x80,0x01,0x97,0xF9,0xE2,0xE2,0xE9,0x09,0xFF,0x84,0x02,0x2F,
+0x80,0x04,0x40,0x63,0x04,0xD7,0x97,0xB1,0xE2,0x46,0xE8,0x07,0xEB,0x61,0xEA,0xE2,
+0x46,0x11,0x00,0x07,0xEA,0x37,0xEA,0xE1,0xEB,0x46,0xC0,0x05,0x80,0x09,0x49,0xFF,
+0xFF,0x40,0xD5,0x04,0x80,0x09,0x49,0xFF,0xFF,0x04,0xC8,0x07,0xEB,0x61,0xEA,0xE2,
+0x46,0x11,0x00,0x07,0xEB,0x05,0xEA,0xE1,0xEB,0x61,0xEA,0xE2,0xC8,0x06,0x44,0x0F,
+0xAA,0xAA,0x46,0x11,0x00,0x07,0xEA,0xE1,0xEA,0xD2,0x46,0x11,0x00,0x07,0x96,0x01,
+0x12,0x00,0x87,0x93,0xEA,0xD3,0x46,0x11,0x00,0x07,0x96,0x01,0x12,0x00,0x87,0x94,
+0x02,0x0F,0x80,0x03,0x46,0x11,0x00,0x07,0x96,0x01,0x12,0x00,0x87,0x95,0xEA,0x81,
+0x46,0x11,0x00,0x07,0x96,0x01,0x12,0x00,0x87,0x96,0xEA,0xE5,0x46,0x11,0x00,0x07,
+0x96,0x01,0x12,0x00,0x87,0x97,0x02,0x0F,0x80,0x06,0x46,0x11,0x00,0x07,0x96,0x01,
+0x12,0x00,0x87,0x98,0x84,0x00,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0x9B,0x44,0x00,
+0xA6,0x6A,0x46,0x11,0x00,0x07,0x14,0x00,0x83,0xC6,0xFC,0xC2,0x46,0x08,0x00,0x20,
+0x04,0x10,0x00,0x0E,0x42,0x10,0xD4,0x08,0xEB,0x1A,0x4E,0x00,0x3D,0x27,0x4E,0x00,
+0x3D,0x2C,0x4E,0x00,0x3D,0x28,0x44,0x10,0xFB,0xFF,0x4E,0x00,0x3D,0x26,0x4E,0x00,
+0x3D,0x2C,0x46,0x11,0x00,0x07,0x02,0x10,0x80,0x40,0x84,0x45,0xE6,0x22,0x46,0x19,
+0x00,0x68,0xE9,0x02,0x84,0x4F,0x10,0x20,0x89,0x04,0x02,0x10,0x00,0x1E,0x84,0x44,
+0x58,0x10,0x80,0x01,0xEA,0x32,0x02,0x10,0x00,0x1E,0xEA,0xB3,0xEA,0x32,0x84,0x20,
+0xEA,0x75,0xEA,0x61,0xEB,0x2D,0xEA,0xDF,0xEA,0x3E,0x10,0x20,0x80,0x28,0xF8,0x76,
+0xDD,0x9E,0xFC,0x20,0x46,0x68,0x00,0x20,0x10,0x03,0x00,0x48,0x05,0x03,0x00,0x0E,
+0x46,0x7F,0xFE,0x3F,0x84,0x07,0x50,0x73,0x8F,0xFF,0xFE,0x46,0x40,0x78,0x1C,0x02,
+0x83,0x86,0x40,0x73,0x86,0x44,0xBF,0x8E,0xB9,0x0E,0xFE,0x86,0x66,0x10,0x80,0x38,
+0x40,0x20,0x88,0x64,0xBA,0x8E,0x12,0x33,0x00,0x9C,0x12,0x43,0x00,0x8A,0x12,0x53,
+0x00,0x0A,0xFC,0xA0,0xFC,0x00,0xEA,0x4C,0x00,0x50,0x81,0x2C,0x84,0x0A,0xFF,0x44,
+0x00,0x10,0x81,0x39,0x80,0x65,0xDD,0x5C,0x42,0x30,0x80,0x73,0x84,0x46,0x96,0xD9,
+0xFA,0x01,0x84,0x27,0x84,0x81,0xF8,0x17,0xFC,0x80,0xFC,0x00,0xEA,0x4C,0x00,0x40,
+0x81,0x2D,0x84,0x0A,0xFF,0x04,0x00,0x30,0x81,0x3A,0x80,0xA4,0xDD,0x5C,0x00,0x20,
+0x81,0x2F,0x42,0x51,0x80,0x73,0x00,0x00,0x81,0x2E,0x96,0xE9,0x40,0x11,0x10,0x09,
+0x80,0xA4,0x96,0x9F,0x49,0xFF,0xFF,0xB7,0xFC,0x80,0xFC,0x01,0x84,0x20,0xF0,0x81,
+0x46,0x09,0x00,0x68,0x10,0x10,0x09,0x04,0x84,0x0E,0xDD,0x40,0xC0,0x35,0x84,0x0E,
+0xDD,0x40,0xC0,0x39,0xDD,0x43,0xEB,0x0F,0x44,0x10,0xFF,0xDF,0x4E,0x00,0x3C,0xA5,
+0x44,0x10,0xFE,0xFF,0x4E,0x00,0x3C,0xA1,0x4E,0x00,0x3C,0x9D,0x44,0x10,0xFB,0xFF,
+0xFE,0x56,0xEA,0x32,0x51,0xC0,0x00,0x38,0xB9,0x7F,0x2E,0x20,0x00,0xBF,0x66,0x10,
+0x8F,0x00,0x96,0x9F,0x40,0x10,0x89,0x04,0xB9,0xFF,0x44,0x10,0x00,0x32,0x12,0x10,
+0x00,0x9A,0x83,0xFF,0x84,0x21,0xEA,0x75,0xB4,0x5C,0x46,0x1F,0xFE,0x3F,0xEA,0x7F,
+0xFE,0x56,0x42,0x10,0xC8,0x08,0xB6,0x3C,0xB4,0x3C,0x66,0x10,0x80,0x38,0x58,0x10,
+0x80,0x08,0xB6,0x3C,0xD5,0x18,0xFA,0x02,0xDD,0x40,0xC8,0xCA,0xFA,0x06,0xDD,0x40,
+0xC8,0xC7,0xD5,0x17,0xFA,0x02,0xDD,0x40,0xC0,0x06,0xF8,0x08,0xF0,0x01,0x49,0xFF,
+0xFF,0x8B,0xD5,0x09,0xFA,0x06,0xDD,0x40,0xC0,0x06,0x49,0xFF,0xFF,0x31,0xF0,0x01,
+0x49,0xFF,0xFF,0x95,0xF0,0x01,0x49,0xFF,0xFC,0xCB,0xEA,0x59,0x49,0xFF,0xFC,0xE8,
+0xDD,0x47,0xDD,0x40,0xEA,0x28,0xC0,0x02,0x84,0x01,0x10,0x00,0x80,0x68,0x10,0x00,
+0x80,0x6C,0xFC,0x81,0xFC,0x00,0x84,0x07,0xDD,0x40,0xC0,0x1F,0xDD,0x4B,0x5A,0x00,
+0x07,0x05,0x66,0x10,0x00,0x02,0xC9,0x04,0x49,0xFF,0xFD,0xC5,0xD5,0x1C,0x2E,0x10,
+0x00,0xDF,0xEA,0x5B,0xC1,0x0C,0x5A,0x00,0x06,0x0B,0xDD,0x43,0x84,0x26,0xEB,0x31,
+0x84,0x20,0xEB,0x32,0x44,0x1F,0xFC,0x78,0x4E,0x00,0x40,0xA9,0x44,0x00,0x24,0x24,
+0x46,0x11,0x00,0x07,0xEA,0x30,0xD5,0x07,0x84,0x08,0xDD,0x40,0xC0,0x03,0xF9,0x85,
+0xD5,0x02,0xF9,0x49,0xFC,0x80,0xEA,0x35,0x96,0x04,0xC0,0x09,0xFC,0x00,0x49,0x00,
+0x34,0x48,0xC8,0xFE,0x49,0x00,0x34,0x2A,0xC8,0xFE,0xFC,0x80,0xDD,0x9E,0xFC,0x00,
+0xFA,0x13,0xDD,0x40,0xC0,0x0F,0xEB,0x51,0x58,0x00,0x04,0x74,0x3C,0x0F,0xFF,0x90,
+0x84,0x21,0x84,0x08,0xEA,0x34,0x84,0x01,0xEB,0x3C,0xEB,0x0C,0x84,0x00,0xEB,0x2E,
+0xD5,0x0B,0xFA,0x18,0xDD,0x40,0xC8,0xF0,0xEB,0x64,0xEB,0x47,0x3C,0x0F,0xFF,0x90,
+0x84,0x07,0x84,0x21,0xEA,0x34,0xFC,0x80,0xEA,0x35,0x96,0x04,0xC0,0x09,0xFC,0x00,
+0x49,0x00,0x34,0x0D,0xC8,0xFE,0x49,0x00,0x34,0x13,0xC8,0xFE,0xFC,0x80,0xDD,0x9E,
+0xFC,0x00,0xEA,0x4C,0xA6,0x0B,0x58,0x00,0x00,0x10,0xAE,0x0B,0x4E,0x00,0x04,0xC0,
+0x46,0x11,0x00,0x07,0xEA,0x70,0xF8,0xBF,0xFC,0x80,0xFC,0x00,0x80,0xC0,0xFA,0x08,
+0xDD,0x40,0xC0,0x0D,0xEA,0x35,0xEA,0x8A,0xC0,0x0A,0x40,0x03,0x10,0x09,0xEA,0x28,
+0x12,0x00,0x82,0xB8,0x50,0x00,0x00,0x64,0x12,0x00,0x80,0xB6,0xFA,0x11,0xDD,0x40,
+0xC0,0x0C,0xEA,0x35,0xEA,0x8A,0xC0,0x09,0x92,0xC1,0xDD,0x43,0x12,0x60,0x02,0xB8,
+0x50,0x63,0x00,0x64,0x12,0x60,0x00,0xB6,0xFC,0x80,0xFC,0x00,0xEB,0x7B,0x58,0x10,
+0x86,0x58,0xEA,0xB2,0x50,0x20,0x8A,0x20,0xDD,0x48,0xFC,0x80,0xFC,0x00,0x3F,0xCF,
+0xFD,0xD8,0xFA,0x07,0xDD,0x40,0xC0,0x05,0xEA,0x50,0x44,0x00,0x56,0x56,0xD5,0x21,
+0xFA,0x08,0xDD,0x40,0xC0,0x18,0xB8,0x00,0x5A,0x08,0x07,0x30,0xB8,0x12,0xB9,0x08,
+0xE2,0x20,0xE8,0x08,0x49,0xFF,0xFF,0xE3,0xEB,0x54,0xEA,0xAC,0xEB,0x5A,0xEA,0x8C,
+0xEB,0x13,0xB8,0x08,0xB9,0x12,0xE2,0x01,0xE8,0x04,0x8C,0x01,0xB8,0x88,0xD5,0x1D,
+0xEB,0x39,0xD5,0x11,0xFA,0x0B,0xDD,0x40,0xC0,0x08,0xEA,0x50,0x44,0x00,0x51,0x61,
+0x46,0x11,0x00,0x07,0xEA,0x30,0xD5,0x11,0xFA,0x0C,0xDD,0x40,0xC0,0x06,0xB8,0x00,
+0x5A,0x08,0x07,0x0C,0xEA,0x53,0xD5,0x09,0xFA,0x0D,0xDD,0x40,0xC0,0xFC,0xB8,0x00,
+0x5A,0x08,0x07,0x04,0x49,0xFF,0xFF,0xBB,0xFC,0x80,0xFC,0x00,0xEB,0x7B,0x58,0x10,
+0x86,0x58,0xEA,0x5A,0x50,0x20,0x8A,0x20,0xDD,0x48,0xFC,0x80,0xFC,0x00,0x3F,0xCF,
+0xFD,0xD8,0xFA,0x0F,0xDD,0x40,0xC0,0x05,0xEA,0x50,0x44,0x00,0x50,0x60,0xD5,0x24,
+0xFA,0x11,0xDD,0x40,0xC0,0x1B,0xB8,0x00,0x5A,0x08,0x08,0x33,0xB8,0x12,0xB9,0x08,
+0xE2,0x20,0xE8,0x0A,0x49,0xFF,0xFF,0xE3,0x49,0x00,0x2A,0x54,0xEB,0x51,0xEA,0xFA,
+0xEB,0x5A,0xEA,0x8C,0xEB,0x13,0xB8,0x08,0xB9,0x12,0xE2,0x01,0xE8,0x03,0x8C,0x01,
+0xB8,0x88,0xBD,0x08,0xD9,0x1D,0xEB,0x39,0xD5,0x11,0xFA,0x14,0xDD,0x40,0xC0,0x08,
+0xEA,0x50,0x44,0x00,0x52,0x62,0x46,0x11,0x00,0x07,0xEA,0x30,0xD5,0x11,0xFA,0x16,
+0xDD,0x40,0xC0,0x06,0xB8,0x00,0x5A,0x08,0x08,0x0C,0xEA,0x53,0xD5,0x09,0xFA,0x17,
+0xDD,0x40,0xC0,0xFC,0xB8,0x00,0x5A,0x08,0x08,0x04,0x49,0xFF,0xFF,0xB8,0xFC,0x80,
+0xFC,0x00,0xEA,0x4C,0xA6,0x0B,0x66,0x00,0x00,0x10,0xAE,0x0B,0x84,0x00,0x46,0x11,
+0x00,0x07,0xEA,0x70,0x49,0xFF,0xFF,0x01,0xF8,0x46,0xFC,0x80,0xFC,0x00,0x3F,0xCF,
+0xFD,0xD8,0xFA,0x1D,0xDD,0x40,0xC0,0x0B,0xEA,0x35,0x96,0x04,0xC0,0x02,0xEA,0x50,
+0x44,0x00,0xBF,0xBF,0x46,0x11,0x00,0x07,0xEA,0x30,0xD5,0x30,0xFA,0x1E,0xDD,0x40,
+0xC0,0x2C,0xEA,0x35,0x96,0x04,0xC0,0x04,0xB8,0x00,0x5A,0x08,0x07,0x28,0xB8,0x12,
+0xB9,0x08,0xE2,0x20,0xE8,0x17,0x84,0x01,0x44,0x10,0x02,0x88,0xEB,0x57,0xEA,0x67,
+0x46,0x31,0x00,0x02,0x58,0x31,0x86,0x58,0x49,0xFF,0xFA,0x7F,0x84,0x00,0x44,0x10,
+0x02,0x88,0xEB,0x57,0xEA,0x67,0x46,0x31,0x00,0x03,0x58,0x31,0x80,0x78,0x49,0xFF,
+0xFA,0x74,0xB8,0x08,0xB9,0x12,0xE2,0x01,0xE8,0x04,0x8C,0x01,0xB8,0x88,0xD5,0x06,
+0xEA,0x35,0x96,0x04,0xC0,0x02,0xEB,0x39,0xEA,0x53,0xFC,0x80,0xFC,0x00,0x84,0x0E,
+0xDD,0x40,0xC0,0x03,0xEA,0x53,0xF8,0x0C,0xFA,0x02,0xDD,0x40,0xC8,0xFC,0xFA,0x06,
+0xDD,0x40,0xC8,0xF9,0x84,0x0A,0xDD,0x40,0xC0,0x05,0x49,0xFF,0xFE,0x85,0x48,0x00,
+0x00,0x3A,0xFA,0x0A,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xFF,0x12,0xD5,0x33,0xFA,0x0E,
+0xDD,0x40,0xC8,0xFB,0xFA,0x13,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xFF,0x51,0xD5,0x2A,
+0xFA,0x18,0xDD,0x40,0xC8,0xFB,0xFA,0x1C,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xFF,0x8A,
+0xD5,0x21,0xDD,0x47,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xFF,0x92,0xD5,0x1B,0x84,0x06,
+0xDD,0x40,0xC0,0x0B,0xEA,0x6A,0x66,0x00,0x00,0x08,0x3E,0x07,0xFF,0xA2,0x84,0x00,
+0xEB,0x3C,0x84,0x00,0x3C,0x0F,0xFF,0x8D,0x49,0xFF,0xFA,0x67,0xEB,0x61,0x04,0x50,
+0x03,0xC6,0x44,0x00,0x6A,0xA6,0xD8,0x06,0x84,0x02,0xDD,0x40,0xC0,0x03,0x49,0xFF,
+0xFC,0x7F,0xFC,0x80,0xFC,0x00,0xDD,0x4D,0x96,0x04,0xC0,0x16,0xEA,0x33,0xC0,0x07,
+0x2E,0x07,0xFE,0x79,0x2E,0x17,0xFF,0xF1,0xE2,0x01,0xE9,0x05,0x84,0x00,0x3E,0x07,
+0xFE,0x79,0xD5,0x0C,0x8C,0x01,0x3E,0x07,0xFE,0x79,0x2E,0x07,0xFE,0x78,0x8C,0x01,
+0x3E,0x07,0xFE,0x78,0xD5,0x03,0x84,0x02,0xEA,0x6D,0xFC,0x80,0xFC,0x40,0xEA,0x2C,
+0x84,0x24,0x9D,0x82,0x8E,0x01,0xEA,0xDD,0x46,0x90,0x0F,0xFF,0x88,0xC0,0x97,0xB0,
+0x84,0xE0,0x50,0x94,0x8F,0xFF,0xC6,0x12,0x5A,0x68,0x01,0x09,0x52,0x73,0xFE,0x03,
+0x97,0xF9,0x40,0x04,0x9F,0x04,0xDD,0x4A,0xD5,0x06,0x84,0x1F,0x50,0x73,0x83,0xFC,
+0xDD,0x4A,0x97,0xF9,0x8E,0xC1,0x97,0xB0,0xD5,0xEF,0x3E,0x67,0xFD,0x1A,0xFC,0xC0,
+0xFC,0x60,0x80,0xC0,0x3C,0xCD,0xFF,0x93,0x2E,0x87,0xFD,0x28,0x3C,0x9D,0xFF,0x82,
+0xEA,0x45,0xEA,0xEB,0x3C,0x0D,0xFF,0x8A,0xC0,0x04,0x00,0x73,0x00,0x92,0xC7,0x03,
+0x2E,0x77,0xFD,0x68,0x85,0x60,0x81,0xA6,0x81,0xCB,0xEA,0x2C,0x40,0xF7,0x00,0x06,
+0xE8,0x34,0x2E,0x00,0x00,0x14,0xEA,0xA3,0xC0,0x0B,0x04,0x16,0x80,0x01,0x96,0x09,
+0xEA,0xB1,0x96,0x49,0x96,0x01,0x40,0x20,0x05,0x15,0xB4,0x2D,0xD5,0x0A,0xB4,0x2D,
+0x96,0x09,0xEA,0xB1,0x96,0x49,0x96,0x01,0x40,0x20,0x05,0x15,0x04,0x16,0x80,0x01,
+0x96,0x09,0xEA,0xB1,0x96,0x01,0x96,0x49,0x40,0x10,0x05,0x15,0x40,0x01,0x06,0x00,
+0xDD,0x4A,0xB4,0x2D,0x04,0x26,0x80,0x01,0x96,0x08,0x40,0x10,0x05,0x1C,0x89,0x61,
+0x40,0xB5,0x89,0x1C,0x96,0x90,0x40,0x05,0x88,0x00,0x40,0xB0,0x00,0x13,0x50,0xE7,
+0x00,0x01,0x50,0xD6,0x80,0x0C,0xD5,0xCA,0x00,0x03,0x00,0x20,0x00,0x23,0x00,0x14,
+0x00,0x13,0x00,0x08,0xEA,0xE8,0x40,0x00,0x09,0x00,0x88,0x01,0x00,0x13,0x00,0x2C,
+0xEA,0x87,0xDD,0x4A,0x84,0x0A,0xDD,0x50,0xEA,0x2C,0xE6,0x05,0xE9,0x11,0x00,0x03,
+0x00,0x50,0x00,0x23,0x00,0x44,0x00,0x13,0x00,0x38,0xEA,0xE8,0x40,0x00,0x09,0x00,
+0x88,0x01,0x00,0x13,0x00,0x5C,0xEA,0x87,0xDD,0x4A,0x84,0x0A,0xDD,0x50,0xEA,0x2C,
+0xE6,0x09,0xE9,0x0A,0x00,0x13,0x00,0x74,0x00,0x03,0x00,0x68,0x40,0x00,0x05,0x00,
+0xDD,0x4A,0x84,0x0A,0xDD,0x50,0xEA,0xDB,0x84,0x20,0x84,0x6C,0xE2,0x22,0xE8,0x0B,
+0x80,0x06,0x42,0x00,0x8C,0x73,0x8C,0x21,0x00,0x00,0x00,0x08,0x88,0x0B,0x40,0xB0,
+0x00,0x13,0xD5,0xF5,0xEA,0x69,0xEA,0x8A,0xC0,0x15,0xEA,0xFD,0xEA,0x2B,0xE3,0x0C,
+0x94,0x05,0x40,0xA0,0x28,0x64,0x40,0xA5,0x04,0x24,0x8F,0x23,0x40,0x85,0x3C,0x04,
+0xE7,0x21,0x40,0xF4,0x3C,0x44,0x40,0x77,0x9C,0x84,0x12,0x73,0x00,0x48,0x3E,0x17,
+0xFD,0x5E,0x02,0x23,0x00,0x48,0x00,0x13,0x00,0x92,0x40,0x31,0x20,0x09,0x96,0x10,
+0x96,0x90,0x88,0x43,0x58,0x10,0x80,0xF0,0x40,0x00,0x81,0x00,0x88,0x22,0x40,0x00,
+0x0E,0x00,0x89,0x61,0x40,0x00,0x2F,0x01,0xDD,0x4A,0xFC,0xE0,0xFC,0x00,0xEA,0x51,
+0x5A,0x08,0x01,0x04,0x49,0x00,0x2C,0x21,0x49,0x00,0x2C,0x1A,0x80,0xC0,0xEA,0x51,
+0xC0,0x07,0xEA,0x51,0x5A,0x08,0x01,0x0A,0xEA,0x52,0x5A,0x08,0x01,0x07,0x3C,0x03,
+0xFE,0xC3,0x8C,0x01,0x3C,0x0B,0xFE,0xC3,0xEA,0x84,0xC8,0x1B,0xEA,0x51,0xC0,0x07,
+0xEA,0x51,0x5A,0x08,0x01,0x17,0xEA,0x52,0x5A,0x08,0x01,0x14,0x84,0x01,0x3E,0x07,
+0xFD,0x07,0x49,0xFF,0xFE,0xE9,0xEA,0x33,0xC8,0x0C,0xEA,0xEE,0xC0,0x05,0x80,0x06,
+0x49,0xFF,0xFF,0x20,0xD5,0x05,0x2E,0x07,0xFE,0x7A,0xC0,0x03,0xEA,0xB7,0xEA,0xC4,
+0xEA,0xEE,0x3E,0x07,0xFE,0x7A,0xFC,0x80,0xFC,0x40,0x3F,0xCF,0xFD,0xD8,0x80,0xC0,
+0x49,0xFF,0xFE,0xD2,0xEA,0x33,0x81,0x20,0x49,0x00,0x3C,0xDA,0x4E,0x02,0x00,0xF3,
+0x5C,0x94,0x80,0x01,0x4E,0x92,0x00,0x07,0x2E,0x07,0xFD,0x1A,0xC0,0x03,0xEA,0xB7,
+0xEA,0xF6,0xBA,0x00,0x9E,0x17,0xE6,0x02,0xEA,0x7B,0xE8,0x08,0xC9,0x07,0x5A,0x20,
+0x07,0x03,0xEA,0xF6,0x49,0x00,0x18,0x5F,0xEA,0xF6,0x4E,0x12,0x00,0x50,0x84,0x3F,
+0x3E,0x17,0xFE,0x24,0x2E,0x17,0xFD,0x0A,0xC9,0x49,0x4E,0x92,0x00,0x48,0xDD,0x4D,
+0x96,0x04,0xC8,0x02,0xEA,0x6D,0x2E,0x07,0xFD,0x08,0x44,0x10,0xA5,0x5A,0xEB,0x49,
+0xEA,0x7B,0xEA,0x87,0xDD,0x4A,0x2E,0x67,0xFD,0x08,0x44,0x2F,0xA5,0x5A,0x44,0x10,
+0x00,0x3D,0x88,0x46,0xEA,0x84,0xFF,0x8C,0x40,0x21,0x01,0x00,0x8C,0xC2,0xEB,0x81,
+0x58,0x00,0x00,0x00,0x40,0x60,0x18,0x20,0x96,0x91,0x80,0xA6,0x50,0x03,0x00,0x7A,
+0x0A,0x12,0x80,0x01,0x88,0x41,0x96,0x91,0xD8,0xFC,0xFE,0x92,0x40,0x71,0x40,0x08,
+0x85,0x40,0xA4,0x30,0x5A,0xA8,0x1E,0x05,0x8C,0xC2,0x88,0x07,0xD5,0x05,0xA4,0x71,
+0x8C,0xC4,0x40,0x00,0x06,0x00,0xDD,0x4A,0x8D,0x41,0xFA,0x0E,0xDD,0x50,0x5A,0xA8,
+0x1F,0xF2,0x2E,0x07,0xFD,0x08,0x8C,0x01,0x96,0x00,0xEA,0xC2,0x2E,0x17,0xFD,0x11,
+0xE2,0x01,0xE9,0x21,0x84,0x00,0xEA,0xC2,0xD5,0x1E,0x00,0x23,0x00,0x92,0x4E,0x23,
+0x00,0x7A,0xEA,0xF4,0xEA,0x5B,0xC1,0x09,0x2E,0x57,0xFD,0x65,0x2E,0x17,0xFD,0x5E,
+0xD1,0x04,0xE6,0x02,0x4E,0xF2,0x00,0x6F,0xEA,0x52,0xC8,0x0D,0xB8,0x14,0xC8,0x04,
+0x2E,0x07,0xFD,0x0A,0xC0,0x08,0x4E,0x92,0x00,0x04,0xEA,0xB7,0xD5,0x04,0x84,0x01,
+0x3E,0x07,0xFD,0x1A,0x2E,0x07,0xFD,0x0A,0x4E,0x02,0x00,0x6D,0x4E,0x92,0x00,0x6B,
+0xDD,0x4D,0x96,0x04,0xC8,0x02,0xEA,0x6D,0x2E,0x07,0xFD,0x09,0x8C,0x01,0x96,0x00,
+0x3E,0x07,0xFD,0x09,0x2E,0x17,0xFD,0x0C,0xE2,0x20,0xE8,0x04,0x84,0x01,0x3E,0x07,
+0xFD,0x09,0x2E,0x07,0xFD,0x09,0x2E,0x77,0xFD,0x10,0x9E,0x41,0x92,0xE1,0xFF,0xCC,
+0xEB,0x5A,0xEB,0x30,0x40,0x70,0x9C,0x20,0x2E,0x17,0xFD,0x34,0xC1,0x11,0x44,0x10,
+0xA3,0x3A,0xEB,0x49,0xEA,0x7B,0xEA,0x87,0xDD,0x4A,0x2E,0x17,0xFD,0x09,0x44,0x0F,
+0xA3,0x3A,0x88,0x01,0xEA,0x7B,0x40,0x00,0x05,0x00,0x96,0x01,0xD5,0x07,0x46,0x00,
+0x40,0x30,0x50,0x00,0x02,0x01,0xDD,0x4A,0x84,0x0A,0x2E,0x27,0xFD,0x10,0x84,0x20,
+0x92,0x41,0xE2,0x22,0xE8,0x07,0x38,0x33,0x85,0x01,0x8C,0x21,0x88,0x03,0x96,0x01,
+0xD5,0xF9,0xFE,0x02,0x40,0x60,0x40,0x08,0x85,0x20,0x2E,0x17,0xFD,0x10,0x8C,0x22,
+0x90,0x22,0xE3,0x21,0xE8,0x1F,0x8E,0x21,0xA4,0x38,0x4C,0x90,0xC0,0x05,0x8C,0xE2,
+0x88,0x06,0xD5,0x05,0xA4,0x79,0x8C,0xE4,0x40,0x00,0x06,0x00,0xDD,0x4A,0x8D,0x21,
+0xD5,0xED,0x5A,0x90,0x01,0x04,0x48,0xFF,0xFF,0x9F,0xEA,0x52,0x4E,0x03,0xFF,0x9C,
+0xB8,0x14,0xC0,0x03,0x4E,0x22,0xFF,0x93,0x80,0x06,0x49,0xFF,0xFE,0x1B,0x48,0xFF,
+0xFF,0x93,0xFC,0xC0,0xFC,0x20,0x80,0xE0,0x80,0xC1,0x49,0x00,0x27,0xB9,0xDD,0x4B,
+0x84,0x20,0x49,0x00,0x29,0xAB,0xEA,0xAE,0x3E,0x20,0x01,0x29,0x84,0x00,0xEA,0xD6,
+0x3E,0x07,0xFD,0x14,0xEB,0x5A,0x10,0x00,0x86,0x01,0xFA,0x00,0x3E,0x07,0xFD,0x03,
+0xFA,0x14,0xFA,0x30,0x49,0x00,0x3B,0x0E,0xEA,0xDB,0x84,0x25,0xFE,0x8C,0x96,0x90,
+0x54,0x01,0x00,0x03,0xC8,0x03,0x8C,0x44,0xD5,0x02,0x8C,0x48,0x96,0x90,0x66,0x21,
+0x00,0x03,0x52,0x21,0x00,0x7A,0x96,0x90,0x3E,0x27,0xFD,0x10,0x2E,0x40,0x01,0x29,
+0x2E,0x30,0x01,0x28,0x2E,0x10,0x01,0x31,0x42,0x12,0x0C,0x73,0x92,0x41,0x40,0x20,
+0x88,0x17,0x96,0x90,0xC0,0x02,0x8C,0x41,0x3E,0x27,0xFD,0x0C,0x44,0x20,0x00,0x3D,
+0x40,0x20,0x88,0x37,0x96,0x90,0xC1,0x02,0x8C,0x41,0x3E,0x27,0xFD,0x11,0x84,0x00,
+0xEA,0xC2,0x2E,0x17,0xFF,0xAF,0x3E,0x17,0xFD,0x1C,0x3E,0x07,0xFD,0x1A,0x2E,0x00,
+0x00,0x16,0x2E,0x20,0x00,0x17,0x40,0x21,0x01,0x04,0x3C,0x2E,0x00,0x48,0x2E,0x00,
+0x00,0x18,0x2E,0x10,0x00,0x19,0x40,0x10,0x81,0x04,0x3C,0x1E,0x00,0x49,0x40,0x21,
+0x0C,0x57,0x40,0x10,0x90,0x37,0x3E,0x20,0x01,0x32,0x3E,0x10,0x01,0x33,0x8C,0x82,
+0x3E,0x47,0xFD,0x16,0x8C,0x62,0x3E,0x37,0xFD,0x05,0x84,0x00,0x3C,0x0B,0xFE,0xC1,
+0xCF,0x21,0xEB,0x61,0x14,0x70,0x03,0xF1,0xDD,0x4D,0x96,0x04,0xC0,0x05,0x84,0x01,
+0xEB,0x48,0x84,0x02,0xEA,0x6D,0xEB,0x61,0x58,0x00,0x0F,0x44,0x84,0x20,0x44,0x20,
+0x00,0x3C,0xDD,0x42,0xCE,0x08,0xEB,0x61,0x58,0x00,0x03,0xB0,0x80,0x26,0x44,0x20,
+0x00,0x3C,0xDD,0x42,0xEB,0x61,0x58,0x00,0x0F,0x80,0x84,0x20,0x44,0x20,0x00,0x40,
+0xDD,0x42,0x46,0x19,0x00,0x08,0xA4,0x08,0x96,0x01,0x3C,0x0B,0xFE,0xBE,0x92,0x01,
+0x3C,0x0B,0xFE,0xBF,0xA4,0x0A,0x3C,0x0B,0xFE,0xBD,0x49,0x00,0x05,0x0B,0x84,0x1F,
+0x3E,0x07,0xFE,0x24,0x84,0x00,0xEA,0xC8,0x3E,0x07,0xFD,0x0B,0x84,0x00,0x3C,0x0B,
+0xFE,0xC3,0xFC,0xA0,0xFC,0x61,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,
+0x96,0x01,0xDD,0x58,0xEA,0x37,0xDD,0x45,0x46,0x01,0x00,0x07,0x04,0x50,0x03,0xF0,
+0x44,0x00,0xA1,0x1A,0x92,0xB0,0xD8,0x03,0x49,0x00,0x2F,0xE4,0x49,0x00,0x3B,0x8E,
+0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,0xEB,0x03,
+0xDD,0x45,0x49,0x00,0x35,0x0D,0xC8,0xFE,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,
+0x00,0x07,0x96,0x01,0xDD,0x58,0x58,0x00,0x00,0x03,0xDD,0x45,0x49,0x00,0x3B,0xB8,
+0x49,0xFF,0xF3,0x6E,0xC0,0x02,0x96,0x01,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xA1,
+0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,0xEB,0x05,
+0xDD,0x45,0xFA,0x4F,0x44,0x00,0x00,0xE7,0x84,0x22,0x44,0x30,0x00,0xF8,0xDD,0x4E,
+0x49,0xFF,0xF1,0xBE,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,
+0xDD,0x58,0x58,0x00,0x00,0x05,0xDD,0x45,0x84,0x01,0x44,0x10,0x01,0xE0,0x84,0x45,
+0x44,0x30,0x02,0x58,0x49,0x00,0x34,0x84,0x80,0xC0,0xC8,0xF7,0x84,0x45,0x84,0x01,
+0x44,0x10,0x00,0x80,0x49,0x00,0x34,0xB9,0x46,0x01,0x00,0x07,0xEA,0xBA,0x96,0x49,
+0xEA,0x6F,0x58,0x10,0x80,0x06,0xEA,0x7C,0x49,0xFF,0xF4,0xFD,0x49,0xFF,0xF5,0x47,
+0x4E,0x00,0x33,0x6E,0x80,0x06,0xEA,0x5B,0xEA,0xAB,0x84,0x21,0xEB,0x81,0x12,0x60,
+0x00,0x00,0x80,0x41,0x44,0x00,0x00,0xE7,0xEA,0x3A,0x96,0x01,0x46,0x11,0x00,0x07,
+0x12,0x00,0x87,0xAF,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,
+0xDD,0x58,0x58,0x00,0x00,0x07,0xDD,0x45,0xFA,0x0A,0xDD,0x40,0xC8,0x19,0xFA,0x0E,
+0xDD,0x40,0xC8,0x16,0xFA,0x13,0xDD,0x40,0xC8,0x13,0xFA,0x18,0xDD,0x40,0xC8,0x10,
+0x46,0x01,0x00,0x07,0xEA,0x63,0x4E,0x00,0x33,0x04,0xD8,0x08,0xEA,0x21,0xEA,0x20,
+0x83,0xFF,0x46,0x11,0x00,0x07,0xEA,0x70,0xD5,0x03,0x49,0xFF,0xF3,0x24,0x49,0x00,
+0x3B,0xA6,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,
+0x58,0x00,0x00,0x08,0xDD,0x45,0x84,0x00,0xDD,0x55,0x84,0xC0,0x3C,0x6F,0xFF,0x7C,
+0x46,0x01,0x00,0x07,0xEA,0xBA,0x84,0x41,0x96,0x49,0xEA,0x6F,0x10,0x2F,0x80,0x00,
+0x10,0x2F,0x80,0x01,0x10,0x2F,0x80,0x02,0x10,0x2F,0x80,0x03,0x10,0x2F,0x80,0x04,
+0x58,0x10,0x80,0x09,0xEA,0x7C,0x3A,0x0F,0x84,0x00,0x49,0x00,0x2F,0x3C,0x80,0x06,
+0x84,0x26,0x49,0x00,0x3A,0x62,0x46,0x00,0x0E,0xD0,0x46,0x10,0x20,0x0C,0x50,0x00,
+0x00,0x40,0x8C,0x26,0x49,0x00,0x3A,0x54,0x46,0x09,0x00,0x20,0xB4,0x20,0x66,0x10,
+0x80,0x40,0xB6,0x20,0xEA,0xF4,0xEA,0x8B,0xC1,0x05,0xA0,0x41,0x58,0x10,0x80,0x08,
+0xA8,0x41,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,
+0x58,0x00,0x00,0x0A,0xDD,0x45,0x84,0x41,0x44,0x00,0x00,0xBC,0x84,0x20,0x84,0x66,
+0x46,0x78,0x00,0x20,0x46,0x9A,0x33,0xAA,0xDD,0x4E,0x84,0xC0,0x50,0xA3,0x84,0xF4,
+0x50,0x94,0x83,0x3A,0x46,0xB9,0x00,0x90,0x84,0x07,0x49,0x00,0x2D,0x55,0x8C,0x05,
+0x46,0x11,0x00,0x07,0x14,0x00,0x83,0xF9,0xEA,0x42,0x4E,0x02,0x00,0xC7,0xEA,0x93,
+0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,0x58,0x00,
+0x00,0x0B,0xDD,0x45,0x84,0x0E,0xDD,0x40,0xC0,0x04,0x84,0x00,0xDD,0x55,0xD5,0x0C,
+0xFA,0x02,0xDD,0x40,0xC8,0xFB,0xFA,0x06,0xDD,0x40,0xC8,0xF8,0xDD,0x47,0xDD,0x40,
+0xC8,0xF5,0x49,0xFF,0xED,0xD0,0x49,0x00,0x02,0xD1,0xC8,0x1E,0x46,0x01,0x00,0x07,
+0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x01,0xDD,0x58,0x58,0x00,0x00,0x0C,0xDD,0x45,
+0x84,0x0E,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xF4,0xE1,0xF8,0x0C,0xFA,0x02,0xDD,0x40,
+0xC8,0xFB,0xFA,0x06,0xDD,0x40,0xC8,0xF8,0xDD,0x47,0xDD,0x40,0xC8,0xF5,0x49,0x00,
+0x02,0x09,0x48,0x00,0x00,0x83,0x84,0x00,0x3E,0x07,0xFD,0x00,0x3E,0x07,0xFD,0x07,
+0x46,0x01,0x00,0x07,0xEA,0xBA,0x96,0x49,0xEA,0x6F,0x58,0x10,0x80,0x0D,0xEA,0x7C,
+0x84,0x0E,0xDD,0x40,0xC8,0x28,0xFA,0x02,0xDD,0x40,0xC8,0x25,0xFA,0x06,0xDD,0x40,
+0xC8,0x22,0xDD,0x47,0xDD,0x40,0xC8,0x1F,0xDD,0x4B,0x5A,0x00,0x08,0x15,0x5A,0x00,
+0x06,0x13,0xDD,0x59,0x5A,0x08,0x01,0x06,0xF8,0x4C,0xC8,0x03,0x49,0x00,0x29,0x4D,
+0xEB,0x21,0xC8,0x0D,0x49,0x00,0x11,0xE8,0x49,0x00,0x2A,0x7E,0x49,0x00,0x27,0xB0,
+0x80,0xC0,0xD5,0x05,0x49,0x00,0x25,0x46,0x49,0x00,0x25,0x22,0xEB,0x21,0xC8,0x03,
+0x49,0x00,0x02,0x48,0x49,0xFF,0xFB,0x64,0x49,0xFF,0xED,0xB0,0x84,0x01,0x3E,0x07,
+0xFD,0x00,0x80,0x06,0x49,0xFF,0xFC,0xD2,0xEA,0xEE,0x49,0x00,0x28,0xD4,0xEA,0x52,
+0xC8,0x02,0xEA,0xC4,0x49,0x00,0x01,0x9F,0x84,0x0E,0xDD,0x40,0xC8,0x36,0xFA,0x02,
+0xDD,0x40,0xC8,0x33,0xFA,0x06,0xDD,0x40,0xC8,0x30,0x84,0x0A,0xDD,0x40,0xC8,0x2D,
+0xFA,0x0A,0xDD,0x40,0xC8,0x2A,0xFA,0x13,0xDD,0x40,0xC8,0x27,0xFA,0x0E,0xDD,0x40,
+0xC8,0x24,0xFA,0x18,0xDD,0x40,0xC8,0x21,0xFA,0x1C,0xDD,0x40,0xC8,0x1E,0xDD,0x47,
+0xDD,0x40,0xC8,0x1B,0x3C,0x0D,0xFF,0x88,0x5A,0x08,0x01,0x18,0xEB,0x21,0xC8,0x13,
+0xEA,0xDC,0x5A,0x08,0x01,0x09,0x00,0x05,0x00,0x00,0x96,0x04,0xC8,0x04,0x49,0x00,
+0x24,0x8B,0xD5,0x07,0x00,0x05,0x00,0x00,0x96,0x0E,0xC8,0x03,0x49,0x00,0x24,0x3B,
+0x49,0x00,0x25,0x48,0x49,0x00,0x29,0xE6,0x46,0x01,0x00,0x07,0xEA,0xBA,0x96,0x49,
+0xEA,0x6F,0x58,0x10,0x80,0x0E,0xEA,0x7C,0xDD,0x4B,0x5A,0x08,0x07,0x07,0x00,0x53,
+0x83,0x40,0xEA,0x57,0xD8,0x19,0xD5,0x0C,0x5A,0x08,0x08,0x17,0x00,0x53,0x83,0x40,
+0xEA,0x82,0xD8,0x12,0x00,0x05,0x80,0x00,0xC8,0xFE,0x49,0x00,0x33,0x93,0x49,0x00,
+0x34,0x4E,0x46,0x01,0x00,0x07,0xEA,0x63,0x4C,0x54,0xC0,0x07,0x84,0x21,0xDD,0x4B,
+0xEA,0x34,0x84,0x00,0xEA,0xC8,0x84,0x0E,0xDD,0x40,0xC8,0x13,0xFA,0x02,0xDD,0x40,
+0xC8,0x10,0xFA,0x06,0xDD,0x40,0xC8,0x0D,0x84,0x0A,0xDD,0x40,0xC8,0x0A,0xFA,0x0A,
+0xDD,0x40,0xC8,0x07,0xFA,0x13,0xDD,0x40,0xC8,0x04,0xDD,0x47,0xDD,0x40,0xC0,0x05,
+0x84,0x01,0xF8,0x05,0xC8,0xFE,0xF8,0x06,0x2E,0x07,0xFD,0x0D,0x49,0x00,0x2E,0x98,
+0xC8,0xFC,0x48,0xFF,0xFE,0xF3,0xFC,0x00,0x46,0x61,0x00,0x03,0x58,0x63,0x0A,0x98,
+0x80,0x06,0x84,0x20,0xDD,0x4F,0xDD,0x42,0x50,0x03,0x05,0x10,0x84,0x20,0xDD,0x4F,
+0xDD,0x42,0x50,0x03,0x10,0x10,0x84,0x20,0x44,0x20,0x05,0xF0,0xDD,0x42,0x50,0x03,
+0x16,0x00,0x84,0x20,0xDD,0x4F,0xDD,0x42,0x84,0x00,0x3C,0x0F,0xFF,0x8F,0xFC,0x80,
+0xFC,0x20,0x3F,0xCF,0xFD,0xD8,0xB8,0x00,0x5A,0x00,0x08,0x05,0x84,0xC3,0x5A,0x08,
+0x06,0x03,0x84,0xC1,0xB9,0x19,0x2E,0x27,0xFD,0x2F,0x2E,0x07,0xFD,0x40,0x88,0x02,
+0xE2,0x20,0x4E,0xF2,0x00,0x5B,0xB9,0x19,0xC9,0x05,0xEB,0x4E,0xEA,0x62,0xDD,0x4F,
+0xDD,0x42,0xB9,0x19,0x2E,0x07,0xFD,0x2F,0x84,0x80,0xE2,0x20,0xE8,0x2D,0x2E,0x37,
+0xFF,0xA9,0x2E,0x07,0xFF,0xDF,0x44,0x10,0x00,0xD8,0x88,0x60,0xFE,0x74,0xBD,0x1A,
+0x94,0xDA,0x46,0x21,0x00,0x05,0x58,0x21,0x00,0x98,0x40,0x12,0x84,0x20,0x84,0x80,
+0x45,0x00,0x6D,0x60,0x45,0x10,0xDA,0xC0,0xD1,0x17,0x02,0x01,0x6F,0xF0,0xA5,0xE8,
+0x8A,0x07,0x96,0x01,0x97,0xC3,0x42,0x73,0x80,0x03,0xE0,0xE3,0xE8,0x04,0xA5,0xD0,
+0x88,0x07,0xAC,0x10,0x2A,0x01,0x00,0x01,0x88,0x10,0x96,0x01,0xE3,0xA0,0xE8,0x02,
+0x84,0x81,0x8C,0xA2,0xD5,0xEA,0xB8,0x19,0x8C,0x01,0xB8,0x99,0x5A,0x48,0x01,0x1E,
+0x44,0x20,0x00,0xD8,0xFE,0xB4,0xBD,0x1A,0x46,0x31,0x00,0x05,0x58,0x31,0x80,0x98,
+0x40,0x22,0x88,0x20,0x84,0x80,0xD2,0x0F,0xA5,0xE8,0xB8,0x19,0x22,0x11,0x80,0x00,
+0x96,0x03,0x40,0x00,0x80,0x16,0x88,0x07,0x96,0x01,0x1A,0x02,0x80,0x01,0x1A,0x41,
+0x80,0x01,0xD5,0xF2,0x84,0x00,0xB8,0x99,0xB9,0x19,0x2E,0x47,0xFD,0x2F,0x2E,0x07,
+0xFD,0x40,0x88,0x04,0xE2,0x20,0xE9,0x3A,0x84,0x40,0xBA,0x99,0xBD,0x1A,0x44,0x00,
+0x00,0xD8,0x42,0x13,0x00,0x24,0x46,0x31,0x00,0x05,0x58,0x31,0x80,0x98,0x40,0x12,
+0x84,0x20,0xD1,0x0D,0x22,0x01,0x80,0x00,0xA5,0xA8,0x40,0x00,0x10,0x16,0x88,0x06,
+0x96,0x01,0x1A,0x02,0x80,0x01,0x1A,0x21,0x80,0x01,0xD5,0xF4,0xB8,0x00,0x5A,0x08,
+0x02,0x1E,0x2E,0x07,0xFD,0x22,0x2E,0x10,0x00,0x70,0xE2,0x20,0xE8,0x05,0x84,0x01,
+0xB8,0x90,0x84,0x00,0xD5,0x11,0x2E,0x2F,0xFF,0xA3,0x4E,0x24,0x00,0x10,0x3C,0x33,
+0xFE,0xE2,0xBA,0x26,0xE2,0x62,0xE9,0x0A,0x3C,0x33,0xFE,0xE7,0xBA,0x25,0xE2,0x62,
+0xE9,0x05,0xC1,0x04,0x8C,0x01,0x3E,0x07,0xFD,0x22,0xFC,0xA0,0xFC,0x20,0x3C,0x1D,
+0xFF,0x90,0xEA,0x40,0x2E,0x37,0xFD,0x64,0xE2,0x03,0xE8,0x48,0xEB,0x27,0x5A,0x08,
+0x01,0x2C,0x2E,0x57,0xFD,0x48,0x9E,0x19,0xD8,0x27,0x2E,0x70,0x00,0x0A,0x84,0xA0,
+0x47,0x01,0x00,0x02,0x59,0x08,0x01,0x44,0x44,0x60,0x05,0x10,0x50,0x22,0x8F,0x34,
+0x99,0x0D,0x88,0x50,0xA4,0x20,0x03,0x11,0x00,0x00,0xE3,0xA0,0xE8,0x04,0xA4,0x20,
+0xA4,0x90,0xD5,0x03,0xA4,0x10,0xA4,0xA0,0x8A,0x02,0xE0,0xE0,0xE8,0x05,0x84,0x00,
+0x3E,0x07,0xFD,0x30,0xD5,0x03,0x8C,0xA2,0xDE,0xEA,0xEB,0x27,0x5A,0x08,0x01,0x05,
+0x3E,0x37,0xFD,0x45,0xD5,0x1D,0xEB,0x27,0xC8,0x1B,0xDD,0x4B,0x8E,0x02,0xE6,0x07,
+0xE8,0x17,0x3E,0xFF,0x7A,0xC8,0x38,0x07,0x80,0x00,0xEA,0xAF,0x4A,0x00,0x3C,0x00,
+0x08,0x1E,0x1E,0x1E,0x0C,0x08,0x0C,0x00,0xEA,0xB2,0xD5,0x02,0xEA,0x5A,0x46,0x21,
+0x00,0x03,0x58,0x21,0x00,0x78,0xDD,0x48,0xD5,0x03,0x49,0xFF,0xFF,0x03,0xFC,0xA0,
+0x92,0x00,0xFC,0x00,0xEB,0x38,0xC0,0x1C,0x2E,0x07,0xFD,0x4D,0x2E,0x17,0xFF,0xDE,
+0xE2,0x01,0xE9,0x10,0x84,0x00,0x3E,0x07,0xFD,0x3B,0x84,0x20,0x3C,0x1F,0xFF,0x8F,
+0x2E,0x07,0xFD,0x47,0x3E,0x07,0xFD,0x2F,0xEB,0x4E,0xEA,0x62,0xDD,0x4F,0xDD,0x42,
+0xD5,0x07,0x3C,0x1D,0xFF,0x87,0xC9,0x04,0x8C,0x01,0x3E,0x07,0xFD,0x4D,0xFC,0x80,
+0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0x2E,0x17,0xFD,0x48,0x2E,0x07,0xFD,0x45,0xE2,0x20,
+0xE9,0x05,0x84,0x01,0xEA,0xAA,0x84,0x0A,0xD5,0x03,0x84,0x00,0xEA,0xAA,0x3E,0x07,
+0xFD,0x40,0x2E,0x07,0xFD,0x34,0xC0,0x2A,0x84,0x01,0xEB,0x25,0x84,0x01,0x3E,0x07,
+0xFD,0x30,0x84,0x02,0xEA,0xF9,0xBE,0x00,0x5A,0x68,0x02,0x18,0x2E,0x07,0xFD,0x5F,
+0x5A,0x08,0x01,0x14,0xEA,0x2B,0xE6,0x01,0x3E,0xF7,0xFD,0x79,0x80,0x06,0x80,0x26,
+0xEA,0x34,0x3E,0x67,0xFD,0x5F,0xEA,0x2B,0xC0,0x04,0xEB,0x64,0xDD,0x5D,0xD5,0x03,
+0xEB,0x64,0xEA,0xB6,0xB8,0x9A,0xD5,0x2B,0x84,0x00,0x3E,0x07,0xFD,0x59,0x2E,0x07,
+0xFD,0x43,0x8C,0x01,0x3E,0x07,0xFD,0x43,0xD5,0x08,0x49,0xFF,0xFF,0x51,0x2E,0x07,
+0xFD,0x59,0x8C,0x01,0x3E,0x07,0xFD,0x59,0xEB,0x81,0x02,0x50,0x03,0x01,0xEB,0x04,
+0xD0,0x09,0x2E,0x0F,0xFF,0xA2,0x4E,0x04,0x00,0x06,0xB8,0x00,0x8E,0x07,0xE6,0x02,
+0xE8,0x06,0xEA,0x40,0x8C,0x01,0x96,0x00,0xEA,0xC3,0xD5,0x09,0xEB,0x81,0x00,0x00,
+0x06,0x01,0xEB,0x5A,0x8C,0x01,0x96,0x00,0x10,0x00,0x86,0x01,0xFC,0x80,0xFC,0x20,
+0x3C,0x7D,0xFF,0x90,0x84,0xA0,0xEB,0x19,0xEB,0x24,0x84,0x63,0xDD,0x4F,0x98,0x7D,
+0x50,0x02,0x8F,0x34,0xA5,0x08,0x88,0x06,0xA4,0x00,0x42,0x02,0x0C,0x73,0x8C,0xA2,
+0x90,0x02,0x96,0x01,0xAC,0x08,0xDA,0xF4,0x84,0x03,0x3C,0x0F,0xFF,0x86,0xFC,0xA0,
+0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0xB8,0x00,0x5A,0x00,0x08,0x04,0x5A,0x08,0x06,0x05,
+0xEB,0x4E,0xEA,0xA4,0xD5,0x04,0xB8,0x11,0xC8,0x04,0xEA,0x96,0xE6,0x01,0xD5,0x02,
+0x85,0xE0,0x3E,0xF7,0xFD,0x50,0xEA,0x6A,0xEA,0xA3,0xC0,0x0F,0x2E,0x07,0xFD,0x50,
+0xC0,0x0C,0xB8,0x10,0x5A,0x00,0x02,0x0A,0x49,0xFF,0xFE,0x4C,0x84,0x00,0x3E,0x07,
+0xFD,0x2D,0x84,0x00,0xEA,0x64,0xD5,0x10,0x84,0xC0,0xBE,0x99,0x80,0x26,0xEB,0x4E,
+0xEA,0x62,0xDD,0x4F,0xDD,0x42,0xB8,0x10,0x5A,0x08,0x02,0x05,0x49,0xFF,0xFF,0xB9,
+0xD5,0x03,0x3E,0x67,0xFD,0x22,0xFC,0x80,0x2E,0x07,0xFD,0x34,0xDD,0x9E,0xFC,0x60,
+0x3D,0x3C,0x00,0x49,0x2E,0x90,0x00,0x8A,0x2E,0x47,0xFF,0xA5,0x92,0x84,0x3C,0x2C,
+0x00,0x48,0x4E,0x42,0x00,0xF1,0x3F,0x18,0x02,0x5C,0x38,0x38,0x80,0x00,0x5A,0x38,
+0x01,0x13,0xEA,0xC6,0xFF,0x04,0x44,0x30,0xFF,0xFF,0x99,0xCC,0xA1,0xBE,0x4C,0x61,
+0xC0,0x0B,0xA1,0x7B,0xDE,0x08,0x38,0x30,0x90,0x02,0x4C,0x32,0xC0,0x05,0x84,0x60,
+0x38,0x38,0x80,0x08,0xEA,0xC6,0x42,0x30,0x10,0x24,0xEA,0x89,0x99,0xCB,0xB4,0xA7,
+0x8E,0x41,0x8F,0xE1,0xDC,0x54,0x50,0x41,0x80,0x0C,0x88,0x81,0xB5,0x84,0x4D,0x02,
+0x80,0x4F,0x51,0x21,0x80,0x18,0x89,0xC1,0xB4,0xD2,0x4C,0x62,0x80,0x49,0xA0,0xE1,
+0x40,0x18,0x04,0x08,0xE0,0x26,0x04,0x09,0x00,0x01,0x95,0xD9,0xE9,0x0B,0xE0,0xE0,
+0xE8,0x19,0x40,0x18,0x18,0x01,0xFE,0x5C,0x9A,0x83,0x40,0x10,0x88,0x36,0x88,0x30,
+0xD5,0x02,0x84,0x20,0xE0,0xE0,0xB6,0x24,0xE8,0x04,0x84,0x00,0xA8,0x21,0xF8,0x2D,
+0x9A,0x18,0x42,0x18,0x00,0x24,0x40,0x53,0x40,0x01,0x40,0x00,0x94,0x16,0x99,0x58,
+0xD5,0x23,0x99,0x72,0xE0,0xA1,0x41,0x10,0x4C,0x00,0xE9,0x0F,0xE1,0xA7,0x4E,0xF2,
+0x00,0x9B,0x40,0x58,0x18,0x01,0x40,0x11,0xCC,0x01,0xFE,0x6C,0x9B,0x43,0x40,0x10,
+0x94,0x36,0x88,0x30,0xB6,0x24,0xD5,0x02,0xB6,0x44,0xE1,0xA7,0xE8,0x04,0x15,0x32,
+0x00,0x01,0xF8,0x0B,0x40,0x58,0x08,0x01,0x9A,0x18,0xFE,0x2C,0x40,0x53,0x40,0x01,
+0x40,0x50,0x14,0xB6,0x88,0xA3,0xA9,0x61,0x48,0x00,0x00,0x7E,0x46,0x41,0x00,0x01,
+0x58,0x42,0x0D,0x80,0x40,0x42,0x00,0x20,0xA7,0x21,0x5A,0x40,0xFE,0x0D,0x2E,0x47,
+0xFD,0x67,0xCC,0x71,0xEA,0x89,0xD4,0x6F,0xA1,0xBB,0x4C,0x62,0x00,0x6D,0xA1,0xBE,
+0x4C,0x62,0x40,0x6A,0x8C,0x6C,0x38,0xB8,0x80,0x00,0x88,0x61,0xB5,0x83,0x05,0x21,
+0x80,0x01,0xA0,0x79,0x4E,0xB3,0x00,0x60,0x40,0x68,0x04,0x08,0x40,0x33,0x24,0x01,
+0xE0,0x65,0x40,0x39,0x04,0x08,0xE9,0x10,0x40,0x41,0xA4,0x01,0xE0,0x81,0xE8,0x1B,
+0x40,0x28,0x14,0x01,0x42,0x29,0x08,0x24,0x40,0x40,0xC8,0x01,0x40,0x21,0x10,0x56,
+0x88,0x50,0xA8,0xBE,0xD5,0x03,0x14,0xB3,0x80,0x06,0x8A,0x69,0xE0,0x61,0xE9,0x3C,
+0x40,0x39,0x04,0x01,0x42,0x38,0x0C,0x24,0x8A,0xB0,0x40,0x21,0x94,0x56,0x40,0x59,
+0x08,0x00,0xD5,0x30,0x99,0x2A,0x8A,0x89,0xE0,0x86,0x40,0xA0,0xCC,0x00,0xE9,0x06,
+0x40,0x45,0x24,0x01,0xE0,0x83,0xE9,0x04,0xD5,0x2E,0xA8,0xBE,0xD5,0x11,0x40,0x68,
+0x14,0x01,0x40,0x49,0x4C,0x01,0xFF,0x34,0x40,0x60,0xC8,0x01,0x40,0x42,0x18,0x96,
+0x88,0x90,0x4E,0x45,0x00,0x04,0xA9,0x3E,0xD5,0x03,0x14,0xB3,0x80,0x06,0x40,0x95,
+0x24,0x01,0xE1,0x23,0xE8,0x04,0x15,0x33,0x80,0x07,0xD5,0x12,0x40,0x38,0x08,0x01,
+0x40,0x29,0x04,0x01,0xFE,0x9C,0x8A,0xB0,0x40,0x51,0x14,0xB6,0x88,0xB2,0x4E,0x55,
+0x00,0x04,0xA9,0x7F,0xD5,0x05,0x50,0x13,0x80,0x18,0x84,0x40,0xA8,0x89,0x84,0x21,
+0x38,0x18,0x80,0x08,0xFC,0xE0,0x3E,0x18,0x02,0x5C,0x38,0x00,0x80,0x00,0xDD,0x9E,
+0xFC,0x20,0x3F,0xCF,0xFE,0x00,0x3E,0x68,0x01,0x40,0x84,0x1F,0x84,0xE0,0x12,0x03,
+0x00,0x44,0x12,0x03,0x00,0x45,0x84,0x20,0x50,0x03,0x00,0x60,0x84,0x4C,0x12,0x73,
+0x00,0x42,0x12,0x73,0x00,0x43,0xDD,0x42,0x80,0x06,0x44,0x10,0xFF,0xFF,0x44,0x20,
+0x00,0x60,0xDD,0x42,0x50,0x03,0x00,0x78,0x84,0x20,0x84,0x4C,0xDD,0x42,0x46,0x11,
+0x41,0x41,0x50,0x03,0x00,0x6C,0x50,0x10,0x84,0x14,0x84,0x4C,0xDD,0x42,0x46,0x01,
+0x00,0x07,0x58,0x00,0x02,0x66,0xA6,0x40,0xA6,0x81,0xEA,0x31,0xB9,0x81,0xA6,0x42,
+0xA6,0x83,0xEA,0x31,0xB9,0x8E,0xA6,0x45,0xA6,0x86,0xEA,0x31,0xB9,0x80,0xA6,0x47,
+0xEB,0x0E,0xEA,0x31,0xB9,0x94,0x00,0x10,0x00,0x0A,0x00,0x20,0x00,0x0B,0xEA,0x31,
+0xB9,0x96,0x00,0x10,0x00,0x0C,0x00,0x20,0x00,0x0D,0xEA,0x31,0xB9,0x97,0x00,0x10,
+0x00,0x0F,0x00,0x20,0x00,0x10,0xEA,0x31,0xB9,0x8C,0x00,0x10,0x00,0x11,0x00,0x00,
+0x00,0x12,0x40,0x00,0x05,0x04,0xB8,0x85,0x3C,0x7B,0xFE,0xDA,0x84,0x20,0x3E,0x08,
+0x02,0xA4,0xFA,0x48,0xDD,0x42,0xFC,0xA0,0xFC,0x20,0x46,0x71,0x00,0x07,0x58,0x73,
+0x83,0x48,0x82,0x00,0x46,0x51,0x00,0x01,0x58,0x52,0x8F,0xF4,0x84,0x00,0x47,0x11,
+0x00,0x01,0x59,0x18,0x8D,0x68,0x00,0x68,0x00,0x00,0x38,0x43,0x98,0x00,0x5A,0x40,
+0xFF,0x18,0x41,0x23,0x98,0x00,0x41,0x32,0x10,0x09,0x01,0x29,0x00,0x01,0x4C,0x29,
+0xC0,0x0C,0x97,0x1F,0xE2,0x64,0xE9,0x08,0x38,0x48,0x84,0x00,0x38,0x42,0x92,0x02,
+0xE2,0x92,0xE9,0x02,0x84,0x01,0x8C,0xC2,0x10,0x68,0x00,0x00,0xD5,0xE5,0xFC,0xA0,
+0x46,0x31,0x00,0x07,0x58,0x31,0x83,0x48,0xA6,0x80,0x38,0x41,0x88,0x00,0x8C,0x41,
+0x5A,0x48,0xFF,0x04,0xAE,0x80,0xDD,0x9E,0xC9,0xFE,0xAE,0x80,0xD5,0xF6,0x3C,0x3D,
+0xFF,0x87,0x84,0x28,0x3E,0x08,0x01,0xFC,0xEA,0x89,0xEB,0x0E,0xC2,0x08,0xCB,0x04,
+0x10,0x30,0x00,0x08,0xD5,0x04,0x8E,0x41,0x10,0x20,0x00,0x08,0xEB,0x0E,0xCA,0x03,
+0xB6,0x80,0xA9,0x01,0x8E,0x21,0x96,0x48,0x8C,0x0C,0xC9,0xF0,0xDD,0x9E,0xFC,0x01,
+0x84,0x6C,0xEA,0x38,0x80,0x5F,0x84,0x00,0x3E,0x48,0x01,0xFC,0x80,0x24,0x42,0x10,
+0x0C,0x73,0x00,0x50,0x80,0x08,0xCD,0x0A,0x46,0x01,0x00,0x07,0x3B,0x01,0x44,0x00,
+0x00,0x00,0x02,0x7A,0xEA,0xEA,0xEA,0xFB,0xD5,0x04,0x8C,0x01,0x5A,0x08,0x08,0xF0,
+0xFC,0x81,0xFC,0x21,0xEA,0x38,0x80,0x80,0x46,0x01,0x00,0x07,0x00,0x60,0x02,0x7D,
+0x46,0x01,0x00,0x07,0x00,0x70,0x02,0x7E,0x46,0x01,0x00,0x07,0x80,0xA1,0x01,0x00,
+0x02,0x7A,0x3E,0x18,0x01,0xFC,0x84,0x68,0x84,0x00,0x00,0x20,0x80,0x08,0xC2,0x14,
+0xB4,0x41,0xE2,0x82,0xE8,0x03,0x8A,0x44,0xD5,0x02,0x9A,0xA2,0xE2,0x46,0xE8,0x0C,
+0xA0,0x89,0xE2,0xA2,0xE8,0x03,0x8A,0x45,0xD5,0x02,0x9A,0xAA,0xE2,0x47,0xE8,0x04,
+0x11,0x00,0x80,0x08,0x84,0x01,0x8E,0x61,0x96,0xD8,0x8C,0x2C,0xCB,0xE7,0xFC,0xA1,
+0xFC,0x01,0xEA,0x38,0x80,0xC0,0x80,0x01,0x2E,0x17,0xFD,0x6D,0xC1,0x04,0x84,0x21,
+0x84,0xA2,0xD5,0x03,0x84,0x22,0x84,0xA1,0x3E,0x48,0x01,0x40,0x38,0x32,0x0B,0x02,
+0xE2,0x66,0xE8,0x03,0x9A,0xF3,0xD5,0x02,0x8A,0x66,0x46,0x61,0x00,0x07,0x00,0x63,
+0x02,0x7F,0xFF,0x74,0xE2,0xA3,0xE9,0x0D,0x40,0x32,0x08,0x60,0xA0,0x99,0xE2,0x40,
+0xE8,0x03,0x9A,0x82,0xD5,0x02,0x8A,0x40,0xFE,0x74,0x40,0x00,0x88,0x06,0xD5,0x02,
+0x84,0x01,0xFC,0x81,0xFC,0x20,0x84,0x00,0x3C,0x0B,0xFE,0xD4,0x3C,0x0B,0xFE,0xE0,
+0x3C,0x0B,0xFE,0xDE,0x46,0x11,0x00,0x07,0x04,0x70,0x83,0xCF,0x46,0x11,0x00,0x07,
+0x00,0x60,0x82,0x6A,0x46,0x11,0x00,0x07,0x00,0x50,0x82,0x6F,0x46,0x11,0x00,0x07,
+0x00,0x40,0x82,0x74,0x46,0x11,0x00,0x07,0x00,0x30,0x82,0x79,0x46,0x11,0x00,0x07,
+0x00,0x20,0x82,0x88,0x46,0x1A,0x11,0xAA,0x50,0x10,0x81,0x1A,0x4C,0x70,0x80,0x0C,
+0x46,0x11,0x00,0x07,0x04,0x70,0x83,0xCF,0x46,0x1A,0x33,0xAA,0x50,0x10,0x83,0x3A,
+0x4C,0x70,0xC0,0x26,0x84,0x00,0x3E,0x07,0xFD,0x6D,0x44,0x00,0x00,0x96,0x3C,0x0B,
+0xFE,0xDD,0x44,0x00,0x00,0x32,0x3C,0x0B,0xFE,0xDF,0x3C,0x6B,0xFE,0xD8,0x3C,0x5B,
+0xFE,0xDC,0x3C,0x4B,0xFE,0xD3,0x3C,0x3B,0xFE,0xDB,0x46,0x01,0x00,0x07,0x00,0x00,
+0x02,0x82,0x3C,0x0B,0xFE,0xD5,0x46,0x01,0x00,0x07,0x00,0x00,0x02,0x83,0x94,0x01,
+0x3C,0x0B,0xFE,0xD7,0x3C,0x2B,0xFE,0xD9,0x84,0x00,0xD5,0x21,0x84,0x21,0x3E,0x17,
+0xFD,0x6D,0x44,0x10,0x00,0x32,0x3C,0x1B,0xFE,0xDD,0x3C,0x1B,0xFE,0xDF,0x3C,0x6B,
+0xFE,0xD8,0x3C,0x5B,0xFE,0xDC,0x3C,0x4B,0xFE,0xD3,0x3C,0x3B,0xFE,0xDB,0x46,0x11,
+0x00,0x07,0x00,0x10,0x82,0x84,0x3C,0x1B,0xFE,0xD5,0x46,0x11,0x00,0x07,0x00,0x10,
+0x82,0x85,0x94,0x49,0x3C,0x1B,0xFE,0xD7,0x3C,0x2B,0xFE,0xD9,0x3C,0x0B,0xFE,0xD6,
+0xFC,0xA0,0xFC,0x01,0x3F,0xC8,0x01,0x20,0x46,0x21,0x00,0x07,0x04,0x51,0x03,0xCF,
+0x46,0x3A,0x11,0xAA,0xEA,0x38,0x50,0x31,0x81,0x1A,0x80,0x20,0x3C,0x23,0xFE,0xD7,
+0xF0,0x01,0xDB,0x03,0xE2,0x02,0xD5,0x0D,0x46,0x31,0x00,0x07,0x04,0x51,0x83,0xCF,
+0x46,0x3A,0x33,0xAA,0x50,0x31,0x83,0x3A,0xDB,0x0A,0xBB,0x01,0x9A,0x9A,0xE2,0x40,
+0xE8,0x15,0x3C,0x03,0xFE,0xD5,0xE2,0x20,0xE8,0x0A,0xD5,0x0E,0xE2,0x02,0xE9,0x05,
+0xBB,0x01,0x9A,0x9A,0xE2,0x40,0xE8,0x0A,0x3C,0x03,0xFE,0xD5,0xBA,0x00,0x9A,0x10,
+0x40,0x00,0x04,0x06,0xD5,0x04,0x84,0x01,0xD5,0x02,0x84,0x00,0xFC,0x81,0xFC,0x21,
+0x80,0xE0,0x3A,0x1F,0x88,0x20,0x3A,0x0F,0x84,0x00,0x80,0x47,0x80,0xDF,0x49,0xFF,
+0xFF,0xC2,0x5A,0x08,0x01,0x0A,0x3C,0x13,0xFE,0xDA,0x40,0x20,0x1C,0x0C,0xFE,0x57,
+0x3C,0x1B,0xFE,0xDA,0xD5,0x02,0x84,0x00,0xB4,0x5F,0x3E,0x18,0x02,0x8C,0x38,0x20,
+0x9D,0x09,0xA0,0xB1,0x3E,0x18,0x02,0xBC,0x38,0x20,0x9D,0x09,0xFC,0xA1,0xEB,0x78,
+0xEA,0x71,0x38,0x00,0x80,0x00,0x3E,0x18,0x01,0xCC,0x40,0x10,0x80,0x40,0xA6,0x0A,
+0xA6,0x4B,0x8A,0x01,0x96,0x01,0xDD,0x9E,0xEB,0x78,0xEA,0x71,0x38,0x20,0x80,0x00,
+0x3E,0x18,0x01,0xCC,0x40,0x00,0x88,0x40,0xA6,0x01,0x38,0x10,0x8A,0x00,0x8A,0x01,
+0x96,0x01,0xDD,0x9E,0xEB,0x78,0xEA,0x71,0x38,0x30,0x80,0x00,0x46,0x01,0x00,0x01,
+0x58,0x00,0x0F,0xDC,0x40,0x10,0x0C,0x20,0xA6,0x49,0x80,0x80,0xE6,0x22,0xE8,0x18,
+0x38,0x00,0x0D,0x00,0xE6,0x02,0xE8,0x14,0xEB,0x54,0x22,0xF0,0x05,0x4C,0xF8,0x08,
+0xEB,0x54,0x22,0xF0,0x05,0x70,0xF8,0x04,0xEB,0x54,0x22,0xF0,0x05,0x4D,0xDD,0x5F,
+0x4E,0xF3,0x00,0x79,0x83,0xFF,0xEB,0x54,0x22,0xF0,0x05,0x71,0xD5,0x3D,0xEA,0x3C,
+0x9E,0x82,0xE0,0x22,0x4E,0xF3,0x00,0x6D,0x38,0x52,0x0D,0x00,0xE6,0xA2,0xE8,0x15,
+0x46,0x11,0x00,0x02,0xEB,0x17,0x40,0x20,0x80,0x20,0x22,0xF1,0x0C,0xA9,0xDD,0x5F,
+0xE9,0x61,0x22,0xF1,0x0C,0xCD,0xDD,0x5F,0xE9,0x5D,0x22,0xF1,0x0C,0xA8,0xDD,0x5F,
+0xE9,0x59,0x22,0xF1,0x0C,0xCC,0xD5,0x20,0xE6,0x22,0xE8,0x20,0xEA,0xB0,0x38,0x12,
+0x0D,0x00,0x9F,0x42,0xE0,0x25,0xE9,0x4E,0x9E,0x41,0xEB,0x64,0x58,0x00,0x01,0x44,
+0x44,0x20,0x00,0x48,0x80,0x60,0x42,0x30,0x88,0x73,0x22,0xF1,0x8C,0xAA,0xDD,0x5F,
+0xE9,0x41,0x42,0x02,0x88,0x73,0xF8,0x23,0xE9,0x3D,0x22,0xF1,0x8C,0xAB,0xDD,0x5F,
+0xE9,0x39,0x22,0xF0,0x0C,0xAB,0xF8,0x2C,0xDD,0x9E,0xFC,0x00,0x2E,0x10,0x01,0x29,
+0x9F,0x8A,0xE0,0xA6,0xE9,0x2B,0x8E,0x21,0xFA,0x74,0xFE,0x5C,0x8E,0x01,0x46,0x41,
+0x00,0x02,0x58,0x42,0x01,0x44,0x99,0x48,0x40,0x52,0x14,0x20,0x22,0xF2,0x8C,0xAA,
+0xDD,0x5F,0xE9,0x1C,0xFE,0xF4,0x88,0x03,0x40,0x02,0x00,0x20,0x22,0xF0,0x0C,0xAA,
+0xDD,0x5F,0x83,0xFF,0xE9,0x13,0x88,0x22,0x40,0x12,0x04,0x20,0x22,0xF0,0x8C,0xAA,
+0xDD,0x5F,0xE9,0x0C,0x88,0x43,0x40,0x22,0x08,0x20,0x22,0xF1,0x0C,0xAA,0x44,0x00,
+0x00,0x96,0x40,0x00,0x3C,0x07,0x83,0xFF,0xD5,0x07,0x84,0x00,0xD5,0x05,0xE6,0x22,
+0xE9,0xAE,0x84,0x00,0xDD,0x9E,0xFC,0x80,0xFC,0x62,0x3F,0xC8,0x01,0x20,0xEA,0x38,
+0x81,0x20,0x80,0x02,0x80,0xE2,0x81,0x41,0x49,0xFF,0xFF,0x43,0x54,0xB0,0x00,0xFF,
+0x80,0xC0,0x80,0x07,0x49,0xFF,0xFF,0x4A,0x54,0xC0,0x00,0xFF,0x80,0x80,0x46,0xE1,
+0x00,0x01,0x58,0xE7,0x0D,0x68,0x84,0x00,0x10,0x0F,0x80,0x0F,0xEA,0xCA,0x46,0xD1,
+0x00,0x01,0x58,0xD6,0x8F,0xF4,0xEB,0x37,0x42,0xF6,0x2C,0x24,0xE2,0x0F,0xE8,0x07,
+0x97,0xB0,0x97,0x20,0xFF,0x34,0x9B,0xA0,0x97,0xB1,0xD5,0x03,0x44,0x60,0x00,0xFF,
+0x46,0x01,0x00,0x07,0x00,0x10,0x02,0x7C,0xE3,0x41,0xE9,0x06,0xB8,0x01,0x85,0x00,
+0x8A,0x01,0xE2,0x0A,0xE8,0x09,0xEA,0x39,0x80,0x27,0x80,0x4B,0x80,0x6C,0xEA,0x86,
+0x85,0x00,0x40,0x84,0x00,0x06,0xEA,0x39,0x80,0x28,0xEA,0xBF,0x46,0x01,0x00,0x07,
+0x00,0x00,0x02,0x7C,0xE3,0x40,0xE9,0x05,0xB9,0x01,0x8A,0x20,0xE2,0x2A,0xE8,0x19,
+0xE3,0x20,0xE9,0x05,0xB9,0x00,0x9A,0x08,0xE2,0x09,0xE8,0x13,0xEA,0xCA,0xEB,0x37,
+0xE2,0x06,0xE8,0x0F,0x9A,0x30,0xE6,0x03,0xE9,0x0C,0x80,0x07,0x49,0xFF,0xFF,0x0C,
+0xC0,0x08,0xEA,0x39,0x80,0x27,0x80,0x4B,0x80,0x6C,0xEA,0x86,0xC0,0x02,0x85,0x01,
+0xEA,0x39,0x80,0x28,0xEA,0xBF,0x2E,0x07,0xFD,0x6D,0xC8,0x33,0x46,0x01,0x00,0x07,
+0x00,0x10,0x02,0x7C,0xE3,0x21,0xE9,0x05,0xB8,0x00,0x8A,0x01,0xE2,0x09,0xE8,0x08,
+0xEA,0x39,0x80,0x27,0x80,0x4C,0x80,0x6B,0xEA,0x86,0xC0,0x02,0x85,0x01,0xEA,0x39,
+0x80,0x28,0xEA,0xBF,0x46,0x01,0x00,0x07,0x00,0x00,0x02,0x7C,0xE3,0x40,0xE9,0x05,
+0xB9,0x01,0x8A,0x20,0xE2,0x2A,0xE8,0x15,0xE3,0x20,0xE9,0x05,0xB9,0x00,0x9A,0x08,
+0xE2,0x09,0xE8,0x0F,0xEA,0xCA,0xEB,0x37,0xE2,0x06,0xE8,0x0B,0x8A,0xC0,0xE6,0xC4,
+0xE9,0x08,0xEA,0x39,0x80,0x27,0x80,0x4C,0x80,0x6B,0xEA,0x86,0xC0,0x02,0x85,0x01,
+0x80,0x08,0xFC,0xE2,0x40,0x00,0x04,0x0E,0x96,0x04,0xDD,0x9E,0x84,0x41,0x40,0x11,
+0x04,0x0C,0xA4,0x80,0xFE,0x57,0xAC,0x40,0xDD,0x9E,0x44,0x2E,0xFF,0xFF,0x40,0x11,
+0x04,0x0C,0xA4,0x80,0x40,0x11,0x06,0x1E,0xAC,0x40,0xDD,0x9E,0xFC,0x20,0x3E,0x78,
+0x01,0x40,0x80,0xC0,0x84,0x20,0x98,0x38,0x10,0x10,0x00,0x6C,0x50,0x03,0x80,0x84,
+0x80,0x26,0xF8,0x7E,0x50,0x03,0x80,0x86,0x80,0x26,0xF8,0x7A,0x50,0x03,0x80,0x8A,
+0x80,0x26,0xF8,0x76,0x50,0x03,0x80,0x88,0x80,0x26,0xF8,0x72,0xFC,0xA0,0xFC,0x41,
+0xEA,0x38,0x84,0x01,0x3C,0x10,0x00,0xE3,0x40,0x00,0x08,0x0C,0x96,0x03,0x80,0xC2,
+0xFE,0x47,0x3C,0x18,0x00,0xE3,0x3C,0x10,0x00,0xE2,0x3E,0x98,0x01,0x40,0xFE,0x0F,
+0x3C,0x08,0x00,0xE2,0x40,0x04,0x98,0x00,0x84,0x3F,0xEA,0x2F,0x50,0x04,0x80,0x8A,
+0x80,0x26,0x80,0xE3,0xF8,0x55,0x50,0x04,0x80,0x88,0x80,0x26,0xF8,0x51,0xC7,0x07,
+0x40,0x64,0x98,0x60,0x3B,0x0F,0xC4,0x00,0x3B,0x03,0x44,0x20,0xFC,0xC1,0xFC,0x62,
+0xB6,0x1F,0x50,0x9F,0x80,0x08,0x3A,0x14,0x88,0x20,0xEA,0xDB,0x3C,0x83,0xFE,0xDA,
+0x46,0x01,0x00,0x07,0x00,0xA0,0x02,0x7C,0xEB,0x3D,0x84,0xC0,0x40,0xC0,0x28,0x01,
+0xEA,0xB8,0x50,0xB1,0x80,0x0C,0x40,0xD0,0x28,0x01,0x80,0xE6,0x4C,0x71,0x00,0x1D,
+0x80,0x08,0x80,0x27,0xF2,0x81,0xF8,0x21,0x04,0xE5,0x80,0x00,0x05,0xC5,0x80,0x01,
+0xF2,0x01,0xC8,0x0D,0xE3,0x4E,0xE8,0x0B,0x40,0xF7,0x30,0x06,0xE8,0x08,0xE3,0x5C,
+0xE8,0x06,0x40,0xFE,0x34,0x06,0xE8,0x03,0x8C,0xC1,0x97,0xB0,0x8C,0xE1,0x97,0xF8,
+0x50,0xB5,0x80,0x30,0xD5,0xE4,0xC6,0x07,0x80,0x08,0xB4,0x3F,0xF8,0x06,0x84,0xC0,
+0x40,0x63,0x00,0x06,0x80,0x08,0xB4,0x3F,0xDD,0x56,0xC0,0x0B,0x3A,0x04,0x84,0x00,
+0xB4,0x5F,0x49,0xFF,0xFD,0x1F,0xC0,0x05,0x3E,0x0F,0xFD,0xB4,0xB4,0x3F,0xEA,0x4E,
+0x80,0x06,0xFC,0xE2,0xFC,0x63,0x3F,0xCF,0xFE,0x00,0xEB,0x45,0x42,0x10,0x98,0x0B,
+0x4E,0x12,0x02,0x43,0x46,0x11,0x00,0x07,0x00,0x10,0x82,0x87,0x5A,0x18,0xFF,0x07,
+0x46,0x11,0x00,0x07,0x00,0x10,0x82,0x81,0xD5,0x02,0x96,0x49,0xF1,0x82,0x81,0x80,
+0x84,0xC0,0x49,0xFF,0xFC,0x9E,0x44,0xD0,0xFF,0xFF,0x49,0xFF,0xFD,0x25,0x3E,0x78,
+0x01,0x40,0x50,0xAF,0x80,0x10,0x46,0xE1,0x00,0x01,0x58,0xE7,0x0D,0x08,0xEA,0x2C,
+0xE2,0xC0,0x4E,0xF2,0x01,0xD1,0x81,0x6C,0xDD,0x47,0x42,0xB3,0x00,0x73,0x8D,0x6C,
+0xB5,0x2B,0x4C,0x96,0xC0,0x60,0x54,0x93,0x00,0xFF,0xEB,0x28,0x80,0x29,0xDD,0x56,
+0xC0,0x1F,0xEA,0xA9,0x80,0x29,0xDD,0x56,0xC8,0x1B,0x98,0x3E,0x00,0x10,0x00,0x60,
+0xF2,0x02,0xE2,0x22,0xE8,0x2A,0xE6,0x24,0xE9,0x28,0x46,0x11,0x00,0x07,0x00,0x10,
+0x82,0x86,0x10,0x10,0x00,0x78,0x94,0x33,0x98,0x78,0xEA,0x6B,0x3B,0x05,0xC4,0x20,
+0xEA,0x2A,0x14,0x15,0x80,0x02,0x88,0x0E,0x3B,0x05,0xC4,0x00,0xD5,0x11,0x98,0x7E,
+0x00,0x00,0x80,0x78,0xC0,0x12,0x8E,0x01,0x10,0x00,0x80,0x78,0x94,0x33,0x98,0x78,
+0xEA,0x6B,0xEA,0x2A,0x3B,0x05,0xC4,0x20,0x14,0x15,0x80,0x02,0x88,0x0E,0x3B,0x00,
+0x44,0x20,0xB8,0x11,0x8C,0x01,0xB8,0x91,0x98,0x3E,0x00,0x00,0x00,0x78,0xC8,0x06,
+0xEB,0x44,0x38,0xD3,0x9B,0x0A,0x14,0xD0,0x00,0x01,0x98,0x3E,0x84,0x20,0xEA,0x2F,
+0xFA,0x24,0x10,0x10,0x00,0x6C,0x80,0x29,0x3E,0x08,0x01,0xC8,0xEA,0xF2,0x80,0x29,
+0x3E,0x08,0x01,0xCA,0xEA,0xF2,0x80,0x29,0x3E,0x08,0x01,0xC4,0xEA,0x4E,0x80,0x29,
+0x3E,0x08,0x01,0xC6,0xEA,0x4E,0x3E,0x0F,0xFD,0xB4,0x80,0x29,0xEA,0x4E,0x48,0x00,
+0x01,0x67,0x96,0x30,0x3B,0x05,0xC4,0x00,0xF0,0x81,0x3C,0x00,0x00,0xE4,0xF1,0x01,
+0x3B,0x05,0x44,0x20,0x81,0x11,0xDD,0x56,0xC0,0x1A,0x14,0x9F,0x80,0x04,0x14,0x8F,
+0x80,0x05,0xEA,0x2E,0x49,0xFF,0xFC,0x47,0xC0,0x06,0xEA,0x2E,0xF2,0x01,0x84,0x61,
+0xEA,0xF7,0xD5,0x0D,0xEA,0x2E,0xF2,0x01,0x49,0xFF,0xFE,0x18,0xC0,0x08,0xEA,0x2E,
+0xF2,0x01,0x84,0x61,0xEA,0xF7,0xEA,0x2E,0x49,0xFF,0xFC,0x1B,0x2E,0x17,0xFD,0x6D,
+0x46,0x01,0x00,0x07,0x00,0x00,0x02,0x7C,0xC9,0x07,0xE2,0x09,0xE8,0x10,0xEA,0xDE,
+0x9A,0x08,0xE3,0x20,0xD5,0x07,0xE2,0x08,0xE8,0x0A,0x3C,0x1C,0x00,0x49,0x9A,0x08,
+0xE3,0x00,0xE8,0x05,0x3E,0x08,0x01,0xC8,0xF1,0x01,0xEA,0x4E,0x14,0x9F,0x80,0x04,
+0x14,0x8F,0x80,0x05,0xEA,0x2E,0x49,0xFF,0xFC,0x16,0xEA,0xA9,0xF1,0x01,0xDD,0x56,
+0xC0,0x09,0xEA,0x2E,0xF2,0x01,0x49,0xFF,0xFC,0x3D,0xC0,0x04,0xF0,0x01,0x49,0xFF,
+0xFE,0x97,0x3C,0x00,0x00,0xE5,0xF1,0x01,0xDD,0x56,0xC0,0x44,0x3A,0x15,0x08,0x00,
+0xF0,0x01,0x49,0xFF,0xFD,0x06,0xB9,0x01,0xE2,0x29,0xE8,0x08,0xB9,0x0E,0xE3,0x21,
+0xE8,0x05,0x3C,0x13,0xFE,0xD8,0xE3,0x01,0xE9,0x26,0xB9,0x00,0xE2,0x29,0xE8,0x0B,
+0xB9,0x14,0xE3,0x21,0xE8,0x08,0x3C,0x23,0xFE,0xDC,0x3C,0x1C,0x00,0x49,0x8A,0x22,
+0xE2,0x28,0xE9,0x19,0xB9,0x16,0xE2,0x28,0xE8,0x08,0xB9,0x17,0xE3,0x01,0xE8,0x05,
+0x3C,0x13,0xFE,0xD3,0xE3,0x21,0xE9,0x0F,0xB9,0x0C,0xE2,0x28,0xE8,0x0A,0xB9,0x05,
+0xE3,0x01,0xE8,0x07,0x3C,0x23,0xFE,0xDB,0xEA,0xDE,0x8A,0x22,0xE2,0x29,0xE9,0x03,
+0x96,0x04,0xC0,0x0C,0xEB,0x44,0xB7,0x20,0x14,0x80,0x00,0x01,0xF1,0x01,0x3E,0x08,
+0x01,0xC4,0xEA,0xF2,0x98,0x3E,0x84,0x20,0xEA,0x2F,0x3E,0x08,0x01,0xCA,0xF1,0x01,
+0xEA,0x4E,0xEB,0x28,0xF1,0x01,0xDD,0x56,0xC0,0x33,0xEA,0xA9,0xF1,0x01,0xDD,0x56,
+0xC8,0x2F,0x98,0x7E,0x00,0x00,0x80,0x60,0x5A,0x00,0xFF,0x05,0x8C,0x01,0x10,0x00,
+0x80,0x60,0x38,0x03,0x9B,0x02,0xE2,0x09,0xE8,0x04,0x40,0x04,0x80,0x01,0xD5,0x02,
+0x8A,0x09,0x46,0x11,0x00,0x07,0x00,0x10,0x82,0x80,0xE2,0x20,0xE9,0x16,0xEB,0x44,
+0xA0,0x01,0xE2,0x08,0xE8,0x04,0x40,0x04,0x00,0x01,0xD5,0x02,0x8A,0x08,0xE2,0x20,
+0xE9,0x0C,0x46,0x01,0x00,0x07,0x00,0x00,0x02,0x87,0x5A,0x00,0xFF,0x0A,0x98,0x7E,
+0x00,0x10,0x80,0x60,0xE2,0x01,0xE8,0x04,0xF0,0x01,0x49,0xFF,0xFE,0x19,0xF0,0x01,
+0x3A,0x15,0x08,0x00,0x80,0x6C,0x49,0xFF,0xFE,0x54,0x5A,0x08,0x01,0x06,0xEA,0x2E,
+0xF2,0x01,0x84,0x60,0xEA,0xF7,0xEB,0x28,0xF1,0x01,0xDD,0x56,0x80,0x80,0xC0,0x1A,
+0xF0,0x83,0xEA,0xA9,0xF1,0x01,0xDD,0x56,0xF4,0x03,0xC8,0x14,0x3C,0x13,0xFE,0xD9,
+0xE3,0x01,0xE9,0x0D,0xEA,0xB8,0x8A,0x01,0xE2,0x08,0xE9,0x09,0x3C,0x13,0xFE,0xD6,
+0xE3,0x21,0xE9,0x05,0xEB,0x3D,0x8A,0x01,0xE2,0x09,0xE8,0x04,0x98,0x3E,0x84,0x20,
+0xEA,0x2F,0x98,0x3E,0x00,0x20,0x00,0x6C,0xE6,0x54,0xE8,0x61,0x8C,0x41,0x96,0x90,
+0x46,0x11,0x00,0x07,0x10,0x20,0x00,0x6C,0x00,0x10,0x82,0x87,0x00,0x00,0x00,0x60,
+0x94,0xF3,0xE2,0x01,0xE8,0x3D,0x5A,0x10,0xFF,0x3C,0x38,0x53,0x9B,0x01,0x3D,0x1C,
+0x00,0x48,0x98,0x3B,0x40,0x28,0x94,0x01,0xA4,0x02,0x3D,0x0C,0x00,0x49,0x96,0x91,
+0x40,0x18,0x00,0x01,0xE2,0xA2,0x96,0x49,0xE8,0x08,0xE2,0xA0,0xE8,0x06,0xE2,0xA1,
+0xE8,0x04,0x86,0x40,0x39,0x23,0x9B,0x0A,0xE2,0x45,0xE8,0x08,0xE2,0x40,0xE8,0x06,
+0xE2,0x41,0xE8,0x04,0x8F,0xA1,0x39,0x13,0x9B,0x0A,0xE2,0x05,0xE8,0x0A,0xE2,0x02,
+0xE8,0x08,0xE2,0x01,0xE8,0x06,0x41,0x13,0x8C,0x00,0x86,0x40,0x15,0x28,0x80,0x01,
+0xE2,0x25,0xE8,0x09,0xE2,0x22,0xE8,0x07,0xE2,0x20,0xE8,0x05,0x98,0x3B,0x8F,0x81,
+0x15,0x00,0x00,0x01,0x88,0x67,0xB5,0x23,0x04,0x81,0x80,0x01,0xD5,0x12,0x38,0x03,
+0x9B,0x02,0xFA,0xA4,0x40,0x14,0x80,0x01,0xFE,0x54,0x88,0x67,0x40,0x90,0x95,0x36,
+0x89,0x20,0xA0,0x19,0x40,0x14,0x00,0x01,0xFE,0x54,0x40,0x80,0x95,0x16,0x89,0x00,
+0x98,0x3E,0x84,0x3F,0xB7,0x2B,0x14,0x85,0x80,0x01,0xEA,0x2F,0xC4,0x08,0x84,0x00,
+0x14,0xD5,0x80,0x00,0x14,0xD5,0x80,0x01,0x14,0x05,0x80,0x02,0x8C,0xC1,0x97,0xB1,
+0x48,0xFF,0xFE,0x2F,0x84,0x00,0x49,0xFF,0xFC,0x14,0x46,0x11,0x00,0x07,0x12,0x00,
+0x81,0xDF,0x84,0x00,0x49,0xFF,0xFC,0x1A,0x46,0x11,0x00,0x07,0x12,0x00,0x81,0xE0,
+0x46,0x01,0x00,0x01,0x00,0x10,0x0D,0x68,0x46,0x01,0x00,0x01,0x58,0x00,0x0F,0xF4,
+0x38,0x00,0x06,0x01,0x46,0x11,0x00,0x07,0x12,0x00,0x81,0xE1,0x3C,0x40,0x00,0xE2,
+0x46,0x11,0x00,0x07,0x3C,0x30,0x00,0xE3,0x84,0x00,0x12,0x00,0x81,0xE2,0x46,0x11,
+0x00,0x07,0x12,0x00,0x81,0xE3,0x84,0xAA,0x84,0x25,0x84,0x01,0x46,0x21,0x00,0x07,
+0x02,0x21,0x01,0xE2,0x97,0xA4,0x42,0x20,0x18,0x73,0x46,0x61,0x00,0x07,0x96,0x91,
+0x12,0x23,0x01,0xE2,0x46,0x21,0x00,0x07,0x97,0x9C,0x02,0x21,0x01,0xE3,0x42,0x20,
+0x18,0x73,0x8E,0x21,0xFE,0x2C,0x96,0x91,0x46,0x61,0x00,0x07,0x96,0x49,0x12,0x23,
+0x01,0xE3,0x92,0x81,0x92,0x61,0x96,0x01,0xC9,0xE2,0x2E,0x00,0x01,0xA0,0x46,0x11,
+0x00,0x07,0x12,0x00,0x81,0xE4,0xFC,0xE3,0x3E,0x18,0x01,0x40,0x88,0x01,0x00,0x00,
+0x00,0x78,0xDD,0x9E,0xFC,0x60,0x47,0x01,0x00,0x07,0x59,0x08,0x02,0x4E,0x47,0x21,
+0x00,0x07,0x59,0x29,0x02,0x1E,0x2E,0x90,0x01,0x2B,0x8C,0x04,0x84,0x80,0xEA,0xB5,
+0x46,0x71,0x00,0x01,0x58,0x73,0x8E,0x38,0x81,0x50,0x47,0x11,0x00,0x07,0x59,0x18,
+0x82,0x36,0x81,0x72,0x47,0x31,0x00,0x07,0x59,0x39,0x82,0x06,0x96,0x60,0xE2,0x29,
+0xE8,0x4B,0x04,0x50,0x7F,0xFF,0xD6,0x45,0xB4,0x20,0x4C,0x13,0x00,0x43,0x40,0x23,
+0x90,0x60,0x38,0x53,0x93,0x0A,0xA8,0x51,0xEB,0x45,0xEB,0x34,0xC1,0x1B,0x84,0x41,
+0x38,0x89,0x09,0x01,0xE3,0x05,0xE8,0x04,0x8C,0x41,0x96,0x90,0xD5,0xFA,0x9E,0x51,
+0x96,0x48,0x38,0x39,0x85,0x01,0x38,0xF5,0x85,0x01,0x38,0x19,0x89,0x01,0x8A,0xAF,
+0x8A,0x23,0xFE,0x6C,0x40,0x54,0x3C,0x01,0x40,0x50,0x94,0xB7,0x88,0xA3,0x14,0x50,
+0x7F,0xFF,0xEB,0x45,0xEA,0x8B,0xC1,0x1D,0xB4,0x40,0x84,0x61,0x38,0x18,0x0D,0x01,
+0xE2,0x22,0xE8,0x04,0x8C,0x61,0x96,0xD8,0xD5,0xFA,0x9F,0x59,0x54,0xC2,0x80,0xFF,
+0x38,0xF5,0x31,0x01,0x38,0x58,0xB1,0x01,0x40,0x81,0x3C,0x01,0x38,0x28,0x8D,0x01,
+0x8A,0x2F,0x8A,0x45,0x42,0x24,0x08,0x24,0x40,0x11,0x04,0x37,0x88,0x25,0xB6,0x20,
+0x8C,0x81,0x8C,0x0C,0xD5,0xB4,0xFC,0xE0,0x3C,0x1D,0xFF,0x82,0x5A,0x18,0x02,0x07,
+0x2E,0x37,0xFD,0x54,0x2E,0x47,0xFD,0x6A,0xD5,0x05,0x2E,0x37,0xFD,0x5A,0x2E,0x47,
+0xFD,0x1D,0x2E,0x27,0xFD,0x4B,0xC8,0x12,0x5A,0x28,0x01,0x22,0x2E,0x17,0xFE,0x7C,
+0x8C,0x21,0x96,0x48,0xE2,0x24,0x3E,0x17,0xFE,0x7C,0xE9,0x19,0x3E,0x07,0xFD,0x4B,
+0x3E,0x07,0xFE,0x7C,0x3E,0x07,0xFE,0x7B,0xD5,0x12,0x5A,0x08,0x01,0x11,0xCA,0x0F,
+0x2E,0x17,0xFE,0x7B,0x8C,0x21,0x96,0x48,0xE2,0x23,0x3E,0x17,0xFE,0x7B,0xE9,0x07,
+0x3E,0x07,0xFD,0x4B,0x3E,0x27,0xFE,0x7C,0x3E,0x27,0xFE,0x7B,0x2E,0x57,0xFD,0x4B,
+0xD8,0x06,0x84,0x00,0x3E,0x07,0xFE,0x7C,0x3E,0x07,0xFE,0x7B,0xDD,0x9E,0xFC,0x69,
+0x3F,0xCF,0xFE,0x1C,0x2E,0x77,0xFD,0x4B,0xB8,0x00,0x8E,0xE1,0xE6,0x02,0x5C,0x73,
+0x80,0x01,0x84,0xC0,0xE9,0x04,0x9F,0x81,0xFF,0x84,0x92,0xC1,0x50,0x8F,0x80,0x3C,
+0x80,0x08,0x84,0x20,0x84,0x4C,0xDD,0x42,0x46,0xD1,0x00,0x02,0x58,0xD6,0x80,0xB4,
+0x85,0x60,0x46,0x51,0x00,0x01,0x58,0x52,0x8F,0xDC,0x46,0xA1,0x00,0x02,0x58,0xA5,
+0x00,0x24,0x81,0x2D,0x80,0x6B,0x81,0x85,0x85,0xDF,0x47,0x31,0x00,0x01,0x59,0x39,
+0x8F,0xF4,0xB8,0x00,0xE2,0x60,0xE8,0x68,0x38,0x14,0x0C,0x00,0x51,0x01,0x80,0x01,
+0xC9,0x3C,0x3D,0x13,0xFE,0xD1,0x41,0x21,0x84,0x08,0x80,0x90,0x41,0x48,0x84,0x08,
+0x41,0x59,0x14,0x00,0x4C,0x40,0x00,0x32,0x41,0x72,0x04,0x08,0x40,0x26,0x5C,0x00,
+0x00,0x1A,0x80,0x01,0xA6,0x91,0x8A,0x22,0xEB,0x14,0x96,0x48,0xE6,0x2C,0xE8,0x05,
+0xFE,0x4C,0x55,0x60,0x80,0xFF,0xD5,0x03,0x45,0x60,0x00,0x79,0x38,0x26,0x48,0x00,
+0x38,0x16,0x5C,0x00,0x9A,0x51,0xEB,0x14,0x96,0x48,0xE6,0x2C,0xE8,0x04,0xFE,0x4C,
+0x96,0x48,0xD5,0x03,0x44,0x10,0x00,0x79,0x88,0x36,0x96,0x48,0xE3,0xA1,0xE9,0x07,
+0x38,0xE4,0x0C,0x08,0x84,0xE1,0x38,0xE4,0x10,0x08,0xD5,0x05,0x40,0xFA,0x04,0x07,
+0xE8,0x02,0x8D,0x61,0x8C,0x81,0xD5,0xCF,0x2E,0x07,0xFF,0xCF,0x38,0x19,0x8E,0x02,
+0xE2,0x20,0xE9,0x10,0x80,0x49,0x80,0x6A,0xA0,0x52,0xA0,0x1A,0x88,0x01,0xA8,0x12,
+0xB4,0x29,0xB4,0x0A,0x88,0x01,0xB6,0x09,0xA0,0x51,0xA0,0x19,0x88,0x01,0xA8,0x11,
+0xD5,0x0F,0x96,0x18,0x15,0x3F,0x80,0x03,0xF5,0x82,0x15,0x0F,0x80,0x01,0x49,0x00,
+0x00,0xDF,0x05,0x0F,0x80,0x01,0xF5,0x02,0x05,0x3F,0x80,0x03,0xC8,0xE4,0x80,0x70,
+0x8D,0x2C,0x8D,0x4C,0xD5,0x97,0x4C,0xB3,0x40,0x03,0x84,0xE0,0x80,0x07,0x49,0xFF,
+0xFF,0x2D,0xBF,0x00,0xCF,0x05,0x3E,0x77,0xFD,0x35,0x3E,0x77,0xFD,0x4A,0x3C,0x9C,
+0x00,0x48,0xEA,0x3C,0xF0,0x86,0x3C,0xAC,0x00,0x49,0xEA,0xB0,0xF0,0x87,0x50,0x04,
+0xFF,0xFF,0xF0,0x81,0x50,0x05,0x7F,0xFF,0xF0,0x82,0x2E,0x00,0x00,0x14,0x46,0x81,
+0x00,0x01,0x58,0x84,0x0D,0x98,0x96,0x44,0xEA,0x8A,0xF0,0x8A,0x2E,0x07,0xFD,0x5C,
+0xF0,0x8B,0x2E,0x60,0x00,0x8B,0xF1,0x88,0x54,0x03,0x00,0xF0,0xF0,0x83,0x40,0x05,
+0x00,0x01,0xF0,0x8C,0x95,0xB4,0x2E,0x07,0xFD,0x35,0x97,0xB0,0xF0,0x85,0x40,0x04,
+0x98,0x01,0xF0,0x8D,0x2E,0x17,0xFD,0x6B,0x2E,0x07,0xFD,0x4A,0xF1,0x89,0xF0,0x84,
+0x85,0x60,0x81,0x88,0x4C,0xB3,0x80,0x71,0xB4,0x0D,0x04,0xE6,0x80,0x02,0xF2,0x06,
+0x84,0x60,0x42,0x00,0x24,0x69,0xEA,0x68,0x80,0x4E,0x84,0x60,0xEA,0x68,0xF2,0x06,
+0x40,0x24,0x88,0x57,0x92,0x41,0xC9,0x04,0xC9,0x05,0xE2,0x40,0xE8,0x03,0x8A,0x02,
+0xD5,0x02,0x84,0x00,0xB6,0x08,0x04,0x06,0x80,0x01,0xF2,0x07,0x84,0x60,0x42,0x00,
+0x28,0x69,0xEA,0x68,0x80,0x4E,0x84,0x60,0xEA,0x68,0xF2,0x07,0x40,0x25,0x08,0x57,
+0x92,0x41,0xC9,0x04,0xC9,0x05,0xE2,0x40,0xE8,0x03,0x8A,0x02,0xD5,0x02,0x84,0x00,
+0x14,0x04,0x00,0x01,0xB4,0x08,0xE2,0x09,0xE9,0x03,0xF0,0x01,0xB6,0x08,0x04,0x04,
+0x00,0x01,0xE2,0x0A,0xE9,0x04,0xF0,0x02,0x14,0x04,0x00,0x01,0xF0,0x08,0xC0,0x05,
+0xB4,0x08,0xF1,0x01,0x9A,0x08,0xB6,0x08,0xB4,0x08,0xF1,0x09,0xEB,0x75,0x58,0x21,
+0x0E,0xA4,0x40,0x10,0x04,0x37,0x38,0x11,0x2C,0x08,0xF1,0x0A,0xC1,0x06,0x80,0x68,
+0xA0,0x59,0xF2,0x02,0x9A,0x51,0xA8,0x59,0x04,0x14,0x00,0x01,0xF2,0x0B,0xEB,0x67,
+0x58,0x31,0x8E,0x98,0x40,0x20,0x88,0x57,0x38,0x21,0xAC,0x08,0xF2,0x03,0xE2,0x41,
+0xE8,0x06,0xF2,0x0C,0xE2,0x22,0xE8,0x03,0x84,0x21,0xF1,0x85,0xE2,0xC0,0xE8,0x06,
+0xF1,0x0D,0xE2,0x01,0xE8,0x03,0x84,0x01,0xF0,0x84,0x8D,0x61,0x8D,0x08,0x50,0xD6,
+0x80,0x0C,0x48,0xFF,0xFF,0x91,0x00,0x1F,0x80,0x14,0x3E,0x17,0xFD,0x35,0x00,0x1F,
+0x80,0x10,0x3E,0x17,0xFD,0x4A,0x46,0x01,0x00,0x01,0x02,0x00,0x06,0xCC,0x46,0x11,
+0x00,0x07,0x12,0x00,0x87,0xAD,0x46,0x01,0x00,0x01,0x02,0x00,0x06,0xCE,0x46,0x11,
+0x00,0x07,0x12,0x00,0x87,0xAE,0xEA,0x29,0xE6,0xEC,0xE8,0x08,0x40,0x16,0x1C,0x60,
+0x38,0x06,0x1F,0x0A,0xA8,0x09,0x8C,0xE1,0xD5,0xF8,0xFC,0xE9,0x46,0x31,0x00,0x01,
+0x58,0x31,0x8F,0xDC,0x40,0x41,0x80,0x20,0x2E,0x20,0x01,0x28,0xA7,0x21,0x8E,0x41,
+0xE6,0x82,0x96,0x90,0x2E,0x10,0x01,0x29,0xE9,0x0C,0xE2,0x44,0xE9,0x0A,0x38,0x01,
+0x81,0x00,0xE6,0x02,0xE9,0x06,0x8E,0x21,0x96,0x48,0x40,0x00,0x80,0x06,0xDD,0x9E,
+0x84,0x01,0xDD,0x9E,0xFC,0x00,0x3F,0xCF,0xFE,0x08,0x2E,0x07,0xFD,0x5D,0xC0,0x05,
+0x84,0x00,0xB8,0x85,0x48,0x00,0x00,0x83,0xBE,0x0F,0xCE,0x34,0xB9,0x05,0x8E,0x21,
+0xE6,0x23,0xE8,0x30,0xDD,0x59,0x5A,0x08,0x01,0x0C,0x80,0x06,0x49,0xFF,0xFF,0xD0,
+0xC0,0x04,0x2E,0x07,0xFF,0xB7,0xD5,0x06,0x2E,0x07,0xFF,0xB6,0xD5,0x03,0x2E,0x07,
+0xFF,0xBA,0xB9,0x00,0x5A,0x10,0x03,0x05,0xEA,0xBB,0x5A,0x18,0x01,0x06,0x2E,0x17,
+0xFF,0xB8,0x88,0x01,0x96,0x01,0xDD,0x49,0xEA,0x94,0xC1,0x0B,0x84,0x00,0x49,0xFF,
+0xFF,0xB7,0x2E,0x10,0x00,0x54,0xC0,0x04,0x40,0x00,0x84,0x09,0xD5,0x02,0x96,0x09,
+0x46,0x11,0x00,0x02,0x04,0x10,0x80,0x2F,0x92,0x21,0xE2,0x20,0xE8,0x03,0x84,0x00,
+0xB8,0x85,0xEA,0x96,0x46,0x11,0x00,0x02,0x04,0x10,0x80,0x2F,0xC8,0x07,0x3C,0x03,
+0xFE,0xCF,0x40,0x00,0x80,0x17,0x3E,0x07,0xFD,0x46,0xB8,0x05,0x92,0x21,0x49,0xFF,
+0xEA,0x03,0xB8,0x05,0xE6,0x02,0xE9,0x3A,0xB9,0x0F,0xE2,0x20,0xE8,0x37,0x3C,0x63,
+0xFE,0xD2,0xEB,0x08,0xC8,0x04,0x40,0x13,0x04,0x09,0xD5,0x03,0x94,0x71,0x96,0x49,
+0xEA,0x49,0xC0,0x09,0x2E,0x07,0xFF,0xB4,0xDD,0x49,0x80,0xC0,0x2E,0x07,0xFF,0xB5,
+0xDD,0x49,0x80,0x20,0xEA,0x45,0xC0,0x0A,0x2E,0x00,0x00,0x61,0xDD,0x49,0x80,0xC0,
+0x2E,0x00,0x00,0x61,0xDD,0x49,0x94,0x01,0x96,0x41,0xBA,0x0F,0xBB,0x05,0x84,0x8C,
+0x46,0x51,0x00,0x02,0x58,0x52,0x80,0xB4,0xE2,0x43,0xE8,0x10,0x80,0x05,0x42,0x01,
+0x10,0x73,0xE6,0x42,0xA0,0x02,0x82,0x01,0x92,0x01,0x41,0x03,0x3C,0x1B,0xE2,0x10,
+0xE8,0x03,0xBA,0x85,0xD5,0x03,0x8C,0x41,0xD5,0xF0,0xFC,0x80,0xFC,0x60,0x2E,0x07,
+0xFD,0x60,0x5A,0x08,0x01,0x0D,0x2E,0x07,0xFD,0x37,0xE6,0x15,0xE9,0x05,0x84,0x00,
+0x3E,0x07,0xFD,0x60,0xD5,0x04,0x8C,0x01,0x3E,0x07,0xFD,0x37,0x3C,0x03,0xFE,0xC4,
+0xE6,0x1F,0x2F,0x30,0x01,0x2B,0xE8,0x14,0x2E,0x47,0xFD,0x60,0x2E,0x37,0xFD,0x37,
+0x84,0x00,0xEB,0x78,0x58,0x10,0x8C,0xCC,0x46,0x51,0x00,0x01,0x58,0x52,0x8D,0x98,
+0xEA,0xB5,0x80,0xE0,0x47,0x01,0x00,0x01,0x59,0x08,0x0D,0x74,0xD5,0x1B,0xEB,0x3B,
+0xC8,0xEC,0xEB,0x78,0x58,0x10,0x8C,0x6C,0xEA,0xC7,0xE2,0x13,0xE8,0xE6,0x40,0x30,
+0x80,0x60,0x38,0x20,0x83,0x0A,0xA8,0x99,0x8C,0x01,0xD5,0xF8,0x38,0x22,0x83,0x02,
+0x4C,0x23,0x40,0x13,0xA6,0x88,0x8E,0x41,0xE6,0x53,0xE9,0x07,0xAF,0xC8,0x8C,0x01,
+0x8C,0x21,0xE2,0x13,0xE9,0xF4,0xD5,0x0E,0x38,0x28,0x00,0x00,0x5A,0x28,0x01,0xF8,
+0x80,0x82,0x84,0x60,0xD5,0xF4,0xA6,0x88,0x5A,0x20,0xFF,0xF3,0x8C,0x41,0xAE,0x88,
+0xD5,0xEF,0x3E,0x47,0xFD,0x60,0x46,0xA1,0x00,0x01,0x58,0xA5,0x0B,0xA0,0x3E,0x37,
+0xFD,0x37,0xEB,0x78,0x58,0x10,0x8B,0xAC,0x46,0x31,0x00,0x01,0x58,0x31,0x8D,0x98,
+0x46,0x71,0x00,0x01,0x58,0x73,0x8D,0x74,0x80,0xCA,0x45,0x20,0xFF,0xFF,0x85,0x20,
+0x85,0x61,0x40,0x03,0x28,0x01,0xE2,0x13,0xE8,0x50,0xB4,0x43,0x4C,0x29,0x40,0x08,
+0xB7,0xC1,0x10,0xB3,0x80,0x00,0x10,0xB3,0x00,0x00,0xD5,0x26,0xA6,0x38,0x5A,0x08,
+0x01,0x24,0xB4,0xA1,0x4C,0x59,0x40,0x06,0x3B,0x01,0xC4,0x00,0xEA,0xEA,0xD5,0x1C,
+0xE2,0xA2,0xE8,0x03,0x9A,0x15,0xD5,0x02,0x9A,0x2A,0xA1,0x59,0xA1,0x09,0xE2,0x85,
+0xE8,0x03,0x9B,0x2C,0xD5,0x02,0x8A,0x85,0xFE,0x04,0x42,0x02,0x10,0x73,0x81,0xE0,
+0x2E,0x50,0x01,0x32,0x2E,0x40,0x01,0x33,0xFF,0x2C,0xE2,0x8F,0xE8,0x05,0x10,0x93,
+0x80,0x00,0x3E,0x97,0xFD,0x60,0xB4,0xA1,0x4C,0x59,0x00,0x1B,0x4C,0x29,0x00,0x19,
+0xA6,0x30,0x5A,0x08,0x01,0x16,0xE2,0xA2,0xE8,0x03,0x9B,0x55,0xD5,0x02,0x8A,0xA2,
+0xA0,0x99,0xA0,0x09,0xE2,0x02,0xE8,0x03,0x9A,0x10,0xD5,0x02,0x8A,0x02,0xFF,0x6C,
+0x42,0x50,0x00,0x73,0x5C,0xF2,0xB8,0x41,0xE9,0x03,0x10,0x93,0x00,0x00,0x8C,0xC1,
+0x8C,0x28,0x8C,0x68,0x8C,0xE1,0xD5,0xAE,0xFC,0xE0,0xFC,0x61,0x3F,0xCF,0xFE,0x44,
+0x46,0x71,0x00,0x01,0x58,0x73,0x8D,0x98,0x46,0xB1,0x00,0x01,0x58,0xB5,0x8B,0x88,
+0x46,0x91,0x00,0x01,0x58,0x94,0x8B,0x94,0x84,0xC0,0x81,0x47,0x44,0x80,0xFF,0xFF,
+0x46,0xC1,0x00,0x01,0x58,0xC6,0x0D,0x80,0x44,0xDF,0xFF,0x80,0x46,0xE1,0x00,0x01,
+0x58,0xE7,0x0D,0x08,0x46,0x31,0x00,0x01,0x58,0x31,0x8C,0x6C,0x44,0x10,0xFF,0xFE,
+0xEA,0x2C,0xE2,0xC0,0xE8,0x52,0x96,0x30,0xF1,0x81,0xB6,0x7F,0x49,0xFF,0xF6,0x2D,
+0xB4,0x7F,0xF1,0x01,0x5A,0x08,0x01,0x05,0x2E,0x07,0xFD,0x67,0xEA,0x91,0xB4,0xA7,
+0x4C,0x54,0x40,0x1C,0x00,0x04,0x80,0x00,0x2E,0x27,0xFD,0x67,0xE2,0x02,0xE8,0x06,
+0x8C,0x01,0xEA,0x91,0xB6,0x27,0xA8,0x79,0xD5,0x33,0x84,0x00,0x38,0x57,0x1B,0x02,
+0xEA,0xC0,0x84,0x1F,0xEA,0x91,0x94,0x33,0x4C,0x54,0x00,0x2B,0x98,0x98,0x88,0x0E,
+0x3B,0x00,0x44,0x00,0xEA,0x9E,0xD5,0x24,0xEA,0xE6,0xC0,0x0E,0xC6,0x0D,0x46,0x01,
+0x00,0x01,0x04,0x00,0x03,0x36,0x5C,0xF0,0x00,0xC9,0xE9,0x06,0x2E,0x27,0xFF,0xFB,
+0x3E,0xD7,0xFD,0x58,0xD5,0x03,0x2E,0x27,0xFD,0x23,0x00,0x05,0x80,0x00,0xE2,0x02,
+0xE8,0x0B,0x8C,0x01,0xEA,0xC0,0x84,0x5F,0x40,0x06,0x18,0x20,0xB7,0x07,0x14,0x83,
+0x80,0x01,0xAE,0x81,0xD5,0x05,0x84,0x00,0xEA,0x91,0x84,0x1F,0xEA,0xC0,0x8C,0xC1,
+0x8D,0x61,0x8D,0x21,0x8C,0xE8,0xD5,0xAD,0x84,0xC0,0xBE,0x80,0x84,0x3F,0x46,0x01,
+0x00,0x01,0x58,0x00,0x0D,0x80,0xFA,0x48,0xDD,0x42,0x80,0x06,0x46,0x41,0x00,0x01,
+0x58,0x42,0x0D,0x98,0xEA,0xB5,0x46,0x31,0x00,0x01,0x58,0x31,0x8D,0x08,0x46,0x71,
+0x00,0x01,0x58,0x73,0x8C,0xD8,0x82,0x40,0x45,0x30,0xFF,0xFE,0x46,0x91,0x00,0x01,
+0x58,0x94,0x8D,0x80,0x85,0x7E,0x38,0x55,0x02,0x02,0x94,0x42,0xD6,0x0F,0xBA,0x00,
+0x8C,0x41,0xBA,0x80,0x4C,0x59,0xC0,0x0D,0x98,0xA1,0x88,0x23,0xEA,0x6B,0x40,0x10,
+0x24,0x00,0xEA,0x9E,0x10,0xB0,0x80,0x01,0xD5,0x07,0x39,0x23,0x81,0x0A,0x98,0x99,
+0x88,0x2A,0xEA,0x6B,0xEA,0x9E,0x8C,0x02,0x5A,0x08,0x18,0xE7,0x49,0xFF,0xFE,0x90,
+0xFC,0xE1,0xFC,0x60,0x3F,0xCF,0xFE,0x1C,0xB8,0x0B,0xC0,0x03,0x84,0x00,0xD5,0x04,
+0x2E,0x07,0xFF,0xA5,0x92,0x04,0x3E,0x07,0xFD,0x2B,0xEB,0x16,0xB9,0x04,0x8C,0x01,
+0xE2,0x20,0x46,0x21,0x00,0x01,0x58,0x21,0x09,0x48,0x2E,0x90,0x01,0x2B,0xE9,0x21,
+0x84,0xEC,0x42,0x60,0x1C,0x24,0x84,0x74,0x84,0xA0,0x46,0xB1,0x00,0x01,0x58,0xB5,
+0x8D,0x98,0xB8,0x84,0x88,0x46,0xEB,0x78,0x58,0x10,0x89,0x54,0x43,0x30,0x0C,0x24,
+0x88,0xC3,0x81,0x05,0x46,0xA1,0x00,0x01,0x58,0xA5,0x0D,0x68,0x46,0xC1,0x00,0x02,
+0x58,0xC6,0x00,0xB4,0x3E,0xD8,0x02,0xD4,0xEA,0x89,0x81,0xCB,0x86,0x87,0xD5,0x4E,
+0x84,0x60,0x44,0x60,0x00,0x30,0xE0,0x69,0xE8,0xDC,0x80,0x22,0x42,0x11,0x98,0x73,
+0x84,0x81,0x8C,0x2C,0xE0,0x80,0x8C,0x2C,0xE8,0x09,0x50,0x50,0xFF,0xF4,0x3B,0x02,
+0xC8,0x00,0x8C,0x81,0x3B,0x00,0xC8,0x20,0xD5,0xF6,0x8C,0x61,0xD5,0xED,0x50,0xF1,
+0xFF,0xF4,0x3B,0x01,0xC8,0x00,0x51,0x5A,0x80,0x01,0x3B,0x07,0xC8,0x20,0x40,0xFA,
+0x80,0x07,0x8C,0x6C,0xE9,0xF5,0x2E,0x37,0xFF,0xA4,0x43,0x21,0x98,0x0B,0x38,0x35,
+0x14,0x00,0x4F,0x22,0x00,0x29,0x38,0x36,0x8C,0x10,0x39,0x15,0x97,0x02,0x41,0x02,
+0x8C,0x08,0x4D,0x12,0x00,0x2B,0x2F,0x17,0xFD,0x3A,0xE3,0xA3,0x40,0x38,0xBC,0x1B,
+0x89,0x8E,0x3B,0x08,0x44,0x00,0xEA,0x9E,0x4F,0x23,0x00,0x07,0x05,0x01,0x00,0x02,
+0x42,0x3A,0x40,0x73,0x92,0x63,0xA8,0xD2,0x04,0x30,0xFF,0xFD,0x4C,0x32,0x00,0x18,
+0x8C,0xA1,0x50,0x10,0x80,0x30,0x50,0x21,0x00,0x30,0xE0,0xA9,0xE8,0x2F,0x80,0x61,
+0x86,0xA0,0xD5,0xC6,0x81,0xEC,0x42,0xF1,0x9C,0x73,0x80,0x6F,0x2E,0xF7,0xFD,0x52,
+0xA0,0xDA,0x40,0x31,0xBC,0x0D,0xD5,0xD2,0x84,0x60,0xD5,0xDB,0xB4,0x61,0x4C,0x32,
+0x3F,0xE9,0x5A,0x00,0x01,0xE7,0xBB,0x00,0xE6,0x63,0xE8,0x05,0xA0,0xCB,0x4C,0x32,
+0x40,0x5A,0xD5,0x20,0xA0,0xCB,0x4C,0x32,0x00,0x07,0x5A,0x08,0x03,0xF9,0xA0,0xCE,
+0x4C,0x32,0x7F,0xF6,0x80,0x61,0x86,0x01,0x8D,0x81,0xE0,0x10,0xB6,0x83,0xA9,0x19,
+0x14,0x81,0x80,0x02,0x8C,0x6C,0xE8,0xF9,0xD5,0xEA,0x84,0xC0,0xEA,0x2C,0xE0,0xC0,
+0xE8,0x45,0x96,0x30,0xEB,0x78,0x58,0x10,0x89,0x48,0x49,0xFF,0xF3,0xEA,0x8C,0xC1,
+0xD5,0xF6,0x84,0x61,0x5A,0x08,0x03,0xBE,0x05,0x00,0x80,0x06,0x4D,0x02,0x3F,0xBA,
+0xCB,0xB8,0xB4,0x61,0xB5,0xA2,0x05,0x01,0x00,0x01,0x41,0x58,0x8C,0x01,0xA0,0xC9,
+0x40,0xF8,0x0C,0x01,0x2E,0x30,0x01,0x32,0x42,0xF7,0xBC,0x24,0x41,0x21,0x88,0x09,
+0x2E,0x30,0x01,0x33,0x42,0xFA,0xD4,0x73,0x92,0x62,0xFE,0xDC,0x42,0x39,0x48,0x73,
+0x40,0xF7,0x8C,0x07,0xE8,0x9E,0x41,0x21,0x4C,0x00,0x38,0x39,0x18,0x02,0x89,0xC6,
+0x89,0xA3,0x04,0x39,0x00,0x01,0x93,0xA1,0x88,0x70,0x92,0x61,0x82,0x01,0x86,0x41,
+0x8D,0xC1,0xE0,0x12,0xB7,0xB0,0x14,0x38,0x00,0x01,0x8D,0x8C,0xE8,0xFA,0x48,0xFF,
+0xFF,0x89,0x84,0x60,0x5A,0x00,0x03,0xCA,0xD5,0xCD,0xFC,0xE0,0xFC,0x64,0x81,0x80,
+0x84,0x00,0x12,0x06,0x00,0x48,0x10,0x06,0x00,0x92,0x2E,0x17,0xFD,0x4B,0x2E,0x47,
+0xFF,0xC2,0x2E,0x07,0xFF,0xC1,0xC9,0x05,0xEA,0xBB,0xC9,0x03,0xEA,0x94,0xC1,0x06,
+0x58,0x12,0x00,0x0F,0xB6,0x3F,0x92,0x04,0xD5,0x05,0x97,0x1F,0x94,0x63,0xB6,0x3F,
+0x96,0x1F,0x8C,0x01,0x85,0x48,0x42,0xA0,0x28,0x01,0x2E,0x07,0xFD,0x1F,0xE2,0x0A,
+0xE8,0x03,0x8C,0x01,0xD5,0x04,0xE3,0x40,0xE8,0x03,0x8E,0x01,0xEA,0xEB,0x40,0x05,
+0x04,0x09,0x96,0x00,0xF0,0x82,0x84,0xC0,0x46,0x81,0x00,0x01,0x58,0x84,0x06,0x30,
+0x3C,0xDD,0xFE,0xDB,0x46,0xE1,0x00,0x01,0x58,0xE7,0x06,0x24,0xEA,0x2C,0xE2,0xC0,
+0x4E,0xF2,0x01,0x5A,0x94,0x73,0x46,0x01,0x00,0x01,0x58,0x00,0x0E,0x38,0x39,0x10,
+0x1B,0x02,0x88,0x01,0xF1,0x81,0xA1,0x41,0xEB,0x78,0x58,0x10,0x89,0x48,0xDD,0x47,
+0xEB,0x0D,0x38,0x44,0x18,0x00,0x80,0x01,0x8C,0x0C,0xA1,0xCB,0x04,0x90,0x00,0x01,
+0xEA,0x29,0x46,0x21,0x00,0x01,0x58,0x21,0x06,0x3C,0x4C,0x70,0x40,0x0D,0x4C,0x93,
+0xC0,0x0B,0x44,0x0F,0xFF,0xB4,0x38,0x07,0x18,0x08,0x84,0x00,0x38,0x01,0x18,0x08,
+0x48,0x00,0x01,0x1D,0x00,0x06,0x00,0x92,0x84,0x21,0x8C,0x01,0x10,0x06,0x00,0x92,
+0x02,0x06,0x00,0x48,0x40,0x30,0x98,0x0C,0xFE,0x1F,0x12,0x06,0x00,0x48,0x38,0x01,
+0x18,0x00,0x47,0xC1,0x00,0x01,0x59,0xCE,0x06,0x48,0xC8,0x14,0x46,0x21,0x00,0x01,
+0x58,0x21,0x06,0x3C,0x38,0x11,0x18,0x08,0x94,0xB6,0x40,0x1E,0x00,0x00,0x38,0x70,
+0x88,0x0A,0x8C,0x08,0x88,0x22,0x14,0x90,0x80,0x01,0x5A,0x08,0x40,0xF8,0x48,0x00,
+0x00,0xF8,0xE3,0xA7,0xE8,0x04,0x41,0x33,0xC4,0x01,0xD5,0x03,0x41,0x38,0x9C,0x01,
+0xE2,0xA9,0xE8,0x04,0x41,0x24,0x94,0x01,0xD5,0x03,0x41,0x22,0xA4,0x01,0x42,0x19,
+0xCC,0x24,0x42,0x19,0x48,0x73,0x38,0x07,0x18,0x00,0x92,0x21,0xC8,0x06,0x2E,0x27,
+0xFF,0xBB,0x2E,0x37,0xFF,0xBC,0xD5,0x05,0x2E,0x27,0xFF,0xBF,0x2E,0x37,0xFF,0xC0,
+0x2E,0xF7,0xFD,0x6E,0x47,0x61,0x00,0x01,0x59,0x6B,0x0D,0x68,0xE9,0x10,0x38,0xFB,
+0x18,0x00,0x47,0x01,0x00,0x01,0x59,0x08,0x0F,0xF4,0x2E,0xB7,0xFD,0x49,0x39,0x08,
+0x3E,0x02,0xE3,0x70,0xE9,0x04,0x2E,0xF7,0xFD,0x68,0xE8,0x07,0x86,0x03,0x42,0x21,
+0x40,0x24,0xEA,0xEF,0x96,0x90,0x96,0xD8,0xC8,0x15,0xE2,0xE2,0xE9,0x09,0x3D,0x0C,
+0x00,0x48,0x8F,0x81,0x8B,0x82,0xE3,0x87,0x40,0x20,0x3C,0x1B,0xD5,0x02,0x80,0x40,
+0xE3,0x23,0xE9,0x07,0x3D,0x0C,0x00,0x49,0x8F,0x81,0x8B,0x83,0xE3,0x89,0xE8,0x02,
+0x84,0x60,0x46,0xB1,0x00,0x02,0x58,0xB5,0x80,0xB4,0x38,0xFB,0x18,0x00,0x86,0x0C,
+0x82,0x8B,0x43,0x47,0xC0,0x73,0x04,0xFA,0x00,0x02,0xE9,0x02,0xC0,0x0F,0xE3,0xE2,
+0xE8,0x03,0xE3,0xC3,0xE9,0x09,0x84,0x00,0x46,0x21,0x00,0x01,0x58,0x21,0x06,0x24,
+0x38,0x01,0x18,0x08,0xD5,0x03,0x81,0x25,0x80,0xF1,0xB4,0x1F,0x92,0x22,0x40,0x10,
+0x80,0x37,0x8C,0x21,0xE6,0x31,0xE9,0x02,0xFA,0x20,0xB4,0x1F,0xC0,0x41,0xEB,0x16,
+0xC0,0x09,0xDD,0x47,0x80,0x4D,0x42,0x23,0x00,0x73,0xEA,0x29,0xA0,0x96,0x4C,0x20,
+0x00,0x38,0x80,0x06,0x15,0x6F,0x80,0x07,0xF1,0x86,0xF5,0x85,0x15,0x1F,0x80,0x04,
+0xF4,0x83,0xF8,0x41,0xF4,0x03,0x05,0x1F,0x80,0x04,0xF5,0x05,0xF1,0x06,0x05,0x6F,
+0x80,0x07,0xC8,0x26,0x38,0x2B,0x18,0x00,0x84,0x0C,0x42,0xB1,0x00,0x73,0x04,0x05,
+0x80,0x02,0xC0,0x1E,0x52,0x00,0x80,0x10,0x42,0x20,0x44,0x24,0x42,0x23,0x84,0x73,
+0x95,0xFC,0x82,0x22,0x3C,0x2C,0x00,0x48,0xFF,0x44,0x40,0x73,0x88,0xF7,0x42,0x54,
+0x84,0x73,0x40,0x04,0x90,0x08,0x3C,0x9C,0x00,0x49,0x97,0xF8,0x40,0x00,0x24,0x17,
+0x96,0x00,0x89,0xA7,0x88,0xA0,0x40,0x78,0x90,0x09,0x40,0x92,0x90,0x09,0xF0,0x01,
+0xE6,0x2D,0x88,0x04,0x40,0x0E,0x00,0x60,0xB6,0xE0,0x14,0x90,0x00,0x01,0xE9,0x09,
+0xDD,0x47,0x80,0x2D,0xEB,0x0D,0xEA,0x29,0xA1,0x4E,0xD8,0x03,0xEB,0x16,0xC8,0x23,
+0x80,0x06,0xF4,0x83,0x49,0xFF,0xF3,0x51,0xF4,0x03,0xC8,0x1D,0x80,0xE0,0x80,0xA0,
+0x4C,0x55,0x00,0x13,0xF1,0x01,0x88,0x24,0x38,0x2E,0x07,0x02,0x40,0x1E,0x04,0x60,
+0xA0,0x49,0x88,0xE2,0x88,0x01,0xC4,0x04,0x9E,0x61,0x97,0x08,0xD5,0x02,0x84,0x87,
+0x8C,0xA1,0x97,0x68,0xD5,0xEE,0xF1,0x02,0x88,0xE1,0x88,0x01,0x40,0x73,0xA8,0xF7,
+0x40,0x90,0x29,0x37,0x46,0x01,0x00,0x01,0x58,0x00,0x06,0x30,0x38,0x00,0x18,0x00,
+0x8C,0x01,0x96,0x00,0x5A,0x08,0x08,0x03,0x84,0x00,0x38,0x04,0x18,0x08,0x84,0x0C,
+0x80,0x2C,0xEB,0x0D,0x80,0x4D,0xB6,0xE1,0x14,0x90,0x80,0x01,0x80,0x01,0x44,0x10,
+0x00,0x30,0x42,0x23,0x04,0x73,0x8C,0xC1,0xA0,0x55,0x10,0x10,0x00,0x08,0x97,0xB0,
+0x48,0xFF,0xFE,0xA6,0x3E,0xA7,0xFD,0x1F,0xFC,0xE4,0xEA,0x69,0x42,0x00,0x18,0x0B,
+0x4E,0x02,0x01,0x69,0x84,0x00,0x3E,0x18,0x02,0xD4,0x84,0x41,0x38,0x20,0x80,0x08,
+0x8C,0x01,0x5A,0x08,0x0C,0xFD,0xFC,0x66,0xEB,0x3B,0xF0,0x83,0xEB,0x3D,0xF0,0x81,
+0xEA,0x3C,0xF0,0x84,0xEA,0xB8,0xF0,0x82,0xEA,0xB0,0xF0,0x85,0x2E,0x00,0x01,0x02,
+0xF0,0x86,0x2E,0x00,0x01,0x03,0x85,0x80,0xF0,0x87,0x3E,0x68,0x02,0xD4,0x3E,0xA8,
+0x01,0xCC,0x84,0xE1,0x81,0x6C,0xF0,0x03,0x4C,0xB0,0x01,0x44,0x00,0x15,0x00,0x00,
+0x01,0x05,0x00,0x01,0x01,0x15,0x00,0x02,0x40,0x00,0xC0,0x00,0x40,0x80,0x04,0x0A,
+0x00,0x05,0x00,0x03,0x40,0x28,0x80,0x00,0x41,0x41,0x04,0x0A,0xC1,0x08,0x4F,0x02,
+0x00,0x09,0x4F,0x12,0x00,0x09,0x40,0x70,0x00,0x1A,0xD5,0x06,0x80,0xE1,0xD5,0x04,
+0x80,0xF0,0xD5,0x02,0x80,0xF1,0x44,0x20,0x00,0x48,0x42,0x40,0x08,0x24,0x84,0x60,
+0x40,0x42,0x04,0x20,0x44,0x20,0x00,0x4A,0x42,0x43,0x88,0x75,0x80,0xA1,0x82,0x63,
+0x81,0x23,0x82,0x43,0x83,0x03,0xE3,0x85,0xE9,0x24,0x41,0x51,0x90,0x00,0x46,0x21,
+0x00,0x02,0x58,0x21,0x01,0x44,0x41,0x5A,0x88,0x00,0x81,0xA0,0x85,0xC0,0x40,0x22,
+0xA0,0x06,0xE3,0xAD,0xE9,0x13,0x40,0xFA,0xB8,0x00,0x22,0xF7,0x8C,0xAA,0xC2,0x05,
+0x89,0xCF,0x43,0x37,0x94,0x73,0xD5,0x05,0x41,0x8C,0x3C,0x00,0x42,0x97,0x94,0x73,
+0x50,0xD6,0x80,0x01,0x50,0xE7,0x00,0x48,0xD5,0xED,0x8C,0xA1,0x8C,0x62,0xD5,0xDC,
+0x84,0x60,0x83,0x83,0x81,0xA3,0x81,0xC3,0x81,0x03,0xE3,0x81,0xE9,0x23,0x99,0x5C,
+0x46,0x21,0x00,0x02,0x58,0x21,0x01,0x44,0x41,0x62,0x88,0x00,0x86,0xA0,0x80,0xA0,
+0xE3,0xA5,0xE9,0x15,0xE2,0xB4,0x41,0x7B,0x54,0x00,0xE8,0x07,0x22,0xFB,0x8C,0xAA,
+0x89,0x0F,0x42,0xD7,0x94,0x73,0xD5,0x07,0x22,0xFB,0x8C,0xAA,0x40,0xE7,0x3C,0x00,
+0x43,0xC7,0x94,0x73,0x8C,0xA1,0x51,0x5A,0x80,0x48,0xD5,0xEB,0x8C,0x21,0x8C,0x62,
+0xD5,0xDD,0xF0,0x01,0xF1,0x04,0x80,0x58,0x40,0x40,0x04,0x97,0x84,0x60,0x42,0x04,
+0x90,0x69,0x15,0x3F,0x80,0x0B,0x15,0x2F,0x80,0x0A,0xF4,0x88,0xF8,0x36,0xF4,0x08,
+0x81,0x20,0x40,0x52,0x04,0x09,0x05,0x2F,0x80,0x0A,0x05,0x3F,0x80,0x0B,0xC9,0x05,
+0xC9,0x03,0xE2,0xA0,0xE9,0x02,0x85,0x20,0x42,0x09,0x90,0x69,0x80,0x52,0x84,0x60,
+0xF5,0x88,0xF8,0x23,0x80,0x80,0xF5,0x08,0xC9,0x05,0xC9,0x03,0xE2,0xA0,0xE9,0x02,
+0x84,0x80,0xF0,0x02,0xF1,0x05,0x80,0x4E,0x40,0x50,0x04,0xB7,0x84,0x60,0x42,0x0E,
+0x14,0x69,0xF4,0x8A,0xF5,0x88,0xF8,0x11,0xF5,0x08,0x81,0xC0,0x41,0xC2,0x84,0x09,
+0xF4,0x0A,0xC9,0x06,0xC9,0x04,0x40,0xFE,0x00,0x06,0xE9,0x02,0x85,0xC0,0x80,0x48,
+0x42,0x06,0x94,0x69,0x84,0x60,0xF4,0x88,0xEA,0x68,0x80,0x40,0xF4,0x08,0xC9,0x05,
+0xC9,0x06,0x40,0xFE,0x00,0x06,0xE8,0x03,0x80,0x02,0xD5,0x02,0x84,0x00,0x4E,0x92,
+0x00,0x0C,0xC4,0x0A,0xE2,0x89,0xE8,0x04,0x40,0x44,0x90,0x01,0xD5,0x02,0x8A,0x89,
+0x40,0x92,0x00,0x13,0xD5,0x02,0x85,0x21,0x4E,0xE2,0x00,0x0B,0xC0,0x09,0xE2,0x0E,
+0xE8,0x04,0x40,0x07,0x00,0x01,0xD5,0x02,0x8A,0x0E,0x96,0x01,0xD5,0x02,0x84,0x01,
+0xF8,0x11,0xF8,0x12,0xF8,0x1E,0x84,0x40,0x46,0x34,0x05,0x0C,0xF8,0x1A,0xFD,0x20,
+0xF0,0x88,0xF0,0x02,0xF5,0x89,0xF8,0x1B,0xF8,0x1C,0xF8,0x20,0xF8,0x21,0x81,0x00,
+0x80,0x09,0x49,0x00,0x2C,0xF7,0x46,0x2F,0x5C,0x28,0x46,0x34,0x00,0x15,0x50,0x21,
+0x0F,0x5C,0x50,0x31,0x8C,0x28,0x83,0xFF,0xF8,0x04,0x84,0x40,0x46,0x34,0x06,0x28,
+0x49,0x00,0x2A,0x6C,0xFD,0x20,0xF0,0x88,0xF0,0x01,0xF5,0x89,0x49,0x00,0x2D,0x08,
+0xF4,0x08,0xF5,0x09,0xFD,0x10,0xFD,0x02,0x83,0xFF,0x49,0x00,0x2B,0x4F,0x49,0x00,
+0x2C,0xB3,0xE3,0x00,0x40,0x04,0x3C,0x1A,0x96,0x42,0xE4,0x34,0xE9,0x02,0x85,0x81,
+0xEB,0x78,0x58,0x10,0x8F,0xF4,0x88,0x0C,0x38,0x10,0xAE,0x02,0x96,0x02,0xE2,0x20,
+0x80,0x46,0xAE,0x30,0xE8,0x02,0xAE,0x70,0xF0,0x06,0xE2,0x20,0xE9,0x0A,0x46,0x01,
+0x00,0x01,0x58,0x00,0x0C,0xCC,0x38,0x00,0x2C,0x00,0xF1,0x07,0xE2,0x01,0xE8,0x05,
+0x20,0x03,0x00,0x00,0x90,0x01,0xAE,0x30,0x20,0x01,0x00,0x00,0x8C,0xC1,0x4E,0x06,
+0x00,0x05,0x84,0x01,0x10,0x03,0x7F,0xFF,0x8D,0x61,0x8D,0x44,0x48,0xFF,0xFE,0xBD,
+0xFC,0xE6,0xDD,0x9E,0xFC,0x60,0x3F,0xCF,0xFE,0x08,0x46,0x01,0x00,0x01,0x58,0x00,
+0x00,0x28,0x84,0x20,0xFA,0x54,0xDD,0x42,0xEA,0x6A,0xEA,0xF0,0xC0,0x1F,0xDD,0x59,
+0x5A,0x08,0x01,0x12,0xEB,0x38,0xC8,0x0C,0xEB,0x23,0x2E,0x07,0xFF,0xDF,0xC1,0x03,
+0x2E,0x00,0x00,0x72,0xEA,0x94,0xC1,0x09,0x2E,0x00,0x00,0x55,0xD5,0x06,0x2E,0x07,
+0xFF,0xE2,0xD5,0x03,0x2E,0x07,0xFF,0xE0,0xB9,0x00,0x5A,0x18,0x03,0x04,0x2E,0x07,
+0xFF,0xE3,0xEA,0xBB,0xC1,0x03,0x2E,0x00,0x00,0x73,0xEA,0xF5,0xEA,0x8B,0xC1,0x18,
+0xB9,0x00,0x5A,0x18,0x02,0x06,0x2E,0x27,0xFD,0x6E,0x5A,0x20,0x01,0x05,0x2E,0x27,
+0xFD,0x4F,0xC2,0x04,0x2E,0x17,0xFF,0xE8,0xD5,0x0B,0x5A,0x10,0x03,0x05,0xEA,0xBB,
+0x5A,0x18,0x01,0x05,0x2E,0x17,0xFF,0xE7,0xD5,0x03,0x2E,0x17,0xFF,0xE6,0x46,0x21,
+0x00,0x07,0x12,0x01,0x07,0xA4,0x2E,0x27,0xFD,0x46,0x2E,0x30,0x00,0xE7,0xE2,0x62,
+0xE8,0x03,0x8A,0x43,0xD5,0x02,0x84,0x40,0x3E,0x27,0xFD,0x46,0x2F,0x37,0xFD,0x46,
+0x46,0x21,0x00,0x07,0x02,0x21,0x07,0xA4,0x40,0x99,0x80,0x13,0x88,0x49,0x96,0x91,
+0x46,0x31,0x00,0x07,0x12,0x21,0x87,0xA4,0x46,0x21,0x00,0x01,0x96,0x03,0x12,0x11,
+0x00,0x13,0x46,0x21,0x00,0x01,0x12,0x01,0x00,0x12,0x84,0x00,0x46,0x21,0x00,0x05,
+0x12,0x01,0x02,0xD6,0x2F,0x10,0x01,0x29,0x2F,0x20,0x01,0x28,0x3C,0x8D,0xFF,0x90,
+0x46,0x71,0x00,0x03,0x58,0x73,0x80,0x78,0x46,0x01,0x00,0x01,0x58,0x00,0x00,0x28,
+0x84,0x80,0x81,0x80,0x44,0xE0,0x00,0x48,0x46,0xD1,0x00,0x07,0x58,0xD6,0x85,0x00,
+0x44,0xA0,0x00,0x4C,0x51,0x43,0xF0,0xCC,0xE2,0x91,0xE8,0x3B,0x81,0x6D,0x42,0xB2,
+0x38,0x73,0x43,0x02,0x28,0x24,0x84,0x60,0xE2,0x72,0xE8,0x29,0x38,0x55,0x8D,0x01,
+0x40,0x68,0x0C,0x20,0x38,0x23,0x95,0x01,0x38,0x54,0x15,0x01,0x88,0xD4,0x8A,0x45,
+0x96,0x91,0x97,0x53,0x12,0x53,0x14,0xB2,0xA5,0x80,0xE0,0xC5,0xE8,0x02,0xAC,0x80,
+0x4E,0x57,0x00,0x14,0x46,0x61,0x00,0x05,0x02,0x63,0x02,0xD6,0xE0,0xC5,0xE8,0x0D,
+0x46,0x51,0x00,0x05,0x12,0x22,0x82,0xD6,0x46,0x21,0x00,0x05,0x10,0x41,0x05,0xAE,
+0x46,0x21,0x00,0x05,0x10,0x31,0x05,0xAF,0x8C,0x61,0xD5,0xD7,0xC9,0x03,0xAC,0x40,
+0xD5,0x05,0xA4,0x80,0x40,0x21,0x04,0x57,0xAC,0x80,0x8C,0x81,0x8C,0x02,0xD5,0xC5,
+0xEB,0x4E,0x46,0x21,0x00,0x05,0x02,0x10,0x02,0xD6,0x00,0x21,0x05,0xAE,0x46,0x01,
+0x00,0x01,0x02,0x00,0x00,0x12,0x38,0x26,0x09,0x01,0x96,0x03,0x88,0x02,0xE0,0x01,
+0xEB,0x19,0xEB,0x24,0xE8,0x0C,0x46,0x01,0x00,0x01,0x02,0x00,0x00,0x12,0x96,0x03,
+0x88,0x40,0x8A,0x22,0xEB,0x4E,0x12,0x10,0x02,0xD6,0xD5,0x06,0x84,0x00,0x46,0x11,
+0x00,0x05,0x12,0x00,0x82,0xD6,0xEB,0x4E,0xEB,0x1C,0x84,0x40,0x40,0xA0,0x04,0x09,
+0x2E,0x87,0xFF,0xAC,0x2F,0x40,0x00,0x15,0x46,0x01,0x00,0x01,0x00,0x70,0x02,0xC0,
+0x2E,0xB7,0xFD,0x4C,0x80,0x82,0x80,0x62,0x44,0xE0,0x00,0x4C,0x80,0xA2,0x53,0x59,
+0x80,0x00,0xE2,0x71,0xE8,0x52,0x80,0x06,0x42,0x01,0xB8,0x73,0x40,0xD1,0x84,0x08,
+0x50,0x00,0x29,0x64,0x86,0x00,0xE3,0x92,0xE8,0x46,0x22,0x10,0x00,0x00,0x4E,0x15,
+0x00,0x13,0xEA,0x85,0xEA,0x99,0x39,0x66,0x34,0x01,0xEA,0x7E,0x40,0xFB,0x3C,0x00,
+0x40,0xF7,0x84,0x07,0xE8,0x14,0xEA,0x85,0xEA,0x99,0xEA,0x7E,0x40,0xFB,0x3C,0x00,
+0x8A,0x2F,0xD5,0x0B,0xEA,0x85,0xEA,0x99,0xEA,0x7E,0x52,0xF7,0x80,0x00,0xE0,0x2F,
+0xE8,0x06,0xEA,0x85,0xEA,0x99,0x88,0x2F,0xAC,0x40,0xD5,0x02,0xAD,0x40,0x22,0x10,
+0x00,0x00,0x4E,0x17,0x00,0x08,0xE0,0x2A,0xE8,0x0B,0xE1,0xE1,0xE8,0x08,0x8A,0x29,
+0xD5,0x04,0xE0,0x35,0xE8,0x04,0x88,0x29,0xAC,0x40,0xD5,0x02,0xAD,0x40,0x2A,0x10,
+0x00,0x01,0x40,0xF0,0xA0,0x00,0x4E,0xF4,0x00,0x09,0x8C,0x81,0x97,0x21,0xE2,0x94,
+0xE9,0x04,0x58,0x73,0x80,0x01,0x85,0x61,0x4E,0x14,0x00,0x04,0x8A,0x41,0x96,0x91,
+0x8D,0x81,0xD5,0xBA,0x8C,0x61,0xD5,0xAE,0x46,0x01,0x00,0x01,0x10,0x70,0x02,0xC0,
+0x3E,0xB7,0xFD,0x4C,0x2E,0x00,0x00,0x46,0x94,0x05,0xE0,0x02,0xE8,0x07,0x96,0x38,
+0xEB,0x03,0xEB,0x78,0xEA,0xEC,0x84,0x01,0xEA,0x76,0x46,0x01,0x00,0x07,0x04,0x10,
+0x03,0xF2,0xEB,0x4E,0xEB,0x1C,0xE2,0x20,0xE8,0x11,0x46,0x01,0x00,0x01,0x00,0x00,
+0x02,0xC0,0xEB,0x78,0xEB,0x05,0xEA,0xEC,0x84,0x21,0x3E,0x17,0xFD,0x4C,0x2E,0x07,
+0xFD,0x28,0x8C,0x01,0xB8,0x91,0x3E,0x17,0xFD,0x5D,0xB8,0x00,0x5A,0x08,0x03,0x05,
+0x84,0xA1,0x84,0xE4,0xD5,0x03,0x84,0xA0,0x84,0xE1,0xEB,0x08,0x5A,0x08,0x01,0x04,
+0x80,0xA0,0x84,0xE2,0x40,0x03,0x94,0x20,0x54,0x90,0x00,0xFF,0x2F,0x67,0xFD,0x6E,
+0x2F,0x37,0xFD,0x78,0x84,0x80,0x51,0x79,0xFF,0xFF,0x80,0x44,0x45,0x50,0x00,0x26,
+0x45,0x40,0x00,0x24,0x44,0xE0,0x00,0x48,0x44,0xDF,0xFF,0xB8,0xE2,0x51,0xE8,0x41,
+0x42,0xA1,0x38,0x24,0x52,0x12,0x29,0x64,0x50,0x35,0x19,0x54,0x42,0xB1,0x54,0x24,
+0x42,0x81,0x50,0x24,0x88,0x26,0x88,0x66,0x42,0xC1,0x34,0x24,0x86,0x00,0xE3,0x92,
+0xE8,0x2C,0x40,0xF0,0x90,0x00,0x4F,0x62,0x00,0x0D,0x4F,0x32,0x00,0x0B,0x38,0x07,
+0xAD,0x11,0x22,0xF0,0xFD,0x2F,0x42,0x07,0xDC,0x73,0x40,0x00,0x4C,0x16,0xD5,0x12,
+0x40,0x01,0xB0,0x00,0x38,0x00,0x21,0x11,0x39,0x87,0xAD,0x11,0x40,0xF7,0xA8,0x00,
+0xFE,0x2C,0x22,0xF7,0xFA,0x80,0x42,0x0C,0x1C,0x73,0x42,0x07,0x94,0x73,0x40,0x00,
+0x24,0x16,0x12,0x00,0xFD,0x2F,0xA4,0x18,0x12,0x01,0x82,0x88,0x2A,0x00,0x80,0x01,
+0x1A,0x01,0x80,0x01,0x8D,0x81,0xD5,0xD4,0x8C,0x41,0x50,0x42,0x7F,0xB4,0xD5,0xBF,
+0x46,0x01,0x00,0x04,0x58,0x00,0x0A,0xA8,0x44,0x10,0x00,0xFD,0x44,0x20,0x02,0xF8,
+0xEB,0x1F,0x2E,0x08,0x00,0x14,0x4E,0x04,0x00,0xAC,0x2E,0x07,0xFD,0x35,0xC8,0x04,
+0x2F,0x00,0x00,0x8C,0xD5,0x03,0x45,0x00,0x00,0xFF,0x2E,0x07,0xFD,0x4A,0xC8,0x04,
+0x2E,0x70,0x00,0x8C,0xD5,0x02,0xEA,0xE4,0x2E,0x50,0x01,0x29,0xEA,0x3C,0x9D,0x29,
+0x50,0x90,0x7F,0xFF,0x51,0x10,0x00,0x01,0x46,0x11,0x00,0x04,0x58,0x10,0x85,0x04,
+0x84,0x61,0x86,0x40,0xE2,0x64,0xE8,0x20,0x22,0x20,0x80,0x01,0x23,0x30,0x80,0x02,
+0xE1,0xE2,0xE8,0x06,0x8A,0x53,0xFE,0xBC,0x90,0x48,0xAC,0x88,0xD5,0x03,0x13,0x20,
+0x80,0x00,0x38,0x20,0x81,0x11,0x39,0x30,0xA5,0x11,0xE1,0xE2,0xE8,0x07,0x8A,0x53,
+0xFE,0xBC,0x90,0x48,0x38,0x20,0xC5,0x09,0xD5,0x03,0x39,0x20,0xC5,0x09,0x8C,0x61,
+0x50,0x10,0x80,0x4C,0xD5,0xE0,0x44,0x70,0x00,0x4C,0xFF,0xEC,0x9C,0x81,0x46,0x11,
+0x00,0x04,0x58,0x10,0x84,0xBA,0x51,0x23,0x80,0x4C,0x86,0x21,0x86,0x60,0xE3,0xA2,
+0xE8,0x21,0x22,0x30,0x80,0x26,0x22,0x90,0x80,0x4C,0xE1,0x23,0xE8,0x06,0x8A,0x69,
+0xEA,0xEF,0x90,0x68,0xAC,0xC8,0xD5,0x03,0x13,0x30,0x80,0x00,0x40,0x90,0x9C,0x00,
+0x38,0x30,0x9C,0x11,0x22,0x94,0xFF,0xDA,0xE1,0x23,0xE8,0x07,0x8A,0x69,0xEA,0xEF,
+0x90,0x68,0x38,0x30,0xC8,0x09,0xD5,0x03,0x39,0x30,0xC8,0x09,0x8D,0xA1,0x8C,0x22,
+0xD5,0xDF,0x46,0x11,0x00,0x04,0x22,0x30,0x82,0x5D,0x46,0x11,0x00,0x04,0x22,0x10,
+0x82,0x82,0x44,0x70,0x00,0x4C,0x88,0x23,0x90,0x21,0x46,0x31,0x00,0x04,0x12,0x11,
+0x82,0x5C,0x80,0x66,0x80,0x26,0x42,0x32,0x1C,0x73,0x42,0x12,0x9C,0x73,0x23,0x01,
+0x91,0xBB,0x22,0x10,0x91,0xBA,0x88,0x30,0x90,0x21,0x12,0x11,0x91,0xBA,0x40,0x33,
+0x08,0x20,0x40,0x13,0x00,0x20,0x22,0x70,0x91,0xBA,0x22,0x11,0x91,0xE0,0x88,0x27,
+0x90,0x21,0x12,0x11,0x91,0xBA,0xFA,0x76,0xFF,0x1C,0x98,0x62,0x42,0x22,0x8C,0x73,
+0x88,0x04,0x40,0x03,0x00,0x20,0x40,0x13,0x04,0x20,0x40,0x63,0x08,0x20,0x22,0x40,
+0x11,0xBA,0x22,0x03,0x11,0xBA,0x88,0x04,0x90,0x01,0x12,0x00,0x91,0xBA,0xFC,0xE0,
+0xEB,0x78,0x58,0x10,0x80,0x28,0x38,0x00,0x81,0x01,0xDD,0x9E,0xFC,0x40,0x82,0x40,
+0x2E,0x47,0xFE,0xA1,0x3D,0x0C,0x00,0x48,0x3D,0x1C,0x00,0x49,0x84,0x00,0x80,0xE0,
+0x80,0x40,0x86,0x6C,0x44,0x90,0xFF,0xFF,0x85,0x41,0x2E,0x30,0x01,0x2B,0xE2,0x43,
+0xE8,0x2D,0x80,0x72,0x42,0x31,0x4C,0x73,0xB4,0xA3,0xA0,0xD9,0x4C,0x54,0x80,0x24,
+0x40,0x62,0x08,0x0E,0x97,0xB4,0xC6,0x15,0x46,0x61,0x00,0x07,0x00,0x63,0x03,0x99,
+0x40,0xF8,0x18,0x01,0xE2,0xAF,0xE8,0x17,0xE2,0xC5,0xE8,0x15,0x46,0x61,0x00,0x07,
+0x00,0x63,0x03,0x9A,0x40,0xF8,0x98,0x01,0xE2,0x6F,0xE8,0x0D,0xE2,0xC3,0xE8,0x0B,
+0xCF,0x03,0xA9,0x49,0xB6,0x61,0x40,0x35,0x08,0x0C,0x40,0x42,0x0C,0x12,0x9C,0xC1,
+0x96,0x18,0x84,0xE1,0x8C,0x41,0x96,0x90,0xD5,0xD1,0x3E,0x47,0xFE,0xA1,0xFC,0xC0,
+0xFC,0x00,0x84,0x1F,0x3E,0x07,0xFE,0xA1,0x84,0x00,0x3C,0x0B,0xFF,0xC1,0x3C,0x0B,
+0xFF,0xC0,0x84,0x3F,0x3C,0x1B,0xFF,0xBF,0x3C,0x1B,0xFF,0xBE,0x3E,0x2F,0xFF,0x78,
+0xAC,0x10,0xAC,0x11,0x3E,0x2F,0xFF,0x74,0xAC,0x10,0xAC,0x11,0x3E,0x2F,0xFF,0x70,
+0xAC,0x50,0xAC,0x51,0x3E,0x2F,0xFF,0x6C,0xAC,0x50,0xAC,0x51,0x3E,0x07,0xFF,0x14,
+0xEA,0xD5,0x46,0x01,0x00,0x07,0x58,0x00,0x03,0x80,0xA6,0x46,0xA6,0x87,0xEA,0x79,
+0x3C,0x1B,0xFF,0x61,0x00,0x10,0x00,0x08,0x00,0x20,0x00,0x09,0xEA,0x79,0x3C,0x1B,
+0xFF,0x60,0x00,0x10,0x00,0x0A,0x00,0x20,0x00,0x0B,0xEA,0x79,0x3C,0x1B,0xFF,0x5F,
+0x00,0x10,0x00,0x0C,0x3E,0x17,0xFE,0xBD,0x00,0x10,0x00,0x0D,0x3E,0x17,0xFE,0xBC,
+0x00,0x10,0x00,0x0E,0x3E,0x17,0xFE,0xBB,0x00,0x10,0x00,0x0F,0x3E,0x17,0xFE,0xBA,
+0x3E,0x18,0x01,0x20,0xA4,0x8A,0x00,0x30,0x00,0x10,0x9B,0x13,0x3C,0x4B,0xFF,0x5C,
+0x3C,0x3B,0xFF,0x5B,0xA4,0x48,0x00,0x30,0x00,0x11,0x9B,0x0B,0x3C,0x4B,0xFF,0x5A,
+0x3C,0x3B,0xFF,0x59,0x00,0x30,0x00,0x12,0x8A,0x43,0x3C,0x2B,0xFF,0x58,0x3C,0x3B,
+0xFF,0x57,0x00,0x20,0x00,0x13,0x8A,0x22,0x3C,0x1B,0xFF,0x56,0x3C,0x2B,0xFF,0x55,
+0x00,0x10,0x00,0x14,0x00,0x20,0x00,0x15,0xEA,0x79,0x3C,0x1B,0xFF,0x54,0x00,0x10,
+0x00,0x16,0x3C,0x1B,0xFF,0x53,0x00,0x10,0x00,0x17,0x3C,0x1B,0xFF,0x52,0x00,0x00,
+0x00,0x18,0x3C,0x0B,0xFF,0x51,0xFA,0x44,0x3E,0x0F,0xFF,0x00,0x84,0x20,0xDD,0x42,
+0x3E,0x6F,0xFF,0x20,0x3E,0x0F,0xFE,0xEC,0x84,0x20,0xFA,0x44,0xDD,0x42,0x80,0x06,
+0x84,0x3F,0x44,0x20,0x00,0x4C,0xDD,0x42,0x80,0x06,0x84,0x3F,0x44,0x20,0x00,0x4C,
+0xDD,0x42,0xEA,0xD9,0x84,0x20,0xFA,0x56,0xDD,0x42,0x46,0x01,0x00,0x01,0xEA,0xD8,
+0x84,0x20,0xFA,0x43,0xDD,0x42,0x3E,0x0F,0xFF,0x18,0x84,0x20,0x84,0x48,0xDD,0x42,
+0xFC,0x80,0xFC,0x00,0xEA,0x33,0x2E,0x67,0xFE,0x24,0x9E,0x71,0x96,0x48,0x5C,0xF0,
+0x80,0xFE,0xE8,0x23,0xC8,0x22,0x40,0x03,0x40,0x08,0x40,0x00,0x19,0x00,0x88,0x06,
+0x40,0x00,0x1B,0x00,0x95,0xB2,0xDD,0x4A,0x52,0x63,0x7F,0xF0,0x44,0x00,0x44,0xCC,
+0x40,0x00,0x1B,0x00,0xDD,0x4A,0x84,0xCC,0x8E,0xC1,0x84,0x1F,0x97,0xB0,0xDD,0x4A,
+0xCE,0xFC,0x84,0x0A,0x49,0xFF,0xD7,0xCA,0x3E,0x0F,0xFE,0x24,0x84,0x3F,0x84,0x41,
+0xDD,0x42,0x84,0x01,0x3E,0x07,0xFE,0xA0,0xFC,0x80,0x5A,0x08,0x08,0x14,0x5A,0x10,
+0x0C,0x1D,0xE6,0x2D,0xE8,0x08,0xE6,0x25,0xE9,0x17,0xE6,0x27,0xE9,0x0F,0x5A,0x10,
+0x09,0x15,0xD5,0x12,0x5A,0x10,0x2F,0x12,0x5A,0x10,0x79,0x0D,0x5A,0x10,0x1F,0x0E,
+0xD5,0x0B,0x5A,0x10,0xFF,0x0B,0x5A,0x10,0x79,0x06,0x5A,0x18,0x0D,0x07,0x84,0x27,
+0xD5,0x04,0x84,0x29,0xD5,0x02,0x84,0x28,0x80,0x01,0xDD,0x9E,0x2E,0x07,0xFE,0xA0,
+0xDD,0x9E,0x84,0x00,0x3E,0x07,0xFE,0xA0,0xDD,0x9E,0xE2,0x20,0xE8,0x03,0x8A,0x01,
+0xD5,0x02,0x9A,0x08,0x96,0x01,0xDD,0x9E,0xFC,0x60,0x80,0xE0,0xEA,0x5F,0x80,0xC1,
+0xE6,0x02,0xE8,0x0A,0x84,0x20,0x3E,0x17,0xFE,0x9F,0x3E,0x17,0xFE,0x9E,0x3E,0x17,
+0xFE,0x9D,0x3E,0x17,0xFE,0x9C,0x3C,0x13,0xFF,0xBC,0xE2,0x27,0xE8,0x07,0x3C,0x7B,
+0xFF,0xBC,0x3C,0x6B,0xFF,0xBD,0x3C,0x0B,0xFF,0x8F,0xEA,0xA2,0xE2,0xE1,0xE8,0x07,
+0x3C,0x7B,0xFF,0xB8,0x3C,0x6B,0xFF,0xB9,0x3C,0x0B,0xFF,0x8D,0x3C,0x13,0xFF,0xBB,
+0xE2,0x26,0xE8,0x07,0x3C,0x7B,0xFF,0xBA,0x3C,0x6B,0xFF,0xBB,0x3C,0x0B,0xFF,0x8E,
+0xEA,0xA0,0xE2,0xC1,0xE8,0x07,0x3C,0x7B,0xFF,0xB6,0x3C,0x6B,0xFF,0xB7,0x3C,0x0B,
+0xFF,0x8C,0x3C,0xA3,0xFF,0xBF,0x80,0x07,0x80,0x2A,0xDD,0x41,0x81,0x60,0x3C,0x93,
+0xFF,0xBE,0x80,0x06,0x80,0x29,0xDD,0x41,0x46,0x11,0x00,0x07,0x00,0x10,0x83,0x81,
+0xE2,0x2B,0xE9,0x04,0xE2,0x20,0x4E,0xF2,0x00,0x58,0xE3,0x47,0x2E,0x0F,0xFE,0x9D,
+0xE8,0x0B,0x2E,0x37,0xFE,0x9F,0xEB,0x42,0xEA,0x9C,0xE4,0x02,0x8C,0x21,0xEA,0x9F,
+0xE8,0x11,0x8C,0x01,0xD5,0x0D,0xE2,0xEA,0xE8,0x0D,0x2E,0x37,0xFE,0x9F,0xEB,0x42,
+0xEA,0x9C,0x5E,0xF0,0x7F,0xFF,0x8E,0x21,0xEA,0x9F,0xE9,0x04,0x8E,0x01,0x3E,0x07,
+0xFE,0x9D,0xE3,0x26,0x2E,0x0F,0xFE,0x9C,0xE8,0x0C,0x2E,0x37,0xFE,0x9E,0x3E,0x2F,
+0xFE,0xEC,0xEA,0x9C,0xE4,0x02,0x8C,0x21,0xEA,0x9F,0xE8,0x12,0x8C,0x01,0xD5,0x0E,
+0xE2,0xC9,0xE8,0x0E,0x2E,0x37,0xFE,0x9E,0x3E,0x2F,0xFE,0xEC,0xEA,0x9C,0x5E,0xF0,
+0x7F,0xFF,0x8E,0x21,0xEA,0x9F,0xE9,0x04,0x8E,0x01,0x3E,0x07,0xFE,0x9C,0x2E,0x0F,
+0xFE,0x9D,0xC8,0x0C,0x4C,0x75,0x00,0x0B,0x2E,0x07,0xFE,0x9F,0x8C,0x01,0x96,0x00,
+0xE6,0x0A,0xE9,0x02,0x84,0x09,0x3E,0x07,0xFE,0x9F,0x2E,0x0F,0xFE,0x9C,0xC8,0x0C,
+0x4C,0x64,0x80,0x0B,0x2E,0x07,0xFE,0x9E,0x8C,0x01,0x96,0x00,0xE6,0x0A,0xE9,0x02,
+0x84,0x09,0x3E,0x07,0xFE,0x9E,0xFC,0xE0,0xFC,0x61,0x83,0x80,0xEA,0x5F,0x81,0x41,
+0xE6,0x02,0x46,0xD1,0x00,0x01,0x58,0xD6,0x81,0x90,0x46,0xC1,0x00,0x01,0x58,0xC6,
+0x00,0x60,0xE8,0x13,0x84,0x40,0x3E,0x1F,0xFE,0x88,0x80,0x02,0x82,0x42,0xD5,0x11,
+0x38,0x02,0x0D,0x09,0x38,0x03,0x8D,0x09,0x80,0x66,0x5A,0x68,0x08,0x10,0x8C,0x50,
+0x19,0x20,0x80,0x01,0x5A,0x29,0x30,0x06,0x3E,0x8F,0xFE,0x88,0x85,0x20,0xD5,0x0E,
+0x84,0x60,0x40,0x46,0x88,0x00,0x40,0x76,0x08,0x00,0x9D,0x99,0xCB,0xEA,0x39,0xC6,
+0x88,0x09,0x38,0xA6,0x08,0x09,0x80,0x66,0xD5,0xF9,0x46,0x01,0x00,0x01,0xEA,0xD8,
+0x38,0x60,0x24,0x00,0x40,0xB4,0x8C,0x08,0x40,0x05,0x98,0x00,0x38,0x16,0x01,0x01,
+0x38,0x76,0x81,0x01,0xF1,0x81,0x3E,0x1F,0xFB,0x70,0x38,0xE0,0x80,0x00,0x80,0x1C,
+0x80,0x27,0xDD,0x41,0xE6,0x06,0xE9,0x0B,0x5A,0xE8,0x01,0x05,0x40,0x7E,0x1C,0x06,
+0xD5,0x07,0x5A,0xE8,0x03,0x05,0x40,0x73,0xF0,0x06,0xD5,0x02,0xEA,0xE4,0x80,0x0A,
+0xF1,0x01,0xDD,0x41,0xE6,0x06,0xE9,0x0D,0x5A,0xE8,0x02,0x06,0xF0,0x01,0x40,0x75,
+0x00,0x06,0xD5,0x07,0x5A,0xE8,0x04,0x06,0xF0,0x01,0xE2,0x0A,0xE9,0x04,0xD5,0x18,
+0x5A,0x78,0x01,0x16,0x00,0x04,0x00,0x00,0x8C,0x01,0x96,0x00,0x5A,0x08,0x02,0x18,
+0x8C,0xC1,0x84,0x00,0x96,0xB0,0x40,0x65,0x88,0x00,0x10,0x04,0x00,0x00,0x46,0x01,
+0x00,0x01,0xEA,0xD8,0x38,0x20,0x24,0x08,0xF8,0x04,0xD5,0x0B,0xCF,0x0A,0x88,0xCB,
+0x39,0xC6,0x99,0x09,0x38,0xA6,0x19,0x09,0x83,0xFF,0x84,0x00,0x10,0x04,0x00,0x00,
+0x8D,0x21,0x8D,0x01,0x5A,0x98,0x13,0xAB,0xFC,0xE1,0xFC,0x65,0x80,0xC0,0x3C,0xD3,
+0xFF,0xBF,0x3C,0xA3,0xFF,0xBE,0xEA,0x5F,0x80,0xE1,0xE6,0x02,0xE8,0x04,0x84,0x1F,
+0x3E,0x07,0xFE,0x87,0x40,0xF6,0x98,0x06,0xE9,0x04,0x44,0x90,0x00,0x40,0xD5,0x03,
+0x44,0x90,0x00,0x60,0x80,0x06,0x80,0x2D,0xDD,0x41,0xE3,0x47,0x81,0x60,0x85,0x00,
+0xE8,0x02,0xFB,0x10,0x80,0x07,0x80,0x2A,0xDD,0x41,0x80,0x80,0x46,0x01,0x00,0x07,
+0x00,0x00,0x03,0x80,0xB6,0x1F,0x02,0x5F,0x80,0x00,0xE2,0xAB,0xE9,0x03,0xE2,0xA4,
+0xE8,0x09,0x2E,0x07,0xFE,0x87,0x5A,0x08,0xFF,0x06,0xE2,0x8B,0xE8,0x1D,0x3E,0x97,
+0xFE,0x87,0xE2,0xCD,0x14,0xFF,0x80,0x02,0x40,0x16,0x98,0x06,0xF1,0x83,0xE3,0x47,
+0x2E,0x07,0xFE,0x87,0x14,0xFF,0x80,0x04,0xE2,0xEA,0xF0,0x81,0x3E,0xCF,0xFE,0xC4,
+0x3F,0xCF,0xFF,0x20,0x80,0x04,0x82,0xAB,0x85,0xC0,0x86,0x8C,0x14,0xFF,0x80,0x05,
+0x44,0xD0,0x00,0xFF,0xD5,0x06,0xE3,0x64,0xE8,0xE5,0x3E,0x87,0xFE,0x87,0xD5,0xE2,
+0x02,0xA6,0x00,0x00,0x5A,0xA0,0xFF,0x2A,0x02,0x1E,0x00,0x00,0xE2,0x26,0xE9,0x04,
+0x44,0x90,0x00,0x40,0xD5,0x03,0x44,0x90,0x00,0x60,0x80,0x06,0x15,0x4F,0x80,0x08,
+0xF5,0x87,0xF4,0x86,0xDD,0x41,0x02,0x1E,0x00,0x01,0x82,0xA0,0xE2,0x27,0xF4,0x06,
+0xF5,0x07,0x05,0x4F,0x80,0x08,0x85,0x00,0xE8,0x02,0xFB,0x10,0x80,0x07,0x15,0x4F,
+0x80,0x09,0xF5,0x88,0xF4,0x87,0x15,0x5F,0x80,0x06,0xDD,0x41,0x05,0x4F,0x80,0x09,
+0xF5,0x08,0xF4,0x07,0x05,0x5F,0x80,0x06,0x80,0x2A,0x42,0x17,0x50,0x73,0xEA,0xA8,
+0x38,0x11,0x04,0x00,0x40,0xF0,0x9C,0x09,0x5A,0xF8,0x01,0x19,0x5A,0xA0,0xFF,0x17,
+0x55,0x60,0x80,0x60,0x96,0x67,0xC1,0x05,0xB4,0x5F,0xFE,0x54,0x96,0x48,0xD5,0x02,
+0x80,0x2F,0x4D,0x64,0xC0,0x04,0xE2,0x35,0xD5,0x04,0x4D,0x64,0x40,0x08,0xE2,0x20,
+0xE8,0x05,0x50,0x25,0x00,0x01,0x12,0x26,0x00,0x00,0x02,0x16,0x00,0x00,0xC1,0x1E,
+0x5A,0x10,0xFF,0x1D,0xEA,0xA8,0x42,0x27,0x50,0x73,0xF8,0x33,0xC9,0x03,0xF1,0x05,
+0xD5,0x04,0x5A,0x18,0x20,0x06,0xF1,0x04,0xC1,0x11,0xCC,0x0C,0xD5,0x0F,0x5A,0x18,
+0x60,0x04,0xF1,0x03,0xD5,0x04,0x5A,0x18,0x40,0x0A,0xF1,0x02,0xC1,0x07,0x4E,0xB2,
+0x00,0x06,0x12,0x6E,0x00,0x00,0x12,0x7E,0x00,0x01,0x42,0x17,0x50,0x24,0xEA,0xA8,
+0x38,0x11,0x04,0x00,0xF2,0x01,0x54,0x10,0x80,0x60,0xFE,0x55,0x5A,0x18,0x20,0x04,
+0x12,0xD6,0x00,0x00,0x0A,0x16,0x00,0x01,0x42,0xA7,0x50,0x24,0xEA,0xA8,0x40,0x35,
+0x04,0x00,0x38,0x31,0x0C,0x00,0x92,0x67,0xCB,0x18,0x5A,0x10,0xFF,0x17,0x88,0x4A,
+0x88,0x22,0x00,0x10,0xFF,0xFF,0x54,0x10,0x80,0x60,0x83,0xFF,0x40,0x24,0x04,0x03,
+0x5A,0x28,0x20,0x04,0xE2,0xA0,0xE9,0x07,0x40,0x14,0x84,0x03,0x5A,0x18,0x20,0x06,
+0xE2,0xB5,0xE8,0x03,0x12,0xD6,0x7F,0xFF,0x50,0xE7,0x00,0x01,0x51,0xCE,0x00,0x04,
+0x5A,0xE0,0x13,0x04,0x48,0xFF,0xFF,0x5E,0xFC,0xE5,0xFC,0x60,0x80,0xA0,0x46,0x01,
+0x00,0x07,0x02,0x60,0x01,0xDC,0x46,0x01,0x00,0x07,0x02,0x70,0x01,0xDD,0xE6,0x42,
+0x81,0x41,0x81,0x22,0x97,0xB1,0x97,0xF9,0xE9,0x17,0x84,0x05,0x44,0x20,0x27,0x10,
+0xDD,0x5A,0x40,0x03,0x08,0x57,0x44,0x10,0x03,0xE8,0x96,0x91,0x40,0x21,0x04,0x57,
+0x44,0x0F,0xFC,0x18,0x42,0x61,0x00,0x73,0x8C,0x41,0x84,0x0A,0x40,0x21,0x00,0x16,
+0x42,0x60,0x04,0x73,0x97,0xB1,0x2E,0x07,0xFE,0x86,0xC0,0x20,0x5A,0x00,0x05,0x1F,
+0x5A,0x00,0x04,0x07,0x3C,0x03,0xFF,0x42,0x8C,0x01,0x3C,0x0B,0xFF,0x42,0xEB,0x40,
+0x3C,0x13,0xFF,0x5B,0xE2,0x20,0x4E,0xF2,0x00,0xE1,0x3C,0x13,0xFF,0x5C,0xE2,0x01,
+0x4E,0xF2,0x00,0xDC,0xEB,0x3F,0x3C,0x13,0xFF,0x59,0xE2,0x20,0x4E,0xF2,0x00,0xD6,
+0x3C,0x13,0xFF,0x5A,0xE2,0x01,0x4E,0xF2,0x00,0xD1,0x2E,0x27,0xFE,0x86,0xCA,0x15,
+0x5A,0x90,0x01,0x03,0xF8,0x4E,0xEA,0x29,0x4C,0x50,0x00,0xAE,0x3E,0x97,0xFE,0x86,
+0x3C,0x5B,0xFF,0x41,0x3C,0xAB,0xFF,0x40,0x3C,0x2B,0xFF,0x42,0x3C,0x2B,0xFF,0x3F,
+0x84,0x1F,0x3E,0x07,0xFC,0xF8,0xF8,0x3D,0x54,0x01,0x00,0xFD,0x5A,0x00,0x01,0x04,
+0x48,0x00,0x00,0x55,0x5A,0x98,0x01,0x38,0x80,0x25,0xEB,0x40,0xDD,0x41,0x2E,0xB7,
+0xFE,0xBA,0xE3,0x60,0xE9,0x06,0xEB,0x3F,0x80,0x2A,0xDD,0x41,0xE3,0x60,0xE8,0x13,
+0x84,0x05,0xDD,0x5A,0xDD,0x5C,0x40,0x13,0x00,0x17,0x84,0x2A,0x96,0x01,0x40,0x00,
+0x04,0x17,0x84,0x56,0x42,0x60,0x08,0x73,0x8C,0x01,0x40,0x00,0x04,0x56,0x42,0x60,
+0x88,0x73,0xD5,0x16,0x3C,0x13,0xFF,0x42,0x3C,0x23,0xFF,0x3F,0x2E,0x07,0xFE,0xBD,
+0x88,0x02,0xE0,0x01,0x4E,0xF2,0x00,0x70,0x84,0x05,0xDD,0x5A,0x84,0x0A,0x40,0x23,
+0x00,0x37,0x96,0x49,0x8A,0xC1,0x8C,0x21,0x40,0x00,0x80,0x36,0x88,0xC1,0x97,0xB1,
+0x48,0x00,0x00,0x62,0x4E,0x93,0x00,0x60,0x3C,0x03,0xFF,0x42,0x3C,0x33,0xFF,0x3F,
+0xE2,0x60,0xE8,0x11,0x2E,0x17,0xFE,0xBD,0x88,0x23,0xE0,0x20,0xE9,0x0C,0x84,0x22,
+0x5A,0x20,0x01,0x05,0x5A,0x28,0x03,0x05,0x84,0x24,0x3E,0x17,0xFE,0x86,0x3C,0x0B,
+0xFF,0x3F,0xD5,0x49,0x84,0x05,0xDD,0x5A,0xD5,0x46,0x5A,0x28,0x02,0x45,0x3C,0xB3,
+0xFF,0x42,0x3C,0x83,0xFF,0x3F,0xE3,0x68,0xE9,0x32,0x2E,0x07,0xFE,0xBC,0x88,0x08,
+0xE1,0x60,0xE8,0x2D,0x5A,0x98,0x01,0x38,0xEA,0x29,0xD0,0x35,0x80,0x25,0xEB,0x40,
+0xDD,0x41,0x2E,0xC7,0xFE,0xBA,0xE2,0x0C,0xE8,0x10,0xEB,0x3F,0x80,0x2A,0xDD,0x41,
+0xE2,0x0C,0xE8,0x0B,0x2E,0x07,0xFE,0xBB,0x88,0x08,0xE1,0x60,0xE9,0x06,0x84,0x03,
+0xDD,0x5A,0x3C,0xBB,0xFF,0x3F,0xD5,0x1F,0x84,0x05,0xDD,0x5A,0xDD,0x5C,0x40,0x13,
+0x80,0x17,0x84,0x2A,0x96,0x01,0x40,0x00,0x04,0x17,0x84,0x56,0x42,0x70,0x08,0x73,
+0x8C,0x01,0x40,0x00,0x04,0x56,0x42,0x70,0x88,0x73,0xD5,0x0C,0x84,0x05,0xDD,0x5A,
+0x84,0x0A,0x40,0x23,0x80,0x37,0x96,0x49,0x8A,0xE1,0x8C,0x21,0x40,0x00,0x80,0x36,
+0x88,0xE1,0x97,0xF9,0x2E,0x07,0xFE,0x86,0x5A,0x08,0x04,0x09,0x44,0x0F,0xFF,0x80,
+0x3E,0x07,0xFC,0xF8,0x84,0x00,0xDD,0x5A,0xD5,0x07,0x5A,0x08,0x05,0x06,0x4E,0x93,
+0x00,0x04,0x3E,0x97,0xFE,0x86,0x46,0x01,0x00,0x07,0x12,0x60,0x01,0xDC,0x46,0x01,
+0x00,0x07,0x12,0x70,0x01,0xDD,0xFC,0xE0,0x84,0x05,0x44,0x30,0x03,0xE8,0xDD,0x5A,
+0x40,0x03,0x0C,0x77,0xEA,0x2A,0x96,0xD9,0x40,0x31,0x84,0x77,0x44,0x0F,0xFF,0x9C,
+0x42,0x61,0x80,0x73,0x8C,0x61,0x84,0x0A,0x40,0x31,0x80,0x16,0x42,0x60,0x04,0x73,
+0x97,0xB1,0x48,0xFF,0xFF,0x1C,0xFC,0x00,0x84,0x00,0x3E,0x6F,0xFF,0x00,0x3E,0x5F,
+0xFE,0xEC,0x80,0x20,0x80,0x40,0x2A,0x43,0x00,0x01,0xC4,0x0E,0x22,0x33,0x00,0x00,
+0xC3,0x0B,0x42,0x42,0x00,0x03,0xE4,0x85,0xE9,0x07,0x42,0x31,0x80,0x03,0xE4,0x65,
+0xE9,0x03,0x8C,0x21,0x96,0x48,0x2A,0x42,0x80,0x01,0xC4,0x0E,0x22,0x32,0x80,0x00,
+0xC3,0x0B,0x42,0x42,0x00,0x03,0xE4,0x85,0xE9,0x07,0x42,0x31,0x80,0x03,0xE4,0x65,
+0xE9,0x03,0x8C,0x01,0x96,0x00,0x8C,0x41,0x96,0x90,0x5A,0x28,0x09,0xDE,0x8E,0x21,
+0xE6,0x22,0xE8,0x5C,0x8E,0x01,0xE6,0x02,0xE8,0x59,0xEA,0x36,0x3C,0x63,0xFF,0xBF,
+0xE2,0xC0,0xE8,0x03,0x9A,0x86,0xD5,0x02,0x9A,0xB0,0x46,0x11,0x00,0x07,0x00,0x10,
+0x83,0x82,0x46,0x31,0x00,0x07,0x00,0x31,0x83,0x83,0x40,0xF1,0x85,0x00,0xE0,0x4F,
+0xE8,0x45,0x3C,0x23,0xFF,0xC0,0xEA,0x9A,0xE2,0x22,0xE8,0x03,0x9A,0x51,0xD5,0x02,
+0x8A,0x22,0x46,0x21,0x00,0x07,0x00,0x21,0x03,0x84,0x46,0x31,0x00,0x07,0x00,0x31,
+0x83,0x85,0x40,0xF1,0x89,0x00,0xE0,0x2F,0xE8,0x31,0xEA,0xA2,0xDD,0x41,0x5C,0xF0,
+0x00,0x64,0xE8,0x08,0x80,0x06,0x3C,0x13,0xFF,0xBC,0xDD,0x41,0x5C,0xF0,0x00,0x64,
+0xE9,0x25,0x3C,0x43,0xFF,0x8F,0x3C,0x33,0xFF,0x8C,0x84,0x00,0x3E,0x2F,0xFF,0x18,
+0x80,0x20,0x40,0x31,0x90,0x06,0x5A,0x10,0x03,0x07,0xA5,0x10,0xA5,0x51,0xE2,0xA4,
+0xE8,0x05,0xD5,0x02,0xC3,0x03,0x8C,0x01,0xD5,0x02,0x8E,0x01,0x8C,0x21,0x96,0x48,
+0x96,0x02,0x8C,0x42,0x5A,0x18,0x04,0xF1,0x4E,0x07,0x00,0x04,0x84,0x01,0xD5,0x02,
+0x84,0x00,0x3E,0x07,0xFF,0x14,0x84,0x08,0xD5,0x02,0xEA,0x8D,0xFC,0x80,0xFC,0x60,
+0x80,0xE0,0x81,0x21,0x3C,0xA3,0xFF,0x5F,0x5A,0x10,0x0B,0x04,0x5A,0x18,0x07,0x1F,
+0x3C,0x07,0xFF,0x80,0xE4,0x05,0xE9,0x15,0x3C,0xF7,0xFF,0x81,0x5E,0xF7,0xFF,0xFC,
+0xE8,0x10,0x3C,0x07,0xFF,0x82,0xE4,0x05,0xE9,0x0C,0x3C,0x67,0xFF,0x83,0xCE,0x09,
+0x3C,0x07,0xFF,0x84,0xC8,0x07,0x3C,0x67,0xFF,0x85,0x5C,0x63,0x00,0x01,0xD5,0x02,
+0x84,0xC0,0xEA,0x36,0xEB,0x09,0xE2,0x20,0xF8,0x71,0xEB,0x78,0x58,0x10,0x81,0x90,
+0x94,0x3C,0x98,0x81,0x80,0x81,0x5A,0x98,0x0D,0x12,0x3C,0x13,0xFF,0xC1,0x3C,0x03,
+0xFF,0xBF,0xE2,0x20,0x4E,0xF2,0x02,0x3F,0xA4,0x50,0xA4,0x11,0xE2,0x20,0x4E,0xF2,
+0x02,0x3A,0xA4,0x52,0xA4,0x13,0x48,0x00,0x00,0xE5,0xEB,0x78,0x58,0x10,0x80,0x60,
+0x98,0xC1,0x5A,0x90,0x06,0x06,0x5A,0x90,0x09,0x04,0x48,0x00,0x00,0x52,0x38,0xA0,
+0x80,0x01,0xA4,0x19,0xE2,0x0A,0xE9,0x1C,0x3C,0x83,0xFF,0xBE,0x3C,0x63,0xFF,0xBB,
+0x80,0x08,0x80,0x26,0xDD,0x41,0x81,0x80,0x3C,0xB3,0xFF,0xB7,0x80,0x08,0x80,0x2B,
+0xDD,0x41,0xE2,0x0C,0xE9,0x0D,0x3C,0x83,0xFF,0xC0,0x80,0x26,0x80,0x08,0xDD,0x41,
+0x80,0xC0,0x80,0x2B,0x80,0x08,0xDD,0x41,0x40,0x63,0x00,0x06,0xD5,0x02,0x84,0xC1,
+0x5A,0x98,0x06,0x10,0xEA,0xFF,0xE3,0x40,0xE8,0x04,0x40,0x05,0x00,0x11,0xD5,0x02,
+0x96,0x03,0x96,0x01,0xEA,0xA0,0xDD,0x41,0xE6,0x1A,0x4E,0xF3,0x01,0xFA,0xF8,0x9A,
+0x5A,0x90,0x09,0x03,0xF9,0xAB,0x3C,0xB3,0xFF,0xBC,0x3C,0x93,0xFF,0xC1,0x80,0x0B,
+0x80,0x29,0xDD,0x41,0x81,0x80,0x3C,0xA3,0xFF,0xB8,0x80,0x29,0x80,0x0A,0xDD,0x41,
+0xE2,0x0C,0x4E,0xF3,0x01,0xE8,0x3C,0x93,0xFF,0xBF,0x80,0x0B,0x80,0x29,0xDD,0x41,
+0x81,0x60,0x80,0x29,0x80,0x0A,0xDD,0x41,0xE3,0x60,0x48,0x00,0x00,0xFD,0x5A,0x98,
+0x79,0x3A,0x3C,0xA3,0xFF,0xBC,0x3C,0x63,0xFF,0xC1,0x80,0x0A,0x80,0x26,0xDD,0x41,
+0x81,0x60,0x3C,0x93,0xFF,0xB8,0x80,0x26,0x80,0x09,0xDD,0x41,0xE2,0x0B,0x4E,0xF3,
+0x01,0xCA,0x3C,0x63,0xFF,0xBF,0x80,0x0A,0x80,0x26,0xDD,0x41,0x81,0x40,0x80,0x26,
+0x80,0x09,0xDD,0x41,0xE3,0x40,0x4E,0xF3,0x01,0xBE,0x3C,0x93,0xFF,0xB7,0x3C,0x63,
+0xFF,0xC0,0x80,0x09,0x80,0x26,0xDD,0x41,0x81,0x60,0x3C,0xA3,0xFF,0xBB,0x80,0x26,
+0x80,0x0A,0xDD,0x41,0xE2,0x0B,0x4E,0xF3,0x01,0xAE,0x3C,0x63,0xFF,0xBE,0x80,0x0A,
+0x80,0x26,0xDD,0x41,0x81,0x40,0x80,0x26,0x80,0x09,0xDD,0x41,0xE2,0x0A,0x48,0x00,
+0x01,0x9E,0x5A,0x98,0x3D,0x1F,0x84,0x40,0x80,0x22,0x80,0x02,0x3E,0x4F,0xFE,0xEC,
+0x38,0x32,0x09,0x11,0x4E,0x37,0x00,0x05,0x88,0x03,0x96,0x03,0xD5,0x03,0x88,0x23,
+0x96,0x4B,0x8C,0x41,0x5A,0x28,0x0A,0xF6,0x42,0xF0,0x00,0x03,0x42,0x20,0x80,0x03,
+0xE0,0x4F,0xE8,0x04,0x4E,0x13,0x01,0x87,0xF8,0xE4,0x4E,0x03,0x01,0x84,0xF8,0xE1,
+0x5A,0x98,0x05,0x24,0xEB,0x42,0x84,0x29,0x84,0x00,0x2A,0x41,0x00,0x01,0xC4,0x15,
+0x22,0x31,0x00,0x00,0xC3,0x12,0x42,0x52,0x00,0x03,0xE4,0xA5,0xE9,0x0E,0x42,0x51,
+0x80,0x03,0xE4,0xA5,0xE9,0x0A,0xC8,0x06,0x4E,0x44,0x00,0x08,0x40,0x00,0x0C,0x07,
+0xD5,0x04,0x5A,0x08,0x01,0x03,0x84,0x05,0x8E,0x21,0x96,0x48,0xC9,0xE7,0x5A,0x00,
+0x01,0x04,0x48,0x00,0x01,0x60,0xF8,0xBD,0x5A,0x98,0x0E,0x0E,0xA4,0x50,0xEA,0x36,
+0xE2,0x01,0x4E,0xF3,0x01,0x58,0xA4,0x12,0xE2,0x20,0x4E,0xF2,0x01,0x54,0xA4,0x51,
+0xE2,0x20,0xF8,0x49,0x5A,0x98,0x1F,0x21,0xA5,0x51,0xA5,0x12,0xE2,0x85,0x4E,0xF2,
+0x01,0x4A,0xA5,0x13,0x3C,0x63,0xFF,0xC1,0xE2,0xC4,0x4E,0xF2,0x01,0x44,0xA5,0x1C,
+0xEA,0xE0,0xE2,0x04,0x4E,0xF2,0x01,0x3F,0xA4,0x19,0xE2,0x04,0x4E,0xF2,0x01,0x3B,
+0xA4,0x1A,0xE2,0x04,0x4E,0xF2,0x01,0x37,0xA4,0x1B,0xE2,0x04,0x4E,0xF2,0x01,0x33,
+0xA4,0x15,0xE2,0x05,0xF8,0x28,0x5A,0x98,0x2F,0x29,0x3C,0x53,0xFF,0xC1,0x38,0x42,
+0x00,0x01,0xE2,0x85,0x4E,0xF2,0x01,0x27,0x3C,0x43,0xFF,0xC0,0xEA,0xE0,0xE2,0x80,
+0x4E,0xF2,0x01,0x21,0xA5,0x59,0xE2,0x05,0x4E,0xF2,0x01,0x1D,0xA4,0x12,0xA4,0x51,
+0xE2,0x01,0x4E,0xF2,0x01,0x18,0xA4,0x5A,0xE2,0x25,0x4E,0xF2,0x01,0x14,0x3C,0x23,
+0xFF,0xBF,0xE2,0x02,0x4E,0xF2,0x01,0x0F,0x3C,0x03,0xFF,0xBE,0xE2,0x01,0x4E,0xF2,
+0x01,0x0A,0xE2,0x80,0x48,0x00,0x00,0x64,0x5A,0x98,0x0C,0x29,0xEA,0xE0,0xA5,0x19,
+0x02,0xC1,0x80,0x02,0xE2,0x80,0x3C,0xA3,0xFF,0xC1,0x3C,0x83,0xFF,0xBF,0xE8,0x07,
+0xE2,0x8C,0xE8,0x05,0xE3,0x48,0x56,0x67,0x80,0x01,0xD5,0x02,0x84,0xC1,0xA4,0x52,
+0x80,0x0A,0xDD,0x41,0x81,0x20,0x3C,0xB3,0xFF,0xC0,0x80,0x2C,0x80,0x0B,0xDD,0x41,
+0x89,0x20,0x80,0x28,0x80,0x0A,0xDD,0x41,0x81,0x40,0xEA,0x9A,0x80,0x0B,0xDD,0x41,
+0x88,0x0A,0xE0,0x09,0x4E,0xF3,0x00,0xDF,0xF8,0x91,0x5A,0x90,0x0A,0x04,0x5A,0x98,
+0x1D,0x1C,0x84,0x40,0x80,0x22,0x80,0x02,0x3E,0x4F,0xFF,0x00,0x38,0x32,0x09,0x11,
+0x4E,0x37,0x00,0x05,0x88,0x03,0x96,0x03,0xD5,0x03,0x88,0x23,0x96,0x4B,0x8C,0x41,
+0x5A,0x28,0x0A,0xF6,0x42,0x00,0x00,0x03,0xEB,0x14,0xE0,0x20,0xE8,0x03,0xE4,0x24,
+0xD5,0x1E,0xE0,0x01,0xD5,0x19,0x5A,0x98,0x2D,0x1F,0x84,0x40,0x80,0x02,0x80,0x22,
+0x3E,0x3F,0xFE,0xEC,0x38,0xF1,0x89,0x11,0x4E,0xF7,0x00,0x05,0x88,0x2F,0x96,0x4B,
+0xD5,0x03,0x88,0x0F,0x96,0x03,0x8C,0x41,0x5A,0x28,0x0A,0xF6,0x42,0x00,0x00,0x03,
+0x42,0xF0,0x80,0x03,0xE0,0x0F,0x4E,0xF2,0x00,0xAB,0xE4,0x04,0x4E,0xF2,0x00,0xA3,
+0x48,0x00,0x00,0xA6,0x8F,0x21,0xE7,0x24,0x4E,0xF2,0x00,0xA2,0x84,0x00,0x80,0xC0,
+0x81,0x20,0x81,0x60,0x81,0x00,0x3E,0x4F,0xFF,0x00,0x3E,0x5F,0xFE,0xEC,0x38,0x32,
+0x01,0x11,0x94,0x41,0xE4,0x65,0xE9,0x05,0x88,0x6B,0x40,0xB1,0x80,0x11,0xD5,0x07,
+0x5E,0xF1,0xFF,0xFC,0xE8,0x04,0x88,0x69,0x40,0x91,0x80,0x11,0x38,0x12,0x84,0x11,
+0xE4,0x25,0xE9,0x06,0x40,0x20,0xA0,0x00,0x40,0x81,0x00,0x11,0xD5,0x06,0x5E,0xF0,
+0xFF,0xFC,0xE8,0x03,0x88,0xC1,0x97,0xB3,0x8C,0x01,0x5A,0x08,0x0A,0xE2,0xEA,0xD9,
+0x38,0x10,0x1D,0x01,0x84,0x4C,0x3E,0x0F,0xFC,0x08,0x42,0x03,0x88,0x73,0x88,0x01,
+0x00,0x00,0x7F,0xFF,0x54,0x00,0x00,0x60,0xC8,0x1B,0xEA,0x9A,0xEA,0xFF,0xE2,0x20,
+0x4E,0xF2,0x00,0x61,0xDD,0x41,0x3C,0x13,0xFF,0x60,0xE2,0x20,0x4E,0xF2,0x00,0x5B,
+0x3C,0x03,0xFF,0xBC,0xEA,0xA2,0xDD,0x41,0xE2,0x0A,0x4E,0xF2,0x00,0x54,0x4E,0x83,
+0x00,0x52,0x8C,0xC3,0x97,0xB1,0x5C,0x63,0x00,0x07,0x48,0x00,0x00,0x4A,0x5A,0x08,
+0x20,0x18,0xEA,0xFF,0xEA,0x9A,0xE2,0x01,0x4E,0xF2,0x00,0x45,0xDD,0x41,0x3C,0x13,
+0xFF,0x60,0xE2,0x20,0xE8,0x3F,0x3C,0x03,0xFF,0xBC,0xEA,0xA2,0xDD,0x41,0xE2,0x0A,
+0xE8,0x39,0xE5,0x04,0xE9,0x37,0x84,0x20,0x40,0x60,0x98,0x06,0xD5,0x31,0x5A,0x08,
+0x60,0x17,0xEB,0x09,0xEA,0x36,0xE2,0x01,0xE8,0x2D,0xDD,0x41,0x3C,0x13,0xFF,0x61,
+0xE2,0x20,0xE8,0x28,0x3C,0x03,0xFF,0xBB,0xEA,0xA0,0xDD,0x41,0xE2,0x0A,0xE8,0x22,
+0xE5,0x64,0xE9,0x20,0x84,0x20,0x40,0x60,0xA4,0x06,0xD5,0x1A,0x5A,0x08,0x40,0x20,
+0xEA,0x36,0xEB,0x09,0xE2,0x20,0xE8,0x16,0xDD,0x41,0x3C,0x13,0xFF,0x61,0xE2,0x20,
+0xE8,0x11,0x3C,0x03,0xFF,0xBB,0xEA,0xA0,0xDD,0x41,0xE2,0x0A,0xE8,0x0B,0x4E,0xB3,
+0x00,0x0A,0x50,0x64,0x80,0x03,0x97,0xB1,0xE6,0xC7,0xE9,0x04,0xD5,0x08,0x5A,0x68,
+0x01,0x07,0x44,0x10,0x00,0xFF,0xEA,0xD9,0x38,0x10,0x1D,0x09,0xFC,0xE0,0xFC,0x64,
+0x84,0x20,0xB0,0x02,0xFA,0x48,0xDD,0x42,0x84,0x00,0x3E,0x4F,0xFE,0xC4,0x3E,0x3F,
+0xFC,0x08,0x84,0xAC,0x38,0x12,0x01,0x01,0x3E,0xDF,0xFE,0xC4,0x5A,0x10,0xFF,0x13,
+0x42,0x20,0x14,0x24,0x99,0x91,0x38,0x61,0x98,0x10,0x4E,0x65,0x00,0x0C,0x88,0x43,
+0x88,0x22,0xA6,0x89,0xB0,0x42,0x38,0x10,0x88,0x00,0xB1,0x82,0x8C,0x21,0x38,0x13,
+0x08,0x08,0x8C,0x01,0x5A,0x08,0x13,0xE8,0x84,0x00,0xB0,0x42,0x38,0x10,0x80,0x00,
+0x97,0x00,0xC1,0x0A,0x84,0xC0,0x81,0x26,0xEA,0xE4,0x3F,0xCF,0xFE,0xC4,0x3E,0xBF,
+0xFC,0x08,0x85,0xCC,0xD5,0x12,0x8C,0x01,0x5A,0x08,0x18,0xF1,0xEA,0x8D,0xD5,0x35,
+0x42,0xC3,0x38,0x24,0x40,0x06,0x08,0x00,0x38,0x15,0x80,0x00,0x96,0x0A,0x4E,0x04,
+0x00,0x0D,0x8C,0xC1,0x5A,0x60,0x13,0x23,0x38,0x26,0x99,0x01,0x54,0x83,0x00,0xFF,
+0x94,0xF1,0x5A,0x28,0xFF,0xEF,0xD5,0xF6,0x40,0x05,0xB0,0x00,0x88,0x40,0xA7,0x51,
+0xDC,0xF1,0x80,0x08,0xF3,0x81,0xB6,0x9F,0x49,0xFF,0xFD,0x33,0xF3,0x01,0xB4,0x9F,
+0x38,0x2E,0x0C,0x01,0x5A,0x20,0xFF,0xE7,0x50,0x14,0x80,0x01,0x88,0x4C,0x54,0x90,
+0x80,0xFF,0x38,0x75,0x88,0x00,0x81,0x48,0xD5,0xDD,0x5A,0x98,0x01,0xD1,0x38,0x06,
+0xA9,0x01,0x5A,0x00,0xFF,0xCD,0x80,0x07,0xFC,0xE4,0xFC,0x42,0xB0,0xC2,0x97,0x81,
+0x97,0xC9,0x3A,0x01,0x84,0x20,0x81,0x42,0xFD,0x03,0x49,0xFF,0xFB,0x58,0x5A,0xA8,
+0x01,0x3C,0x9E,0x31,0x96,0x01,0x44,0x10,0xFF,0xFD,0xE2,0x20,0x4E,0xF3,0x00,0x50,
+0xEA,0x36,0xC8,0x15,0x3C,0x93,0xFF,0xC0,0x4E,0x93,0x00,0x12,0xF8,0x5F,0x80,0x09,
+0x3E,0x1F,0xFF,0x20,0x38,0x60,0x80,0x09,0x98,0x81,0x8C,0x04,0xAD,0xD1,0x5A,0x08,
+0x4C,0xFB,0x3C,0x6B,0xFF,0xC1,0x3C,0x7B,0xFF,0xC0,0xD5,0x19,0x46,0x11,0x00,0x07,
+0x00,0x10,0x83,0x9B,0x46,0x21,0x00,0x07,0xEA,0x5F,0x00,0x21,0x03,0x9C,0x40,0xF1,
+0x05,0x00,0xE0,0x0F,0xE8,0x03,0x8C,0x01,0xEA,0xD5,0xFD,0x03,0x49,0xFF,0xF9,0x06,
+0xFD,0x03,0x49,0xFF,0xFA,0x2C,0xFD,0x03,0x49,0xFF,0xF9,0xA0,0x3C,0x6B,0xFF,0xBF,
+0x3C,0x7B,0xFF,0xBE,0xD5,0x1C,0x4E,0xA3,0x00,0x1F,0xEA,0x96,0xC0,0x09,0x2E,0x07,
+0xFC,0xF8,0x5A,0x00,0xFF,0x16,0x84,0x3F,0x3E,0x17,0xFC,0xF8,0xD5,0x11,0xEA,0x36,
+0xC0,0xF7,0x49,0xFF,0xFC,0x3A,0xB6,0x1F,0x49,0xFF,0xFF,0x3B,0xF0,0x81,0xF1,0x01,
+0xB4,0x1F,0x49,0xFF,0xF8,0xB4,0x5A,0x08,0xFF,0x04,0xD5,0xEA,0xEA,0x8D,0xEA,0xFD,
+0x5A,0x18,0x01,0x12,0x46,0x11,0x00,0x07,0x00,0x10,0x83,0x9B,0x46,0x21,0x00,0x07,
+0xEA,0x5F,0x00,0x21,0x03,0x9C,0x40,0xF1,0x05,0x00,0xE0,0x0F,0xE8,0x03,0x8C,0x01,
+0xEA,0xD5,0xEA,0x8D,0x4E,0xA3,0x00,0x06,0xB6,0x1F,0x49,0xFF,0xF7,0xCB,0xB4,0x1F,
+0xFC,0xC2,0x3E,0x1F,0xFE,0x64,0xA6,0x08,0xFA,0x56,0xA6,0x49,0x8E,0x01,0x42,0x10,
+0x08,0x73,0xEB,0x64,0x58,0x00,0x01,0x44,0x50,0x40,0x91,0xB8,0x40,0x40,0x10,0x20,
+0xA5,0x62,0x3E,0x28,0x02,0xF4,0x97,0x6B,0xAD,0x50,0x9C,0xE4,0xA5,0x21,0x50,0x10,
+0x94,0xB0,0x97,0x23,0xAD,0x15,0xA5,0x19,0x40,0x00,0x04,0x20,0x97,0x23,0xAD,0x16,
+0x02,0x41,0x80,0x26,0x3E,0x18,0x02,0xE0,0x97,0x23,0xAD,0x14,0x02,0x41,0x80,0x25,
+0x97,0x23,0xAD,0x12,0x02,0x41,0x80,0x27,0x97,0x23,0xAD,0x13,0x02,0x41,0x80,0x4C,
+0x97,0x23,0xAD,0x11,0x02,0x41,0x80,0x4B,0x97,0x23,0xAD,0x17,0x02,0x31,0x80,0x4D,
+0x96,0xDB,0x12,0x31,0x00,0x08,0xA4,0xC2,0x9C,0x84,0x96,0xDB,0xAC,0xC8,0xA4,0x01,
+0x96,0x03,0xAC,0x0D,0xA4,0x11,0x96,0x03,0xAC,0x0E,0x02,0x01,0x00,0x26,0x96,0x03,
+0xAC,0x0C,0x02,0x01,0x00,0x25,0x96,0x03,0xAC,0x0A,0x02,0x01,0x00,0x27,0x96,0x03,
+0xAC,0x0B,0x02,0x01,0x00,0x4C,0x96,0x03,0xAC,0x09,0x02,0x01,0x00,0x4B,0x96,0x03,
+0xAC,0x0F,0x02,0x01,0x00,0x4D,0x96,0x03,0x12,0x00,0x80,0x08,0xDD,0x9E,0x00,0x00,
+0x46,0x21,0x00,0x01,0x58,0x21,0x0F,0xDC,0x38,0x31,0x05,0x00,0x38,0x31,0x01,0x08,
+0x40,0x31,0x04,0x20,0xA6,0xD9,0x40,0x21,0x00,0x20,0xAE,0xD1,0x46,0x21,0x00,0x01,
+0xEB,0x36,0x38,0x31,0x06,0x02,0x38,0x31,0x02,0x0A,0x84,0x4C,0x42,0x30,0x08,0x24,
+0xFE,0x8C,0x46,0x41,0x00,0x02,0x58,0x42,0x00,0xB4,0x99,0x63,0x88,0x82,0x3B,0x02,
+0x48,0x00,0x46,0x41,0x00,0x02,0x58,0x42,0x00,0x24,0x88,0x44,0x3B,0x02,0xC8,0x20,
+0x88,0x64,0x3B,0x01,0x48,0x00,0x3E,0x28,0x01,0xCC,0x3B,0x01,0xC8,0x20,0x40,0x11,
+0x04,0x40,0xEA,0xDA,0x3A,0x10,0x84,0x00,0x3A,0x10,0x04,0x20,0xDD,0x9E,0x92,0x00,
+0x84,0x20,0x46,0x21,0x00,0x01,0xEB,0x36,0x38,0x11,0x02,0x0A,0x84,0x4C,0xFE,0x84,
+0x46,0x31,0x00,0x02,0x58,0x31,0x80,0xB4,0x88,0x62,0xB6,0x23,0xA8,0x59,0xA8,0x5A,
+0x46,0x31,0x00,0x02,0x58,0x31,0x80,0x24,0x88,0x43,0xB6,0x22,0xA8,0x51,0xA8,0x52,
+0x2E,0x37,0xFD,0x05,0x3E,0x28,0x01,0xCC,0x38,0x31,0x02,0x08,0xEA,0xDA,0xAE,0x41,
+0xAE,0x42,0x2E,0x17,0xFD,0x16,0xAE,0x43,0xDD,0x9E,0x92,0x00,0x3B,0xFF,0xFC,0xBC,
+0x51,0xFF,0xFF,0xFC,0x49,0xFF,0xFF,0x3F,0x3C,0x00,0x01,0x7E,0x96,0x03,0x4E,0x05,
+0x00,0xAF,0x3C,0x20,0x01,0x7E,0x80,0xA2,0x46,0x11,0x00,0x01,0x2E,0x07,0xFE,0x65,
+0x00,0x10,0x8F,0xF3,0xE2,0x20,0xE8,0x49,0x9A,0x41,0xE4,0x22,0x4E,0xF3,0x00,0x4A,
+0x2E,0x17,0xFE,0x64,0x46,0x31,0x00,0x02,0x04,0x31,0x80,0x2C,0x98,0x93,0x46,0x31,
+0x00,0x02,0x04,0x41,0x80,0x2A,0x46,0x31,0x00,0x02,0x04,0x31,0x80,0x2B,0xF8,0x52,
+0x46,0x51,0x00,0x02,0x14,0x22,0x80,0x2C,0x46,0x21,0x00,0x02,0x14,0x41,0x00,0x2A,
+0x46,0x21,0x00,0x02,0x14,0x31,0x00,0x2B,0x2E,0x20,0x01,0xF9,0xE2,0x40,0xE8,0x5D,
+0x3E,0x00,0x01,0xF9,0x2E,0x20,0x01,0xFA,0xE2,0x41,0xE8,0x4F,0x3E,0x10,0x01,0xFA,
+0xFA,0x56,0x42,0x00,0x88,0x73,0x46,0x11,0x00,0x02,0xEB,0x17,0x50,0x00,0x14,0xB0,
+0x94,0x01,0x88,0x01,0x22,0x10,0x00,0x02,0x5A,0x10,0xFE,0x50,0xEA,0x4F,0x2E,0x27,
+0xFE,0x64,0xAC,0xC2,0x2E,0x17,0xFE,0x65,0x3E,0x27,0xFE,0x60,0xEC,0x04,0x3E,0x17,
+0xFE,0x61,0x3B,0xFF,0xFC,0x84,0xDD,0x9E,0x8A,0x20,0xE4,0x22,0x4E,0xF2,0xFF,0xBA,
+0x46,0x31,0x00,0x01,0x2E,0x17,0xFE,0x64,0x00,0x31,0x8F,0xF2,0xE2,0x61,0xE8,0x53,
+0x9A,0xCB,0xE4,0x62,0x4E,0xF2,0xFF,0xB0,0x46,0x31,0x00,0x02,0x04,0x31,0x80,0x50,
+0x88,0x43,0x46,0x31,0x00,0x02,0x04,0x41,0x80,0x4E,0x46,0x31,0x00,0x02,0x04,0x31,
+0x80,0x4F,0x42,0x42,0x80,0x73,0x42,0x32,0x84,0x73,0x4A,0x00,0x00,0x60,0x46,0x51,
+0x00,0x02,0x14,0x22,0x80,0x50,0x46,0x21,0x00,0x02,0x14,0x41,0x00,0x4E,0x46,0x21,
+0x00,0x02,0x14,0x31,0x00,0x4F,0xD5,0xA9,0x2E,0x20,0x01,0xFB,0xE2,0x22,0xE8,0xB1,
+0x3E,0x10,0x01,0xFB,0x48,0xFF,0xFF,0xAE,0x2E,0x20,0x01,0xF8,0xE2,0x02,0xE8,0xA3,
+0x3E,0x00,0x01,0xF8,0x48,0xFF,0xFF,0xA0,0x2E,0x27,0xFD,0x36,0x46,0x11,0x00,0x02,
+0x04,0x10,0x80,0x08,0x8C,0x21,0xEA,0x4F,0xAC,0xC2,0xE2,0x41,0xEB,0x64,0x14,0x10,
+0x00,0x08,0xE8,0x17,0x2E,0x17,0xFE,0x64,0x2E,0x07,0xFE,0x65,0x3E,0x17,0xFE,0x60,
+0xEC,0x04,0x3E,0x07,0xFE,0x61,0x3B,0xFF,0xFC,0x84,0xDD,0x9E,0x84,0xA0,0x84,0x40,
+0x48,0xFF,0xFF,0x54,0x8A,0x61,0xE4,0x62,0x4E,0xF2,0xFF,0x5E,0x48,0xFF,0xFF,0xAE,
+0x49,0xFF,0xCE,0xF3,0xC8,0xE8,0xDD,0x5B,0xC1,0x1C,0x3C,0x00,0x01,0x70,0xEA,0xA6,
+0x97,0x43,0xD2,0x17,0xEA,0x22,0xEA,0x80,0xEB,0x1E,0x4E,0x00,0x00,0x56,0xE9,0x11,
+0x8E,0x21,0xDD,0x51,0x49,0xFF,0xFF,0x2C,0x2E,0x07,0xFE,0x60,0x50,0x00,0x00,0x01,
+0x2E,0x17,0xFE,0x61,0x3E,0x07,0xFE,0x64,0xEA,0x7A,0xEA,0x2D,0x2E,0x17,0xFE,0x64,
+0xEA,0xE7,0x8E,0x01,0xE0,0x20,0xE8,0x19,0x3C,0x00,0x01,0x71,0xEA,0xA6,0x97,0x43,
+0xD2,0x14,0xEA,0x22,0xEA,0x80,0xEB,0x1D,0xF8,0x37,0xE9,0x0F,0x9C,0x49,0xDD,0x51,
+0x49,0xFF,0xFF,0x0E,0x2E,0x07,0xFE,0x60,0x50,0x00,0x7F,0xFF,0x2E,0x17,0xFE,0x61,
+0x3E,0x07,0xFE,0x64,0xEA,0x7A,0xEA,0x2D,0xEA,0xCC,0xC1,0x19,0x3C,0x00,0x01,0x72,
+0xEA,0xA6,0x97,0x43,0xD2,0x14,0xEA,0x22,0xEA,0x80,0x3C,0x30,0x01,0x7C,0xF8,0x1C,
+0xE9,0x0E,0x9E,0x49,0xEA,0x7A,0xEA,0x25,0xEA,0x44,0xEA,0x41,0x50,0x00,0x00,0x01,
+0xDD,0x51,0xEA,0x46,0x49,0xFF,0xFE,0x2F,0x2E,0x17,0xFE,0x65,0xEA,0xC5,0x8E,0x01,
+0xE0,0x20,0xE8,0x1B,0x3C,0x00,0x01,0x73,0xEA,0xA6,0x97,0x43,0xD2,0x16,0xEA,0x22,
+0xEA,0x80,0x3C,0x30,0x01,0x7D,0x96,0x03,0x96,0xDB,0x88,0x02,0xE0,0x03,0x83,0xFF,
+0xE9,0x0C,0x9C,0x49,0xEA,0x7A,0xEA,0x25,0xEA,0x44,0xEA,0x41,0x50,0x00,0x7F,0xFF,
+0xDD,0x51,0xEA,0x46,0x49,0xFF,0xFE,0x0F,0xDD,0x5B,0x4E,0x12,0x00,0x51,0xEA,0x83,
+0xC2,0x20,0x3C,0x00,0x01,0x75,0xEA,0x4F,0x97,0x43,0xD3,0x1B,0xEA,0x22,0xEA,0x78,
+0xEB,0x1E,0xF8,0x75,0xE9,0x16,0xEA,0xA1,0x3C,0x00,0x01,0x7C,0xF8,0x7A,0xE9,0x11,
+0x3C,0x00,0x01,0x7A,0x3C,0x40,0x01,0x7C,0x3C,0x50,0x01,0x7F,0x97,0x23,0x96,0x03,
+0xEA,0xA7,0x88,0x04,0x88,0x03,0x97,0x2B,0x40,0xF0,0x10,0x07,0x4E,0xF2,0x00,0xA6,
+0xEA,0xC5,0x8E,0x01,0xE0,0x40,0xE8,0x2B,0x3C,0x00,0x01,0x76,0xEA,0x4F,0x97,0x43,
+0xD3,0x26,0xEA,0x22,0xEA,0x78,0xEB,0x1E,0xF8,0x52,0xE9,0x21,0xEA,0xA1,0x3C,0x00,
+0x01,0x7D,0xF8,0x57,0xE9,0x1C,0x3C,0x00,0x01,0x7A,0x3C,0x40,0x01,0x7D,0x3C,0x50,
+0x01,0x80,0x97,0x23,0x96,0x03,0xEA,0xA7,0x4E,0x00,0x00,0x5C,0xE9,0x10,0x8E,0x21,
+0x8C,0x41,0xDD,0x51,0xEA,0xBC,0xEA,0x25,0xEA,0x41,0xEA,0x44,0x8C,0x21,0x8E,0x01,
+0xDD,0x51,0xEA,0x46,0x49,0xFF,0xFD,0xBF,0x2E,0x17,0xFE,0x64,0xEA,0xE7,0x8E,0x01,
+0xE0,0x20,0x4E,0xF2,0xFF,0x21,0xEA,0x83,0xC2,0x1C,0x3C,0x00,0x01,0x77,0xEA,0x4F,
+0x97,0x43,0xD3,0x17,0xEA,0x22,0xEA,0x78,0xEB,0x1D,0xF8,0x21,0xE9,0x12,0xEA,0xA1,
+0x3C,0x00,0x01,0x7C,0xF8,0x26,0xE9,0x0D,0x3C,0x00,0x01,0x7B,0x3C,0x40,0x01,0x7C,
+0x3C,0x50,0x01,0x81,0x97,0x23,0x96,0x03,0xEA,0xA7,0x4E,0x00,0x00,0x2B,0xE8,0x3D,
+0xEA,0xC5,0x8E,0x01,0xE0,0x40,0x4E,0xF2,0xFE,0xFF,0x3C,0x00,0x01,0x78,0xEA,0x4F,
+0x97,0x43,0x4C,0x51,0xBE,0xF9,0xEA,0x22,0xEA,0x78,0xEB,0x1D,0x96,0x03,0x96,0xDB,
+0x88,0x04,0xE0,0x03,0x83,0xFF,0x4E,0xF3,0xFE,0xEF,0xEA,0xA1,0x3C,0x00,0x01,0x7D,
+0x96,0xDB,0x97,0x43,0x98,0x23,0xE0,0x05,0x83,0xFF,0x4E,0xF3,0xFE,0xE5,0x3C,0x00,
+0x01,0x7B,0x3C,0x40,0x01,0x7D,0x3C,0x50,0x01,0x82,0x97,0x23,0x96,0x03,0xEA,0xA7,
+0x88,0x04,0x88,0x03,0x97,0x2B,0xE0,0x04,0x83,0xFF,0x4E,0xF3,0xFE,0xD5,0x8C,0x21,
+0x9C,0x91,0xDD,0x51,0xEA,0xBC,0xEA,0x25,0xEA,0x41,0xEA,0x44,0x8E,0x21,0x8E,0x01,
+0xDD,0x51,0xEA,0x46,0x48,0xFF,0xFE,0xC8,0x8C,0x21,0x8E,0x41,0xDD,0x51,0xEA,0xBC,
+0x49,0xFF,0xFE,0x16,0xEA,0x41,0xEA,0x44,0x8E,0x21,0x8C,0x01,0xDD,0x51,0xEA,0x46,
+0x49,0xFF,0xFD,0x51,0xEA,0xE7,0xDD,0x5B,0x8E,0x01,0x40,0x00,0x80,0x07,0x4E,0x02,
+0xFE,0xB3,0xEA,0x83,0x48,0xFF,0xFF,0xAE,0x8E,0x21,0x50,0x21,0x7F,0xFF,0xDD,0x51,
+0xEA,0xBC,0xEA,0x25,0xEA,0x41,0xEA,0x44,0x8C,0x21,0x8C,0x01,0xDD,0x51,0xEA,0x46,
+0x49,0xFF,0xFD,0x39,0xDD,0x5B,0x4E,0x12,0xFF,0x7B,0xEA,0x83,0x48,0xFF,0xFF,0x4A,
+0x84,0x00,0x46,0x11,0x00,0x05,0x12,0x00,0x82,0xD4,0x46,0x11,0x00,0x05,0x12,0x00,
+0x82,0xD5,0x2E,0x20,0x01,0x29,0x2E,0x10,0x01,0x28,0x2E,0x37,0xFD,0x2A,0x3A,0x6F,
+0xB4,0x3C,0x2F,0x37,0xFD,0x26,0x84,0x80,0x44,0x90,0x00,0x48,0x47,0x11,0x00,0x02,
+0x59,0x18,0x81,0x44,0x44,0xA0,0x00,0x4C,0x44,0xB0,0x00,0xFE,0x47,0x21,0x00,0x01,
+0x59,0x29,0x0E,0xB0,0x96,0x20,0xE2,0x02,0xE8,0x36,0x80,0xD1,0x80,0xF1,0x42,0x62,
+0x24,0x73,0x42,0x72,0x28,0x73,0x50,0x63,0x19,0x54,0x50,0x73,0xA9,0xB2,0x84,0xA0,
+0x51,0x00,0x00,0x01,0xD1,0x1E,0xA4,0x30,0x8C,0xA1,0x96,0x03,0xE0,0x60,0xE8,0x15,
+0x12,0xB3,0x80,0x00,0xEB,0x4E,0xEA,0xA4,0x40,0xC9,0x00,0x20,0x5C,0xF0,0x00,0x95,
+0x39,0x09,0x01,0x08,0x10,0x56,0x00,0x01,0xE8,0x04,0x8C,0x01,0x40,0x00,0x00,0x13,
+0x46,0xC1,0x00,0x05,0x12,0x06,0x02,0xD4,0x8C,0xC2,0x97,0x68,0x8C,0xE2,0xD5,0xE3,
+0xEB,0x4E,0xEA,0xA4,0x8C,0x81,0xE2,0x13,0xE9,0xCE,0x84,0x01,0xEA,0xF8,0x44,0x00,
+0x00,0x00,0xEA,0x64,0x2E,0x60,0x00,0xFF,0x4E,0x63,0x00,0x0E,0xEB,0x4E,0x02,0x50,
+0x02,0xD5,0xEA,0xD1,0x9F,0x01,0x2E,0x00,0x00,0x11,0x8E,0x01,0xFE,0x24,0xE0,0xA0,
+0xE9,0x26,0xD5,0x23,0x44,0x00,0x00,0x64,0xFF,0x84,0x41,0x00,0x84,0x08,0xEB,0x54,
+0xEA,0xAC,0x84,0xA0,0xD2,0xEC,0x80,0x80,0x41,0x10,0x40,0x00,0x4C,0x48,0x80,0x11,
+0xA5,0xE0,0x97,0xFB,0xE0,0xC7,0xE8,0x0A,0x46,0x71,0x00,0x05,0x02,0x73,0x82,0xD5,
+0x46,0x91,0x00,0x05,0x8C,0xE1,0x12,0x74,0x82,0xD5,0x8C,0x82,0xD5,0xF0,0x8C,0xA1,
+0x97,0x68,0x50,0x00,0x00,0x48,0xD5,0xE7,0x48,0x00,0x00,0x00,0x2E,0x08,0x00,0x14,
+0x4E,0x04,0x00,0x4E,0x46,0x51,0x00,0x02,0x58,0x52,0x81,0x44,0x9D,0xC9,0x84,0x00,
+0x8C,0x41,0x45,0x00,0x00,0x4C,0x82,0x25,0x44,0x60,0x00,0xFC,0xFB,0xD6,0xE0,0x40,
+0xE9,0x1A,0x80,0x85,0x42,0x40,0x40,0x73,0x22,0xF2,0x11,0xBA,0xE0,0x6F,0xE8,0x03,
+0x12,0x62,0x14,0xB2,0x80,0x87,0x42,0x40,0x48,0x73,0x41,0x38,0x90,0x20,0x22,0xF9,
+0x91,0xBA,0xE0,0x6F,0xE8,0x05,0x40,0x42,0x90,0x20,0x12,0x62,0x14,0xB2,0x8C,0x01,
+0x96,0x00,0xD5,0xE6,0x46,0x41,0x00,0x02,0x58,0x42,0x01,0x44,0xFA,0xB6,0x8C,0x21,
+0x84,0x00,0x80,0xE4,0x44,0x60,0x00,0xFC,0xFE,0xAC,0xE0,0x20,0xE9,0x18,0x40,0x52,
+0x00,0x20,0x22,0xF2,0x91,0xBA,0xE0,0x6F,0xE8,0x03,0x12,0x62,0x94,0xB2,0x99,0x50,
+0x41,0x03,0x94,0x20,0x22,0xF8,0x11,0xBA,0xE0,0x6F,0xE8,0x05,0x40,0x52,0x14,0x20,
+0x12,0x62,0x94,0xB2,0x8C,0x01,0x96,0x00,0x48,0xFF,0xFF,0xE9,0x3A,0x6F,0xB4,0x04,
+0xDD,0x9E,0x92,0x00,0x3A,0x6F,0xBA,0xBC,0xEF,0xFC,0x3F,0xCF,0xFE,0x1C,0x84,0xC0,
+0x80,0x06,0x8C,0xC1,0x54,0x63,0x00,0xFF,0x49,0xFF,0xFC,0xDC,0x5A,0x68,0x0C,0xFA,
+0x84,0x20,0xB9,0x80,0xB9,0x8E,0xEB,0x4E,0x02,0x20,0x02,0xD4,0x2E,0x07,0xFD,0x36,
+0x92,0x01,0xE2,0x40,0xE8,0x24,0x3C,0x03,0xFE,0xC7,0x8C,0x01,0x96,0x01,0xEA,0x64,
+0x2E,0x47,0xFF,0xC3,0x84,0x6A,0xFE,0xE4,0xE0,0x60,0xE8,0x19,0x3C,0x1B,0xFE,0xC7,
+0x3E,0x17,0xFD,0x57,0x3E,0x17,0xFD,0x65,0xC2,0x13,0x84,0xC0,0x46,0xB1,0x00,0x02,
+0x58,0xB5,0x80,0xB4,0x80,0xE6,0x46,0x91,0x00,0x01,0x58,0x94,0x8E,0xB0,0x46,0xA1,
+0x00,0x02,0x58,0xA5,0x01,0x44,0x81,0x8B,0x48,0x00,0x00,0x5F,0xCA,0x06,0x84,0x00,
+0xEA,0x64,0x3E,0x07,0xFD,0x57,0xEA,0xF8,0xEA,0x96,0xC0,0xE8,0xEA,0x6A,0x96,0x04,
+0xC0,0xE5,0x84,0x00,0x3E,0x07,0xFD,0x68,0x48,0x00,0x00,0x9E,0x40,0x24,0x84,0x20,
+0xA7,0x11,0x38,0x34,0x85,0x00,0x80,0x44,0x42,0x21,0xC0,0x73,0x41,0x15,0x08,0x20,
+0x23,0x18,0x94,0xB2,0x5B,0x10,0xFE,0x4C,0x8C,0x21,0x96,0x48,0xE2,0x25,0xE9,0xEF,
+0x4E,0x02,0x00,0x74,0x46,0x01,0x00,0x01,0x10,0x70,0x0F,0xF2,0x46,0x01,0x00,0x01,
+0x10,0x60,0x0F,0xF3,0x3E,0x77,0xFE,0x64,0x3E,0x67,0xFE,0x65,0x49,0xFF,0xFC,0xA0,
+0x2E,0x17,0xFD,0x36,0xEB,0x64,0x04,0x00,0x00,0x08,0xE2,0x20,0xE8,0x06,0x84,0x01,
+0x3E,0x07,0xFD,0x57,0x84,0x00,0xEA,0x64,0x2E,0x07,0xFF,0xA2,0x96,0x04,0xC8,0x31,
+0xB8,0x00,0xC0,0x4E,0x9E,0x41,0x84,0x4C,0x80,0x6B,0x42,0x30,0x88,0x73,0x46,0x11,
+0x00,0x02,0xA0,0xDA,0x04,0x10,0x80,0x50,0xE2,0x61,0xE8,0x42,0x96,0x00,0x81,0xC2,
+0x4E,0x03,0x00,0x2A,0xB8,0x00,0xE6,0x0B,0xE8,0x04,0x9C,0x01,0x3C,0x0F,0xFF,0x87,
+0xB8,0x0E,0x8C,0x01,0xB8,0x8E,0x84,0x0B,0x49,0xFF,0xFC,0x4C,0x46,0x01,0x00,0x05,
+0x02,0x50,0x02,0xD4,0x84,0x00,0x80,0x20,0xFB,0x96,0xD5,0xB9,0x40,0x25,0x08,0x20,
+0x22,0x21,0x11,0xBA,0xE0,0x02,0xE8,0xB1,0x96,0x11,0x80,0xC4,0x80,0xE3,0xD5,0xAD,
+0x2E,0x07,0xFD,0x57,0xC0,0xCE,0xEA,0x45,0x96,0x00,0xC8,0xCB,0xB8,0x80,0x84,0x01,
+0xEA,0xF8,0xD5,0x31,0x50,0xD0,0x7F,0xFF,0x80,0x2C,0x42,0x16,0xB8,0x73,0xA0,0x8A,
+0x46,0x11,0x00,0x02,0x04,0x10,0x80,0x50,0xE2,0x41,0xE8,0xCD,0x80,0x2D,0xEA,0xFE,
+0x80,0x0D,0x44,0x10,0x00,0x0B,0xEA,0xFE,0x54,0x06,0x80,0xFF,0xD5,0xC2,0x84,0x2B,
+0x49,0xFF,0xFB,0xE0,0x48,0xFF,0xFF,0xC0,0x3C,0x2D,0xFF,0x87,0x2E,0x37,0xFD,0x49,
+0x46,0x41,0x00,0x01,0x58,0x42,0x0F,0xF4,0x80,0x20,0xE2,0x22,0xE8,0x0A,0x38,0x52,
+0x06,0x02,0xE2,0x65,0xE8,0x03,0x8C,0x01,0x96,0x00,0x8C,0x21,0x96,0x48,0xD5,0xF6,
+0x3E,0x07,0xFD,0x4F,0xEC,0x04,0x3A,0x6F,0xBA,0x84,0xDD,0x9E,0xFC,0x60,0x51,0xFF,
+0xFB,0xA0,0x3D,0x3D,0xFF,0x87,0x4F,0x32,0x02,0xEB,0x46,0x37,0xFF,0xFF,0x84,0x20,
+0xB1,0x50,0xB1,0xDC,0xB1,0xA8,0x51,0x1F,0x80,0xD0,0x51,0x2F,0x81,0x00,0x50,0x2F,
+0x81,0x30,0x50,0xBF,0x81,0x60,0x50,0x31,0x8F,0xFF,0x84,0x00,0xB1,0x04,0x38,0x02,
+0x06,0x0A,0x50,0x4F,0x81,0x90,0x38,0x02,0x06,0x0A,0x50,0x9F,0x82,0x20,0xEA,0xC6,
+0x42,0x90,0x90,0x73,0x38,0x02,0x86,0x0A,0x38,0x03,0x86,0x0A,0x38,0x03,0x06,0x0A,
+0x38,0x08,0x86,0x0A,0x38,0x09,0x06,0x0A,0x38,0x01,0x06,0x0A,0x38,0x05,0x86,0x0A,
+0x80,0x89,0x38,0x32,0x02,0x0A,0x8C,0x01,0x5A,0x08,0x0C,0xFD,0x8C,0x21,0x5A,0x18,
+0x0C,0xDE,0x3C,0x9D,0xFF,0x91,0x84,0x80,0xE3,0x33,0x80,0x13,0x47,0x97,0xFF,0xFF,
+0x40,0x04,0xBC,0x1A,0x80,0x64,0x46,0xC1,0x00,0x01,0x58,0xC6,0x0D,0x08,0x45,0xE0,
+0xFF,0xFF,0x51,0x9C,0x8F,0xFF,0x46,0xD1,0x00,0x01,0x58,0xD6,0x8D,0x98,0x40,0x99,
+0xA4,0x06,0x47,0x51,0x00,0x01,0x59,0x5A,0x8C,0x0C,0x47,0x61,0x00,0x01,0x59,0x6B,
+0x0C,0x3C,0x38,0xE6,0x13,0x02,0x94,0x63,0x4C,0xEF,0x00,0x41,0x50,0xAF,0x82,0x20,
+0x40,0xA5,0x0C,0x40,0x40,0x80,0xB0,0x00,0x41,0x42,0x08,0x08,0x86,0x00,0xE1,0x80,
+0xE8,0x31,0xE3,0x93,0xE8,0x29,0x38,0x16,0xC3,0x02,0x04,0xF4,0x00,0x01,0x41,0x80,
+0xB8,0x01,0x40,0x16,0xC0,0x60,0xA0,0x49,0x40,0xF0,0xBC,0x01,0x43,0x77,0xBC,0x24,
+0x2E,0x17,0xFD,0x27,0x43,0x7C,0x60,0x73,0x15,0x75,0x00,0x00,0xC9,0x17,0x4E,0x92,
+0x00,0x16,0x38,0x1A,0xD0,0x02,0x43,0x8C,0x04,0x24,0x38,0x1B,0x50,0x02,0x42,0x17,
+0x84,0x24,0xE0,0x38,0xE8,0x04,0x40,0x1C,0x04,0x01,0xD5,0x02,0x8A,0x38,0x94,0x4D,
+0x88,0x37,0xB6,0x2A,0xD5,0x03,0x15,0x95,0x00,0x00,0x8D,0x81,0x50,0xA5,0x00,0x30,
+0xD5,0xCF,0xEB,0x10,0x38,0x40,0x8E,0x0A,0x8C,0x61,0x8C,0x81,0x5A,0x48,0x0C,0xBB,
+0x46,0x47,0xFF,0xFF,0x45,0x30,0x00,0x30,0x50,0x42,0x0F,0xFF,0xE0,0x60,0xE8,0x10,
+0x50,0x1F,0x82,0x20,0x41,0x00,0x8C,0x40,0x84,0x20,0xE0,0x20,0xE8,0x07,0x42,0x90,
+0xCC,0x24,0x8C,0x21,0x38,0x48,0x24,0x0A,0xD5,0xF9,0x8C,0x61,0xD5,0xF0,0x84,0x20,
+0x46,0x37,0xFF,0xFF,0x84,0x9F,0x82,0x01,0x50,0x31,0x8F,0xFF,0xE0,0x20,0xE8,0x0B,
+0x38,0x42,0x86,0x0A,0x38,0x43,0x86,0x0A,0x39,0x09,0x06,0x0A,0x38,0x31,0x06,0x0A,
+0x8C,0x21,0xD5,0xF5,0x51,0x0F,0x82,0x20,0x80,0x30,0x86,0x60,0x44,0xA0,0x00,0x30,
+0xE1,0xE0,0xE8,0x1D,0xB4,0x81,0x84,0x61,0xE0,0x60,0xE8,0x09,0x42,0x91,0xA8,0x24,
+0x8C,0x61,0x38,0x90,0xA4,0x02,0x42,0x42,0x24,0x01,0xD5,0xF7,0xC4,0x0D,0x84,0x60,
+0xE0,0x60,0xE8,0x0A,0x42,0xC1,0xA8,0x24,0x8C,0x61,0x38,0x90,0xB0,0x02,0x8B,0x24,
+0x38,0x90,0xB0,0x0A,0xD5,0xF6,0x8D,0xE1,0x8C,0x24,0xD5,0xE3,0x85,0x80,0x80,0x2C,
+0x85,0x5F,0xE0,0x20,0xE8,0x2B,0xB5,0xF0,0x84,0x61,0xE0,0x60,0xE8,0x07,0x38,0x98,
+0x0E,0x02,0x8C,0x61,0x43,0x39,0xA4,0x01,0xD5,0xF9,0x39,0x38,0x86,0x0A,0x84,0x60,
+0xE0,0x60,0xE8,0x11,0x38,0x98,0x0E,0x02,0x4D,0x34,0xC0,0x0C,0x38,0x92,0x8E,0x02,
+0x4E,0x94,0x00,0x08,0xB1,0x04,0x38,0x32,0x06,0x0A,0x38,0x12,0x8E,0x0A,0xD5,0x0A,
+0x8C,0x61,0xD5,0xEF,0xB0,0xC4,0x38,0x13,0x32,0x0A,0x38,0xA1,0x86,0x0A,0x50,0xC6,
+0x00,0x01,0x8C,0x21,0x51,0x08,0x00,0x30,0xD5,0xD5,0x82,0xEC,0x4E,0xC3,0x00,0x0C,
+0x84,0x00,0x50,0xDF,0x81,0xC0,0x46,0x31,0x00,0x01,0x58,0x31,0x8D,0x98,0xEA,0xC7,
+0x48,0x00,0x00,0xAC,0x47,0x37,0xFF,0xFF,0x51,0x39,0x8F,0xFF,0x80,0x6C,0x85,0x40,
+0x44,0xC0,0x00,0x30,0x81,0xB3,0x85,0x1F,0x86,0x80,0x40,0xFA,0x0C,0x07,0xE8,0x2D,
+0x39,0x03,0x52,0x02,0x51,0x5F,0x82,0x20,0x39,0x68,0xC2,0x02,0x43,0x58,0x30,0x73,
+0x84,0x20,0xE0,0x20,0xE8,0x1F,0xEB,0x35,0xE8,0x1B,0x38,0x9A,0x86,0x02,0x40,0xE4,
+0xD8,0x01,0x38,0x49,0x06,0x02,0x88,0x8E,0xE0,0x8F,0xE8,0x12,0xCC,0x0D,0x38,0xE2,
+0x86,0x02,0x4E,0xE5,0x00,0x59,0x38,0xE3,0x0E,0x0A,0x38,0x41,0x06,0x0A,0x39,0x03,
+0x86,0x0A,0x8C,0x61,0xD5,0x05,0x38,0x41,0x06,0x0A,0x39,0x05,0x86,0x0A,0x8C,0x21,
+0xD5,0xE1,0x51,0x4A,0x00,0x01,0xD5,0xD2,0x81,0xCD,0x84,0x20,0xE0,0x20,0xE8,0x07,
+0xEB,0x35,0xE8,0x03,0x42,0xE7,0x3C,0x01,0x8C,0x21,0xD5,0xF9,0x86,0x00,0xE1,0x83,
+0xE8,0x0A,0x38,0x93,0x42,0x02,0x8D,0x81,0x38,0x18,0xA6,0x02,0x88,0x2E,0x38,0x18,
+0xA6,0x0A,0xD5,0xF6,0x43,0x41,0xA8,0x00,0x84,0x20,0xE0,0x20,0xE8,0xB7,0xEB,0x35,
+0x50,0x90,0x80,0x01,0xE8,0x21,0x40,0xF7,0xB8,0x01,0x38,0xF1,0x06,0x0A,0xE9,0x21,
+0x38,0xF2,0x86,0x02,0x39,0x05,0x86,0x02,0x4E,0xF4,0x00,0x11,0x80,0x69,0xE0,0x60,
+0xE8,0x1A,0x38,0xF1,0x0E,0x02,0xE9,0x08,0x50,0x4F,0x81,0x00,0x38,0x92,0x0E,0x02,
+0x89,0x2E,0x38,0x92,0x0E,0x0A,0x8C,0x61,0xD5,0xF3,0x38,0xF3,0x0E,0x0A,0x39,0x03,
+0x86,0x0A,0x8C,0x61,0xD5,0x06,0x39,0x09,0x06,0x02,0x89,0x8E,0x39,0x09,0x06,0x0A,
+0x80,0x29,0xD5,0xD4,0xB0,0xC4,0x38,0x31,0xC2,0x02,0xB1,0x04,0x38,0x12,0x42,0x0A,
+0x39,0x02,0x86,0x0A,0x4E,0x35,0x00,0x06,0x39,0x03,0x8E,0x02,0x80,0x23,0xD5,0xF3,
+0x51,0x7B,0xFF,0xFF,0x4F,0x72,0xFF,0x66,0x84,0x20,0xE0,0x20,0xE8,0x07,0x38,0x83,
+0x86,0x0A,0x39,0x31,0x06,0x0A,0x8C,0x21,0xD5,0xF9,0x84,0x60,0x80,0x23,0xE0,0x20,
+0x4E,0xF2,0xFF,0x6C,0xB1,0x04,0x39,0x02,0x06,0x02,0x4F,0x04,0x00,0x05,0x38,0x13,
+0x0E,0x0A,0x8C,0x61,0x8C,0x21,0xD5,0xF4,0x98,0x58,0xEA,0x6B,0x40,0x40,0x34,0x00,
+0x38,0x21,0x80,0x0A,0x8C,0x08,0x3B,0x02,0x44,0x20,0xA8,0x89,0x47,0x41,0x00,0x01,
+0x59,0x4A,0x0D,0x98,0x5A,0x08,0x60,0xF2,0x84,0xE0,0x47,0x61,0x00,0x01,0x59,0x6B,
+0x0D,0x08,0x46,0xE1,0x00,0x01,0x58,0xE7,0x0C,0x3C,0x47,0x51,0x00,0x01,0x59,0x5A,
+0x8C,0x6C,0x3D,0x3D,0xFF,0x87,0xE2,0xF3,0x4E,0xF2,0x00,0xFA,0x2E,0x57,0xFD,0x61,
+0xB0,0x44,0x38,0x20,0x9E,0x02,0x3C,0x1D,0xFF,0x91,0x2E,0x37,0xFD,0x56,0xE2,0x41,
+0x2E,0x00,0x01,0x32,0x4E,0xF2,0x00,0x77,0xEB,0x10,0x38,0x60,0x8A,0x02,0x46,0xC1,
+0x00,0x01,0x58,0xC6,0x0C,0xD8,0x38,0x16,0x1A,0x02,0xC9,0x03,0xFF,0x44,0xD5,0x03,
+0x44,0x50,0x00,0x64,0x46,0x21,0x00,0x01,0xEB,0x1B,0x38,0x21,0x1B,0x02,0x39,0x06,
+0x9F,0x02,0x40,0x83,0x8C,0x08,0x40,0x98,0x08,0x01,0x40,0x26,0xA0,0x00,0x05,0x11,
+0x00,0x01,0x46,0x21,0x00,0x01,0xEB,0x1B,0x40,0x21,0x18,0x60,0xA0,0x91,0x40,0xA8,
+0x88,0x01,0x46,0x21,0x00,0x01,0x58,0x21,0x0D,0x74,0x38,0x21,0x18,0x00,0x42,0xB5,
+0x28,0x24,0x42,0xB4,0xA4,0x73,0x5A,0x28,0x01,0x2B,0x2F,0xE0,0x01,0x2B,0x3C,0x23,
+0xFE,0xC9,0x84,0x80,0x41,0x21,0x04,0x08,0x3C,0x23,0xFE,0xC5,0x41,0x71,0x04,0x08,
+0xE0,0x9E,0xE8,0x1D,0x38,0x2A,0x93,0x02,0x41,0x82,0x0C,0x08,0xE3,0x82,0xE8,0x03,
+0x8A,0x50,0xD5,0x03,0x40,0x28,0x08,0x01,0xE2,0x52,0xE8,0x0F,0x46,0x21,0x00,0x01,
+0x58,0x21,0x0C,0x6C,0x88,0x58,0xA0,0x91,0xE3,0xA2,0xE8,0x03,0x8A,0x51,0xD5,0x03,
+0x40,0x28,0x88,0x01,0xE2,0x57,0xE9,0x4B,0x8C,0x81,0xD5,0xE3,0x84,0x41,0x96,0xDF,
+0x8C,0x67,0xFE,0x1C,0x88,0x25,0x85,0xE7,0x40,0x15,0x84,0x37,0x40,0xF0,0x3D,0xF6,
+0xE2,0x2F,0xE9,0x42,0x2E,0x07,0xFD,0x4E,0x2E,0x47,0xFD,0x60,0xEB,0x78,0x58,0x10,
+0x8C,0xCC,0x9D,0x43,0x84,0x7D,0x38,0x10,0x98,0x00,0x42,0x52,0x0C,0x73,0xE0,0x25,
+0xE9,0x30,0x84,0x00,0xEA,0xC7,0x46,0x31,0x00,0x01,0x58,0x31,0x8D,0x08,0x38,0x51,
+0x83,0x02,0x94,0x43,0xDA,0x1E,0x44,0x20,0xFF,0xFD,0x46,0x31,0x00,0x01,0x58,0x31,
+0x8C,0x0C,0x38,0x2B,0x03,0x0A,0x84,0x40,0x38,0x21,0x82,0x0A,0x40,0x36,0x9C,0x60,
+0x88,0x34,0x3B,0x01,0xC4,0x00,0xEA,0xEA,0xEB,0x78,0xEA,0x71,0x38,0x70,0x80,0x08,
+0xEB,0x78,0x58,0x10,0x8C,0xD8,0x38,0x27,0x02,0x0A,0x38,0x20,0x82,0x0A,0xD5,0x04,
+0x8C,0x01,0x5A,0x08,0x0C,0xDA,0x8C,0xE1,0x48,0xFF,0xFF,0x4D,0x84,0x42,0xD5,0xB8,
+0xE7,0xE3,0xE8,0xD0,0xC0,0xCF,0x96,0x30,0x15,0x5F,0x80,0x03,0x15,0x6F,0x80,0x02,
+0x15,0x4F,0x80,0x01,0xB6,0x5F,0x49,0xFF,0xE5,0x69,0xB4,0x5F,0x05,0x4F,0x80,0x01,
+0x05,0x6F,0x80,0x02,0x05,0x5F,0x80,0x03,0xC8,0xBD,0x3C,0x33,0xFE,0xC9,0x3C,0x13,
+0xFE,0xC5,0xFE,0x5C,0xFE,0x8C,0xE2,0x4B,0xE8,0x09,0xEB,0x78,0x58,0x10,0x8C,0x0C,
+0x38,0x07,0x1A,0x0A,0x38,0x00,0x9A,0x0A,0xD5,0xD7,0xB0,0x04,0x38,0x00,0x1E,0x02,
+0xEB,0x10,0x38,0x00,0x82,0x02,0x89,0x0D,0x40,0x0A,0x00,0x60,0x3B,0x04,0x44,0x00,
+0x3B,0x00,0x44,0x20,0x46,0x01,0x00,0x01,0x58,0x00,0x0D,0x68,0x38,0x70,0x18,0x08,
+0x2E,0x07,0xFD,0x27,0xC8,0xC1,0x46,0x01,0x00,0x01,0x58,0x00,0x0C,0x0C,0x38,0x97,
+0x1A,0x0A,0x38,0xA0,0x1A,0x0A,0x38,0xB6,0x1A,0x0A,0xD5,0xB6,0x51,0xFF,0x84,0x60,
+0xFC,0xE0,0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0xB9,0x00,0x2E,0x07,0xFF,0xD8,0x5A,0x18,
+0x07,0x03,0x92,0x01,0x3E,0x07,0xFD,0x24,0xB8,0x11,0xC0,0x05,0x2E,0x07,0xFD,0x20,
+0x5A,0x08,0x01,0x37,0x2E,0x37,0xFD,0x24,0x2E,0x27,0xFF,0xDB,0xB8,0x17,0xFE,0x9C,
+0xE2,0x02,0xE8,0x07,0xEA,0xF5,0x42,0x10,0x8C,0x0B,0xC1,0x2C,0x8C,0x01,0xD5,0x29,
+0x84,0x01,0xEB,0x3C,0x84,0x00,0xEB,0x0C,0x84,0x00,0xB8,0x8E,0x84,0x01,0xB8,0x9C,
+0x84,0x08,0x5A,0x10,0x07,0x09,0x5A,0x18,0x02,0x0A,0x2E,0x07,0xFF,0xA7,0x5A,0x08,
+0x03,0x06,0x84,0x06,0x2E,0x17,0xFD,0x31,0xEA,0x34,0x84,0x00,0xEB,0x25,0x2E,0x07,
+0xFD,0x31,0xC0,0x03,0x84,0x00,0xEB,0x2E,0xB8,0x00,0x5A,0x00,0x06,0x04,0x5A,0x08,
+0x08,0x0A,0x46,0x01,0x00,0x01,0x58,0x00,0x04,0x74,0xB8,0x9A,0xD5,0x03,0x84,0x00,
+0xB8,0x97,0xFC,0x80,0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0xB9,0x11,0xB8,0x00,0xC9,0x0F,
+0x5A,0x08,0x08,0x08,0x46,0x11,0x00,0x05,0x02,0x10,0x82,0xD4,0xC9,0x08,0xD5,0x03,
+0x5A,0x00,0x06,0xFA,0x2E,0x17,0xFD,0x20,0x5A,0x18,0x01,0x32,0x84,0x20,0x3E,0x17,
+0xFD,0x3D,0x84,0x20,0xB9,0x97,0x5A,0x00,0x08,0x04,0x5A,0x08,0x06,0x20,0xB9,0x8E,
+0x5A,0x08,0x08,0x04,0x84,0x07,0xD5,0x04,0x5A,0x08,0x06,0x06,0x84,0x02,0x2E,0x17,
+0xFD,0x20,0xEA,0x34,0x84,0x00,0xEB,0x25,0xB8,0x00,0x5A,0x08,0x07,0x05,0xEB,0x64,
+0xEB,0x47,0xD5,0x05,0xEA,0x2B,0xC8,0x05,0xEB,0x64,0xEA,0xB6,0xB8,0x9A,0xD5,0x1E,
+0x5A,0x08,0x01,0x1D,0xEB,0x64,0xDD,0x5D,0xD5,0xFA,0x8E,0x03,0xE6,0x03,0xE8,0x16,
+0xEA,0x43,0xB4,0x01,0x58,0x00,0x04,0x00,0xB6,0x01,0xD5,0x10,0x2E,0x27,0xFF,0xDA,
+0xFA,0x2E,0xFE,0x54,0x2E,0x27,0xFF,0xDB,0xB8,0x0E,0xFE,0x54,0xE2,0x01,0xE8,0x04,
+0x8C,0x01,0xB8,0x8E,0xD5,0x03,0x84,0x01,0xEB,0x0C,0xFC,0x80,0xDD,0x4B,0x5A,0x08,
+0x08,0x05,0x2E,0x27,0xFF,0xAE,0xD5,0x06,0x84,0x40,0x5A,0x08,0x06,0x04,0x2E,0x27,
+0xFF,0xB9,0x84,0x20,0x80,0x01,0x46,0x31,0x00,0x01,0x58,0x31,0x82,0xC4,0x38,0xF1,
+0x85,0x11,0xE0,0x4F,0xE8,0x06,0x5C,0xF0,0x00,0x95,0xE8,0x03,0x8C,0x01,0x96,0x01,
+0x8C,0x21,0x5A,0x18,0xD8,0xF6,0x46,0x11,0x00,0x05,0x12,0x00,0x82,0xD4,0xDD,0x9E,
+0xFC,0x20,0xDD,0x4B,0x5A,0x08,0x08,0x09,0x2E,0x17,0xFF,0xAE,0x94,0x49,0x96,0x4B,
+0x2E,0x57,0xFF,0xE5,0xD5,0x0C,0x5A,0x08,0x06,0x09,0x2E,0x17,0xFF,0xB9,0x94,0x49,
+0x96,0x4B,0x2E,0x57,0xFF,0xE1,0xD5,0x03,0x84,0x20,0x80,0xA1,0x84,0x40,0x3C,0x6D,
+0xFF,0x90,0x80,0x82,0x46,0x71,0x00,0x02,0x58,0x73,0x81,0x44,0x82,0x02,0x47,0x11,
+0x00,0x01,0x59,0x18,0x82,0xC4,0x98,0x17,0x02,0x00,0x07,0x9A,0x38,0x33,0x08,0x01,
+0x9A,0xC3,0x96,0xD9,0x96,0x1B,0x4E,0x05,0x00,0x07,0xE0,0xA0,0x84,0x00,0xE8,0x07,
+0x9A,0x1D,0xD5,0x04,0x88,0x05,0x42,0x00,0x40,0x01,0x96,0x03,0x38,0x08,0x88,0x09,
+0x88,0x01,0x4E,0x04,0x00,0x04,0x8C,0x81,0x97,0x21,0x8C,0x42,0x5A,0x29,0xB0,0xE5,
+0x2E,0x00,0x00,0x15,0xE2,0x04,0xE8,0x0A,0x46,0x01,0x00,0x01,0x00,0x00,0x02,0xC0,
+0xEB,0x78,0xEA,0x37,0xEA,0xEC,0x84,0x01,0xEA,0x76,0xFC,0xA0,0xEB,0x43,0xDD,0x9E,
+0xEB,0x3B,0xC0,0x04,0x84,0x00,0x3C,0x0F,0xFF,0x92,0xDD,0x9E,0xFC,0x40,0x3F,0xCF,
+0xFD,0xF4,0x80,0xE1,0x84,0x20,0x80,0xC0,0x46,0x41,0x00,0x01,0x58,0x42,0x09,0x48,
+0x80,0xA1,0x44,0x30,0xFF,0xFF,0x50,0x00,0x80,0x08,0x88,0x04,0x84,0x40,0x8C,0x41,
+0xB6,0xA0,0x14,0x30,0x7F,0xFE,0x14,0x30,0x7F,0xFF,0x8C,0x0C,0x5A,0x28,0x04,0xF9,
+0x50,0x10,0x80,0x30,0x5A,0x1A,0x40,0xF1,0x84,0x00,0x46,0x21,0x00,0x01,0xEB,0x1B,
+0x44,0x10,0xFF,0xFF,0x38,0x11,0x00,0x0A,0x98,0xC2,0x8C,0x08,0xA8,0x59,0x5A,0x08,
+0x60,0xFB,0x46,0x01,0x00,0x01,0x58,0x00,0x0C,0x3C,0x84,0x20,0xEA,0xED,0xDD,0x42,
+0x46,0x01,0x00,0x01,0x58,0x00,0x0C,0x0C,0x84,0x20,0xEA,0xED,0xDD,0x42,0xC6,0x04,
+0x2E,0x00,0x00,0x0B,0xD5,0x07,0xC7,0x04,0x2E,0x00,0x00,0x0D,0xD5,0x03,0x2E,0x00,
+0x00,0x0F,0x8C,0x01,0xEA,0xF9,0x2E,0x07,0xFD,0x64,0x5A,0x08,0x01,0x04,0x84,0x02,
+0xEA,0xF9,0xEA,0xCF,0x85,0x20,0xEB,0x15,0x3E,0x97,0xFD,0x57,0x3E,0x97,0xFD,0x65,
+0x3E,0x97,0xFD,0x5E,0x84,0x40,0x3E,0x97,0xFD,0x27,0xBA,0x8A,0xBA,0x98,0xEB,0x4E,
+0x12,0x20,0x02,0xD4,0xBA,0x94,0xBA,0x8D,0xBA,0x96,0x3E,0x27,0xFD,0x50,0xBA,0x92,
+0x3E,0x97,0xFD,0x5B,0xBA,0x90,0xEA,0xDE,0x92,0x27,0x8C,0x21,0x96,0x48,0x3E,0x17,
+0xFD,0x6B,0xEA,0xB8,0x92,0x07,0x8C,0x01,0x96,0x00,0x3E,0x07,0xFD,0x5C,0x2E,0x27,
+0xFF,0xBE,0x2E,0x40,0x01,0x32,0x3E,0x27,0xFD,0x56,0x54,0x31,0x00,0x0F,0x42,0x51,
+0x90,0x24,0x92,0x44,0x40,0x12,0x84,0x36,0x3C,0x1B,0xFE,0xC6,0x2E,0x10,0x01,0x33,
+0xFF,0x14,0xFE,0xCC,0xFE,0x8C,0x40,0x01,0x80,0x16,0x3C,0x0B,0xFE,0xCE,0x3C,0x4B,
+0xFE,0xC9,0x3C,0x2B,0xFE,0xC5,0x2E,0x07,0xFF,0xBD,0x54,0x10,0x00,0x0F,0x3E,0x17,
+0xFD,0x4E,0x92,0x04,0x3E,0x07,0xFD,0x61,0x2E,0x07,0xFF,0xA5,0x92,0x04,0x3E,0x07,
+0xFD,0x2B,0x84,0x02,0xB8,0x85,0x2E,0x07,0xFF,0xA8,0xDD,0x49,0x3C,0x0B,0xFE,0xC8,
+0x2E,0x07,0xFF,0xB2,0xDD,0x49,0x3C,0x0B,0xFE,0xCC,0x2E,0x07,0xFF,0xB3,0xDD,0x49,
+0x3C,0x0B,0xFE,0xCD,0x3E,0x97,0xFD,0x41,0x3E,0x97,0xFD,0x66,0x3E,0x97,0xFD,0x42,
+0x2E,0x07,0xFF,0xC6,0xEA,0x98,0x2E,0x07,0xFF,0xC7,0xEA,0xAD,0x2E,0x07,0xFF,0xC9,
+0x40,0x10,0x10,0x09,0x3E,0x17,0xFD,0x52,0x96,0x1F,0x84,0x2A,0xFE,0x0C,0x3E,0x07,
+0xFD,0x3A,0x2E,0x07,0xFF,0xD3,0x3C,0x0B,0xFE,0xD1,0xC7,0x0B,0x2E,0x07,0xFF,0xCE,
+0x54,0x10,0x00,0x0F,0x3E,0x17,0xFD,0x38,0x92,0x04,0x3E,0x07,0xFD,0x2C,0xD5,0x13,
+0x2E,0x07,0xFF,0xCC,0x54,0x10,0x00,0x0F,0x3E,0x17,0xFD,0x38,0x92,0x04,0x3E,0x07,
+0xFD,0x2C,0x2E,0x07,0xFF,0xCD,0x54,0x10,0x00,0x0F,0x3E,0x17,0xFD,0x21,0x92,0x04,
+0x3E,0x07,0xFD,0x39,0x49,0xFF,0xEF,0x2F,0x46,0x01,0x00,0x01,0x58,0x00,0x0B,0x94,
+0x84,0x3F,0x84,0x4C,0xDD,0x42,0x84,0x00,0x3E,0x07,0xFD,0x4D,0x2E,0x17,0xFF,0xDE,
+0x84,0x00,0x40,0x00,0x04,0x06,0x3E,0x07,0xFD,0x3B,0x2E,0x27,0xFF,0xD6,0x3E,0x27,
+0xFD,0x28,0x2E,0x37,0xFF,0xD7,0xFA,0x24,0x42,0x21,0x84,0x73,0x96,0x90,0x3E,0x27,
+0xFD,0x47,0xC0,0x02,0x84,0x44,0x3E,0x27,0xFD,0x2F,0x2E,0x07,0xFF,0xD8,0x84,0x40,
+0x3E,0x07,0xFD,0x24,0x3E,0x27,0xFD,0x46,0x3E,0x27,0xFD,0x68,0x3E,0x27,0xFD,0x55,
+0x3E,0x27,0xFD,0x1E,0x3E,0x27,0xFD,0x3E,0x3E,0x27,0xFD,0x25,0x84,0x00,0x3C,0x0B,
+0xFE,0xCB,0x3E,0x07,0xFD,0x4F,0x2E,0x07,0xFF,0xC8,0x3E,0x07,0xFD,0x49,0x2E,0x00,
+0x01,0x00,0x54,0x10,0x00,0x0F,0x3E,0x17,0xFD,0x54,0x92,0x04,0x3E,0x07,0xFD,0x6A,
+0x2E,0x00,0x01,0x01,0x54,0x10,0x00,0x0F,0x3E,0x17,0xFD,0x5A,0x92,0x04,0x3E,0x07,
+0xFD,0x1D,0x3E,0x27,0xFD,0x6E,0xCE,0x03,0x3E,0x27,0xFD,0x79,0x3E,0x27,0xFD,0x72,
+0x3E,0x27,0xFD,0x77,0x3E,0x27,0xFD,0x6F,0x3E,0x27,0xFD,0x71,0x3E,0x27,0xFD,0x73,
+0x3E,0x27,0xFD,0x76,0x84,0x00,0xB8,0x9F,0xB8,0x9E,0x2E,0x4F,0xFF,0xA3,0x4E,0x45,
+0x00,0x03,0x84,0x02,0x84,0x40,0x3E,0x07,0xFD,0x5F,0x86,0x00,0x3E,0x27,0xFD,0x74,
+0x84,0xA0,0x3D,0x0B,0xFE,0xE6,0xBD,0x9D,0x2E,0x30,0x00,0x6A,0xEA,0x2A,0xFE,0xCC,
+0x3C,0x3B,0xFE,0xE5,0x2E,0x30,0x00,0x6B,0xFE,0xCC,0x3C,0x3B,0xFE,0xE8,0x2E,0x30,
+0x00,0x6C,0xFE,0xCC,0x3C,0x3B,0xFE,0xE2,0x2E,0x30,0x00,0x6D,0xFE,0x5C,0x3C,0x1B,
+0xFE,0xE7,0x2E,0x10,0x00,0x6E,0x3C,0x1B,0xFE,0xE3,0x2E,0x10,0x00,0x6F,0x3E,0x17,
+0xFD,0x75,0x2E,0x10,0x00,0x71,0x3E,0x17,0xFD,0x78,0x3F,0x07,0xFD,0x70,0x3E,0x27,
+0xFD,0x22,0xBD,0x89,0x3E,0x27,0xFD,0x69,0x3E,0x27,0xFD,0x6C,0x3E,0x27,0xFD,0x29,
+0x2E,0x10,0x00,0x62,0x40,0x30,0x90,0x09,0x3E,0x37,0xFD,0x32,0x96,0x5F,0x3E,0x17,
+0xFD,0x53,0xCE,0x10,0x3E,0x27,0xFD,0x3D,0xEB,0x78,0x10,0x20,0x82,0xC0,0xEB,0x78,
+0x10,0x20,0x82,0xC1,0x84,0x21,0x3E,0x17,0xFD,0x30,0x3E,0x27,0xFD,0x59,0xBE,0x80,
+0xBE,0x86,0xC7,0x04,0xEB,0x64,0xEB,0x47,0xD5,0x12,0x4E,0x44,0x00,0x0C,0xC8,0x08,
+0xEA,0x2B,0xE6,0x01,0x3E,0xF7,0xFD,0x79,0x84,0x01,0x3E,0x07,0xFD,0x5F,0xEA,0x2B,
+0xC8,0x04,0xEB,0x64,0xEA,0xB6,0xD5,0x03,0xEB,0x64,0xDD,0x5D,0xB8,0x93,0x84,0xE0,
+0x44,0x20,0x05,0x10,0x3E,0x77,0xFD,0x40,0x84,0x20,0xEB,0x4E,0xEA,0x62,0xDD,0x42,
+0x3E,0x77,0xFD,0x3D,0x84,0x01,0xEB,0x2E,0x84,0xC0,0x3E,0x77,0xFD,0x20,0xBE,0x87,
+0x49,0xFF,0xDC,0x28,0xEB,0x4E,0x12,0x60,0x02,0xD6,0x3C,0x6B,0xFE,0xC7,0x3E,0x67,
+0xFD,0x5D,0x3C,0x6B,0xFE,0xC3,0x46,0x01,0x00,0x05,0x10,0x60,0x06,0xD6,0x46,0x01,
+0x00,0x05,0x12,0x60,0x03,0x6A,0x46,0x01,0x00,0x05,0x10,0x60,0x06,0x42,0x46,0x01,
+0x00,0x05,0x12,0x60,0x03,0x20,0x46,0x31,0x00,0x05,0x58,0x31,0x86,0x44,0xEA,0x29,
+0x46,0x21,0x00,0x05,0x58,0x21,0x05,0xB0,0x98,0x73,0x38,0x01,0x98,0x0A,0x38,0x01,
+0x18,0x0A,0xA8,0x09,0x10,0x70,0x80,0x08,0x98,0x72,0x8C,0xCC,0xA8,0x09,0x10,0x70,
+0x80,0x08,0x5A,0x68,0x90,0xF3,0xFC,0xC0,0x2E,0x27,0xFD,0x64,0x5A,0x18,0x02,0x05,
+0x3E,0x27,0xFD,0x45,0xD5,0x0E,0x8E,0x07,0xE6,0x02,0xE8,0x05,0x2E,0x00,0x00,0x0C,
+0xEA,0xDA,0xD5,0x05,0x2E,0x10,0x00,0x0E,0x40,0x01,0x04,0x40,0x3E,0x07,0xFD,0x45,
+0x84,0x00,0x3E,0x07,0xFD,0x2E,0xEA,0xAA,0xEA,0xC3,0xDD,0x9E,0xFC,0x0B,0x3F,0xCF,
+0xFD,0xD8,0x2E,0x07,0xFD,0x4B,0xC8,0x12,0xB8,0x0C,0x5A,0x00,0x02,0x09,0x2E,0x07,
+0xFF,0xD0,0xDD,0x49,0xEA,0x3D,0x2E,0x07,0xFF,0xD1,0xD5,0x0E,0x2E,0x07,0xFF,0xD4,
+0xDD,0x49,0xEA,0x3D,0x2E,0x07,0xFF,0xD5,0xD5,0x07,0xEA,0x9D,0x96,0x1F,0xDD,0x49,
+0xEA,0x3D,0xEA,0x9D,0x92,0x04,0xDD,0x49,0xEA,0x65,0xEA,0x45,0xC0,0x09,0x2E,0x00,
+0x00,0x63,0xDD,0x49,0xEA,0x3D,0x2E,0x00,0x00,0x63,0xDD,0x49,0xEA,0x65,0xEA,0x49,
+0xC0,0x07,0xEA,0xE3,0x94,0x01,0xEA,0x3D,0xEA,0xC9,0x94,0x01,0xEA,0x65,0xDD,0x59,
+0x5A,0x08,0x01,0x04,0x49,0x00,0x03,0x31,0xEB,0x11,0xEB,0x2A,0xDD,0x4D,0x42,0x00,
+0x18,0x0B,0xC0,0x06,0xDD,0x59,0x5A,0x08,0x01,0x04,0x49,0x00,0x04,0x64,0xB8,0x1B,
+0xB9,0x11,0xE2,0x01,0xE8,0x0C,0xC0,0x0B,0xEA,0x45,0xC0,0x09,0xEA,0xE3,0x94,0x01,
+0xEA,0x3D,0xEA,0xC9,0x94,0x01,0xEA,0x65,0xEB,0x11,0xEB,0x2A,0x84,0x00,0x3E,0x07,
+0xFD,0x58,0xDD,0x4D,0x42,0x00,0x18,0x0B,0xBA,0x11,0xC0,0x33,0xB8,0x14,0x5A,0x08,
+0x01,0x31,0xE6,0x42,0xE9,0x2E,0x46,0x01,0x00,0x01,0x00,0x10,0x0F,0xDC,0x46,0x01,
+0x00,0x01,0x00,0x00,0x0F,0xDE,0xE2,0x01,0xE8,0x03,0x9A,0x08,0xD5,0x02,0x8A,0x01,
+0x2E,0x37,0xFF,0xFA,0xE0,0x03,0xE8,0x1D,0x46,0x01,0x00,0x01,0x00,0x10,0x0F,0xDD,
+0x46,0x01,0x00,0x01,0x00,0x00,0x0F,0xDF,0xE2,0x01,0xE8,0x03,0x9A,0x08,0xD5,0x02,
+0x8A,0x01,0xE0,0x03,0xE8,0x0E,0xEB,0x64,0x04,0x00,0x00,0x2F,0x46,0x11,0x00,0x02,
+0x04,0x10,0x80,0x32,0x92,0x01,0xE2,0x20,0xE8,0x04,0x84,0x01,0x3E,0x07,0xFD,0x58,
+0xB8,0x1B,0xE2,0x40,0xE8,0x12,0x2E,0x07,0xFD,0x4B,0xC0,0x0F,0xEA,0x45,0xC8,0x0D,
+0xEA,0xE6,0xC8,0x0B,0xEA,0x9D,0x96,0x1F,0xDD,0x49,0xEA,0x3D,0xEA,0x9D,0x92,0x04,
+0xDD,0x49,0xEA,0x65,0xEB,0x11,0xEB,0x2A,0xB8,0x11,0xC0,0x1E,0x46,0x11,0x00,0x01,
+0x00,0x10,0x8F,0xDC,0x46,0x01,0x00,0x01,0x8E,0x21,0x00,0x00,0x0F,0xDD,0xFA,0x54,
+0x42,0x00,0x88,0x73,0x46,0x11,0x00,0x02,0xEB,0x17,0x40,0x00,0x80,0x20,0x22,0xF0,
+0x0C,0xA9,0x2E,0x07,0xFF,0xAA,0x94,0x01,0xE0,0x0F,0xE8,0x06,0x84,0x00,0xEB,0x15,
+0xEA,0xFD,0xC1,0x11,0xD5,0x0E,0x3C,0x03,0xFE,0xC4,0x5C,0xF0,0x03,0xE8,0xE8,0x0B,
+0x8C,0x01,0xEB,0x15,0x3C,0x03,0xFE,0xC0,0x5C,0xF0,0x00,0xC8,0xE8,0x04,0x8C,0x01,
+0x3C,0x0B,0xFE,0xC0,0x46,0x01,0x00,0x07,0xEA,0x63,0xEA,0x21,0xEA,0x20,0xD8,0x17,
+0x49,0xFF,0xE3,0x62,0x49,0xFF,0xE1,0xDD,0x49,0xFF,0xF9,0x12,0x49,0xFF,0xE7,0xEF,
+0x49,0xFF,0xE4,0xA5,0x49,0xFF,0xE5,0x57,0xDD,0x59,0x5A,0x08,0x01,0x10,0x46,0x01,
+0x00,0x01,0x58,0x00,0x09,0x48,0x49,0xFF,0xDE,0xD7,0xD5,0x08,0xDD,0x4D,0xEA,0xF0,
+0xC8,0xE8,0xDD,0x59,0x5A,0x08,0x01,0x30,0xD5,0xE4,0x46,0x01,0x00,0x05,0xEA,0x54,
+0x49,0xFF,0xE6,0x3E,0x46,0x01,0x00,0x05,0xEA,0x54,0x49,0xFF,0xE1,0x15,0xB8,0x00,
+0x5A,0x08,0x07,0x1F,0xB1,0x82,0x80,0x26,0x46,0x21,0x00,0x01,0xEB,0x36,0x46,0x01,
+0x00,0x05,0xEA,0x54,0x46,0x31,0x00,0x01,0x58,0x31,0x8D,0x68,0x49,0xFF,0xEB,0xC8,
+0xF0,0x81,0xF2,0x01,0x3A,0x03,0x04,0x00,0x49,0xFF,0xF3,0xC1,0x5A,0x00,0xFF,0x09,
+0x3E,0x07,0xFE,0x24,0x96,0x01,0x46,0x11,0x00,0x07,0x12,0x00,0x81,0xDB,0x84,0x00,
+0x3E,0x07,0xFD,0x27,0x46,0x01,0x00,0x05,0xEA,0x54,0xFC,0x8B,0x46,0x01,0x00,0x05,
+0x58,0x00,0x05,0xB0,0xDD,0x9E,0x46,0x11,0x00,0x05,0x58,0x10,0x85,0xB0,0x46,0x01,
+0x00,0x05,0xEA,0x54,0x3B,0x00,0x64,0x04,0xF8,0x01,0x3B,0x00,0xE4,0x24,0x3B,0x00,
+0x64,0x04,0x83,0xFF,0x3B,0x00,0xE4,0x24,0x3B,0x00,0x58,0x00,0x3B,0x00,0xD8,0x20,
+0xDD,0x9E,0x3C,0x0F,0xFF,0x8A,0xDD,0x9E,0x3C,0x13,0xFE,0xE4,0x3C,0x53,0xFE,0xE3,
+0xD9,0x07,0x84,0x00,0x3E,0x07,0xFD,0x6E,0x84,0x00,0xEA,0xCD,0xDD,0x9E,0xC8,0x06,
+0xEA,0x49,0xC0,0x04,0x8C,0x21,0x3C,0x1B,0xFE,0xE4,0xDD,0x9E,0xFC,0x00,0x84,0x01,
+0x3E,0x07,0xFD,0x72,0x3E,0x07,0xFD,0x74,0x84,0x00,0x3C,0x0B,0xFE,0xE6,0x84,0x21,
+0x3C,0x1F,0xFF,0x9A,0xEA,0xCD,0xFC,0x80,0xFC,0x00,0x3C,0x1D,0xFF,0x9A,0x5A,0x18,
+0x01,0x1F,0x2E,0x17,0xFD,0x72,0x5A,0x18,0x01,0x14,0x84,0x40,0x3E,0x27,0xFD,0x72,
+0x2E,0x37,0xFD,0x79,0xCB,0x04,0x3E,0x17,0xFD,0x79,0xD5,0x06,0x5A,0x38,0x01,0x09,
+0x3E,0x27,0xFD,0x79,0x84,0x20,0x49,0x00,0x06,0xA9,0x49,0x00,0x0A,0xEF,0x2E,0x07,
+0xFD,0x73,0x8C,0x01,0x3E,0x07,0xFD,0x73,0x84,0x02,0xD5,0x07,0x84,0x03,0x5A,0x10,
+0x02,0x05,0x5A,0x18,0x03,0x05,0x84,0x00,0x3C,0x0F,0xFF,0x9A,0xFC,0x80,0xFC,0x00,
+0x3C,0x1F,0xFF,0x90,0x84,0x20,0x3C,0x1F,0xFF,0x8F,0xDD,0x4F,0x46,0x01,0x00,0x05,
+0xEA,0x62,0xDD,0x42,0xFC,0x80,0xFC,0x00,0x3F,0xCF,0xFE,0x18,0xEB,0x23,0xC9,0x04,
+0x3C,0x63,0xFE,0xE5,0xD5,0x07,0x5A,0x18,0x01,0x05,0x3C,0x63,0xFE,0xE8,0xD5,0x02,
+0xEA,0xB5,0x84,0x40,0x80,0x02,0x46,0x41,0x00,0x05,0x58,0x42,0x06,0xD8,0x38,0x32,
+0x09,0x01,0x8C,0x41,0x88,0x03,0x5A,0x28,0xD8,0xFC,0x44,0x20,0x7F,0xFF,0x92,0x04,
+0xE2,0x40,0x40,0x01,0x3C,0x1B,0x2E,0x27,0xFD,0x77,0xCA,0x03,0xB8,0x96,0xD5,0x02,
+0xB8,0x95,0x2E,0x07,0xFD,0x76,0xE6,0x0A,0xE8,0x04,0x8C,0x01,0x3E,0x07,0xFD,0x76,
+0x2E,0x07,0xFD,0x76,0xE6,0x02,0x4E,0xF3,0x00,0x7C,0xC9,0x43,0x3C,0x23,0xFE,0xE2,
+0xB8,0x16,0xE2,0x40,0xE8,0x07,0x84,0x01,0x3E,0x07,0xFD,0x6E,0x3C,0x1B,0xFE,0xE4,
+0xD5,0x04,0xB8,0x01,0x49,0xFF,0xFF,0x6A,0xB8,0x15,0x88,0xC0,0xB8,0x16,0xE2,0xC0,
+0xE8,0x03,0xEA,0x49,0xC8,0x05,0xB8,0x00,0xEB,0x12,0x5A,0x08,0x01,0x12,0x2E,0x0F,
+0xFF,0xA3,0x4E,0x04,0x00,0x0E,0x46,0x01,0x00,0x07,0xEA,0x27,0xEA,0x48,0xEA,0x3F,
+0xD0,0x07,0x46,0x01,0x00,0x07,0xEA,0x27,0xEA,0x21,0xEA,0x20,0xD8,0x08,0x46,0x01,
+0x00,0x07,0xEA,0x27,0xEA,0x21,0xEA,0x20,0x4C,0x50,0x40,0x4B,0xEB,0x0A,0x46,0x01,
+0x00,0x02,0xEA,0xB6,0x50,0x10,0x05,0x10,0x49,0xFF,0xFF,0x8B,0xB8,0x00,0x5A,0x08,
+0x01,0x04,0x84,0x02,0xD5,0x04,0x5A,0x08,0x03,0x3C,0x84,0x00,0xB8,0x80,0xD5,0x38,
+0x5A,0x18,0x01,0x37,0x3C,0x23,0xFE,0xE7,0xB8,0x15,0xE2,0x40,0xE8,0x06,0x3E,0x17,
+0xFD,0x6E,0x84,0x00,0xEA,0xCD,0xD5,0x04,0xB8,0x01,0x49,0xFF,0xFF,0x27,0xB8,0x16,
+0x88,0xC0,0xB8,0x15,0xE2,0xC0,0xE8,0x03,0xEA,0x49,0xC8,0x05,0xB8,0x00,0xEB,0x12,
+0x5A,0x08,0x01,0x12,0x2E,0x0F,0xFF,0xA3,0x4E,0x04,0x00,0x0E,0x46,0x01,0x00,0x07,
+0xEA,0x27,0xEA,0x48,0xEA,0x3F,0xD0,0x07,0x46,0x01,0x00,0x07,0xEA,0x27,0xEA,0x21,
+0xEA,0x20,0xD8,0x07,0x46,0x01,0x00,0x07,0xEA,0x27,0xEA,0x48,0xEA,0x3F,0xD8,0x08,
+0xEB,0x0A,0x46,0x01,0x00,0x02,0xDD,0x5D,0x50,0x10,0x7A,0xF0,0xD5,0xBE,0xB8,0x04,
+0xC8,0x2F,0xEA,0x2B,0x5A,0x08,0x01,0x2D,0x2E,0x17,0xFD,0x3D,0xC9,0x29,0x3C,0x03,
+0xFE,0xE2,0xBA,0x16,0xE2,0x40,0xE8,0x24,0x3C,0x03,0xFE,0xE7,0xBA,0x15,0xE2,0x40,
+0xE8,0x1F,0x46,0x01,0x00,0x07,0xEA,0x27,0xEA,0x21,0xEA,0x20,0xD0,0x19,0x46,0x01,
+0x00,0x07,0xEA,0x27,0xEA,0x48,0xEA,0x3F,0xD0,0x13,0x2E,0x07,0xFD,0x70,0x5C,0xF0,
+0x00,0xC8,0xE8,0x03,0x8C,0x01,0xD5,0x0D,0x3E,0x17,0xFD,0x70,0xEB,0x0A,0x46,0x01,
+0x00,0x02,0xDD,0x5D,0x50,0x10,0x7A,0xF0,0x49,0xFF,0xFF,0x1B,0xD5,0x04,0x84,0x00,
+0x3E,0x07,0xFD,0x70,0xB9,0x01,0x2E,0x07,0xFD,0x74,0xC0,0x0F,0xC9,0x0E,0x3C,0x03,
+0xFE,0xE6,0x2E,0x27,0xFD,0x75,0xE2,0x40,0xE8,0x06,0x3E,0x17,0xFD,0x74,0x3C,0x1B,
+0xFE,0xE6,0xD5,0x06,0x8C,0x01,0xD5,0x02,0x84,0x00,0x3C,0x0B,0xFE,0xE6,0xFC,0x80,
+0xFC,0x00,0x3F,0xCF,0xFE,0x1C,0x3C,0x13,0xFE,0xE2,0xB8,0x15,0xE2,0x20,0xE9,0x06,
+0x3C,0x13,0xFE,0xE7,0xB8,0x14,0xE2,0x20,0xE8,0x05,0x2E,0x07,0xFD,0x5D,0xC8,0x02,
+0xEA,0x76,0x2E,0x07,0xFD,0x4C,0xC0,0x2D,0x84,0x00,0xEA,0x76,0x2E,0x17,0xFD,0x28,
+0xB8,0x0C,0xE2,0x20,0xEA,0xF5,0xE8,0x22,0x42,0x20,0x84,0x0B,0xC2,0x1F,0xBA,0x00,
+0xC2,0x04,0x2E,0x27,0xFD,0x5D,0xC2,0x1A,0xDD,0x59,0x5C,0x10,0x00,0x01,0x84,0x01,
+0xEA,0xAB,0xDD,0x59,0x5A,0x00,0x01,0x04,0x84,0x07,0xD5,0x02,0x84,0x02,0x84,0x22,
+0xEA,0x34,0xDD,0x59,0x80,0xC0,0x5A,0x08,0x01,0x0E,0xEA,0x33,0xC8,0x04,0xEA,0xB7,
+0xEA,0xC4,0xD5,0x08,0x3E,0x67,0xFD,0x1A,0xD5,0x05,0xEA,0x5B,0xC1,0x03,0x8C,0x01,
+0xB8,0x8C,0xFC,0x80,0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0x46,0x01,0x00,0x07,0x04,0x50,
+0x03,0xCE,0xEA,0x21,0xEA,0x20,0xD8,0x03,0x84,0x03,0xD5,0x1E,0x46,0x01,0x00,0x05,
+0xEB,0x1C,0x3C,0x13,0xFE,0xC8,0xE2,0x20,0x84,0x20,0xBA,0x0C,0xE8,0x0B,0xB9,0x8D,
+0xB8,0x07,0xE6,0x03,0xE8,0x04,0x8C,0x01,0xB8,0x87,0xD5,0x0F,0xC2,0x0E,0xB9,0x8C,
+0xD5,0x0C,0xB9,0x87,0xB8,0x0D,0xE6,0x0F,0xE8,0x04,0x8C,0x01,0xB8,0x8D,0xD5,0x05,
+0x5A,0x20,0x02,0x04,0x84,0x02,0xB8,0x8C,0xB8,0x0C,0xC8,0x0A,0x2E,0x07,0xFF,0xA9,
+0xEA,0x4B,0x3C,0x03,0xFE,0xCC,0xEA,0xB4,0x2E,0x07,0xFD,0x38,0xD5,0x22,0x5A,0x08,
+0x02,0x17,0x2E,0x07,0xFF,0xAA,0xEA,0x4B,0x3C,0x03,0xFE,0xCD,0xEA,0xB4,0x2E,0x07,
+0xFD,0x38,0xEA,0x97,0x2E,0x07,0xFD,0x39,0xEA,0x90,0x2E,0x07,0xFF,0xC6,0xEA,0x98,
+0x2E,0x07,0xFF,0xC7,0xEA,0xAD,0x2E,0x00,0x00,0xE6,0xD5,0x16,0x5A,0x08,0x03,0x18,
+0x2E,0x07,0xFF,0xAB,0xEA,0x4B,0x3C,0x03,0xFE,0xCC,0xEA,0xB4,0x2E,0x07,0xFD,0x2C,
+0xEA,0x97,0xEB,0x02,0xEA,0x90,0x2E,0x07,0xFF,0xC4,0xEA,0x98,0x2E,0x07,0xFF,0xC5,
+0xEA,0xAD,0x2E,0x00,0x00,0xE5,0xDD,0x49,0x3C,0x0B,0xFE,0xCF,0xEB,0x08,0xC0,0x1C,
+0xEB,0x38,0xC8,0x1A,0x2E,0x00,0x00,0x52,0xEA,0x4B,0x2E,0x00,0x00,0x54,0xEA,0xB4,
+0x2E,0x00,0x00,0x57,0x40,0x10,0x10,0x09,0x3E,0x17,0xFD,0x23,0xB9,0x1B,0x5A,0x18,
+0x01,0x04,0x96,0x1F,0xD5,0x02,0xEB,0x02,0xEA,0x90,0x2E,0x07,0xFF,0xC4,0xEA,0x98,
+0x2E,0x00,0x00,0x56,0xEA,0xAD,0xB8,0x00,0x5A,0x08,0x07,0x05,0x2E,0x07,0xFF,0xAD,
+0xEA,0x4B,0xEB,0x43,0xC0,0x04,0x2E,0x07,0xFF,0xB9,0xEA,0x4B,0xEA,0x49,0xC0,0x07,
+0x2E,0x07,0xFD,0x2C,0xEA,0x97,0xEB,0x02,0x8C,0x02,0xEA,0x90,0xB8,0x1C,0xC0,0x03,
+0x84,0x00,0xEA,0x97,0xFC,0x80,0xFC,0x40,0x2E,0x50,0x00,0x58,0x40,0x62,0x90,0x09,
+0x4E,0x62,0x01,0x38,0x46,0x01,0x00,0x07,0x04,0x10,0x03,0xC5,0xEA,0x21,0xEA,0x20,
+0x4C,0x10,0x00,0x06,0xDD,0x4D,0xEB,0x18,0x4E,0x02,0x01,0x2C,0xEA,0x94,0x3C,0x0D,
+0xFF,0x8A,0x4E,0x13,0x01,0x0E,0xE6,0x02,0x4E,0xF2,0x01,0x0B,0x2E,0x37,0xFD,0x65,
+0x4E,0x33,0x01,0x07,0x2E,0x20,0x00,0x5C,0x2E,0x70,0x01,0x29,0x54,0x01,0x00,0x0F,
+0x8C,0xE1,0x9C,0x41,0x8A,0xE0,0xEA,0x3C,0x92,0x44,0x51,0x00,0x00,0x01,0x51,0x21,
+0x00,0x01,0x8B,0x82,0x80,0x03,0x80,0x43,0xFB,0xF6,0x46,0x91,0x00,0x04,0x58,0x94,
+0x84,0xB8,0xE0,0x27,0xE8,0x19,0x42,0xA0,0xCC,0x24,0x80,0x92,0xE0,0x90,0xE8,0x11,
+0x41,0x12,0x28,0x00,0x41,0x14,0xC4,0x20,0x02,0xF8,0x80,0x00,0xEA,0x7E,0xE0,0x0F,
+0xE8,0x05,0x02,0x08,0x80,0x00,0x80,0x61,0x80,0x44,0x8C,0x81,0x97,0x20,0xD5,0xEF,
+0x8C,0x21,0x96,0x48,0xD5,0xE7,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xBB,0x2E,0x40,
+0x00,0x83,0x2E,0x10,0x00,0x84,0xE2,0x04,0x40,0x10,0x80,0x06,0x41,0x07,0x84,0x02,
+0x3F,0x07,0xFD,0x55,0x2E,0x10,0x00,0x5A,0xE2,0x20,0xE8,0x0D,0x2E,0x10,0x00,0x59,
+0xE2,0x01,0xE8,0x09,0x3C,0x43,0xFE,0xC4,0x2E,0x70,0x00,0x5B,0x84,0x2A,0xFE,0x7C,
+0xE0,0x24,0xE9,0x03,0x4F,0x02,0x00,0xB0,0xFA,0x96,0xFF,0x1C,0x47,0x11,0x00,0x04,
+0x59,0x18,0x84,0xB8,0x99,0xE2,0x95,0xF9,0x8E,0xE2,0x40,0x13,0xC4,0x00,0xA4,0x48,
+0x8C,0xE4,0x88,0xF1,0x41,0x20,0x80,0x11,0xA4,0x78,0x50,0x72,0x7F,0xDA,0x96,0x4B,
+0x88,0xE2,0x95,0xF9,0x88,0x32,0x88,0x01,0x40,0x13,0xC4,0x00,0xA4,0x48,0x88,0x01,
+0x50,0x12,0x00,0x26,0x88,0x22,0x94,0x49,0x40,0x40,0xC4,0x00,0xA5,0x20,0x88,0x04,
+0x9F,0x3A,0x88,0x91,0xA5,0x20,0x8C,0xE2,0x88,0xF1,0x88,0x04,0xA5,0x38,0x88,0x04,
+0x9F,0x0A,0x88,0x91,0x8C,0x22,0xA5,0x20,0x88,0x31,0xA4,0x48,0x88,0x04,0x88,0x01,
+0x96,0x01,0x92,0x01,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xBC,0x2E,0x10,0x00,0x5D,
+0xE2,0x20,0xE8,0x03,0x4F,0x02,0x00,0x0E,0x2E,0x10,0x00,0x86,0xE2,0x20,0x4E,0xF2,
+0x00,0x84,0x2E,0x10,0x00,0x85,0xE2,0x01,0x4E,0xF2,0x00,0x7F,0x4F,0x02,0x00,0x7D,
+0xEA,0x92,0x5A,0x08,0xFF,0x04,0x48,0x00,0x00,0x7D,0xC8,0x08,0x3E,0x27,0xFD,0x3E,
+0x3E,0x37,0xFD,0x25,0x3E,0x07,0xFD,0x33,0xD5,0x4F,0x2E,0x07,0xFD,0x3E,0xE2,0x40,
+0xE8,0x03,0x9A,0x82,0xD5,0x02,0x8A,0x40,0x2E,0x07,0xFD,0x25,0x96,0x90,0xE2,0x60,
+0xE8,0x03,0x9A,0xC3,0xD5,0x02,0x8A,0x60,0xDD,0x5C,0x96,0xD8,0x80,0x82,0x42,0x41,
+0x80,0x73,0x97,0x5F,0x80,0x04,0x46,0x41,0x00,0x07,0x12,0x02,0x07,0xBD,0x9C,0x69,
+0x2E,0x00,0x00,0x5E,0x5A,0x68,0x01,0x0F,0x96,0x1F,0xE0,0x02,0xE9,0x03,0xE0,0x03,
+0xE8,0x03,0x84,0x1F,0xEA,0x8F,0x2E,0x57,0xFD,0x1E,0xD9,0x26,0x84,0x01,0xEA,0xFC,
+0xD5,0x23,0x92,0x04,0xE2,0x02,0xE9,0x03,0xE2,0x03,0xE8,0x04,0x84,0x1F,0xEA,0x8F,
+0xD5,0x1B,0x98,0x1A,0x2E,0x47,0xFD,0x33,0x96,0x00,0xE2,0x04,0xE8,0x07,0x8A,0x80,
+0xE4,0x83,0xE9,0x04,0x84,0x1F,0xEA,0x8F,0xD5,0x03,0x3E,0x07,0xFD,0x33,0xFE,0x94,
+0x42,0x21,0x8C,0x73,0xFE,0x4C,0x96,0x90,0xE0,0x22,0xE8,0x06,0xEA,0x92,0x90,0xA1,
+0xE0,0xA0,0xE9,0xDD,0xD5,0xE4,0xEA,0x92,0x5C,0xF0,0x00,0xF0,0xE8,0x1D,0x8C,0x01,
+0xEA,0x8F,0xD5,0x1A,0x5A,0x60,0x03,0x19,0x3F,0x07,0xFD,0x1E,0xD5,0x15,0x84,0x20,
+0x3E,0x17,0xFD,0x1E,0xC8,0x0E,0x2E,0x20,0x00,0x5F,0x3C,0x13,0xFE,0xCB,0x94,0x91,
+0xE0,0x22,0xE8,0x05,0x8C,0x21,0x3C,0x1B,0xFE,0xCB,0xD5,0x06,0xEA,0xFC,0xD5,0x02,
+0x84,0x00,0x3C,0x0B,0xFE,0xCB,0xEA,0x92,0x46,0x11,0x00,0x07,0x12,0x00,0x87,0xBA,
+0xFC,0xC0,0xFC,0x20,0x3F,0xCF,0xFE,0x1C,0x2E,0x50,0x01,0xCD,0x2E,0x40,0x01,0xCC,
+0x84,0x22,0x9A,0xAC,0x8C,0x41,0x40,0x21,0x04,0x56,0x2F,0x00,0x01,0xCE,0x88,0x44,
+0x2E,0x70,0x01,0xCF,0x96,0x10,0x46,0x21,0x00,0x01,0x00,0x21,0x0F,0xDD,0x46,0x61,
+0x00,0x07,0x9A,0x82,0x42,0x31,0x00,0x03,0x40,0x28,0x1C,0x01,0x8C,0x41,0x40,0x11,
+0x04,0x36,0x46,0x21,0x00,0x01,0x88,0x27,0x00,0x21,0x0F,0xDC,0x96,0x48,0x9A,0x8A,
+0x42,0x21,0x00,0x03,0x88,0x43,0x96,0xD1,0x12,0x33,0x07,0xB5,0x2E,0x37,0xFD,0x29,
+0xCB,0x21,0xB8,0x00,0xC0,0x57,0x46,0x01,0x00,0x01,0x00,0x10,0x0B,0xA0,0xC9,0x52,
+0x2E,0x00,0x00,0x60,0xE0,0x02,0xE8,0x13,0x2E,0x07,0xFD,0x6C,0x8C,0x01,0x96,0x00,
+0x3E,0x07,0xFD,0x6C,0x2E,0x07,0xFD,0x6C,0x2E,0x27,0xFD,0x32,0xE2,0x40,0xE8,0x42,
+0x84,0x01,0x3E,0x07,0xFD,0x29,0x3E,0x17,0xFD,0x68,0xD5,0x3C,0x3E,0x17,0xFD,0x6C,
+0xD5,0x39,0xBA,0x03,0xCA,0x07,0xBA,0x00,0xCA,0x05,0x3E,0x27,0xFD,0x6C,0x3E,0x27,
+0xFD,0x29,0x2E,0x30,0x00,0x64,0x46,0x21,0x00,0x01,0x04,0x21,0x03,0xFD,0xE2,0x62,
+0xE8,0x29,0xFA,0x76,0x80,0x40,0x42,0x23,0x8C,0x73,0xEB,0x19,0xEB,0x24,0x40,0x23,
+0x08,0x20,0x22,0x21,0x14,0xB2,0x5A,0x20,0xFD,0x1E,0x42,0x08,0x0C,0x73,0x40,0x23,
+0x00,0x20,0x22,0x01,0x14,0xB2,0x5A,0x00,0xFD,0x16,0xFE,0x5C,0x98,0x0C,0x40,0x03,
+0x00,0x20,0x22,0x00,0x14,0xB2,0x5A,0x00,0xFD,0x0E,0x88,0xA1,0x40,0x53,0x14,0x20,
+0x22,0x02,0x94,0xB2,0x5A,0x00,0xFD,0x07,0x84,0x00,0x3E,0x07,0xFD,0x6C,0x3E,0x07,
+0xFD,0x29,0xFC,0xA0,0x46,0x19,0x00,0x00,0x04,0x00,0x80,0x30,0xEA,0x37,0x14,0x00,
+0x80,0x30,0xDD,0x9E,0x46,0x19,0x00,0x28,0xA4,0xCA,0x84,0x41,0x40,0x21,0x00,0x0C,
+0x40,0x21,0x88,0x12,0xAC,0x8A,0x50,0x10,0x80,0x74,0x40,0x10,0x80,0x40,0xA6,0x08,
+0xDD,0x9E,0x46,0x09,0x00,0x88,0x84,0x21,0x10,0x10,0x00,0xA8,0x44,0x1F,0xFF,0xA5,
+0x10,0x10,0x00,0xE0,0x46,0x02,0xB1,0x18,0x50,0x00,0x03,0x00,0x46,0x13,0x00,0xB9,
+0xB6,0x01,0x46,0x06,0x65,0x5F,0x50,0x00,0x0F,0x00,0x46,0x13,0x00,0xEB,0xB6,0x01,
+0xDD,0x9E,0xFC,0x40,0x80,0xE1,0x81,0x20,0x80,0xC2,0xDD,0x52,0x46,0x33,0x00,0x00,
+0x88,0x67,0x4E,0x92,0x00,0x04,0xB6,0xC3,0xD5,0x03,0x97,0xB0,0xAF,0x98,0xDD,0x57,
+0x04,0x00,0x00,0x3A,0x92,0x0C,0x96,0x0F,0x5A,0x08,0x03,0x06,0x84,0x20,0x46,0x03,
+0x00,0xB9,0xB6,0x20,0x84,0x20,0xEA,0x5D,0x10,0x10,0x00,0xA8,0xFC,0xC0,0xFC,0x00,
+0xF8,0x32,0x80,0x43,0xDD,0x4C,0xFC,0x80,0xFC,0x20,0x80,0xE0,0x80,0xC1,0xDD,0x52,
+0x46,0x23,0x00,0x00,0xC7,0x13,0x98,0x32,0xA6,0x40,0x9C,0x11,0x88,0x06,0xA7,0x00,
+0x9C,0x12,0x88,0x06,0x9C,0xD3,0xA6,0x00,0x98,0xB3,0xA6,0x90,0xEA,0xE8,0x40,0x00,
+0x0B,0x04,0xFE,0x0F,0x40,0x00,0x11,0x04,0xD5,0x04,0x88,0x46,0xA6,0x10,0x96,0x00,
+0xEA,0x3E,0x04,0x10,0x80,0x3A,0x92,0x2C,0x96,0x4F,0x5A,0x18,0x03,0x06,0x84,0x40,
+0x46,0x13,0x00,0xB9,0xB6,0x41,0x84,0x40,0x46,0x19,0x00,0x88,0x10,0x20,0x80,0xA8,
+0xFC,0xA0,0xFC,0x00,0x40,0x10,0xA8,0x08,0x40,0x10,0x81,0x80,0x88,0x22,0x84,0x00,
+0x83,0xFF,0xEA,0x60,0x96,0x00,0xFC,0x80,0x46,0x38,0x00,0x00,0x84,0x40,0x50,0x31,
+0x80,0x34,0xB4,0x03,0x46,0x18,0x00,0x00,0x96,0x04,0xC0,0x06,0x5A,0x20,0x64,0x2E,
+0x8C,0x41,0x96,0x90,0xD5,0xF7,0x5A,0x20,0x64,0x29,0xA8,0x0C,0xA0,0x8C,0x50,0x40,
+0x80,0x20,0x58,0x21,0x00,0x80,0xA8,0x8C,0xA0,0x8C,0x66,0x21,0x1F,0x00,0x58,0x21,
+0x07,0x00,0xA8,0x8C,0xA0,0xCC,0x44,0x2C,0xFF,0xFF,0xFE,0x9E,0x42,0x21,0x44,0x08,
+0xA8,0x8C,0xB6,0x04,0xB4,0x64,0x46,0x2F,0x0F,0xFF,0x50,0x21,0x0F,0xFF,0xFE,0x9E,
+0x46,0x30,0x70,0x00,0xFE,0x9F,0xB6,0x44,0xB4,0x44,0x42,0x21,0x78,0x08,0xB6,0x44,
+0x84,0x44,0x10,0x20,0x80,0x24,0xDD,0x9E,0xFA,0x11,0xDD,0x9E,0xFC,0x63,0xF0,0x81,
+0xEB,0x5A,0xEB,0x30,0x44,0x00,0x04,0x00,0xF2,0x01,0xDD,0x48,0xEA,0x9B,0x81,0x60,
+0x4E,0x03,0x00,0x9B,0x46,0xEF,0xF0,0x0F,0x81,0x80,0x50,0x07,0x0F,0xFF,0x84,0xC1,
+0x85,0xA4,0xF0,0x84,0xEB,0x81,0x58,0x00,0x00,0x04,0x38,0x70,0x34,0x00,0x8C,0x01,
+0x38,0xA6,0x80,0x00,0x4E,0x72,0x00,0x89,0x54,0x05,0x00,0xFB,0x85,0x00,0xF0,0x83,
+0xE3,0x07,0x4E,0xF2,0x00,0x7B,0x40,0x04,0x34,0x00,0xEB,0x5A,0x58,0x10,0x80,0x00,
+0x88,0x01,0x00,0x90,0x00,0x06,0x5A,0xA0,0xBD,0x6B,0x5A,0xA8,0xE9,0x0C,0x54,0x04,
+0x80,0xC0,0x5A,0x08,0xC0,0x05,0x54,0xE4,0x80,0x3F,0xD5,0x0F,0x85,0xC1,0xC0,0x0D,
+0xD5,0x0B,0x5A,0xA8,0xC1,0x08,0x2E,0x07,0xFD,0x1B,0x81,0xC6,0x5A,0x08,0x01,0x06,
+0xD5,0x58,0x5A,0xA0,0xB6,0x0A,0x81,0xC6,0x88,0xC8,0x96,0x30,0xF0,0x81,0xEA,0xD3,
+0x84,0xC3,0xF0,0x82,0xD5,0x07,0x2E,0x07,0xFD,0x04,0x5A,0x00,0xFF,0xF6,0x81,0xC6,
+0xD5,0x48,0x80,0x0A,0x80,0x2C,0xF2,0x02,0x80,0x69,0xDD,0x54,0x5A,0xA0,0xB9,0x42,
+0xF0,0x03,0x5A,0x00,0xB2,0x3F,0x5A,0xA0,0xE9,0x3D,0x80,0x0A,0x80,0x2C,0xF2,0x02,
+0xEA,0x3A,0xF0,0x85,0x4C,0x90,0x00,0x36,0x44,0x00,0x00,0x32,0xDD,0x50,0x9E,0x31,
+0x97,0x80,0xF3,0x05,0xCE,0xE7,0x46,0x01,0x00,0x07,0x04,0x20,0x03,0xF0,0xF1,0x04,
+0x66,0x21,0x00,0xFF,0x40,0x25,0x08,0x04,0x14,0x20,0x03,0xF0,0x04,0x00,0x03,0xF0,
+0x44,0x2F,0x00,0xFF,0xFE,0x86,0x40,0x21,0x31,0x04,0x46,0x01,0x00,0x07,0x14,0x20,
+0x03,0xF0,0x04,0x00,0x03,0xF0,0x81,0x6A,0xFE,0x0E,0xF1,0x01,0x40,0x60,0x06,0x04,
+0x46,0x01,0x00,0x07,0x14,0x60,0x03,0xF0,0x04,0x10,0x03,0xF0,0x40,0x10,0xA0,0x08,
+0x92,0x28,0x40,0x10,0x8F,0x04,0x14,0x10,0x03,0xF0,0xD5,0x03,0x81,0xC6,0x81,0x89,
+0x8D,0x01,0x80,0xCE,0x48,0xFF,0xFF,0x86,0x8C,0xE2,0x40,0xD6,0x9C,0x00,0x5C,0xF6,
+0x84,0x00,0x4E,0xF3,0xFF,0x71,0x80,0x0B,0xFC,0xE3,0x46,0x09,0x00,0x08,0x02,0x50,
+0x00,0x08,0xEA,0xE9,0xD1,0x03,0x12,0x10,0x00,0x08,0xDD,0x9E,0xFC,0x00,0xEA,0x93,
+0x46,0x10,0x30,0x00,0xEA,0xB9,0x8C,0x21,0xEB,0x2B,0xB4,0x02,0x96,0x04,0xC0,0x04,
+0x8E,0x21,0xC9,0xFC,0xFA,0x14,0xFC,0x80,0xFC,0x00,0xDD,0x52,0x84,0x00,0x44,0x11,
+0x00,0x00,0x80,0x40,0xDD,0x4C,0xEA,0x4A,0xFC,0x80,0xFC,0x00,0xDD,0x52,0x84,0x00,
+0x44,0x11,0x10,0x00,0x80,0x40,0xDD,0x4C,0xEA,0x4A,0xFC,0x80,0xFC,0x00,0xDD,0x52,
+0x84,0x00,0x44,0x12,0x90,0x00,0x80,0x40,0xDD,0x4C,0xEA,0x4A,0xFC,0x80,0xFC,0x00,
+0xDD,0x52,0x84,0x00,0x44,0x12,0x80,0x00,0x80,0x40,0xDD,0x4C,0xEA,0x4A,0xFC,0x80,
+0x46,0x09,0x00,0x08,0xA5,0x46,0x44,0x10,0xAC,0x53,0xD1,0x04,0x44,0x1F,0xAC,0x53,
+0xAC,0x46,0xDD,0x9E,0x46,0x09,0x00,0x08,0xA4,0x46,0xC1,0x03,0x84,0x20,0xAC,0x46,
+0xDD,0x9E,0xFC,0x01,0xEA,0x38,0x00,0x1F,0x80,0x00,0x84,0x01,0x40,0x30,0x80,0x02,
+0x00,0x1F,0x80,0x01,0x00,0x2F,0x80,0x04,0xFE,0x46,0x40,0x11,0x84,0x20,0x00,0x3F,
+0x80,0x02,0xFE,0xC6,0x40,0x10,0x8C,0x60,0x00,0x3F,0x80,0x03,0xFE,0xC6,0x40,0x10,
+0x8C,0x80,0xFE,0x16,0x40,0x00,0x80,0xA0,0xEB,0x3E,0xEB,0x3A,0xEA,0x5C,0xFC,0x81,
+0x9E,0x41,0xE6,0x23,0xE8,0x1B,0xEA,0x28,0x84,0x40,0x10,0x20,0x80,0x94,0x84,0x41,
+0x10,0x20,0x80,0x94,0xEA,0x3E,0x5A,0x00,0x02,0x08,0x5A,0x00,0x03,0x0A,0xEA,0xD0,
+0x12,0x00,0x80,0x0A,0xD5,0x09,0x44,0x00,0x00,0xA5,0xAC,0x0E,0xD5,0x05,0x44,0x00,
+0x00,0x55,0x12,0x00,0x80,0x0C,0x84,0x00,0xDD,0x9E,0xFA,0x02,0xDD,0x9E,0x46,0x20,
+0x4C,0x4B,0x50,0x21,0x04,0x00,0xE2,0x41,0xE9,0x18,0xE6,0x04,0xE8,0x16,0xFC,0x01,
+0xF0,0x81,0x80,0xC1,0x84,0x00,0xF1,0x01,0xEA,0x3B,0x3C,0x1D,0xFF,0xE3,0xFA,0x44,
+0xFF,0x8C,0x84,0x00,0xF1,0x01,0x40,0x23,0x08,0x57,0xF8,0x2C,0x84,0x00,0xF1,0x01,
+0x84,0x48,0xF8,0x2D,0x84,0x00,0xFC,0x81,0xFA,0x02,0xDD,0x9E,0xE6,0x04,0xE8,0x2B,
+0xFC,0x40,0x80,0xE0,0x81,0x21,0x84,0x01,0x80,0x27,0xEA,0x3B,0x46,0x49,0x00,0x80,
+0x8C,0x84,0x40,0x42,0x1C,0xA0,0x44,0x10,0x00,0x65,0x8E,0x21,0x96,0x48,0xB4,0x64,
+0xB4,0x04,0xC1,0x1B,0x40,0x60,0x0C,0x04,0xCE,0xF9,0x40,0x24,0x88,0x09,0xDD,0x5C,
+0x42,0x11,0x00,0x24,0x2E,0x27,0xFD,0xEA,0x84,0x01,0x40,0x20,0x88,0x57,0x80,0x27,
+0x88,0x40,0x49,0x00,0x0A,0x6E,0x84,0x01,0x80,0x40,0x80,0x27,0x49,0x00,0x0A,0x74,
+0x80,0x06,0xD5,0x04,0xFA,0x02,0xDD,0x9E,0xFA,0x14,0xFC,0xC0,0x46,0x18,0x00,0x60,
+0x00,0x00,0x80,0x14,0xEB,0x03,0x10,0x00,0x80,0x14,0xDD,0x9E,0x46,0x08,0x00,0x60,
+0x00,0x10,0x00,0x10,0x84,0x01,0x40,0x00,0x04,0x12,0xDD,0x9E,0xFC,0x01,0x10,0x0F,
+0x80,0x07,0x00,0x0F,0x80,0x07,0x96,0x00,0xE6,0x06,0xE8,0x47,0x3E,0xFF,0xD5,0xF4,
+0x38,0x07,0x80,0x00,0x40,0xF0,0x3C,0x00,0x4A,0x00,0x3C,0x00,0x22,0x06,0x0A,0x10,
+0x16,0x1C,0xEB,0x0B,0xD5,0x0E,0x44,0x60,0x00,0x66,0xD5,0x0B,0x44,0x60,0x00,0x77,
+0xD5,0x08,0x44,0x60,0x00,0x99,0xD5,0x05,0x44,0x60,0x00,0xAA,0xD5,0x02,0x84,0xC0,
+0x46,0x19,0x00,0x78,0x00,0x0F,0x80,0x07,0xF8,0x03,0x46,0x19,0x00,0x70,0x00,0x00,
+0x80,0x08,0xEA,0x37,0xEA,0xFB,0x83,0xFF,0x2E,0x07,0xFD,0x02,0xC0,0x02,0xEB,0x0B,
+0xEA,0x69,0xEA,0xA3,0xC8,0x11,0xEA,0xA5,0xC8,0x0F,0x49,0xFF,0xE6,0x49,0xC8,0x0C,
+0xEA,0x3E,0x04,0x00,0x80,0x10,0x42,0x00,0x44,0x0B,0xC8,0x06,0x04,0x00,0x80,0x10,
+0x42,0x00,0x48,0x0B,0xC0,0x02,0xEB,0x0B,0x97,0xB1,0xDD,0x57,0x12,0x60,0x00,0x50,
+0x64,0x00,0x00,0x00,0x84,0x00,0xD5,0x02,0xFA,0x02,0xFC,0x81,0xFC,0x20,0x84,0xA0,
+0x50,0x21,0x00,0x24,0x80,0x85,0x45,0x20,0x00,0x48,0x47,0x11,0x00,0x07,0x59,0x18,
+0x85,0x00,0x2E,0x30,0x01,0x29,0xE0,0x83,0xE8,0x18,0x82,0x11,0x43,0x02,0x48,0x73,
+0x84,0x60,0x2E,0x60,0x01,0x28,0xE0,0x66,0xE8,0x0D,0x38,0x78,0x0D,0x01,0x99,0x9D,
+0x40,0x70,0x1C,0x20,0xA5,0xF8,0x40,0x60,0x98,0x20,0x97,0xFB,0xAD,0xF0,0x8C,0x61,
+0xD5,0xF1,0x8C,0x81,0x88,0xA2,0xD5,0xE6,0xFC,0xA0,0xFC,0x21,0x3F,0xCF,0xFD,0xD4,
+0xF0,0x81,0xDD,0x47,0x80,0xE1,0x80,0xC2,0xDD,0x40,0xC0,0x02,0x84,0xC4,0xEA,0x24,
+0xC0,0x1A,0xDD,0x43,0x02,0x30,0x00,0x9C,0x02,0x00,0x00,0x0A,0x8A,0x60,0x40,0x31,
+0xA4,0x08,0xBB,0x80,0x3C,0x3D,0xFF,0x75,0xFE,0xDA,0xBB,0x84,0x80,0x06,0x49,0x00,
+0x09,0x7C,0xB9,0x04,0xF0,0x01,0x44,0x20,0x01,0xB0,0x42,0x70,0x08,0x73,0x80,0x47,
+0x49,0x00,0x09,0x8C,0xFC,0xA1,0x00,0x00,0xFC,0x00,0xE6,0x28,0x4E,0xF2,0x01,0x89,
+0x9E,0x82,0xE6,0x47,0x4E,0xF2,0x01,0x85,0x44,0x30,0x01,0xAC,0x3E,0xFF,0xD7,0x34,
+0x38,0x27,0x88,0x00,0x40,0xF1,0x3C,0x00,0x4A,0x00,0x3C,0x00,0x08,0x08,0x08,0x08,
+0x08,0x0E,0x0E,0x00,0x44,0x20,0xD6,0xB0,0xD5,0x03,0x44,0x20,0xD3,0x58,0x42,0x20,
+0x8C,0x73,0x00,0x31,0x01,0x88,0x80,0x22,0xEA,0xB9,0x10,0x31,0x00,0x28,0x3C,0x3D,
+0xFF,0x76,0x8E,0x67,0xE6,0x62,0xE8,0x0F,0x46,0x31,0x00,0x07,0x04,0x51,0x83,0xC4,
+0x46,0x3A,0x55,0xAA,0x50,0x31,0x85,0x5A,0xD3,0x06,0x2E,0x37,0xFF,0xA3,0x42,0x31,
+0x90,0x0B,0xC3,0x05,0x04,0x30,0x80,0x59,0x14,0x31,0x00,0x30,0x46,0x28,0x00,0x20,
+0x00,0x30,0x81,0x89,0x10,0x31,0x02,0xBC,0x00,0x30,0x81,0x8A,0x10,0x31,0x00,0x2C,
+0x00,0x30,0x81,0x8B,0x10,0x31,0x02,0x38,0x04,0x30,0x80,0x4B,0x14,0x31,0x00,0x8D,
+0x04,0x30,0x80,0x4C,0x14,0x31,0x00,0x0E,0x00,0x30,0x81,0x8C,0x10,0x31,0x00,0x40,
+0x00,0x30,0x81,0x8D,0x10,0x31,0x00,0x44,0x00,0x30,0x81,0x8E,0x10,0x31,0x00,0x48,
+0x00,0x30,0x81,0x8F,0x10,0x31,0x00,0x4C,0x00,0x30,0x81,0x90,0x10,0x31,0x00,0x50,
+0x00,0x30,0x81,0x91,0x10,0x31,0x00,0x54,0x00,0x30,0x81,0x92,0x10,0x31,0x00,0x58,
+0x00,0x30,0x81,0x93,0x10,0x31,0x00,0x64,0x02,0x30,0x80,0xB4,0x12,0x31,0x00,0x12,
+0x02,0x30,0x80,0xB5,0x12,0x31,0x00,0x8A,0x02,0x30,0x80,0xB6,0x12,0x31,0x00,0x1E,
+0x00,0x30,0x81,0x94,0x10,0x31,0x00,0x28,0x00,0x30,0x81,0x95,0x10,0x31,0x00,0x34,
+0x00,0x30,0x81,0x96,0x10,0x31,0x02,0xAC,0x00,0x30,0x81,0x97,0x10,0x31,0x00,0x18,
+0x00,0x30,0x81,0x98,0x10,0x31,0x05,0x68,0x00,0x30,0x81,0x99,0x10,0x31,0x05,0x78,
+0x00,0x30,0x81,0x9A,0x10,0x31,0x01,0x30,0x00,0x30,0x81,0x9B,0x10,0x31,0x01,0x2C,
+0x00,0x30,0x81,0x9C,0x10,0x31,0x01,0xDC,0x00,0x30,0x81,0x9D,0x10,0x31,0x02,0x9C,
+0x00,0x30,0x81,0x9E,0x10,0x31,0x01,0xD8,0x02,0x30,0x80,0xB7,0x12,0x31,0x00,0x9A,
+0x02,0x30,0x80,0xB8,0x12,0x31,0x00,0x9C,0x02,0x30,0x80,0xB9,0x12,0x31,0x00,0x0A,
+0x02,0x30,0x80,0xBA,0x12,0x31,0x00,0xF8,0x02,0x30,0x80,0xBB,0x12,0x31,0x00,0xFC,
+0x02,0x30,0x80,0xBC,0x12,0x31,0x00,0xFE,0x02,0x30,0x80,0xBD,0x12,0x31,0x01,0x00,
+0x00,0x30,0x81,0x9F,0x10,0x31,0x02,0x04,0x04,0x30,0x80,0x4D,0x14,0x31,0x00,0x38,
+0x04,0x30,0x80,0x4E,0x14,0x31,0x00,0x39,0x00,0x30,0x81,0xA0,0x10,0x31,0x00,0xCC,
+0x00,0x30,0x81,0xA1,0x10,0x31,0x00,0xD0,0x02,0x30,0x80,0xBE,0x12,0x31,0x00,0xF6,
+0x04,0x30,0x80,0x4F,0x14,0x31,0x00,0x78,0x04,0x30,0x80,0x50,0x14,0x31,0x00,0x79,
+0x02,0x30,0x80,0xBF,0x12,0x31,0x00,0xF4,0x02,0x30,0x80,0xC0,0x12,0x31,0x02,0xB8,
+0x02,0x30,0x80,0xC1,0x12,0x31,0x00,0xB6,0x04,0x30,0x80,0x51,0x14,0x31,0x00,0xB1,
+0x04,0x30,0x80,0x52,0x14,0x31,0x00,0xB3,0x04,0x30,0x80,0x53,0x14,0x31,0x00,0xB4,
+0x04,0x30,0x80,0x3F,0x14,0x31,0x01,0x5F,0x04,0x30,0x80,0x40,0x14,0x31,0x01,0x60,
+0x04,0x30,0x80,0x41,0x14,0x31,0x01,0x61,0x04,0x30,0x80,0x42,0x14,0x31,0x01,0x62,
+0x04,0x30,0x80,0x43,0x14,0x31,0x01,0x63,0x04,0x30,0x80,0x44,0x14,0x31,0x01,0x64,
+0x04,0x30,0x80,0x45,0x14,0x31,0x01,0x65,0x04,0x30,0x80,0x46,0x14,0x31,0x01,0x66,
+0x04,0x30,0x80,0x47,0x14,0x31,0x01,0x67,0x04,0x30,0x80,0x48,0x14,0x31,0x01,0x68,
+0x04,0x30,0x80,0x49,0x14,0x31,0x01,0x69,0x04,0x30,0x80,0x4A,0x14,0x31,0x01,0x6A,
+0x00,0x30,0x81,0xA2,0x10,0x31,0x00,0xD8,0x04,0x30,0x80,0x54,0x14,0x31,0x00,0x30,
+0x04,0x30,0x80,0x55,0x14,0x31,0x00,0x31,0x04,0x30,0x80,0x56,0x14,0x31,0x00,0x32,
+0x00,0x30,0x81,0xA3,0x10,0x31,0x00,0xB0,0x00,0x30,0x81,0xA4,0x10,0x31,0x00,0xB4,
+0x00,0x30,0x81,0xA5,0x10,0x31,0x05,0xBC,0x04,0x30,0x80,0x57,0x14,0x31,0x00,0xB2,
+0x04,0x30,0x80,0x58,0x14,0x31,0x00,0xB0,0x00,0x30,0x81,0xA6,0x10,0x31,0x01,0x58,
+0x00,0x30,0x81,0xA7,0x10,0x31,0x01,0x5C,0x02,0x30,0x80,0xC2,0x46,0x52,0x00,0x00,
+0x12,0x31,0x00,0x94,0x50,0x22,0x80,0xFC,0xB4,0x61,0xB6,0x65,0xB4,0x85,0xB4,0x61,
+0x4C,0x41,0xFF,0xFC,0x8C,0xA4,0x8C,0x24,0xDA,0xF8,0x49,0xFF,0xC8,0x68,0x49,0xFF,
+0xC4,0x7C,0x46,0x00,0x00,0x0D,0x00,0x00,0x04,0xF9,0x8E,0x01,0x96,0x00,0x3E,0x07,
+0xFD,0x0E,0x46,0x00,0x00,0x0D,0x00,0x00,0x06,0xA5,0x8E,0x01,0x96,0x00,0x3E,0x07,
+0xFD,0x15,0xEA,0x9B,0x80,0xC0,0xC8,0x0E,0xDD,0x5C,0xDD,0x50,0xDD,0x4B,0x8E,0x07,
+0xE6,0x02,0xE8,0x08,0x84,0x21,0xDD,0x43,0x10,0x10,0x02,0xA0,0xD5,0x03,0xFA,0x02,
+0xD5,0x02,0x80,0x06,0xFC,0x80,0x92,0x00,0xFC,0x40,0x84,0xC0,0x80,0x26,0x84,0x01,
+0xEA,0x3B,0x80,0x26,0x8C,0xC1,0x84,0x00,0x97,0xB0,0xEA,0x3B,0x5A,0x68,0x04,0xF8,
+0x84,0xE0,0x3E,0x77,0xFD,0x19,0x46,0x68,0x00,0x20,0x85,0x21,0x3E,0x97,0xFD,0x01,
+0x10,0x73,0x01,0x68,0x44,0x00,0x01,0xF4,0x10,0x73,0x02,0x14,0x10,0x73,0x02,0xA0,
+0x10,0x73,0x00,0xB0,0x10,0x73,0x00,0x84,0x10,0x73,0x01,0x00,0x10,0x73,0x00,0x8C,
+0x10,0x73,0x00,0x1C,0x10,0x73,0x00,0x20,0xDD,0x50,0x10,0x93,0x00,0x20,0xDD,0x5C,
+0x10,0x73,0x00,0x94,0xEA,0x6E,0x8E,0x01,0xC8,0xFE,0x84,0x21,0x46,0x28,0x00,0x30,
+0x10,0x13,0x00,0x94,0x12,0x01,0x00,0xE4,0x10,0x13,0x00,0x90,0x46,0x19,0x00,0x68,
+0xAE,0x08,0xDD,0x4B,0x8E,0x07,0xE6,0x02,0xE8,0x0B,0x46,0x01,0x00,0x07,0xEA,0x63,
+0xEA,0x21,0xEA,0x20,0xD0,0x04,0xDD,0x4D,0xEA,0xF0,0xC0,0x02,0xEA,0x5E,0x84,0x20,
+0xEA,0x73,0xAE,0x40,0xDD,0x4F,0x46,0x01,0x00,0x00,0x58,0x00,0x0B,0x14,0x84,0x20,
+0xDD,0x42,0xFC,0xC0,0xFC,0x00,0x3F,0xCF,0xFD,0xD8,0x46,0x10,0x00,0xE7,0x84,0x00,
+0x50,0x10,0x8C,0x15,0x44,0x20,0x00,0x68,0xDD,0x4C,0xDD,0x43,0x84,0x21,0x46,0x20,
+0xFF,0xFF,0xEA,0x47,0x50,0x21,0x0F,0xFF,0x10,0x10,0x00,0x1C,0x10,0x10,0x00,0x84,
+0x10,0x10,0x00,0x80,0xEB,0x4C,0xB4,0xA0,0xEA,0x28,0xDA,0xFE,0x84,0xC1,0x84,0x00,
+0x10,0x60,0x80,0xFC,0x10,0x60,0x81,0x00,0x10,0x00,0x80,0x90,0xB8,0x00,0x8E,0x07,
+0xE6,0x02,0xE8,0x08,0xEA,0x5E,0xEA,0x5D,0xEB,0x00,0xEA,0x43,0xB4,0x01,0xEA,0xF3,
+0xB6,0x01,0x84,0x01,0xEA,0x55,0xB8,0x00,0x8E,0x02,0xE6,0x04,0xE8,0x05,0xFA,0x38,
+0xDD,0x43,0x10,0x10,0x00,0xD8,0xB8,0x00,0x5A,0x08,0x02,0x05,0x84,0x03,0x49,0x00,
+0x08,0xB8,0xB8,0x00,0x5A,0x08,0x06,0x07,0x44,0x10,0xFF,0xEE,0xDD,0x43,0x14,0x10,
+0x00,0xAD,0xFC,0x80,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,
+0xDD,0x45,0xDD,0x57,0xF8,0x07,0xC1,0x31,0x00,0x10,0x00,0x50,0x54,0x10,0x80,0xFE,
+0xEA,0xDF,0x04,0x10,0x00,0x15,0x92,0x30,0x96,0x48,0x83,0xFF,0x5A,0x18,0x33,0x26,
+0xEB,0x2C,0x8E,0x27,0xE6,0x22,0xE8,0x21,0x04,0x10,0x00,0x15,0x92,0x38,0x5A,0x18,
+0x11,0x05,0x3E,0x17,0xFD,0x06,0xD5,0x08,0x04,0x00,0x00,0x15,0x92,0x18,0x5A,0x08,
+0x22,0x04,0x3E,0x07,0xFD,0x06,0x2E,0x07,0xFD,0x06,0x5A,0x08,0x22,0x09,0xEA,0x48,
+0xEA,0x3F,0x83,0xFF,0x46,0x11,0x00,0x07,0xEA,0x70,0xD5,0x07,0x2E,0x07,0xFD,0x06,
+0x5A,0x08,0x11,0x04,0x84,0x01,0xEA,0xC8,0xDD,0x57,0x04,0x10,0x00,0x16,0x4E,0x00,
+0xFF,0xD4,0xC1,0x06,0x00,0x10,0x00,0x50,0x54,0x10,0x80,0xFD,0xEA,0xDF,0x04,0x00,
+0x00,0x17,0x5A,0x08,0xA5,0x11,0xFC,0x00,0x44,0x10,0x00,0x87,0xDD,0x57,0x14,0x10,
+0x00,0x17,0xF9,0x9A,0x84,0x00,0xEB,0x3E,0xEB,0x3A,0xEA,0x5C,0xEA,0x93,0xEA,0xCF,
+0xDD,0x50,0xD5,0xFD,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,
+0x58,0x00,0x01,0x00,0xDD,0x45,0xDD,0x9E,0xFC,0x00,0x46,0x01,0x00,0x07,0xDD,0x46,
+0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x30,0x00,0xDD,0x45,0xDD,0x57,0x04,0x10,
+0x00,0x3A,0x83,0xFF,0x42,0x10,0xE0,0x0B,0xC1,0x08,0x44,0x10,0x00,0x49,0x12,0x10,
+0x00,0x0E,0x84,0x20,0x12,0x10,0x00,0x0E,0x04,0x00,0x00,0x3A,0x42,0x00,0x68,0x0B,
+0xC0,0x04,0x84,0x02,0x49,0xFF,0xFC,0x36,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,
+0x00,0x07,0x96,0x00,0x58,0x00,0x31,0x00,0xDD,0x45,0xFC,0x80,0xFC,0x01,0x80,0xC0,
+0x46,0x09,0x00,0x20,0xA0,0x84,0xB6,0x46,0xA0,0x05,0xB6,0x01,0xB4,0x66,0x42,0x11,
+0xC4,0x0B,0xC9,0x04,0x42,0x21,0xC0,0x0B,0xD5,0x03,0x84,0x41,0x80,0x22,0x42,0x01,
+0xC8,0x0B,0xC0,0x03,0x84,0x41,0x84,0x22,0x42,0x01,0xCC,0x0B,0xC0,0x03,0x84,0x41,
+0x84,0x23,0x42,0x01,0xD0,0x0B,0xC0,0x03,0x84,0x40,0x80,0x22,0x42,0x31,0xD4,0x0B,
+0xC3,0x08,0xEA,0x24,0x96,0x00,0xDD,0x55,0x49,0xFF,0xCA,0x02,0x84,0x40,0x84,0x21,
+0xB4,0x06,0x42,0x00,0x58,0x0B,0xC0,0x18,0x3C,0x0D,0xFF,0x77,0x5A,0x08,0x01,0x13,
+0xDD,0x4B,0x5A,0x08,0x06,0x10,0x84,0x25,0x84,0x02,0xEA,0x8E,0x2E,0x17,0xFD,0x13,
+0x8C,0x21,0x96,0x48,0x3E,0x17,0xFD,0x13,0x8C,0x21,0x94,0x09,0x54,0x00,0x00,0xFE,
+0xEB,0x20,0x84,0x40,0x84,0x22,0xB4,0x06,0x84,0xC1,0x42,0x00,0x5C,0x0B,0xC0,0x07,
+0xDD,0x4D,0xFE,0x36,0xC0,0x19,0x80,0x06,0xEB,0x48,0xD5,0x16,0xC2,0x10,0x5A,0x18,
+0x02,0x0B,0xF1,0x81,0xEA,0x93,0xF1,0x01,0x80,0x01,0x44,0x10,0x07,0xD0,0x49,0xFF,
+0xFC,0x0F,0xD5,0x0C,0x80,0x06,0xEA,0x3B,0xEB,0x41,0xD5,0x08,0x5A,0x10,0x02,0x07,
+0x84,0x00,0xEA,0x3B,0xD5,0x03,0x84,0x23,0xD5,0xFC,0xFC,0x81,0xFC,0x20,0x46,0x60,
+0x00,0xCB,0x50,0x73,0x08,0x02,0xDD,0x52,0x80,0x27,0x84,0x00,0xEA,0x60,0x54,0x20,
+0x00,0x7F,0x80,0x27,0x84,0x00,0xDD,0x4C,0x50,0x13,0x08,0x05,0x84,0x00,0xEA,0x60,
+0x96,0x00,0x92,0x03,0xFC,0xA0,0xFC,0x40,0x46,0x60,0x00,0xCB,0x50,0xA3,0x08,0x05,
+0x80,0x2A,0x80,0xE0,0x84,0x00,0xEA,0x60,0x50,0x63,0x08,0x02,0x81,0x20,0xDD,0x52,
+0x80,0x26,0x84,0x00,0xEA,0x60,0x54,0x20,0x00,0x7F,0x80,0x26,0x84,0x00,0xDD,0x4C,
+0x54,0x24,0x80,0x07,0x40,0x21,0x1C,0x64,0x84,0x00,0x80,0x2A,0x96,0x90,0xDD,0x4C,
+0xFC,0xC0,0x2E,0x07,0xFF,0x88,0xC0,0x34,0xFC,0x00,0xEA,0x73,0xA1,0x83,0x49,0xFF,
+0xFF,0xC7,0x46,0x21,0x00,0x00,0x02,0x51,0x03,0x01,0x44,0x20,0xA5,0x5A,0x80,0x20,
+0xDA,0x09,0x46,0x21,0x00,0x00,0x00,0x51,0x06,0x00,0xD0,0x04,0x00,0x01,0x06,0x00,
+0xD5,0x1C,0x3C,0x2D,0xFF,0xE6,0xE2,0x46,0xE8,0x04,0xC0,0x12,0x8E,0x01,0xD5,0x08,
+0x3C,0x2D,0xFF,0xE7,0xE2,0xC2,0xE8,0x06,0xE6,0x1F,0xE8,0x0A,0x8C,0x01,0x96,0x40,
+0xD5,0x07,0x44,0x0F,0xA5,0x5A,0x46,0x21,0x00,0x00,0x12,0x01,0x03,0x01,0x46,0x01,
+0x00,0x00,0x10,0x10,0x06,0x00,0x80,0x01,0x49,0xFF,0xFF,0xAF,0xFC,0x80,0xDD,0x9E,
+0x46,0x09,0x00,0x90,0xEB,0x29,0x58,0x10,0x80,0x04,0xEB,0x07,0x84,0x20,0x10,0x10,
+0x00,0x68,0xEB,0x4B,0x54,0x10,0x80,0xFB,0xEA,0x61,0xDD,0x9E,0xC3,0x20,0xFC,0x00,
+0x3E,0x07,0xFF,0x88,0x3C,0x1F,0xFF,0xE3,0x46,0x50,0x00,0xF4,0x3C,0x2F,0xFF,0xE4,
+0x99,0x8A,0x3C,0x3F,0xFF,0xE5,0x8A,0x22,0x50,0x42,0x82,0x40,0x42,0x53,0x10,0x24,
+0xFF,0x0C,0x40,0x52,0x8C,0xB7,0x40,0x32,0x0C,0x77,0x3C,0x5F,0xFF,0xE6,0x3C,0x3F,
+0xFF,0xE7,0xC0,0x07,0x49,0xFF,0xFF,0xD6,0x84,0x00,0xD5,0x03,0xFA,0x00,0xDD,0x9E,
+0xFC,0x80,0x46,0x09,0x00,0x90,0xEB,0x29,0xEA,0xB3,0xEB,0x07,0x84,0x20,0x10,0x10,
+0x00,0x64,0xEB,0x4B,0x54,0x10,0x80,0xFD,0xEA,0x61,0xDD,0x9E,0x46,0x09,0x00,0x90,
+0xEB,0x29,0x58,0x10,0x80,0x01,0xEB,0x07,0x84,0x2F,0xEA,0x2F,0xEB,0x4B,0x54,0x10,
+0x80,0xFE,0xEA,0x61,0xDD,0x9E,0x3E,0x07,0xFD,0xE8,0x84,0x60,0x3E,0x37,0xFD,0xE9,
+0x3E,0x17,0xFD,0xEA,0x3E,0x17,0xFD,0xEB,0x3E,0x27,0xFD,0xEC,0xC0,0x07,0xFC,0x00,
+0x49,0xFF,0xFF,0xD9,0x49,0xFF,0xFF,0xE4,0xFC,0x80,0xDD,0x9E,0xFC,0x20,0x46,0x08,
+0x00,0x50,0x46,0x69,0x00,0x00,0x84,0xE0,0xB4,0x00,0x12,0x73,0x00,0x4C,0x46,0x00,
+0x00,0x0F,0x04,0x00,0x02,0xC0,0xEA,0x9B,0xC8,0x2F,0x3E,0x77,0xFF,0x88,0x44,0x10,
+0x01,0xF4,0x3C,0x1F,0xFF,0xE3,0x84,0x2A,0x3C,0x1F,0xFF,0xE4,0x44,0x10,0x02,0x58,
+0x3C,0x1F,0xFF,0xE5,0x46,0x10,0x00,0xCF,0x50,0x10,0x88,0x50,0x3C,0x1F,0xFF,0xE6,
+0x46,0x10,0x00,0xC7,0x50,0x10,0x86,0x1A,0x3C,0x1F,0xFF,0xE7,0x44,0x10,0x00,0x80,
+0x84,0x45,0x49,0xFF,0xFF,0xC2,0x49,0xFF,0xFD,0x79,0x49,0x00,0x05,0x44,0x84,0x09,
+0xEB,0x3E,0xEB,0x3A,0xEA,0x5C,0xEA,0x4A,0xC8,0x07,0x44,0x10,0x00,0xDA,0x12,0x13,
+0x00,0x1A,0x12,0x13,0x00,0x1E,0xFC,0xA0,0x2E,0x07,0xFD,0xE8,0xC0,0x09,0x46,0x19,
+0x00,0x90,0xA6,0x08,0xEA,0x37,0xAE,0x08,0x84,0x01,0x3E,0x07,0xFD,0xE9,0xDD,0x9E,
+0x2E,0x07,0xFD,0xE8,0xC0,0x10,0xEB,0x2C,0xEA,0x73,0x5A,0x18,0x08,0x09,0xA0,0x41,
+0x84,0x20,0x3E,0x17,0xFD,0xE9,0x00,0x00,0x00,0x60,0xD5,0x05,0xA0,0x02,0x84,0x00,
+0x3E,0x07,0xFD,0xE9,0x84,0x00,0xDD,0x9E,0x46,0x28,0x00,0x20,0x02,0x11,0x00,0x9C,
+0x02,0x31,0x00,0x0A,0x02,0x01,0x00,0x0A,0x8A,0x23,0x96,0x4B,0x8E,0x09,0x96,0x01,
+0x9E,0xC9,0x12,0x01,0x00,0x94,0x84,0x80,0x46,0x09,0x00,0x68,0x96,0xD9,0xAF,0x00,
+0xAC,0xC2,0x10,0x40,0x00,0x08,0x84,0x83,0x10,0x40,0x00,0x0C,0x02,0x41,0x00,0x9A,
+0x46,0x22,0x00,0x00,0x40,0x21,0x10,0x56,0x8C,0x41,0x90,0x41,0xA8,0x85,0xEA,0xED,
+0x10,0x20,0x00,0x20,0x46,0x20,0x40,0x00,0x40,0x11,0x04,0x36,0x8C,0x21,0x90,0x21,
+0x14,0x10,0x00,0x09,0x84,0x21,0x12,0x30,0x00,0x14,0xAE,0x40,0xDD,0x9E,0x00,0x00,
+0xFC,0x01,0x3F,0xCF,0xFD,0xD8,0xF1,0x81,0xBA,0x00,0xBA,0x82,0xB8,0x80,0xB6,0x1F,
+0x2E,0x27,0xFF,0xA2,0x92,0x47,0x3E,0x27,0xFF,0x88,0x84,0x41,0x3E,0x27,0xFD,0x0D,
+0x3E,0x27,0xFD,0x0B,0x49,0xFF,0xFD,0x02,0xF1,0x01,0xB4,0x1F,0xC1,0x03,0x49,0xFF,
+0xF3,0x35,0xB8,0x00,0x9E,0x42,0xE6,0x27,0xE8,0x20,0x3E,0xFF,0xE0,0x50,0x38,0x17,
+0x84,0x00,0x40,0xF0,0xBC,0x00,0xDD,0x0F,0x08,0x08,0x08,0x08,0x16,0x1E,0x26,0x00,
+0xEB,0x4A,0xEA,0x74,0x2E,0x27,0xFD,0x79,0x84,0x20,0xE2,0x22,0xD5,0x0C,0x84,0x26,
+0xEA,0x74,0x85,0xE2,0xD5,0x08,0xEB,0x4A,0xEA,0x74,0x85,0xE0,0xD5,0x04,0x84,0x26,
+0xEA,0x74,0x85,0xE1,0x3C,0xFF,0xFF,0x7C,0xEA,0xF4,0xEA,0x8B,0xC1,0x03,0x84,0x22,
+0xB9,0x81,0xB9,0x06,0x49,0xFF,0xFB,0x42,0xC8,0x2F,0xB9,0x00,0x8E,0x27,0xE6,0x22,
+0xE8,0x25,0x46,0x11,0x00,0x07,0x04,0x50,0x83,0xC4,0x46,0x1A,0x55,0xAA,0x50,0x10,
+0x85,0x5A,0xD1,0x1C,0x2E,0x17,0xFF,0xA3,0xEB,0x34,0xC9,0x18,0x46,0x01,0x00,0x07,
+0xEA,0x63,0xEA,0x48,0xEA,0x3F,0xD8,0x06,0x44,0x11,0xFF,0x00,0xDD,0x57,0x14,0x10,
+0x00,0x30,0x84,0x05,0xEA,0x55,0xEA,0x93,0x84,0x20,0xDD,0x43,0xEA,0xF1,0x44,0x10,
+0x07,0xD0,0x84,0x02,0x49,0xFF,0xFA,0x3C,0xD5,0x07,0xB6,0x1F,0x49,0xFF,0xFF,0x5E,
+0x49,0xFF,0xFC,0xFA,0xB4,0x1F,0xFC,0x81,0x92,0x00,0x46,0x18,0x00,0x20,0x50,0x10,
+0x85,0xC8,0xA6,0x88,0xDD,0x43,0xCA,0xFE,0xFC,0x00,0x84,0x21,0x10,0x10,0x02,0xA0,
+0xEB,0x2C,0x5A,0x18,0x07,0x0C,0x46,0x10,0x00,0x0D,0x02,0x10,0x82,0x6C,0xEA,0xF1,
+0x46,0x10,0x00,0x0D,0x02,0x10,0x82,0x6D,0xD5,0x0C,0x5A,0x18,0x08,0x0D,0x46,0x10,
+0x00,0x0D,0x02,0x10,0x83,0x42,0xEA,0xF1,0x46,0x10,0x00,0x0D,0x02,0x10,0x83,0x43,
+0x12,0x10,0x00,0xB6,0xEA,0x28,0x02,0x00,0x82,0xB8,0x02,0x10,0x80,0xB6,0x49,0xFF,
+0xC5,0x86,0xEA,0x9B,0xFC,0x80,0x46,0x08,0x00,0x20,0x00,0x10,0x00,0xF8,0xEB,0x4C,
+0xEA,0xB3,0x10,0x10,0x7D,0xBC,0xEA,0xC1,0xEA,0x7F,0xB4,0xA0,0xD9,0xFF,0xDD,0x9E,
+0xC0,0x04,0xFC,0x00,0xEA,0x5E,0xFC,0x80,0xEA,0x3E,0x04,0x00,0x80,0x30,0x66,0x00,
+0x00,0x01,0x14,0x00,0x80,0x30,0xDD,0x9E,0xFC,0x21,0x3F,0xCF,0xFD,0xD8,0x46,0x01,
+0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x50,0x00,0xDD,0x45,
+0x46,0x69,0x00,0x20,0x04,0x03,0x00,0x0A,0xB6,0x1F,0xB4,0x1F,0xEB,0x12,0xB6,0x1F,
+0xF0,0x81,0xF0,0x01,0x66,0x00,0x00,0x04,0xF0,0x81,0xB6,0x1F,0xB4,0x3F,0x84,0x00,
+0x49,0x00,0x04,0x9B,0x80,0x1F,0xB0,0x41,0x49,0xFF,0xFD,0x62,0xB4,0x1F,0x42,0x00,
+0x2C,0x0B,0xC0,0x19,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,
+0x58,0x00,0x51,0x00,0xDD,0x45,0xB4,0x06,0x66,0x00,0x08,0x00,0xB6,0x06,0xB8,0x00,
+0x8E,0x07,0xE6,0x02,0xE8,0x08,0x84,0x00,0x49,0xFF,0xFF,0xBC,0xEA,0x5D,0x84,0x21,
+0x10,0x10,0x00,0xA0,0xB4,0x1F,0x42,0x00,0x28,0x0B,0xC0,0x33,0x46,0x01,0x00,0x07,
+0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x52,0x00,0xDD,0x45,0xEA,0x43,
+0xB4,0x01,0x66,0x00,0x04,0x00,0xB6,0x01,0xB8,0x00,0x5A,0x08,0x02,0x09,0xEA,0xDC,
+0x5A,0x08,0x01,0x06,0x84,0x06,0xB8,0x80,0x84,0x04,0xD5,0x0A,0xEA,0xDC,0xC8,0x0A,
+0xB8,0x00,0x8E,0x03,0xE6,0x03,0xE8,0x06,0x84,0x02,0xB8,0x80,0x84,0x03,0x49,0x00,
+0x05,0x40,0xB8,0x01,0x5A,0x08,0x02,0x0E,0xB8,0x00,0x5A,0x08,0x06,0x05,0xB8,0x02,
+0x5A,0x00,0x02,0x04,0x2E,0x07,0xFD,0x03,0x49,0xFF,0xFD,0x8F,0x84,0x00,0xB8,0x81,
+0xB4,0x1F,0x42,0x00,0x4C,0x0B,0xC0,0x0D,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,
+0x00,0x07,0x96,0x00,0x58,0x00,0x53,0x00,0xDD,0x45,0x84,0x00,0x49,0xFF,0xFF,0x72,
+0xF0,0x01,0x42,0x00,0x38,0x0B,0xC0,0x04,0x49,0xFF,0xF8,0xF4,0xD5,0x07,0xF0,0x01,
+0x42,0x00,0x3C,0x0B,0xC0,0x03,0x49,0xFF,0xF8,0xF7,0xF0,0x01,0x84,0xC1,0x42,0x00,
+0x0C,0x0B,0xC0,0x16,0xDD,0x43,0x00,0x00,0x03,0x40,0xB9,0x00,0x96,0x00,0x5A,0x18,
+0x06,0x10,0x54,0x00,0x00,0xFB,0xC8,0x0C,0xB8,0x01,0x5A,0x00,0x02,0x0A,0x84,0x25,
+0x84,0x02,0xEA,0x8E,0x3E,0x67,0xFD,0x13,0x84,0x04,0xEB,0x20,0xBE,0x81,0xF6,0x01,
+0x84,0xE1,0x42,0x63,0x04,0x0B,0x4E,0x62,0x00,0x39,0x46,0x01,0x00,0x07,0xDD,0x46,
+0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x54,0x00,0xDD,0x45,0x84,0x00,0x80,0x27,
+0xEA,0xAB,0x49,0xFF,0xF9,0x5D,0x84,0x0E,0xDD,0x40,0xC0,0x04,0x49,0xFF,0xC4,0x71,
+0xD5,0x20,0xFA,0x02,0xDD,0x40,0xC8,0xFB,0xFA,0x06,0xDD,0x40,0xC8,0xF8,0x84,0x0A,
+0xDD,0x40,0xC8,0xF5,0xFA,0x0A,0xDD,0x40,0xC8,0xF2,0xFA,0x13,0xDD,0x40,0xC8,0xEF,
+0xFA,0x0E,0xDD,0x40,0xC8,0xEC,0xFA,0x18,0xDD,0x40,0xC8,0xE9,0xFA,0x1C,0xDD,0x40,
+0xC8,0xE6,0xDD,0x47,0xDD,0x40,0xC8,0xE3,0x84,0x07,0x84,0x21,0x49,0xFF,0xFE,0x62,
+0x84,0x00,0x3E,0x07,0xFF,0x87,0xD5,0x24,0xF0,0x01,0xEA,0xA3,0xC0,0x21,0x46,0x01,
+0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x55,0x00,0xDD,0x45,
+0x3E,0x67,0xFD,0x0F,0x80,0x26,0x3E,0x67,0xFD,0x14,0x80,0x06,0xEA,0xAB,0x49,0xFF,
+0xF9,0x1F,0x80,0x27,0x2E,0x07,0xFF,0xA6,0x49,0xFF,0xFE,0x44,0xDD,0x52,0x46,0x10,
+0x00,0xBC,0x80,0x06,0x8C,0x21,0x84,0x46,0xDD,0x4C,0x3E,0x77,0xFF,0x87,0x46,0x01,
+0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,0x58,0x00,0x56,0x00,0xDD,0x45,
+0xFC,0xA1,0xFC,0x00,0xE6,0x04,0xE8,0x03,0x8E,0x01,0xD5,0x1B,0x5A,0x00,0x04,0x04,
+0x5A,0x08,0x08,0x14,0x84,0x00,0x46,0x11,0x00,0x05,0x58,0x10,0x88,0x88,0x84,0x44,
+0xF8,0x17,0xEA,0x24,0xC0,0x16,0x2E,0x07,0xFD,0x6F,0x3E,0x07,0xFD,0x71,0x8C,0x01,
+0x96,0x04,0x3E,0x07,0xFD,0x6F,0xD5,0x0D,0x8E,0x05,0x96,0x40,0xE6,0x23,0xE8,0x09,
+0x84,0x23,0x40,0x10,0x04,0x16,0x84,0x44,0x96,0x00,0xEB,0x5A,0xEA,0x77,0xEA,0x7D,
+0xFC,0x80,0xFC,0x00,0x54,0x10,0x00,0xFB,0x5A,0x10,0x03,0x04,0x48,0x00,0x00,0x71,
+0xF8,0x75,0xB4,0xA2,0xDD,0x43,0xD9,0xFE,0xEB,0x0F,0x44,0x10,0xFE,0xFF,0x83,0xFF,
+0xF8,0x03,0x44,0x10,0xFD,0xFF,0xFE,0x56,0xEA,0x32,0xEB,0x0F,0x83,0xFF,0x44,0x10,
+0xFB,0xFF,0x4E,0x00,0xFF,0xFA,0x44,0x10,0xF7,0xFF,0xFE,0x56,0xEA,0x32,0x83,0xFF,
+0xFA,0x20,0xEA,0x61,0x10,0x10,0x00,0x48,0xEB,0x2D,0x2E,0x17,0xFD,0x6F,0xC1,0x22,
+0x5A,0x10,0x01,0x03,0xF8,0x51,0xEB,0x6D,0x02,0x51,0x06,0x8E,0xEB,0x6D,0x02,0x41,
+0x06,0x8F,0xEB,0x6D,0x02,0x31,0x06,0x8D,0xEB,0x6D,0x02,0x21,0x06,0x8B,0xF8,0x1E,
+0xEB,0x6D,0x04,0x21,0x03,0x37,0x83,0x80,0xBA,0x8E,0x84,0x40,0x10,0x20,0x02,0x38,
+0x46,0x20,0x08,0x09,0x50,0x21,0x0A,0x12,0xBA,0x8E,0x50,0x00,0x01,0x9C,0xAE,0x40,
+0xD5,0x2A,0xEB,0x6D,0x02,0x51,0x05,0xB8,0xEB,0x6D,0x02,0x41,0x05,0xB9,0xEB,0x6D,
+0x02,0x31,0x05,0xB7,0xEB,0x6D,0x02,0x21,0x05,0xB5,0x12,0x50,0x00,0x9C,0x12,0x40,
+0x00,0x0A,0x12,0x30,0x00,0x9A,0x12,0x20,0x00,0x8A,0x83,0xFF,0xEB,0x6D,0x04,0x21,
+0x02,0xCC,0x83,0x80,0xBA,0x8E,0xEA,0x75,0x46,0x10,0x08,0x09,0x50,0x10,0x8A,0x12,
+0xB9,0x8E,0x84,0x21,0x10,0x10,0x01,0x9C,0x50,0x00,0x01,0x9C,0xA6,0x40,0x5A,0x10,
+0x01,0xFF,0xF8,0x04,0xA6,0x40,0x5A,0x10,0x01,0xFF,0x48,0x00,0x00,0x6F,0x5A,0x00,
+0x04,0x06,0x5A,0x00,0x08,0x04,0x48,0x00,0x00,0x6B,0x46,0x28,0x00,0x20,0xEA,0xC1,
+0x50,0x21,0x03,0x3C,0xEA,0x7F,0x83,0xFF,0xB4,0xA2,0xDD,0x43,0xD9,0xFE,0x83,0x80,
+0xB9,0x0E,0x42,0x10,0xD4,0x09,0xB9,0x8E,0xEB,0x23,0xC9,0x24,0xEB,0x5D,0x00,0x30,
+0x8B,0x8D,0xEB,0x5D,0x00,0x20,0x8B,0x8E,0xEB,0x5D,0x00,0x10,0x8B,0x8F,0xF8,0x23,
+0xEB,0x5D,0x02,0x40,0x85,0xB8,0xEB,0x5D,0x02,0x30,0x85,0xB9,0xEB,0x5D,0x02,0x20,
+0x85,0xB7,0xEB,0x5D,0x02,0x10,0x85,0xB5,0xF8,0x28,0xEB,0x5D,0x04,0x10,0x82,0xCC,
+0xEB,0x1A,0xEB,0x5D,0x02,0x10,0x85,0xB6,0xEA,0x32,0xEB,0x5D,0x00,0x10,0x8B,0x8B,
+0xD5,0x30,0xEB,0x5D,0x00,0x30,0x8D,0x39,0xEB,0x5D,0x00,0x20,0x8D,0x3A,0xEB,0x5D,
+0x00,0x10,0x8D,0x3B,0x10,0x30,0x00,0x44,0x10,0x20,0x00,0x48,0xEB,0x2D,0x83,0xFF,
+0xEB,0x5D,0x02,0x40,0x86,0x8E,0xEB,0x5D,0x02,0x30,0x86,0x8F,0xEB,0x5D,0x02,0x20,
+0x86,0x8D,0xEB,0x5D,0x02,0x10,0x86,0x8B,0x12,0x40,0x00,0x9C,0x12,0x30,0x00,0x0A,
+0x12,0x20,0x00,0x9A,0x12,0x10,0x00,0x8A,0x83,0xFF,0xEB,0x5D,0x04,0x10,0x83,0x37,
+0xEB,0x1A,0xEB,0x5D,0x02,0x10,0x86,0x8C,0xEA,0x32,0xEB,0x5D,0x00,0x10,0x8D,0x37,
+0xEA,0x75,0x84,0x21,0x10,0x10,0x01,0x9C,0x49,0xFF,0xFC,0xF0,0xFC,0x80,0x00,0x00,
+0xFC,0x20,0x3F,0xCF,0xFD,0xD8,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,
+0x96,0x00,0x58,0x00,0x10,0x00,0xDD,0x45,0xDD,0x43,0x84,0x20,0x10,0x10,0x00,0x88,
+0x00,0x60,0x03,0x40,0xEA,0x69,0x97,0xB0,0xEB,0x18,0xC0,0x0B,0xB8,0x00,0x5A,0x08,
+0x06,0x09,0x84,0x22,0x84,0x00,0xEA,0x3B,0x84,0x02,0xEB,0x20,0x84,0x00,0xB8,0x81,
+0xDD,0x4B,0x8E,0x02,0xE6,0x07,0x4E,0xF2,0x01,0xA2,0x3E,0xFF,0xE6,0x20,0x38,0x07,
+0x81,0x01,0x40,0xF0,0x3C,0x00,0xDD,0x0F,0x0E,0x00,0x32,0x03,0x32,0x03,0x32,0x03,
+0x7C,0x01,0xAA,0x01,0x6E,0x02,0xDD,0x57,0x04,0x10,0x00,0x3A,0x9F,0xF1,0xEA,0xD7,
+0x84,0x01,0xC1,0x09,0x46,0x11,0x00,0x07,0xEA,0xD4,0x40,0x00,0x1C,0x0C,0x40,0x00,
+0x80,0x12,0xD5,0x08,0x46,0x11,0x00,0x07,0xEA,0xD4,0x40,0x00,0x1C,0x0C,0xFE,0x0F,
+0x96,0x01,0x46,0x11,0x00,0x07,0xEA,0x95,0x46,0x01,0x00,0x07,0x02,0x10,0x07,0xF4,
+0x44,0x00,0xDF,0xFF,0xFE,0x0E,0x46,0x11,0x00,0x07,0xEA,0x95,0xEA,0xD4,0x44,0x00,
+0xBF,0xFF,0xFE,0x0E,0x46,0x11,0x00,0x07,0xEA,0x95,0x02,0x00,0x87,0xF4,0x54,0x00,
+0x7F,0xFF,0xEA,0x95,0x84,0x00,0x3E,0x07,0xFF,0x86,0x84,0x0E,0xDD,0x40,0xC0,0x05,
+0x80,0x06,0x49,0xFF,0xC0,0x09,0xEA,0x6C,0xFA,0x02,0xDD,0x40,0xC8,0xFA,0xFA,0x06,
+0xDD,0x40,0xC8,0xF7,0x5A,0x60,0x01,0x04,0x48,0x00,0x01,0x53,0xDD,0x43,0x84,0x22,
+0xEA,0x58,0x84,0x23,0xEA,0x47,0xEA,0x42,0xE6,0x01,0xEA,0x66,0x97,0xF8,0xE6,0xE8,
+0xE8,0x04,0x80,0x06,0x49,0xFF,0xFE,0x6F,0x9E,0x33,0xE6,0x02,0xE9,0x08,0x9E,0x37,
+0xE6,0x02,0xE9,0x05,0x5A,0x60,0x08,0x03,0xEA,0x6C,0xD5,0x0F,0x80,0x06,0x49,0xFF,
+0xFE,0x8A,0x5A,0x60,0x04,0x05,0x5A,0x60,0x08,0x03,0xEA,0x6C,0xB8,0x00,0x49,0xFF,
+0xF1,0x4D,0x5A,0x60,0x04,0x13,0xD5,0xEF,0x84,0x01,0x44,0x10,0x04,0xA6,0xEA,0x8E,
+0x2E,0x07,0xFD,0x0F,0xC8,0x1A,0xEA,0x73,0xA6,0x40,0xEA,0xB3,0xAE,0x40,0xA6,0x40,
+0x58,0x10,0x80,0x04,0xAE,0x40,0xD5,0x11,0xEA,0x24,0x96,0x00,0xDD,0x55,0x49,0xFF,
+0xC4,0xD7,0xEA,0xDC,0x5A,0x00,0x01,0x04,0x48,0x00,0x00,0x4A,0xEA,0x43,0xB4,0x01,
+0x58,0x00,0x04,0x00,0xB6,0x01,0xD5,0x43,0x2E,0x07,0xFD,0x0F,0x8C,0x01,0x96,0x00,
+0xE6,0x04,0xE8,0x03,0xEA,0xD6,0xD5,0x3B,0x84,0x00,0xEA,0xD6,0xDD,0x43,0x00,0x10,
+0x03,0x20,0x5A,0x10,0x10,0x06,0x00,0x10,0x03,0x20,0x5A,0x18,0x06,0x31,0xEA,0xC1,
+0xEB,0x4C,0xEA,0x7F,0xB4,0xA0,0xD9,0xFF,0x46,0x19,0x00,0x90,0xA6,0x08,0xC8,0xFF,
+0x49,0xFF,0xFB,0x21,0xEA,0x69,0xEB,0x18,0xC0,0x09,0x2E,0x0F,0xFF,0xA2,0x4E,0x04,
+0x00,0x06,0x49,0xFF,0xFA,0xE5,0x3E,0x07,0xFD,0x03,0x49,0xFF,0xFB,0xF3,0xC0,0x17,
+0x48,0x00,0x00,0xE5,0x8E,0xC1,0xE6,0xC2,0x4E,0xF2,0x00,0xCE,0xDD,0x43,0x84,0x22,
+0xEA,0x58,0x84,0x23,0xEA,0x47,0xEA,0x42,0xE6,0x01,0xEA,0x66,0x84,0x44,0x84,0x00,
+0xEB,0x5A,0xEA,0x77,0xEA,0x7D,0xEA,0x24,0x96,0x00,0xDD,0x55,0x49,0xFF,0xB6,0x6C,
+0xEA,0x6C,0x5A,0x68,0x01,0x0A,0xDD,0x43,0x84,0x22,0xEA,0x58,0x84,0x23,0xEA,0x47,
+0xEA,0x42,0xE6,0x01,0xEA,0x66,0xDD,0x43,0x84,0x21,0x10,0x10,0x00,0xBC,0x50,0x00,
+0x00,0xBC,0xA6,0x40,0xC9,0xFF,0xEA,0x57,0xE6,0x03,0xEA,0x57,0xE9,0x0C,0x8E,0x02,
+0xE0,0xC0,0xE9,0x11,0xEA,0x57,0xE2,0x06,0xE9,0x0E,0x2E,0x17,0xFD,0x0E,0x9C,0x32,
+0x8A,0x01,0xD5,0x04,0xE2,0x06,0xE9,0x07,0x9E,0x31,0x96,0x00,0xEB,0x5A,0xEA,0x77,
+0x84,0x44,0xEA,0x7D,0xEA,0x57,0x4C,0x60,0x40,0x35,0x84,0xC1,0xDD,0x43,0x12,0x60,
+0x02,0xE0,0xEA,0x24,0x96,0x00,0xDD,0x55,0xEA,0x5E,0xEA,0x5D,0xEB,0x00,0xEA,0x43,
+0xB4,0x01,0xEA,0xF3,0xB6,0x01,0x2E,0x07,0xFF,0x86,0xE6,0x09,0xE9,0x04,0x84,0x04,
+0xEA,0x55,0xD5,0x02,0xEB,0x41,0x46,0x60,0x00,0xD8,0x50,0x63,0x0C,0x0D,0x80,0x26,
+0x44,0x20,0x00,0xAA,0x84,0x00,0xDD,0x4C,0x44,0x00,0x02,0xBC,0xDD,0x50,0x84,0x00,
+0x80,0x26,0x44,0x20,0x00,0xBA,0xDD,0x4C,0x2E,0x07,0xFF,0x86,0xE6,0x14,0xE8,0x04,
+0x8C,0x01,0x3E,0x07,0xFF,0x86,0xEA,0xA5,0x4E,0x02,0x00,0x5E,0x84,0x01,0xD5,0x02,
+0x84,0x02,0xEA,0x55,0xEA,0x6C,0xEA,0x82,0x4C,0x60,0x40,0x56,0x49,0xFF,0xFB,0x66,
+0x2E,0x17,0xFD,0x15,0xDD,0x43,0x5A,0x10,0x01,0x05,0x84,0x22,0x10,0x10,0x00,0xB4,
+0x84,0xC1,0x84,0x22,0x10,0x60,0x01,0xCC,0xEA,0x58,0x84,0x23,0xEA,0x47,0xEA,0x5E,
+0xEA,0x5D,0xEB,0x00,0xEA,0x43,0xB4,0x01,0xEA,0xF3,0xB6,0x01,0xEA,0x82,0x5A,0x08,
+0x01,0x18,0xB8,0x00,0x5A,0x08,0x08,0x15,0x46,0x60,0x00,0xD8,0x50,0x63,0x0C,0x0D,
+0x49,0xFF,0xFC,0x3B,0x80,0x26,0x44,0x20,0x00,0xAA,0x84,0x00,0xDD,0x4C,0x44,0x00,
+0x02,0xBC,0xDD,0x50,0x84,0x00,0x80,0x26,0x44,0x20,0x00,0xBA,0xDD,0x4C,0xEA,0x42,
+0xE6,0x01,0xEA,0x66,0x84,0x44,0x84,0x00,0xEB,0x5A,0xEA,0x77,0xEA,0x7D,0xEA,0x82,
+0x5A,0x00,0x01,0x0E,0xDD,0x43,0x84,0x21,0x10,0x10,0x00,0xBC,0x50,0x10,0x00,0xBC,
+0xA6,0x08,0x96,0x00,0xC8,0xFE,0xEA,0x28,0x10,0x00,0x80,0xB4,0xDD,0x43,0x84,0xC1,
+0x12,0x60,0x02,0xE0,0xEA,0x24,0x96,0x00,0xDD,0x55,0x84,0x04,0xEA,0x55,0xEA,0xA5,
+0xC0,0x02,0xEB,0x41,0x46,0x01,0x00,0x07,0xDD,0x46,0x46,0x11,0x00,0x07,0x96,0x00,
+0x58,0x00,0x11,0x00,0xDD,0x45,0x84,0x00,0xD5,0x09,0xFA,0x02,0xD5,0x07,0x5A,0x60,
+0x05,0x04,0x48,0xFF,0xFE,0xB5,0x48,0xFF,0xFE,0xB0,0xFC,0xA0,0xFC,0x00,0x84,0x00,
+0xEB,0x48,0x2E,0x27,0xFF,0xF0,0x84,0x2A,0xFE,0x54,0x84,0x03,0xEA,0x8E,0xFC,0x80,
+0x2E,0x07,0xFF,0x87,0xDD,0x9E,0x8E,0x01,0xC0,0x03,0xEA,0x6E,0xD5,0xFD,0xDD,0x9E,
+0xFC,0x01,0x10,0x0F,0x80,0x07,0x10,0x1F,0x80,0x06,0x46,0x08,0x00,0x30,0x84,0x20,
+0x10,0x2F,0x80,0x05,0x10,0x10,0x00,0x0C,0x10,0x10,0x00,0x10,0x84,0x21,0x10,0x10,
+0x00,0x14,0x00,0x1F,0x80,0x07,0x96,0x48,0x10,0x10,0x00,0x34,0x00,0x1F,0x80,0x06,
+0x96,0x48,0x10,0x10,0x00,0x38,0x00,0x1F,0x80,0x05,0x96,0x48,0x10,0x10,0x00,0x3C,
+0xFC,0x81,0x84,0x00,0x46,0x21,0x00,0x05,0x58,0x21,0x0A,0x38,0x96,0x40,0x38,0x11,
+0x00,0x08,0x50,0x30,0x00,0x6C,0x56,0x10,0x80,0x80,0x8C,0x01,0x38,0x11,0x0C,0x08,
+0x5A,0x08,0x6C,0xF6,0xDD,0x9E,0x46,0x38,0x00,0x30,0xA6,0x98,0x46,0x18,0x00,0x30,
+0x96,0x90,0x83,0xFF,0xCA,0xFB,0xFA,0x6C,0x10,0x20,0x81,0xB4,0xAE,0xCC,0x10,0x00,
+0x80,0xC4,0x84,0x05,0x10,0x20,0x80,0x18,0x10,0x20,0x81,0x18,0x10,0x00,0x80,0x0C,
+0x84,0x01,0xEA,0xFB,0x83,0xFF,0xDD,0x9E,0x46,0x08,0x00,0x30,0x14,0x10,0x00,0x32,
+0x44,0x1F,0xFF,0xD8,0x10,0x10,0x00,0x34,0x10,0x10,0x00,0x38,0x84,0x20,0x10,0x10,
+0x00,0xC0,0x46,0x11,0x00,0x05,0x58,0x10,0x8A,0x38,0x12,0x10,0x00,0x5C,0x96,0x91,
+0x84,0x21,0x12,0x20,0x00,0x5E,0xAE,0x40,0xA6,0x40,0xC9,0xFF,0xDD,0x9E,0x46,0x19,
+0x00,0x28,0x10,0x00,0x80,0x68,0xDD,0x9E,0x96,0x00,0x46,0x19,0x00,0x28,0x10,0x00,
+0x80,0x60,0xDD,0x9E,0x46,0x08,0x00,0x20,0x00,0x00,0x04,0xB4,0xDD,0x9E,0xE6,0x24,
+0xE8,0x09,0x94,0x4D,0xC0,0x03,0xEB,0x33,0xD5,0x03,0x46,0x09,0x00,0x10,0x88,0x20,
+0xB6,0x41,0xDD,0x9E,0xE6,0x24,0xE8,0x0C,0x94,0x4D,0x96,0x90,0xC0,0x04,0xEB,0x33,
+0x8C,0x10,0xD5,0x04,0x46,0x09,0x00,0x10,0x8C,0x08,0x88,0x20,0xAE,0x88,0xDD,0x9E,
+0xE6,0x24,0xE8,0x1C,0x94,0x4D,0xC0,0x10,0xEB,0x33,0x50,0x30,0x00,0x10,0x88,0x61,
+0x84,0x42,0xAE,0x98,0xA6,0x98,0x96,0x90,0xCA,0xFE,0x8C,0x0C,0x88,0x20,0xAE,0x88,
+0xA6,0x08,0xC8,0xFF,0xDD,0x9E,0x46,0x29,0x00,0x10,0x8C,0x48,0x88,0x22,0xAE,0x08,
+0x44,0x00,0x00,0x40,0xAE,0x08,0xA6,0x08,0xC8,0xFF,0xDD,0x9E,0x46,0x29,0x00,0x20,
+0xB6,0x02,0xA8,0x51,0xDD,0x9E,0x46,0x29,0x00,0x20,0x14,0x01,0x00,0x09,0x14,0x11,
+0x00,0x0A,0xDD,0x9E,0x46,0x18,0x00,0x60,0xB6,0x01,0xDD,0x9E,0x46,0x01,0x00,0x00,
+0xEA,0x4D,0xEB,0x04,0xD0,0x16,0x46,0x01,0x00,0x00,0xEA,0x4D,0x44,0x00,0xA3,0x3A,
+0xD0,0x10,0x46,0x01,0x00,0x00,0xEA,0x4D,0xEB,0x06,0xD0,0x0B,0x46,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x84,0x20,0x50,0x00,0x45,0x5D,0x40,0x00,0x80,0x06,0xDD,0x9E,
+0x84,0x00,0xDD,0x9E,0x46,0x01,0x00,0x00,0xEA,0x4D,0xEB,0x06,0xD0,0x07,0x46,0x01,
+0x00,0x00,0xEA,0x4D,0x44,0x00,0x3A,0xA3,0xD8,0x3F,0xEA,0x84,0xC0,0x3D,0xFC,0x20,
+0x49,0xFF,0xBB,0x81,0xEA,0xAE,0xEA,0x3C,0x84,0xA0,0x98,0x50,0x42,0x11,0x00,0x73,
+0x2E,0x00,0x00,0x02,0x46,0x31,0x00,0x00,0x58,0x31,0x80,0x04,0x88,0x20,0x3C,0x23,
+0xFE,0xC1,0x44,0x60,0x5A,0xA5,0x80,0x05,0xD1,0x11,0x46,0x41,0x00,0x00,0x02,0x42,
+0x00,0x00,0x4C,0x43,0x00,0x06,0x99,0x2A,0x40,0x42,0x04,0xF7,0xAD,0xD8,0x0A,0x41,
+0x80,0x01,0x8C,0xA1,0x88,0x04,0x96,0x01,0xD5,0xF0,0xFE,0x02,0x96,0x01,0xEB,0x5A,
+0x12,0x00,0x80,0x01,0x46,0x01,0x00,0x00,0xEA,0x4D,0xEB,0x06,0xD8,0x04,0x44,0x0F,
+0xA5,0x5A,0xD5,0x03,0x44,0x0F,0xA3,0x3A,0xEB,0x5A,0x12,0x00,0x80,0x00,0x8C,0x41,
+0x3C,0x2B,0xFE,0xC1,0xFC,0xA0,0xDD,0x9E,0xFC,0x00,0xF8,0x15,0x42,0x10,0x8C,0x0B,
+0xC9,0x08,0xF8,0x1C,0xC9,0x06,0x02,0x00,0x00,0x72,0x42,0x00,0x28,0x0B,0xC0,0x36,
+0xDD,0x4D,0x96,0x04,0xC0,0x08,0x46,0x09,0x00,0x28,0x84,0x21,0x10,0x10,0x00,0x68,
+0x84,0x22,0xEA,0x2F,0xDD,0x57,0x02,0x10,0x00,0x72,0x83,0xFF,0xEA,0xD7,0xC1,0x06,
+0x46,0x0E,0xBE,0xBE,0x50,0x00,0x0B,0xEB,0xD5,0x14,0x02,0x10,0x00,0x72,0xEB,0x34,
+0x83,0xFF,0xC1,0x06,0x46,0x0E,0xCE,0xCE,0x50,0x00,0x0C,0xEC,0xD5,0x0A,0x02,0x00,
+0x00,0x72,0x42,0x00,0x0C,0x0B,0xC0,0x07,0x46,0x0E,0xDE,0xDE,0x50,0x00,0x0D,0xED,
+0x49,0xFF,0xB3,0x00,0xDD,0x4D,0x96,0x04,0xC0,0x05,0xEA,0xA5,0xC0,0x03,0x49,0xFF,
+0xFE,0x8F,0x44,0x00,0x13,0x88,0x49,0xFF,0xB2,0xEA,0xFC,0x80,0xFC,0x00,0xEA,0x4A,
+0xDD,0x52,0xEA,0xCE,0x84,0x20,0x84,0x41,0xEA,0x3A,0x5A,0x08,0xEE,0x04,0x84,0x00,
+0xD5,0x20,0xEA,0xCE,0x84,0x20,0x84,0x41,0xEA,0x3A,0x5A,0x08,0xDE,0x04,0x84,0x01,
+0xD5,0x18,0xEA,0xCE,0x84,0x20,0x84,0x41,0xEA,0x3A,0x5A,0x08,0xCE,0x17,0x44,0x00,
+0x00,0xE8,0x84,0x20,0x84,0x46,0xEA,0x3A,0x5A,0x08,0x03,0x04,0x84,0x02,0xD5,0x09,
+0x44,0x00,0x00,0xE8,0x84,0x20,0x84,0x46,0xEA,0x3A,0x5A,0x08,0x04,0x07,0x84,0x03,
+0x46,0x11,0x00,0x07,0x12,0x00,0x80,0x40,0xEA,0x3E,0x46,0x21,0x00,0x07,0x04,0x00,
+0x80,0x34,0x00,0x21,0x00,0x80,0xFE,0x17,0x14,0x00,0x80,0x74,0xFC,0x80,0x5A,0x00,
+0x05,0x0B,0x5A,0x00,0x06,0x14,0x5A,0x08,0x03,0x29,0xF8,0x10,0x44,0x10,0xFF,0x00,
+0xF8,0x15,0xD5,0x1F,0xF8,0x0B,0x84,0x30,0xF8,0x11,0x46,0x13,0x11,0x50,0x50,0x10,
+0x8E,0x07,0xEA,0xCB,0x14,0x10,0x01,0x60,0xD5,0x14,0xDD,0x43,0x84,0x20,0xEB,0x31,
+0xEB,0x32,0x83,0xFF,0xEB,0x31,0xEB,0x32,0x84,0x3A,0x14,0x10,0x00,0xAD,0x84,0x27,
+0x10,0x10,0x02,0xAC,0x83,0xFF,0x46,0x10,0x03,0x10,0x50,0x10,0x80,0x31,0xEA,0xCB,
+0x84,0x21,0xDD,0x43,0x10,0x10,0x01,0xCC,0xDD,0x9E,0xFC,0x40,0xDD,0x52,0xF8,0x03,
+0xFA,0x72,0xDD,0x54,0xDD,0x53,0x84,0x20,0x84,0x4D,0x83,0xFF,0xFA,0x73,0xDD,0x54,
+0xEA,0xCF,0x49,0xFF,0xFE,0x22,0x84,0xE0,0x46,0x91,0x00,0x07,0x58,0x94,0x82,0x98,
+0xDD,0x53,0x84,0x20,0x84,0x41,0x83,0xFF,0x84,0x65,0xDD,0x54,0x50,0x33,0xFF,0xF3,
+0xDD,0x53,0x84,0x20,0x84,0x42,0x83,0xFF,0x96,0xD8,0xDD,0x54,0xDD,0x53,0x84,0x20,
+0x84,0x44,0x44,0x30,0x00,0x80,0xDD,0x54,0x44,0x60,0x00,0x64,0xEA,0x6E,0x8E,0xC1,
+0x97,0xB1,0xCE,0xFD,0xDD,0x53,0x80,0x26,0x84,0x44,0x80,0x66,0xDD,0x54,0xDD,0x53,
+0x80,0x26,0x84,0x45,0xEA,0x3A,0x38,0x04,0x9C,0x08,0x8C,0xE1,0x5A,0x78,0x0D,0xDA,
+0x44,0x00,0x72,0xC4,0x46,0x11,0x00,0x07,0x14,0x00,0x80,0xB1,0x84,0x41,0x80,0x26,
+0xDD,0x53,0x44,0x30,0x00,0x40,0xDD,0x54,0xDD,0x53,0x80,0x26,0x80,0x47,0xFA,0x70,
+0xDD,0x54,0xFC,0xC0,0xFC,0x00,0x84,0x22,0x80,0xC0,0x80,0x41,0xEA,0xD0,0x84,0x61,
+0xDD,0x54,0x84,0x67,0x40,0x31,0x98,0x64,0xEA,0xD0,0x84,0x22,0x84,0x45,0x96,0xD8,
+0xDD,0x54,0xFC,0x80,0x84,0x80,0xD5,0x2D,0x41,0x41,0x40,0x09,0x97,0x41,0x92,0x10,
+0x40,0x40,0xD0,0x37,0x96,0xD1,0x40,0x10,0xC0,0x08,0xFE,0x47,0x42,0x02,0x0C,0x24,
+0xE2,0x20,0xE8,0x09,0x9F,0x21,0x98,0x4A,0xE2,0x22,0xE9,0x05,0xE2,0x20,0xE8,0x03,
+0x9F,0x21,0x98,0x4A,0x9A,0x48,0x40,0x10,0xD0,0x17,0x40,0x00,0x40,0x08,0xFE,0x2F,
+0xFE,0xCC,0xE2,0x03,0xE8,0x09,0x98,0x02,0x9E,0x49,0xE2,0x02,0xE9,0x05,0xE2,0x03,
+0xE8,0x03,0x98,0x02,0x9E,0x49,0x9A,0x03,0x40,0x42,0x40,0x08,0xFE,0x67,0xDD,0x9E,
+0x3B,0xFF,0xFE,0xBC,0xFD,0x80,0xFD,0x91,0x83,0x84,0xCB,0x4D,0xE3,0xB2,0xE8,0x19,
+0x42,0x09,0x00,0x07,0x82,0xA0,0xC0,0x0D,0x41,0x29,0x00,0x0C,0x52,0x50,0x00,0x20,
+0x40,0x58,0x14,0x0D,0x41,0x18,0x80,0x0C,0x41,0x18,0x94,0x04,0x41,0x08,0x00,0x0C,
+0xFD,0x08,0x80,0x52,0x49,0xFF,0xFF,0xBA,0x82,0xC1,0x82,0x00,0x86,0xE0,0xD5,0x23,
+0xC2,0x28,0x42,0x09,0x00,0x07,0x82,0xA0,0xC8,0x04,0x8B,0xB2,0x86,0xE1,0xD5,0x14,
+0x52,0xF0,0x00,0x20,0x41,0x29,0x00,0x0C,0x80,0x52,0x40,0x48,0x3C,0x0D,0x40,0x58,
+0x80,0x0C,0x41,0x08,0x00,0x0C,0x40,0x02,0x90,0x04,0x40,0x18,0xBC,0x0D,0x49,0xFF,
+0xFF,0x9D,0x82,0xE1,0x82,0x20,0xFD,0x08,0x80,0x52,0x49,0xFF,0xFF,0x97,0x82,0xC1,
+0x51,0x00,0x00,0x00,0x4F,0xC2,0x00,0x53,0x86,0x20,0x41,0x08,0x54,0x0D,0xD5,0x4B,
+0x41,0x19,0x4A,0x17,0x84,0x20,0x84,0x00,0x4F,0xC2,0x00,0x4C,0xB7,0x9C,0x15,0x1E,
+0x00,0x01,0xD5,0x47,0xE3,0xB3,0xE9,0xF7,0x42,0x09,0x80,0x07,0x82,0xA0,0xC0,0x44,
+0x52,0x40,0x00,0x20,0x40,0x59,0x10,0x0D,0x40,0x29,0x80,0x0C,0xFE,0xAF,0x82,0x62,
+0x41,0x29,0x00,0x0C,0x40,0x38,0x10,0x0D,0x41,0x08,0x00,0x0C,0x40,0x08,0x80,0x0C,
+0x40,0x18,0x90,0x0D,0xFE,0x1F,0x49,0xFF,0xFF,0x69,0x82,0xC1,0x82,0x20,0x42,0x00,
+0xC8,0x69,0xE3,0xA1,0xE9,0x05,0x4C,0x18,0xC0,0x0C,0xE3,0x80,0xE8,0x09,0x51,0x6B,
+0x7F,0xFF,0x8A,0x33,0x40,0x30,0x48,0x01,0xE2,0x03,0x8A,0x2F,0x80,0x03,0x86,0xE0,
+0x4F,0xC2,0x00,0x15,0x40,0x08,0x00,0x01,0x40,0x18,0x84,0x01,0xE3,0x80,0x8A,0x2F,
+0x52,0x4A,0x80,0x20,0x41,0x10,0x90,0x0C,0x41,0x00,0x54,0x0D,0x41,0x08,0x44,0x04,
+0x41,0x10,0xD4,0x0D,0xB7,0x9C,0x15,0x1E,0x00,0x01,0x80,0x16,0x50,0x1B,0x80,0x00,
+0x3B,0xFF,0xFE,0x84,0xDD,0x9E,0xE3,0xF1,0xE9,0x03,0xE3,0x92,0xE9,0x09,0x86,0xC1,
+0x40,0x48,0x48,0x01,0x8B,0xB3,0xE3,0x84,0x8B,0xAF,0x82,0x04,0xD5,0x02,0x86,0xC0,
+0x86,0xE0,0x4F,0xC3,0xFF,0xE9,0xD5,0xEA,0xFC,0x42,0x95,0x09,0x92,0x95,0x40,0x70,
+0xAC,0x08,0x40,0x60,0x54,0x09,0xFF,0xF7,0x40,0x60,0x2C,0x08,0x47,0xC8,0x00,0x00,
+0x95,0x59,0x92,0xB5,0x40,0x91,0xAC,0x08,0x40,0x81,0x54,0x09,0x40,0x94,0xA0,0x04,
+0x40,0x81,0x2C,0x08,0xFE,0xCD,0x40,0xA1,0xF0,0x02,0x44,0x30,0x07,0xFF,0xC4,0x58,
+0x4C,0x32,0x00,0x75,0x40,0x73,0xF0,0x04,0x4E,0x52,0x00,0x87,0x4C,0x32,0x80,0x79,
+0x40,0x94,0xF0,0x04,0x14,0xAF,0x80,0x03,0x50,0x02,0xFC,0x02,0x99,0x20,0x42,0x23,
+0xA4,0x69,0x42,0x03,0x24,0x69,0x40,0x91,0x04,0x00,0xE3,0x21,0x40,0xA1,0xBC,0x00,
+0x42,0x23,0xA0,0x69,0x99,0xD0,0xE2,0xE0,0x89,0x2F,0xE3,0x2F,0x89,0x4F,0x89,0x23,
+0xE3,0x23,0x89,0x4F,0x42,0x03,0x20,0x69,0x99,0xF9,0xE2,0xE1,0x89,0x2F,0xE3,0x2F,
+0x40,0x15,0x3C,0x00,0xFF,0xC7,0x58,0x04,0x80,0x01,0x40,0x04,0x9C,0x1A,0xE4,0x20,
+0xE9,0x07,0x81,0xE0,0x98,0x00,0xE2,0x0F,0x98,0x49,0x88,0x2F,0x9F,0x21,0x04,0xAF,
+0x80,0x03,0x4E,0x47,0x00,0x71,0x52,0x52,0x07,0xFF,0x4E,0x57,0x00,0x46,0x50,0x00,
+0x04,0x00,0x5C,0xF0,0x04,0x00,0xE8,0x04,0x88,0x2F,0xE2,0x2F,0x88,0x8F,0x40,0x20,
+0x2C,0x09,0x96,0x94,0x9A,0x02,0x92,0x0B,0x40,0x20,0xD4,0x08,0xFE,0x17,0x94,0x49,
+0x92,0x2C,0x40,0x52,0x50,0x08,0xFE,0x6F,0x40,0x10,0xA8,0x04,0xFC,0xC2,0x40,0xF3,
+0x98,0x04,0xE8,0x19,0x40,0xF3,0x7C,0x09,0x99,0xFF,0x88,0xEF,0x99,0xB6,0xCF,0x05,
+0x80,0xE6,0x84,0xC0,0x50,0x42,0x7F,0xE0,0x42,0x03,0x80,0x07,0xC0,0x9E,0x9B,0x20,
+0x52,0x20,0x00,0x20,0x40,0x23,0x08,0x0D,0x40,0x63,0x00,0x0C,0x40,0x73,0x80,0x0C,
+0xFF,0xD7,0xD5,0x93,0xD3,0x15,0x80,0x2A,0xFC,0xC2,0xFF,0xF7,0x4C,0x7E,0x40,0x11,
+0xCD,0x06,0x40,0x24,0x84,0x08,0x40,0x21,0x20,0x04,0xC2,0x0A,0xDB,0x05,0x40,0x94,
+0xA0,0x04,0x4C,0x9E,0x40,0x06,0x84,0x00,0x46,0x17,0xFF,0x00,0xD5,0xCE,0x84,0x00,
+0x44,0x18,0x00,0x00,0xFC,0xC2,0x40,0x04,0xA0,0x04,0xC0,0xE6,0x40,0xF4,0x7C,0x09,
+0x89,0x29,0x89,0x2F,0x89,0x08,0x4E,0x93,0x00,0x06,0x81,0x28,0x85,0x00,0x50,0x52,
+0xFF,0xE0,0x42,0x04,0x80,0x07,0x4E,0x02,0xFF,0x6F,0x9B,0x68,0x52,0x20,0x00,0x20,
+0x40,0x24,0x08,0x0D,0x40,0x84,0x00,0x0C,0x40,0x94,0x80,0x0C,0x40,0x94,0x88,0x04,
+0x48,0xFF,0xFF,0x62,0x84,0xC0,0x52,0x32,0x00,0x01,0x5C,0xF1,0x80,0x20,0xE9,0x0A,
+0x80,0xC0,0x80,0x01,0x84,0x20,0x50,0x31,0xFF,0xE0,0xC0,0x04,0x5C,0xF1,0x80,0x20,
+0xE8,0x1A,0xC3,0x10,0x52,0x21,0x80,0x20,0x40,0x70,0x88,0x0C,0x40,0x50,0x08,0x0C,
+0x40,0x00,0x0C,0x0D,0x40,0x10,0x8C,0x0D,0xFE,0x3F,0xFF,0xAF,0xC6,0x03,0x58,0x00,
+0x00,0x01,0x50,0x00,0x04,0x00,0x5C,0xF0,0x04,0x00,0x88,0x2F,0x40,0x40,0xFC,0x09,
+0x48,0xFF,0xFF,0x77,0x84,0x00,0xD5,0xA0,0xFC,0x42,0x95,0x09,0x92,0x95,0x40,0x70,
+0xAC,0x08,0x40,0x60,0x54,0x09,0xFF,0xF7,0x40,0x60,0x2C,0x08,0x47,0xC8,0x00,0x00,
+0x95,0x59,0x92,0xB5,0x40,0x91,0xAC,0x08,0x40,0x81,0x54,0x09,0x40,0x94,0xA0,0x04,
+0x40,0x81,0x2C,0x08,0xFE,0xCD,0x40,0xA1,0xF0,0x02,0x44,0x30,0x07,0xFF,0x4E,0x42,
+0x00,0xC5,0x4C,0x32,0x00,0xEF,0x40,0x73,0xF0,0x04,0x4E,0x52,0x00,0xFB,0x4C,0x32,
+0x80,0xF3,0x40,0x94,0xF0,0x04,0x9B,0x25,0x50,0x42,0x03,0xFF,0x92,0xC1,0x40,0x13,
+0xFC,0x08,0xFF,0x8F,0x92,0xE1,0x40,0x24,0xC0,0x09,0x40,0x33,0x88,0xF7,0x40,0x14,
+0x80,0x13,0x42,0x50,0x8C,0x24,0x40,0x73,0xC0,0x08,0x40,0x03,0x40,0x09,0xFF,0xC7,
+0x80,0x07,0x9B,0xFD,0xE2,0x07,0xE8,0x05,0x9E,0xD9,0x88,0xE9,0xE2,0xE9,0xE8,0xFD,
+0x40,0x23,0x88,0xF7,0x42,0x50,0x88,0x24,0x40,0x73,0xC0,0x08,0x96,0x31,0xFF,0xC7,
+0x80,0x07,0x9B,0xFD,0xE2,0x07,0xE8,0x05,0x9E,0x91,0x88,0xE9,0xE2,0xE9,0xE8,0xFD,
+0x40,0x31,0xC0,0x08,0x98,0xDA,0x42,0x01,0xA0,0x69,0xFF,0x82,0x80,0x07,0x9B,0xF9,
+0xE2,0x07,0xC6,0x05,0x80,0x07,0x9F,0xF9,0xE9,0x03,0xE2,0x07,0xE8,0x0C,0x9E,0xD9,
+0x88,0xC8,0x40,0x03,0x20,0x06,0x88,0xE9,0xE2,0xE9,0xC0,0x04,0x9D,0xF9,0xE9,0x03,
+0xE6,0xE1,0xE8,0xF6,0x4C,0x74,0xC0,0x07,0x80,0x28,0x80,0xE6,0x84,0x40,0x84,0x00,
+0xD5,0x2B,0x40,0x14,0xC0,0x09,0x40,0x23,0x84,0xF7,0x40,0x04,0x80,0x13,0x42,0xF0,
+0x08,0x24,0x40,0x73,0xC0,0x08,0x40,0x53,0x40,0x09,0xFF,0xEF,0x80,0xA7,0x8A,0xEF,
+0xE2,0xA7,0xE8,0x05,0x9E,0x91,0x88,0xE9,0xE2,0xE9,0xE8,0xFD,0x40,0x13,0x84,0xF7,
+0x42,0x50,0x04,0x24,0x40,0x73,0xC0,0x08,0x96,0x31,0xFF,0xC7,0x80,0x07,0x9B,0xFD,
+0xE2,0x07,0xE8,0x05,0x9E,0x49,0x88,0xE9,0xE2,0xE9,0xE8,0xFD,0x40,0x21,0x40,0x08,
+0x98,0x91,0x42,0x01,0x20,0x69,0xFF,0x82,0x80,0x07,0x9B,0xF9,0xE2,0x07,0xC6,0x05,
+0x80,0x07,0x9F,0xF9,0xE9,0x03,0xE2,0x07,0xE8,0x0C,0x9E,0x91,0x88,0xC8,0x40,0x03,
+0x20,0x06,0x88,0xE9,0xE2,0xE9,0xC0,0x04,0x9D,0xF9,0xE9,0x03,0xE6,0xE1,0xE8,0xF6,
+0xE4,0x60,0xE9,0x07,0x81,0xE2,0x98,0x92,0xE2,0x4F,0x98,0xDB,0x88,0x6F,0x9F,0x21,
+0xFF,0xF7,0x58,0x01,0x00,0x01,0x40,0x01,0x1C,0x1A,0x80,0x23,0x4E,0x47,0x00,0x79,
+0x52,0x52,0x07,0xFF,0x4E,0x57,0x00,0x4A,0x50,0x00,0x04,0x00,0x5C,0xF0,0x04,0x00,
+0xE8,0x04,0x88,0x2F,0xE2,0x2F,0x88,0x8F,0x40,0x20,0x2C,0x09,0x96,0x94,0x9A,0x02,
+0x92,0x0B,0x40,0x20,0xD4,0x08,0xFE,0x17,0x94,0x49,0x92,0x2C,0x40,0x52,0x50,0x08,
+0xFE,0x6F,0x40,0x10,0xA8,0x04,0xFC,0xC2,0x40,0xF3,0x98,0x04,0xE8,0x1B,0x40,0xF3,
+0x7C,0x09,0x99,0xFF,0x88,0xEF,0x99,0xB6,0xCF,0x05,0x80,0xE6,0x84,0xC0,0x50,0x42,
+0x7F,0xE0,0x42,0x03,0x80,0x07,0x4E,0x02,0xFF,0x32,0x9B,0x20,0x52,0x20,0x00,0x20,
+0x40,0x23,0x08,0x0D,0x40,0x63,0x00,0x0C,0x40,0x73,0x80,0x0C,0xFF,0xD7,0x48,0xFF,
+0xFF,0x26,0xD3,0x07,0xCD,0x04,0x40,0xF4,0xA0,0x04,0xE8,0x07,0x80,0x2A,0xFC,0xC2,
+0x40,0x94,0xA0,0x04,0x4C,0x9E,0x3F,0xFC,0x84,0x00,0x44,0x18,0x00,0x00,0xFC,0xC2,
+0xFF,0xF7,0x4C,0x7E,0x7F,0xFB,0xD3,0xF9,0x84,0x00,0x46,0x17,0xFF,0x00,0x40,0x10,
+0xA8,0x04,0xFC,0xC2,0x40,0x94,0xA0,0x04,0x4C,0x9E,0x7F,0xF0,0x84,0x00,0xD5,0xE7,
+0x40,0xF4,0xA0,0x04,0xE8,0xF2,0x40,0xF4,0x7C,0x09,0x89,0x29,0x89,0x2F,0x89,0x08,
+0x4E,0x93,0x00,0x06,0x81,0x28,0x85,0x00,0x50,0x52,0xFF,0xE0,0x42,0x04,0x80,0x07,
+0x4E,0x02,0xFE,0xFB,0x9B,0x68,0x52,0x20,0x00,0x20,0x40,0x24,0x08,0x0D,0x40,0x84,
+0x00,0x0C,0x40,0x94,0x80,0x0C,0x40,0x94,0x88,0x04,0x48,0xFF,0xFE,0xEE,0x84,0xC0,
+0x52,0x32,0x00,0x01,0x5C,0xF1,0x80,0x20,0xE9,0x0A,0x80,0xC0,0x80,0x01,0x84,0x20,
+0x50,0x31,0xFF,0xE0,0xC0,0x04,0x5C,0xF1,0x80,0x20,0xE8,0x1A,0xC3,0x10,0x52,0x21,
+0x80,0x20,0x40,0x70,0x88,0x0C,0x40,0x50,0x08,0x0C,0x40,0x00,0x0C,0x0D,0x40,0x10,
+0x8C,0x0D,0xFE,0x3F,0xFF,0xAF,0xC6,0x03,0x58,0x00,0x00,0x01,0x50,0x00,0x04,0x00,
+0x5C,0xF0,0x04,0x00,0x88,0x2F,0x40,0x40,0xFC,0x09,0x48,0xFF,0xFF,0x6F,0x84,0x00,
+0xD5,0x9E,0x92,0x00,0x40,0x30,0xAC,0x08,0x40,0x40,0x54,0x09,0xFE,0xE7,0x46,0x48,
+0x00,0x00,0xFE,0xE7,0x95,0x09,0x92,0x95,0x52,0x22,0x04,0x1E,0xE4,0x40,0xE9,0x0C,
+0xFA,0x90,0xE2,0x44,0xE9,0x02,0x84,0x60,0x40,0x31,0x88,0x0D,0xE4,0x20,0xE8,0x02,
+0xFE,0xDA,0x80,0x03,0xDD,0x9E,0xC0,0x03,0x58,0x10,0x80,0x01,0x46,0x47,0xFF,0x00,
+0xE2,0x81,0xE8,0x04,0x46,0x08,0x00,0x00,0xDD,0x9E,0x84,0x1F,0xDD,0x9E,0x92,0x00,
+0x3A,0x6F,0x98,0x3C,0x84,0x20,0x80,0xA1,0x80,0x61,0x80,0x40,0xC2,0x10,0xE4,0x40,
+0xE8,0x07,0x46,0x58,0x00,0x00,0xFE,0x92,0xC1,0x03,0xFE,0x4A,0x8E,0x41,0x44,0x30,
+0x04,0x1E,0x42,0x41,0x00,0x07,0x9A,0xDC,0x40,0x21,0x10,0x0C,0x40,0x40,0xAC,0x09,
+0x40,0x61,0x54,0x08,0xFF,0x37,0x95,0x91,0x92,0xCC,0xFF,0x77,0x40,0x61,0xD0,0x08,
+0xFF,0x77,0x80,0x04,0x80,0x25,0x3A,0x6F,0x98,0x04,0xDD,0x9E,0x3A,0x6F,0x98,0x3C,
+0x84,0x20,0x80,0x61,0x80,0x40,0xC2,0x08,0x44,0x30,0x04,0x1E,0x42,0x51,0x00,0x07,
+0x9A,0xDD,0x40,0x21,0x14,0x0C,0x40,0x40,0xAC,0x09,0x40,0x61,0x54,0x08,0xFF,0x37,
+0x95,0x51,0x92,0xAC,0x40,0x61,0xD0,0x08,0xFF,0x77,0x80,0x04,0x80,0x25,0x3A,0x6F,
+0x98,0x04,0xDD,0x9E,0x49,0x00,0x07,0x54,0x49,0x00,0x2A,0x75,0x49,0x00,0x01,0xE6,
+0x46,0x08,0x00,0x20,0x04,0x10,0x03,0xC1,0x12,0x00,0x87,0xA0,0x02,0x00,0x07,0xA0,
+0x44,0x00,0x00,0x30,0x49,0x00,0x01,0xF7,0x49,0x00,0x03,0x4D,0x49,0x00,0x4E,0x82,
+0x3C,0x0D,0xFF,0x76,0x49,0x00,0x41,0xC9,0x2E,0x07,0xFF,0xA3,0x49,0x00,0x41,0xE7,
+0x44,0x20,0x05,0x10,0x49,0x00,0x4D,0xC3,0x3E,0x17,0xFE,0x64,0x49,0x00,0x41,0xB1,
+0x44,0x00,0x00,0xBB,0x49,0x00,0x41,0xE7,0x3E,0x07,0xFD,0x19,0x49,0x00,0x1B,0x8A,
+0x46,0x09,0x00,0x00,0x66,0x00,0x00,0xFF,0x49,0x00,0x4D,0xC0,0x3E,0x07,0xFE,0x86,
+0x2E,0x17,0xFE,0x64,0x44,0x00,0x00,0x64,0x58,0x00,0x06,0x58,0x04,0x00,0x03,0xC1,
+0x5E,0xF7,0x80,0x97,0x50,0x00,0x05,0x5A,0x46,0x0A,0x55,0xAA,0x3C,0x00,0x01,0x7E,
+0x02,0x3F,0x80,0x07,0x2E,0x07,0xFD,0x01,0x49,0x00,0x32,0x76,0x02,0x0F,0x80,0x07,
+0x04,0x50,0x03,0xF1,0x46,0x18,0x00,0x20,0x44,0x00,0xFF,0xFF,0x44,0x10,0x00,0x64,
+0x2E,0x07,0xFD,0x79,0x2E,0x00,0x01,0x2B,0x49,0x00,0x31,0xB9,0x3A,0x05,0x04,0x00,
+0x10,0x10,0x00,0x60,0x14,0x00,0x83,0xC1,0x40,0x11,0x05,0x04,0x12,0x10,0x00,0x1E,
+0x49,0x00,0x43,0xE6,0x49,0x00,0x49,0x08,0x2E,0x00,0x00,0xDF,0x3C,0x03,0xFF,0xC1,
+0x58,0x00,0x00,0x01,0x3A,0x0F,0x84,0x20,0x50,0x0F,0x80,0x0F,0x49,0x00,0x42,0x19,
+0x49,0x00,0x4E,0x58,0x2E,0x00,0x01,0x28,0x3C,0x0B,0xFE,0xD0,0x46,0x19,0x00,0x00,
+0x50,0x00,0x03,0x3A,0x2E,0x07,0xFD,0x48,0x2E,0x17,0xFE,0x60,0x2E,0x07,0xFD,0x19,
+0x46,0x19,0x00,0x20,0x2E,0x07,0xFE,0x61,0x2E,0x07,0xFD,0x29,0x3E,0x07,0xFE,0x65,
+0x10,0x10,0x00,0x8C,0x46,0x0A,0x33,0xAA,0x2E,0x07,0xFD,0x6E,0x49,0x00,0x43,0x0E,
+0x3E,0x07,0xFD,0x2A,0x3E,0x1F,0xFF,0xA0,0x02,0x50,0x00,0x00,0x49,0x00,0x1B,0x95,
+0x3C,0x3D,0xFF,0x95,0x49,0x00,0x0F,0x20,0x2E,0x07,0xFD,0x00,0x2E,0x07,0xFD,0x07,
+0x49,0x00,0x09,0x75,0x58,0x00,0x06,0x44,0x3E,0x07,0xFD,0x0D,0x54,0xC6,0x00,0xFF,
+0x2E,0x07,0xFD,0x0E,0x10,0x10,0x01,0x68,0x2E,0x07,0xFD,0x51,0x44,0x00,0x01,0xB0,
+0x42,0x10,0x84,0x0B,0x64,0x00,0x00,0x08,0x46,0x09,0x00,0x88,0x49,0x00,0x41,0x9A,
+0x3C,0x03,0xFF,0xC2,0x49,0x00,0x41,0xEC,0x10,0x10,0x00,0x44,0x58,0x00,0x00,0x98,
+0x04,0x50,0x03,0xC4,0x3C,0x0B,0xFE,0xC7,0x3C,0x0B,0xFE,0xCA,0x3E,0xF7,0xFD,0x01,
+0x58,0x21,0x0B,0x14,0x49,0x00,0x4F,0xF2,0x2E,0x07,0xFF,0xA4,0x2E,0x07,0xFF,0xA2,
+0x3B,0x00,0xC4,0x00,0x48,0x00,0x4D,0xA2,0x49,0x00,0x4E,0x34,0x40,0x00,0x00,0x09,
+0x66,0x10,0x80,0xFF,0x14,0x00,0x83,0xC4,0x58,0x10,0x8D,0x68,0x58,0x00,0x00,0x78,
+0x46,0x09,0x00,0x90,0x3E,0x10,0x01,0x29,0x10,0x10,0x02,0x38,0x3E,0x07,0xFD,0x4C,
+0x58,0x10,0x8B,0x14,0x3C,0x43,0xFE,0xD0,0x40,0x11,0x05,0x00,0x3E,0x17,0xFE,0x65,
+0x2E,0x17,0xFD,0x17,0x12,0x10,0x07,0xA0,0x49,0x00,0x44,0x65,0x40,0xF7,0x80,0x11,
+0x50,0x10,0x8F,0xFF,0x3C,0x23,0xFE,0xD0,0x02,0x0F,0x80,0x04,0x2E,0x07,0xFD,0x15,
+0x2E,0x27,0xFE,0x65,0x2E,0x07,0xFD,0x17,0x46,0xF1,0x00,0x01,0x49,0x00,0x18,0xA4,
+0x40,0x00,0x07,0x00,0x49,0x00,0x42,0x19,0x44,0x40,0xFF,0xFF,0x42,0x00,0x04,0x0B,
+0x42,0x10,0x94,0x0B,0x58,0x10,0x86,0x04,0x44,0x00,0x00,0xFF,0x49,0x00,0x43,0x8F,
+0x3E,0x07,0xFD,0x1E,0x3E,0x07,0xFD,0x67,0x10,0x04,0x80,0x00,0x2E,0x07,0xFD,0x1E,
+0x49,0x00,0x43,0x05,0x2E,0x17,0xFD,0x68,0x12,0x00,0x87,0xF4,0x2E,0x07,0xFD,0x65,
+0x3E,0x07,0xFD,0x23,0x3E,0x07,0xFD,0x26,0x02,0xF7,0x80,0x12,0x3C,0x13,0xFF,0xBE,
+0x49,0x00,0x42,0x24,0x38,0x11,0x0D,0x01,0x2E,0x07,0xFF,0xD2,0x3B,0x01,0x44,0x20,
+0x38,0x11,0x0D,0x09,0x3C,0x13,0xFF,0xB7,0x3C,0x30,0x01,0x7E,0x3C,0x13,0xFF,0xB8,
+0x42,0x00,0x08,0x0B,0x02,0x00,0x02,0xD4,0x49,0x00,0x43,0xE6,0x3C,0x2D,0xFF,0x95,
+0x3C,0x33,0xFE,0xCA,0x3E,0x2F,0xFC,0x08,0x3C,0x00,0x00,0xE3,0x3E,0x07,0xFD,0x34,
+0x49,0x00,0x12,0xA2,0x58,0x00,0x0A,0x98,0x3E,0x07,0xFD,0x36,0x2E,0x20,0x00,0x11,
+0x40,0xF0,0x3C,0x00,0x2E,0x00,0x01,0x29,0x40,0x00,0x20,0x08,0x44,0x00,0x05,0x10,
+0x58,0x10,0x80,0x02,0x3C,0x0B,0xFE,0xD2,0x44,0x60,0xFF,0xFF,0x58,0x00,0x01,0x48,
+0x49,0x00,0x10,0x96,0x3C,0x0C,0x00,0x49,0x46,0x29,0x00,0x00,0x02,0x10,0x07,0xA0,
+0x2E,0x17,0xFD,0x6E,0x3E,0x27,0xFE,0x65,0x38,0x30,0x89,0x09,0x38,0x13,0x08,0x00,
+0x49,0x00,0x18,0xD0,0x10,0x05,0x80,0x00,0x46,0x10,0xFF,0xFF,0x3E,0x07,0xFD,0x08,
+0x3E,0x07,0xFD,0x48,0x49,0x00,0x03,0x3F,0x2E,0x07,0xFD,0x05,0x44,0x40,0x00,0x30,
+0x44,0x20,0xFF,0xFF,0x3E,0x07,0xFD,0x02,0x3C,0x03,0xFE,0xCA,0x38,0x07,0x1C,0x00,
+0x14,0x10,0x01,0x5F,0x2E,0x17,0xFE,0x65,0x3C,0x0B,0xFE,0xE4,0x44,0x00,0x00,0xC6,
+0x44,0x00,0x03,0xE8,0x44,0x00,0x00,0xCB,0x2E,0x00,0x00,0x10,0x02,0x0F,0x80,0x01,
+0x02,0x0F,0x80,0x02,0x02,0x10,0x87,0xF4,0x3C,0x0B,0xFF,0xC2,0x3E,0x07,0xFD,0x0F,
+0x42,0x10,0xA8,0x0B,0x58,0x00,0x00,0x4C,0x3E,0x0F,0xFE,0xC4,0x40,0x01,0x00,0x40,
+0x2E,0x20,0x01,0x2B,0x49,0x00,0x3A,0x56,0x40,0x00,0x04,0x16,0x3C,0x1C,0x00,0x48,
+0x10,0x10,0x00,0x50,0x38,0x00,0x80,0x01,0x12,0x00,0x87,0x92,0x02,0x00,0x07,0x92,
+0x3C,0x03,0xFE,0xD0,0x44,0x70,0x00,0xFF,0x02,0x0F,0x80,0x05,0x2E,0x07,0xFD,0x58,
+0x2E,0x07,0xFD,0x16,0x40,0x00,0x40,0x08,0x44,0x10,0x35,0xCA,0x3B,0x00,0xC4,0x20,
+0x54,0xA0,0x00,0xFF,0x10,0x00,0x82,0xC0,0x44,0x20,0x00,0x30,0x00,0x03,0x00,0x92,
+0x42,0x31,0xC0,0x24,0x42,0x00,0x10,0x0B,0x12,0x10,0x02,0xB8,0x49,0x00,0x1B,0x8E,
+0x58,0x00,0x08,0x00,0x2E,0x17,0xFF,0xA4,0x2E,0x17,0xFF,0xA2,0x48,0x00,0x12,0xA1,
+0x49,0x00,0x1B,0xB7,0x3E,0x07,0xFD,0x65,0x3E,0x07,0xFD,0x64,0x58,0x00,0x02,0xC4,
+0x10,0x00,0x80,0x08,0x3E,0x07,0xFD,0x68,0x2E,0x17,0xFD,0x65,0x49,0x00,0x32,0x18,
+0x3C,0x03,0xFF,0xC0,0x10,0x60,0x00,0xA0,0x42,0x01,0x04,0x73,0x2E,0x07,0xFD,0x21,
+0x58,0x00,0x00,0x02,0x44,0x00,0xA5,0x5A,0x58,0x00,0x00,0x04,0x44,0x00,0x5A,0xA5,
+0x10,0x10,0x00,0x40,0x2E,0x07,0xFD,0x68,0x3C,0x13,0xFF,0xBF,0x49,0x00,0x3D,0xBE,
+0x44,0x60,0x00,0x55,0x3E,0x07,0xFD,0x20,0x42,0x13,0x00,0x73,0x00,0x20,0x00,0x08,
+0x02,0x20,0x00,0x1E,0x50,0x1F,0x81,0x90,0x49,0x00,0x34,0x88,0x66,0x00,0x00,0x02,
+0x49,0x00,0x0A,0xA8,0x42,0x10,0x80,0x03,0x3C,0x0B,0xFE,0xC4,0x2E,0x07,0xFD,0x2B,
+0x58,0x10,0x81,0x44,0x42,0x00,0x14,0x0B,0x46,0x61,0x00,0x02,0x14,0x10,0x00,0x0E,
+0x58,0x21,0x0D,0x08,0x02,0x00,0x02,0xD6,0x3C,0x30,0x01,0x7B,0x3C,0x30,0x01,0x7A,
+0x49,0x00,0x01,0xDE,0x49,0x00,0x4F,0xE2,0x3C,0x0D,0xFF,0x9A,0x46,0x11,0x00,0x03,
+0x2E,0x17,0xFD,0x79,0x58,0x63,0x01,0x44,0x49,0x00,0x15,0x5B,0x00,0x00,0x02,0x7C,
+0x2E,0x07,0xFD,0x30,0x3C,0x00,0x00,0xE2,0x00,0x10,0x00,0x40,0x49,0x00,0x35,0x6A,
+0x50,0x21,0x00,0xE8,0x3C,0x1D,0xFF,0x76,0x10,0x10,0x00,0x4C,0x3E,0x07,0xFD,0x31,
+0x58,0x10,0x80,0x78,0x58,0x10,0x80,0x04,0x14,0x10,0x01,0x6D,0x14,0x10,0x01,0x6E,
+0x46,0x09,0x00,0x80,0x42,0x10,0x90,0x0B,0x38,0xF1,0x06,0x02,0x58,0x21,0x0F,0xF4,
+0x38,0x06,0x82,0x02,0x2E,0x07,0xFD,0x3B,0x49,0x00,0x0F,0x14,0x64,0x12,0x00,0x43,
+0x3C,0x0D,0xFF,0x87,0x3E,0x07,0xFD,0x3D,0x3C,0x0C,0x00,0x48,0x64,0x03,0x00,0x03,
+0x3C,0x03,0xFF,0x40,0x3C,0x03,0xFF,0x41,0x3E,0x67,0xFD,0x0D,0x3E,0x2F,0xFF,0x00,
+0x2E,0x07,0xFD,0x3D,0x40,0x03,0x98,0x60,0x2E,0x10,0x00,0x14,0x2E,0x07,0xFD,0x3F,
+0x58,0x00,0x0B,0x68,0x49,0x00,0x4E,0x2F,0x40,0x00,0x82,0x00,0x2E,0x10,0x00,0x11,
+0x00,0x10,0x00,0x44,0x50,0x00,0x03,0x3C,0x44,0x00,0x00,0x3C,0x46,0x01,0x00,0x05,
+0x46,0x01,0x00,0x06,0x46,0x01,0x00,0x07,0x46,0x01,0x00,0x01,0x46,0x01,0x00,0x02,
+0x46,0x01,0x00,0x03,0x46,0x01,0x00,0x03,0x46,0x01,0x00,0x04,0x46,0x01,0x00,0x05,
+0x46,0x21,0x00,0x00,0x46,0x21,0x00,0x01,0x46,0x21,0x00,0x02,0x46,0x11,0x00,0x00,
+0x46,0x11,0x00,0x01,0x46,0x11,0x00,0x02,0x46,0x11,0x00,0x06,0x46,0x11,0x00,0x07,
+0x46,0x51,0x00,0x07,0x46,0x51,0x00,0x08,0x46,0x01,0x00,0x07,0x46,0x01,0x00,0x08,
+0x46,0x01,0x00,0x09,0x46,0x01,0x00,0x02,0x46,0x01,0x00,0x03,0x46,0x01,0x00,0x04,
+0x46,0x31,0x00,0x01,0x46,0x31,0x00,0x02,0x46,0x31,0x00,0x03,0x46,0x31,0x00,0x07,
+0x46,0x31,0x00,0x08,0x46,0x31,0x00,0x09,0x46,0x21,0x00,0x06,0x46,0x21,0x00,0x07,
+0x46,0x31,0x00,0x02,0x46,0x31,0x00,0x03,0x46,0x31,0x00,0x04,0x46,0x21,0x00,0x07,
+0x46,0x21,0x00,0x08,0x46,0x21,0x00,0x09,0x46,0x21,0x00,0x01,0x46,0x21,0x00,0x02,
+0x46,0x21,0x00,0x03,0x46,0x11,0x00,0x01,0x46,0x11,0x00,0x02,0x46,0x11,0x00,0x03,
+0x46,0x11,0x00,0x02,0x46,0x11,0x00,0x03,0x46,0x11,0x00,0x04,0x46,0x00,0x00,0x0D,
+0x46,0x00,0x00,0x0E,0x46,0x00,0x00,0x0F,0x46,0x01,0x00,0x00,0x46,0x01,0x00,0x01,
+0x46,0x01,0x00,0x02,0x46,0x11,0x00,0x07,0x46,0x11,0x00,0x08,0x46,0x11,0x00,0x09,
+0x00,0x01,0x02,0x00,0x01,0x02,0x01,0x00,0x00,0x02,0x02,0x01,0x02,0x02,0x01,0x01,
+0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x08,0x09,0x10,0x11,0x00,0x01,0x08,0x09,
+0x10,0x11,0x00,0x01,0x08,0x09,0x10,0x11,0x00,0x01,0x08,0x09,0x10,0x11,0x00,0x01,
+0x08,0x09,0x10,0x11,0x00,0x01,0x08,0x09,0x00,0xA1,0x28,0x04,0x00,0x0A,0x85,0x02,
+0x00,0x54,0x50,0x01,0x48,0x19,0x00,0x10,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,
+0x04,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x02,0x04,0x00,0x00,0x00,0x00,
+0x04,0x02,0x01,0x04,0x03,0x02,0x00,0x00,0x02,0x01,0x04,0x03,0x01,0x02,0x00,0x00,
+0x03,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x03,0x02,0x00,0x00,0x00,0x00,
+0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x04,0x03,0x01,0x02,0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xA2,0x82,0xA2,0x82,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xA1,0x81,0xA1,
+0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA2,0x82,0xA2,0x82,0xA2,0x0D,0x00,0x00,
+0x00,0x00,0x00,0x00,0xC1,0xA1,0xE1,0x81,0xA1,0x85,0xC5,0xA5,0xE5,0x0E,0x00,0x00,
+0xE5,0x85,0xC5,0xAA,0xC1,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xA2,0xC1,0x82,
+0xE1,0x2F,0x00,0x00,0x00,0x00,0x00,0x00,0xE3,0x83,0xC3,0xA3,0xE3,0x0C,0x00,0x00,
+0x00,0x00,0x00,0x00,0xC5,0xA5,0xE5,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xEA,0xCA,0xEA,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0xC5,0x85,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCA,0x09,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xAA,0x8A,0x0A,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x8A,0xAA,0x1D,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEA,0xCA,0x2D,0x02,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0x3D,0x02,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x81,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xA1,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0x03,0x03,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0x04,0x03,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xA5,0x5A,0x08,0x04,0x06,0x02,0x09,0x52,0x44,0x4A,0x4E,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x46,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x72,0x69,0x6D,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x39,0x30,0x39,0x30,0x33,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x14,0x02,0x3F,0x82,0xC2,0x10,0x02,0x03,0x37,0x64,0x30,0x96,0xC8,0x3C,0xFF,0x0A,
+0x14,0x14,0x28,0x14,0x32,0x32,0x25,0x20,0x05,0x40,0x25,0x14,0x14,0x82,0x82,0x16,
+0x16,0x53,0x75,0x0A,0x78,0x46,0x64,0x3C,0x0F,0x0C,0x00,0x00,0x11,0x00,0x00,0x08,
+0x0F,0x0A,0x96,0x10,0x09,0x06,0x0A,0x04,0x14,0x64,0xFF,0x14,0x00,0x00,0x1E,0x8C,
+0x64,0x64,0x78,0x90,0x08,0x00,0x0F,0x06,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x02,0x80,0x00,0x00,0x00,
+0x00,0x0C,0x00,0x00,0x00,0x1E,0x20,0x22,0x24,0x00,0x50,0x02,0x02,0x0A,0x02,0x05,
+0x24,0x12,0x0A,0x06,0xE5,0x00,0x08,0x70,0x04,0x38,0x00,0x7F,0x03,0x44,0x47,0x34,
+0x00,0x04,0x56,0x0D,0xD4,0x53,0x0F,0x00,0x00,0x7F,0x03,0x44,0x47,0x34,0x00,0x04,
+0x56,0x0D,0xD4,0x53,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x28,0x00,0x00,
+0x00,0x00,0x00,0x16,0x0A,0x14,0x0A,0x0A,0x14,0x64,0x14,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x0B,0x0C,0x1B,0x15,0x50,0x25,0x02,0x50,0x0F,0x03,0x00,0x28,0xB2,0x64,
+0x04,0x3C,0x35,0x1E,0x32,0x80,0x0E,0x07,0x23,0x0A,0xB4,0x78,0x96,0x5A,0x64,0x32,
+0x00,0x00,0x64,0x64,0x00,0x14,0x03,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,
+0x06,0x0A,0x0A,0x78,0x3C,0x96,0x32,0x00,0x00,0x00,0x00,0x88,0x30,0x00,0x00,0x00,
+0x00,0x0A,0x0A,0x50,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x06,0x00,0x00,0x00,
+0x1E,0x00,0x00,0x00,0x00,0x02,0xD0,0x05,0x00,0x0A,0x05,0xFF,0x0A,0x03,0xE8,0x03,
+0xE8,0x03,0x02,0x01,0xF4,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,
+0x14,0x14,0x0A,0x0A,0x1C,0x30,0x00,0x00,0x11,0x11,0x0A,0x05,0x3D,0x0A,0x1B,0x33,
+0x00,0x00,0x11,0x0A,0x05,0x85,0x14,0x15,0x14,0x10,0x15,0x14,0x00,0x00,0x00,0x01,
+0x00,0x00,0x00,0x00,0x00,0x10,0x0A,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x01,0x0A,0x06,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x6F,0x08,0x6F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x5C,0x08,0x6F,0x08,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0xED,0x00,0x36,0x01,0xE2,0x02,0x2D,0x03,0x37,0x04,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x00,0x40,0x01,0xDF,0x02,
+0x34,0x03,0x37,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x08,0x70,0x14,0x00,0x00,0x08,0x70,0x14,0x00,0x00,0x04,0x38,0x0A,0x00,
+0x00,0x04,0x38,0x0A,0x64,0x0C,0x64,0xFF,0x96,0x96,0x64,0x3C,0xC8,0xFF,0xB4,0x5A,
+0x05,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,
+0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x65,0x67,0x65,0x67,0x65,0x67,0x65,0x67,0x64,0x65,0x64,0x65,
+0x00,0x65,0x00,0x65,0x00,0x65,0x00,0x65,0x64,0x65,0x64,0x65,0x65,0x67,0x65,0x67,
+0x65,0x67,0x65,0x67,0x00,0x00,0x00,0x00,0x26,0x00,0x39,0x00,0x24,0x0C,0x36,0x0C,
+0xFF,0x34,0x00,0x45,0x00,0xFF,0x37,0x00,0x26,0x00,0xFF,0x36,0x00,0x24,0x00,0xFF,
+0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x02,0x00,0xFA,0x00,0xFA,0x01,0xC2,0x03,0x20,0x01,0x2C,0x19,0x20,0x00,0x4B,
+0x32,0x32,0x00,0x00,0x01,0xF4,0x00,0x96,0xC8,0x18,0x18,0x01,0xF4,0x20,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xFE,0xF7,0x9B,0x3C,0xFF,0xFF,0x07,0x80,0x4B,0x00,0xEF,0x0F,0x0C,0x44,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA5,0x5A,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE3,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,0xFF,0x07,0x1C,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xFF,0xFD,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x00,0x00,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0x07,0x0E,0x15,0x00,
+0x07,0x0E,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x0A,0xBA,0x90,0x00,0x20,0x00,0x00,0x00,0xDC,0x05,0x00,0x00,0xC9,0x00,0x00,0x00,
+0x80,0x61,0x00,0x00,0x0A,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,
+0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x81,0x02,0x20,0x47,0x81,0x02,
+0x85,0x0C,0x81,0x02,0x14,0x00,0xC8,0x00,0x5E,0x01,0x5E,0x01,0x64,0x00,0x14,0x00,
+0x00,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x03,0x5D,0x08,0x02,0x1F,0x06,0x11,0x1B,
+0x0C,0x11,0x1F,0x09,0x00,0x04,0x00,0x03,0x00,0x02,0x03,0x03,0x01,0x00,0x15,0x15,
+0x00,0x04,0x30,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x07,0x1C,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xFF,0xFD,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x00,0x00,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0x07,0x0E,0x15,0x00,0x07,0x0E,0x15,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x0A,0xBA,0x90,0x00,
+0x20,0x00,0x00,0x00,0xDC,0x05,0x00,0x00,0xC9,0x00,0x00,0x00,0x80,0x61,0x00,0x00,
+0x0A,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xAA,0xAA,0xAA,0xAA,
+0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x04,0x81,0x02,0x20,0x47,0x81,0x02,0x85,0x0C,0x81,0x02,
+0x14,0x00,0xC8,0x00,0x5E,0x01,0x5E,0x01,0x64,0x00,0x14,0x00,0x00,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x03,0x5D,0x08,0x02,0x1F,0x06,0x11,0x1B,0x0C,0x11,0x1F,0x09,
+0x00,0x04,0x00,0x03,0x00,0x02,0x03,0x03,0x01,0x00,0x15,0x15,0x00,0x04,0x30,0x03,
+0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0xFD,0x37,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x00,0x00,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0x07,0x0E,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x22,0x9A,0x80,0x00,0x20,0x00,0x00,0x00,
+0xF0,0x04,0x00,0x00,0xC9,0x00,0x00,0x00,0x80,0x61,0x00,0x00,0x0A,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
+0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x00,0x04,0xA0,0x00,0x20,0x47,0xA0,0x00,0x20,0x08,0xA0,0x00,0x14,0x00,0xC8,0x00,
+0x5E,0x01,0x5E,0x01,0xC8,0x00,0x14,0x00,0x29,0x0E,0x5B,0x0E,0x97,0x00,0x00,0x00,
+0x04,0x5D,0x08,0x04,0x1F,0x06,0x10,0x1A,0x0B,0x10,0x15,0x09,0x00,0x03,0x02,0x03,
+0x00,0x02,0x03,0x03,0x01,0x00,0x15,0x15,0x00,0x04,0x30,0x03,0x02,0x00,0x03,0x03,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0xFD,0x37,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x00,0x00,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0x38,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x3A,0x9A,0x84,0x00,0x20,0x00,0x00,0x00,0xF4,0x01,0x00,0x00,
+0xC9,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x0A,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
+0x02,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0xA0,0x00,
+0x20,0x47,0xA0,0x00,0x20,0x08,0xA0,0x00,0x14,0x00,0xC8,0x00,0x5E,0x01,0x5E,0x01,
+0xC8,0x00,0x14,0x00,0xA4,0x38,0xD6,0x38,0x97,0x00,0x00,0x00,0x04,0x5D,0x08,0x04,
+0x1F,0x06,0x10,0x1A,0x0B,0x10,0x15,0x09,0x00,0x04,0x02,0x03,0x00,0x02,0x03,0x03,
+0x01,0x00,0x15,0x15,0x00,0x03,0x30,0x03,0x00,0x01,0x03,0x03,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x1C,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xFF,0xFD,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x00,0x00,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0x07,0x00,0x0E,0x00,
+0x15,0x00,0x31,0x00,0x1C,0x00,0x23,0x00,0x2A,0x00,0x31,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x22,0x9A,0x80,0x00,0x20,0x00,0x00,0x00,0xF0,0x04,0x00,0x00,0xC9,0x00,0x00,0x00,
+0x80,0x61,0x00,0x00,0x0A,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xAA,0xAA,0xAA,0xA2,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,
+0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xA0,0x00,0x20,0x47,0xA0,0x00,
+0x20,0x08,0xA0,0x00,0x14,0x00,0xC8,0x00,0x5E,0x01,0x5E,0x01,0x64,0x00,0x14,0x00,
+0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x04,0x05,0x08,0x04,0x1F,0x06,0x10,0x1A,
+0x0B,0x10,0x15,0x09,0x00,0x03,0x00,0x03,0x00,0x02,0x03,0x03,0x00,0x01,0x15,0x15,
+0x00,0x04,0x30,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x07,0x1C,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xFF,0xFD,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x00,0x00,0x30,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0x07,0x00,0x0E,0x00,0x15,0x00,0x31,0x00,
+0x1C,0x00,0x23,0x00,0x2A,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3A,0xBA,0x84,0x00,
+0x20,0x00,0x00,0x00,0xF0,0x04,0x00,0x00,0xC9,0x00,0x00,0x00,0x80,0x61,0x00,0x00,
+0x0A,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xAA,0xAA,0xAA,0xA2,
+0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x04,0xA0,0x00,0x20,0x47,0x64,0x00,0x34,0x08,0x64,0x00,
+0x14,0x00,0xC8,0x00,0x5E,0x01,0x5E,0x01,0x64,0x00,0x14,0x00,0x00,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x04,0x05,0x08,0x07,0x1F,0x08,0x11,0x18,0x0C,0x11,0x16,0x09,
+0x00,0x04,0x00,0x03,0x00,0x02,0x03,0x03,0x00,0x01,0x15,0x15,0x00,0x04,0x30,0x01,
+0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xC0,0x01,0x37,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x07,0x1C,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0xFF,0x38,0xE0,0x30,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,
+0xFF,0xC0,0x01,0x37,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0xFD,0x37,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0x03,0x00,0xFF,0x00,0x00,0x30,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,
+0xFF,0xFF,0x03,0x00,0x31,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3A,0x9A,0x84,0x00,0x20,0x00,0x00,0x00,
+0xF0,0x04,0x00,0x00,0xC9,0x00,0x00,0x00,0x80,0x61,0x00,0x00,0x0A,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
+0xAA,0xAA,0xAA,0xAA,0x03,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x04,0xA0,0x00,0x20,0x47,0xA0,0x00,0x20,0x08,0xA0,0x00,0x14,0x00,0xC8,0x00,
+0x5E,0x01,0x5E,0x01,0x64,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x04,0x05,0x08,0x04,0x1F,0x06,0x10,0x1A,0x0B,0x10,0x15,0x09,0x00,0x04,0x07,0x03,
+0x00,0x02,0x03,0x03,0x00,0x01,0x15,0x15,0x00,0x04,0x30,0x01,0x00,0x00,0x03,0x03,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x65,0x02,0x66,0x02,0x67,0x02,0x68,0x02,0x69,0x02,0x6A,0x02,0x6B,0x02,0x6C,0x02,
+0x6D,0x02,0x6E,0x02,0x6F,0x02,0x70,0x02,0x71,0x02,0x72,0x02,0x73,0x02,0x74,0x02,
+0x75,0x02,0x76,0x02,0x77,0x02,0x78,0x02,0x79,0x02,0x7A,0x02,0x7B,0x02,0x7C,0x02,
+0x7D,0x02,0x7E,0x02,0x7F,0x02,0x80,0x02,0x81,0x02,0x82,0x02,0x83,0x02,0x84,0x02,
+0x85,0x02,0x86,0x02,0x87,0x02,0x88,0x02,0x41,0x02,0x42,0x02,0x43,0x02,0x44,0x02,
+0x45,0x02,0x46,0x02,0x47,0x02,0x48,0x02,0x49,0x02,0x4A,0x02,0x4B,0x02,0x4C,0x02,
+0x4D,0x02,0x4E,0x02,0x4F,0x02,0x50,0x02,0x51,0x02,0x52,0x02,0x53,0x02,0x54,0x02,
+0x55,0x02,0x56,0x02,0x57,0x02,0x58,0x02,0x59,0x02,0x5A,0x02,0x5B,0x02,0x5C,0x02,
+0x5D,0x02,0x5E,0x02,0x5F,0x02,0x60,0x02,0x61,0x02,0x62,0x02,0x63,0x02,0x64,0x02,
+0x1D,0x02,0x1E,0x02,0x1F,0x02,0x20,0x02,0x21,0x02,0x22,0x02,0x23,0x02,0x24,0x02,
+0x25,0x02,0x26,0x02,0x27,0x02,0x28,0x02,0x29,0x02,0x2A,0x02,0x2B,0x02,0x2C,0x02,
+0x2D,0x02,0x2E,0x02,0x2F,0x02,0x30,0x02,0x31,0x02,0x32,0x02,0x33,0x02,0x34,0x02,
+0x35,0x02,0x36,0x02,0x37,0x02,0x38,0x02,0x39,0x02,0x3A,0x02,0x3B,0x02,0x3C,0x02,
+0x3D,0x02,0x3E,0x02,0x3F,0x02,0x40,0x02,0xF9,0x01,0xFA,0x01,0xFB,0x01,0xFC,0x01,
+0xFD,0x01,0xFE,0x01,0xFF,0x01,0x00,0x02,0x01,0x02,0x02,0x02,0x03,0x02,0x04,0x02,
+0x05,0x02,0x06,0x02,0x07,0x02,0x08,0x02,0x09,0x02,0x0A,0x02,0x0B,0x02,0x0C,0x02,
+0x0D,0x02,0x0E,0x02,0x0F,0x02,0x10,0x02,0x11,0x02,0x12,0x02,0x13,0x02,0x14,0x02,
+0x15,0x02,0x16,0x02,0x17,0x02,0x18,0x02,0x19,0x02,0x1A,0x02,0x1B,0x02,0x1C,0x02,
+0xD5,0x01,0xD6,0x01,0xD7,0x01,0xD8,0x01,0xD9,0x01,0xDA,0x01,0xDB,0x01,0xDC,0x01,
+0xDD,0x01,0xDE,0x01,0xDF,0x01,0xE0,0x01,0xE1,0x01,0xE2,0x01,0xE3,0x01,0xE4,0x01,
+0xE5,0x01,0xE6,0x01,0xE7,0x01,0xE8,0x01,0xE9,0x01,0xEA,0x01,0xEB,0x01,0xEC,0x01,
+0xED,0x01,0xEE,0x01,0xEF,0x01,0xF0,0x01,0xF1,0x01,0xF2,0x01,0xF3,0x01,0xF4,0x01,
+0xF5,0x01,0xF6,0x01,0xF7,0x01,0xF8,0x01,0xB1,0x01,0xB2,0x01,0xB3,0x01,0xB4,0x01,
+0xB5,0x01,0xB6,0x01,0xB7,0x01,0xB8,0x01,0xB9,0x01,0xBA,0x01,0xBB,0x01,0xBC,0x01,
+0xBD,0x01,0xBE,0x01,0xBF,0x01,0xC0,0x01,0xC1,0x01,0xC2,0x01,0xC3,0x01,0xC4,0x01,
+0xC5,0x01,0xC6,0x01,0xC7,0x01,0xC8,0x01,0xC9,0x01,0xCA,0x01,0xCB,0x01,0xCC,0x01,
+0xCD,0x01,0xCE,0x01,0xCF,0x01,0xD0,0x01,0xD1,0x01,0xD2,0x01,0xD3,0x01,0xD4,0x01,
+0x8D,0x01,0x8E,0x01,0x8F,0x01,0x90,0x01,0x91,0x01,0x92,0x01,0x93,0x01,0x94,0x01,
+0x95,0x01,0x96,0x01,0x97,0x01,0x98,0x01,0x99,0x01,0x9A,0x01,0x9B,0x01,0x9C,0x01,
+0x9D,0x01,0x9E,0x01,0x9F,0x01,0xA0,0x01,0xA1,0x01,0xA2,0x01,0xA3,0x01,0xA4,0x01,
+0xA5,0x01,0xA6,0x01,0xA7,0x01,0xA8,0x01,0xA9,0x01,0xAA,0x01,0xAB,0x01,0xAC,0x01,
+0xAD,0x01,0xAE,0x01,0xAF,0x01,0xB0,0x01,0x69,0x01,0x6A,0x01,0x6B,0x01,0x6C,0x01,
+0x6D,0x01,0x6E,0x01,0x6F,0x01,0x70,0x01,0x71,0x01,0x72,0x01,0x73,0x01,0x74,0x01,
+0x75,0x01,0x76,0x01,0x77,0x01,0x78,0x01,0x79,0x01,0x7A,0x01,0x7B,0x01,0x7C,0x01,
+0x7D,0x01,0x7E,0x01,0x7F,0x01,0x80,0x01,0x81,0x01,0x82,0x01,0x83,0x01,0x84,0x01,
+0x85,0x01,0x86,0x01,0x87,0x01,0x88,0x01,0x89,0x01,0x8A,0x01,0x8B,0x01,0x8C,0x01,
+0x45,0x01,0x46,0x01,0x47,0x01,0x48,0x01,0x49,0x01,0x4A,0x01,0x4B,0x01,0x4C,0x01,
+0x4D,0x01,0x4E,0x01,0x4F,0x01,0x50,0x01,0x51,0x01,0x52,0x01,0x53,0x01,0x54,0x01,
+0x55,0x01,0x56,0x01,0x57,0x01,0x58,0x01,0x59,0x01,0x5A,0x01,0x5B,0x01,0x5C,0x01,
+0x5D,0x01,0x5E,0x01,0x5F,0x01,0x60,0x01,0x61,0x01,0x62,0x01,0x63,0x01,0x64,0x01,
+0x65,0x01,0x66,0x01,0x67,0x01,0x68,0x01,0x21,0x01,0x22,0x01,0x23,0x01,0x24,0x01,
+0x25,0x01,0x26,0x01,0x27,0x01,0x28,0x01,0x29,0x01,0x2A,0x01,0x2B,0x01,0x2C,0x01,
+0x2D,0x01,0x2E,0x01,0x2F,0x01,0x30,0x01,0x31,0x01,0x32,0x01,0x33,0x01,0x34,0x01,
+0x35,0x01,0x36,0x01,0x37,0x01,0x38,0x01,0x39,0x01,0x3A,0x01,0x3B,0x01,0x3C,0x01,
+0x3D,0x01,0x3E,0x01,0x3F,0x01,0x40,0x01,0x41,0x01,0x42,0x01,0x43,0x01,0x44,0x01,
+0xFD,0x00,0xFE,0x00,0xFF,0x00,0x00,0x01,0x01,0x01,0x02,0x01,0x03,0x01,0x04,0x01,
+0x05,0x01,0x06,0x01,0x07,0x01,0x08,0x01,0x09,0x01,0x0A,0x01,0x0B,0x01,0x0C,0x01,
+0x0D,0x01,0x0E,0x01,0x0F,0x01,0x10,0x01,0x11,0x01,0x12,0x01,0x13,0x01,0x14,0x01,
+0x15,0x01,0x16,0x01,0x17,0x01,0x18,0x01,0x19,0x01,0x1A,0x01,0x1B,0x01,0x1C,0x01,
+0x1D,0x01,0x1E,0x01,0x1F,0x01,0x20,0x01,0xD9,0x00,0xDA,0x00,0xDB,0x00,0xDC,0x00,
+0xDD,0x00,0xDE,0x00,0xDF,0x00,0xE0,0x00,0xE1,0x00,0xE2,0x00,0xE3,0x00,0xE4,0x00,
+0xE5,0x00,0xE6,0x00,0xE7,0x00,0xE8,0x00,0xE9,0x00,0xEA,0x00,0xEB,0x00,0xEC,0x00,
+0xED,0x00,0xEE,0x00,0xEF,0x00,0xF0,0x00,0xF1,0x00,0xF2,0x00,0xF3,0x00,0xF4,0x00,
+0xF5,0x00,0xF6,0x00,0xF7,0x00,0xF8,0x00,0xF9,0x00,0xFA,0x00,0xFB,0x00,0xFC,0x00,
+0xB5,0x00,0xB6,0x00,0xB7,0x00,0xB8,0x00,0xB9,0x00,0xBA,0x00,0xBB,0x00,0xBC,0x00,
+0xBD,0x00,0xBE,0x00,0xBF,0x00,0xC0,0x00,0xC1,0x00,0xC2,0x00,0xC3,0x00,0xC4,0x00,
+0xC5,0x00,0xC6,0x00,0xC7,0x00,0xC8,0x00,0xC9,0x00,0xCA,0x00,0xCB,0x00,0xCC,0x00,
+0xCD,0x00,0xCE,0x00,0xCF,0x00,0xD0,0x00,0xD1,0x00,0xD2,0x00,0xD3,0x00,0xD4,0x00,
+0xD5,0x00,0xD6,0x00,0xD7,0x00,0xD8,0x00,0x91,0x00,0x92,0x00,0x93,0x00,0x94,0x00,
+0x95,0x00,0x96,0x00,0x97,0x00,0x98,0x00,0x99,0x00,0x9A,0x00,0x9B,0x00,0x9C,0x00,
+0x9D,0x00,0x9E,0x00,0x9F,0x00,0xA0,0x00,0xA1,0x00,0xA2,0x00,0xA3,0x00,0xA4,0x00,
+0xA5,0x00,0xA6,0x00,0xA7,0x00,0xA8,0x00,0xA9,0x00,0xAA,0x00,0xAB,0x00,0xAC,0x00,
+0xAD,0x00,0xAE,0x00,0xAF,0x00,0xB0,0x00,0xB1,0x00,0xB2,0x00,0xB3,0x00,0xB4,0x00,
+0x6D,0x00,0x6E,0x00,0x6F,0x00,0x70,0x00,0x71,0x00,0x72,0x00,0x73,0x00,0x74,0x00,
+0x75,0x00,0x76,0x00,0x77,0x00,0x78,0x00,0x79,0x00,0x7A,0x00,0x7B,0x00,0x7C,0x00,
+0x7D,0x00,0x7E,0x00,0x7F,0x00,0x80,0x00,0x81,0x00,0x82,0x00,0x83,0x00,0x84,0x00,
+0x85,0x00,0x86,0x00,0x87,0x00,0x88,0x00,0x89,0x00,0x8A,0x00,0x8B,0x00,0x8C,0x00,
+0x8D,0x00,0x8E,0x00,0x8F,0x00,0x90,0x00,0x49,0x00,0x4A,0x00,0x4B,0x00,0x4C,0x00,
+0x4D,0x00,0x4E,0x00,0x4F,0x00,0x50,0x00,0x51,0x00,0x52,0x00,0x53,0x00,0x54,0x00,
+0x55,0x00,0x56,0x00,0x57,0x00,0x58,0x00,0x59,0x00,0x5A,0x00,0x5B,0x00,0x5C,0x00,
+0x5D,0x00,0x5E,0x00,0x5F,0x00,0x60,0x00,0x61,0x00,0x62,0x00,0x63,0x00,0x64,0x00,
+0x65,0x00,0x66,0x00,0x67,0x00,0x68,0x00,0x69,0x00,0x6A,0x00,0x6B,0x00,0x6C,0x00,
+0x25,0x00,0x26,0x00,0x27,0x00,0x28,0x00,0x29,0x00,0x2A,0x00,0x2B,0x00,0x2C,0x00,
+0x2D,0x00,0x2E,0x00,0x2F,0x00,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,
+0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x39,0x00,0x3A,0x00,0x3B,0x00,0x3C,0x00,
+0x3D,0x00,0x3E,0x00,0x3F,0x00,0x40,0x00,0x41,0x00,0x42,0x00,0x43,0x00,0x44,0x00,
+0x45,0x00,0x46,0x00,0x47,0x00,0x48,0x00,0x01,0x00,0x02,0x00,0x03,0x00,0x04,0x00,
+0x05,0x00,0x06,0x00,0x07,0x00,0x08,0x00,0x09,0x00,0x0A,0x00,0x0B,0x00,0x0C,0x00,
+0x0D,0x00,0x0E,0x00,0x0F,0x00,0x10,0x00,0x11,0x00,0x12,0x00,0x13,0x00,0x14,0x00,
+0x15,0x00,0x16,0x00,0x17,0x00,0x18,0x00,0x19,0x00,0x1A,0x00,0x1B,0x00,0x1C,0x00,
+0x1D,0x00,0x1E,0x00,0x1F,0x00,0x20,0x00,0x21,0x00,0x22,0x00,0x23,0x00,0x24,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x03,0xB9,0x83,0x11,0x2B,0x01,0xBD,0x01,0x02,0xC2,0x08,0x70,
+0x01,0xBD,0x03,0x04,0xB2,0x04,0x38,0x08,0x70,0x01,0xBD,0x00,0x0A,0xB1,0xF8,0x27,
+0x27,0x00,0x00,0x0B,0x0E,0x0B,0x0E,0x33,0x02,0xD2,0x2D,0x2D,0x0B,0xB2,0x80,0x02,
+0x18,0x80,0x70,0x00,0x08,0x1C,0x08,0x11,0x05,0x01,0xE9,0xD1,0x02,0xB2,0x00,0x08,
+0x01,0xE9,0x00,0x01,0xBD,0x02,0x02,0xB2,0xB5,0x0A,0x01,0xBD,0x00,0x08,0xDD,0x00,
+0x00,0x08,0x1C,0x08,0x34,0x34,0x88,0x18,0xB4,0x65,0x6B,0x00,0x00,0xD0,0xD4,0x36,
+0xCF,0x06,0xCE,0x00,0xCE,0x00,0x00,0x00,0x07,0x00,0x2A,0x07,0x01,0x07,0x00,0x00,
+0x2A,0x01,0xBD,0x03,0x01,0xE9,0xC3,0x03,0xB4,0x01,0x67,0x2A,0x01,0xE9,0x00,0x01,
+0xBD,0x00,0x01,0xC1,0x01,0x01,0xBD,0x01,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,
+0xEF,0xEA,0xE7,0xE5,0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,
+0xB0,0xA8,0xA0,0x98,0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,
+0x17,0x0D,0x09,0x07,0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,
+0xCC,0x9B,0x00,0x01,0xBD,0x02,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,0xEF,0xEA,
+0xE7,0xE5,0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,0xB0,0xA8,
+0xA0,0x98,0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,0x17,0x0D,
+0x09,0x07,0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,0xCC,0x9B,
+0x00,0x01,0xBD,0x03,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,0xEF,0xEA,0xE7,0xE5,
+0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,0xB0,0xA8,0xA0,0x98,
+0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,0x17,0x0D,0x09,0x07,
+0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,0xCC,0x9B,0x00,0x01,
+0xBD,0x00,0x01,0xC2,0xC8,0x01,0xCC,0x08,0x25,0xD3,0x81,0x00,0x00,0x00,0x00,0x01,
+0x00,0x04,0x00,0x01,0x13,0x40,0x04,0x09,0x09,0x0B,0x0B,0x32,0x10,0x08,0x00,0x08,
+0x32,0x10,0x08,0x00,0x08,0x32,0x10,0x08,0x00,0x08,0x00,0x00,0x0A,0x08,0x7B,0x01,
+0xE9,0xC5,0x01,0xC6,0xF7,0x01,0xE9,0x00,0x01,0xE9,0xD4,0x01,0xC6,0x6E,0x01,0xE9,
+0x00,0x01,0xE9,0xEF,0x01,0xD3,0x0C,0x01,0xE9,0x00,0x01,0xBD,0x01,0x01,0xE9,0xC8,
+0x01,0xD3,0xA1,0x01,0xE9,0x00,0x01,0xBD,0x00,0x38,0xD5,0x18,0x18,0x19,0x18,0x18,
+0x20,0x18,0x18,0x18,0x10,0x10,0x18,0x18,0x00,0x00,0x18,0x18,0x01,0x01,0x18,0x18,
+0x28,0x28,0x18,0x18,0x18,0x18,0x18,0x2F,0x2F,0x30,0x30,0x31,0x31,0x35,0x35,0x36,
+0x36,0x37,0x37,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFC,0xFC,0x00,0x00,0xFC,
+0xFC,0x00,0x00,0x30,0xD6,0x18,0x18,0x19,0x18,0x18,0x20,0x19,0x18,0x18,0x10,0x10,
+0x18,0x18,0x00,0x00,0x18,0x18,0x01,0x01,0x18,0x18,0x28,0x28,0x18,0x18,0x18,0x18,
+0x18,0x2F,0x2F,0x30,0x30,0x31,0x31,0x35,0x35,0x36,0x36,0x37,0x37,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,
+0xAF,0xEA,0xAA,0xAA,0xAA,0xAB,0xAF,0xEF,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0x01,
+0xBD,0x01,0x0C,0xD8,0xAA,0xAA,0xAB,0xAF,0xEA,0xAA,0xAA,0xAA,0xAE,0xAF,0xEA,0xAA,
+0x01,0xBD,0x02,0x0C,0xD8,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,
+0xAA,0x01,0xBD,0x03,0x18,0xD8,0xBA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,
+0xEA,0xAA,0xBA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0x01,0xBD,
+0x00,0x01,0xE9,0xE4,0x02,0xE7,0x17,0x69,0x01,0xE9,0x00,0x19,0xE7,0x09,0x09,0x00,
+0x07,0xE8,0x00,0x26,0x00,0x07,0x00,0x00,0xE8,0x32,0x00,0xE9,0x0A,0x0A,0x00,0x00,
+0x00,0x01,0x01,0x00,0x12,0x04,0x01,0xBD,0x01,0x09,0xE7,0x02,0x00,0x01,0x20,0x01,
+0x18,0x08,0xA8,0x09,0x01,0xBD,0x02,0x03,0xE7,0x20,0x20,0x00,0x01,0xBD,0x03,0x06,
+0xE7,0x00,0xDC,0x11,0x70,0x00,0x20,0x01,0xE9,0xC9,0x06,0xE7,0x2A,0xCE,0x02,0x70,
+0x01,0x04,0x01,0xE9,0x00,0x01,0xBD,0x00,0x01,0xD1,0x27,0x04,0xC9,0x04,0x0C,0x6D,
+0x01,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x03,0xB9,0x83,0x11,0x2B,0x01,0xBD,0x01,0x02,0xC2,0x08,0x70,
+0x01,0xBD,0x03,0x04,0xB2,0x04,0x38,0x08,0x70,0x01,0xBD,0x00,0x0A,0xB1,0xF8,0x27,
+0x27,0x00,0x00,0x0B,0x0E,0x0B,0x0E,0x33,0x02,0xD2,0x2D,0x2D,0x0B,0xB2,0x80,0x02,
+0x18,0x80,0x70,0x00,0x08,0x1C,0x08,0x11,0x05,0x01,0xE9,0xD1,0x02,0xB2,0x00,0x08,
+0x01,0xE9,0x00,0x01,0xBD,0x02,0x02,0xB2,0xB5,0x0A,0x01,0xBD,0x00,0x08,0xDD,0x00,
+0x00,0x08,0x1C,0x08,0x34,0x34,0x88,0x18,0xB4,0x65,0x6B,0x00,0x00,0xD0,0xD4,0x36,
+0xCF,0x06,0xCE,0x00,0xCE,0x00,0x00,0x00,0x07,0x00,0x2A,0x07,0x01,0x07,0x00,0x00,
+0x2A,0x01,0xBD,0x03,0x01,0xE9,0xC3,0x03,0xB4,0x01,0x67,0x2A,0x01,0xE9,0x00,0x01,
+0xBD,0x00,0x01,0xC1,0x01,0x01,0xBD,0x01,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,
+0xEF,0xEA,0xE7,0xE5,0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,
+0xB0,0xA8,0xA0,0x98,0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,
+0x17,0x0D,0x09,0x07,0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,
+0xCC,0x9B,0x00,0x01,0xBD,0x02,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,0xEF,0xEA,
+0xE7,0xE5,0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,0xB0,0xA8,
+0xA0,0x98,0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,0x17,0x0D,
+0x09,0x07,0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,0xCC,0x9B,
+0x00,0x01,0xBD,0x03,0x39,0xC1,0xFF,0xFB,0xF9,0xF6,0xF4,0xF1,0xEF,0xEA,0xE7,0xE5,
+0xE2,0xDF,0xDD,0xDA,0xD8,0xD5,0xD2,0xCF,0xCC,0xC5,0xBE,0xB7,0xB0,0xA8,0xA0,0x98,
+0x8E,0x85,0x7B,0x72,0x69,0x5E,0x53,0x48,0x3E,0x35,0x2B,0x22,0x17,0x0D,0x09,0x07,
+0x05,0x01,0x00,0x26,0xF0,0x86,0x25,0x6E,0xB6,0xDD,0xF3,0xD8,0xCC,0x9B,0x00,0x01,
+0xBD,0x00,0x01,0xC2,0xC8,0x01,0xCC,0x08,0x25,0xD3,0x81,0x00,0x00,0x00,0x00,0x01,
+0x00,0x04,0x00,0x01,0x13,0x40,0x04,0x09,0x09,0x0B,0x0B,0x32,0x10,0x08,0x00,0x08,
+0x32,0x10,0x08,0x00,0x08,0x32,0x10,0x08,0x00,0x08,0x00,0x00,0x0A,0x08,0x7B,0x01,
+0xE9,0xC5,0x01,0xC6,0xF7,0x01,0xE9,0x00,0x01,0xE9,0xD4,0x01,0xC6,0x6E,0x01,0xE9,
+0x00,0x01,0xE9,0xEF,0x01,0xD3,0x0C,0x01,0xE9,0x00,0x01,0xBD,0x01,0x01,0xE9,0xC8,
+0x01,0xD3,0xA1,0x01,0xE9,0x00,0x01,0xBD,0x00,0x38,0xD5,0x18,0x18,0x19,0x18,0x18,
+0x20,0x18,0x18,0x18,0x10,0x10,0x18,0x18,0x00,0x00,0x18,0x18,0x01,0x01,0x18,0x18,
+0x28,0x28,0x18,0x18,0x18,0x18,0x18,0x2F,0x2F,0x30,0x30,0x31,0x31,0x35,0x35,0x36,
+0x36,0x37,0x37,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFC,0xFC,0x00,0x00,0xFC,
+0xFC,0x00,0x00,0x30,0xD6,0x18,0x18,0x19,0x18,0x18,0x20,0x19,0x18,0x18,0x10,0x10,
+0x18,0x18,0x00,0x00,0x18,0x18,0x01,0x01,0x18,0x18,0x28,0x28,0x18,0x18,0x18,0x18,
+0x18,0x2F,0x2F,0x30,0x30,0x31,0x31,0x35,0x35,0x36,0x36,0x37,0x37,0x18,0x18,0x18,
+0x18,0x18,0x18,0x18,0x18,0x18,0xD8,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,
+0xAF,0xEA,0xAA,0xAA,0xAA,0xAB,0xAF,0xEF,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0x01,
+0xBD,0x01,0x0C,0xD8,0xAA,0xAA,0xAB,0xAF,0xEA,0xAA,0xAA,0xAA,0xAE,0xAF,0xEA,0xAA,
+0x01,0xBD,0x02,0x0C,0xD8,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,
+0xAA,0x01,0xBD,0x03,0x18,0xD8,0xBA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,
+0xEA,0xAA,0xBA,0xAA,0xAA,0xAF,0xEA,0xAA,0xAA,0xAA,0xAA,0xAF,0xEA,0xAA,0x01,0xBD,
+0x00,0x01,0xE9,0xE4,0x02,0xE7,0x17,0x69,0x01,0xE9,0x00,0x19,0xE7,0x09,0x09,0x00,
+0x07,0xE8,0x00,0x26,0x00,0x07,0x00,0x00,0xE8,0x32,0x00,0xE9,0x0A,0x0A,0x00,0x00,
+0x00,0x01,0x01,0x00,0x12,0x04,0x01,0xBD,0x01,0x09,0xE7,0x02,0x00,0x01,0x20,0x01,
+0x18,0x08,0xA8,0x09,0x01,0xBD,0x02,0x03,0xE7,0x20,0x20,0x00,0x01,0xBD,0x03,0x06,
+0xE7,0x00,0xDC,0x11,0x70,0x00,0x20,0x01,0xE9,0xC9,0x06,0xE7,0x2A,0xCE,0x02,0x70,
+0x01,0x04,0x01,0xE9,0x00,0x01,0xBD,0x00,0x01,0xD1,0x27,0x04,0xC9,0x04,0x0C,0x6D,
+0x01,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x30,0xC3,0x1B,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x08,0x78,0x56,0xE7,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x0C,0x2B,0xDF,0x15
diff --git a/drivers/input/touchscreen/hxchipset83112b/Kconfig b/drivers/input/touchscreen/hxchipset83112b/Kconfig
new file mode 100644
index 0000000..2efd9c3
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/Kconfig
@@ -0,0 +1,27 @@
+#
+# Himax Touchscreen driver configuration
+#
+
+config TOUCHSCREEN_HIMAX_I2C
+ tristate "HIMAX chipset i2c touchscreen"
+ depends on TOUCHSCREEN_HIMAX_CHIPSET
+ help
+ This enables support for HIMAX CHIPSET over I2C based touchscreens.
+
+config TOUCHSCREEN_HIMAX_DEBUG
+ tristate "HIMAX debug function"
+ depends on TOUCHSCREEN_HIMAX_I2C
+ help
+ This enables support for HIMAX debug function.
+
+config TOUCHSCREEN_HIMAX_ITO_TEST
+ tristate "HIMAX driver test over Dragon Board"
+ depends on TOUCHSCREEN_HIMAX_I2C
+ help
+ This enables support for HIMAX driver test over Dragon Board.
+
+config HMX_DB
+ tristate "HIMAX driver test over Dragon Board"
+ depends on TOUCHSCREEN_HIMAX_I2C
+ help
+ This enables support for HIMAX driver test over Dragon Board.
diff --git a/drivers/input/touchscreen/hxchipset83112b/Makefile b/drivers/input/touchscreen/hxchipset83112b/Makefile
new file mode 100644
index 0000000..522907a
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/Makefile
@@ -0,0 +1,4 @@
+# Makefile for the Himax touchscreen drivers.
+
+obj-$(CONFIG_TOUCHSCREEN_HIMAX_I2C) += himax_platform.o himax_ic.o himax_common.o himax_debug.o
+obj-$(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST) += himax_ito_test.o
\ No newline at end of file
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_common.c b/drivers/input/touchscreen/hxchipset83112b/himax_common.c
new file mode 100644
index 0000000..24dd7a2b
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_common.c
@@ -0,0 +1,2464 @@
+/* Himax Android Driver Sample Code for common functions
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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 "himax_common.h"
+#include "himax_ic.h"
+
+#define SUPPORT_FINGER_DATA_CHECKSUM 0x0F
+#define TS_WAKE_LOCK_TIMEOUT (2 * HZ)
+#define FRAME_COUNT 5
+
+#ifdef HX_RST_PIN_FUNC
+extern void himax_ic_reset(uint8_t loadconfig,uint8_t int_off);
+#endif
+/*[Arima_8901][jinjia] Upgrade himax fw CID0804_D02_C14 for 0.9mm CG performance 20190903 begin*/
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+/*[Arima_8901][jinjia] Upgrade himax fw CID0804_D02_C12 for 0.9mm CG performance 20190812 begin*/
+/*[Arima_8901][allen_yu] Upgrade himax fw CID0802_D02_C06 for DQA low ground issue 20190530 begin*/
+/*[Arima_8901][allen_yu] Modify to edge trigger and upgrade fw to CID0802_D02_C05 20190322 begin*/
+/*[Arima_8901][allen_yu] Upgrade himax fw CID0802_D02_C04 20190116 begin*/
+/*[Arima_8901][allen_yu] Upgrade himax fw CID0802_D02_C03 20181226 begin*/
+/*[Arima_8901][allen_yu] Modify to edge trigger and upgrade himax fw CIDFF00_D01_C02 20181128 begin*/
+/*[Arima_8901][allen_yu] Upgrade himax first fw CIDFF00_D01_C01 20181122 begin*/
+#if defined(HX_AUTO_UPDATE_FW)
+
+unsigned char i_CTPM_FW_HX83112A[]=
+{
+ 0
+//#include "Yandex_Truly_Arima_CIDFF04_D02_C04_20180801.i"
+};
+unsigned char i_CTPM_FW_HX83112B[]=
+{
+#include "FP_DJN_Arima_CID0804_D02_C14_20190903.i"
+};
+
+#endif
+/*[Arima_8901][allen_yu] 20181122 end*/
+/*[Arima_8901][allen_yu] 20181128 end*/
+/*[Arima_8901][allen_yu] 20181226 end*/
+/*[Arima_8901][allen_yu] 20190116 end*/
+/*[Arima_8901][allen_yu] 20190322 end*/
+/*[Arima_8901][allen_yu] 20190530 end*/
+/*[Arima_8901][jinjia] 20190812 end*/
+/*[Arima_8901][TracyChui] 20190816 end */
+/*[Arima_8901][jinjia] 20190812 end*/
+
+/*[Arima_8710][allen_yu] Solve the report point issue 20180619 begin*/
+static void himax_release_all_finger(void);
+/*[Arima_8710][allen_yu] 20180619 end*/
+
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+extern void himax_resend_cmd_func(bool suspended);
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+extern void himax_rst_cmd_recovery_func(bool suspended);
+/*[Arima_7947][allen_yu] 20171221 end*/
+#endif
+
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+#ifdef HX_RST_PIN_FUNC
+int reset_flag =1;
+#endif
+/*[Arima_8710][allen_yu] 20180423 end*/
+
+struct himax_ts_data *private_ts;
+struct himax_ic_data *ic_data;
+struct himax_report_data *hx_touch_data;
+
+static int HX_TOUCH_INFO_POINT_CNT = 0;
+
+unsigned long FW_VER_MAJ_FLASH_ADDR;
+unsigned long FW_VER_MIN_FLASH_ADDR;
+unsigned long CFG_VER_MAJ_FLASH_ADDR;
+unsigned long CFG_VER_MIN_FLASH_ADDR;
+unsigned long CID_VER_MAJ_FLASH_ADDR;
+unsigned long CID_VER_MIN_FLASH_ADDR;
+//unsigned long PANEL_VERSION_ADDR;
+
+unsigned long FW_VER_MAJ_FLASH_LENG;
+unsigned long FW_VER_MIN_FLASH_LENG;
+unsigned long CFG_VER_MAJ_FLASH_LENG;
+unsigned long CFG_VER_MIN_FLASH_LENG;
+unsigned long CID_VER_MAJ_FLASH_LENG;
+unsigned long CID_VER_MIN_FLASH_LENG;
+//unsigned long PANEL_VERSION_LENG;
+
+unsigned long FW_CFG_VER_FLASH_ADDR;
+
+#ifdef HX_AUTO_UPDATE_FW
+int g_i_FW_VER = 0;
+int g_i_CFG_VER = 0;
+int g_i_CID_MAJ = 0; //GUEST ID
+int g_i_CID_MIN = 0; //VER for GUEST
+#endif
+
+unsigned char IC_TYPE = 11;
+unsigned char IC_CHECKSUM = 0;
+
+#ifdef HX_ESD_RECOVERY
+u8 HX_ESD_RESET_ACTIVATE = 0;
+int hx_EB_event_flag = 0;
+int hx_EC_event_flag = 0;
+int hx_ED_event_flag = 0;
+extern int g_zero_event_count;
+#endif
+u8 HX_HW_RESET_ACTIVATE = 0;
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+extern int himax_touch_proc_init(void);
+extern void himax_touch_proc_deinit(void);
+//PROC-START
+#ifdef HX_TP_PROC_FLASH_DUMP
+extern void himax_ts_flash_func(void);
+extern void setFlashBuffer(void);
+extern bool getFlashDumpGoing(void);
+extern uint8_t getSysOperation(void);
+extern void setSysOperation(uint8_t operation);
+#endif
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#ifdef HX_TP_PROC_GUEST_INFO
+extern int himax_guest_info_get_status(void);
+extern void himax_guest_info_set_status(int setting);
+extern int himax_read_project_id(void);
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+
+#if defined(HX_PLATFOME_DEFINE_KEY)
+extern void himax_platform_key(void);
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+extern void himax_ts_diag_func(void);
+
+extern int16_t *getMutualBuffer(void);
+extern int16_t *getMutualNewBuffer(void);
+extern int16_t *getMutualOldBuffer(void);
+extern int16_t *getSelfBuffer(void);
+extern uint8_t getXChannel(void);
+extern uint8_t getYChannel(void);
+extern uint8_t getDiagCommand(void);
+extern void setXChannel(uint8_t x);
+extern void setYChannel(uint8_t y);
+extern void setMutualBuffer(void);
+extern void setMutualNewBuffer(void);
+extern void setMutualOldBuffer(void);
+extern uint8_t diag_coor[128];
+extern int himax_set_diag_cmd(struct himax_ic_data *ic_data,struct himax_report_data *hx_touch_data);
+#ifdef HX_TP_PROC_2T2R
+extern bool Is_2T2R;
+extern int16_t *getMutualBuffer_2(void);
+extern uint8_t getXChannel_2(void);
+extern uint8_t getYChannel_2(void);
+extern void setXChannel_2(uint8_t x);
+extern void setYChannel_2(uint8_t y);
+extern void setMutualBuffer_2(void);
+#endif
+#endif
+//PROC-END
+#endif
+
+extern int himax_parse_dt(struct himax_ts_data *ts,
+ struct himax_i2c_platform_data *pdata);
+extern bool himax_calculateChecksum(struct i2c_client *client, bool change_iref);
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+static uint8_t vk_press = 0x00;
+#endif
+static uint8_t AA_press = 0x00;
+static uint8_t EN_NoiseFilter = 0x00;
+static uint8_t Last_EN_NoiseFilter = 0x00;
+static int hx_point_num = 0; // for himax_ts_work_func use
+static int p_point_num = 0xFFFF;
+static int tpd_key = 0x00;
+static int tpd_key_old = 0x00;
+static int probe_fail_flag = 0;
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+#ifdef HX_USB_DETECT_GLOBAL
+//bool USB_detect_flag = 0;
+#endif
+/*[Arima_8901][TracyChui] 20190816 end */
+
+#if defined(CONFIG_FB)
+int fb_notifier_callback(struct notifier_block *self,
+ unsigned long event, void *data);
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+static void himax_ts_early_suspend(struct early_suspend *h);
+static void himax_ts_late_resume(struct early_suspend *h);
+#endif
+
+#if defined(HX_PALM_REPORT)
+int himax_palm_detect(uint8_t *buf);
+#endif
+
+#ifdef HX_GESTURE_TRACK
+static int gest_pt_cnt;
+static int gest_pt_x[GEST_PT_MAX_NUM];
+static int gest_pt_y[GEST_PT_MAX_NUM];
+static int gest_start_x=0,gest_start_y=0,gest_end_x=0,gest_end_y=0;
+static int gest_width=0,gest_height=0,gest_mid_x=0,gest_mid_y=0;
+static int gn_gesture_coor[16];
+#endif
+
+#ifdef HX_CHIP_STATUS_MONITOR
+struct chip_monitor_data *g_chip_monitor_data;
+#endif
+
+#if defined(HX_TP_PROC_SELF_TEST)|| defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+extern int g_self_test_entered;
+#endif
+
+int himax_report_data_init(void);
+extern int himax_get_touch_data_size(void);
+//void himax_HW_reset(uint8_t loadconfig,uint8_t int_off);
+extern void himax_log_touch_data(uint8_t *buf,struct himax_report_data *hx_touch_data);
+extern void himax_log_touch_event(int x,int y,int w,int loop_i,uint8_t EN_NoiseFilter,int touched);
+extern void himax_log_touch_event_detail(struct himax_ts_data *ts,int x,int y,int w,int loop_i,uint8_t EN_NoiseFilter,int touched,uint16_t old_finger);
+
+#if defined(HX_ESD_RECOVERY)
+extern void himax_esd_ic_reset(void);
+extern int himax_ic_esd_recovery(int hx_esd_event,int hx_zero_event,int length);
+#endif
+
+extern int himax_dev_set(struct himax_ts_data *ts);
+extern int himax_input_register_device(struct input_dev *input_dev);
+
+
+#ifdef HX_ZERO_FLASH
+extern void himax_0f_operation(struct work_struct *work);
+#endif
+
+int himax_input_register(struct himax_ts_data *ts)
+{
+ int ret = 0;
+
+ ret = himax_dev_set(ts);
+ if(ret < 0)
+ goto input_device_fail;
+
+ set_bit(EV_SYN, ts->input_dev->evbit);
+ set_bit(EV_ABS, ts->input_dev->evbit);
+ set_bit(EV_KEY, ts->input_dev->evbit);
+
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+#if defined(HX_PLATFOME_DEFINE_KEY)
+ himax_platform_key();
+#else
+ set_bit(KEY_BACK, ts->input_dev->keybit);
+ set_bit(KEY_HOME, ts->input_dev->keybit);
+ set_bit(KEY_MENU, ts->input_dev->keybit);
+ set_bit(KEY_SEARCH, ts->input_dev->keybit);
+ set_bit(KEY_APP_SWITCH, ts->input_dev->keybit);
+#endif
+#endif
+
+#if defined(HX_SMART_WAKEUP) || defined(HX_PALM_REPORT)
+ set_bit(KEY_POWER, ts->input_dev->keybit);
+#endif
+#if defined(HX_SMART_WAKEUP)
+ set_bit(KEY_CUST_01, ts->input_dev->keybit);
+ set_bit(KEY_CUST_02, ts->input_dev->keybit);
+ set_bit(KEY_CUST_03, ts->input_dev->keybit);
+ set_bit(KEY_CUST_04, ts->input_dev->keybit);
+ set_bit(KEY_CUST_05, ts->input_dev->keybit);
+ set_bit(KEY_CUST_06, ts->input_dev->keybit);
+ set_bit(KEY_CUST_07, ts->input_dev->keybit);
+ set_bit(KEY_CUST_08, ts->input_dev->keybit);
+ set_bit(KEY_CUST_09, ts->input_dev->keybit);
+ set_bit(KEY_CUST_10, ts->input_dev->keybit);
+ set_bit(KEY_CUST_11, ts->input_dev->keybit);
+ set_bit(KEY_CUST_12, ts->input_dev->keybit);
+ set_bit(KEY_CUST_13, ts->input_dev->keybit);
+ set_bit(KEY_CUST_14, ts->input_dev->keybit);
+ set_bit(KEY_CUST_15, ts->input_dev->keybit);
+#endif
+ set_bit(BTN_TOUCH, ts->input_dev->keybit);
+ set_bit(INPUT_PROP_DIRECT, ts->input_dev->propbit);
+
+#ifdef HX_PROTOCOL_A
+ //ts->input_dev->mtsize = ts->nFinger_support;
+ input_set_abs_params(ts->input_dev, ABS_MT_TRACKING_ID,
+ 0, 3, 0, 0);
+#else
+ set_bit(MT_TOOL_FINGER, ts->input_dev->keybit);
+#if defined(HX_PROTOCOL_B_3PA)
+ input_mt_init_slots(ts->input_dev, ts->nFinger_support,0);
+#else
+ input_mt_init_slots(ts->input_dev, ts->nFinger_support);
+#endif
+#endif
+
+ I("input_set_abs_params: mix_x %d, max_x %d, min_y %d, max_y %d\n",
+ ts->pdata->abs_x_min, ts->pdata->abs_x_max, ts->pdata->abs_y_min, ts->pdata->abs_y_max);
+
+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X,ts->pdata->abs_x_min, ts->pdata->abs_x_max, ts->pdata->abs_x_fuzz, 0);
+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y,ts->pdata->abs_y_min, ts->pdata->abs_y_max, ts->pdata->abs_y_fuzz, 0);
+ input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR,ts->pdata->abs_pressure_min, ts->pdata->abs_pressure_max, ts->pdata->abs_pressure_fuzz, 0);
+#ifndef HX_PROTOCOL_A
+ input_set_abs_params(ts->input_dev, ABS_MT_PRESSURE,ts->pdata->abs_pressure_min, ts->pdata->abs_pressure_max, ts->pdata->abs_pressure_fuzz, 0);
+ input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR,ts->pdata->abs_width_min, ts->pdata->abs_width_max, ts->pdata->abs_pressure_fuzz, 0);
+#endif
+// input_set_abs_params(ts->input_dev, ABS_MT_AMPLITUDE, 0, ((ts->pdata->abs_pressure_max << 16) | ts->pdata->abs_width_max), 0, 0);
+// input_set_abs_params(ts->input_dev, ABS_MT_POSITION, 0, (BIT(31) | (ts->pdata->abs_x_max << 16) | ts->pdata->abs_y_max), 0, 0);
+
+
+ if(himax_input_register_device(ts->input_dev) == 0)
+ return NO_ERR;
+ else
+ ret = INPUT_REGISTER_FAIL;
+
+input_device_fail:
+ I("%s, input device register fail!\n",__func__);
+ return ret;
+}
+
+static void calcDataSize(uint8_t finger_num)
+{
+ struct himax_ts_data *ts_data = private_ts;
+ ts_data->coord_data_size = 4 * finger_num;
+ ts_data->area_data_size = ((finger_num / 4) + (finger_num % 4 ? 1 : 0)) * 4;
+ //printk("allenyu : area_data_size = %d \n",ts_data->area_data_size );
+ ts_data->coordInfoSize = ts_data->coord_data_size + ts_data->area_data_size + 4;
+ ts_data->raw_data_frame_size = 128 - ts_data->coord_data_size - ts_data->area_data_size - 4 - 4 - 1;
+ if(ts_data->raw_data_frame_size == 0)
+ {
+ E("%s: could NOT calculate! \n", __func__);
+ return;
+ }
+ ts_data->raw_data_nframes = ((uint32_t)ts_data->x_channel * ts_data->y_channel +
+ ts_data->x_channel + ts_data->y_channel) / ts_data->raw_data_frame_size +
+ (((uint32_t)ts_data->x_channel * ts_data->y_channel +
+ ts_data->x_channel + ts_data->y_channel) % ts_data->raw_data_frame_size)? 1 : 0;
+ I("%s: coord_data_size: %d, area_data_size:%d, raw_data_frame_size:%d, raw_data_nframes:%d", __func__, ts_data->coord_data_size, ts_data->area_data_size, ts_data->raw_data_frame_size, ts_data->raw_data_nframes);
+}
+
+void calculate_point_number(void)
+{
+ HX_TOUCH_INFO_POINT_CNT = ic_data->HX_MAX_PT * 4 ;
+
+ if ( (ic_data->HX_MAX_PT % 4) == 0)
+ HX_TOUCH_INFO_POINT_CNT += (ic_data->HX_MAX_PT / 4) * 4 ;
+ else
+ HX_TOUCH_INFO_POINT_CNT += ((ic_data->HX_MAX_PT / 4) +1) * 4 ;
+}
+
+#ifdef HX_AUTO_UPDATE_FW
+static int i_update_FW(void)
+{
+ int upgrade_times = 0;
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+ //unsigned char* ImageBuffer = i_CTPM_FW;
+ //int fullFileLength = sizeof(i_CTPM_FW);
+ unsigned char* ImageBuffer = NULL;
+ int fullFileLength = 0;
+/*[Arima_8710][allen_yu] 20180828 end*/
+ uint8_t ret = 0, result = 0;
+
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+if(IC_TYPE == HX_83112A_SERIES_PWON)
+ {
+ ImageBuffer = i_CTPM_FW_HX83112A;
+ fullFileLength = sizeof(i_CTPM_FW_HX83112A);
+ }
+ else/*HX_83112B_SERIES_PWON*/
+ {
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+ //printk("%s: (%d)No upgrade 2nd source fw\n", __func__, __LINE__);
+ //return false;
+ ImageBuffer = i_CTPM_FW_HX83112B;
+ fullFileLength = sizeof(i_CTPM_FW_HX83112B);
+/*[Arima_8710][allen_yu] 20180830 end*/
+ }
+/*[Arima_8710][allen_yu] 20180828 end*/
+ I("%s: i_fullFileLength = %d\n", __func__,fullFileLength);
+
+ himax_int_enable(private_ts->client->irq,0);
+update_retry:
+ if(fullFileLength == FW_SIZE_32k)
+ {
+ ret = fts_ctpm_fw_upgrade_with_sys_fs_32k(private_ts->client,ImageBuffer,fullFileLength,false);
+ }
+ else if(fullFileLength == FW_SIZE_60k)
+ {
+ ret = fts_ctpm_fw_upgrade_with_sys_fs_60k(private_ts->client,ImageBuffer,fullFileLength,false);
+ }
+ else if (fullFileLength == FW_SIZE_64k)
+ {
+ ret = fts_ctpm_fw_upgrade_with_sys_fs_64k(private_ts->client,ImageBuffer,fullFileLength,false);
+ }
+ else if (fullFileLength == FW_SIZE_124k)
+ {
+ ret = fts_ctpm_fw_upgrade_with_sys_fs_124k(private_ts->client,ImageBuffer,fullFileLength,false);
+ }
+ else if (fullFileLength == FW_SIZE_128k)
+ {
+ ret = fts_ctpm_fw_upgrade_with_sys_fs_128k(private_ts->client,ImageBuffer,fullFileLength,false);
+ }
+ if(ret == 0)
+ {
+ upgrade_times++;
+ E("%s: TP upgrade error, upgrade_times = %d\n", __func__, upgrade_times);
+ if(upgrade_times < 3)
+ goto update_retry;
+ else
+ result = -1;//upgrade fail
+ }
+ else
+ {
+ ic_data->vendor_fw_ver = g_i_FW_VER;
+ ic_data->vendor_config_ver = g_i_CFG_VER;
+ result = 1;//upgrade success
+ I("%s: TP upgrade OK\n", __func__);
+ }
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(true,false);
+#endif
+ himax_int_enable(private_ts->client->irq,1);
+ return result;
+}
+#endif
+
+int himax_loadSensorConfig(struct i2c_client *client, struct himax_i2c_platform_data *pdata)
+{
+
+ if (!client)
+ {
+ E("%s: Necessary parameters client are null!\n", __func__);
+ return -1;
+ }
+
+ I("%s: initialization complete\n", __func__);
+
+ return NO_ERR;
+}
+
+#ifdef HX_ESD_RECOVERY
+void himax_esd_hw_reset(void)
+{
+ I("START_Himax TP: ESD - Reset\n");
+#if defined(HX_TP_PROC_SELF_TEST) || defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+ if (g_self_test_entered == 1)
+ {
+ I("In self test ,not TP: ESD - Reset\n");
+ return;
+ }
+#endif
+ HX_ESD_RESET_ACTIVATE = 1;
+#if defined(HX_CHIP_STATUS_MONITOR)
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT=0;
+#endif
+ himax_esd_ic_reset();
+
+ I("END_Himax TP: ESD - Reset\n");
+}
+#endif
+
+#ifdef HX_CHIP_STATUS_MONITOR
+static void himax_chip_monitor_function(struct work_struct *work) //for ESD solution
+{
+ int ret=0;
+
+ I(" %s: POLLING_COUNT=%x, STATUS=%x\n", __func__,g_chip_monitor_data->HX_CHIP_POLLING_COUNT,ret);
+ if(g_chip_monitor_data->HX_CHIP_POLLING_COUNT >= (g_chip_monitor_data->HX_POLLING_TIMES-1))//POLLING TIME
+ {
+ g_chip_monitor_data->HX_ON_HAND_SHAKING=1;
+ ret = himax_hand_shaking(private_ts->client); //0:Running, 1:Stop, 2:I2C Fail
+ g_chip_monitor_data->HX_ON_HAND_SHAKING=0;
+ if(ret == 2)
+ {
+ I(" %s: I2C Fail \n", __func__);
+ himax_esd_hw_reset();
+ }
+ else if(ret == 1)
+ {
+ I(" %s: MCU Stop \n", __func__);
+ himax_esd_hw_reset();
+ }
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;//clear polling counter
+ }
+ else
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT++;
+
+
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+ queue_delayed_work(private_ts->himax_chip_monitor_wq, &private_ts->himax_chip_monitor, g_chip_monitor_data->HX_POLLING_TIMER*HZ);
+
+ return;
+}
+#endif
+
+#ifdef HX_SMART_WAKEUP
+#ifdef HX_GESTURE_TRACK
+static void gest_pt_log_coordinate(int rx, int tx)
+{
+ //driver report x y with range 0 - 255 , we scale it up to x/y pixel
+ gest_pt_x[gest_pt_cnt] = rx*(ic_data->HX_X_RES)/255;
+ gest_pt_y[gest_pt_cnt] = tx*(ic_data->HX_Y_RES)/255;
+}
+#endif
+static int himax_parse_wake_event(struct himax_ts_data *ts)
+{
+ uint8_t *buf;
+#ifdef HX_GESTURE_TRACK
+ int tmp_max_x=0x00,tmp_min_x=0xFFFF,tmp_max_y=0x00,tmp_min_y=0xFFFF;
+ int gest_len;
+#endif
+ int i=0, check_FC = 0, gesture_flag = 0;
+
+ buf = kzalloc(hx_touch_data->event_size*sizeof(uint8_t),GFP_KERNEL);
+ memcpy(buf,hx_touch_data->hx_event_buf,hx_touch_data->event_size);
+
+ for(i=0; i<GEST_PTLG_ID_LEN; i++)
+ {
+ if (check_FC==0)
+ {
+ if((buf[0]!=0x00)&&((buf[0]<=0x0F)||(buf[0]==0x80)))
+ {
+ check_FC = 1;
+ gesture_flag = buf[i];
+ }
+ else
+ {
+ check_FC = 0;
+ I("ID START at %x , value = %x skip the event\n", i, buf[i]);
+ break;
+ }
+ }
+ else
+ {
+ if(buf[i]!=gesture_flag)
+ {
+ check_FC = 0;
+ I("ID NOT the same %x != %x So STOP parse event\n", buf[i], gesture_flag);
+ break;
+ }
+ }
+
+ I("0x%2.2X ", buf[i]);
+ if (i % 8 == 7)
+ I("\n");
+ }
+ I("Himax gesture_flag= %x\n",gesture_flag );
+ I("Himax check_FC is %d\n", check_FC);
+
+ if (check_FC == 0)
+ return 0;
+ if(buf[GEST_PTLG_ID_LEN] != GEST_PTLG_HDR_ID1 ||
+ buf[GEST_PTLG_ID_LEN+1] != GEST_PTLG_HDR_ID2)
+ return 0;
+
+#ifdef HX_GESTURE_TRACK
+ if(buf[GEST_PTLG_ID_LEN] == GEST_PTLG_HDR_ID1 &&
+ buf[GEST_PTLG_ID_LEN+1] == GEST_PTLG_HDR_ID2)
+ {
+ gest_len = buf[GEST_PTLG_ID_LEN+2];
+
+ I("gest_len = %d ",gest_len);
+
+ i = 0;
+ gest_pt_cnt = 0;
+ I("gest doornidate start \n %s",__func__);
+ while(i<(gest_len+1)/2)
+ {
+ gest_pt_log_coordinate(buf[GEST_PTLG_ID_LEN+4+i*2],buf[GEST_PTLG_ID_LEN+4+i*2+1]);
+ i++;
+
+ I("gest_pt_x[%d]=%d \n",gest_pt_cnt,gest_pt_x[gest_pt_cnt]);
+ I("gest_pt_y[%d]=%d \n",gest_pt_cnt,gest_pt_y[gest_pt_cnt]);
+
+ gest_pt_cnt +=1;
+ }
+ if(gest_pt_cnt)
+ {
+ for(i=0; i<gest_pt_cnt; i++)
+ {
+ if(tmp_max_x<gest_pt_x[i])
+ tmp_max_x=gest_pt_x[i];
+ if(tmp_min_x>gest_pt_x[i])
+ tmp_min_x=gest_pt_x[i];
+ if(tmp_max_y<gest_pt_y[i])
+ tmp_max_y=gest_pt_y[i];
+ if(tmp_min_y>gest_pt_y[i])
+ tmp_min_y=gest_pt_y[i];
+ }
+ I("gest_point x_min= %d, x_max= %d, y_min= %d, y_max= %d\n",tmp_min_x,tmp_max_x,tmp_min_y,tmp_max_y);
+ gest_start_x=gest_pt_x[0];
+ gn_gesture_coor[0] = gest_start_x;
+ gest_start_y=gest_pt_y[0];
+ gn_gesture_coor[1] = gest_start_y;
+ gest_end_x=gest_pt_x[gest_pt_cnt-1];
+ gn_gesture_coor[2] = gest_end_x;
+ gest_end_y=gest_pt_y[gest_pt_cnt-1];
+ gn_gesture_coor[3] = gest_end_y;
+ gest_width = tmp_max_x - tmp_min_x;
+ gn_gesture_coor[4] = gest_width;
+ gest_height = tmp_max_y - tmp_min_y;
+ gn_gesture_coor[5] = gest_height;
+ gest_mid_x = (tmp_max_x + tmp_min_x)/2;
+ gn_gesture_coor[6] = gest_mid_x;
+ gest_mid_y = (tmp_max_y + tmp_min_y)/2;
+ gn_gesture_coor[7] = gest_mid_y;
+ gn_gesture_coor[8] = gest_mid_x;//gest_up_x
+ gn_gesture_coor[9] = gest_mid_y-gest_height/2;//gest_up_y
+ gn_gesture_coor[10] = gest_mid_x;//gest_down_x
+ gn_gesture_coor[11] = gest_mid_y+gest_height/2; //gest_down_y
+ gn_gesture_coor[12] = gest_mid_x-gest_width/2; //gest_left_x
+ gn_gesture_coor[13] = gest_mid_y; //gest_left_y
+ gn_gesture_coor[14] = gest_mid_x+gest_width/2; //gest_right_x
+ gn_gesture_coor[15] = gest_mid_y; //gest_right_y
+
+ }
+
+ }
+#endif
+ if(gesture_flag != 0x80)
+ {
+ if(!ts->gesture_cust_en[gesture_flag])
+ {
+ I("%s NOT report customer key \n ",__func__);
+ return 0;//NOT report customer key
+ }
+ }
+ else
+ {
+ if(!ts->gesture_cust_en[0])
+ {
+ I("%s NOT report report double click \n",__func__);
+ return 0;//NOT report power key
+ }
+ }
+
+ if(gesture_flag == 0x80)
+ return EV_GESTURE_PWR;
+ else
+ return gesture_flag;
+}
+
+void himax_wake_check_func(void)
+{
+ int ret_event = 0, KEY_EVENT = 0;
+
+ ret_event = himax_parse_wake_event(private_ts);
+ switch (ret_event)
+ {
+ case EV_GESTURE_PWR:
+ KEY_EVENT = KEY_POWER;
+ break;
+ case EV_GESTURE_01:
+ KEY_EVENT = KEY_CUST_01;
+ break;
+ case EV_GESTURE_02:
+ KEY_EVENT = KEY_CUST_02;
+ break;
+ case EV_GESTURE_03:
+ KEY_EVENT = KEY_CUST_03;
+ break;
+ case EV_GESTURE_04:
+ KEY_EVENT = KEY_CUST_04;
+ break;
+ case EV_GESTURE_05:
+ KEY_EVENT = KEY_CUST_05;
+ break;
+ case EV_GESTURE_06:
+ KEY_EVENT = KEY_CUST_06;
+ break;
+ case EV_GESTURE_07:
+ KEY_EVENT = KEY_CUST_07;
+ break;
+ case EV_GESTURE_08:
+ KEY_EVENT = KEY_CUST_08;
+ break;
+ case EV_GESTURE_09:
+ KEY_EVENT = KEY_CUST_09;
+ break;
+ case EV_GESTURE_10:
+ KEY_EVENT = KEY_CUST_10;
+ break;
+ case EV_GESTURE_11:
+ KEY_EVENT = KEY_CUST_11;
+ break;
+ case EV_GESTURE_12:
+ KEY_EVENT = KEY_CUST_12;
+ break;
+ case EV_GESTURE_13:
+ KEY_EVENT = KEY_CUST_13;
+ break;
+ case EV_GESTURE_14:
+ KEY_EVENT = KEY_CUST_14;
+ break;
+ case EV_GESTURE_15:
+ KEY_EVENT = KEY_CUST_15;
+ break;
+ }
+ if(ret_event)
+ {
+ I(" %s SMART WAKEUP KEY event %x press\n",__func__,KEY_EVENT);
+ input_report_key(private_ts->input_dev, KEY_EVENT, 1);
+ input_sync(private_ts->input_dev);
+ //msleep(100);
+ I(" %s SMART WAKEUP KEY event %x release\n",__func__,KEY_EVENT);
+ input_report_key(private_ts->input_dev, KEY_EVENT, 0);
+ input_sync(private_ts->input_dev);
+ FAKE_POWER_KEY_SEND=true;
+#ifdef HX_GESTURE_TRACK
+ I("gest_start_x= %d, gest_start_y= %d, gest_end_x= %d, gest_end_y= %d\n",gest_start_x,gest_start_y,
+ gest_end_x,gest_end_y);
+ I("gest_width= %d, gest_height= %d, gest_mid_x= %d, gest_mid_y= %d\n",gest_width,gest_height,
+ gest_mid_x,gest_mid_y);
+ I("gest_up_x= %d, gest_up_y= %d, gest_down_x= %d, gest_down_y= %d\n",gn_gesture_coor[8],gn_gesture_coor[9],
+ gn_gesture_coor[10],gn_gesture_coor[11]);
+ I("gest_left_x= %d, gest_left_y= %d, gest_right_x= %d, gest_right_y= %d\n",gn_gesture_coor[12],gn_gesture_coor[13],
+ gn_gesture_coor[14],gn_gesture_coor[15]);
+#endif
+ }
+}
+
+#endif
+
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+static void himax_ts_button_func(int tp_key_index,struct himax_ts_data *ts)
+{
+ uint16_t x_position = 0, y_position = 0;
+ if ( tp_key_index != 0x00)
+ {
+ I("virtual key index =%x\n",tp_key_index);
+ if ( tp_key_index == 0x01)
+ {
+ vk_press = 1;
+ I("back key pressed\n");
+ if (ts->pdata->virtual_key)
+ {
+ if (ts->button[0].index)
+ {
+ x_position = (ts->button[0].x_range_min + ts->button[0].x_range_max) / 2;
+ y_position = (ts->button[0].y_range_min + ts->button[0].y_range_max) / 2;
+ }
+#ifdef HX_PROTOCOL_A
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, 0);
+
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+ input_mt_sync(ts->input_dev);
+#else
+ input_mt_slot(ts->input_dev, 0);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER,
+ 1);
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+#endif
+ }
+ else
+ input_report_key(ts->input_dev, KEY_BACK, 1);
+ }
+ else if ( tp_key_index == 0x02)
+ {
+ vk_press = 1;
+ I("home key pressed\n");
+ if (ts->pdata->virtual_key)
+ {
+ if (ts->button[1].index)
+ {
+ x_position = (ts->button[1].x_range_min + ts->button[1].x_range_max) / 2;
+ y_position = (ts->button[1].y_range_min + ts->button[1].y_range_max) / 2;
+ }
+#ifdef HX_PROTOCOL_A
+ input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, 0);
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
+ 100);
+
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+ input_mt_sync(ts->input_dev);
+#else
+ input_mt_slot(ts->input_dev, 0);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER,
+ 1);
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+#endif
+ }
+ else
+ input_report_key(ts->input_dev, KEY_HOME, 1);
+ }
+ else if ( tp_key_index == 0x04)
+ {
+ vk_press = 1;
+ I("APP_switch key pressed\n");
+ if (ts->pdata->virtual_key)
+ {
+ if (ts->button[2].index)
+ {
+ x_position = (ts->button[2].x_range_min + ts->button[2].x_range_max) / 2;
+ y_position = (ts->button[2].y_range_min + ts->button[2].y_range_max) / 2;
+ }
+#ifdef HX_PROTOCOL_A
+ input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, 0);
+
+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+ input_mt_sync(ts->input_dev);
+#else
+ input_mt_slot(ts->input_dev, 0);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER,
+ 1);
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE,
+ 100);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X,
+ x_position);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y,
+ y_position);
+#endif
+ }
+ else
+ input_report_key(ts->input_dev, KEY_APP_SWITCH, 1);
+ }
+ input_sync(ts->input_dev);
+ }
+ else/*tp_key_index =0x00*/
+ {
+ I("virtual key released\n");
+ vk_press = 0;
+#ifndef HX_PROTOCOL_A
+ input_mt_slot(ts->input_dev, 0);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 0);
+#else
+ input_mt_sync(ts->input_dev);
+#endif
+ input_report_key(ts->input_dev, KEY_BACK, 0);
+ input_report_key(ts->input_dev, KEY_HOME, 0);
+ input_report_key(ts->input_dev, KEY_APP_SWITCH, 0);
+#ifndef HX_PROTOCOL_A
+ input_sync(ts->input_dev);
+#endif
+ }
+}
+
+void himax_report_key(struct himax_ts_data *ts)
+{
+ if(hx_point_num!=0)
+ {
+ //Touch KEY
+ if ((tpd_key_old != 0x00)&&(tpd_key == 0x00))
+ {
+ //temp_x[0] = 0xFFFF;
+ //temp_y[0] = 0xFFFF;
+ //temp_x[1] = 0xFFFF;
+ //temp_y[1] = 0xFFFF;
+ hx_touch_data->finger_on = 0;
+#ifdef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ himax_ts_button_func(tpd_key,ts);
+ }
+#ifndef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ input_sync(ts->input_dev);
+ }
+ else
+ {
+ if (tpd_key != 0x00)
+ {
+ hx_touch_data->finger_on = 1;
+#ifdef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ himax_ts_button_func(tpd_key,ts);
+
+ }
+ else if ((tpd_key_old != 0x00)&&(tpd_key == 0x00))
+ {
+ hx_touch_data->finger_on = 0;
+#ifdef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ himax_ts_button_func(tpd_key,ts);
+
+ }
+#ifndef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ input_sync(ts->input_dev);
+ }
+ tpd_key_old = tpd_key;
+ Last_EN_NoiseFilter = EN_NoiseFilter;
+}
+#endif
+
+int himax_report_data_init(void)
+{
+ if(hx_touch_data->hx_coord_buf!=NULL)
+ {
+ kfree(hx_touch_data->hx_coord_buf);
+ }
+#ifdef HX_TP_PROC_DIAG
+ if(hx_touch_data->hx_rawdata_buf!=NULL)
+ {
+ kfree(hx_touch_data->hx_rawdata_buf);
+ }
+#endif
+
+#if defined(HX_SMART_WAKEUP)
+ hx_touch_data->event_size = himax_get_touch_data_size();
+ if(hx_touch_data->hx_event_buf!=NULL)
+ {
+ kfree(hx_touch_data->hx_event_buf);
+ }
+#endif
+
+ hx_touch_data->touch_all_size = himax_get_touch_data_size();
+ hx_touch_data->raw_cnt_max = ic_data->HX_MAX_PT/4;
+ hx_touch_data->raw_cnt_rmd = ic_data->HX_MAX_PT%4;
+
+ if (hx_touch_data->raw_cnt_rmd != 0x00) //more than 4 fingers
+ {
+ hx_touch_data->rawdata_size = cal_data_len(hx_touch_data->raw_cnt_rmd, ic_data->HX_MAX_PT, hx_touch_data->raw_cnt_max);
+ hx_touch_data->touch_info_size = (ic_data->HX_MAX_PT+hx_touch_data->raw_cnt_max+2)*4;
+ }
+ else //less than 4 fingers
+ {
+ hx_touch_data->rawdata_size = cal_data_len(hx_touch_data->raw_cnt_rmd, ic_data->HX_MAX_PT, hx_touch_data->raw_cnt_max);
+ hx_touch_data->touch_info_size = (ic_data->HX_MAX_PT+hx_touch_data->raw_cnt_max+1)*4;
+ }
+ if((ic_data->HX_TX_NUM * ic_data->HX_RX_NUM + ic_data->HX_TX_NUM + ic_data->HX_RX_NUM) % hx_touch_data->rawdata_size == 0)
+ hx_touch_data->rawdata_frame_size = (ic_data->HX_TX_NUM * ic_data->HX_RX_NUM + ic_data->HX_TX_NUM + ic_data->HX_RX_NUM) / hx_touch_data->rawdata_size;
+ else
+ hx_touch_data->rawdata_frame_size = (ic_data->HX_TX_NUM * ic_data->HX_RX_NUM + ic_data->HX_TX_NUM + ic_data->HX_RX_NUM) / hx_touch_data->rawdata_size + 1;
+ I("%s: rawdata_frame_size = %d ",__func__,hx_touch_data->rawdata_frame_size);
+ I("%s: ic_data->HX_MAX_PT:%d,hx_raw_cnt_max:%d,hx_raw_cnt_rmd:%d,g_hx_rawdata_size:%d,hx_touch_data->touch_info_size:%d\n",__func__,ic_data->HX_MAX_PT,hx_touch_data->raw_cnt_max,hx_touch_data->raw_cnt_rmd,hx_touch_data->rawdata_size,hx_touch_data->touch_info_size);
+
+ hx_touch_data->hx_coord_buf = kzalloc(sizeof(uint8_t)*(hx_touch_data->touch_info_size),GFP_KERNEL);
+ if(hx_touch_data->hx_coord_buf == NULL)
+ goto mem_alloc_fail;
+#ifdef HX_TP_PROC_DIAG
+ hx_touch_data->hx_rawdata_buf = kzalloc(sizeof(uint8_t)*(hx_touch_data->touch_all_size - hx_touch_data->touch_info_size),GFP_KERNEL);
+ if(hx_touch_data->hx_rawdata_buf == NULL)
+ goto mem_alloc_fail;
+#endif
+
+#if defined(HX_SMART_WAKEUP)
+ hx_touch_data->hx_event_buf = kzalloc(sizeof(uint8_t)*(hx_touch_data->event_size),GFP_KERNEL);
+ if(hx_touch_data->hx_event_buf == NULL)
+ goto mem_alloc_fail;
+#endif
+
+ return NO_ERR;
+
+mem_alloc_fail:
+ kfree(hx_touch_data->hx_coord_buf);
+#if defined(HX_TP_PROC_DIAG)
+ kfree(hx_touch_data->hx_rawdata_buf);
+#endif
+#if defined(HX_SMART_WAKEUP)
+ kfree(hx_touch_data->hx_event_buf);
+#endif
+
+ I("%s: Memory allocate fail!\n",__func__);
+ return MEM_ALLOC_FAIL;
+
+}
+
+
+#if defined(HX_USB_DETECT_GLOBAL)
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+void himax_read_file_func(char *pFilePath, u8 *pBuf, u16 nLength)
+{
+ struct file *pFile = NULL;
+ mm_segment_t old_fs;
+ ssize_t nReadBytes = 0;
+
+ old_fs = get_fs();
+ set_fs(get_ds());
+
+ pFile = filp_open(pFilePath, O_RDONLY, 0);
+
+ if (IS_ERR(pFile)) {
+ printk ( "[Tracy]Open file failed: %s\n", pFilePath);
+ return;
+ }
+
+ pFile->f_op->llseek(pFile, 0, SEEK_SET);
+ nReadBytes = pFile->f_op->read(pFile, pBuf, nLength, &pFile->f_pos);
+
+ set_fs(old_fs);
+
+ filp_close(pFile, NULL);
+
+}
+
+void himax_cable_detect_func(bool force_renew)
+{
+ struct himax_ts_data *ts;
+ u32 connect_status = 0;
+ u8 szChargerStatus[20] = {0};
+
+ ts = private_ts;
+
+ if (ts->suspended==false)
+ {
+ himax_read_file_func(POWER_SUPPLY_BATTERY_STATUS_PATCH, szChargerStatus, 20);
+ if (strstr(szChargerStatus, "Charging") != NULL || strstr(szChargerStatus, "Full") != NULL || strstr(szChargerStatus, "Fully charged") != NULL) // Charging
+ {
+ connect_status=1;
+ }
+ else
+ {
+ connect_status=0;
+ }
+ }
+
+ if (ts->cable_config)
+ {
+ if (((!!connect_status) != ts->usb_connected) || force_renew)
+ {
+ if (!!connect_status)
+ {
+ ts->cable_config[1] = 0x01;
+ ts->usb_connected = 0x01;
+ }
+ else
+ {
+ ts->cable_config[1] = 0x00;
+ ts->usb_connected = 0x00;
+ }
+ himax_usb_detect_set(ts->client,ts->cable_config);
+ printk("%s: Cable status change: 0x%2.2X\n", __func__, ts->usb_connected);
+ }
+ }
+}
+/*[Arima_8901][TracyChui] 20190816 end */
+#endif
+
+
+void himax_report_points(struct himax_ts_data *ts)
+{
+ int x = 0;
+ int y = 0;
+ int w = 0;
+ int base = 0;
+ int32_t loop_i = 0;
+ uint16_t old_finger = 0;
+
+ //I("%s:Entering\n",__func__);
+
+ /* finger on/press */
+ if (hx_point_num != 0 )
+ {
+ old_finger = ts->pre_finger_mask;
+ ts->pre_finger_mask = 0;
+ hx_touch_data->finger_num = hx_touch_data->hx_coord_buf[ts->coordInfoSize - 4] & 0x0F;
+ hx_touch_data->finger_on = 1;
+ AA_press = 1;
+ for (loop_i = 0; loop_i < ts->nFinger_support; loop_i++)
+ {
+ base = loop_i * 4;
+ x = hx_touch_data->hx_coord_buf[base] << 8 | hx_touch_data->hx_coord_buf[base + 1];
+ y = (hx_touch_data->hx_coord_buf[base + 2] << 8 | hx_touch_data->hx_coord_buf[base + 3]);
+ w = hx_touch_data->hx_coord_buf[(ts->nFinger_support * 4) + loop_i];
+ //x = ic_data->HX_X_RES - x;
+ //y = ic_data->HX_Y_RES - y;
+ //printk("allenyu:abs_x_max = %d \n",ts->pdata->abs_x_max);
+ //printk("allenyu:abs_y_max = %d \n",ts->pdata->abs_y_max);
+ if(x >= 0 && x <= ts->pdata->abs_x_max && y >= 0 && y <= ts->pdata->abs_y_max)
+ {
+/*[Arima_8710][allen_yu] close touch driver log 20180411 begin*/
+ //printk("allenyu_010\n");
+/*[Arima_8710][allen_yu] 20180411 end*/
+ hx_touch_data->finger_num--;
+ if ((ts->debug_log_level & BIT(3)) > 0)
+ {
+ himax_log_touch_event_detail(ts,x,y,w,loop_i,EN_NoiseFilter,HX_FINGER_ON,old_finger);
+ }
+#ifndef HX_PROTOCOL_A
+
+ input_mt_slot(ts->input_dev, loop_i);
+#endif
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, w);
+ input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, loop_i);
+#ifndef HX_PROTOCOL_A
+ input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, w);
+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE, w);
+#endif
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X, x);
+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, y);
+
+#ifndef HX_PROTOCOL_A
+ ts->last_slot = loop_i;
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 1);
+#else
+ input_mt_sync(ts->input_dev);
+#endif
+
+ if (!ts->first_pressed)
+ {
+ ts->first_pressed = 1;
+ I("S1@%d, %d\n", x, y);
+ }
+
+ ts->pre_finger_data[loop_i][0] = x;
+ ts->pre_finger_data[loop_i][1] = y;
+ if (ts->debug_log_level & BIT(1))
+ himax_log_touch_event(x, y, w,loop_i,EN_NoiseFilter,HX_FINGER_ON);
+
+ ts->pre_finger_mask = ts->pre_finger_mask + (1 << loop_i);
+ }
+ /* report coordinates */
+ else
+ {
+ //printk("allenyu_020\n");
+#ifndef HX_PROTOCOL_A
+ input_mt_slot(ts->input_dev, loop_i);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 0);
+#endif
+
+ if (loop_i == 0 && ts->first_pressed == 1)
+ {
+ ts->first_pressed = 2;
+ I("E1@%d, %d\n",
+ ts->pre_finger_data[0][0], ts->pre_finger_data[0][1]);
+ }
+ if ((ts->debug_log_level & BIT(3)) > 0)
+ {
+ himax_log_touch_event_detail(ts,x,y,w,loop_i,Last_EN_NoiseFilter,HX_FINGER_LEAVE,old_finger);
+ }
+ }
+ }
+#ifndef HX_PROTOCOL_A
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+#endif
+ input_sync(ts->input_dev);
+ }
+
+ /* finger leave/release */
+ else
+ {
+#if defined(HX_PALM_REPORT)
+ if(himax_palm_detect(hx_touch_data->hx_coord_buf) == NO_ERR)
+ {
+ I(" %s HX_PALM_REPORT KEY power event press\n",__func__);
+ input_report_key(ts->input_dev, KEY_POWER, 1);
+ input_sync(ts->input_dev);
+ msleep(100);
+ I(" %s HX_PALM_REPORT KEY power event release\n",__func__);
+ input_report_key(ts->input_dev, KEY_POWER, 0);
+ input_sync(ts->input_dev);
+ return;
+ }
+#endif
+ hx_touch_data->finger_on = 0;
+ AA_press = 0;
+#ifdef HX_PROTOCOL_A
+ input_mt_sync(ts->input_dev);
+#endif
+
+ for (loop_i = 0; loop_i < ts->nFinger_support; loop_i++)
+ {
+ if (((ts->pre_finger_mask >> loop_i) & 1) == 1)
+ {
+#ifndef HX_PROTOCOL_A
+ input_mt_slot(ts->input_dev, loop_i);
+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 0);
+#endif
+ }
+ if(ts->pre_finger_mask > 0 && (ts->debug_log_level & BIT(3)) > 0)
+ {
+ if (((ts->pre_finger_mask >> loop_i) & 1) == 1)
+ {
+ if (ts->useScreenRes)
+ {
+ I("status:%X, Screen:F:%02d Up, X:%d, Y:%d, N:%d\n", 0, loop_i+1, ts->pre_finger_data[loop_i][0] * ts->widthFactor >> SHIFTBITS,
+ ts->pre_finger_data[loop_i][1] * ts->heightFactor >> SHIFTBITS, Last_EN_NoiseFilter);
+ }
+ else
+ {
+ I("status:%X, Raw:F:%02d Up, X:%d, Y:%d, N:%d\n",0, loop_i+1, ts->pre_finger_data[loop_i][0],ts->pre_finger_data[loop_i][1], Last_EN_NoiseFilter);
+ }
+ }
+ }
+ }
+ if (ts->pre_finger_mask > 0)
+ {
+ /*for (loop_i = 0; loop_i < ts->nFinger_support && (ts->debug_log_level & BIT(3)) > 0; loop_i++)
+ {
+ if (((ts->pre_finger_mask >> loop_i) & 1) == 1)
+ {
+ if (ts->useScreenRes)
+ {
+ I("status:%X, Screen:F:%02d Up, X:%d, Y:%d, N:%d\n", 0, loop_i+1, ts->pre_finger_data[loop_i][0] * ts->widthFactor >> SHIFTBITS,
+ ts->pre_finger_data[loop_i][1] * ts->heightFactor >> SHIFTBITS, Last_EN_NoiseFilter);
+ }
+ else
+ {
+ I("status:%X, Raw:F:%02d Up, X:%d, Y:%d, N:%d\n",0, loop_i+1, ts->pre_finger_data[loop_i][0],ts->pre_finger_data[loop_i][1], Last_EN_NoiseFilter);
+ }
+ }
+ }*/
+ ts->pre_finger_mask = 0;
+ }
+
+ if (ts->first_pressed == 1)
+ {
+ ts->first_pressed = 2;
+ I("E1@%d, %d\n",ts->pre_finger_data[0][0], ts->pre_finger_data[0][1]);
+ }
+
+ if (ts->debug_log_level & BIT(1))
+ himax_log_touch_event(x, y, w,loop_i,EN_NoiseFilter,HX_FINGER_LEAVE);
+
+ input_report_key(ts->input_dev, BTN_TOUCH, hx_touch_data->finger_on);
+ input_sync(ts->input_dev);
+ }
+ Last_EN_NoiseFilter = EN_NoiseFilter;
+
+ //I("%s:End\n",__func__);
+}
+
+int himax_touch_get(struct himax_ts_data *ts,uint8_t *buf,int ts_status)
+{
+ int ret = 0;
+
+ switch(ts_status)
+ {
+ /*normal*/
+ case 1:
+#ifdef HX_TP_PROC_DIAG
+ hx_touch_data->diag_cmd = getDiagCommand();
+
+ if((hx_touch_data->diag_cmd)
+ || (HX_HW_RESET_ACTIVATE)
+#ifdef HX_ESD_RECOVERY
+ || (HX_ESD_RESET_ACTIVATE)
+#endif
+ )
+ {
+ ret = himax_read_event_stack(ts->client, buf, 128);
+ }
+ else
+ {
+ ret = himax_read_event_stack(ts->client, buf, hx_touch_data->touch_info_size);
+ }
+
+ if (!ret)
+#else
+ if(!himax_read_event_stack(ts->client, buf, hx_touch_data->touch_info_size))
+#endif
+ {
+ E("%s: can't read data from chip!\n", __func__);
+ goto err_workqueue_out;
+ }
+ break;
+#if defined(HX_SMART_WAKEUP)
+ /*SMWP*/
+ case 2:
+ himax_burst_enable(ts->client, 0);
+ if(!himax_read_event_stack(ts->client,buf,hx_touch_data->event_size))
+ {
+ E("%s: can't read data from chip!\n", __func__);
+ goto err_workqueue_out;
+ }
+ break;
+#endif
+ default:
+ break;
+ }
+ return NO_ERR;
+
+err_workqueue_out:
+ return I2C_FAIL;
+
+}
+
+int himax_checksum_cal(struct himax_ts_data *ts,uint8_t *buf,int ts_status)
+{
+#if defined(HX_ESD_RECOVERY)
+ int hx_EB_event = 0;
+ int hx_EC_event = 0;
+ int hx_ED_event = 0;
+ int hx_esd_event = 0;
+ int hx_zero_event = 0;
+ int shaking_ret = 0;
+#endif
+ uint16_t check_sum_cal = 0;
+ int32_t loop_i = 0;
+ int length = 0;
+
+ /* Normal */
+ if(ts_status == HX_REPORT_COORD)
+ length = hx_touch_data->touch_info_size;
+#if defined(HX_SMART_WAKEUP)
+ /* SMWP */
+ else if(ts_status == HX_REPORT_SMWP_EVENT)
+ length = (GEST_PTLG_ID_LEN+GEST_PTLG_HDR_LEN);
+#endif
+ else
+ {
+ I("%s, Neither Normal Nor SMWP error!\n",__func__);
+ }
+ //I("Now status=%d,length=%d\n",ts_status,length);
+ for (loop_i = 0; loop_i < length; loop_i++)
+ {
+ check_sum_cal+=buf[loop_i];
+
+ /*if (ts->debug_log_level & BIT(0))
+ {
+ I("P %d = 0x%2.2X ", loop_i, hx_touch_data->hx_coord_buf[loop_i]);
+ if (loop_i % 8 == 7)
+ I("\n");
+ }*/
+
+#ifdef HX_ESD_RECOVERY
+ if(ts_status == HX_REPORT_COORD)
+ {
+ /* case 1 ESD recovery flow */
+ if(buf[loop_i] == 0xEB)
+ hx_EB_event++;
+ else if(buf[loop_i] == 0xEC)
+ hx_EC_event++;
+ else if(buf[loop_i] == 0xED)
+ hx_ED_event++;
+ /* case 2 ESD recovery flow-Disable */
+ else if(buf[loop_i] == 0x00)
+ hx_zero_event++;
+ else
+ {
+ hx_EB_event = 0;
+ hx_EC_event = 0;
+ hx_ED_event = 0;
+ hx_zero_event = 0;
+ g_zero_event_count = 0;
+ }
+
+ if(hx_EB_event == length)
+ {
+ hx_esd_event = length;
+ hx_EB_event_flag ++;
+ I("[HIMAX TP MSG]: ESD event checked - ALL 0xEB.\n");
+ }
+ else if(hx_EC_event == length)
+ {
+ hx_esd_event = length;
+ hx_EC_event_flag ++;
+ I("[HIMAX TP MSG]: ESD event checked - ALL 0xEC.\n");
+ }
+ else if(hx_ED_event == length)
+ {
+ hx_esd_event = length;
+ hx_ED_event_flag ++;
+ I("[HIMAX TP MSG]: ESD event checked - ALL 0xED.\n");
+ }
+ else
+ {
+ hx_esd_event = 0;
+ }
+ }
+#endif
+ }
+
+ if(ts_status == HX_REPORT_COORD)
+ {
+#ifdef HX_ESD_RECOVERY
+ if ((hx_esd_event == length || hx_zero_event == length)
+ && (HX_HW_RESET_ACTIVATE == 0)
+ && (HX_ESD_RESET_ACTIVATE == 0)
+#if defined(HX_TP_PROC_DIAG)
+ && (hx_touch_data->diag_cmd == 0)
+#endif
+#if defined(HX_TP_PROC_SELF_TEST) || defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+ && (g_self_test_entered == 0)
+#endif
+ )
+ {
+ shaking_ret = himax_ic_esd_recovery(hx_esd_event,hx_zero_event,length);
+ if(shaking_ret == CHECKSUM_FAIL)
+ {
+ himax_esd_hw_reset();
+ goto checksum_fail;
+ }
+ else if(shaking_ret == ERR_WORK_OUT)
+ goto err_workqueue_out;
+ else
+ {
+ //I("I2C running. Nothing to be done!\n");
+ goto workqueue_out;
+ }
+ }
+ else if (HX_ESD_RESET_ACTIVATE)
+ {
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+#ifdef HX_RESUME_SEND_CMD
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#if 0
+ himax_resend_cmd_func(ts->suspended);
+#endif
+ himax_rst_cmd_recovery_func(ts->suspended);
+/*[Arima_7947][allen_yu] 20171221 end*/
+#endif
+#endif
+ /* drop 1st interrupts after chip reset */
+ HX_ESD_RESET_ACTIVATE = 0;
+ I("[HX_ESD_RESET_ACTIVATE]:%s: Back from reset, ready to serve.\n", __func__);
+ goto checksum_fail;
+ }
+
+ else if (HX_HW_RESET_ACTIVATE)
+#else
+ if (HX_HW_RESET_ACTIVATE)
+#endif
+ {
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+#ifdef HX_RESUME_SEND_CMD
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#if 0
+ himax_resend_cmd_func(ts->suspended);
+#endif
+ himax_rst_cmd_recovery_func(ts->suspended);
+/*[Arima_7947][allen_yu] 20171221 end*/
+#endif
+#endif
+ /* drop 1st interrupts after chip reset */
+ HX_HW_RESET_ACTIVATE = 0;
+ I("[HX_HW_RESET_ACTIVATE]:%s: Back from reset, ready to serve.\n", __func__);
+ goto ready_to_serve;
+ }
+ }
+
+ if ((check_sum_cal % 0x100 != 0) )
+ {
+ I("[HIMAX TP MSG] checksum fail : check_sum_cal: 0x%02X\n", check_sum_cal);
+ goto checksum_fail;
+ }
+
+ /* I("%s:End\n",__func__); */
+ return NO_ERR;
+
+ready_to_serve:
+ return READY_TO_SERVE;
+checksum_fail:
+ return CHECKSUM_FAIL;
+#ifdef HX_ESD_RECOVERY
+err_workqueue_out:
+ return ERR_WORK_OUT;
+workqueue_out:
+ return WORK_OUT;
+#endif
+}
+
+int himax_ts_work_status(struct himax_ts_data *ts)
+{
+ /* 1: normal, 2:SMWP */
+ int result = HX_REPORT_COORD;
+ uint8_t diag_cmd = 0;
+
+#ifdef HX_TP_PROC_DIAG
+ diag_cmd = getDiagCommand();
+#endif
+
+#ifdef HX_SMART_WAKEUP
+ if (atomic_read(&ts->suspend_mode)&&(!FAKE_POWER_KEY_SEND)&&(ts->SMWP_enable)&&(!diag_cmd))
+ {
+ result = HX_REPORT_SMWP_EVENT;
+ }
+#endif
+ /* I("Now Status is %d\n",result); */
+ return result;
+}
+
+void himax_assign_touch_data(uint8_t *buf,int ts_status)
+{
+ uint8_t hx_state_info_pos = hx_touch_data->touch_info_size - 3;
+
+ if(ts_status == HX_REPORT_COORD)
+ {
+ memcpy(hx_touch_data->hx_coord_buf,&buf[0],hx_touch_data->touch_info_size);
+ if(buf[hx_state_info_pos] != 0xFF && buf[hx_state_info_pos + 1] != 0xFF )
+ memcpy(hx_touch_data->hx_state_info,&buf[hx_state_info_pos],2);
+ else
+ memset(hx_touch_data->hx_state_info, 0x00, sizeof(hx_touch_data->hx_state_info));
+ }
+#if defined(HX_SMART_WAKEUP)
+ else
+ memcpy(hx_touch_data->hx_event_buf,buf,hx_touch_data->event_size);
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+ if((hx_touch_data->diag_cmd)
+ || (HX_HW_RESET_ACTIVATE)
+#ifdef HX_ESD_RECOVERY
+ || (HX_ESD_RESET_ACTIVATE)
+#endif
+ )
+ {
+ memcpy(hx_touch_data->hx_rawdata_buf,&buf[hx_touch_data->touch_info_size],hx_touch_data->touch_all_size - hx_touch_data->touch_info_size);
+ }
+#endif
+
+}
+
+void himax_coord_report(struct himax_ts_data *ts)
+{
+
+#if defined(HX_TP_PROC_DIAG)
+ //touch monitor raw data fetch
+ if(himax_set_diag_cmd(ic_data,hx_touch_data))
+ I("%s: coordinate dump fail and bypass with checksum err\n",__func__);
+#endif
+ EN_NoiseFilter = (hx_touch_data->hx_coord_buf[HX_TOUCH_INFO_POINT_CNT+2]>>3);
+ //I("EN_NoiseFilter=%d\n",EN_NoiseFilter);
+ EN_NoiseFilter = EN_NoiseFilter & 0x01;
+ //I("EN_NoiseFilter2=%d\n",EN_NoiseFilter);
+
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+ tpd_key = (hx_touch_data->hx_coord_buf[HX_TOUCH_INFO_POINT_CNT+2]>>4);
+ /* All (VK+AA)leave */
+ if (tpd_key == 0x0F)
+ {
+ tpd_key = 0x00;
+ }
+ //I("[DEBUG] tpd_key: %x\r\n", tpd_key);
+#else
+ tpd_key = 0x00;
+#endif
+
+ p_point_num = hx_point_num;
+
+ if (hx_touch_data->hx_coord_buf[HX_TOUCH_INFO_POINT_CNT] == 0xff)
+ hx_point_num = 0;
+ else
+ hx_point_num= hx_touch_data->hx_coord_buf[HX_TOUCH_INFO_POINT_CNT] & 0x0f;
+
+ /* Touch Point information */
+ if(!tpd_key && !tpd_key_old)
+ himax_report_points(ts);
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+ else
+ himax_report_key(ts);
+#endif
+ /* I("%s:END\n",__func__); */
+
+}
+
+void himax_ts_work(struct himax_ts_data *ts)
+{
+ uint8_t hw_reset_check[2];
+ uint8_t buf[128];
+ int check_sum_cal = 0;
+ //int loop_i = 0;
+ int ts_status = 0;
+#ifdef HX_CHIP_STATUS_MONITOR
+ int j=0;
+#endif
+
+#if defined(HX_USB_DETECT_GLOBAL)
+ himax_cable_detect_func(false);
+#endif
+
+#if defined(HX_CHIP_STATUS_MONITOR)
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT=0;
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING)//chip on hand shaking,wait hand shaking
+ {
+ for(j=0; j<100; j++)
+ {
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING==0)//chip on hand shaking end
+ {
+ I("%s:HX_ON_HAND_SHAKING OK check %d times\n",__func__,j);
+ break;
+ }
+ else
+ msleep(1);
+ }
+ if(j==100)
+ {
+ E("%s:HX_ON_HAND_SHAKING timeout reject interrupt\n",__func__);
+ return;
+ }
+ }
+#endif
+
+ ts_status = himax_ts_work_status(ts);
+ if(ts_status > HX_REPORT_SMWP_EVENT || ts_status < HX_REPORT_COORD)
+ goto neither_normal_nor_smwp;
+
+ memset(buf, 0x00, sizeof(buf));
+ memset(hw_reset_check, 0x00, sizeof(hw_reset_check));
+
+ //I("New Method for ts_work\n");
+
+ if(himax_touch_get(ts,buf,ts_status))
+ goto err_workqueue_out;
+
+ if (ts->debug_log_level & BIT(0))
+ {
+
+ himax_log_touch_data(buf,hx_touch_data);
+
+ }
+
+ check_sum_cal = himax_checksum_cal(ts,buf,ts_status);
+ if (check_sum_cal == CHECKSUM_FAIL)
+ goto checksum_fail;
+ else if (check_sum_cal == READY_TO_SERVE)
+ goto ready_to_serve;
+ else if (check_sum_cal == ERR_WORK_OUT)
+ goto err_workqueue_out;
+ else if (check_sum_cal == WORK_OUT)
+ goto workqueue_out;
+ /* checksum calculate pass and assign data to global touch data*/
+ else
+ himax_assign_touch_data(buf,ts_status);
+
+ if(ts_status == HX_REPORT_COORD)
+ himax_coord_report(ts);
+#if defined(HX_SMART_WAKEUP)
+ else
+ {
+ //wake_lock_timeout(&ts->ts_SMWP_wake_lock, TS_WAKE_LOCK_TIMEOUT);
+ __pm_wakeup_event(&ts->ts_SMWP_wake_lock, TS_WAKE_LOCK_TIMEOUT);
+ msleep(200);
+ himax_wake_check_func();
+ }
+#endif
+
+checksum_fail:
+workqueue_out:
+ready_to_serve:
+neither_normal_nor_smwp:
+ return;
+
+err_workqueue_out:
+ I("%s: Now reset the Touch chip.\n", __func__);
+
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,true);
+#endif
+
+ goto workqueue_out;
+}
+enum hrtimer_restart himax_ts_timer_func(struct hrtimer *timer)
+{
+ struct himax_ts_data *ts;
+
+ ts = container_of(timer, struct himax_ts_data, timer);
+ queue_work(ts->himax_wq, &ts->work);
+ hrtimer_start(&ts->timer, ktime_set(0, 12500000), HRTIMER_MODE_REL);
+ return HRTIMER_NORESTART;
+}
+
+#if defined( HX_USB_DETECT_CALLBACK)
+static void himax_cable_tp_status_handler_func(int connect_status)
+{
+ struct himax_ts_data *ts;
+ I("Touch: cable change to %d\n", connect_status);
+ ts = private_ts;
+ if (ts->cable_config)
+ {
+ if (!atomic_read(&ts->suspend_mode))
+ {
+ if ((!!connect_status) != ts->usb_connected)
+ {
+ if (!!connect_status)
+ {
+ ts->cable_config[1] = 0x01;
+ ts->usb_connected = 0x01;
+ }
+ else
+ {
+ ts->cable_config[1] = 0x00;
+ ts->usb_connected = 0x00;
+ }
+
+ i2c_himax_master_write(ts->client, ts->cable_config,
+ sizeof(ts->cable_config), DEFAULT_RETRY_CNT);
+
+ I("%s: Cable status change: 0x%2.2X\n", __func__, ts->cable_config[1]);
+ }
+ else
+ I("%s: Cable status is the same as previous one, ignore.\n", __func__);
+ }
+ else
+ {
+ if (connect_status)
+ ts->usb_connected = 0x01;
+ else
+ ts->usb_connected = 0x00;
+ I("%s: Cable status remembered: 0x%2.2X\n", __func__, ts->usb_connected);
+ }
+ }
+}
+
+static struct t_cable_status_notifier himax_cable_status_handler =
+{
+ .name = "usb_tp_connected",
+ .func = himax_cable_tp_status_handler_func,
+};
+
+#endif
+
+#ifdef HX_AUTO_UPDATE_FW
+static void himax_update_register(struct work_struct *work)
+{
+ I(" %s in", __func__);
+#if defined(HX_CHIP_STATUS_MONITOR)
+ I("Cancel Chip monitor during auto-updating!\n");
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ cancel_delayed_work_sync(&private_ts->himax_chip_monitor);
+#endif
+ if(i_update_FW() == false)
+ I("NOT Have new FW=NOT UPDATE=\n");
+ else
+ I("Have new FW=UPDATE=\n");
+#ifdef HX_CHIP_STATUS_MONITOR
+ I("Auto-updating over, now chip monitor working!\n");
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+ queue_delayed_work(private_ts->himax_chip_monitor_wq, &private_ts->himax_chip_monitor, g_chip_monitor_data->HX_POLLING_TIMER*HZ);
+#endif
+}
+#endif
+
+#ifdef CONFIG_FB
+static void himax_fb_register(struct work_struct *work)
+{
+ int ret = 0;
+ struct himax_ts_data *ts = container_of(work, struct himax_ts_data,
+ work_att.work);
+ I(" %s in\n", __func__);
+
+ ts->fb_notif.notifier_call = fb_notifier_callback;
+/*[Arima_7947][allen_yu] Modify Mutex initialization in callback function 20180305 begin*/
+//ParisKuong modified Mutex initialization +++
+ mutex_init(&ts->ops_lock);
+//ParisKuong modified Mutex initialization ---
+/*[Arima_7947][allen_yu] 20180305 end*/
+ ret = fb_register_client(&ts->fb_notif);
+ if (ret)
+ E(" Unable to register fb_notifier: %d\n", ret);
+}
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+static void himax_ito_test_work(struct work_struct *work)
+{
+ I(" %s in\n", __func__);
+ himax_ito_test();
+}
+#endif
+
+#ifdef HX_TP_PROC_FLASH_DUMP
+static void himax_ts_flash_work_func(struct work_struct *work)
+{
+ himax_ts_flash_func();
+}
+#endif
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#ifdef HX_TP_PROC_GUEST_INFO
+static void himax_ts_guest_info_work_func(struct work_struct *work)
+{
+
+ himax_read_project_id();
+
+}
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+#ifdef HX_TP_PROC_DIAG
+static void himax_ts_diag_work_func(struct work_struct *work)
+{
+ himax_ts_diag_func();
+}
+#endif
+
+/*[Arima_8710][allen_yu] Solve the report point issue 20180619 begin*/
+static void himax_release_all_finger(void)
+{
+ struct input_dev *input_dev = private_ts->input_dev;
+ u32 finger_count = 0;
+
+
+ I("%s: enter \n", __func__);
+ mutex_lock(&private_ts->report_mutex);
+ for (finger_count = 0; finger_count < private_ts->nFinger_support; finger_count++) {
+ input_mt_slot(input_dev, finger_count);
+ input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0);
+ }
+ input_report_key(input_dev, BTN_TOUCH, 0);
+ input_sync(input_dev);
+ mutex_unlock(&private_ts->report_mutex);
+ I("%s: exit \n", __func__);
+}
+/*[Arima_8710][allen_yu] 20180619 end*/
+
+int himax_chip_common_probe(struct i2c_client *client, const struct i2c_device_id *id)
+{
+ int ret = 0, err = 0;
+ bool auto_update_flag = false;
+ struct himax_ts_data *ts;
+ struct himax_i2c_platform_data *pdata;
+
+ printk("himax probe enter \n");
+
+ //Check I2C functionality
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
+ {
+ E("%s: i2c check functionality error\n", __func__);
+ err = -ENODEV;
+ goto err_check_functionality_failed;
+ }
+
+ ts = kzalloc(sizeof(struct himax_ts_data), GFP_KERNEL);
+ if (ts == NULL)
+ {
+ E("%s: allocate himax_ts_data failed\n", __func__);
+ err = -ENOMEM;
+ goto err_alloc_data_failed;
+ }
+
+ i2c_set_clientdata(client, ts);
+ ts->client = client;
+ ts->dev = &client->dev;
+ mutex_init(&ts->rw_lock);
+
+ pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+ if (pdata == NULL) /*Allocate Platform data space*/
+ {
+ err = -ENOMEM;
+ goto err_dt_platform_data_fail;
+ }
+
+ ic_data = kzalloc(sizeof(*ic_data), GFP_KERNEL);
+ if (ic_data == NULL) /*Allocate IC data space*/
+ {
+ err = -ENOMEM;
+ goto err_dt_ic_data_fail;
+ }
+
+ /* allocate report data */
+ hx_touch_data = kzalloc(sizeof(struct himax_report_data),GFP_KERNEL);
+ if(hx_touch_data == NULL)
+ {
+ err = -ENOMEM;
+ goto err_alloc_data_failed;
+ }
+
+ if (himax_parse_dt(ts, pdata) < 0)
+ {
+ I(" pdata is NULL for DT\n");
+ goto err_alloc_dt_pdata_failed;
+ }
+
+#ifdef HX_RST_PIN_FUNC
+ ts->rst_gpio = pdata->gpio_reset;
+#endif
+
+ himax_gpio_power_config(ts->client, pdata);
+
+#ifndef CONFIG_OF
+ if (pdata->power)
+ {
+ ret = pdata->power(1);
+ if (ret < 0)
+ {
+ E("%s: power on failed\n", __func__);
+ goto err_power_failed;
+ }
+ }
+#endif
+ private_ts = ts;
+
+ if (himax_ic_package_check(ts->client) == false)
+ {
+ E("Himax chip doesn NOT EXIST");
+ goto err_ic_package_failed;
+ }
+
+ if (pdata->virtual_key)
+ ts->button = pdata->virtual_key;
+#ifdef HX_TP_PROC_FLASH_DUMP
+ ts->flash_wq = create_singlethread_workqueue("himax_flash_wq");
+ if (!ts->flash_wq)
+ {
+ E("%s: create flash workqueue failed\n", __func__);
+ err = -ENOMEM;
+ goto err_create_wq_failed;
+ }
+
+ INIT_WORK(&ts->flash_work, himax_ts_flash_work_func);
+
+ setSysOperation(0);
+ setFlashBuffer();
+#endif
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#ifdef HX_TP_PROC_GUEST_INFO
+ ts->guest_info_wq = create_singlethread_workqueue("himax_guest_info_wq");
+ if (!ts->guest_info_wq)
+ {
+ E("%s: create guest info workqueue failed\n", __func__);
+ err = -ENOMEM;
+ goto err_create_guest_info_wq_failed;
+ }
+ INIT_WORK(&ts->guest_info_work, himax_ts_guest_info_work_func);
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+#ifdef HX_TP_PROC_DIAG
+ ts->himax_diag_wq = create_singlethread_workqueue("himax_diag");
+ if (!ts->himax_diag_wq)
+ {
+ E("%s: create diag workqueue failed\n", __func__);
+ err = -ENOMEM;
+ goto err_create_wq_failed;
+ }
+ INIT_DELAYED_WORK(&ts->himax_diag_delay_wrok, himax_ts_diag_work_func);
+#endif
+
+ himax_read_FW_ver(client);
+ auto_update_flag = !himax_calculateChecksum(client, false);
+#ifdef HX_AUTO_UPDATE_FW
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#if 0
+ auto_update_flag |= (( ic_data->vendor_fw_ver < g_i_FW_VER ) || ( ic_data->vendor_config_ver < g_i_CFG_VER ));
+ /* Not sure to do */
+ auto_update_flag |= ((ic_data->vendor_cid_maj_ver != g_i_CID_MAJ) || (ic_data->vendor_cid_min_ver < g_i_CID_MIN));
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+ auto_update_flag |= (( ic_data->vendor_touch_cfg_ver < ((g_i_CFG_VER >> 8)&0xff) ) || ( ic_data->vendor_display_cfg_ver < ((g_i_CFG_VER)&0xff) ));
+#endif
+
+/*wrong FW in IC cases need to force FW upgrade*/
+ if (IC_TYPE == HX_83112A_SERIES_PWON)
+ {
+ if (ic_data->vendor_hx_ic_id == 0x51)
+ {
+ if (( ic_data->vendor_touch_cfg_ver < ((g_i_CFG_VER >> 8)&0xff) ) || ( ic_data->vendor_display_cfg_ver < ((g_i_CFG_VER)&0xff) ))
+ {
+ auto_update_flag |= true;
+ }
+ else
+ {
+ auto_update_flag |= false;
+ }
+ }
+ else
+ {
+ auto_update_flag |= true;
+ }
+ }
+ else if (IC_TYPE == HX_83112B_SERIES_PWON)
+ {
+ if (ic_data->vendor_hx_ic_id == 0x52)
+ {
+ if (( ic_data->vendor_touch_cfg_ver < ((g_i_CFG_VER >> 8)&0xff) ) || ( ic_data->vendor_display_cfg_ver < ((g_i_CFG_VER)&0xff) ))
+ {
+ auto_update_flag |= true;
+ }
+ else
+ {
+ auto_update_flag |= false;
+ }
+ }
+ else
+ {
+ auto_update_flag |= true;
+ }
+ }
+/*[Arima_8710][allen_yu] 20180830 end*/
+/*[Arima_7947][allen_yu] 20171221 end*/
+ if (auto_update_flag)
+ {
+ ts->himax_update_wq = create_singlethread_workqueue("HMX_update_reuqest");
+ if (!ts->himax_update_wq)
+ {
+ E(" allocate syn_update_wq failed\n");
+ err = -ENOMEM;
+ goto err_update_wq_failed;
+ }
+ INIT_DELAYED_WORK(&ts->work_update, himax_update_register);
+ queue_delayed_work(ts->himax_update_wq, &ts->work_update, msecs_to_jiffies(2000));
+ }
+#endif
+
+#ifdef HX_ZERO_FLASH
+ ts->himax_0f_update_wq = create_singlethread_workqueue("HMX_0f_update_reuqest");
+ INIT_DELAYED_WORK(&ts->work_0f_update, himax_0f_operation);
+ queue_delayed_work(ts->himax_0f_update_wq, &ts->work_0f_update, msecs_to_jiffies(2000));
+#endif
+ //Himax Power On and Load Config
+ if (himax_loadSensorConfig(client, pdata))
+ {
+ E("%s: Load Sesnsor configuration failed, unload driver.\n", __func__);
+ goto err_detect_failed;
+ }
+ himax_power_on_init(client);
+
+ calculate_point_number();
+#ifdef HX_TP_PROC_DIAG
+ setXChannel(ic_data->HX_RX_NUM); // X channel
+ setYChannel(ic_data->HX_TX_NUM); // Y channel
+
+ setMutualBuffer();
+ setMutualNewBuffer();
+ setMutualOldBuffer();
+ if (getMutualBuffer() == NULL)
+ {
+ E("%s: mutual buffer allocate fail failed\n", __func__);
+ return -1;
+ }
+#ifdef HX_TP_PROC_2T2R
+ if(Is_2T2R)
+ {
+ setXChannel_2(ic_data->HX_RX_NUM_2); // X channel
+ setYChannel_2(ic_data->HX_TX_NUM_2); // Y channel
+
+ setMutualBuffer_2();
+
+ if (getMutualBuffer_2() == NULL)
+ {
+ E("%s: mutual buffer 2 allocate fail failed\n", __func__);
+ return -1;
+ }
+ }
+#endif
+#endif
+#ifdef CONFIG_OF
+ ts->power = pdata->power;
+#endif
+ ts->pdata = pdata;
+
+ ts->x_channel = ic_data->HX_RX_NUM;
+ ts->y_channel = ic_data->HX_TX_NUM;
+ ts->nFinger_support = ic_data->HX_MAX_PT;
+ //calculate the i2c data size
+ calcDataSize(ts->nFinger_support);
+ I("%s: calcDataSize complete\n", __func__);
+#ifdef CONFIG_OF
+ ts->pdata->abs_pressure_min = 0;
+ ts->pdata->abs_pressure_max = 200;
+ ts->pdata->abs_width_min = 0;
+ ts->pdata->abs_width_max = 200;
+ pdata->cable_config[0] = 0xF0;
+ pdata->cable_config[1] = 0x00;
+#endif
+ ts->suspended = false;
+#if defined( HX_USB_DETECT_CALLBACK)||defined(HX_USB_DETECT_GLOBAL)
+ ts->usb_connected = 0x00;
+ ts->cable_config = pdata->cable_config;
+#endif
+#ifdef HX_PROTOCOL_A
+ ts->protocol_type = PROTOCOL_TYPE_A;
+#else
+ ts->protocol_type = PROTOCOL_TYPE_B;
+#endif
+ I("%s: Use Protocol Type %c\n", __func__,
+ ts->protocol_type == PROTOCOL_TYPE_A ? 'A' : 'B');
+
+ ret = himax_input_register(ts);
+ if (ret)
+ {
+ E("%s: Unable to register %s input device\n",
+ __func__, ts->input_dev->name);
+ goto err_input_register_device_failed;
+ }
+#ifdef CONFIG_FB
+ ts->himax_att_wq = create_singlethread_workqueue("HMX_ATT_reuqest");
+ if (!ts->himax_att_wq)
+ {
+ E(" allocate syn_att_wq failed\n");
+ err = -ENOMEM;
+ goto err_get_intr_bit_failed;
+ }
+ INIT_DELAYED_WORK(&ts->work_att, himax_fb_register);
+ queue_delayed_work(ts->himax_att_wq, &ts->work_att, msecs_to_jiffies(15000));
+#endif
+
+/*[Arima_8710][allen_yu] Solve the report point issue 20180619 begin*/
+ mutex_init(&ts->report_mutex);
+/*[Arima_8710][allen_yu] 20180619 end*/
+
+#if defined(HX_CHIP_STATUS_MONITOR)//for ESD solution
+ I("Enter HX_CHIP_STATUS_MONITOR! \n");
+
+ g_chip_monitor_data = kzalloc(sizeof(struct chip_monitor_data),GFP_KERNEL);
+ if(g_chip_monitor_data == NULL)
+ {
+ err = -ENOMEM;
+ goto err_alloc_monitor_data;
+ }
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_POLLING_TIMER = 5;//unit:sec
+ g_chip_monitor_data->HX_POLLING_TIMES = 2;//ex:5(timer)x2(times)=10sec(polling time)
+ g_chip_monitor_data->HX_ON_HAND_SHAKING = 0;//
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+
+ ts->himax_chip_monitor_wq = create_singlethread_workqueue("himax_chip_monitor_wq");
+ if (!ts->himax_chip_monitor_wq)
+ {
+ E(" %s: create workqueue failed\n", __func__);
+ err = -ENOMEM;
+ goto err_create_chip_monitor_wq_failed;
+ }
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+
+ INIT_DELAYED_WORK(&ts->himax_chip_monitor, himax_chip_monitor_function);
+
+ queue_delayed_work(ts->himax_chip_monitor_wq, &ts->himax_chip_monitor, g_chip_monitor_data->HX_POLLING_TIMER*HZ);
+
+#endif
+
+#ifdef HX_SMART_WAKEUP
+ ts->SMWP_enable=0;
+ //wake_lock_init(&ts->ts_SMWP_wake_lock, WAKE_LOCK_SUSPEND, HIMAX_common_NAME);
+ wakeup_source_init(&ts->ts_SMWP_wake_lock, HIMAX_common_NAME);
+#endif
+#ifdef HX_HIGH_SENSE
+ ts->HSEN_enable=0;
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+ ts->ito_test_wq = create_singlethread_workqueue("himax_ito_test_wq");
+ if (!ts->ito_test_wq)
+ {
+ E("%s: ito test workqueue failed\n", __func__);
+ err = -ENOMEM;
+ goto err_ito_test_wq_failed;
+ }
+
+ INIT_WORK(&ts->ito_test_work, himax_ito_test_work);
+#endif
+
+ //touch data init
+ err=himax_report_data_init();
+ if(err)
+ goto err_report_data_init_failed;
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+ himax_touch_proc_init();
+#endif
+
+#if defined( HX_USB_DETECT_CALLBACK)
+ if (ts->cable_config)
+ cable_detect_register_notifier(&himax_cable_status_handler);
+#endif
+
+ err = himax_ts_register_interrupt(ts->client);
+ if (err)
+ goto err_register_interrupt_failed;
+
+#if defined(HX_AUTO_UPDATE_FW) || defined(HX_ZERO_FLASH)
+ if (auto_update_flag)
+ {
+ himax_int_enable(client->irq,0);
+ }
+#endif
+
+ return 0;
+
+err_register_interrupt_failed:
+err_report_data_init_failed:
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+err_ito_test_wq_failed:
+#endif
+#ifdef HX_SMART_WAKEUP
+ //wake_lock_destroy(&ts->ts_SMWP_wake_lock);
+ wakeup_source_trash(&ts->ts_SMWP_wake_lock);
+#endif
+#ifdef HX_CHIP_STATUS_MONITOR
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ cancel_delayed_work_sync(&ts->himax_chip_monitor);
+ destroy_workqueue(ts->himax_chip_monitor_wq);
+err_create_chip_monitor_wq_failed:
+err_alloc_monitor_data:
+ kfree(g_chip_monitor_data);
+#endif
+#ifdef CONFIG_FB
+err_get_intr_bit_failed:
+#endif
+err_input_register_device_failed:
+ input_free_device(ts->input_dev);
+err_detect_failed:
+#ifdef HX_AUTO_UPDATE_FW
+err_update_wq_failed:
+#endif
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#ifdef HX_TP_PROC_GUEST_INFO
+err_create_guest_info_wq_failed:
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+#ifdef HX_TP_PROC_FLASH_DUMP
+err_create_wq_failed:
+#endif
+err_ic_package_failed:
+
+ if (gpio_is_valid(pdata->gpio_irq))
+ gpio_free(pdata->gpio_irq);
+#ifdef HX_RST_PIN_FUNC
+ if (gpio_is_valid(pdata->gpio_reset))
+ gpio_free(pdata->gpio_reset);
+#endif
+
+err_alloc_dt_pdata_failed:
+#ifndef CONFIG_OF
+err_power_failed:
+#endif
+
+ kfree(ic_data);
+
+err_dt_ic_data_fail:
+ kfree(pdata);
+
+err_dt_platform_data_fail:
+ kfree(ts);
+
+err_alloc_data_failed:
+ kfree(hx_touch_data);
+
+err_check_functionality_failed:
+ probe_fail_flag = 1;
+ return err;
+
+}
+
+int himax_chip_common_remove(struct i2c_client *client)
+{
+ struct himax_ts_data *ts = i2c_get_clientdata(client);
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+ himax_touch_proc_deinit();
+#endif
+#ifdef HX_CHIP_STATUS_MONITOR
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ cancel_delayed_work_sync(&ts->himax_chip_monitor);
+ destroy_workqueue(ts->himax_chip_monitor_wq);
+ kfree(g_chip_monitor_data);
+#endif
+#ifdef CONFIG_FB
+ if (fb_unregister_client(&ts->fb_notif))
+ dev_err(&client->dev, "Error occurred while unregistering fb_notifier.\n");
+#endif
+
+ if (!ts->use_irq)
+ hrtimer_cancel(&ts->timer);
+
+ destroy_workqueue(ts->himax_wq);
+
+#ifndef HX_PROTOCOL_A
+ input_mt_destroy_slots(ts->input_dev);
+#endif
+
+ input_unregister_device(ts->input_dev);
+
+#ifdef HX_SMART_WAKEUP
+ //wake_lock_destroy(&ts->ts_SMWP_wake_lock);
+ wakeup_source_trash(&ts->ts_SMWP_wake_lock);
+#endif
+ kfree(ts);
+
+ return 0;
+
+}
+
+int himax_chip_common_suspend(struct himax_ts_data *ts)
+{
+ int ret;
+#ifdef HX_CHIP_STATUS_MONITOR
+ int t = 0;
+#endif
+
+ if(ts->suspended)
+ {
+ I("%s: Already suspended. Skipped. \n", __func__);
+ return 0;
+ }
+ else
+ {
+ ts->suspended = true;
+ I("%s: enter \n", __func__);
+ }
+
+#ifdef HX_TP_PROC_FLASH_DUMP
+ if (getFlashDumpGoing())
+ {
+ I("[himax] %s: Flash dump is going, reject suspend\n",__func__);
+ return 0;
+ }
+#endif
+/*[Arima_7947][allen_yu] Change the rule of upgrading fw 20171221 begin*/
+#ifdef HX_TP_PROC_GUEST_INFO
+ if (himax_guest_info_get_status())
+ {
+ I("[himax] %s: GUEST INFO dump is going, reject suspend\n",__func__);
+ return 0;
+ }
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+#ifdef HX_CHIP_STATUS_MONITOR
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING)//chip on hand shaking,wait hand shaking
+ {
+ for(t=0; t<100; t++)
+ {
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING==0)//chip on hand shaking end
+ {
+ I("%s:HX_ON_HAND_SHAKING OK check %d times\n",__func__,t);
+ break;
+ }
+ else
+ msleep(1);
+ }
+ if(t==100)
+ {
+ E("%s:HX_ON_HAND_SHAKING timeout reject suspend\n",__func__);
+ return 0;
+ }
+ }
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ cancel_delayed_work_sync(&ts->himax_chip_monitor);
+#endif
+
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+#ifndef HX_RESUME_SEND_CMD
+ himax_resend_cmd_func(ts->suspended);
+#endif
+#endif
+
+#ifdef HX_SMART_WAKEUP
+ if(ts->SMWP_enable)
+ {
+ atomic_set(&ts->suspend_mode, 1);
+ ts->pre_finger_mask = 0;
+ FAKE_POWER_KEY_SEND=false;
+ I("[himax] %s: SMART_WAKEUP enable, reject suspend\n",__func__);
+ return 0;
+ }
+#endif
+
+ himax_int_enable(ts->client->irq,0);
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+#ifdef HX_RST_PIN_FUNC
+ reset_flag = 0;
+#endif
+/*[Arima_8710][allen_yu] 20180423 end*/
+ himax_suspend_ic_action(ts->client);
+
+ if (!ts->use_irq)
+ {
+ ret = cancel_work_sync(&ts->work);
+ if (ret)
+ himax_int_enable(ts->client->irq,1);
+ }
+
+ //ts->first_pressed = 0;
+ atomic_set(&ts->suspend_mode, 1);
+ ts->pre_finger_mask = 0;
+ if (ts->pdata->powerOff3V3 && ts->pdata->power)
+ ts->pdata->power(0);
+ I("%s: END \n", __func__);
+ return 0;
+}
+
+int himax_chip_common_resume(struct himax_ts_data *ts)
+{
+
+#ifdef HX_CHIP_STATUS_MONITOR
+ int t=0;
+#endif
+
+ I("%s: enter \n", __func__);
+ if(ts->suspended == false)
+ {
+ I("%s: It had entered resume,skip this step \n", __func__);
+ return 0;
+ }
+ else
+ ts->suspended = false;
+
+ atomic_set(&ts->suspend_mode, 0);
+
+/*[Arima_8710][allen_yu] Solve the report point issue 20180619 begin*/
+ himax_release_all_finger();
+/*[Arima_8710][allen_yu] 20180619 end*/
+
+ if (ts->pdata->powerOff3V3 && ts->pdata->power)
+ ts->pdata->power(1);
+
+#ifdef HX_CHIP_STATUS_MONITOR
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING)//chip on hand shaking,wait hand shaking
+ {
+ for(t=0; t<100; t++)
+ {
+ if(g_chip_monitor_data->HX_ON_HAND_SHAKING == 0)//chip on hand shaking end
+ {
+ I("%s:HX_ON_HAND_SHAKING OK check %d times\n",__func__,t);
+ break;
+ }
+ else
+ msleep(1);
+ }
+ if(t==100)
+ {
+ E("%s:HX_ON_HAND_SHAKING timeout reject resume\n",__func__);
+ return 0;
+ }
+ }
+#endif
+
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+#if defined(HX_RESUME_SEND_CMD)
+ himax_resend_cmd_func(ts->suspended);
+#endif
+#elif defined(HX_RESUME_HW_RESET)
+ himax_ic_reset(false,false);
+#endif
+
+ himax_resume_ic_action(ts->client);
+
+ himax_int_enable(ts->client->irq,1);
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+#ifdef HX_RST_PIN_FUNC
+ reset_flag = 1;
+#endif
+/*[Arima_8710][allen_yu] 20180423 end*/
+#ifdef HX_CHIP_STATUS_MONITOR
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+ queue_delayed_work(ts->himax_chip_monitor_wq, &ts->himax_chip_monitor, g_chip_monitor_data->HX_POLLING_TIMER*HZ); //for ESD solution
+#endif
+ I("%s: END \n", __func__);
+ return 0;
+}
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_common.h b/drivers/input/touchscreen/hxchipset83112b/himax_common.h
new file mode 100644
index 0000000..2a13498
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_common.h
@@ -0,0 +1,467 @@
+/* Himax Android Driver Sample Code for common functions
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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.
+*
+*/
+
+#ifndef HIMAX_COMMON_H
+#define HIMAX_COMMON_H
+
+#include <asm/segment.h>
+#include <asm/uaccess.h>
+#include <asm/atomic.h>
+
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/async.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/gpio.h>
+#include <linux/input/mt.h>
+#include <linux/firmware.h>
+#include <linux/types.h>
+#include <linux/fs.h>
+#include <linux/buffer_head.h>
+//#include <linux/wakelock.h>
+#include <linux/pm_wakeup.h>
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
+#include "himax_platform.h"
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+#include <linux/file.h>
+/*[Arima_8901][TracyChui] 20190816 end */
+#if defined(CONFIG_FB)
+#include <linux/notifier.h>
+#include <linux/fb.h>
+/*[Arima_7947][allen_yu] Add mutex in callback function 20180131 begin*/
+#include <linux/mutex.h>
+/*[Arima_7947][allen_yu] 20180131 end*/
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+#include <linux/earlysuspend.h>
+#endif
+
+#ifdef CONFIG_OF
+#include <linux/of_gpio.h>
+#endif
+//#define HIMAX_DRIVER_VER "0.1.95.0_ABCD1234_01"
+#define HIMAX_DRIVER_VER "1.2.2.69_ABCD1234_01"
+
+#define FLASH_DUMP_FILE "/sdcard/HX_Flash_Dump.bin"
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+
+#define HX_TP_PROC_DIAG
+#define HX_TP_PROC_REGISTER
+#define HX_TP_PROC_DEBUG
+#define HX_TP_PROC_FLASH_DUMP
+#define HX_TP_PROC_SELF_TEST
+#define HX_TP_PROC_RESET
+#define HX_TP_PROC_SENSE_ON_OFF
+#define HX_TP_PROC_2T2R
+
+#ifdef HX_TP_PROC_SELF_TEST
+//#define HX_TP_SELF_TEST_DRIVER //if enable, selftest works in driver
+#endif
+
+int himax_touch_proc_init(void);
+void himax_touch_proc_deinit(void);
+#endif
+//===========Himax Option function=============
+#define HX_RST_PIN_FUNC
+/*[Arima_8901][allen_yu] Upgrade himax first fw CIDFF00_D01_C01 20181122 begin*/
+#define HX_AUTO_UPDATE_FW
+/*[Arima_8901][allen_yu] 20181122 end*/
+//#define HX_ESD_RECOVERY
+//#define HX_CHIP_STATUS_MONITOR /*for ESD 2nd solution,it does not support incell,default off*/
+//#define HX_SMART_WAKEUP
+//#define HX_GESTURE_TRACK
+//#define HX_HIGH_SENSE
+//#define HX_PALM_REPORT
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+#define HX_USB_DETECT_GLOBAL
+/*[Arima_8901][TracyChui]20190816 end */
+//#define HX_USB_DETECT_CALLBACK
+//#define HX_PROTOCOL_A /* for MTK special platform.If turning on,it will report to system by using specific format. */
+//#define HX_RESUME_HW_RESET
+//#define HX_RESUME_SEND_CMD
+#define HX_PROTOCOL_B_3PA
+/*[Arima_7947][allen_yu] Define the value of collecting raw_data and delta_data 20171221 begin*/
+#define HX_FIX_TOUCH_INFO /* if open, you need to change the touch info in the fix_touch_info*/
+/*[Arima_7947][allen_yu] 20171221 end*/
+//#define HX_EN_SEL_BUTTON /* Support Self Virtual key ,default is close*/
+//#define HX_EN_MUT_BUTTON /* Support Mutual Virtual Key ,default is close*/
+
+#if defined(HX_EN_SEL_BUTTON) || defined(HX_EN_MUT_BUTTON)
+//#define HX_PLATFOME_DEFINE_KEY /* for specfic platform to set key(button) */
+#endif
+
+/*[Arima_8901][TracyChui]Add usb plug detect function and updated FW CID0804_D02_C13 20190816 start */
+#ifdef HX_USB_DETECT_GLOBAL
+#define POWER_SUPPLY_BATTERY_STATUS_PATCH "/sys/class/power_supply/battery/status"
+#endif
+/*[Arima_8901][TracyChui] 20190816 end */
+
+#define HX_KEY_MAX_COUNT 4
+#define DEFAULT_RETRY_CNT 3
+
+#define HX_85XX_A_SERIES_PWON 1
+#define HX_85XX_B_SERIES_PWON 2
+#define HX_85XX_C_SERIES_PWON 3
+#define HX_85XX_D_SERIES_PWON 4
+#define HX_85XX_E_SERIES_PWON 5
+#define HX_85XX_ES_SERIES_PWON 6
+#define HX_85XX_F_SERIES_PWON 7
+#define HX_85XX_G_SERIES_PWON 8
+#define HX_85XX_H_SERIES_PWON 9
+#define HX_83100A_SERIES_PWON 10
+#define HX_83102A_SERIES_PWON 11
+#define HX_83102B_SERIES_PWON 12
+#define HX_83110A_SERIES_PWON 13
+#define HX_83110B_SERIES_PWON 14
+#define HX_83111B_SERIES_PWON 15
+#define HX_83112A_SERIES_PWON 16
+#define HX_83112B_SERIES_PWON 17
+
+#define HX_TP_BIN_CHECKSUM_SW 1
+#define HX_TP_BIN_CHECKSUM_HW 2
+#define HX_TP_BIN_CHECKSUM_CRC 3
+
+#define SHIFTBITS 5
+
+#define FW_SIZE_32k 32768
+#define FW_SIZE_60k 61440
+#define FW_SIZE_64k 65536
+#define FW_SIZE_124k 126976
+#define FW_SIZE_128k 131072
+
+#define NO_ERR 0
+#define READY_TO_SERVE 1
+#define WORK_OUT 2
+#define I2C_FAIL -1
+#define MEM_ALLOC_FAIL -2
+#define CHECKSUM_FAIL -3
+#define GESTURE_DETECT_FAIL -4
+#define INPUT_REGISTER_FAIL -5
+#define FW_NOT_READY -6
+#define LENGTH_FAIL -7
+#define OPEN_FILE_FAIL -8
+#define ERR_WORK_OUT -10
+
+#define HX_FINGER_ON 1
+#define HX_FINGER_LEAVE 2
+
+#define HX_REPORT_COORD 1
+#define HX_REPORT_SMWP_EVENT 2
+/*[Arima_7947][allen_yu] Define the value of collecting raw_data and delta_data 20171221 begin*/
+#ifdef HX_FIX_TOUCH_INFO
+enum fix_touch_info
+{
+ FIX_HX_RX_NUM = 30,
+ FIX_HX_TX_NUM = 18,
+ FIX_HX_BT_NUM = 0,
+ FIX_HX_X_RES = 1080,
+ FIX_HX_Y_RES = 2160,
+ FIX_HX_MAX_PT = 10,
+ FIX_HX_XY_REVERSE = true,
+/*[Arima_7947][allen_yu] Modify Int trigger way and upgrade himax fw to CID0404_D01_C02 20171228 begin*/
+ FIX_HX_INT_IS_EDGE = false,
+/*[Arima_7947][allen_yu] 20171228 end*/
+#ifdef HX_TP_PROC_2T2R
+ FIX_HX_RX_NUM_2 = 0,
+ FIX_HX_TX_NUM_2 = 0,
+#endif
+/*[Arima_8710][allen_yu] Dynamic detect touch golden value 20180929 begin*/
+ SEC_FIX_HX_RX_NUM = 36,
+ SEC_FIX_HX_TX_NUM = 18,
+ SEC_FIX_HX_BT_NUM = 0,
+ SEC_FIX_HX_X_RES = 1080,
+ SEC_FIX_HX_Y_RES = 2160,
+ SEC_FIX_HX_MAX_PT = 10,
+ SEC_FIX_HX_XY_REVERSE = true,
+/*[Arima_8901][allen_yu] Modify to edge trigger and upgrade fw to CID0802_D02_C05 20190322 begin*/
+/*[Arima_8901][allen_yu] Modify to edge trigger and upgrade himax first fw CIDFF00_D01_C02 20181128 begin*/
+ SEC_FIX_HX_INT_IS_EDGE = false,
+/*[Arima_8901][allen_yu] 20181128 end*/
+/*[Arima_8901][allen_yu] 20190322 end*/
+#ifdef HX_TP_PROC_2T2R
+ SEC_FIX_HX_RX_NUM_2 = 0,
+ SEC_FIX_HX_TX_NUM_2 = 0
+#endif
+/*[Arima_8710][allen_yu] 20180929 end*/
+};
+#endif
+/*[Arima_7947][allen_yu] 20171221 end*/
+#ifdef HX_ZERO_FLASH
+#define HX_0F_DEBUG
+#endif
+
+struct himax_ic_data
+{
+ int vendor_fw_ver;
+ int vendor_config_ver;
+ int vendor_touch_cfg_ver;
+ int vendor_display_cfg_ver;
+ int vendor_cid_maj_ver;
+ int vendor_cid_min_ver;
+ int vendor_panel_ver;
+ int vendor_sensor_id;
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+ int vendor_hx_ic_id;
+/*[Arima_8710][allen_yu] 20180830 end*/
+ int HX_RX_NUM;
+ int HX_TX_NUM;
+ int HX_BT_NUM;
+ int HX_X_RES;
+ int HX_Y_RES;
+ int HX_MAX_PT;
+ bool HX_XY_REVERSE;
+ bool HX_INT_IS_EDGE;
+#ifdef HX_TP_PROC_2T2R
+ int HX_RX_NUM_2;
+ int HX_TX_NUM_2;
+#endif
+};
+
+struct himax_virtual_key
+{
+ int index;
+ int keycode;
+ int x_range_min;
+ int x_range_max;
+ int y_range_min;
+ int y_range_max;
+};
+
+struct himax_report_data
+{
+ int touch_all_size;
+ int raw_cnt_max;
+ int raw_cnt_rmd;
+ int touch_info_size;
+ uint8_t finger_num;
+ uint8_t finger_on;
+ uint8_t *hx_coord_buf;
+ uint8_t hx_state_info[2];
+#if defined(HX_SMART_WAKEUP)
+ int event_size;
+ uint8_t *hx_event_buf;
+#endif
+#if defined(HX_TP_PROC_DIAG)
+ int rawdata_size;
+ uint8_t diag_cmd;
+ uint8_t *hx_rawdata_buf;
+ uint8_t rawdata_frame_size;
+#endif
+};
+
+struct himax_ts_data
+{
+ bool suspended;
+ atomic_t suspend_mode;
+ uint8_t x_channel;
+ uint8_t y_channel;
+ uint8_t useScreenRes;
+ uint8_t diag_command;
+
+ uint8_t protocol_type;
+ uint8_t first_pressed;
+ uint8_t coord_data_size;
+ uint8_t area_data_size;
+ uint8_t coordInfoSize;
+ uint8_t raw_data_frame_size;
+ uint8_t raw_data_nframes;
+ uint8_t nFinger_support;
+ uint8_t irq_enabled;
+ uint8_t diag_self[50];
+
+ uint16_t finger_pressed;
+ uint16_t last_slot;
+ uint16_t pre_finger_mask;
+
+ uint32_t debug_log_level;
+ uint32_t widthFactor;
+ uint32_t heightFactor;
+ uint32_t tw_x_min;
+ uint32_t tw_x_max;
+ uint32_t tw_y_min;
+ uint32_t tw_y_max;
+ uint32_t pl_x_min;
+ uint32_t pl_x_max;
+ uint32_t pl_y_min;
+ uint32_t pl_y_max;
+
+ int rst_gpio;
+ int use_irq;
+ int (*power)(int on);
+ int pre_finger_data[10][2];
+
+ struct device *dev;
+ struct workqueue_struct *himax_wq;
+ struct work_struct work;
+ struct input_dev *input_dev;
+ struct hrtimer timer;
+ struct i2c_client *client;
+ struct himax_i2c_platform_data *pdata;
+ struct himax_virtual_key *button;
+ struct mutex rw_lock;
+/*[Arima_8710][allen_yu] Solve the report point issue 20180619 begin*/
+ struct mutex report_mutex;
+/*[Arima_8710][allen_yu] 20180619 end*/
+
+#if defined(CONFIG_FB)
+ struct notifier_block fb_notif;
+ struct workqueue_struct *himax_att_wq;
+ struct delayed_work work_att;
+/*[Arima_7947][allen_yu] Add mutex in callback function 20180131 begin*/
+ struct mutex ops_lock;
+/*[Arima_7947][allen_yu] 20180131 end*/
+#elif defined(CONFIG_HAS_EARLYSUSPEND)
+ struct early_suspend early_suspend;
+#endif
+#ifdef HX_CHIP_STATUS_MONITOR
+ struct workqueue_struct *himax_chip_monitor_wq;
+ struct delayed_work himax_chip_monitor;
+#endif
+#ifdef HX_TP_PROC_FLASH_DUMP
+ struct workqueue_struct *flash_wq;
+ struct work_struct flash_work;
+#endif
+
+#ifdef HX_AUTO_UPDATE_FW
+ struct workqueue_struct *himax_update_wq;
+ struct delayed_work work_update;
+#endif
+
+#ifdef HX_ZERO_FLASH
+ struct workqueue_struct *himax_0f_update_wq;
+ struct delayed_work work_0f_update;
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+ struct workqueue_struct *himax_diag_wq;
+ struct delayed_work himax_diag_delay_wrok;
+#endif
+
+#ifdef HX_SMART_WAKEUP
+ uint8_t SMWP_enable;
+ uint8_t gesture_cust_en[16];
+ //struct wake_lock ts_SMWP_wake_lock;
+ struct wakeup_source ts_SMWP_wake_lock;
+#endif
+
+#ifdef HX_HIGH_SENSE
+ uint8_t HSEN_enable;
+#endif
+
+#if defined(HX_USB_DETECT_CALLBACK)||defined(HX_USB_DETECT_GLOBAL)
+ uint8_t usb_connected;
+ uint8_t *cable_config;
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+ struct workqueue_struct *ito_test_wq;
+ struct work_struct ito_test_work;
+#endif
+
+};
+
+#ifdef HX_CHIP_STATUS_MONITOR
+struct chip_monitor_data
+{
+ int HX_CHIP_POLLING_COUNT;
+ int HX_POLLING_TIMER;//unit:sec
+ int HX_POLLING_TIMES;//ex:5(timer)x2(times)=10sec(polling time)
+ int HX_ON_HAND_SHAKING;//
+ int HX_CHIP_MONITOR_EN;
+};
+#endif
+
+
+enum input_protocol_type
+{
+ PROTOCOL_TYPE_A = 0x00,
+ PROTOCOL_TYPE_B = 0x01,
+};
+
+#ifdef HX_HIGH_SENSE
+void himax_set_HSEN_func(struct i2c_client *client,uint8_t HSEN_enable);
+#endif
+
+#ifdef HX_SMART_WAKEUP
+#define GEST_PTLG_ID_LEN (4)
+#define GEST_PTLG_HDR_LEN (4)
+#define GEST_PTLG_HDR_ID1 (0xCC)
+#define GEST_PTLG_HDR_ID2 (0x44)
+#define GEST_PT_MAX_NUM (128)
+
+void himax_set_SMWP_func(struct i2c_client *client,uint8_t SMWP_enable);
+extern bool FAKE_POWER_KEY_SEND;
+
+enum gesture_event_type
+{
+ EV_GESTURE_01 = 0x01,
+ EV_GESTURE_02,
+ EV_GESTURE_03,
+ EV_GESTURE_04,
+ EV_GESTURE_05,
+ EV_GESTURE_06,
+ EV_GESTURE_07,
+ EV_GESTURE_08,
+ EV_GESTURE_09,
+ EV_GESTURE_10,
+ EV_GESTURE_11,
+ EV_GESTURE_12,
+ EV_GESTURE_13,
+ EV_GESTURE_14,
+ EV_GESTURE_15,
+ EV_GESTURE_PWR = 0x80,
+};
+
+#define KEY_CUST_01 251
+#define KEY_CUST_02 252
+#define KEY_CUST_03 253
+#define KEY_CUST_04 254
+#define KEY_CUST_05 255
+#define KEY_CUST_06 256
+#define KEY_CUST_07 257
+#define KEY_CUST_08 258
+#define KEY_CUST_09 259
+#define KEY_CUST_10 260
+#define KEY_CUST_11 261
+#define KEY_CUST_12 262
+#define KEY_CUST_13 263
+#define KEY_CUST_14 264
+#define KEY_CUST_15 265
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+extern uint8_t himax_ito_test(void);
+#endif
+
+extern int irq_enable_count;
+
+//void himax_HW_reset(uint8_t loadconfig,uint8_t int_off);
+
+#ifdef QCT
+irqreturn_t himax_ts_thread(int irq, void *ptr);
+int himax_input_register(struct himax_ts_data *ts);
+#endif
+
+extern int himax_chip_common_probe(struct i2c_client *client, const struct i2c_device_id *id);
+extern int himax_chip_common_remove(struct i2c_client *client);
+extern int himax_chip_common_suspend(struct himax_ts_data *ts);
+extern int himax_chip_common_resume(struct himax_ts_data *ts);
+
+#endif
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_debug.c b/drivers/input/touchscreen/hxchipset83112b/himax_debug.c
new file mode 100644
index 0000000..01e83fc
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_debug.c
@@ -0,0 +1,3361 @@
+/* Himax Android Driver Sample Code for debug nodes
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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 "himax_debug.h"
+#include "himax_ic.h"
+
+//struct himax_debug_data* debug_data;
+
+extern struct himax_ic_data* ic_data;
+extern struct himax_ts_data *private_ts;
+extern unsigned char IC_TYPE;
+extern unsigned char IC_CHECKSUM;
+extern int himax_input_register(struct himax_ts_data *ts);
+#ifdef HX_CHIP_STATUS_MONITOR
+extern struct chip_monitor_data *g_chip_monitor_data;
+#endif
+
+#ifdef HX_RST_PIN_FUNC
+extern void himax_ic_reset(uint8_t loadconfig,uint8_t int_off);
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+#ifdef HX_TP_PROC_2T2R
+extern bool Is_2T2R;
+int HX_RX_NUM_2 = 0;
+int HX_TX_NUM_2 = 0;
+#endif
+uint8_t g_diag_arr_num = 0;
+#endif
+
+#ifdef HX_SMART_WAKEUP
+bool FAKE_POWER_KEY_SEND;
+#endif
+
+int g_max_mutual = 0;
+int g_min_mutual = 255;
+int g_max_self = 0;
+int g_min_self = 255;
+
+#if defined(HX_TP_PROC_SELF_TEST) || defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+int g_self_test_entered = 0;
+#endif
+
+struct timespec timeStart, timeEnd, timeDelta;
+int g_switch_mode = 0;
+extern void himax_idle_mode(struct i2c_client *client,int disable);
+extern int himax_switch_mode(struct i2c_client *client,int mode);
+extern void himax_return_event_stack(struct i2c_client *client);
+
+#ifdef HX_ZERO_FLASH
+extern void himax_0f_operation(struct work_struct *work);
+extern void himax_0f_operation_check(void);
+extern void himax_sys_reset(void);
+#endif
+
+//=============================================================================================================
+//
+// Segment : Himax PROC Debug Function
+//
+//=============================================================================================================
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+
+static ssize_t himax_ito_test_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ ssize_t ret = 0;
+ uint8_t result = 0;
+ uint8_t status = 0;
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ status = ito_get_step_status();
+
+ switch(status)
+ {
+ case 0:
+ ret += sprintf(buf + ret, "Step : START_TEST\n");
+ break;
+ case 1:
+ ret += sprintf(buf + ret, "Step : RAW_DATA\n");
+ break;
+ case 2:
+ ret += sprintf(buf + ret, "Step : PERCENT_TEST\n");
+ break;
+ case 3:
+ ret += sprintf(buf + ret, "Step : DEV_TEST\n");
+ break;
+ case 4:
+ ret += sprintf(buf + ret, "Step : NOISE_TEST\n");
+ break;
+ case 9:
+ ret += sprintf(buf + ret, "Step : END_TEST\n");
+ break;
+ default:
+ ret += sprintf(buf + ret, "Step : Null\n");
+ }
+
+ result = ito_get_result_status();
+ if(result == 0xF)
+ ret += sprintf(buf + ret, "ITO test is On-going! \n");
+ else if(result == 0)
+ ret += sprintf(buf + ret, "ITO test is Pass! \n");
+ else if(result == 2)
+ ret += sprintf(buf + ret, "Open config file fail! \n");
+ else
+ ret += sprintf(buf + ret, "ITO test is Fail! \n");
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return ret;
+}
+
+static ssize_t himax_ito_test_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ uint8_t result = 0;
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ result = ito_get_result_status();
+ I("%s: buf = %s, result = %d.\n", __func__, buf, result);
+
+ if(buf[0] == '1' && result != 0xF)
+ {
+ I("%s: buf[0] = %c.\n", __func__, buf[0]);
+ ito_set_step_status(0);
+ queue_work(ts->ito_test_wq, &ts->ito_test_work);
+ }
+
+ return len;
+}
+
+static struct file_operations himax_proc_ito_test_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_ito_test_read,
+ .write = himax_ito_test_write,
+};
+#endif
+
+static ssize_t himax_CRC_test_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ ssize_t ret = 0;
+ uint8_t result = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ himax_sense_off(private_ts->client);
+ msleep(20);
+ result = himax_calculateChecksum(private_ts->client, false);
+ himax_sense_on(private_ts->client, 0x01);
+ if(result)
+ ret += sprintf(temp_buf + ret, "CRC test is Pass! \n");
+ else
+ ret += sprintf(temp_buf + ret, "CRC test is Fail! \n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return ret;
+}
+
+static struct file_operations himax_proc_CRC_test_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_CRC_test_read,
+};
+
+static ssize_t himax_vendor_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ ssize_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+/*[Arima_7947][allen_yu] Show the Himax firmware version 20180123 begin*/
+#if 1
+ if((IC_TYPE >= 8)&&(ic_data->vendor_cid_maj_ver >= 0 || ic_data->vendor_cid_min_ver >= 0))
+ {
+ if(IC_TYPE == HX_83112A_SERIES_PWON)
+ {
+ count += sprintf(temp_buf + count, "Truly Himax CID0%2.2X_D%2.2X_C%2.2X \n",(ic_data->vendor_cid_maj_ver << 8 | ic_data->vendor_cid_min_ver),ic_data->vendor_display_cfg_ver,ic_data->vendor_touch_cfg_ver);
+ }
+ else
+ {
+ count += sprintf(temp_buf + count, "DJN Himax CID0%2.2X_D%2.2X_C%2.2X \n",(ic_data->vendor_cid_maj_ver << 8 | ic_data->vendor_cid_min_ver),ic_data->vendor_display_cfg_ver,ic_data->vendor_touch_cfg_ver);
+ }
+ }
+ else
+ {
+ count += sprintf(temp_buf + count, "Himax null\n");
+ }
+/*[Arima_8710][allen_yu] 20180828 end*/
+#else
+ count += sprintf(temp_buf + count, "FW_VER = 0x%2.2X \n",ic_data->vendor_fw_ver);
+
+ if(IC_TYPE < 8)
+ count += sprintf(temp_buf + count, "CONFIG_VER = 0x%2.2X \n",ic_data->vendor_config_ver);
+ else
+ {
+ count += sprintf(temp_buf + count, "TOUCH_VER = 0x%2.2X \n",ic_data->vendor_touch_cfg_ver);
+ count += sprintf(temp_buf + count, "DISPLAY_VER = 0x%2.2X \n",ic_data->vendor_display_cfg_ver);
+ }
+ if(ic_data->vendor_cid_maj_ver < 0 && ic_data->vendor_cid_min_ver < 0)
+ count += sprintf(temp_buf + count, "CID_VER = NULL\n");
+ else
+ count += sprintf(temp_buf + count, "CID_VER = 0x%2.2X \n",(ic_data->vendor_cid_maj_ver << 8 | ic_data->vendor_cid_min_ver));
+
+ if(ic_data->vendor_panel_ver < 0)
+ count += sprintf(temp_buf + count, "PANEL_VER = NULL\n");
+ else
+ count += sprintf(temp_buf + count, "PANEL_VER = 0x%2.2X \n",ic_data->vendor_panel_ver);
+
+ count += sprintf(temp_buf + count, "\n");
+
+ count += sprintf(temp_buf + count, "Himax Touch Driver Version:\n");
+ count += sprintf(temp_buf + count, "%s \n", HIMAX_DRIVER_VER);
+#endif
+/*[Arima_7947][allen_yu] 20180123 end*/
+ HX_PROC_SEND_FLAG=1;
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return count;
+}
+
+static struct file_operations himax_proc_vendor_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_vendor_read,
+};
+
+static ssize_t himax_attn_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ ssize_t ret = 0;
+ struct himax_ts_data *ts_data;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+ ts_data = private_ts;
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ ret += sprintf(temp_buf, "attn = %x\n", himax_int_gpio_read(ts_data->pdata->gpio_irq));
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return ret;
+}
+
+
+static struct file_operations himax_proc_attn_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_attn_read,
+};
+
+static ssize_t himax_int_en_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ size_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ count += sprintf(temp_buf + count, "%d ", ts->irq_enabled);
+ count += sprintf(temp_buf + count, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return count;
+}
+
+static ssize_t himax_int_en_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ char buf_tmp[12]= {0};
+ int value, ret=0;
+
+ if (len >= 12)
+ {
+ I("%s: no command exceeds 12 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf_tmp, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ if (buf_tmp[0] == '0')
+ value = false;
+ else if (buf_tmp[0] == '1')
+ value = true;
+ else
+ return -EINVAL;
+
+ if (value)
+ {
+ ret = himax_int_en_set(ts->client);
+ if (ret == 0)
+ {
+ ts->irq_enabled = 1;
+ irq_enable_count = 1;
+ }
+ }
+ else
+ {
+ himax_int_enable(ts->client->irq,0);
+ free_irq(ts->client->irq, ts);
+ ts->irq_enabled = 0;
+ }
+
+ return len;
+}
+
+static struct file_operations himax_proc_int_en_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_int_en_read,
+ .write = himax_int_en_write,
+};
+
+static ssize_t himax_layout_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ size_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ count += sprintf(temp_buf + count, "%d ", ts->pdata->abs_x_min);
+ count += sprintf(temp_buf + count, "%d ", ts->pdata->abs_x_max);
+ count += sprintf(temp_buf + count, "%d ", ts->pdata->abs_y_min);
+ count += sprintf(temp_buf + count, "%d ", ts->pdata->abs_y_max);
+ count += sprintf(temp_buf + count, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return count;
+}
+
+static ssize_t himax_layout_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ char buf_tmp[5];
+ int i = 0, j = 0, k = 0, ret;
+ unsigned long value;
+ int layout[4] = {0};
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ for (i = 0; i < 20; i++)
+ {
+ if (buf[i] == ',' || buf[i] == '\n')
+ {
+ memset(buf_tmp, 0x0, sizeof(buf_tmp));
+ if (i - j <= 5)
+ memcpy(buf_tmp, buf + j, i - j);
+ else
+ {
+ I("buffer size is over 5 char\n");
+ return len;
+ }
+ j = i + 1;
+ if (k < 4)
+ {
+ ret = kstrtoul(buf_tmp, 10, &value);
+ layout[k++] = value;
+ }
+ }
+ }
+ if (k == 4)
+ {
+ ts->pdata->abs_x_min=layout[0];
+ ts->pdata->abs_x_max=layout[1];
+ ts->pdata->abs_y_min=layout[2];
+ ts->pdata->abs_y_max=layout[3];
+ I("%d, %d, %d, %d\n",
+ ts->pdata->abs_x_min, ts->pdata->abs_x_max, ts->pdata->abs_y_min, ts->pdata->abs_y_max);
+ input_unregister_device(ts->input_dev);
+ himax_input_register(ts);
+ }
+ else
+ I("ERR@%d, %d, %d, %d\n",
+ ts->pdata->abs_x_min, ts->pdata->abs_x_max, ts->pdata->abs_y_min, ts->pdata->abs_y_max);
+ return len;
+}
+
+static struct file_operations himax_proc_layout_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_layout_read,
+ .write = himax_layout_write,
+};
+
+static ssize_t himax_debug_level_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts_data;
+ size_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+ ts_data = private_ts;
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ count += sprintf(temp_buf, "%d\n", ts_data->debug_log_level);
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG = 1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return count;
+}
+
+static ssize_t himax_debug_level_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts;
+ char buf_tmp[11];
+ int i;
+ ts = private_ts;
+
+ if (len >= 12)
+ {
+ I("%s: no command exceeds 12 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf_tmp, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ ts->debug_log_level = 0;
+ for(i=0; i<len-1; i++)
+ {
+ if( buf_tmp[i]>='0' && buf_tmp[i]<='9' )
+ ts->debug_log_level |= (buf_tmp[i]-'0');
+ else if( buf_tmp[i]>='A' && buf_tmp[i]<='F' )
+ ts->debug_log_level |= (buf_tmp[i]-'A'+10);
+ else if( buf_tmp[i]>='a' && buf_tmp[i]<='f' )
+ ts->debug_log_level |= (buf_tmp[i]-'a'+10);
+
+ if(i!=len-2)
+ ts->debug_log_level <<= 4;
+ }
+
+ if (ts->debug_log_level & BIT(3))
+ {
+ if (ts->pdata->screenWidth > 0 && ts->pdata->screenHeight > 0 &&
+ (ts->pdata->abs_x_max - ts->pdata->abs_x_min) > 0 &&
+ (ts->pdata->abs_y_max - ts->pdata->abs_y_min) > 0)
+ {
+ ts->widthFactor = (ts->pdata->screenWidth << SHIFTBITS)/(ts->pdata->abs_x_max - ts->pdata->abs_x_min);
+ ts->heightFactor = (ts->pdata->screenHeight << SHIFTBITS)/(ts->pdata->abs_y_max - ts->pdata->abs_y_min);
+ if (ts->widthFactor > 0 && ts->heightFactor > 0)
+ ts->useScreenRes = 1;
+ else
+ {
+ ts->heightFactor = 0;
+ ts->widthFactor = 0;
+ ts->useScreenRes = 0;
+ }
+ }
+ else
+ I("Enable finger debug with raw position mode!\n");
+ }
+ else
+ {
+ ts->useScreenRes = 0;
+ ts->widthFactor = 0;
+ ts->heightFactor = 0;
+ }
+
+ return len;
+}
+
+static struct file_operations himax_proc_debug_level_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_debug_level_read,
+ .write = himax_debug_level_write,
+};
+
+#ifdef HX_TP_PROC_REGISTER
+static ssize_t himax_proc_register_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int ret = 0;
+ uint16_t loop_i;
+ uint8_t data[128];
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+ memset(data, 0x00, sizeof(data));
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ I("himax_register_show: %02X,%02X,%02X,%02X\n", register_command[3],register_command[2],register_command[1],register_command[0]);
+ himax_register_read(private_ts->client, register_command, 128, data, cfg_flag);
+
+ ret += sprintf(temp_buf, "command: %02X,%02X,%02X,%02X\n", register_command[3],register_command[2],register_command[1],register_command[0]);
+
+ for (loop_i = 0; loop_i < 128; loop_i++)
+ {
+ ret += sprintf(temp_buf + ret, "0x%2.2X ", data[loop_i]);
+ if ((loop_i % 16) == 15)
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+static ssize_t himax_proc_register_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ char buf[80] = {0};
+ char buf_tmp[16];
+ uint8_t length = 0;
+ unsigned long result = 0;
+ uint8_t loop_i = 0;
+ uint16_t base = 2;
+ char *data_str = NULL;
+ uint8_t w_data[20];
+ uint8_t x_pos[20];
+ uint8_t count = 0;
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ memset(buf_tmp, 0x0, sizeof(buf_tmp));
+ memset(w_data, 0x0, sizeof(w_data));
+ memset(x_pos, 0x0, sizeof(x_pos));
+
+ I("himax %s \n",buf);
+
+ if ((buf[0] == 'r' || buf[0] == 'w') && buf[1] == ':' && buf[2] == 'x')
+ {
+
+ length = strlen(buf);
+
+ //I("%s: length = %d.\n", __func__,length);
+ for (loop_i = 0; loop_i < length; loop_i++) //find postion of 'x'
+ {
+ if(buf[loop_i] == 'x')
+ {
+ x_pos[count] = loop_i;
+ count++;
+ }
+ }
+
+ data_str = strrchr(buf, 'x');
+ I("%s: %s.\n", __func__,data_str);
+ length = strlen(data_str+1) - 1;
+
+ if (buf[0] == 'r')
+ {
+ if (buf[3] == 'F' && buf[4] == 'E' && length == 4)
+ {
+ length = length - base;
+ cfg_flag = true;
+ memcpy(buf_tmp, data_str + base +1, length);
+ }
+ else
+ {
+ cfg_flag = false;
+ memcpy(buf_tmp, data_str + 1, length);
+ }
+
+ byte_length = length/2;
+ if (!kstrtoul(buf_tmp, 16, &result))
+ {
+ for (loop_i = 0 ; loop_i < byte_length ; loop_i++)
+ {
+ register_command[loop_i] = (uint8_t)(result >> loop_i*8);
+ }
+ }
+ }
+ else if (buf[0] == 'w')
+ {
+ if (buf[3] == 'F' && buf[4] == 'E')
+ {
+ cfg_flag = true;
+ memcpy(buf_tmp, buf + base + 3, length);
+ }
+ else
+ {
+ cfg_flag = false;
+ memcpy(buf_tmp, buf + 3, length);
+ }
+ if(count < 3)
+ {
+ byte_length = length/2;
+ if (!kstrtoul(buf_tmp, 16, &result)) //command
+ {
+ for (loop_i = 0 ; loop_i < byte_length ; loop_i++)
+ {
+ register_command[loop_i] = (uint8_t)(result >> loop_i*8);
+ }
+ }
+ if (!kstrtoul(data_str+1, 16, &result)) //data
+ {
+ for (loop_i = 0 ; loop_i < byte_length ; loop_i++)
+ {
+ w_data[loop_i] = (uint8_t)(result >> loop_i*8);
+ }
+ }
+ himax_register_write(private_ts->client, register_command, byte_length, w_data, cfg_flag);
+ }
+ else
+ {
+ byte_length = x_pos[1] - x_pos[0] - 2;
+ for (loop_i = 0; loop_i < count; loop_i++) //parsing addr after 'x'
+ {
+ memcpy(buf_tmp, buf + x_pos[loop_i] + 1, byte_length);
+ //I("%s: buf_tmp = %s\n", __func__,buf_tmp);
+ if (!kstrtoul(buf_tmp, 16, &result))
+ {
+ if(loop_i == 0)
+ {
+ register_command[loop_i] = (uint8_t)(result);
+ //I("%s: register_command = %X\n", __func__,register_command[0]);
+ }
+ else
+ {
+ w_data[loop_i - 1] = (uint8_t)(result);
+ //I("%s: w_data[%d] = %2X\n", __func__,loop_i - 1,w_data[loop_i - 1]);
+ }
+ }
+ }
+
+ byte_length = count - 1;
+ himax_register_write(private_ts->client, register_command, byte_length, &w_data[0], cfg_flag);
+ }
+ }
+ else
+ return len;
+
+ }
+ return len;
+}
+
+static struct file_operations himax_proc_register_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_proc_register_read,
+ .write = himax_proc_register_write,
+};
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+int32_t *getMutualBuffer(void)
+{
+ return diag_mutual;
+}
+int32_t *getMutualNewBuffer(void)
+{
+ return diag_mutual_new;
+}
+int32_t *getMutualOldBuffer(void)
+{
+ return diag_mutual_old;
+}
+int32_t *getSelfBuffer(void)
+{
+ return &diag_self[0];
+}
+uint8_t getXChannel(void)
+{
+ return x_channel;
+}
+uint8_t getYChannel(void)
+{
+ return y_channel;
+}
+uint8_t getDiagCommand(void)
+{
+ return g_diag_command;
+}
+void setXChannel(uint8_t x)
+{
+ x_channel = x;
+}
+void setYChannel(uint8_t y)
+{
+ y_channel = y;
+}
+void setMutualBuffer(void)
+{
+ diag_mutual = kzalloc(x_channel * y_channel * sizeof(int32_t), GFP_KERNEL);
+}
+void setMutualNewBuffer(void)
+{
+ diag_mutual_new = kzalloc(x_channel * y_channel * sizeof(int32_t), GFP_KERNEL);
+}
+void setMutualOldBuffer(void)
+{
+ diag_mutual_old = kzalloc(x_channel * y_channel * sizeof(int32_t), GFP_KERNEL);
+}
+
+#ifdef HX_TP_PROC_2T2R
+int32_t *getMutualBuffer_2(void)
+{
+ return diag_mutual_2;
+}
+uint8_t getXChannel_2(void)
+{
+ return x_channel_2;
+}
+uint8_t getYChannel_2(void)
+{
+ return y_channel_2;
+}
+void setXChannel_2(uint8_t x)
+{
+ x_channel_2 = x;
+}
+void setYChannel_2(uint8_t y)
+{
+ y_channel_2 = y;
+}
+void setMutualBuffer_2(void)
+{
+ diag_mutual_2 = kzalloc(x_channel_2 * y_channel_2 * sizeof(int32_t), GFP_KERNEL);
+}
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+int himax_set_diag_cmd(struct himax_ic_data *ic_data,struct himax_report_data *hx_touch_data)
+{
+ int32_t *mutual_data;
+ int32_t *self_data;
+ int mul_num;
+ int self_num;
+ //int RawDataLen = 0;
+
+ hx_touch_data->diag_cmd = getDiagCommand();
+ if (hx_touch_data->diag_cmd >= 1 && hx_touch_data->diag_cmd <= 7)
+ {
+ //Check event stack CRC
+ if(!diag_check_sum(hx_touch_data))
+ {
+ goto bypass_checksum_failed_packet;
+ }
+#ifdef HX_TP_PROC_2T2R
+ if(Is_2T2R && (hx_touch_data->diag_cmd >= 4 && hx_touch_data->diag_cmd <= 6))
+ {
+ mutual_data = getMutualBuffer_2();
+ self_data = getSelfBuffer();
+
+ // initiallize the block number of mutual and self
+ mul_num = getXChannel_2() * getYChannel_2();
+
+#ifdef HX_EN_SEL_BUTTON
+ self_num = getXChannel_2() + getYChannel_2() + ic_data->HX_BT_NUM;
+#else
+ self_num = getXChannel_2() + getYChannel_2();
+#endif
+ }
+ else
+#endif
+ {
+ mutual_data = getMutualBuffer();
+ self_data = getSelfBuffer();
+
+ // initiallize the block number of mutual and self
+ mul_num = getXChannel() * getYChannel();
+
+#ifdef HX_EN_SEL_BUTTON
+ self_num = getXChannel() + getYChannel() + ic_data->HX_BT_NUM;
+#else
+ self_num = getXChannel() + getYChannel();
+#endif
+ }
+
+ diag_parse_raw_data(hx_touch_data,mul_num, self_num,hx_touch_data->diag_cmd, mutual_data,self_data);
+
+ }
+ else if (hx_touch_data->diag_cmd == 8)
+ {
+ memset(diag_coor, 0x00, sizeof(diag_coor));
+ memcpy(&(diag_coor[0]), &hx_touch_data->hx_coord_buf[0], hx_touch_data->touch_info_size);
+ }
+ //assign state info data
+ memcpy(&(hx_state_info[0]), &hx_touch_data->hx_state_info[0], 2);
+
+ return NO_ERR;
+
+bypass_checksum_failed_packet:
+ return 1;
+}
+#endif
+//#if defined(HX_DEBUG_LEVEL)
+void himax_log_touch_data(uint8_t *buf,struct himax_report_data *hx_touch_data)
+{
+ int loop_i = 0;
+ int print_size = 0;
+
+ if(!hx_touch_data->diag_cmd)
+ print_size = hx_touch_data->touch_info_size;
+ else
+ print_size = hx_touch_data->touch_all_size;
+
+ for (loop_i = 0; loop_i < print_size; loop_i+=8)
+ {
+ if((loop_i + 7) >= print_size)
+ {
+ I("%s: over flow\n",__func__);
+ break;
+ }
+ I("P %2d = 0x%2.2X P %2d = 0x%2.2X ", loop_i, buf[loop_i], loop_i + 1, buf[loop_i + 1]);
+ I("P %2d = 0x%2.2X P %2d = 0x%2.2X ", loop_i + 2, buf[loop_i + 2], loop_i + 3, buf[loop_i + 3]);
+ I("P %2d = 0x%2.2X P %2d = 0x%2.2X ", loop_i + 4, buf[loop_i + 4], loop_i + 5, buf[loop_i + 5]);
+ I("P %2d = 0x%2.2X P %2d = 0x%2.2X ", loop_i + 6, buf[loop_i + 6], loop_i + 7, buf[loop_i + 7]);
+ I("\n");
+ }
+}
+void himax_log_touch_event(int x,int y,int w,int loop_i,uint8_t EN_NoiseFilter,int touched)
+{
+ if(touched == HX_FINGER_ON)
+ I("Finger %d=> X:%d, Y:%d W:%d, Z:%d, F:%d, N:%d\n",loop_i + 1, x, y, w, w, loop_i + 1, EN_NoiseFilter);
+ else if(touched == HX_FINGER_LEAVE)
+ I("All Finger leave\n");
+ else
+ I("%s : wrong input!\n",__func__);
+}
+void himax_log_touch_int_devation(int touched)
+{
+
+
+ if(touched == HX_FINGER_ON)
+ {
+ getnstimeofday(&timeStart);
+ /* I(" Irq start time = %ld.%06ld s\n",
+ timeStart.tv_sec, timeStart.tv_nsec/1000); */
+ }
+ else if(touched == HX_FINGER_LEAVE)
+ {
+ getnstimeofday(&timeEnd);
+ timeDelta.tv_nsec = (timeEnd.tv_sec*1000000000+timeEnd.tv_nsec) - (timeStart.tv_sec*1000000000+timeStart.tv_nsec);
+ /*I("Irq finish time = %ld.%06ld s\n",
+ timeEnd.tv_sec, timeEnd.tv_nsec/1000);*/
+ I("Touch latency = %ld us\n", timeDelta.tv_nsec/1000);
+ }
+ else
+ I("%s : wrong input!\n",__func__);
+}
+void himax_log_touch_event_detail(struct himax_ts_data *ts,int x,int y,int w,int loop_i,uint8_t EN_NoiseFilter,int touched,uint16_t old_finger)
+{
+
+ if (touched == HX_FINGER_ON)
+ {
+ if (old_finger >> loop_i == 0)
+ {
+ if (ts->useScreenRes)
+ {
+ I("status: Screen:F:%02d Down, X:%d, Y:%d, W:%d, N:%d\n",
+ loop_i+1, x * ts->widthFactor >> SHIFTBITS,
+ y * ts->heightFactor >> SHIFTBITS, w, EN_NoiseFilter);
+ }
+ else
+ {
+ I("status: Raw:F:%02d Down, X:%d, Y:%d, W:%d, N:%d\n",
+ loop_i+1, x, y, w, EN_NoiseFilter);
+ }
+ }
+ }
+ else if(touched == HX_FINGER_LEAVE)//if (old_finger >> loop_i == 1)
+ {
+ if (old_finger >> loop_i == 1)
+ {
+ if (ts->useScreenRes)
+ {
+ I("status: Screen:F:%02d Up, X:%d, Y:%d, N:%d\n",
+ loop_i+1, ts->pre_finger_data[loop_i][0] * ts->widthFactor >> SHIFTBITS,
+ ts->pre_finger_data[loop_i][1] * ts->heightFactor >> SHIFTBITS, EN_NoiseFilter); //Last_EN_NoiseFilter
+ }
+ else
+ {
+ I("status: Raw:F:%02d Up, X:%d, Y:%d, N:%d\n",
+ loop_i+1, ts->pre_finger_data[loop_i][0],
+ ts->pre_finger_data[loop_i][1], EN_NoiseFilter); //Last_EN_NoiseFilter
+ }
+ }
+ }
+ else
+ {
+ I("%s : wrong input!\n",__func__);
+ }
+}
+//#endif
+static ssize_t himax_diag_arrange_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ g_diag_arr_num = buf[0] - '0';
+ I("%s: g_diag_arr_num = %d \n", __func__,g_diag_arr_num);
+
+ return len;
+}
+
+void himax_get_mutual_edge(void)
+{
+ int i = 0;
+ for(i = 0; i < (x_channel * y_channel); i++)
+ {
+ if(diag_mutual[i] > g_max_mutual)
+ g_max_mutual = diag_mutual[i];
+ if(diag_mutual[i] < g_min_mutual)
+ g_min_mutual = diag_mutual[i];
+ }
+}
+
+void himax_get_self_edge(void)
+{
+ int i = 0;
+ for(i = 0; i < (x_channel + y_channel); i++)
+ {
+ if(diag_self[i] > g_max_self)
+ g_max_self = diag_self[i];
+ if(diag_self[i] < g_min_self)
+ g_min_self = diag_self[i];
+ }
+}
+
+/* print first step which is row */
+static struct file_operations himax_proc_diag_arrange_ops =
+{
+ .owner = THIS_MODULE,
+ .write = himax_diag_arrange_write,
+};
+static void print_state_info(struct seq_file *s)
+{
+ //seq_printf(s, "State_info_2bytes:%3d, %3d\n",hx_state_info[0],hx_state_info[1]);
+ seq_printf(s, "ReCal = %d\t",hx_state_info[0] & 0x01);
+ seq_printf(s, "Palm = %d\t",hx_state_info[0]>>1 & 0x01);
+ seq_printf(s, "AC mode = %d\t",hx_state_info[0]>>2 & 0x01);
+ seq_printf(s, "Water = %d\n",hx_state_info[0]>>3 & 0x01);
+ seq_printf(s, "Glove = %d\t",hx_state_info[0]>>4 & 0x01);
+ seq_printf(s, "TX Hop = %d\t",hx_state_info[0]>>5 & 0x01 );
+ seq_printf(s, "Base Line = %d\t",hx_state_info[0]>>6 & 0x01);
+ seq_printf(s, "OSR Hop = %d\t",hx_state_info[1]>>3 & 0x01);
+ seq_printf(s, "KEY = %d\n",hx_state_info[1]>>4 & 0x0F);
+}
+
+static void himax_diag_arrange_print(struct seq_file *s, int i, int j, int transpose)
+{
+
+ if(transpose)
+ seq_printf(s, "%6d", diag_mutual[ j + i*x_channel]);
+ else
+ seq_printf(s, "%6d", diag_mutual[ i + j*x_channel]);
+}
+
+/* ready to print second step which is column*/
+static void himax_diag_arrange_inloop(struct seq_file *s, int in_init,int out_init,bool transpose, int j)
+{
+ int i;
+ int in_max = 0;
+
+ if(transpose)
+ in_max = y_channel;
+ else
+ in_max = x_channel;
+
+ if (in_init > 0) //bit0 = 1
+ {
+ for(i = in_init-1; i >= 0; i--)
+ {
+ himax_diag_arrange_print(s, i, j, transpose);
+ }
+ if(transpose)
+ {
+ if(out_init > 0)
+ seq_printf(s, " %5d\n", diag_self[j]);
+ else
+ seq_printf(s, " %5d\n", diag_self[x_channel - j - 1]);
+ }
+ }
+ else //bit0 = 0
+ {
+ for (i = 0; i < in_max; i++)
+ {
+ himax_diag_arrange_print(s, i, j, transpose);
+ }
+ if(transpose)
+ {
+ if(out_init > 0)
+ seq_printf(s, " %5d\n", diag_self[x_channel - j - 1]);
+ else
+ seq_printf(s, " %5d\n", diag_self[j]);
+ }
+ }
+}
+
+/* print first step which is row */
+static void himax_diag_arrange_outloop(struct seq_file *s, int transpose, int out_init, int in_init)
+{
+ int j;
+ int out_max = 0;
+ int self_cnt = 0;
+
+ if(transpose)
+ out_max = x_channel;
+ else
+ out_max = y_channel;
+
+ if(out_init > 0) //bit1 = 1
+ {
+ self_cnt = 1;
+ for(j = out_init-1; j >= 0; j--)
+ {
+ seq_printf(s, "%3c%02d%c",'[', j + 1,']');
+ himax_diag_arrange_inloop(s, in_init, out_init, transpose, j);
+ if(!transpose)
+ {
+ seq_printf(s, " %5d\n", diag_self[y_channel + x_channel - self_cnt]);
+ self_cnt++;
+ }
+ }
+ }
+ else //bit1 = 0
+ {
+ //self_cnt = x_channel;
+ for(j = 0; j < out_max; j++)
+ {
+ seq_printf(s, "%3c%02d%c",'[', j + 1,']');
+ himax_diag_arrange_inloop(s, in_init, out_init, transpose, j);
+ if(!transpose)
+ {
+ seq_printf(s, " %5d\n", diag_self[j + x_channel]);
+ }
+ }
+ }
+}
+
+/* determin the output format of diag */
+static void himax_diag_arrange(struct seq_file *s)
+{
+ int bit2,bit1,bit0;
+ int i;
+
+ /* rotate bit */
+ bit2 = g_diag_arr_num >> 2;
+ /* reverse Y */
+ bit1 = g_diag_arr_num >> 1 & 0x1;
+ /* reverse X */
+ bit0 = g_diag_arr_num & 0x1;
+
+ if (g_diag_arr_num < 4)
+ {
+ for (i = 0 ; i <= x_channel; i++)
+ seq_printf(s, "%3c%02d%c",'[', i,']');
+ seq_printf(s,"\n");
+ himax_diag_arrange_outloop(s, bit2, bit1 * y_channel, bit0 * x_channel);
+ seq_printf(s, "%6c",' ');
+ if(bit0 == 1)
+ {
+ for (i = x_channel - 1; i >= 0; i--)
+ seq_printf(s, "%6d", diag_self[i]);
+ }
+ else
+ {
+ for (i = 0; i < x_channel; i++)
+ seq_printf(s, "%6d", diag_self[i]);
+ }
+ }
+ else
+ {
+ for (i = 0 ; i <= y_channel; i++)
+ seq_printf(s, "%3c%02d%c",'[', i,']');
+ seq_printf(s,"\n");
+ himax_diag_arrange_outloop(s, bit2, bit1 * x_channel, bit0 * y_channel);
+ seq_printf(s, "%6c",' ');
+ if(bit1 == 1)
+ {
+ for (i = x_channel + y_channel - 1; i >= x_channel; i--)
+ {
+ seq_printf(s, "%6d", diag_self[i]);
+ }
+ }
+ else
+ {
+ for (i = x_channel; i < x_channel + y_channel; i++)
+ {
+ seq_printf(s, "%6d", diag_self[i]);
+ }
+ }
+ }
+}
+
+static void *himax_diag_seq_start(struct seq_file *s, loff_t *pos)
+{
+ if (*pos>=1) return NULL;
+ return (void *)((unsigned long) *pos+1);
+}
+
+static void *himax_diag_seq_next(struct seq_file *s, void *v, loff_t *pos)
+{
+ return NULL;
+}
+static void himax_diag_seq_stop(struct seq_file *s, void *v)
+{
+}
+static int himax_diag_seq_read(struct seq_file *s, void *v)
+{
+ size_t count = 0;
+ uint32_t loop_i;
+ uint16_t mutual_num, self_num, width;
+ int dsram_type = 0;
+
+ dsram_type = g_diag_command/10;
+
+#ifdef HX_TP_PROC_2T2R
+ if(Is_2T2R &&(g_diag_command >= 4 && g_diag_command <= 6))
+ {
+ mutual_num = x_channel_2 * y_channel_2;
+ self_num = x_channel_2 + y_channel_2; //don't add KEY_COUNT
+ width = x_channel_2;
+ seq_printf(s, "ChannelStart: %4d, %4d\n\n", x_channel_2, y_channel_2);
+ }
+ else
+#endif
+ {
+ mutual_num = x_channel * y_channel;
+ self_num = x_channel + y_channel; //don't add KEY_COUNT
+ width = x_channel;
+ seq_printf(s, "ChannelStart: %4d, %4d\n\n", x_channel, y_channel);
+ }
+
+ // start to show out the raw data in adb shell
+ if ((g_diag_command >= 1 && g_diag_command <= 3) || (g_diag_command == 7))
+ {
+ himax_diag_arrange(s);
+ seq_printf(s, "\n");
+#ifdef HX_EN_SEL_BUTTON
+ seq_printf(s, "\n");
+ for (loop_i = 0; loop_i < ic_data->HX_BT_NUM; loop_i++)
+ seq_printf(s, "%6d", diag_self[ic_data->HX_RX_NUM + ic_data->HX_TX_NUM + loop_i]);
+#endif
+ seq_printf(s, "ChannelEnd");
+ seq_printf(s, "\n");
+ }
+#ifdef HX_TP_PROC_2T2R
+ else if(Is_2T2R && g_diag_command >= 4 && g_diag_command <= 6)
+ {
+ for (loop_i = 0; loop_i < mutual_num; loop_i++)
+ {
+ seq_printf(s, "%4d", diag_mutual_2[loop_i]);
+ if ((loop_i % width) == (width - 1))
+ seq_printf(s, " %4d\n", diag_self[width + loop_i/width]);
+ }
+ seq_printf(s, "\n");
+ for (loop_i = 0; loop_i < width; loop_i++)
+ {
+ seq_printf(s, "%4d", diag_self[loop_i]);
+ if (((loop_i) % width) == (width - 1))
+ seq_printf(s, "\n");
+ }
+
+#ifdef HX_EN_SEL_BUTTON
+ seq_printf(s, "\n");
+ for (loop_i = 0; loop_i < HX_BT_NUM; loop_i++)
+ seq_printf(s, "%4d", diag_self[ic_data->HX_RX_NUM_2 + ic_data->HX_TX_NUM_2 + loop_i]);
+#endif
+ seq_printf(s, "ChannelEnd");
+ seq_printf(s, "\n");
+ }
+#endif
+ else if (g_diag_command == 8)
+ {
+ for (loop_i = 0; loop_i < 128 ; loop_i++)
+ {
+ if ((loop_i % 16) == 0)
+ seq_printf(s, "LineStart:");
+ seq_printf(s, "%4x", diag_coor[loop_i]);
+ if ((loop_i % 16) == 15)
+ seq_printf(s, "\n");
+ }
+ }
+ else if (dsram_type > 0 && dsram_type <= 8)
+ {
+ himax_diag_arrange(s);
+ seq_printf(s, "ChannelEnd");
+ seq_printf(s, "\n");
+ }
+ if((g_diag_command >= 1 && g_diag_command <= 7) || dsram_type > 0)
+ {
+ /* print Mutual/Slef Maximum and Minimum */
+ himax_get_mutual_edge();
+ himax_get_self_edge();
+ seq_printf(s, "Mutual Max:%3d, Min:%3d\n",g_max_mutual,g_min_mutual);
+ seq_printf(s, "Self Max:%3d, Min:%3d\n",g_max_self,g_min_self);
+
+ /* recovery status after print*/
+ g_max_mutual = 0;
+ g_min_mutual = 255;
+ g_max_self = 0;
+ g_min_self = 255;
+ }
+ /*pring state info*/
+ print_state_info(s);
+ return count;
+}
+static struct seq_operations himax_diag_seq_ops =
+{
+ .start = himax_diag_seq_start,
+ .next = himax_diag_seq_next,
+ .stop = himax_diag_seq_stop,
+ .show = himax_diag_seq_read,
+};
+static int himax_diag_proc_open(struct inode *inode, struct file *file)
+{
+ return seq_open(file, &himax_diag_seq_ops);
+};
+bool DSRAM_Flag = false;
+
+//DSRAM thread
+void himax_ts_diag_func(void)
+{
+ int i=0, j=0;
+ unsigned int index = 0;
+ int total_size = ic_data->HX_TX_NUM * ic_data->HX_RX_NUM * 2;
+ uint8_t info_data[total_size];
+ int32_t *mutual_data;
+ int32_t *mutual_data_new;
+ int32_t *mutual_data_old;
+ int32_t new_data;
+ /* 1:common dsram,2:100 frame Max,3:N-(N-1)frame */
+ int dsram_type = 0;
+ char temp_buf[20];
+ char write_buf[total_size*3];
+
+ mutual_data = NULL;
+ mutual_data_new = NULL;
+ mutual_data_old = NULL;
+ memset(write_buf, '\0', sizeof(write_buf));
+
+ dsram_type = g_diag_command/10;
+
+ I("%s:Entering g_diag_command=%d\n!",__func__,g_diag_command);
+
+ if(dsram_type == 8)
+ {
+ dsram_type = 1;
+ I("%s Sorting Mode run sram type1 ! \n",__func__);
+ }
+
+ himax_burst_enable(private_ts->client, 1);
+ if(dsram_type == 1 || dsram_type == 2 || dsram_type == 4)
+ {
+ mutual_data = getMutualBuffer();
+ }
+ else if(dsram_type == 3)
+ {
+ mutual_data = getMutualBuffer();
+ mutual_data_new = getMutualNewBuffer();
+ mutual_data_old = getMutualOldBuffer();
+ }
+ himax_get_DSRAM_data(private_ts->client, info_data);
+
+ index = 0;
+ for (i = 0; i < ic_data->HX_TX_NUM; i++)
+ {
+ for (j = 0; j < ic_data->HX_RX_NUM; j++)
+ {
+ new_data = (info_data[index + 1] << 8 | info_data[index]);
+ if(dsram_type == 1 || dsram_type == 4)
+ {
+ mutual_data[i*ic_data->HX_RX_NUM+j] = new_data;
+ }
+ else if(dsram_type == 2)
+ {
+ //Keep max data for 100 frame
+ if(mutual_data[i * ic_data->HX_RX_NUM + j] < new_data)
+ mutual_data[i * ic_data->HX_RX_NUM + j] = new_data;
+ }
+ else if(dsram_type == 3)
+ {
+ //Cal data for [N]-[N-1] frame
+ mutual_data_new[i * ic_data->HX_RX_NUM + j] = new_data;
+ mutual_data[i * ic_data->HX_RX_NUM + j] = mutual_data_new[i * ic_data->HX_RX_NUM + j] - mutual_data_old[i * ic_data->HX_RX_NUM + j];
+ }
+ index += 2;
+ }
+ }
+ if(dsram_type == 3)
+ {
+ memcpy(mutual_data_old,mutual_data_new,x_channel * y_channel * sizeof(int16_t)); //copy N data to N-1 array
+ }
+ diag_max_cnt++;
+ if(dsram_type == 1 || dsram_type == 3 )
+ {
+ queue_delayed_work(private_ts->himax_diag_wq, &private_ts->himax_diag_delay_wrok, 1/10*HZ);
+ }
+ else if(dsram_type == 4)
+ {
+ for(i = 0; i < x_channel * y_channel; i++)
+ {
+ memset(temp_buf, '\0', sizeof(temp_buf));
+ if(i == (x_channel * y_channel - 1))
+ snprintf(temp_buf, sizeof(temp_buf), "%4d\n\n", mutual_data[i]);
+ //I("%s :temp_buf = %s\n",__func__,temp_buf);
+ else if(i % x_channel == (x_channel - 1))
+ snprintf(temp_buf, sizeof(temp_buf), "%4d\n", mutual_data[i]);
+ else
+ snprintf(temp_buf, sizeof(temp_buf), "%4d\t", mutual_data[i]);
+ //I("%s :mutual_data[%d] = %d, temp_buf = %s\n",__func__, i, mutual_data[i], temp_buf);
+ strcat(write_buf, temp_buf);
+ }
+
+ //save raw data in file
+ if (!IS_ERR(diag_sram_fn))
+ {
+ I("%s create file and ready to write\n",__func__);
+ diag_sram_fn->f_op->write(diag_sram_fn, write_buf, sizeof(write_buf), &diag_sram_fn->f_pos);
+ write_counter++;
+ if(write_counter < write_max_count)
+ queue_delayed_work(private_ts->himax_diag_wq, &private_ts->himax_diag_delay_wrok, 1/10*HZ);
+ else
+ {
+ filp_close(diag_sram_fn,NULL);
+ write_counter = 0;
+ }
+ }
+ }
+ else if(dsram_type == 2)
+ {
+ if(diag_max_cnt > 100) //count for 100 frame
+ {
+ //Clear DSRAM flag
+ DSRAM_Flag = false;
+
+ //Enable ISR
+ himax_int_enable(private_ts->client->irq,1);
+
+ //=====================================
+ // test result command : 0x8002_0324 ==> 0x00
+ //=====================================
+ himax_diag_register_set(private_ts->client, 0x00);
+ }
+ else
+ {
+ queue_delayed_work(private_ts->himax_diag_wq, &private_ts->himax_diag_delay_wrok, 1/10*HZ);
+ }
+ }
+}
+
+static ssize_t himax_diag_write(struct file *filp, const char __user *buff, size_t len, loff_t *data)
+{
+ char messages[80] = {0};
+
+ uint8_t command[2] = {0x00, 0x00};
+ uint8_t receive[1];
+
+ /* 0: common , other: dsram*/
+ int storage_type = 0;
+ /* 1:IIR,2:DC,3:Bank,4:IIR2,5:IIR2_N,6:FIR2,7:Baseline,8:dump coord */
+ int rawdata_type = 0;
+
+ memset(receive, 0x00, sizeof(receive));
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(messages, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ I("%s:g_switch_mode = %d\n",__func__,g_switch_mode);
+
+ if (messages[1] == 0x0A)
+ {
+ g_diag_command =messages[0] - '0';
+ }
+ else
+ {
+ g_diag_command =(messages[0] - '0')*10 + (messages[1] - '0');
+ }
+
+ storage_type = himax_determin_diag_storage(g_diag_command);
+ rawdata_type = himax_determin_diag_rawdata(g_diag_command);
+
+ if(g_diag_command > 0 && rawdata_type == 0)
+ {
+ I("[Himax]g_diag_command=0x%x ,storage_type=%d, rawdata_type=%d! Maybe no support!\n"
+ ,g_diag_command,storage_type,rawdata_type);
+ g_diag_command = 0x00;
+ }
+ else
+ I("[Himax]g_diag_command=0x%x ,storage_type=%d, rawdata_type=%d\n",g_diag_command,storage_type,rawdata_type);
+
+ if (storage_type == 0 && rawdata_type > 0 && rawdata_type < 8)
+ {
+ I("%s,common\n",__func__);
+ if(DSRAM_Flag)
+ {
+ //1. Clear DSRAM flag
+ DSRAM_Flag = false;
+ //2. Stop DSRAM thread
+ cancel_delayed_work(&private_ts->himax_diag_delay_wrok);
+ //3. Enable ISR
+ himax_int_enable(private_ts->client->irq,1);
+
+ /*(4) FW leave sram and return to event stack*/
+ himax_return_event_stack(private_ts->client);
+ }
+
+ if(g_switch_mode == 2)
+ {
+ himax_idle_mode(private_ts->client,0);
+ g_switch_mode = himax_switch_mode(private_ts->client,0);
+ }
+
+ if(g_diag_command == 0x04)
+ {
+#if defined(HX_TP_PROC_2T2R)
+ command[0] = g_diag_command;
+#else
+ g_diag_command = 0x00;
+ command[0] = 0x00;
+#endif
+ }
+ else
+ command[0] = g_diag_command;
+ himax_diag_register_set(private_ts->client, command[0]);
+ }
+ else if (storage_type > 0 && storage_type < 8 && rawdata_type > 0 && rawdata_type < 8)
+ {
+ I("%s,dsram\n",__func__);
+
+ diag_max_cnt = 0;
+ memset(diag_mutual, 0x00, x_channel * y_channel * sizeof(int32_t)); //Set data 0 everytime
+
+ //0. set diag flag
+ if(DSRAM_Flag)
+ {
+ //(1) Clear DSRAM flag
+ DSRAM_Flag = false;
+
+ //(2) Stop DSRAM thread
+ cancel_delayed_work(&private_ts->himax_diag_delay_wrok);
+ //(3) Enable ISR
+ himax_int_enable(private_ts->client->irq,1);
+
+ /*(4) FW leave sram and return to event stack*/
+ himax_return_event_stack(private_ts->client);
+ }
+ /* close sorting if turn on*/
+ if(g_switch_mode == 2)
+ {
+ himax_idle_mode(private_ts->client,0);
+ g_switch_mode = himax_switch_mode(private_ts->client,0);
+ }
+
+ switch(rawdata_type)
+ {
+ case 1:
+ command[0] = 0x09; //IIR
+ break;
+ case 2:
+ command[0] = 0x0A; //RAWDATA
+ break;
+ case 7:
+ command[0] = 0x0B; //DC
+ break;
+ default:
+ command[0] = 0x00;
+ E("%s: Sram no support this type !\n",__func__);
+ break;
+ }
+ himax_diag_register_set(private_ts->client, command[0]);
+
+ //1. Disable ISR
+ himax_int_enable(private_ts->client->irq,0);
+
+ //Open file for save raw data log
+ if (storage_type == 4)
+ {
+ switch (rawdata_type)
+ {
+ case 1:
+ diag_sram_fn = filp_open(IIR_DUMP_FILE,O_CREAT | O_WRONLY,0);
+ break;
+ case 2:
+ diag_sram_fn = filp_open(DC_DUMP_FILE,O_CREAT | O_WRONLY,0);
+ break;
+ case 3:
+ diag_sram_fn = filp_open(BANK_DUMP_FILE,O_CREAT | O_WRONLY,0);
+ break;
+ default:
+ I("%s raw data type is not true. raw data type is %d \n",__func__, rawdata_type);
+ }
+ }
+
+ //2. Start DSRAM thread
+ queue_delayed_work(private_ts->himax_diag_wq, &private_ts->himax_diag_delay_wrok, 2*HZ/100);
+
+ I("%s: Start get raw data in DSRAM\n", __func__);
+ if (storage_type == 4)
+ msleep(6000);
+ //3. Set DSRAM flag
+ DSRAM_Flag = true;
+
+
+ }
+ else if(storage_type == 8)
+ {
+ I("Soritng mode!\n");
+
+ if(DSRAM_Flag)
+ {
+ //1. Clear DSRAM flag
+ DSRAM_Flag = false;
+ //2. Stop DSRAM thread
+ cancel_delayed_work(&private_ts->himax_diag_delay_wrok);
+ //3. Enable ISR
+ himax_int_enable(private_ts->client->irq,1);
+
+ /*(4) FW leave sram and return to event stack*/
+ himax_return_event_stack(private_ts->client);
+ }
+
+ himax_idle_mode(private_ts->client,1);
+ g_switch_mode = himax_switch_mode(private_ts->client,1);
+ if(g_switch_mode == 2)
+ {
+ if(rawdata_type == 1)
+ command[0] = 0x09; //IIR
+ else if(rawdata_type == 2)
+ command[0] = 0x0A; //DC
+ else if(rawdata_type == 7)
+ command[0] = 0x08; //BASLINE
+ else
+ {
+ command[0] = 0x00;
+ E("%s: Now Sorting Mode does not support this command=%d\n",__func__,g_diag_command);
+ }
+ himax_diag_register_set(private_ts->client, command[0]);
+ }
+
+ queue_delayed_work(private_ts->himax_diag_wq, &private_ts->himax_diag_delay_wrok, 2*HZ/100);
+ DSRAM_Flag = true;
+
+ }
+ else
+ {
+ //set diag flag
+ if(DSRAM_Flag)
+ {
+ I("return and cancel sram thread!\n");
+ //(1) Clear DSRAM flag
+ DSRAM_Flag = false;
+
+ //(2) Stop DSRAM thread
+ cancel_delayed_work(&private_ts->himax_diag_delay_wrok);
+ //(3) Enable ISR
+ himax_int_enable(private_ts->client->irq,1);
+
+ /*(4) FW leave sram and return to event stack*/
+ himax_return_event_stack(private_ts->client);
+ }
+
+ if(g_switch_mode == 2)
+ {
+ himax_idle_mode(private_ts->client,0);
+ g_switch_mode = himax_switch_mode(private_ts->client,0);
+ }
+
+ if(g_diag_command != 0x00)
+ {
+
+ E("[Himax]g_diag_command error!diag_command=0x%x so reset\n",g_diag_command);
+ command[0] = 0x00;
+ if(g_diag_command != 0x08)
+ g_diag_command = 0x00;
+ himax_diag_register_set(private_ts->client, command[0]);
+ }
+ else
+ {
+ command[0] = 0x00;
+ g_diag_command = 0x00;
+ himax_diag_register_set(private_ts->client, command[0]);
+ I("return to normal g_diag_command=0x%x\n",g_diag_command);
+ }
+ }
+ return len;
+}
+
+static struct file_operations himax_proc_diag_ops =
+{
+ .owner = THIS_MODULE,
+ .open = himax_diag_proc_open,
+ .read = seq_read,
+ .write = himax_diag_write,
+};
+#endif
+
+#ifdef HX_TP_PROC_RESET
+static ssize_t himax_reset_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ char buf_tmp[12];
+
+ if (len >= 12)
+ {
+ I("%s: no command exceeds 12 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf_tmp, buff, len))
+ {
+ return -EFAULT;
+ }
+#ifdef HX_RST_PIN_FUNC
+ if (buf_tmp[0] == '1')
+ himax_ic_reset(false,false);
+ else if (buf_tmp[0] == '2')
+ himax_ic_reset(false,true);
+ else if (buf_tmp[0] == '3')
+ himax_ic_reset(true,false);
+ else if (buf_tmp[0] == '4')
+ himax_ic_reset(true,true);
+ //else if (buf_tmp[0] == '5')
+ // ESD_HW_REST();
+#endif
+ return len;
+}
+
+static struct file_operations himax_proc_reset_ops =
+{
+ .owner = THIS_MODULE,
+ .write = himax_reset_write,
+};
+#endif
+
+#ifdef HX_TP_PROC_DEBUG
+static ssize_t himax_debug_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ size_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ if (debug_level_cmd == 't')
+ {
+ if (fw_update_complete)
+ {
+ count += sprintf(temp_buf, "FW Update Complete ");
+ }
+ else
+ {
+ count += sprintf(temp_buf, "FW Update Fail ");
+ }
+ }
+ else if (debug_level_cmd == 'h')
+ {
+ if (handshaking_result == 0)
+ {
+ count += sprintf(temp_buf, "Handshaking Result = %d (MCU Running)\n",handshaking_result);
+ }
+ else if (handshaking_result == 1)
+ {
+ count += sprintf(temp_buf, "Handshaking Result = %d (MCU Stop)\n",handshaking_result);
+ }
+ else if (handshaking_result == 2)
+ {
+ count += sprintf(temp_buf, "Handshaking Result = %d (I2C Error)\n",handshaking_result);
+ }
+ else
+ {
+ count += sprintf(temp_buf, "Handshaking Result = error \n");
+ }
+ }
+ else if (debug_level_cmd == 'v')
+ {
+ count += sprintf(temp_buf + count, "FW_VER = 0x%2.2X \n",ic_data->vendor_fw_ver);
+
+ if(IC_TYPE < 8)
+ count += sprintf(temp_buf + count, "CONFIG_VER = 0x%2.2X \n",ic_data->vendor_config_ver);
+ else
+ {
+ count += sprintf(temp_buf + count, "TOUCH_VER = 0x%2.2X \n",ic_data->vendor_touch_cfg_ver);
+ count += sprintf(temp_buf + count, "DISPLAY_VER = 0x%2.2X \n",ic_data->vendor_display_cfg_ver);
+ }
+ if(ic_data->vendor_cid_maj_ver < 0 && ic_data->vendor_cid_min_ver < 0)
+ count += sprintf(temp_buf + count, "CID_VER = NULL\n");
+ else
+ count += sprintf(temp_buf + count, "CID_VER = 0x%2.2X \n",(ic_data->vendor_cid_maj_ver << 8 | ic_data->vendor_cid_min_ver));
+
+ if(ic_data->vendor_panel_ver < 0)
+ count += sprintf(temp_buf + count, "PANEL_VER = NULL\n");
+ else
+ count += sprintf(temp_buf + count, "PANEL_VER = 0x%2.2X \n",ic_data->vendor_panel_ver);
+
+ count += sprintf(temp_buf + count, "\n");
+
+ count += sprintf(temp_buf + count, "Himax Touch Driver Version:\n");
+ count += sprintf(temp_buf + count, "%s \n", HIMAX_DRIVER_VER);
+ }
+ else if (debug_level_cmd == 'd')
+ {
+ count += sprintf(temp_buf + count, "Himax Touch IC Information :\n");
+ switch(IC_TYPE)
+ {
+ case HX_85XX_D_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX852xD\n");
+ break;
+ case HX_85XX_E_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX852xE\n");
+ break;
+ case HX_85XX_ES_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX852xES\n");
+ break;
+ case HX_85XX_F_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX852xF\n");
+ break;
+ case HX_83100A_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83100A\n");
+ break;
+ case HX_83102A_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83102A\n");
+ break;
+ case HX_83102B_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83102B\n");
+ break;
+ case HX_83110A_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83110A\n");
+ break;
+ case HX_83110B_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83110B\n");
+ break;
+ case HX_83111B_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83111B\n");
+ break;
+ case HX_83112A_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83112A\n");
+ break;
+ case HX_83112B_SERIES_PWON:
+ count += sprintf(temp_buf + count, "IC Type : HX83112B\n");
+ break;
+ default:
+ count += sprintf(temp_buf + count, "IC Type error.\n");
+ }
+ switch(IC_CHECKSUM)
+ {
+ case HX_TP_BIN_CHECKSUM_SW:
+ count += sprintf(temp_buf + count, "IC Checksum : SW\n");
+ break;
+ case HX_TP_BIN_CHECKSUM_HW:
+ count += sprintf(temp_buf + count, "IC Checksum : HW\n");
+ break;
+ case HX_TP_BIN_CHECKSUM_CRC:
+ count += sprintf(temp_buf + count, "IC Checksum : CRC\n");
+ break;
+ default:
+ count += sprintf(temp_buf + count, "IC Checksum error.\n");
+ }
+
+ if (ic_data->HX_INT_IS_EDGE)
+ {
+ count += sprintf(temp_buf + count, "Driver register Interrupt : EDGE TIRGGER\n");
+ }
+ else
+ {
+ count += sprintf(temp_buf + count, "Driver register Interrupt : LEVEL TRIGGER\n");
+ }
+ if (private_ts->protocol_type == PROTOCOL_TYPE_A)
+ {
+ count += sprintf(temp_buf + count, "Protocol : TYPE_A\n");
+ }
+ else
+ {
+ count += sprintf(temp_buf + count, "Protocol : TYPE_B\n");
+ }
+ count += sprintf(temp_buf + count, "RX Num : %d\n",ic_data->HX_RX_NUM);
+ count += sprintf(temp_buf + count, "TX Num : %d\n",ic_data->HX_TX_NUM);
+ count += sprintf(temp_buf + count, "BT Num : %d\n",ic_data->HX_BT_NUM);
+ count += sprintf(temp_buf + count, "X Resolution : %d\n",ic_data->HX_X_RES);
+ count += sprintf(temp_buf + count, "Y Resolution : %d\n",ic_data->HX_Y_RES);
+ count += sprintf(temp_buf + count, "Max Point : %d\n",ic_data->HX_MAX_PT);
+ count += sprintf(temp_buf + count, "XY reverse : %d\n",ic_data->HX_XY_REVERSE);
+#ifdef HX_TP_PROC_2T2R
+ if(Is_2T2R)
+ {
+ count += sprintf(temp_buf + count, "2T2R panel\n");
+ count += sprintf(temp_buf + count, "RX Num_2 : %d\n",HX_RX_NUM_2);
+ count += sprintf(temp_buf + count, "TX Num_2 : %d\n",HX_TX_NUM_2);
+ }
+#endif
+ }
+ else if (debug_level_cmd == 'i')
+ {
+ if(himax_read_i2c_status(private_ts->client))
+ count += sprintf(temp_buf + count, "I2C communication is bad.\n");
+ else
+ count += sprintf(temp_buf + count, "I2C communication is good.\n");
+ }
+ else if (debug_level_cmd == 'n')
+ {
+ if(himax_read_ic_trigger_type(private_ts->client) == 1) //Edgd = 1, Level = 0
+ count += sprintf(temp_buf + count, "IC Interrupt type is edge trigger.\n");
+ else if(himax_read_ic_trigger_type(private_ts->client) == 0)
+ count += sprintf(temp_buf + count, "IC Interrupt type is level trigger.\n");
+ else
+ count += sprintf(temp_buf + count, "Unkown IC trigger type.\n");
+ if (ic_data->HX_INT_IS_EDGE)
+ count += sprintf(temp_buf + count, "Driver register Interrupt : EDGE TIRGGER\n");
+ else
+ count += sprintf(temp_buf + count, "Driver register Interrupt : LEVEL TRIGGER\n");
+ }
+#if defined(HX_CHIP_STATUS_MONITOR)
+ else if(debug_level_cmd=='c')
+ {
+ count += sprintf(temp_buf + count, "chip_monitor :%d\n", g_chip_monitor_data->HX_CHIP_MONITOR_EN);
+ }
+#endif
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return count;
+}
+
+static ssize_t himax_debug_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct file* filp = NULL;
+ mm_segment_t oldfs;
+ int result = 0;
+ char fileName[128];
+ char buf[80] = {0};
+ int fw_type = 0;
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID101 and modify node of manual update 20171121 begin*/
+ struct inode *inode;
+ loff_t file_len = 0;
+/*[Arima_7947][allen_yu] 20171121 end*/
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ if ( buf[0] == 'h') //handshaking
+ {
+ debug_level_cmd = buf[0];
+
+ himax_int_enable(private_ts->client->irq,0);
+
+ handshaking_result = himax_hand_shaking(private_ts->client); //0:Running, 1:Stop, 2:I2C Fail
+
+ himax_int_enable(private_ts->client->irq,1);
+
+ return len;
+ }
+
+ else if ( buf[0] == 'v') //firmware version
+ {
+ himax_int_enable(private_ts->client->irq,0);
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#endif
+ debug_level_cmd = buf[0];
+ himax_read_FW_ver(private_ts->client);
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(true,false);
+#endif
+ himax_int_enable(private_ts->client->irq,1);
+ //himax_check_chip_version();
+ return len;
+ }
+
+ else if ( buf[0] == 'd') //ic information
+ {
+ debug_level_cmd = buf[0];
+ return len;
+ }
+
+ else if (buf[0] == 't')
+ {
+
+ himax_int_enable(private_ts->client->irq,0);
+
+#ifdef HX_CHIP_STATUS_MONITOR
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ cancel_delayed_work_sync(&private_ts->himax_chip_monitor);
+#endif
+
+ debug_level_cmd = buf[0];
+ fw_update_complete = false;
+
+ memset(fileName, 0, 128);
+ // parse the file name
+ snprintf(fileName, len-2, "%s", &buf[2]);
+ I("%s: upgrade from file(%s) start!\n", __func__, fileName);
+ // open file
+ filp = filp_open(fileName, O_RDONLY, 0);
+ if (IS_ERR(filp))
+ {
+ E("%s: open firmware file failed\n", __func__);
+ goto firmware_upgrade_done;
+ //return len;
+ }
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID101 and modify node of manual update 20171121 begin*/
+ inode = filp->f_inode;
+ file_len = inode->i_size;
+/*[Arima_7947][allen_yu] 20171121 end*/
+ oldfs = get_fs();
+ set_fs(get_ds());
+
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID101 and modify node of manual update 20171121 begin*/
+ // read the latest firmware binary file
+ result=vfs_read(filp,upgrade_fw,file_len, &filp->f_pos);
+ if (result < 0)
+ {
+ E("%s: read firmware file failed\n", __func__);
+ goto firmware_upgrade_done;
+ //return len;
+ }
+/*[Arima_7947][allen_yu] 20171121 end*/
+
+ set_fs(oldfs);
+ filp_close(filp, NULL);
+
+ I("%s: FW image,len %d: %02X, %02X, %02X, %02X\n", __func__, result, upgrade_fw[0], upgrade_fw[1], upgrade_fw[2], upgrade_fw[3]);
+
+ if (result > 0)
+ {
+ fw_type = result/1024;
+ // start to upgrade
+ himax_int_enable(private_ts->client->irq,0);
+ I("Now FW size is : %dk\n",fw_type);
+ switch(fw_type)
+ {
+ case 32:
+ if (fts_ctpm_fw_upgrade_with_sys_fs_32k(private_ts->client,upgrade_fw, result, false) == 0)
+ {
+ E("%s: TP upgrade error, line: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ }
+ else
+ {
+ I("%s: TP upgrade OK, line: %d\n", __func__, __LINE__);
+ fw_update_complete = true;
+ }
+ break;
+ case 60:
+ if (fts_ctpm_fw_upgrade_with_sys_fs_60k(private_ts->client,upgrade_fw, result, false) == 0)
+ {
+ E("%s: TP upgrade error, line: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ }
+ else
+ {
+ I("%s: TP upgrade OK, line: %d\n", __func__, __LINE__);
+ fw_update_complete = true;
+ }
+ break;
+ case 64:
+ if (fts_ctpm_fw_upgrade_with_sys_fs_64k(private_ts->client,upgrade_fw, result, false) == 0)
+ {
+ E("%s: TP upgrade error, line: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ }
+ else
+ {
+ I("%s: TP upgrade OK, line: %d\n", __func__, __LINE__);
+ fw_update_complete = true;
+ }
+ break;
+ case 124:
+ if (fts_ctpm_fw_upgrade_with_sys_fs_124k(private_ts->client,upgrade_fw, result, false) == 0)
+ {
+ E("%s: TP upgrade error, line: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ }
+ else
+ {
+ I("%s: TP upgrade OK, line: %d\n", __func__, __LINE__);
+ fw_update_complete = true;
+ }
+ break;
+ case 128:
+ if (fts_ctpm_fw_upgrade_with_sys_fs_128k(private_ts->client,upgrade_fw, result, false) == 0)
+ {
+ E("%s: TP upgrade error, line: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ }
+ else
+ {
+ I("%s: TP upgrade OK, line: %d\n", __func__, __LINE__);
+ fw_update_complete = true;
+ }
+ break;
+ default:
+ E("%s: Flash command fail: %d\n", __func__, __LINE__);
+ fw_update_complete = false;
+ break;
+ }
+ goto firmware_upgrade_done;
+ //return count;
+ }
+ }
+ else if (buf[0] == 'i' && buf[1] == '2' && buf[2] == 'c') //i2c commutation
+ {
+ debug_level_cmd = 'i';
+ return len;
+ }
+
+ else if (buf[0] == 'i' && buf[1] == 'n' && buf[2] == 't') //INT trigger
+ {
+ debug_level_cmd = 'n';
+ return len;
+ }
+#if defined(HX_CHIP_STATUS_MONITOR)
+ else if(buf[0] == 'c')
+ {
+ debug_level_cmd = buf[0];
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 0;
+ cancel_delayed_work_sync(&private_ts->himax_chip_monitor);
+ return len;
+ }
+#endif
+#ifdef HX_ZERO_FLASH
+ else if(buf[0] == 'z')
+ {
+ himax_0f_operation_check();
+ return len;
+ }
+ else if(buf[0] == 'p')
+ {
+ I("NOW debug echo r!\n");
+ //himax_program_sram();
+ private_ts->himax_0f_update_wq = create_singlethread_workqueue("HMX_update_0f_reuqest_write");
+ if (!private_ts->himax_0f_update_wq)
+ E(" allocate syn_update_wq failed\n");
+
+ INIT_DELAYED_WORK(&private_ts->work_0f_update, himax_0f_operation);
+ queue_delayed_work(private_ts->himax_0f_update_wq, &private_ts->work_0f_update, msecs_to_jiffies(100));
+ return len;
+ }
+ else if(buf[0] == 'x')
+ {
+ himax_sys_reset();
+ return len;
+ }
+#endif
+ /* others,do nothing */
+ else
+ {
+ debug_level_cmd = 0;
+ return len;
+ }
+
+firmware_upgrade_done:
+
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(true,false);
+#endif
+ himax_int_enable(private_ts->client->irq,1);
+
+#ifdef HX_CHIP_STATUS_MONITOR
+ g_chip_monitor_data->HX_CHIP_POLLING_COUNT = 0;
+ g_chip_monitor_data->HX_CHIP_MONITOR_EN = 1;
+ queue_delayed_work(private_ts->himax_chip_monitor_wq, &private_ts->himax_chip_monitor, g_chip_monitor_data->HX_POLLING_TIMES*HZ);
+#endif
+
+ //todo himax_chip->tp_firmware_upgrade_proceed = 0;
+ //todo himax_chip->suspend_state = 0;
+ //todo enable_irq(himax_chip->irq);
+ return len;
+}
+
+static struct file_operations himax_proc_debug_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_debug_read,
+ .write = himax_debug_write,
+};
+
+static ssize_t himax_proc_FW_debug_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int ret = 0;
+ uint8_t loop_i = 0;
+ uint8_t tmp_data[64];
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ cmd_set[0] = 0x01;
+ if(himax_read_FW_status(cmd_set, tmp_data) == NO_ERR)
+ {
+ ret += sprintf(temp_buf + ret, "0x%02X%02X%02X%02X :\t",cmd_set[5],cmd_set[4],cmd_set[3],cmd_set[2]);
+ for (loop_i = 0; loop_i < cmd_set[1]; loop_i++)
+ {
+ ret += sprintf(temp_buf+ ret, "%5d\t", tmp_data[loop_i]);
+ }
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+ cmd_set[0] = 0x02;
+ if(himax_read_FW_status(cmd_set, tmp_data) == NO_ERR)
+ {
+ for (loop_i = 0; loop_i < cmd_set[1]; loop_i = loop_i + 2)
+ {
+ if ((loop_i % 16) == 0)
+ ret += sprintf(temp_buf + ret, "0x%02X%02X%02X%02X :\t",
+ cmd_set[5],cmd_set[4],cmd_set[3]+(((cmd_set[2]+ loop_i)>>8)&0xFF), (cmd_set[2] + loop_i)&0xFF);
+ ret += sprintf(temp_buf + ret, "%5d\t", tmp_data[loop_i] + (tmp_data[loop_i + 1] << 8));
+ if ((loop_i % 16) == 14)
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+
+ }
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+static struct file_operations himax_proc_fw_debug_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_proc_FW_debug_read,
+};
+
+static ssize_t himax_proc_DD_debug_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int ret = 0;
+ uint8_t tmp_data[64];
+ uint8_t loop_i = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ if(mutual_set_flag == 1)
+ {
+ if(himax_read_DD_status(cmd_set, tmp_data) == NO_ERR)
+ {
+ for (loop_i = 0; loop_i < cmd_set[0]; loop_i++)
+ {
+ if ((loop_i % 8) == 0)
+ ret += sprintf(temp_buf + ret, "0x%02X : ", loop_i);
+ ret += sprintf(temp_buf + ret, "0x%02X ", tmp_data[loop_i]);
+ if ((loop_i % 8) == 7)
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+ }
+ }
+ //else
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+static ssize_t himax_proc_DD_debug_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ uint8_t i = 0;
+ uint8_t cnt = 2;
+ unsigned long result = 0;
+ char buf_tmp[20];
+ char buf_tmp2[4];
+
+ if (len >= 20)
+ {
+ I("%s: no command exceeds 20 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf_tmp, buff, len))
+ {
+ return -EFAULT;
+ }
+ memset(buf_tmp2, 0x0, sizeof(buf_tmp2));
+
+ if (buf_tmp[2] == 'x' && buf_tmp[6] == 'x' && buf_tmp[10] == 'x')
+ {
+ mutual_set_flag = 1;
+ for (i = 3; i < 12; i = i + 4)
+ {
+ memcpy(buf_tmp2, buf_tmp + i, 2);
+ if (!kstrtoul(buf_tmp2, 16, &result))
+ cmd_set[cnt] = (uint8_t)result;
+ else
+ I("String to oul is fail in cnt = %d, buf_tmp2 = %s",cnt, buf_tmp2);
+ cnt--;
+ }
+ I("cmd_set[2] = %02X, cmd_set[1] = %02X, cmd_set[0] = %02X\n",cmd_set[2],cmd_set[1],cmd_set[0]);
+ }
+ else
+ mutual_set_flag = 0;
+
+ return len;
+}
+
+static struct file_operations himax_proc_dd_debug_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_proc_DD_debug_read,
+ .write = himax_proc_DD_debug_write,
+};
+
+#endif
+
+#ifdef HX_TP_PROC_FLASH_DUMP
+
+uint8_t getFlashCommand(void)
+{
+ return flash_command;
+}
+
+static uint8_t getFlashDumpProgress(void)
+{
+ return flash_progress;
+}
+
+static uint8_t getFlashDumpComplete(void)
+{
+ return flash_dump_complete;
+}
+
+static uint8_t getFlashDumpFail(void)
+{
+ return flash_dump_fail;
+}
+
+uint8_t getSysOperation(void)
+{
+ return sys_operation;
+}
+
+static uint8_t getFlashReadStep(void)
+{
+ return flash_read_step;
+}
+
+bool getFlashDumpGoing(void)
+{
+ return flash_dump_going;
+}
+
+void setFlashBuffer(void)
+{
+ flash_buffer = kzalloc(Flash_Size * sizeof(uint8_t), GFP_KERNEL);
+ memset(flash_buffer,0x00,Flash_Size);
+}
+
+void setSysOperation(uint8_t operation)
+{
+ sys_operation = operation;
+}
+
+void setFlashDumpProgress(uint8_t progress)
+{
+ flash_progress = progress;
+ //I("setFlashDumpProgress : progress = %d ,flash_progress = %d \n",progress,flash_progress);
+}
+
+void setFlashDumpComplete(uint8_t status)
+{
+ flash_dump_complete = status;
+}
+
+void setFlashDumpFail(uint8_t fail)
+{
+ flash_dump_fail = fail;
+}
+
+static void setFlashCommand(uint8_t command)
+{
+ flash_command = command;
+}
+
+static void setFlashReadStep(uint8_t step)
+{
+ flash_read_step = step;
+}
+
+void setFlashDumpGoing(bool going)
+{
+ flash_dump_going = going;
+}
+
+static ssize_t himax_proc_flash_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int ret = 0;
+ int loop_i;
+ uint8_t local_flash_read_step=0;
+ uint8_t local_flash_complete = 0;
+ uint8_t local_flash_progress = 0;
+ uint8_t local_flash_command = 0;
+ uint8_t local_flash_fail = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ local_flash_complete = getFlashDumpComplete();
+ local_flash_progress = getFlashDumpProgress();
+ local_flash_command = getFlashCommand();
+ local_flash_fail = getFlashDumpFail();
+
+ I("flash_progress = %d \n",local_flash_progress);
+ if(!HX_PROC_SEND_FLAG)
+ {
+ if (local_flash_fail)
+ {
+ ret += sprintf(temp_buf + ret, "FlashStart:Fail \n");
+ ret += sprintf(temp_buf + ret, "FlashEnd");
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ return ret;
+ }
+
+ if (!local_flash_complete)
+ {
+ ret += sprintf(temp_buf + ret, "FlashStart:Ongoing:0x%2.2x \n",flash_progress);
+ ret += sprintf(temp_buf + ret, "FlashEnd");
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ return ret;
+ }
+
+ if (local_flash_command == 1 && local_flash_complete)
+ {
+ ret += sprintf(temp_buf + ret, "FlashStart:Complete \n");
+ ret += sprintf(temp_buf + ret, "FlashEnd");
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ return ret;
+ }
+
+ if (local_flash_command == 3 && local_flash_complete)
+ {
+ ret += sprintf(temp_buf + ret, "FlashStart: \n");
+ for(loop_i = 0; loop_i < 128; loop_i++)
+ {
+ ret += sprintf(temp_buf + ret, "x%2.2x", flash_buffer[loop_i]);
+ if ((loop_i % 16) == 15)
+ {
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+ }
+ ret += sprintf(temp_buf + ret, "FlashEnd");
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ return ret;
+ }
+
+ //flash command == 0 , report the data
+ local_flash_read_step = getFlashReadStep();
+
+ ret += sprintf(temp_buf + ret, "FlashStart:%2.2x \n",local_flash_read_step);
+
+ for (loop_i = 0; loop_i < 1024; loop_i++)
+ {
+ ret += sprintf(temp_buf + ret, "x%2.2X", flash_buffer[local_flash_read_step*1024 + loop_i]);
+
+ if ((loop_i % 16) == 15)
+ {
+ ret += sprintf(temp_buf + ret, "\n");
+ }
+ }
+
+ ret += sprintf(temp_buf + ret, "FlashEnd");
+ ret += sprintf(temp_buf + ret, "\n");
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+static ssize_t himax_proc_flash_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ char buf_tmp[6];
+ unsigned long result = 0;
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+ memset(buf_tmp, 0x0, sizeof(buf_tmp));
+
+ I("%s: buf = %s\n", __func__, buf);
+
+ if (getSysOperation() == 1)
+ {
+ E("%s: PROC is busy , return!\n", __func__);
+ return len;
+ }
+
+ if (buf[0] == '0')
+ {
+ setFlashCommand(0);
+ if (buf[1] == ':' && buf[2] == 'x')
+ {
+ memcpy(buf_tmp, buf + 3, 2);
+ I("%s: read_Step = %s\n", __func__, buf_tmp);
+ if (!kstrtoul(buf_tmp, 16, &result))
+ {
+ I("%s: read_Step = %lu \n", __func__, result);
+ setFlashReadStep(result);
+ }
+ }
+ }
+ else if (buf[0] == '1')// 1_32,1_60,1_64,1_24,1_28 for flash size 32k,60k,64k,124k,128k
+ {
+ setSysOperation(1);
+ setFlashCommand(1);
+ setFlashDumpProgress(0);
+ setFlashDumpComplete(0);
+ setFlashDumpFail(0);
+ if ((buf[1] == '_' ) && (buf[2] == '3' ) && (buf[3] == '2' ))
+ {
+ Flash_Size = FW_SIZE_32k;
+ }
+ else if ((buf[1] == '_' ) && (buf[2] == '6' ))
+ {
+ if (buf[3] == '0')
+ {
+ Flash_Size = FW_SIZE_60k;
+ }
+ else if (buf[3] == '4')
+ {
+ Flash_Size = FW_SIZE_64k;
+ }
+ }
+ else if ((buf[1] == '_' ) && (buf[2] == '2' ))
+ {
+ if (buf[3] == '4')
+ {
+ Flash_Size = FW_SIZE_124k;
+ }
+ else if (buf[3] == '8')
+ {
+ Flash_Size = FW_SIZE_128k;
+ }
+ }
+ queue_work(private_ts->flash_wq, &private_ts->flash_work);
+ }
+ else if (buf[0] == '2') // 2_32,2_60,2_64,2_24,2_28 for flash size 32k,60k,64k,124k,128k
+ {
+ setSysOperation(1);
+ setFlashCommand(2);
+ setFlashDumpProgress(0);
+ setFlashDumpComplete(0);
+ setFlashDumpFail(0);
+ if ((buf[1] == '_' ) && (buf[2] == '3' ) && (buf[3] == '2' ))
+ {
+ Flash_Size = FW_SIZE_32k;
+ }
+ else if ((buf[1] == '_' ) && (buf[2] == '6' ))
+ {
+ if (buf[3] == '0')
+ {
+ Flash_Size = FW_SIZE_60k;
+ }
+ else if (buf[3] == '4')
+ {
+ Flash_Size = FW_SIZE_64k;
+ }
+ }
+ else if ((buf[1] == '_' ) && (buf[2] == '2' ))
+ {
+ if (buf[3] == '4')
+ {
+ Flash_Size = FW_SIZE_124k;
+ }
+ else if (buf[3] == '8')
+ {
+ Flash_Size = FW_SIZE_128k;
+ }
+ }
+ queue_work(private_ts->flash_wq, &private_ts->flash_work);
+ }
+ return len;
+}
+
+static struct file_operations himax_proc_flash_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_proc_flash_read,
+ .write = himax_proc_flash_write,
+};
+
+void himax_ts_flash_func(void)
+{
+ uint8_t local_flash_command = 0;
+
+ himax_int_enable(private_ts->client->irq,0);
+ setFlashDumpGoing(true);
+
+ //sector = getFlashDumpSector();
+ //page = getFlashDumpPage();
+
+ local_flash_command = getFlashCommand();
+
+ msleep(100);
+
+ I("%s: local_flash_command = %d enter.\n", __func__,local_flash_command);
+
+ if ((local_flash_command == 1 || local_flash_command == 2)|| (local_flash_command==0x0F))
+ {
+ himax_flash_dump_func(private_ts->client, local_flash_command,Flash_Size, flash_buffer);
+ }
+
+ I("Complete~~~~~~~~~~~~~~~~~~~~~~~\n");
+
+ if (local_flash_command == 2)
+ {
+ struct file *fn;
+
+ fn = filp_open(FLASH_DUMP_FILE,O_CREAT | O_WRONLY,0);
+ if (!IS_ERR(fn))
+ {
+ I("%s create file and ready to write\n",__func__);
+ fn->f_op->write(fn,flash_buffer,Flash_Size*sizeof(uint8_t),&fn->f_pos);
+ filp_close(fn,NULL);
+ }
+ }
+
+ himax_int_enable(private_ts->client->irq,1);
+ setFlashDumpGoing(false);
+
+ setFlashDumpComplete(1);
+ setSysOperation(0);
+ return;
+
+ /* Flash_Dump_i2c_transfer_error:
+
+ himax_int_enable(private_ts->client->irq,1);
+ setFlashDumpGoing(false);
+ setFlashDumpComplete(0);
+ setFlashDumpFail(1);
+ setSysOperation(0);
+ return;
+ */
+}
+
+#endif
+
+#ifdef HX_TP_PROC_SELF_TEST
+static ssize_t himax_self_test_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int val=0x00;
+ int ret = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+ I("%s: enter, %d \n", __func__, __LINE__);
+ if(!HX_PROC_SEND_FLAG)
+ {
+ himax_int_enable(private_ts->client->irq,0);//disable irq
+ g_self_test_entered = 1;
+ val = himax_chip_self_test(private_ts->client);
+#ifdef HX_ESD_RECOVERY
+ HX_ESD_RESET_ACTIVATE = 1;
+#endif
+ himax_int_enable(private_ts->client->irq,1);//enable irq
+
+ if (val == 0x01)
+ {
+ ret += sprintf(temp_buf + ret, "Self_Test Pass\n");
+ }
+ else
+ {
+ ret += sprintf(temp_buf + ret, "Self_Test Fail\n");
+ }
+ g_self_test_entered = 0;
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+/*
+static ssize_t himax_chip_self_test_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t count)
+{
+ char buf_tmp[2];
+ unsigned long result = 0;
+
+ memset(buf_tmp, 0x0, sizeof(buf_tmp));
+ memcpy(buf_tmp, buf, 2);
+ if(!kstrtoul(buf_tmp, 16, &result))
+ {
+ sel_type = (uint8_t)result;
+ }
+ I("sel_type = %x \r\n", sel_type);
+ return count;
+}
+*/
+
+static struct file_operations himax_proc_self_test_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_self_test_read,
+};
+#endif
+
+#ifdef HX_TP_PROC_SENSE_ON_OFF
+static ssize_t himax_sense_on_off_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ if(buf[0] == '0')
+ {
+ himax_sense_off(private_ts->client);
+ I("Sense off \n");
+ }
+ else if(buf[0] == '1')
+ {
+ if(buf[1] == 's')
+ {
+ himax_sense_on(private_ts->client, 0x00);
+ I("Sense on re-map on, run sram \n");
+ }
+ else
+ {
+ himax_sense_on(private_ts->client, 0x01);
+ I("Sense on re-map off, run flash \n");
+ }
+ }
+ else
+ {
+ I("Do nothing \n");
+ }
+ return len;
+}
+
+static struct file_operations himax_proc_sense_on_off_ops =
+{
+ .owner = THIS_MODULE,
+ .write = himax_sense_on_off_write,
+};
+#endif
+
+#ifdef HX_HIGH_SENSE
+static ssize_t himax_HSEN_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ size_t count = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ count = snprintf(temp_buf, PAGE_SIZE, "%d\n", ts->HSEN_enable);
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return count;
+}
+
+static ssize_t himax_HSEN_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ char buf[80] = {0};
+
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ if (buf[0] == '0')
+ {
+ ts->HSEN_enable = 0;
+ }
+ else if (buf[0] == '1')
+ {
+ ts->HSEN_enable = 1;
+ }
+ else
+ return -EINVAL;
+
+ himax_set_HSEN_enable(ts->client, ts->HSEN_enable, ts->suspended);
+
+ I("%s: HSEN_enable = %d.\n", __func__, ts->HSEN_enable);
+
+ return len;
+}
+
+static struct file_operations himax_proc_HSEN_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_HSEN_read,
+ .write = himax_HSEN_write,
+};
+#endif
+
+#ifdef HX_SMART_WAKEUP
+static ssize_t himax_SMWP_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ size_t count = 0;
+ struct himax_ts_data *ts = private_ts;
+
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ if(!HX_PROC_SEND_FLAG)
+ {
+ count = snprintf(temp_buf, PAGE_SIZE, "%d\n", ts->SMWP_enable);
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+
+ return count;
+}
+
+static ssize_t himax_SMWP_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+
+ if (buf[0] == '0')
+ {
+ ts->SMWP_enable = 0;
+ }
+ else if (buf[0] == '1')
+ {
+ ts->SMWP_enable = 1;
+ }
+ else
+ return -EINVAL;
+
+ himax_set_SMWP_enable(ts->client, ts->SMWP_enable, ts->suspended);
+
+ HX_SMWP_EN = ts->SMWP_enable;
+ I("%s: SMART_WAKEUP_enable = %d.\n", __func__, HX_SMWP_EN);
+
+ return len;
+}
+
+static struct file_operations himax_proc_SMWP_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_SMWP_read,
+ .write = himax_SMWP_write,
+};
+
+static ssize_t himax_GESTURE_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ int i =0;
+ int ret = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+ if(!HX_PROC_SEND_FLAG)
+ {
+ for(i=0; i<16; i++)
+ ret += sprintf(temp_buf + ret, "ges_en[%d]=%d \n",i,ts->gesture_cust_en[i]);
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG = 1;
+ }
+ else
+ {
+ HX_PROC_SEND_FLAG = 0;
+ ret = 0;
+ }
+ return ret;
+}
+
+static ssize_t himax_GESTURE_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ struct himax_ts_data *ts = private_ts;
+ int i =0;
+ char buf[80] = {0};
+
+ if (len >= 80)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ I("himax_GESTURE_store= %s \n",buf);
+ for (i=0; i<16; i++)
+ {
+ if (buf[i] == '0')
+ ts->gesture_cust_en[i]= 0;
+ else if (buf[i] == '1')
+ ts->gesture_cust_en[i]= 1;
+ else
+ ts->gesture_cust_en[i]= 0;
+ I("gesture en[%d]=%d \n", i, ts->gesture_cust_en[i]);
+ }
+ return len;
+}
+
+static struct file_operations himax_proc_Gesture_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_GESTURE_read,
+ .write = himax_GESTURE_write,
+};
+#endif
+
+#ifdef HX_ESD_RECOVERY
+static ssize_t himax_esd_cnt_read(struct file *file, char *buf,
+ size_t len, loff_t *pos)
+{
+ int ret = 0;
+ char *temp_buf;
+
+ temp_buf = kzalloc(len,GFP_KERNEL);
+
+ I("%s: enter, %d \n", __func__, __LINE__);
+ if(!HX_PROC_SEND_FLAG)
+ {
+ ret += sprintf(temp_buf + ret, "EB_cnt = %d, EC_cnt = %d, ED_cnt = %d\n",hx_EB_event_flag, hx_EC_event_flag, hx_ED_event_flag);
+ if(copy_to_user(buf, temp_buf, len))
+ I("%s,here:%d\n",__func__,__LINE__);
+ kfree(temp_buf);
+ HX_PROC_SEND_FLAG=1;
+ }
+ else
+ HX_PROC_SEND_FLAG=0;
+ return ret;
+}
+
+static ssize_t himax_esd_cnt_write(struct file *file, const char *buff,
+ size_t len, loff_t *pos)
+{
+ int i =0;
+ char buf[12] = {0};
+
+ if (len >= 12)
+ {
+ I("%s: no command exceeds 80 chars.\n", __func__);
+ return -EFAULT;
+ }
+ if (copy_from_user(buf, buff, len))
+ {
+ return -EFAULT;
+ }
+
+ I("Clear ESD Flag \n");
+ if (buf[i] == '0')
+ {
+ hx_EB_event_flag = 0;
+ hx_EC_event_flag = 0;
+ hx_ED_event_flag = 0;
+ }
+
+ return len;
+}
+
+static struct file_operations himax_proc_esd_cnt_ops =
+{
+ .owner = THIS_MODULE,
+ .read = himax_esd_cnt_read,
+ .write = himax_esd_cnt_write,
+};
+#endif
+
+int himax_touch_proc_init(void)
+{
+ himax_touch_proc_dir = proc_mkdir( HIMAX_PROC_TOUCH_FOLDER, NULL);
+ if (himax_touch_proc_dir == NULL)
+ {
+ E(" %s: himax_touch_proc_dir file create failed!\n", __func__);
+ return -ENOMEM;
+ }
+
+ himax_proc_debug_level_file = proc_create(HIMAX_PROC_DEBUG_LEVEL_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_debug_level_ops);
+ if (himax_proc_debug_level_file == NULL)
+ {
+ E(" %s: proc debug_level file create failed!\n", __func__);
+ goto fail_1;
+ }
+
+ himax_proc_vendor_file = proc_create(HIMAX_PROC_VENDOR_FILE, (S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_vendor_ops);
+ if(himax_proc_vendor_file == NULL)
+ {
+ E(" %s: proc vendor file create failed!\n", __func__);
+ goto fail_2;
+ }
+
+ himax_proc_attn_file = proc_create(HIMAX_PROC_ATTN_FILE, (S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_attn_ops);
+ if(himax_proc_attn_file == NULL)
+ {
+ E(" %s: proc attn file create failed!\n", __func__);
+ goto fail_3;
+ }
+
+ himax_proc_int_en_file = proc_create(HIMAX_PROC_INT_EN_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_int_en_ops);
+ if(himax_proc_int_en_file == NULL)
+ {
+ E(" %s: proc int en file create failed!\n", __func__);
+ goto fail_4;
+ }
+
+ himax_proc_layout_file = proc_create(HIMAX_PROC_LAYOUT_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_layout_ops);
+ if(himax_proc_layout_file == NULL)
+ {
+ E(" %s: proc layout file create failed!\n", __func__);
+ goto fail_5;
+ }
+
+#ifdef HX_TP_PROC_RESET
+ himax_proc_reset_file = proc_create(HIMAX_PROC_RESET_FILE, (S_IWUSR),
+ himax_touch_proc_dir, &himax_proc_reset_ops);
+ if(himax_proc_reset_file == NULL)
+ {
+ E(" %s: proc reset file create failed!\n", __func__);
+ goto fail_6;
+ }
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+ himax_proc_diag_file = proc_create(HIMAX_PROC_DIAG_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_diag_ops);
+ if(himax_proc_diag_file == NULL)
+ {
+ E(" %s: proc diag file create failed!\n", __func__);
+ goto fail_7;
+ }
+ himax_proc_diag_arrange_file = proc_create(HIMAX_PROC_DIAG_ARR_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_diag_arrange_ops);
+ if(himax_proc_diag_arrange_file == NULL)
+ {
+ E(" %s: proc diag file create failed!\n", __func__);
+ goto fail_7_1;
+ }
+#endif
+
+#ifdef HX_TP_PROC_REGISTER
+ himax_proc_register_file = proc_create(HIMAX_PROC_REGISTER_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_register_ops);
+ if(himax_proc_register_file == NULL)
+ {
+ E(" %s: proc register file create failed!\n", __func__);
+ goto fail_8;
+ }
+#endif
+
+#ifdef HX_TP_PROC_DEBUG
+ himax_proc_debug_file = proc_create(HIMAX_PROC_DEBUG_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_debug_ops);
+ if(himax_proc_debug_file == NULL)
+ {
+ E(" %s: proc debug file create failed!\n", __func__);
+ goto fail_9;
+ }
+
+ himax_proc_fw_debug_file = proc_create(HIMAX_PROC_FW_DEBUG_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_fw_debug_ops);
+ if(himax_proc_fw_debug_file == NULL)
+ {
+ E(" %s: proc fw debug file create failed!\n", __func__);
+ goto fail_9_1;
+ }
+
+ himax_proc_dd_debug_file = proc_create(HIMAX_PROC_DD_DEBUG_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_dd_debug_ops);
+ if(himax_proc_dd_debug_file == NULL)
+ {
+ E(" %s: proc DD debug file create failed!\n", __func__);
+ goto fail_9_2;
+ }
+#endif
+
+#ifdef HX_TP_PROC_FLASH_DUMP
+ himax_proc_flash_dump_file = proc_create(HIMAX_PROC_FLASH_DUMP_FILE, (S_IWUSR|S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_flash_ops);
+ if(himax_proc_flash_dump_file == NULL)
+ {
+ E(" %s: proc flash dump file create failed!\n", __func__);
+ goto fail_10;
+ }
+#endif
+
+#ifdef HX_TP_PROC_SELF_TEST
+ himax_proc_self_test_file = proc_create(HIMAX_PROC_SELF_TEST_FILE, (S_IRUGO),
+ himax_touch_proc_dir, &himax_proc_self_test_ops);
+ if(himax_proc_self_test_file == NULL)
+ {
+ E(" %s: proc self_test file create failed!\n", __func__);
+ goto fail_11;
+ }
+#endif
+
+#ifdef HX_HIGH_SENSE
+ himax_proc_HSEN_file = proc_create(HIMAX_PROC_HSEN_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_HSEN_ops);
+ if(himax_proc_HSEN_file == NULL)
+ {
+ E(" %s: proc HSEN file create failed!\n", __func__);
+ goto fail_13;
+ }
+#endif
+
+#ifdef HX_SMART_WAKEUP
+ himax_proc_SMWP_file = proc_create(HIMAX_PROC_SMWP_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_SMWP_ops);
+ if(himax_proc_SMWP_file == NULL)
+ {
+ E(" %s: proc SMWP file create failed!\n", __func__);
+ goto fail_14;
+ }
+ himax_proc_GESTURE_file = proc_create(HIMAX_PROC_GESTURE_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_Gesture_ops);
+ if(himax_proc_GESTURE_file == NULL)
+ {
+ E(" %s: proc GESTURE file create failed!\n", __func__);
+ goto fail_15;
+ }
+#endif
+
+#ifdef HX_TP_PROC_SENSE_ON_OFF
+ himax_proc_SENSE_ON_OFF_file = proc_create(HIMAX_PROC_SENSE_ON_OFF_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_sense_on_off_ops);
+ if(himax_proc_SENSE_ON_OFF_file == NULL)
+ {
+ E(" %s: proc SENSE_ON_OFF file create failed!\n", __func__);
+ goto fail_16;
+ }
+#endif
+#ifdef HX_ESD_RECOVERY
+ himax_proc_ESD_cnt_file = proc_create(HIMAX_PROC_ESD_CNT_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_esd_cnt_ops);
+ if(himax_proc_ESD_cnt_file == NULL)
+ {
+ E(" %s: proc ESD cnt file create failed!\n", __func__);
+ goto fail_17;
+ }
+#endif
+ himax_proc_CRC_test_file = proc_create(HIMAX_PROC_CRC_TEST_FILE, (S_IWUSR|S_IRUGO|S_IWUGO),
+ himax_touch_proc_dir, &himax_proc_CRC_test_ops);
+ if(himax_proc_CRC_test_file == NULL)
+ {
+ E(" %s: proc CRC test file create failed!\n", __func__);
+ goto fail_18;
+ }
+ return 0 ;
+
+fail_18:
+#ifdef HX_ESD_RECOVERY
+ remove_proc_entry( HIMAX_PROC_ESD_CNT_FILE, himax_touch_proc_dir );
+fail_17:
+#endif
+#ifdef HX_TP_PROC_SENSE_ON_OFF
+ remove_proc_entry( HIMAX_PROC_SENSE_ON_OFF_FILE, himax_touch_proc_dir );
+fail_16:
+#endif
+#ifdef HX_SMART_WAKEUP
+ remove_proc_entry( HIMAX_PROC_GESTURE_FILE, himax_touch_proc_dir );
+fail_15:
+ remove_proc_entry( HIMAX_PROC_SMWP_FILE, himax_touch_proc_dir );
+fail_14:
+#endif
+#ifdef HX_HIGH_SENSE
+ remove_proc_entry( HIMAX_PROC_HSEN_FILE, himax_touch_proc_dir );
+fail_13:
+#endif
+#ifdef HX_TP_PROC_SELF_TEST
+ remove_proc_entry( HIMAX_PROC_SELF_TEST_FILE, himax_touch_proc_dir );
+fail_11:
+#endif
+#ifdef HX_TP_PROC_FLASH_DUMP
+ remove_proc_entry( HIMAX_PROC_FLASH_DUMP_FILE, himax_touch_proc_dir );
+fail_10:
+#endif
+#ifdef HX_TP_PROC_DEBUG
+ remove_proc_entry( HIMAX_PROC_DEBUG_FILE, himax_touch_proc_dir );
+fail_9:
+ remove_proc_entry( HIMAX_PROC_FW_DEBUG_FILE, himax_touch_proc_dir );
+fail_9_1:
+ remove_proc_entry( HIMAX_PROC_DD_DEBUG_FILE, himax_touch_proc_dir );
+fail_9_2:
+#endif
+#ifdef HX_TP_PROC_REGISTER
+ remove_proc_entry( HIMAX_PROC_REGISTER_FILE, himax_touch_proc_dir );
+fail_8:
+#endif
+#ifdef HX_TP_PROC_DIAG
+ remove_proc_entry( HIMAX_PROC_DIAG_FILE, himax_touch_proc_dir );
+fail_7:
+ remove_proc_entry( HIMAX_PROC_DIAG_ARR_FILE, himax_touch_proc_dir );
+fail_7_1:
+#endif
+#ifdef HX_TP_PROC_RESET
+ remove_proc_entry( HIMAX_PROC_RESET_FILE, himax_touch_proc_dir );
+fail_6:
+#endif
+ remove_proc_entry( HIMAX_PROC_LAYOUT_FILE, himax_touch_proc_dir );
+fail_5:
+ remove_proc_entry( HIMAX_PROC_INT_EN_FILE, himax_touch_proc_dir );
+fail_4:
+ remove_proc_entry( HIMAX_PROC_ATTN_FILE, himax_touch_proc_dir );
+fail_3:
+ remove_proc_entry( HIMAX_PROC_VENDOR_FILE, himax_touch_proc_dir );
+fail_2:
+ remove_proc_entry( HIMAX_PROC_DEBUG_LEVEL_FILE, himax_touch_proc_dir );
+fail_1:
+ remove_proc_entry( HIMAX_PROC_TOUCH_FOLDER, NULL );
+ return -ENOMEM;
+}
+
+void himax_touch_proc_deinit(void)
+{
+ remove_proc_entry( HIMAX_PROC_CRC_TEST_FILE, himax_touch_proc_dir );
+#ifdef HX_ESD_RECOVERY
+ remove_proc_entry( HIMAX_PROC_ESD_CNT_FILE, himax_touch_proc_dir );
+#endif
+#ifdef HX_TP_PROC_SENSE_ON_OFF
+ remove_proc_entry( HIMAX_PROC_SENSE_ON_OFF_FILE, himax_touch_proc_dir );
+#endif
+#ifdef HX_SMART_WAKEUP
+ remove_proc_entry( HIMAX_PROC_GESTURE_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_SMWP_FILE, himax_touch_proc_dir );
+#endif
+#ifdef HX_DOT_VIEW
+ remove_proc_entry( HIMAX_PROC_HSEN_FILE, himax_touch_proc_dir );
+#endif
+#ifdef HX_TP_PROC_SELF_TEST
+ remove_proc_entry(HIMAX_PROC_SELF_TEST_FILE, himax_touch_proc_dir);
+#endif
+#ifdef HX_TP_PROC_FLASH_DUMP
+ remove_proc_entry(HIMAX_PROC_FLASH_DUMP_FILE, himax_touch_proc_dir);
+#endif
+#ifdef HX_TP_PROC_DEBUG
+ remove_proc_entry( HIMAX_PROC_DEBUG_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_FW_DEBUG_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_DD_DEBUG_FILE, himax_touch_proc_dir );
+#endif
+#ifdef HX_TP_PROC_REGISTER
+ remove_proc_entry(HIMAX_PROC_REGISTER_FILE, himax_touch_proc_dir);
+#endif
+#ifdef HX_TP_PROC_DIAG
+ remove_proc_entry(HIMAX_PROC_DIAG_FILE, himax_touch_proc_dir);
+#endif
+#ifdef HX_TP_PROC_RESET
+ remove_proc_entry( HIMAX_PROC_RESET_FILE, himax_touch_proc_dir );
+#endif
+ remove_proc_entry( HIMAX_PROC_LAYOUT_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_INT_EN_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_ATTN_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_VENDOR_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_DEBUG_LEVEL_FILE, himax_touch_proc_dir );
+ remove_proc_entry( HIMAX_PROC_TOUCH_FOLDER, NULL );
+}
+#endif
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_debug.h b/drivers/input/touchscreen/hxchipset83112b/himax_debug.h
new file mode 100644
index 0000000..925d5e0
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_debug.h
@@ -0,0 +1,213 @@
+/* Himax Android Driver Sample Code for debug nodes
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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.
+*
+*/
+#ifndef H_HIMAX_DEBUG
+#define H_HIMAX_DEBUG
+
+#include "himax_platform.h"
+#include "himax_common.h"
+
+
+#ifdef HX_ESD_RECOVERY
+extern u8 HX_ESD_RESET_ACTIVATE;
+extern int hx_EB_event_flag;
+extern int hx_EC_event_flag;
+extern int hx_ED_event_flag;
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+#define HIMAX_PROC_TOUCH_FOLDER "android_touch"
+#define HIMAX_PROC_DEBUG_LEVEL_FILE "debug_level"
+#define HIMAX_PROC_VENDOR_FILE "vendor"
+#define HIMAX_PROC_ATTN_FILE "attn"
+#define HIMAX_PROC_INT_EN_FILE "int_en"
+#define HIMAX_PROC_LAYOUT_FILE "layout"
+#define HIMAX_PROC_CRC_TEST_FILE "CRC_test"
+
+static struct proc_dir_entry *himax_touch_proc_dir = NULL;
+static struct proc_dir_entry *himax_proc_debug_level_file = NULL;
+static struct proc_dir_entry *himax_proc_vendor_file = NULL;
+static struct proc_dir_entry *himax_proc_attn_file = NULL;
+static struct proc_dir_entry *himax_proc_int_en_file = NULL;
+static struct proc_dir_entry *himax_proc_layout_file = NULL;
+static struct proc_dir_entry *himax_proc_CRC_test_file = NULL;
+
+uint8_t HX_PROC_SEND_FLAG;
+
+extern int himax_touch_proc_init(void);
+extern void himax_touch_proc_deinit(void);
+bool getFlashDumpGoing(void);
+
+extern int himax_int_en_set(struct i2c_client *client);
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_ITO_TEST)
+#define HIMAX_PROC_ITO_TEST_FILE "ITO_test"
+static struct proc_dir_entry *himax_proc_ito_test_file = NULL;
+
+extern void ito_set_step_status(uint8_t status);
+extern uint8_t ito_get_step_status(void);
+extern void ito_set_result_status(uint8_t status);
+extern uint8_t ito_get_result_status(void);
+
+#endif
+
+#ifdef HX_TP_PROC_REGISTER
+#define HIMAX_PROC_REGISTER_FILE "register"
+struct proc_dir_entry *himax_proc_register_file = NULL;
+uint8_t byte_length = 0;
+uint8_t register_command[4];
+bool cfg_flag = false;
+#endif
+
+#ifdef HX_TP_PROC_DIAG
+#define HIMAX_PROC_DIAG_FILE "diag"
+struct proc_dir_entry *himax_proc_diag_file = NULL;
+#define HIMAX_PROC_DIAG_ARR_FILE "diag_arr"
+struct proc_dir_entry *himax_proc_diag_arrange_file = NULL;
+struct file *diag_sram_fn;
+uint8_t write_counter = 0;
+uint8_t write_max_count = 30;
+#define IIR_DUMP_FILE "/sdcard/HX_IIR_Dump.txt"
+#define DC_DUMP_FILE "/sdcard/HX_DC_Dump.txt"
+#define BANK_DUMP_FILE "/sdcard/HX_BANK_Dump.txt"
+
+#ifdef HX_TP_PROC_2T2R
+static uint8_t x_channel_2 = 0;
+static uint8_t y_channel_2 = 0;
+static uint32_t *diag_mutual_2 = NULL;
+
+int32_t *getMutualBuffer_2(void);
+uint8_t getXChannel_2(void);
+uint8_t getYChannel_2(void);
+
+void setMutualBuffer_2(void);
+void setXChannel_2(uint8_t x);
+void setYChannel_2(uint8_t y);
+#endif
+uint8_t x_channel = 0;
+uint8_t y_channel = 0;
+ int32_t *diag_mutual = NULL;
+ int32_t *diag_mutual_new = NULL;
+ int32_t *diag_mutual_old = NULL;
+uint8_t diag_max_cnt = 0;
+uint8_t hx_state_info[2] = {0};
+
+int g_diag_command = 0;
+uint8_t diag_coor[128];// = {0xFF};
+ int32_t diag_self[100] = {0};
+
+ int32_t *getMutualBuffer(void);
+ int32_t *getMutualNewBuffer(void);
+ int32_t *getMutualOldBuffer(void);
+ int32_t *getSelfBuffer(void);
+uint8_t getDiagCommand(void);
+uint8_t getXChannel(void);
+uint8_t getYChannel(void);
+
+void setMutualBuffer(void);
+void setMutualNewBuffer(void);
+void setMutualOldBuffer(void);
+void setXChannel(uint8_t x);
+void setYChannel(uint8_t y);
+#endif
+
+#ifdef HX_TP_PROC_DEBUG
+#define HIMAX_PROC_DEBUG_FILE "debug"
+struct proc_dir_entry *himax_proc_debug_file = NULL;
+#define HIMAX_PROC_FW_DEBUG_FILE "FW_debug"
+struct proc_dir_entry *himax_proc_fw_debug_file = NULL;
+#define HIMAX_PROC_DD_DEBUG_FILE "DD_debug"
+struct proc_dir_entry *himax_proc_dd_debug_file = NULL;
+
+bool fw_update_complete = false;
+int handshaking_result = 0;
+unsigned char debug_level_cmd = 0;
+unsigned char upgrade_fw[128*1024];
+uint8_t cmd_set[8];
+uint8_t mutual_set_flag = 0;
+#endif
+
+#ifdef HX_TP_PROC_FLASH_DUMP
+#define HIMAX_PROC_FLASH_DUMP_FILE "flash_dump"
+struct proc_dir_entry *himax_proc_flash_dump_file = NULL;
+
+static int Flash_Size = 131072;
+static uint8_t *flash_buffer = NULL;
+static uint8_t flash_command = 0;
+static uint8_t flash_read_step = 0;
+static uint8_t flash_progress = 0;
+static uint8_t flash_dump_complete = 0;
+static uint8_t flash_dump_fail = 0;
+static uint8_t sys_operation = 0;
+static bool flash_dump_going = false;
+
+static uint8_t getFlashDumpComplete(void);
+static uint8_t getFlashDumpFail(void);
+static uint8_t getFlashDumpProgress(void);
+static uint8_t getFlashReadStep(void);
+uint8_t getFlashCommand(void);
+uint8_t getSysOperation(void);
+
+static void setFlashCommand(uint8_t command);
+static void setFlashReadStep(uint8_t step);
+
+void setFlashBuffer(void);
+void setFlashDumpComplete(uint8_t complete);
+void setFlashDumpFail(uint8_t fail);
+void setFlashDumpProgress(uint8_t progress);
+void setSysOperation(uint8_t operation);
+void setFlashDumpGoing(bool going);
+
+#endif
+
+#ifdef HX_TP_PROC_SELF_TEST
+#define HIMAX_PROC_SELF_TEST_FILE "self_test"
+struct proc_dir_entry *himax_proc_self_test_file = NULL;
+uint32_t **raw_data_array;
+uint8_t X_NUM = 0, Y_NUM = 0;
+uint8_t sel_type = 0x0D;
+#endif
+
+#ifdef HX_TP_PROC_RESET
+#define HIMAX_PROC_RESET_FILE "reset"
+struct proc_dir_entry *himax_proc_reset_file = NULL;
+#endif
+
+#ifdef HX_HIGH_SENSE
+#define HIMAX_PROC_HSEN_FILE "HSEN"
+struct proc_dir_entry *himax_proc_HSEN_file = NULL;
+#endif
+
+#ifdef HX_TP_PROC_SENSE_ON_OFF
+#define HIMAX_PROC_SENSE_ON_OFF_FILE "SenseOnOff"
+struct proc_dir_entry *himax_proc_SENSE_ON_OFF_file = NULL;
+#endif
+
+#ifdef HX_SMART_WAKEUP
+#define HIMAX_PROC_SMWP_FILE "SMWP"
+struct proc_dir_entry *himax_proc_SMWP_file = NULL;
+#define HIMAX_PROC_GESTURE_FILE "GESTURE"
+struct proc_dir_entry *himax_proc_GESTURE_file = NULL;
+uint8_t HX_SMWP_EN = 0;
+//extern bool FAKE_POWER_KEY_SEND;
+#endif
+
+#ifdef HX_ESD_RECOVERY
+#define HIMAX_PROC_ESD_CNT_FILE "ESD_cnt"
+struct proc_dir_entry *himax_proc_ESD_cnt_file = NULL;
+#endif
+
+#endif
+
+#endif
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_ic.c b/drivers/input/touchscreen/hxchipset83112b/himax_ic.c
new file mode 100644
index 0000000..b81f726
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_ic.c
@@ -0,0 +1,3289 @@
+/* Himax Android Driver Sample Code for HX83112 chipset
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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 "himax_ic.h"
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+#include "himax_common.h"
+/*[Arima_8710][allen_yu] 20180423 end*/
+
+extern int i2c_error_count;
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180419 begin*/
+extern int reset_flag;
+/*[Arima_8710][allen_yu] 20180419 end*/
+
+extern unsigned long FW_VER_MAJ_FLASH_ADDR;
+extern unsigned long FW_VER_MIN_FLASH_ADDR;
+extern unsigned long CFG_VER_MAJ_FLASH_ADDR;
+extern unsigned long CFG_VER_MIN_FLASH_ADDR;
+extern unsigned long CID_VER_MAJ_FLASH_ADDR;
+extern unsigned long CID_VER_MIN_FLASH_ADDR;
+
+extern unsigned long FW_VER_MAJ_FLASH_LENG;
+extern unsigned long FW_VER_MIN_FLASH_LENG;
+extern unsigned long CFG_VER_MAJ_FLASH_LENG;
+extern unsigned long CFG_VER_MIN_FLASH_LENG;
+extern unsigned long CID_VER_MAJ_FLASH_LENG;
+extern unsigned long CID_VER_MIN_FLASH_LENG;
+
+#ifdef HX_AUTO_UPDATE_FW
+extern int g_i_FW_VER;
+extern int g_i_CFG_VER;
+extern int g_i_CID_MAJ;
+extern int g_i_CID_MIN;
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+//extern unsigned char i_CTPM_FW[];
+extern unsigned char i_CTPM_FW_HX83112A[];
+extern unsigned char i_CTPM_FW_HX83112B[];
+/*[Arima_8710][allen_yu] 20180828 end*/
+#endif
+
+extern unsigned char IC_TYPE;
+extern unsigned char IC_CHECKSUM;
+
+extern bool DSRAM_Flag;
+
+extern struct himax_ic_data* ic_data;
+extern struct himax_ts_data *private_ts;
+
+int himax_touch_data_size = 128;
+
+#ifdef HX_TP_PROC_2T2R
+bool Is_2T2R = false;
+#endif
+
+#ifdef HX_USB_DETECT_GLOBAL
+//extern kal_bool upmu_is_chr_det(void);
+extern void himax_cable_detect_func(bool force_renew);
+#endif
+
+int himax_get_touch_data_size(void)
+{
+ return himax_touch_data_size;
+}
+
+#ifdef HX_RST_PIN_FUNC
+extern void himax_rst_gpio_set(int pinnum, uint8_t value);
+extern int himax_report_data_init(void);
+extern u8 HX_HW_RESET_ACTIVATE;
+
+void himax_pin_reset(void)
+{
+ I("%s: Now reset the Touch chip.\n", __func__);
+ himax_rst_gpio_set(private_ts->rst_gpio, 0);
+ msleep(20);
+ himax_rst_gpio_set(private_ts->rst_gpio, 1);
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+#if 0
+ msleep(20);
+#endif
+/*[Arima_7947][allen_yu] 20180129 end*/
+}
+
+void himax_reload_config(void)
+{
+ if(himax_report_data_init())
+ E("%s: allocate data fail\n",__func__);
+
+ himax_sense_on(private_ts->client, 0x00);
+}
+
+void himax_irq_switch(int switch_on)
+{
+ int ret = 0;
+ if(switch_on)
+ {
+
+ if (private_ts->use_irq)
+ himax_int_enable(private_ts->client->irq,switch_on);
+ else
+ hrtimer_start(&private_ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL);
+ }
+ else
+ {
+ if (private_ts->use_irq)
+ himax_int_enable(private_ts->client->irq,switch_on);
+ else
+ {
+ hrtimer_cancel(&private_ts->timer);
+ ret = cancel_work_sync(&private_ts->work);
+ }
+ }
+}
+
+void himax_ic_reset(uint8_t loadconfig,uint8_t int_off)
+{
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+#ifdef HX_RST_PIN_FUNC
+if (reset_flag ==1){
+/*[Arima_8710][allen_yu] 20180423 end*/
+ struct himax_ts_data *ts = private_ts;
+
+ HX_HW_RESET_ACTIVATE = 1;
+
+ I("%s,status: loadconfig=%d,int_off=%d\n",__func__,loadconfig,int_off);
+
+ if (ts->rst_gpio)
+ {
+ if(int_off)
+ {
+ himax_irq_switch(0);
+ }
+
+ himax_pin_reset();
+ if(loadconfig)
+ {
+ himax_reload_config();
+ }
+ if(int_off)
+ {
+ himax_irq_switch(1);
+ }
+ }
+/*[Arima_8710][allen_yu] Fix TP I2C error in suspend 20180423 begin*/
+}
+#endif
+/*[Arima_8710][allen_yu] 20180423 end*/
+}
+#endif
+
+#if defined(HX_ESD_RECOVERY)
+int g_zero_event_count = 0;
+int himax_ic_esd_recovery(int hx_esd_event,int hx_zero_event,int length)
+{
+ if(g_zero_event_count > 5)
+ {
+ g_zero_event_count = 0;
+ I("[HIMAX TP MSG]: ESD event checked - ALL Zero.\n");
+ goto checksum_fail;
+ }
+
+ if(hx_esd_event == length)
+ {
+ g_zero_event_count = 0;
+ goto checksum_fail;
+ }
+ else if(hx_zero_event == length)
+ {
+ g_zero_event_count++;
+ I("[HIMAX TP MSG]: ALL Zero event is %d times.\n",g_zero_event_count);
+ goto err_workqueue_out;
+ }
+
+checksum_fail:
+ return CHECKSUM_FAIL;
+err_workqueue_out:
+ return WORK_OUT;
+}
+void himax_esd_ic_reset(void)
+{
+ /*Nothing to do in incell,need to follow display reset*/
+}
+#endif
+
+int himax_hand_shaking(struct i2c_client *client) //0:Running, 1:Stop, 2:I2C Fail
+{
+ int result = 0;
+
+ return result;
+}
+
+void himax_idle_mode(struct i2c_client *client,int disable)
+{
+ int retry = 20;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t switch_cmd = 0x00;
+
+ I("%s:entering\n",__func__);
+ do
+ {
+
+ I("%s,now %d times\n!",__func__,retry);
+
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x70;
+ tmp_addr[0] = 0x88;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ if(disable)
+ switch_cmd = 0x17;
+ else
+ switch_cmd = 0x1F;
+
+ tmp_data[0] = switch_cmd;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ I("%s:After turn ON/OFF IDLE Mode [0] = 0x%02X,[1] = 0x%02X,[2] = 0x%02X,[3] = 0x%02X\n", __func__,tmp_data[0],tmp_data[1],tmp_data[2],tmp_data[3]);
+
+ retry--;
+ msleep(10);
+
+ }
+ while((tmp_data[0] != switch_cmd) && retry > 0);
+
+ I("%s: setting OK!\n",__func__);
+
+}
+
+int himax_write_read_reg(struct i2c_client *client,uint8_t *tmp_addr,uint8_t *tmp_data,uint8_t hb,uint8_t lb)
+{
+ int cnt = 0;
+
+ do
+ {
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ msleep(10);
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ //I("%s:Now tmp_data[0]=0x%02X,[1]=0x%02X,[2]=0x%02X,[3]=0x%02X\n",__func__,tmp_data[0],tmp_data[1],tmp_data[2],tmp_data[3]);
+ }
+ while((tmp_data[1] != hb && tmp_data[0] != lb) && cnt++ < 100);
+
+ if(cnt == 99)
+ return -1;
+
+ I("Now register 0x%08X : high byte=0x%02X,low byte=0x%02X\n",tmp_addr[3],tmp_data[1],tmp_data[0]);
+ return NO_ERR;
+}
+
+int himax_determin_diag_rawdata(int diag_command)
+{
+ return diag_command%10;
+}
+
+int himax_determin_diag_storage(int diag_command)
+{
+ return diag_command/10;
+}
+
+void himax_reload_disable(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ I("%s:entering\n",__func__);
+
+ tmp_addr[3] = 0x10; tmp_addr[2] = 0x00; tmp_addr[1] = 0x7F; tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0xA5; tmp_data[0] = 0x5A;
+
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ I("%s: setting OK!\n",__func__);
+}
+
+int himax_switch_mode(struct i2c_client *client,int mode)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t mode_wirte_cmd;
+ uint8_t mode_read_cmd;
+ int result = -1;
+ int retry = 200;
+
+ I("%s: Entering\n",__func__);
+
+ if(mode == 0) /*normal mode*/
+ {
+ mode_wirte_cmd = 0x00;
+ mode_read_cmd = 0x99;
+ }
+ else /*sorting mode*/
+ {
+ mode_wirte_cmd = 0xAA;
+ mode_read_cmd = 0xCC;
+ }
+
+ himax_sense_off(client);
+
+ //himax_interface_on(client);
+
+ /* */
+
+ /* clean up FW status */
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ //msleep(30);
+
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x04;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = mode_wirte_cmd;
+ tmp_data[0] = mode_wirte_cmd;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ //msleep(30);
+
+ himax_idle_mode(client,1);
+ himax_reload_disable(client);
+
+ // To stable the sorting //skip frames
+ if(mode)
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x70;
+ tmp_addr[0] = 0xF4;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x08;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+ else
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x72;
+ tmp_addr[0] = 0x94;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x50;/*0x50 normal mode 80 frame*/
+ /* N Frame Sorting*/
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x70;
+ tmp_addr[0] = 0xF4;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x14;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+
+ himax_sense_on(client,0x01);
+ I("mode_wirte_cmd(0)=0x%2.2X,mode_wirte_cmd(1)=0x%2.2X\n",tmp_data[0],tmp_data[1]);
+ while(retry!=0)
+ {
+ I("[%d]Read 10007F04!\n",retry);
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x04;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ msleep(100);
+ I("mode_read_cmd(0)=0x%2.2X,mode_read_cmd(1)=0x%2.2X\n",tmp_data[0],tmp_data[1]);
+ if(tmp_data[0] == mode_read_cmd && tmp_data[1] == mode_read_cmd)
+ {
+ I("Read OK!\n");
+ result = 0;
+ break;
+ }
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xA8;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ if(tmp_data[0] == 0x00 && tmp_data[1] == 0x00 && tmp_data[2] == 0x00 && tmp_data[3] == 0x00)
+ {
+ E("%s,: FW Stop!\n",__func__);
+ break;
+ }
+ retry--;
+ }
+
+ if(result == 0)
+ {
+ if(mode == 0)
+ return 1; //normal mode
+ else
+ return 2; //sorting mode
+ }
+ else
+ return -1; //change mode fail
+}
+
+void himax_return_event_stack(struct i2c_client *client)
+{
+ int retry = 20;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ I("%s:entering\n",__func__);
+ do
+ {
+
+ I("%s,now %d times\n!",__func__,retry);
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ retry--;
+ msleep(10);
+
+ }
+ while((tmp_data[1] != 0x00 && tmp_data[0] != 0x00) && retry > 0);
+
+ I("%s: End of setting!\n",__func__);
+
+}
+
+void himax_diag_register_set(struct i2c_client *client, uint8_t diag_command)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ I("diag_command = %d\n", diag_command );
+
+ himax_interface_on(client);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x02;
+ tmp_addr[1] = 0x04;
+ tmp_addr[0] = 0xB4;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = diag_command;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ I("%s: tmp_data[3]=0x%02X,tmp_data[2]=0x%02X,tmp_data[1]=0x%02X,tmp_data[0]=0x%02X!\n",
+ __func__,tmp_data[3],tmp_data[2],tmp_data[1],tmp_data[0]);
+
+}
+
+void himax_init_psl(struct i2c_client *client) //power saving level
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ //==============================================================
+ // SCU_Power_State_PW : 0x9000_00A0 ==> 0x0000_0000 (Reset PSL)
+ //==============================================================
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xA0;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s: power saving level reset OK!\n",__func__);
+}
+
+void himax_flash_dump_func(struct i2c_client *client, uint8_t local_flash_command, int Flash_Size, uint8_t *flash_buffer)
+{
+ uint8_t tmp_addr[4];
+ uint8_t buffer[256];
+ int page_prog_start = 0;
+
+ himax_sense_off(client);
+ himax_burst_enable(client, 1);
+
+ for (page_prog_start = 0; page_prog_start < Flash_Size; page_prog_start = page_prog_start + 128)
+ {
+
+ tmp_addr[0] = page_prog_start % 0x100;
+ tmp_addr[1] = (page_prog_start >> 8) % 0x100;
+ tmp_addr[2] = (page_prog_start >> 16) % 0x100;
+ tmp_addr[3] = page_prog_start / 0x1000000;
+ himax_register_read(client, tmp_addr,128,buffer,false);
+ memcpy(&flash_buffer[page_prog_start],buffer,128);
+ }
+
+ himax_burst_enable(client, 0);
+ himax_sense_on(client, 0x01);
+
+ return;
+
+}
+
+int himax_chip_self_test(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[128];
+ uint8_t self_test_info[24];
+ int pf_value=0x00;
+ uint8_t test_result_id = 0;
+ int i;
+
+ memset(tmp_addr, 0x00, sizeof(tmp_addr));
+ memset(tmp_data, 0x00, sizeof(tmp_data));
+
+ himax_interface_on(client);
+ himax_sense_off(client);
+
+
+ himax_burst_enable(client, 1);
+
+ // 0x10007f18 -> 0x00006AA6
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x6A;
+ tmp_data[0] = 0xA6;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+/*[Arima_8710][allen_yu] Set touch golden value for ATS 20180620 begin*/
+ //Set criteria 0x10007F1C [0,1]=aa/up,down=, [2-3]=key/up,down, [4-5]=avg/up,down
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x1C;
+/*[20190822][TracyChui]Modify touch self test criteria for 0.9 glass start */
+/*[20190815][TracyChui]Modify touch self test criteria start */
+/*[Arima_8901][allen_yu] Modify touch golden value 20190527 begin*/
+/*[Arima_8710][allen_yu] Dynamic detect touch golden value 20180929 begin*/
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+ if(IC_TYPE == HX_83112A_SERIES_PWON)
+ {
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x64;
+ tmp_data[1] = 0x08;
+ tmp_data[0] = 0x32;
+ tmp_data[7] = 0x00;
+ tmp_data[6] = 0x00;
+ tmp_data[5] = 0x00;
+ tmp_data[4] = 0x64;
+ }
+ else/*HX_83112B_SERIES_PWON*/
+ {
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x64;
+ tmp_data[1] = 0x0F;
+ tmp_data[0] = 0x46;
+ tmp_data[7] = 0x00;
+ tmp_data[6] = 0x00;
+ tmp_data[5] = 0x00;
+ tmp_data[4] = 0x64;
+ }
+/*[Arima_8710][allen_yu] 20180929 end*/
+/*[Arima_8710][allen_yu] 20180828 end*/
+/*[Arima_8901][allen_yu] 20190527 end*/
+/*[20190815][TracyChui]Modify touch self test criteria end */
+/*[20190822][TracyChui]Modify touch self test criteria for 0.9 glass end */
+ himax_flash_write_burst_lenth(client, tmp_addr, tmp_data, 8);
+/*[Arima_8710][allen_yu] 20180620 end*/
+ // 0x10007294 -> 0x0000190 //SET IIR_MAX FRAMES
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x01;
+ tmp_data[0] = 0x90;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //Disable IDLE Mode
+ himax_idle_mode(client,1);
+
+ // 0x10007f00 -> 0x0000A55A //Diable Flash Reload
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0xA5;
+ tmp_data[0] = 0x5A;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+
+ //start selftest // leave safe mode
+ himax_sense_on(client, 1);
+
+ //Hand shaking -> 0x100007f8 waiting 0xA66A
+ for(i = 0; i < 1000; i++)
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x18;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ I("%s: tmp_data[0] = 0x%02X,tmp_data[1] = 0x%02X,tmp_data[2] = 0x%02X,tmp_data[3] = 0x%02X, cnt=%d\n", __func__,tmp_data[0],tmp_data[1],tmp_data[2],tmp_data[3],i);
+ msleep(10);
+ if(tmp_data[1] == 0xA6 && tmp_data[0] == 0x6A )
+ {
+ I("%s Data ready goto moving data\n", __func__);
+ break;
+ }
+ }
+
+ himax_sense_off(client);
+ msleep(20);
+
+ //=====================================
+ // Read test result ID : 0x10007f24 ==> bit[2][1][0] = [key][AA][avg] => 0xF = PASS
+ //=====================================
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x24;
+ himax_register_read(client, tmp_addr, 24, self_test_info, false);
+
+ test_result_id = self_test_info[0];
+
+ I("%s: check test result, test_result_id=%x, test_result=%x\n", __func__
+ ,test_result_id,self_test_info[0]);
+
+ I("raw top 1 = %d\n",self_test_info[3]*256+self_test_info[2]);
+ I("raw top 2 = %d\n",self_test_info[5]*256+self_test_info[4]);
+ I("raw top 3 = %d\n",self_test_info[7]*256+self_test_info[6]);
+
+ I("raw last 1 = %d\n",self_test_info[9]*256+self_test_info[8]);
+ I("raw last 2 = %d\n",self_test_info[11]*256+self_test_info[10]);
+ I("raw last 3 = %d\n",self_test_info[13]*256+self_test_info[12]);
+
+ I("raw key 1 = %d\n",self_test_info[15]*256+self_test_info[14]);
+ I("raw key 2 = %d\n",self_test_info[17]*256+self_test_info[16]);
+ I("raw key 3 = %d\n",self_test_info[19]*256+self_test_info[18]);
+
+ if (test_result_id==0xAA)
+ {
+ I("[Himax]: self-test pass\n");
+ pf_value = 0x1;
+ }
+ else
+ {
+ E("[Himax]: self-test fail\n");
+ /* E("[Himax]: bank_avg = %d, bank_max = %d,%d,%d, bank_min = %d,%d,%d, key = %d,%d,%d\n",
+ tmp_data[1],tmp_data[2],tmp_data[3],tmp_data[4],tmp_data[5],tmp_data[6],tmp_data[7],
+ tmp_data[8],tmp_data[9],tmp_data[10]); */
+ pf_value = 0x0;
+ }
+
+ //Enable IDLE Mode
+ himax_idle_mode(client,0);
+
+ // 0x10007f00 -> 0x00000000 //Enable Flash Reload //recovery
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ himax_sense_on(client, 0);
+ msleep(120);
+
+ return pf_value;
+}
+
+void himax_set_HSEN_enable(struct i2c_client *client, uint8_t HSEN_enable, bool suspended)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t back_data[4];
+ uint8_t retry_cnt = 0;
+
+ himax_sense_off(client);
+
+ //Enable:0x10007F14 = 0xA55AA55A
+ do
+ {
+ if(HSEN_enable)
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x14;
+ tmp_data[3] = 0xA5;
+ tmp_data[2] = 0x5A;
+ tmp_data[1] = 0xA5;
+ tmp_data[0] = 0x5A;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ back_data[3] = 0XA5;
+ back_data[2] = 0X5A;
+ back_data[1] = 0XA5;
+ back_data[0] = 0X5A;
+ }
+ else
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x14;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ back_data[3] = 0X00;
+ back_data[2] = 0X00;
+ back_data[1] = 0X00;
+ back_data[0] = 0x00;
+ }
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ //I("%s: tmp_data[0]=%d, HSEN_enable=%d, retry_cnt=%d \n", __func__, tmp_data[0],HSEN_enable,retry_cnt);
+ retry_cnt++;
+ }
+ while((tmp_data[3] != back_data[3] || tmp_data[2] != back_data[2] || tmp_data[1] != back_data[1] || tmp_data[0] != back_data[0] ) && retry_cnt < HIMAX_REG_RETRY_TIMES);
+
+ himax_sense_on(client,0);
+}
+
+int himax_palm_detect(uint8_t *buf)
+{
+
+ return GESTURE_DETECT_FAIL;
+
+}
+
+void himax_set_SMWP_enable(struct i2c_client *client, uint8_t SMWP_enable, bool suspended)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t back_data[4];
+ uint8_t retry_cnt = 0;
+
+ himax_sense_off(client);
+
+ //Enable:0x10007F10 = 0xA55AA55A
+ do
+ {
+ if(SMWP_enable)
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0xA5;
+ tmp_data[2] = 0x5A;
+ tmp_data[1] = 0xA5;
+ tmp_data[0] = 0x5A;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ back_data[3] = 0XA5;
+ back_data[2] = 0X5A;
+ back_data[1] = 0XA5;
+ back_data[0] = 0X5A;
+ }
+ else
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ back_data[3] = 0X00;
+ back_data[2] = 0X00;
+ back_data[1] = 0X00;
+ back_data[0] = 0x00;
+ }
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ //I("%s: tmp_data[0]=%d, SMWP_enable=%d, retry_cnt=%d \n", __func__, tmp_data[0],SMWP_enable,retry_cnt);
+ retry_cnt++;
+ }
+ while((tmp_data[3] != back_data[3] || tmp_data[2] != back_data[2] || tmp_data[1] != back_data[1] || tmp_data[0] != back_data[0] ) && retry_cnt < HIMAX_REG_RETRY_TIMES);
+
+ himax_sense_on(client,0);
+
+}
+
+void himax_usb_detect_set(struct i2c_client *client,uint8_t *cable_config)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ //Enable:0x10007F38 = 0xA55AA55A
+
+ if(cable_config[1] == 0x01)
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x38;
+ tmp_data[3] = 0xA5;
+ tmp_data[2] = 0x5A;
+ tmp_data[1] = 0xA5;
+ tmp_data[0] = 0x5A;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+ else
+ {
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x7F;
+ tmp_addr[0] = 0x38;
+ tmp_data[3] = 0x77;
+ tmp_data[2] = 0x88;
+ tmp_data[1] = 0x77;
+ tmp_data[0] = 0x88;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+}
+
+void himax_burst_enable(struct i2c_client *client, uint8_t auto_add_4_byte)
+{
+ uint8_t tmp_data[4];
+
+ tmp_data[0] = 0x31;
+ if ( i2c_himax_write(client, 0x13,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ tmp_data[0] = (0x10 | auto_add_4_byte);
+ if ( i2c_himax_write(client, 0x0D,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ //isBusrtOn = true;
+}
+
+void himax_register_read(struct i2c_client *client, uint8_t *read_addr, int read_length, uint8_t *read_data, bool cfg_flag)
+{
+ uint8_t tmp_data[4];
+ int i = 0;
+ int address = 0;
+ if(cfg_flag == false)
+ {
+ if(read_length>256)
+ {
+ E("%s: read len over 256!\n", __func__);
+ return;
+ }
+ if (read_length > 4)
+ himax_burst_enable(client, 1);
+ else
+ himax_burst_enable(client, 0);
+
+ address = (read_addr[3] << 24) + (read_addr[2] << 16) + (read_addr[1] << 8) + read_addr[0];
+ i = address;
+ tmp_data[0] = (uint8_t)i;
+ tmp_data[1] = (uint8_t)(i >> 8);
+ tmp_data[2] = (uint8_t)(i >> 16);
+ tmp_data[3] = (uint8_t)(i >> 24);
+ if ( i2c_himax_write(client, 0x00,tmp_data, 4, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ tmp_data[0] = 0x00;
+ if ( i2c_himax_write(client, 0x0C,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ if ( i2c_himax_read(client, 0x08,read_data, read_length, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ if (read_length > 4)
+ himax_burst_enable(client, 0);
+ }
+ else if(cfg_flag == true)
+ {
+ if(i2c_himax_read(client, read_addr[0], read_data,read_length,DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ }
+ else
+ {
+ E("%s: cfg_flag = %d, value is wrong!\n", __func__,cfg_flag);
+ return;
+ }
+}
+
+void himax_flash_write_burst(struct i2c_client *client, uint8_t * reg_byte, uint8_t * write_data)
+{
+ uint8_t data_byte[8];
+ int i = 0, j = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ data_byte[i] = reg_byte[i];
+ }
+ for (j = 4; j < 8; j++)
+ {
+ data_byte[j] = write_data[j-4];
+ }
+
+ if ( i2c_himax_write(client, 0x00,data_byte, 8, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+}
+
+void himax_flash_write_burst_lenth(struct i2c_client *client, uint8_t *reg_byte, uint8_t *write_data, int length)
+{
+ uint8_t data_byte[256];
+ int i = 0, j = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ data_byte[i] = reg_byte[i];
+ }
+ for (j = 4; j < length + 4; j++)
+ {
+ data_byte[j] = write_data[j - 4];
+ }
+
+ if ( i2c_himax_write(client, 0x00,data_byte, length + 4, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+}
+
+void himax_register_write(struct i2c_client *client, uint8_t *write_addr, int write_length, uint8_t *write_data, bool cfg_flag)
+{
+ int i =0, address = 0;
+ if(cfg_flag == false)
+ {
+ address = (write_addr[3] << 24) + (write_addr[2] << 16) + (write_addr[1] << 8) + write_addr[0];
+
+ for (i = address; i < address + write_length; i++)
+ {
+ if (write_length > 4)
+ {
+ himax_burst_enable(client, 1);
+ }
+ else
+ {
+ himax_burst_enable(client, 0);
+ }
+ himax_flash_write_burst_lenth(client, write_addr, write_data, write_length);
+ }
+ }
+ else if(cfg_flag == true)
+ {
+ if(i2c_himax_write(client, write_addr[0], write_data,write_length,DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ }
+ else
+ {
+ E("%s: cfg_flag = %d, value is wrong!\n", __func__,cfg_flag);
+ return;
+ }
+}
+
+bool himax_sense_off(struct i2c_client *client)
+{
+ uint8_t cnt = 0;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+/*[Arima_7947][allen_yu] Modify Int trigger way and upgrade himax fw to CID0404_D01_C02 20171228 begin*/
+ /*1225 for power on test*/
+ //=====================================
+ // FW ISR=0
+ //=====================================
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x5C;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0xA5;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ msleep(20);
+ /*1225 for power on test*/
+/*[Arima_7947][allen_yu] 20171228 end*/
+ do
+ {
+ //===========================================
+ // 0x31 ==> 0x27
+ //===========================================
+ tmp_data[0] = 0x27;
+ if ( i2c_himax_write(client, 0x31,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+ //===========================================
+ // 0x32 ==> 0x95
+ //===========================================
+ tmp_data[0] = 0x95;
+ if ( i2c_himax_write(client, 0x32,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+
+ // ======================
+ // Check enter_save_mode
+ // ======================
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xA8;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s: Check enter_save_mode data[0]=%X \n", __func__,tmp_data[0]);
+
+ if (tmp_data[0] == 0x0C)
+ {
+ //=====================================
+ // Reset TCON
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x02;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ msleep(1);
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x01;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Reset ADC
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x02;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x94;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ msleep(1);
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x01;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ return true;
+ }
+ else
+ {
+ msleep(10);
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#endif
+ }
+ }
+ while (cnt++ < 15);
+
+ return false;
+}
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+bool himax_enter_safe_mode(struct i2c_client *client)
+{
+ uint8_t cnt = 0;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ do
+ {
+ //===========================================
+ // 0x31 ==> 0x27
+ //===========================================
+ tmp_data[0] = 0x27;
+ if ( i2c_himax_write(client, 0x31,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+ //===========================================
+ // 0x32 ==> 0x95
+ //===========================================
+ tmp_data[0] = 0x95;
+ if ( i2c_himax_write(client, 0x32,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+
+ //===========================================
+ // 0x31 ==> 0x00
+ //===========================================
+ tmp_data[0] = 0x00;
+ if ( i2c_himax_write(client, 0x31,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+ msleep(10);
+ //===========================================
+ // 0x31 ==> 0x27
+ //===========================================
+ tmp_data[0] = 0x27;
+ if ( i2c_himax_write(client, 0x31,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+ //===========================================
+ // 0x32 ==> 0x95
+ //===========================================
+ tmp_data[0] = 0x95;
+ if ( i2c_himax_write(client, 0x32,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return false;
+ }
+
+ // ======================
+ // Check enter_save_mode
+ // ======================
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xA8;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s: Check enter_save_mode data[0]=%X \n", __func__,tmp_data[0]);
+
+ if (tmp_data[0] == 0x0C)
+ {
+ //=====================================
+ // Reset TCON
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x02;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ msleep(1);
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x01;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Reset ADC
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x02;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x94;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ msleep(1);
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x01;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ return true;
+ }
+ else
+ {
+ msleep(10);
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#endif
+ }
+ }
+ while (cnt++ < 15);
+
+ return false;
+}
+/*[Arima_7947][allen_yu] 20180129 end*/
+void himax_interface_on(struct i2c_client *client)
+{
+ uint8_t tmp_data[5];
+ uint8_t tmp_data2[2];
+ int cnt = 0;
+
+ //Read a dummy register to wake up I2C.
+ if ( i2c_himax_read(client, 0x08, tmp_data,4,DEFAULT_RETRY_CNT) < 0) // to knock I2C
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ do
+ {
+ //===========================================
+ // Enable continuous burst mode : 0x13 ==> 0x31
+ //===========================================
+ tmp_data[0] = 0x31;
+ if ( i2c_himax_write(client, 0x13,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ //===========================================
+ // AHB address auto +4 : 0x0D ==> 0x11
+ // Do not AHB address auto +4 : 0x0D ==> 0x10
+ //===========================================
+ tmp_data[0] = (0x10);
+ if ( i2c_himax_write(client, 0x0D,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ // Check cmd
+ i2c_himax_read(client, 0x13, tmp_data,1,DEFAULT_RETRY_CNT);
+ i2c_himax_read(client, 0x0D, tmp_data2,1,DEFAULT_RETRY_CNT);
+
+ if (tmp_data[0] == 0x31 && tmp_data2[0] == 0x10)
+ {
+ //isBusrtOn = true;
+ break;
+ }
+ msleep(1);
+ }
+ while (++cnt < 10);
+
+ if (cnt > 0)
+ I("%s:Polling burst mode: %d times", __func__,cnt);
+
+}
+
+bool wait_wip(struct i2c_client *client, int Timing)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t in_buffer[10];
+ //uint8_t out_buffer[20];
+ int retry_cnt = 0;
+
+ //=====================================
+ // SPI Transfer Format : 0x8000_0010 ==> 0x0002_0780
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x02;
+ tmp_data[1] = 0x07;
+ tmp_data[0] = 0x80;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ in_buffer[0] = 0x01;
+
+ do
+ {
+ //=====================================
+ // SPI Transfer Control : 0x8000_0020 ==> 0x4200_0003
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x42;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x03;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // SPI Command : 0x8000_0024 ==> 0x0000_0005
+ // read 0x8000_002C for 0x01, means wait success
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x05;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ in_buffer[0] = in_buffer[1] = in_buffer[2] = in_buffer[3] = 0xFF;
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x2C;
+ himax_register_read(client, tmp_addr, 4, in_buffer, false);
+
+ if ((in_buffer[0] & 0x01) == 0x00)
+ return true;
+
+ retry_cnt++;
+
+ if (in_buffer[0] != 0x00 || in_buffer[1] != 0x00 || in_buffer[2] != 0x00 || in_buffer[3] != 0x00)
+ I("%s:Wait wip retry_cnt:%d, buffer[0]=%d, buffer[1]=%d, buffer[2]=%d, buffer[3]=%d \n", __func__,
+ retry_cnt,in_buffer[0],in_buffer[1],in_buffer[2],in_buffer[3]);
+
+ if (retry_cnt > 100)
+ {
+ E("%s: Wait wip error!\n", __func__);
+ return false;
+ }
+ msleep(Timing);
+ }
+ while ((in_buffer[0] & 0x01) == 0x01);
+ return true;
+}
+
+void himax_sense_on(struct i2c_client *client, uint8_t FlashMode)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ int retry = 0;
+
+ I("Enter %s \n", __func__);
+
+ himax_interface_on(client);
+
+ if(!FlashMode)
+ {
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#else
+ //===AHBI2C_SystemReset==========
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x55;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+#endif
+ }
+ else
+ {
+ do
+ {
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x98;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x53;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+
+ tmp_addr[0] = 0xE4;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s:Read status from IC = %X,%X\n", __func__, tmp_data[0],tmp_data[1]);
+
+ }
+ while((tmp_data[1] != 0x01 || tmp_data[0] != 0x00) && retry++ < 5);
+
+ if(retry >= 5)
+ {
+ E("%s: Fail:\n", __func__);
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#else
+ //===AHBI2C_SystemReset==========
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x55;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+#endif
+ }
+ else
+ {
+ I("%s:OK and Read status from IC = %X,%X\n", __func__, tmp_data[0],tmp_data[1]);
+
+ /* reset code*/
+ tmp_data[0] = 0x00;
+ if ( i2c_himax_write(client, 0x31,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ }
+ if ( i2c_himax_write(client, 0x32,tmp_data, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ }
+
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x98;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+ }
+ }
+}
+
+void himax_chip_erase(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ himax_interface_on(client);
+
+ /* init psl */
+ himax_init_psl(client);
+
+ //=====================================
+ // SPI Transfer Format : 0x8000_0010 ==> 0x0002_0780
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x02;
+ tmp_data[1] = 0x07;
+ tmp_data[0] = 0x80;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Chip Erase
+ // Write Enable : 1. 0x8000_0020 ==> 0x4700_0000
+ // 2. 0x8000_0024 ==> 0x0000_0006
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x47;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x06;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Chip Erase
+ // Erase Command : 0x8000_0024 ==> 0x0000_00C7
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0xC7;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ msleep(2000);
+
+ if (!wait_wip(client, 100))
+ E("%s:83112_Chip_Erase Fail\n", __func__);
+
+}
+
+bool himax_block_erase(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ himax_burst_enable(client, 0);
+
+ //=====================================
+ // SPI Transfer Format : 0x8000_0010 ==> 0x0002_0780
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x02;
+ tmp_data[1] = 0x07;
+ tmp_data[0] = 0x80;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Chip Erase
+ // Write Enable : 1. 0x8000_0020 ==> 0x4700_0000
+ // 2. 0x8000_0024 ==> 0x0000_0006
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x47;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x06;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=====================================
+ // Block Erase
+ // Erase Command : 0x8000_0028 ==> 0x0000_0000 //SPI addr
+ // 0x8000_0020 ==> 0x6700_0000 //control
+ // 0x8000_0024 ==> 0x0000_0052 //BE
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x28;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x67;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x52;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ msleep(1000);
+
+ if (!wait_wip(client, 100))
+ {
+ E("%s:83112_Erase Fail\n", __func__);
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+
+}
+
+bool himax_sector_erase(struct i2c_client *client, int start_addr)
+{
+ return true;
+}
+
+void himax_sram_write(struct i2c_client *client, uint8_t *FW_content)
+{
+
+}
+
+bool himax_sram_verify(struct i2c_client *client, uint8_t *FW_File, int FW_Size)
+{
+ return true;
+}
+
+void himax_flash_programming(struct i2c_client *client, uint8_t *FW_content, int FW_Size)
+{
+ int page_prog_start = 0;
+ int program_length = 48;
+ int i = 0, j = 0, k = 0;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t buring_data[256]; // Read for flash data, 128K
+ // 4 bytes for 0x80002C padding
+
+ himax_interface_on(client);
+
+ //=====================================
+ // SPI Transfer Format : 0x8000_0010 ==> 0x0002_0780
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x10;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x02;
+ tmp_data[1] = 0x07;
+ tmp_data[0] = 0x80;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ for (page_prog_start = 0; page_prog_start < FW_Size; page_prog_start = page_prog_start + 256)
+ {
+ //msleep(5);
+ //=====================================
+ // Write Enable : 1. 0x8000_0020 ==> 0x4700_0000
+ // 2. 0x8000_0024 ==> 0x0000_0006
+ //=====================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x47;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x06;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=================================
+ // SPI Transfer Control
+ // Set 256 bytes page write : 0x8000_0020 ==> 0x610F_F000
+ // Set read start address : 0x8000_0028 ==> 0x0000_0000
+ //=================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ tmp_data[3] = 0x61;
+ tmp_data[2] = 0x0F;
+ tmp_data[1] = 0xF0;
+ tmp_data[0] = 0x00;
+ // data bytes should be 0x6100_0000 + ((word_number)*4-1)*4096 = 0x6100_0000 + 0xFF000 = 0x610F_F000
+ // Programmable size = 1 page = 256 bytes, word_number = 256 byte / 4 = 64
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x28;
+ //tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0x00; tmp_data[0] = 0x00; // Flash start address 1st : 0x0000_0000
+
+ if (page_prog_start < 0x100)
+ {
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = (uint8_t)page_prog_start;
+ }
+ else if (page_prog_start >= 0x100 && page_prog_start < 0x10000)
+ {
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = (uint8_t)(page_prog_start >> 8);
+ tmp_data[0] = (uint8_t)page_prog_start;
+ }
+ else if (page_prog_start >= 0x10000 && page_prog_start < 0x1000000)
+ {
+ tmp_data[3] = 0x00;
+ tmp_data[2] = (uint8_t)(page_prog_start >> 16);
+ tmp_data[1] = (uint8_t)(page_prog_start >> 8);
+ tmp_data[0] = (uint8_t)page_prog_start;
+ }
+
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+
+ //=================================
+ // Send 16 bytes data : 0x8000_002C ==> 16 bytes data
+ //=================================
+ buring_data[0] = 0x2C;
+ buring_data[1] = 0x00;
+ buring_data[2] = 0x00;
+ buring_data[3] = 0x80;
+
+ for (i = /*0*/page_prog_start, j = 0; i < 16 + page_prog_start/**/; i++, j++) /// <------ bin file
+ {
+ buring_data[j + 4] = FW_content[i];
+ }
+
+
+ if ( i2c_himax_write(client, 0x00,buring_data, 20, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+ //=================================
+ // Write command : 0x8000_0024 ==> 0x0000_0002
+ //=================================
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x24;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x02;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ //=================================
+ // Send 240 bytes data : 0x8000_002C ==> 240 bytes data
+ //=================================
+
+ for (j = 0; j < 5; j++)
+ {
+ for (i = (page_prog_start + 16 + (j * 48)), k = 0; i < (page_prog_start + 16 + (j * 48)) + program_length; i++, k++) /// <------ bin file
+ {
+ buring_data[k+4] = FW_content[i];//(byte)i;
+ }
+
+ if ( i2c_himax_write(client, 0x00,buring_data, program_length+4, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return;
+ }
+
+ }
+
+ if (!wait_wip(client, 1))
+ E("%s:83112_Flash_Programming Fail\n", __func__);
+ }
+}
+
+
+bool himax_check_chip_version(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t ret_data = false;
+ int i = 0;
+
+ for (i = 0; i < 5; i++)
+ {
+ // Product ID
+ // Touch
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xD0;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s:Read driver IC ID = %X,%X,%X\n", __func__, tmp_data[3],tmp_data[2],tmp_data[1]);
+ if ((tmp_data[3] == 0x83) && (tmp_data[2] == 0x11) && (tmp_data[1] == 0x2a))
+ {
+ IC_TYPE = HX_83112A_SERIES_PWON;
+ ret_data = true;
+ break;
+ }
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+ else if ((tmp_data[3] == 0x83) && (tmp_data[2] == 0x11) && (tmp_data[1] == 0x2b))
+ {
+ IC_TYPE = HX_83112B_SERIES_PWON;
+ ret_data = true;
+ break;
+ }
+/*[Arima_8710][allen_yu] 20180828 end*/
+ else
+ {
+ ret_data = false;
+ E("%s:Read driver ID register Fail:\n", __func__);
+ }
+ }
+
+ return ret_data;
+}
+
+bool Calculate_CRC_with_AP(unsigned char *FW_content, int CRC_from_FW, int mode)
+{
+ return true;
+}
+
+uint32_t himax_hw_check_CRC(struct i2c_client *client, uint8_t *start_addr, int reload_length)
+{
+ uint32_t result = 0;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ int cnt = 0;
+ int length = reload_length / 4;
+
+ //CRC4 // 0x8005_0020 <= from, 0x8005_0028 <= 0x0099_length
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x05;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x20;
+ //tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0xFB; tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, start_addr);
+
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x05;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x28;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x99;
+ tmp_data[1] = (length >> 8);
+ tmp_data[0] = length;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+
+ cnt = 0;
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x05;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ do
+ {
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ if ((tmp_data[0] & 0x01) != 0x01)
+ {
+ tmp_addr[3] = 0x80;
+ tmp_addr[2] = 0x05;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x18;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+ I("%s: tmp_data[3]=%X, tmp_data[2]=%X, tmp_data[1]=%X, tmp_data[0]=%X \n", __func__, tmp_data[3], tmp_data[2], tmp_data[1], tmp_data[0]);
+ result = ((tmp_data[3] << 24) + (tmp_data[2] << 16) + (tmp_data[1] << 8) + tmp_data[0]);
+ break;
+ }
+ }
+ while (cnt++ < 100);
+
+ return result;
+}
+
+void himax_flash_page_write(struct i2c_client *client, uint8_t *write_addr, uint8_t *write_data)
+{
+
+}
+
+void himax_set_reload_cmd(uint8_t *write_data, int idx, uint32_t cmd_from, uint32_t cmd_to, uint32_t cmd_beat)
+{
+ int index = idx * 12;
+ int i;
+ for (i = 3; i >= 0; i--)
+ {
+ write_data[index + i] = (cmd_from >> (8 * i));
+ write_data[index + 4 + i] = (cmd_to >> (8 * i));
+ write_data[index + 8 + i] = (cmd_beat >> (8 * i));
+ }
+}
+
+bool himax_program_reload(struct i2c_client *client)
+{
+ return true;
+}
+
+int fts_ctpm_fw_upgrade_with_sys_fs_32k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref)
+{
+ /* Not use */
+ return 0;
+}
+
+int fts_ctpm_fw_upgrade_with_sys_fs_60k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref)
+{
+ /* Not use */
+ return 0;
+}
+
+int fts_ctpm_fw_upgrade_with_sys_fs_64k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref) //Alice - Un
+{
+
+ //int CRC_from_FW = 0;
+ int burnFW_success = 0;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ if (len != FW_SIZE_64k) //64k
+ {
+ E("%s: The file size is not 64K bytes\n", __func__);
+ return false;
+ }
+
+#ifdef HX_RST_PIN_FUNC
+ himax_ic_reset(false,false);
+#else
+ //===AHBI2C_SystemReset==========
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x55;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+#endif
+
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+ himax_enter_safe_mode(client);
+/*[Arima_7947][allen_yu] 20180129 end*/
+ himax_chip_erase(client);
+ himax_flash_programming(client, fw, FW_SIZE_64k);
+
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+
+ if(himax_hw_check_CRC(client,tmp_data, FW_SIZE_64k) == 0)
+ {
+ burnFW_success = 1;
+ }
+ else
+ {
+ burnFW_success = 0;
+ }
+ /*RawOut select initial*/
+ tmp_addr[3] = 0x80;tmp_addr[2] = 0x02;tmp_addr[1] = 0x04;tmp_addr[0] = 0xB4;
+ tmp_data[3] = 0x00;tmp_data[2] = 0x00;tmp_data[1] = 0x00;tmp_data[0] = 0x00;
+ himax_register_write(client,tmp_addr, 4, tmp_data, false);
+
+ /*DSRAM func initial*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x07;tmp_addr[0] = 0xFC;
+ tmp_data[3] = 0x00;tmp_data[2] = 0x00;tmp_data[1] = 0x00;tmp_data[0] = 0x00;
+ himax_register_write(client,tmp_addr, 4, tmp_data, false);
+
+#ifdef HX_RST_PIN_FUNC
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID0404_D01_C06 and modify the node to access fw_ver 20180118 begin*/
+ himax_ic_reset(true,false);
+/*[Arima_7947][allen_yu] 20180118 end*/
+#else
+ //===AHBI2C_SystemReset==========
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x55;
+ himax_register_write(client, tmp_addr, 4, tmp_data, false);
+#endif
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID0404_D01_C06 and modify the node to access fw_ver 20180118 begin*/
+ msleep(800);
+ himax_read_FW_ver(private_ts->client);
+/*[Arima_7947][allen_yu] 20180118 end*/
+ return burnFW_success;
+
+}
+
+int fts_ctpm_fw_upgrade_with_sys_fs_124k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref)
+{
+ /* Not use */
+ return 0;
+}
+
+int fts_ctpm_fw_upgrade_with_sys_fs_128k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref)
+{
+ /* Not use */
+ return 0;
+}
+
+void himax_touch_information(struct i2c_client *client)
+{
+#ifndef HX_FIX_TOUCH_INFO
+ uint8_t cmd[4];
+ char data[12] = {0};
+
+ I("%s:IC_TYPE =%d\n", __func__,IC_TYPE);
+
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+ //if(IC_TYPE == HX_83112A_SERIES_PWON)
+ if((IC_TYPE == HX_83112A_SERIES_PWON)||(IC_TYPE == HX_83112B_SERIES_PWON))
+/*[Arima_8710][allen_yu] 20180828 end*/
+ {
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0xF4;
+ himax_register_read(client, cmd, 8, data, false);
+ ic_data->HX_RX_NUM = data[2];
+ ic_data->HX_TX_NUM = data[3];
+ ic_data->HX_MAX_PT = data[4];
+ //I("%s : HX_RX_NUM=%d,ic_data->HX_TX_NUM=%d,ic_data->HX_MAX_PT=%d\n",__func__,ic_data->HX_RX_NUM,ic_data->HX_TX_NUM,ic_data->HX_MAX_PT);
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0xFA;
+ himax_register_read(client, cmd, 4, data, false);
+ //I("%s : c_data->HX_XY_REVERSE=0x%2.2X\n",__func__,data[1]);
+ if((data[1] & 0x04) == 0x04)
+ {
+ ic_data->HX_XY_REVERSE = true;
+ }
+ else
+ {
+ ic_data->HX_XY_REVERSE = false;
+ }
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0xFC;
+ himax_register_read(client, cmd, 4, data, false);
+ ic_data->HX_Y_RES = data[0]*256;
+ ic_data->HX_Y_RES = ic_data->HX_Y_RES + data[1];
+ ic_data->HX_X_RES = data[2]*256 + data[3];
+ //I("%s : ic_data->HX_Y_RES=%d,ic_data->HX_X_RES=%d \n",__func__,ic_data->HX_Y_RES,ic_data->HX_X_RES);
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0x89;
+ himax_register_read(client, cmd, 4, data, false);
+ //I("%s : data[0]=0x%2.2X,data[1]=0x%2.2X,data[2]=0x%2.2X,data[3]=0x%2.2X\n",__func__,data[0],data[1],data[2],data[3]);
+ //I("data[0] & 0x01 = %d\n",(data[0] & 0x01));
+ if((data[0] & 0x01) == 1)
+ {
+ ic_data->HX_INT_IS_EDGE = true;
+ }
+ else
+ {
+ ic_data->HX_INT_IS_EDGE = false;
+ }
+
+ if (ic_data->HX_RX_NUM > 40)
+ ic_data->HX_RX_NUM = 32;
+ if (ic_data->HX_TX_NUM > 20)
+ ic_data->HX_TX_NUM = 18;
+ if (ic_data->HX_MAX_PT > 10)
+ ic_data->HX_MAX_PT = 10;
+ if (ic_data->HX_Y_RES > 2000)
+ ic_data->HX_Y_RES = 1280;
+ if (ic_data->HX_X_RES > 2000)
+ ic_data->HX_X_RES = 720;
+
+ /*Read number of MKey R100070E8H*/
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0xE8;
+ himax_register_read(client, cmd, 4,data, false);
+ //I("%s: data[0] = 0x%02X,data[1] = 0x%02X,data[2] = 0x%02X,data[3] = 0x%02X\n", __func__,data[0],data[1],data[2],data[3]);
+ ic_data->HX_BT_NUM = data[0] & 0x03;
+ }
+ else
+ {
+ ic_data->HX_RX_NUM = 0;
+ ic_data->HX_TX_NUM = 0;
+ ic_data->HX_BT_NUM = 0;
+ ic_data->HX_X_RES = 0;
+ ic_data->HX_Y_RES = 0;
+ ic_data->HX_MAX_PT = 0;
+ ic_data->HX_XY_REVERSE = false;
+ ic_data->HX_INT_IS_EDGE = false;
+ }
+#else
+/*[Arima_8710][allen_yu] Dynamic detect touch golden value 20180929 begin*/
+ if(IC_TYPE == HX_83112A_SERIES_PWON) {
+ ic_data->HX_RX_NUM = FIX_HX_RX_NUM;
+ ic_data->HX_TX_NUM = FIX_HX_TX_NUM;
+ ic_data->HX_BT_NUM = FIX_HX_BT_NUM;
+ ic_data->HX_X_RES = FIX_HX_X_RES;
+ ic_data->HX_Y_RES = FIX_HX_Y_RES;
+ ic_data->HX_MAX_PT = FIX_HX_MAX_PT;
+ ic_data->HX_XY_REVERSE = FIX_HX_XY_REVERSE;
+ ic_data->HX_INT_IS_EDGE = FIX_HX_INT_IS_EDGE;
+ }
+ else {
+ ic_data->HX_RX_NUM = SEC_FIX_HX_RX_NUM;
+ ic_data->HX_TX_NUM = SEC_FIX_HX_TX_NUM;
+ ic_data->HX_BT_NUM = SEC_FIX_HX_BT_NUM;
+ ic_data->HX_X_RES = SEC_FIX_HX_X_RES;
+ ic_data->HX_Y_RES = SEC_FIX_HX_Y_RES;
+ ic_data->HX_MAX_PT = SEC_FIX_HX_MAX_PT;
+ ic_data->HX_XY_REVERSE = SEC_FIX_HX_XY_REVERSE;
+ ic_data->HX_INT_IS_EDGE = SEC_FIX_HX_INT_IS_EDGE;
+ }
+/*[Arima_8710][allen_yu] 20180929 end*/
+#endif
+ I("%s:HX_RX_NUM =%d,HX_TX_NUM =%d,HX_MAX_PT=%d \n", __func__,ic_data->HX_RX_NUM,ic_data->HX_TX_NUM,ic_data->HX_MAX_PT);
+ I("%s:HX_XY_REVERSE =%d,HX_Y_RES =%d,HX_X_RES=%d \n", __func__,ic_data->HX_XY_REVERSE,ic_data->HX_Y_RES,ic_data->HX_X_RES);
+ I("%s:HX_INT_IS_EDGE =%d \n", __func__,ic_data->HX_INT_IS_EDGE);
+}
+
+int himax_read_i2c_status(struct i2c_client *client)
+{
+ return i2c_error_count; //
+}
+
+int himax_read_ic_trigger_type(struct i2c_client *client)
+{
+ uint8_t cmd[4];
+ char data[12] = {0};
+ int trigger_type = false;
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0x89;
+ himax_register_read(client, cmd, 4, data, false);
+ if((data[0] & 0x01) == 1)
+ {
+ trigger_type = true;
+ }
+ else
+ {
+ trigger_type = false;
+ }
+
+ return trigger_type;
+}
+
+void himax_read_FW_ver(struct i2c_client *client)
+{
+ uint8_t cmd[4];
+ uint8_t data[64];
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID0404_D01_C06 and modify the node to access fw_ver 20180118 begin*/
+ uint8_t cmd_2[4];
+ uint8_t data_2[64];
+/*[Arima_7947][allen_yu] 20180118 end*/
+/*[Arima_7947][allen_yu] Modify Int trigger way and upgrade himax fw to CID0404_D01_C02 20171228 begin*/
+ int retry = 20;
+/*[Arima_7947][allen_yu] 20171228 end*/
+ int reload_status = 0;
+ while(reload_status == 0)
+ {
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x7f;
+ cmd[0] = 0x00;
+ himax_register_read(client, cmd, 4, data, false);
+
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID0404_D01_C06 and modify the node to access fw_ver 20180118 begin*/
+ cmd_2[3] = 0x10;
+ cmd_2[2] = 0x00;
+ cmd_2[1] = 0x72;
+ cmd_2[0] = 0xc0;
+ himax_register_read(client, cmd_2, 4, data_2, false);
+
+ if((data[3]==0x00 && data[2]==0x00 && data[1]==0x3A && data[0]==0xA3 )
+ ||(data_2[3]==0x00 && data_2[2]==0x00 && data_2[1]==0x72 && data_2[0]==0xC0 ))
+/*[Arima_7947][allen_yu] 20180118 end*/
+ {
+ I("reload OK! \n");
+ reload_status = 1;
+ break;
+ }
+ else if(retry == 0)
+ {
+ E("reload 20 times! fail \n");
+ ic_data->vendor_panel_ver = 0;
+ ic_data->vendor_fw_ver = 0;
+ ic_data->vendor_config_ver = 0;
+ ic_data->vendor_touch_cfg_ver = 0;
+ ic_data->vendor_display_cfg_ver = 0;
+ ic_data->vendor_cid_maj_ver = 0;
+ ic_data->vendor_cid_min_ver = 0;
+ return;
+ }
+ else
+ {
+/*[Arima_7947][allen_yu] Upgrade himax fw to CID0404_D01_C06 and modify the node to access fw_ver 20180118 begin*/
+ I("%s: 0x10007f00, data[0]=%x,data[1]=%x,data[2]=%x,data[3]=%x \n", __func__, data[0],data[1],data[2],data[3]);
+ I("%s: 0x100072c0, data[0]=%x,data[1]=%x,data[2]=%x,data[3]=%x \n", __func__, data_2[0],data_2[1],data_2[2],data_2[3]);
+
+ cmd[3] = 0x90; cmd[2] = 0x00; cmd[1] = 0x00; cmd[0] = 0xA8;
+ himax_register_read(client, cmd, 4, data, false);
+ I("%s: 0x900000A8, data[0]=%x,data[1]=%x,data[2]=%x,data[3]=%x \n", __func__, data[0],data[1],data[2],data[3]);
+
+ cmd[3] = 0x90; cmd[2] = 0x00; cmd[1] = 0x00; cmd[0] = 0xE4;
+ himax_register_read(client, cmd, 4, data, false);
+ I("%s: 0x900000E4, data[0]=%x,data[1]=%x,data[2]=%x,data[3]=%x \n", __func__, data[0],data[1],data[2],data[3]);
+
+ cmd[3] = 0x10; cmd[2] = 0x00; cmd[1] = 0x7F; cmd[0] = 0x40;
+ himax_register_read(client, cmd, 4, data, false);
+ I("%s: 0x10007F40, data[0]=%x,data[1]=%x,data[2]=%x,data[3]=%x \n", __func__, data[0],data[1],data[2],data[3]);
+
+/*[Arima_7947][allen_yu] 20180118 end*/
+ retry --;
+ msleep(10);
+ I("reload fail ,delay 10ms retry=%d\n",retry);
+ }
+ }
+ I("%s : data[0]=0x%2.2X,data[1]=0x%2.2X,data[2]=0x%2.2X,data[3]=0x%2.2X\n",__func__,data[0],data[1],data[2],data[3]);
+ I("reload_status=%d\n",reload_status);
+
+ himax_sense_off(client);
+
+ //=====================================
+ // Read FW version : 0x1000_7004 but 05,06 are the real addr for FW Version
+ //=====================================
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0x04;
+ himax_register_read(client, cmd, 4, data, false);
+
+ ic_data->vendor_panel_ver = data[0];
+ ic_data->vendor_fw_ver = data[1] << 8 | data[2];
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+ ic_data->vendor_hx_ic_id = data[3];
+/*[Arima_8710][allen_yu] 20180830 end*/
+
+ I("PANEL_VER : %X \n",ic_data->vendor_panel_ver);
+ I("FW_VER : %X \n",ic_data->vendor_fw_ver);
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+ I("IC_ID : %X \n",ic_data->vendor_hx_ic_id);
+/*[Arima_8710][allen_yu] 20180830 end*/
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0x84;
+ himax_register_read(client, cmd, 4, data, false);
+
+ ic_data->vendor_config_ver = data[2] << 8 | data[3];
+ //I("CFG_VER : %X \n",ic_data->vendor_config_ver);
+ ic_data->vendor_touch_cfg_ver = data[2];
+ I("TOUCH_VER : %X \n",ic_data->vendor_touch_cfg_ver);
+ ic_data->vendor_display_cfg_ver = data[3];
+ I("DISPLAY_VER : %X \n",ic_data->vendor_display_cfg_ver);
+
+
+ cmd[3] = 0x10;
+ cmd[2] = 0x00;
+ cmd[1] = 0x70;
+ cmd[0] = 0x00;
+ himax_register_read(client, cmd, 4, data, false);
+
+ ic_data->vendor_cid_maj_ver = data[2] ;
+ ic_data->vendor_cid_min_ver = data[3];
+
+ I("CID_VER : %X \n",(ic_data->vendor_cid_maj_ver << 8 | ic_data->vendor_cid_min_ver));
+ return;
+}
+
+bool himax_ic_package_check(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+ uint8_t ret_data = 0x00;
+ int i = 0;
+
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+ himax_enter_safe_mode(client);
+/*[Arima_7947][allen_yu] 20180129 end*/
+ for (i = 0; i < 5; i++)
+ {
+// Product ID
+ // Touch
+ tmp_addr[3] = 0x90;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0xD0;
+ himax_register_read(client, tmp_addr, 4, tmp_data, false);
+
+ I("%s:Read driver IC ID = %X,%X,%X\n", __func__, tmp_data[3],tmp_data[2],tmp_data[1]);
+ if ((tmp_data[3] == 0x83) && (tmp_data[2] == 0x11) && ((tmp_data[1] == 0x2a)||(tmp_data[1] == 0x2b)))
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+ {
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+/*[Arima_8710][allen_yu] 20180828 end*/
+ IC_CHECKSUM = HX_TP_BIN_CHECKSUM_CRC;
+ //Himax: Set FW and CFG Flash Address
+ FW_VER_MAJ_FLASH_ADDR = 49157; //0x00C005
+ FW_VER_MAJ_FLASH_LENG = 1;
+ FW_VER_MIN_FLASH_ADDR = 49158; //0x00C006
+ FW_VER_MIN_FLASH_LENG = 1;
+ CFG_VER_MAJ_FLASH_ADDR = 49408; //0x00C100
+ CFG_VER_MAJ_FLASH_LENG = 1;
+ CFG_VER_MIN_FLASH_ADDR = 49409; //0x00C101
+ CFG_VER_MIN_FLASH_LENG = 1;
+ CID_VER_MAJ_FLASH_ADDR = 49154; //0x00C002
+ CID_VER_MAJ_FLASH_LENG = 1;
+ CID_VER_MIN_FLASH_ADDR = 49155; //0x00C003
+ CID_VER_MIN_FLASH_LENG = 1;
+ //PANEL_VERSION_ADDR = 49156; //0x00C004
+ //PANEL_VERSION_LENG = 1;
+/*[Arima_8710][allen_yu] 20180830 end*/
+ if ((tmp_data[3] == 0x83) && (tmp_data[2] == 0x11) && (tmp_data[1] == 0x2a))
+ {
+ IC_TYPE = HX_83112A_SERIES_PWON;
+#ifdef HX_AUTO_UPDATE_FW
+ g_i_FW_VER = i_CTPM_FW_HX83112A[FW_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW_HX83112A[FW_VER_MIN_FLASH_ADDR];
+ g_i_CFG_VER = i_CTPM_FW_HX83112A[CFG_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW_HX83112A[CFG_VER_MIN_FLASH_ADDR];
+ g_i_CID_MAJ = i_CTPM_FW_HX83112A[CID_VER_MAJ_FLASH_ADDR];
+ g_i_CID_MIN = i_CTPM_FW_HX83112A[CID_VER_MIN_FLASH_ADDR];
+#endif
+ }
+ else
+ {
+ IC_TYPE = HX_83112B_SERIES_PWON;
+#ifdef HX_AUTO_UPDATE_FW
+ printk("%s: (%d)No need check 2nd ic package\n", __func__, __LINE__);
+ g_i_FW_VER = i_CTPM_FW_HX83112B[FW_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW_HX83112B[FW_VER_MIN_FLASH_ADDR];
+ g_i_CFG_VER = i_CTPM_FW_HX83112B[CFG_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW_HX83112B[CFG_VER_MIN_FLASH_ADDR];
+ g_i_CID_MAJ = i_CTPM_FW_HX83112B[CID_VER_MAJ_FLASH_ADDR];
+ g_i_CID_MIN = i_CTPM_FW_HX83112B[CID_VER_MIN_FLASH_ADDR];
+#endif
+ }
+/*[Arima_8710][allen_yu] Modify the touch fw dynamic auto upgtade rule 20180830 begin*/
+#if 0
+/*[Arima_8710][allen_yu] 20180828 end*/
+ IC_CHECKSUM = HX_TP_BIN_CHECKSUM_CRC;
+ //Himax: Set FW and CFG Flash Address
+ FW_VER_MAJ_FLASH_ADDR = 49157; //0x00C005
+ FW_VER_MAJ_FLASH_LENG = 1;
+ FW_VER_MIN_FLASH_ADDR = 49158; //0x00C006
+ FW_VER_MIN_FLASH_LENG = 1;
+ CFG_VER_MAJ_FLASH_ADDR = 49408; //0x00C100
+ CFG_VER_MAJ_FLASH_LENG = 1;
+ CFG_VER_MIN_FLASH_ADDR = 49409; //0x00C101
+ CFG_VER_MIN_FLASH_LENG = 1;
+ CID_VER_MAJ_FLASH_ADDR = 49154; //0x00C002
+ CID_VER_MAJ_FLASH_LENG = 1;
+ CID_VER_MIN_FLASH_ADDR = 49155; //0x00C003
+ CID_VER_MIN_FLASH_LENG = 1;
+ //PANEL_VERSION_ADDR = 49156; //0x00C004
+ //PANEL_VERSION_LENG = 1;
+#endif
+/*[Arima_8710][allen_yu] 20180830 end*/
+/*[Arima_8710][allen_yu] Dynamic detect Yandex LCM/TP 2nd source and add PCBA node 20180828 begin*/
+#if 0
+ g_i_FW_VER = i_CTPM_FW[FW_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW[FW_VER_MIN_FLASH_ADDR];
+ g_i_CFG_VER = i_CTPM_FW[CFG_VER_MAJ_FLASH_ADDR]<<8 |i_CTPM_FW[CFG_VER_MIN_FLASH_ADDR];
+ g_i_CID_MAJ = i_CTPM_FW[CID_VER_MAJ_FLASH_ADDR];
+ g_i_CID_MIN = i_CTPM_FW[CID_VER_MIN_FLASH_ADDR];
+#endif
+/*[Arima_8710][allen_yu] 20180828 end*/
+ I("Himax IC package 83112_in\n");
+ ret_data = true;
+/*[Arima_7947][allen_yu] Enter save mode when i2c fail 20180129 begin*/
+ himax_sense_on(client, 0);
+/*[Arima_7947][allen_yu] 20180129 end*/
+ break;
+ }
+ else
+ {
+ ret_data = false;
+ E("%s:Read driver ID register Fail:\n", __func__);
+ }
+ }
+
+ return ret_data;
+}
+
+void himax_power_on_init(struct i2c_client *client)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ I("%s:\n", __func__);
+ himax_touch_information(client);
+
+ /*RawOut select initial*/
+ tmp_addr[3] = 0x80;tmp_addr[2] = 0x02;tmp_addr[1] = 0x04;tmp_addr[0] = 0xB4;
+ tmp_data[3] = 0x00;tmp_data[2] = 0x00;tmp_data[1] = 0x00;tmp_data[0] = 0x00;
+ himax_register_write(client,tmp_addr, 4, tmp_data, false);
+
+ /*DSRAM func initial*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x07;tmp_addr[0] = 0xFC;
+ tmp_data[3] = 0x00;tmp_data[2] = 0x00;tmp_data[1] = 0x00;tmp_data[0] = 0x00;
+ himax_register_write(client,tmp_addr, 4, tmp_data, false);
+
+ himax_sense_on(client, 0x00);
+}
+
+bool himax_read_event_stack(struct i2c_client *client, uint8_t *buf, uint8_t length) //Alice - Un
+{
+ uint8_t cmd[4];
+
+ // AHB_I2C Burst Read Off
+ cmd[0] = 0x00;
+ if ( i2c_himax_write(client, 0x11,cmd, 1, DEFAULT_RETRY_CNT) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return 0;
+ }
+
+ i2c_himax_read(client, 0x30, buf, length,DEFAULT_RETRY_CNT);
+
+ // AHB_I2C Burst Read On
+ cmd[0] = 0x01;
+ if ( i2c_himax_write(client, 0x11,cmd, 1, 3) < 0)
+ {
+ E("%s: i2c access fail!\n", __func__);
+ return 0;
+ }
+ return 1;
+}
+
+void himax_get_DSRAM_data(struct i2c_client *client, uint8_t *info_data)
+{
+ int i = 0;
+ //int cnt = 0;
+ unsigned char tmp_addr[4];
+ unsigned char tmp_data[4];
+ uint8_t max_i2c_size = 128;
+ uint8_t x_num = ic_data->HX_RX_NUM;
+ uint8_t y_num = ic_data->HX_TX_NUM;
+ int m_key_num = 0;
+ int total_size = (x_num * y_num + x_num + y_num) * 2 + 4;
+ int total_size_temp;
+ int mutual_data_size = x_num * y_num * 2;
+ int total_read_times = 0;
+ int address = 0;
+ uint8_t *temp_info_data; //max mkey size = 8
+ uint16_t check_sum_cal = 0;
+ int fw_run_flag = -1;
+ //uint16_t temp_check_sum_cal = 0;
+
+ temp_info_data = kzalloc(sizeof(uint8_t)*(total_size + 8),GFP_KERNEL);
+
+ /*1. Read number of MKey R100070E8H to determin data size*/
+ m_key_num = ic_data->HX_BT_NUM;
+ //I("%s,m_key_num=%d\n",__func__,m_key_num);
+ total_size += m_key_num*2;
+
+ /* 2. Start DSRAM Rawdata and Wait Data Ready */
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x5A;
+ tmp_data[0] = 0xA5;
+ fw_run_flag = himax_write_read_reg(client,tmp_addr,tmp_data,0xA5,0x5A);
+
+ if(fw_run_flag < 0)
+ {
+ I("%s Data NOT ready => bypass \n", __func__);
+ kfree(temp_info_data);
+ return;
+ }
+
+ /* 3. Read RawData */
+ total_size_temp = total_size;
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+
+ if (total_size % max_i2c_size == 0)
+ {
+ total_read_times = total_size / max_i2c_size;
+ }
+ else
+ {
+ total_read_times = total_size / max_i2c_size + 1;
+ }
+
+ for (i = 0; i < (total_read_times); i++)
+ {
+ if ( total_size_temp >= max_i2c_size)
+ {
+ himax_register_read(client, tmp_addr, max_i2c_size, &temp_info_data[i*max_i2c_size], false);
+ total_size_temp = total_size_temp - max_i2c_size;
+ }
+ else
+ {
+ //I("last total_size_temp=%d\n",total_size_temp);
+ himax_register_read(client, tmp_addr, total_size_temp % max_i2c_size, &temp_info_data[i*max_i2c_size], false);
+ }
+
+ address = ((i+1)*max_i2c_size);
+ tmp_addr[1] = (uint8_t)((address>>8)&0x00FF);
+ tmp_addr[0] = (uint8_t)((address)&0x00FF);
+ }
+
+ /* 4. FW stop outputing */
+ //I("DSRAM_Flag=%d\n",DSRAM_Flag);
+ if(DSRAM_Flag == false)
+ {
+ //I("Return to Event Stack!\n");
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+ else
+ {
+ //I("Continue to SRAM!\n");
+ tmp_addr[3] = 0x10;
+ tmp_addr[2] = 0x00;
+ tmp_addr[1] = 0x00;
+ tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x11;
+ tmp_data[2] = 0x22;
+ tmp_data[1] = 0x33;
+ tmp_data[0] = 0x44;
+ himax_flash_write_burst(client, tmp_addr, tmp_data);
+ }
+
+ /* 5. Data Checksum Check */
+ for (i = 2; i < total_size; i=i+2)/* 2:PASSWORD NOT included */
+ {
+ check_sum_cal += (temp_info_data[i+1]*256 + temp_info_data[i]);
+ }
+
+ if (check_sum_cal % 0x10000 != 0)
+ {
+ I("%s check_sum_cal fail=%2X \n", __func__, check_sum_cal);
+ kfree(temp_info_data);
+ return;
+ }
+ else
+ {
+ memcpy(info_data, &temp_info_data[4], mutual_data_size * sizeof(uint8_t));
+ //I("%s checksum PASS \n", __func__);
+ }
+ kfree(temp_info_data);
+}
+
+bool himax_calculateChecksum(struct i2c_client *client, bool change_iref)
+{
+ uint8_t CRC_result = 0;
+ uint8_t tmp_data[4];
+
+ tmp_data[3] = 0x00;
+ tmp_data[2] = 0x00;
+ tmp_data[1] = 0x00;
+ tmp_data[0] = 0x00;
+
+ CRC_result = himax_hw_check_CRC(client,tmp_data, FW_SIZE_64k);
+
+ msleep(50);
+
+ return !CRC_result;
+}
+
+//ts_work
+int cal_data_len(int raw_cnt_rmd, int HX_MAX_PT, int raw_cnt_max)
+{
+ int RawDataLen;
+ if (raw_cnt_rmd != 0x00)
+ {
+ RawDataLen = 128 - ((HX_MAX_PT+raw_cnt_max+3)*4) - 1;
+ }
+ else
+ {
+ RawDataLen = 128 - ((HX_MAX_PT+raw_cnt_max+2)*4) - 1;
+ }
+ return RawDataLen;
+}
+
+bool diag_check_sum( struct himax_report_data *hx_touch_data ) //return checksum value
+{
+ uint16_t check_sum_cal = 0;
+ int i;
+
+ //Check 128th byte CRC
+ for (i = 0, check_sum_cal = 0; i < (hx_touch_data->touch_all_size - hx_touch_data->touch_info_size); i=i+2)
+ {
+ check_sum_cal += (hx_touch_data->hx_rawdata_buf[i+1]*256 + hx_touch_data->hx_rawdata_buf[i]);
+ }
+ if (check_sum_cal % 0x10000 != 0)
+ {
+ I("%s fail=%2X \n", __func__, check_sum_cal);
+ return 0;
+ //goto bypass_checksum_failed_packet;
+ }
+
+ return 1;
+}
+
+
+void diag_parse_raw_data(struct himax_report_data *hx_touch_data,int mul_num, int self_num,uint8_t diag_cmd, int32_t *mutual_data, int32_t *self_data)
+{
+ int RawDataLen_word;
+ int index = 0;
+ int temp1, temp2,i;
+
+ if (hx_touch_data->hx_rawdata_buf[0] == 0x3A
+ && hx_touch_data->hx_rawdata_buf[1] == 0xA3
+ && hx_touch_data->hx_rawdata_buf[2] > 0
+ && hx_touch_data->hx_rawdata_buf[3] == diag_cmd )
+ {
+ RawDataLen_word = hx_touch_data->rawdata_size/2;
+ index = (hx_touch_data->hx_rawdata_buf[2] - 1) * RawDataLen_word;
+ //I("Header[%d]: %x, %x, %x, %x, mutual: %d, self: %d\n", index, buf[56], buf[57], buf[58], buf[59], mul_num, self_num);
+ //I("RawDataLen=%d , RawDataLen_word=%d , hx_touch_info_size=%d\n", RawDataLen, RawDataLen_word, hx_touch_info_size);
+ for (i = 0; i < RawDataLen_word; i++)
+ {
+ temp1 = index + i;
+
+ if (temp1 < mul_num)
+ {
+ //mutual
+ mutual_data[index + i] = hx_touch_data->hx_rawdata_buf[i*2 + 4 + 1]*256 + hx_touch_data->hx_rawdata_buf[i*2 + 4]; //4: RawData Header, 1:HSB
+ }
+ else
+ {
+ //self
+ temp1 = i + index;
+ temp2 = self_num + mul_num;
+
+ if (temp1 >= temp2)
+ {
+ break;
+ }
+ self_data[i+index-mul_num] = hx_touch_data->hx_rawdata_buf[i*2 + 4]; //4: RawData Header
+ self_data[i+index-mul_num+1] = hx_touch_data->hx_rawdata_buf[i*2 + 4 + 1];
+ }
+ }
+ }
+
+}
+uint8_t himax_read_DD_status(uint8_t *cmd_set, uint8_t *tmp_data)
+{
+ int cnt = 0;
+ uint8_t req_size = cmd_set[0];
+ uint8_t cmd_addr[4] = {0xFC, 0x00, 0x00, 0x90}; //0x900000FC -> cmd and hand shaking
+ uint8_t tmp_addr[4] = {0x80, 0x7F, 0x00, 0x10}; //0x10007F80 -> data space
+
+ cmd_set[3] = 0xAA;
+ himax_register_write(private_ts->client, cmd_addr, 4, cmd_set, 0);
+
+ I("%s: cmd_set[0] = 0x%02X,cmd_set[1] = 0x%02X,cmd_set[2] = 0x%02X,cmd_set[3] = 0x%02X\n", __func__,cmd_set[0],cmd_set[1],cmd_set[2],cmd_set[3]);
+
+ for (cnt = 0; cnt < 100; cnt++) //doing hand shaking 0xAA -> 0xBB
+ {
+ himax_register_read(private_ts->client, cmd_addr, 4, tmp_data, false);
+ //I("%s: tmp_data[0] = 0x%02X,tmp_data[1] = 0x%02X,tmp_data[2] = 0x%02X,tmp_data[3] = 0x%02X, cnt=%d\n", __func__,tmp_data[0],tmp_data[1],tmp_data[2],tmp_data[3],cnt);
+ msleep(10);
+ if(tmp_data[3] == 0xBB)
+ {
+ I("%s Data ready goto moving data\n", __func__);
+ break;
+ }
+ else if(cnt >= 99)
+ {
+ I("%s Data not ready in FW \n", __func__);
+ return FW_NOT_READY;
+ }
+ }
+ himax_register_read(private_ts->client, tmp_addr, req_size, tmp_data, false);
+ return NO_ERR;
+}
+
+int himax_read_FW_status(uint8_t *state_addr, uint8_t *tmp_addr)
+{
+ uint8_t req_size = 0;
+ uint8_t status_addr[4] = {0x44, 0x7F, 0x00, 0x10}; //0x10007F44
+ uint8_t cmd_addr[4] = {0xF8, 0x00, 0x00, 0x90}; //0x900000F8
+
+ if(state_addr[0]==0x01)
+ {
+ state_addr[1]= 0x04;
+ state_addr[2]= status_addr[0];state_addr[3]= status_addr[1];state_addr[4]= status_addr[2];state_addr[5]= status_addr[3];
+ req_size = 0x04;
+ himax_sense_off(private_ts->client);
+ himax_register_read(private_ts->client, status_addr, req_size, tmp_addr, false);
+ himax_sense_on(private_ts->client,1);
+ }
+ else if(state_addr[0]==0x02)
+ {
+ state_addr[1]= 0x30;
+ state_addr[2]= cmd_addr[0];state_addr[3]= cmd_addr[1];state_addr[4]= cmd_addr[2];state_addr[5]= cmd_addr[3];
+ req_size = 0x30;
+ himax_register_read(private_ts->client, cmd_addr, req_size, tmp_addr, false);
+ }
+
+ return NO_ERR;
+}
+
+#if defined(HX_SMART_WAKEUP)||defined(HX_HIGH_SENSE)||defined(HX_USB_DETECT_GLOBAL)
+void himax_resend_cmd_func(bool suspended)
+{
+ struct himax_ts_data *ts;
+
+ ts = private_ts;
+
+#ifdef HX_SMART_WAKEUP
+ himax_set_SMWP_enable(ts->client,ts->SMWP_enable,suspended);
+#endif
+#ifdef HX_HIGH_SENSE
+ himax_set_HSEN_enable(ts->client,ts->HSEN_enable,suspended);
+#endif
+#ifdef HX_USB_DETECT_GLOBAL
+ himax_cable_detect_func(true);
+#endif
+}
+#endif
+
+void himax_resume_ic_action(struct i2c_client *client)
+{
+ return;
+}
+
+void himax_suspend_ic_action(struct i2c_client *client)
+{
+ return;
+}
+
+#ifdef HX_ZERO_FLASH
+int G_POWERONOF = 1;
+void himax_sys_reset(void)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ // 0x10007f00 -> 0x0000A55A //Diable Flash Reload
+ tmp_addr[3] = 0x10; tmp_addr[2] = 0x00; tmp_addr[1] = 0x7F; tmp_addr[0] = 0x00;
+ tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0x9A; tmp_data[0] = 0xA9;
+ himax_flash_write_burst(private_ts->client,tmp_addr, tmp_data);
+
+ msleep(100);
+
+ tmp_addr[3] = 0x90; tmp_addr[2] = 0x00; tmp_addr[1] = 0x00; tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0x00; tmp_data[0] = 0x55;
+ himax_register_write(private_ts->client,tmp_addr, 4, tmp_data, false);
+}
+void himax_clean_sram_0f(uint8_t *addr,int write_len,int type)
+{
+ int total_read_times = 0;
+ int max_bus_size = 128;
+ int total_size_temp = 0;
+ int total_size = 0;
+ int address = 0;
+ int i = 0;
+
+ uint8_t fix_data = 0x00;
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[128]={0};
+
+ I("%s,Entering \n",__func__);
+
+ total_size = write_len;
+
+ total_size_temp = write_len;
+
+ I("[log]enable start!\n");
+ himax_burst_enable(private_ts->client,1);
+ I("[log]enable end!\n");
+
+ tmp_addr[3] = addr[3]; tmp_addr[2] = addr[2]; tmp_addr[1] = addr[1]; tmp_addr[0] = addr[0];
+ I("%s, write addr tmp_addr[3]=0x%2.2X, tmp_addr[2]=0x%2.2X, tmp_addr[1]=0x%2.2X, tmp_addr[0]=0x%2.2X\n",__func__,tmp_addr[3],tmp_addr[2],tmp_addr[1],tmp_addr[0]);
+
+
+ switch(type)
+ {
+ case 0:
+ fix_data = 0x00;
+ break;
+ case 1:
+ fix_data = 0xAA;
+ break;
+ case 2:
+ fix_data = 0xBB;
+ break;
+ }
+
+ for(i = 0;i<128;i++)
+ {
+ tmp_data[i] = fix_data;
+ }
+
+
+ I("%s, total size=%d\n",__func__,total_size);
+
+ if (total_size_temp % max_bus_size == 0)
+ {
+ total_read_times = total_size_temp / max_bus_size;
+ }
+ else
+ {
+ total_read_times = total_size_temp / max_bus_size + 1;
+ }
+
+ for (i = 0; i < (total_read_times); i++)
+ {
+ I("[log]write %d time start!\n",i);
+ if ( total_size_temp >= max_bus_size)
+ {
+ himax_flash_write_burst_lenth(private_ts->client,tmp_addr,tmp_data, max_bus_size);
+ total_size_temp = total_size_temp - max_bus_size;
+ }
+ else
+ {
+ I("last total_size_temp=%d\n",total_size_temp);
+ himax_flash_write_burst_lenth(private_ts->client,tmp_addr,tmp_data, total_size_temp % max_bus_size);
+ }
+ address = ((i+1)*max_bus_size);
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF);
+ tmp_addr[0] = addr[0] + (uint8_t)((address)&0x00FF);
+
+ msleep(10);
+ }
+
+ I("%s,END \n",__func__);
+}
+
+void himax_write_sram_0f(const struct firmware *fw_entry,uint8_t *addr,int start_index,int write_len)
+{
+ int total_read_times = 0;
+ int max_bus_size = 128;
+ int total_size_temp = 0;
+ int total_size = 0;
+ int address = 0;
+ int i = 0;
+
+ uint8_t tmp_addr[4];
+ uint8_t *tmp_data;
+ uint32_t now_addr;
+
+ I("%s,Entering \n",__func__);
+
+ total_size = 65536;
+
+ total_size_temp = write_len;
+
+ I("[log]enable start!\n");
+ himax_burst_enable(private_ts->client,1);
+ I("[log]enable end!\n");
+
+ tmp_addr[3] = addr[3]; tmp_addr[2] = addr[2]; tmp_addr[1] = addr[1]; tmp_addr[0] = addr[0];
+ I("%s, write addr tmp_addr[3]=0x%2.2X, tmp_addr[2]=0x%2.2X, tmp_addr[1]=0x%2.2X, tmp_addr[0]=0x%2.2X\n",__func__,tmp_addr[3],tmp_addr[2],tmp_addr[1],tmp_addr[0]);
+ now_addr = (addr[3] << 24) + (addr[2] << 16) + (addr[1] << 8) + addr[0];
+ I("now addr= 0x%08X\n",now_addr);
+
+ I("%s, total size=%d\n",__func__,total_size);
+
+ //I("[log]locate start!\n");
+ tmp_data = kzalloc(sizeof(uint8_t)*total_size,GFP_KERNEL);
+ //I("[log]enable end!\n");
+ //I("[log]memcpy start!\n");
+ memcpy(tmp_data,fw_entry->data,total_size);
+ //I("[log]memcpy end!\n");
+
+ I("tmp_data size=%d\n",(int)sizeof(tmp_data));
+
+ for(i = 0;i<10;i++)
+ {
+ I("[%d] 0x%2.2X",i,tmp_data[i]);
+ }
+ I("\n");
+ if (total_size_temp % max_bus_size == 0)
+ {
+ total_read_times = total_size_temp / max_bus_size;
+ }
+ else
+ {
+ total_read_times = total_size_temp / max_bus_size + 1;
+ }
+
+ for (i = 0; i < (total_read_times); i++)
+ {
+ I("[log]write %d time start!\n",i);
+ if ( total_size_temp >= max_bus_size)
+ {
+ himax_flash_write_burst_lenth(private_ts->client,tmp_addr,&(tmp_data[start_index+i*max_bus_size]), max_bus_size);
+ total_size_temp = total_size_temp - max_bus_size;
+ }
+ else
+ {
+ I("last total_size_temp=%d\n",total_size_temp);
+ himax_flash_write_burst_lenth(private_ts->client,tmp_addr,&(tmp_data[start_index+i*max_bus_size]), total_size_temp % max_bus_size);
+ }
+ I("[log]write %d time end!\n",i);
+ address = ((i+1)*max_bus_size);
+ tmp_addr[0] = addr[0] + (uint8_t)((address)&0x00FF);
+ if(tmp_addr[0] < addr[0])
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF) + 1;
+ else
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF);
+
+
+ msleep(10);
+ }
+ I("%s,END \n",__func__);
+ kfree(tmp_data);
+}
+
+void himax_firmware_update_0f(const struct firmware *fw_entry)
+{
+ uint8_t tmp_addr[4];
+ uint8_t tmp_data[4];
+
+ I("%s,Entering \n",__func__);
+
+ tmp_addr[3] = 0x90; tmp_addr[2] = 0x00; tmp_addr[1] = 0x00; tmp_addr[0] = 0x18;
+ tmp_data[3] = 0x00; tmp_data[2] = 0x00; tmp_data[1] = 0x00; tmp_data[0] = 0x55;
+ himax_register_write(private_ts->client,tmp_addr, 4, tmp_data, false);
+
+ himax_sense_off(private_ts->client);
+
+ himax_chip_erase(private_ts->client);
+
+ /* first 48K */
+ tmp_addr[3] = 0x08;tmp_addr[2] = 0x00;tmp_addr[1] = 0x00;tmp_addr[0] = 0x00;
+ himax_write_sram_0f(fw_entry,tmp_addr,0,0xC000);
+
+
+ /* clean */
+ if(G_POWERONOF == 1)
+ {
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x00;tmp_addr[0] = 0x00;
+ himax_clean_sram_0f(tmp_addr,32768,0);
+ }
+
+ /*last 16k*/
+ /*config info*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x70;tmp_addr[0] = 0x00;
+ if(G_POWERONOF == 1)
+ himax_write_sram_0f(fw_entry,tmp_addr,0xC000,132);
+ else
+ himax_clean_sram_0f(tmp_addr,132,2);
+ /*FW config*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x70;tmp_addr[0] = 0x84;
+ if(G_POWERONOF == 1)
+ himax_write_sram_0f(fw_entry,tmp_addr,0xC0FE,512); //0xc100-2
+ else
+ himax_clean_sram_0f(tmp_addr,512,1);
+ /*ADC config*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x78;tmp_addr[0] = 0x00;
+ if(G_POWERONOF == 1)
+ himax_write_sram_0f(fw_entry,tmp_addr,0xD000,376);
+ else
+ himax_clean_sram_0f(tmp_addr,376,2);
+
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x79;tmp_addr[0] = 0x78;
+ if(G_POWERONOF == 1)
+ himax_write_sram_0f(fw_entry,tmp_addr,0xD178,376);
+ else
+ himax_clean_sram_0f(tmp_addr,376,2);
+
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x7A;tmp_addr[0] = 0xF0;
+ if(G_POWERONOF == 1)
+ himax_write_sram_0f(fw_entry,tmp_addr,0xD000,376);
+ else
+ himax_clean_sram_0f(tmp_addr,376,2);
+
+ //G_POWERONOF = 0;
+
+ I("%s,END \n",__func__);
+}
+void himax_0f_operation(struct work_struct *work)
+{
+ int err = NO_ERR;
+ const struct firmware *fw_entry = NULL;
+ char *firmware_name = "himax.bin";
+ uint8_t tmp_data[4];
+
+ I("%s,Entering \n",__func__);
+ I("file name = %s\n",firmware_name);
+ err = request_firmware(&fw_entry, firmware_name, private_ts->dev);
+ if (err < 0) {
+ E("%s,fail in line%d error code=%d\n",__func__,__LINE__,err);
+ //goto err_request_firmware;
+ return ;
+ }
+ himax_firmware_update_0f(fw_entry);
+ release_firmware(fw_entry);
+
+ tmp_data[0] = 0x00;tmp_data[1] = 0x00;tmp_data[2] = 0x00;tmp_data[3] = 0x08;
+ if(himax_hw_check_CRC(private_ts->client,tmp_data, 0xC000) == 0)
+ {
+ I("%s,HW CRC OK!\n",__func__);
+ }
+ else
+ {
+ E("%s,HW CRC FAIL!\n",__func__);
+ }
+
+ msleep(100);
+ himax_sys_reset();
+ msleep(100);
+ himax_int_enable(private_ts->client->irq,1);
+
+ I("%s,END \n",__func__);
+ return ;
+}
+
+#ifdef HX_0F_DEBUG
+void himax_read_sram_0f(const struct firmware *fw_entry,uint8_t *addr,int start_index,int read_len)
+{
+ int total_read_times = 0;
+ int max_i2c_size = 128;
+ int total_size_temp = 0;
+ int total_size = 0;
+ int address = 0;
+ int i = 0,j = 0;
+ int not_same = 0;
+
+ uint8_t tmp_addr[4];
+ uint8_t *temp_info_data;
+ int *not_same_buff;
+
+ I("%s,Entering \n",__func__);
+
+ himax_burst_enable(private_ts->client,1);
+
+ total_size = read_len;
+
+ total_size_temp = read_len;
+
+ temp_info_data = kzalloc(sizeof(uint8_t)*total_size,GFP_KERNEL);
+ not_same_buff = kzalloc(sizeof(int)*total_size,GFP_KERNEL);
+
+
+ tmp_addr[3] = addr[3]; tmp_addr[2] = addr[2]; tmp_addr[1] = addr[1]; tmp_addr[0] = addr[0];
+ I("%s, read addr tmp_addr[3]=0x%2.2X, tmp_addr[2]=0x%2.2X, tmp_addr[1]=0x%2.2X, tmp_addr[0]=0x%2.2X\n",__func__,tmp_addr[3],tmp_addr[2],tmp_addr[1],tmp_addr[0]);
+
+ I("%s, total size=%d\n",__func__,total_size);
+
+ himax_burst_enable(private_ts->client,1);
+
+ if (total_size % max_i2c_size == 0)
+ {
+ total_read_times = total_size / max_i2c_size;
+ }
+ else
+ {
+ total_read_times = total_size / max_i2c_size + 1;
+ }
+
+ for (i = 0; i < (total_read_times); i++)
+ {
+ if ( total_size_temp >= max_i2c_size)
+ {
+ himax_register_read(private_ts->client,tmp_addr, max_i2c_size, &temp_info_data[i*max_i2c_size], false);
+ total_size_temp = total_size_temp - max_i2c_size;
+ }
+ else
+ {
+ //I("last total_size_temp=%d\n",total_size_temp);
+ himax_register_read(private_ts->client,tmp_addr, total_size_temp % max_i2c_size, &temp_info_data[i*max_i2c_size], false);
+ }
+
+ address = ((i+1)*max_i2c_size);
+ tmp_addr[0] = addr[0] + (uint8_t)((address)&0x00FF);
+ if(tmp_addr[0] < addr[0])
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF) + 1;
+ else
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF);
+
+ msleep(10);
+ }
+ I("%s,READ Start \n",__func__);
+ I("%s,start_index = %d \n",__func__,start_index);
+ j = start_index;
+ for(i = 0;i < read_len;i++,j++)
+ {
+ if(fw_entry->data[j] != temp_info_data[i])
+ {
+ not_same++;
+ not_same_buff[i] = 1;
+ }
+
+
+
+
+ I("0x%2.2X,",temp_info_data[i]);
+
+ if (i > 0 && i%16 == 15)
+ printk("\n");
+ }
+ I("%s,READ END \n",__func__);
+ I("%s,Not Same count=%d\n",__func__,not_same);
+ if(not_same != 0)
+ {
+ j = start_index;
+ for(i = 0;i<read_len;i++,j++)
+ {
+ if(not_same_buff[i] == 1)
+ I("bin = [%d] 0x%2.2X\n",i,fw_entry->data[j]);
+ }
+ for(i = 0;i<read_len;i++,j++)
+ {
+ if(not_same_buff[i] == 1)
+ I("sram = [%d] 0x%2.2X \n",i,temp_info_data[i]);
+ }
+ }
+ I("%s,END \n",__func__);
+
+ kfree(temp_info_data);
+}
+
+void himax_read_all_sram(uint8_t *addr,int read_len)
+{
+ int total_read_times = 0;
+ int max_bus_size = 128;
+ int total_size_temp = 0;
+ int total_size = 0;
+ int address = 0;
+ int i = 0;
+ struct file *fn;
+
+ uint8_t tmp_addr[4];
+ uint8_t *temp_info_data;
+
+ I("%s,Entering \n",__func__);
+
+ himax_burst_enable(private_ts->client,1);
+
+ total_size = read_len;
+
+ total_size_temp = read_len;
+
+ temp_info_data = kzalloc(sizeof(uint8_t)*total_size,GFP_KERNEL);
+
+
+ tmp_addr[3] = addr[3]; tmp_addr[2] = addr[2]; tmp_addr[1] = addr[1]; tmp_addr[0] = addr[0];
+ I("%s, read addr tmp_addr[3]=0x%2.2X, tmp_addr[2]=0x%2.2X, tmp_addr[1]=0x%2.2X, tmp_addr[0]=0x%2.2X\n",__func__,tmp_addr[3],tmp_addr[2],tmp_addr[1],tmp_addr[0]);
+
+ I("%s, total size=%d\n",__func__,total_size);
+
+ if (total_size % max_bus_size == 0)
+ {
+ total_read_times = total_size / max_bus_size;
+ }
+ else
+ {
+ total_read_times = total_size / max_bus_size + 1;
+ }
+
+ for (i = 0; i < (total_read_times); i++)
+ {
+ if ( total_size_temp >= max_bus_size)
+ {
+ himax_register_read(private_ts->client,tmp_addr, max_bus_size, &temp_info_data[i*max_bus_size], false);
+ total_size_temp = total_size_temp - max_bus_size;
+ }
+ else
+ {
+ //I("last total_size_temp=%d\n",total_size_temp);
+ himax_register_read(private_ts->client,tmp_addr, total_size_temp % max_bus_size, &temp_info_data[i*max_bus_size], false);
+ }
+
+ address = ((i+1)*max_bus_size);
+ tmp_addr[1] = addr[1] + (uint8_t)((address>>8)&0x00FF);
+ tmp_addr[0] = addr[0] + (uint8_t)((address)&0x00FF);
+
+ msleep(10);
+ }
+ I("%s, NOW addr tmp_addr[3]=0x%2.2X, tmp_addr[2]=0x%2.2X, tmp_addr[1]=0x%2.2X, tmp_addr[0]=0x%2.2X\n",__func__,tmp_addr[3],tmp_addr[2],tmp_addr[1],tmp_addr[0]);
+ /*for(i = 0;i<read_len;i++)
+ {
+ I("0x%2.2X,",temp_info_data[i]);
+
+ if (i > 0 && i%16 == 15)
+ printk("\n");
+ }*/
+
+
+ I("Now Write File start!\n");
+ fn = filp_open("/sdcard/dump_dsram.txt",O_CREAT | O_WRONLY ,0);
+ if (!IS_ERR(fn))
+ {
+ I("%s create file and ready to write\n",__func__);
+ fn->f_op->write(fn,temp_info_data,read_len*sizeof(uint8_t),&fn->f_pos);
+ filp_close(fn,NULL);
+ }
+ I("Now Write File End!\n");
+
+
+ I("%s,END \n",__func__);
+
+ kfree(temp_info_data);
+}
+
+void himax_firmware_read_0f(const struct firmware *fw_entry)
+{
+ uint8_t tmp_addr[4];
+
+ I("%s,Entering \n",__func__);
+ /* first 48K */
+ tmp_addr[3] = 0x08;tmp_addr[2] = 0x00;tmp_addr[1] = 0x00;tmp_addr[0] = 0x00;
+ himax_read_sram_0f(fw_entry,tmp_addr,0,0xC000);
+
+ /*last 16k*/
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x70;tmp_addr[0] = 0x00;
+ himax_read_sram_0f(fw_entry,tmp_addr,0xC000,132);
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x70;tmp_addr[0] = 0x84;
+ himax_read_sram_0f(fw_entry,tmp_addr,0xC0FE,512);//0xc100-2
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x78;tmp_addr[0] = 0x00;
+ himax_read_sram_0f(fw_entry,tmp_addr,0xD000,376);
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x79;tmp_addr[0] = 0x78;
+ himax_read_sram_0f(fw_entry,tmp_addr,0xD178,376);
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x7A;tmp_addr[0] = 0xF0;
+ himax_read_sram_0f(fw_entry,tmp_addr,0xD000,376);
+
+ tmp_addr[3] = 0x10;tmp_addr[2] = 0x00;tmp_addr[1] = 0x00;tmp_addr[0] = 0x00;
+ himax_read_all_sram(tmp_addr,32768);
+ I("%s,END \n",__func__);
+}
+
+void himax_0f_operation_check(void)
+{
+ int err = NO_ERR;
+ const struct firmware *fw_entry = NULL;
+ char *firmware_name = "himax.bin";
+
+
+ I("%s,Entering \n",__func__);
+ I("file name = %s\n",firmware_name);
+
+ err = request_firmware(&fw_entry, firmware_name, private_ts->dev);
+ if (err < 0) {
+ E("%s,fail in line%d error code=%d\n",__func__,__LINE__,err);
+ //goto err_request_firmware;
+ return ;
+ }
+
+ I("first 4 bytes 0x%2X,0x%2X,0x%2X,0x%2X !\n",fw_entry->data[0],fw_entry->data[1],fw_entry->data[2],fw_entry->data[3]);
+ I("next 4 bytes 0x%2X,0x%2X,0x%2X,0x%2X !\n",fw_entry->data[4],fw_entry->data[5],fw_entry->data[6],fw_entry->data[7]);
+ I("and next 4 bytes 0x%2X,0x%2X,0x%2X,0x%2X !\n",fw_entry->data[8],fw_entry->data[9],fw_entry->data[10],fw_entry->data[11]);
+
+ himax_firmware_read_0f(fw_entry);
+
+ release_firmware(fw_entry);
+ I("%s,END \n",__func__);
+ return ;
+}
+#endif
+
+#endif
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_ic.h b/drivers/input/touchscreen/hxchipset83112b/himax_ic.h
new file mode 100644
index 0000000..3241427
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_ic.h
@@ -0,0 +1,82 @@
+/* Himax Android Driver Sample Code for HX83112 chipset
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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 "himax_platform.h"
+#include "himax_common.h"
+#include <linux/slab.h>
+
+#define HIMAX_REG_RETRY_TIMES 5
+
+enum fw_image_type
+{
+ fw_image_32k = 0x01,
+ fw_image_48k,
+ fw_image_60k,
+ fw_image_64k,
+ fw_image_124k,
+ fw_image_128k,
+};
+
+int himax_hand_shaking(struct i2c_client *client);
+void himax_set_SMWP_enable(struct i2c_client *client,uint8_t SMWP_enable, bool suspended);
+void himax_set_HSEN_enable(struct i2c_client *client,uint8_t HSEN_enable, bool suspended);
+void himax_usb_detect_set(struct i2c_client *client,uint8_t *cable_config);
+int himax_determin_diag_rawdata(int diag_command);
+int himax_determin_diag_storage(int diag_command);
+void himax_diag_register_set(struct i2c_client *client, uint8_t diag_command);
+void himax_flash_dump_func(struct i2c_client *client, uint8_t local_flash_command, int Flash_Size, uint8_t *flash_buffer);
+int himax_chip_self_test(struct i2c_client *client);
+void himax_burst_enable(struct i2c_client *client, uint8_t auto_add_4_byte); ////himax_83110_BURST_INC0_EN
+void himax_register_read(struct i2c_client *client, uint8_t *read_addr, int read_length, uint8_t *read_data, bool cfg_flag); ////RegisterRead83110
+void himax_flash_read(struct i2c_client *client, uint8_t *reg_byte, uint8_t *read_data); ////himax_83110_Flash_Read
+void himax_flash_write_burst(struct i2c_client *client, uint8_t * reg_byte, uint8_t * write_data); ////himax_83110_Flash_Write_Burst
+void himax_flash_write_burst_lenth(struct i2c_client *client, uint8_t *reg_byte, uint8_t *write_data, int length); ////himax_83110_Flash_Write_Burst_lenth
+void himax_register_write(struct i2c_client *client, uint8_t *write_addr, int write_length, uint8_t *write_data, bool cfg_flag); ////RegisterWrite83110
+bool himax_sense_off(struct i2c_client *client); ////himax_83110_SenseOff
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+bool himax_enter_safe_mode(struct i2c_client *client);
+/*[Arima_7947][allen_yu] 20180129 end*/
+void himax_interface_on(struct i2c_client *client); ////himax_83110_Interface_on
+bool wait_wip(struct i2c_client *client, int Timing);
+void himax_sense_on(struct i2c_client *client, uint8_t FlashMode); ////himax_83110_SenseOn
+void himax_chip_erase(struct i2c_client *client); ////himax_83110_Chip_Erase
+bool himax_block_erase(struct i2c_client *client); ////himax_83110_Block_Erase
+void himax_flash_programming(struct i2c_client *client, uint8_t *FW_content, int FW_Size); ////himax_83110_Flash_Programming
+bool himax_check_chip_version(struct i2c_client *client); ////himax_83110_CheckChipVersion
+int himax_check_CRC(struct i2c_client *client, int mode); ////himax_83110_Check_CRC
+int fts_ctpm_fw_upgrade_with_sys_fs_32k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref);
+int fts_ctpm_fw_upgrade_with_sys_fs_60k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref);
+int fts_ctpm_fw_upgrade_with_sys_fs_64k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref);
+int fts_ctpm_fw_upgrade_with_sys_fs_124k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref);
+int fts_ctpm_fw_upgrade_with_sys_fs_128k(struct i2c_client *client, unsigned char *fw, int len, bool change_iref);
+void himax_touch_information(struct i2c_client *client);
+int himax_read_i2c_status(struct i2c_client *client);
+int himax_read_ic_trigger_type(struct i2c_client *client);
+void himax_read_FW_ver(struct i2c_client *client);
+bool himax_ic_package_check(struct i2c_client *client);
+void himax_power_on_init(struct i2c_client *client);
+bool himax_read_event_stack(struct i2c_client *client, uint8_t *buf, uint8_t length);
+void himax_get_DSRAM_data(struct i2c_client *client, uint8_t *info_data);
+bool himax_calculateChecksum(struct i2c_client *client, bool change_iref);
+bool himax_program_reload(struct i2c_client *client);//5442 Program_Reload
+uint8_t himax_read_DD_status(uint8_t *cmd_set, uint8_t *tmp_data);
+int himax_read_FW_status(uint8_t *state_addr, uint8_t *tmp_addr);
+void himax_resume_ic_action(struct i2c_client *client);
+void himax_suspend_ic_action(struct i2c_client *client);
+
+//ts_work
+int cal_data_len(int raw_cnt_rmd, int HX_MAX_PT, int raw_cnt_max);
+bool diag_check_sum(struct himax_report_data *hx_touch_data); //return checksum value
+void diag_parse_raw_data(struct himax_report_data *hx_touch_data,int mul_num, int self_num,uint8_t diag_cmd, int32_t *mutual_data, int32_t *self_data);
\ No newline at end of file
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_platform.c b/drivers/input/touchscreen/hxchipset83112b/himax_platform.c
new file mode 100644
index 0000000..08cf2ec
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_platform.c
@@ -0,0 +1,828 @@
+/* Himax Android Driver Sample Code for QCT platform
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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 "himax_platform.h"
+#include "himax_common.h"
+#include "himax_ic.h"
+
+int i2c_error_count = 0;
+int irq_enable_count = 0;
+
+extern struct himax_ic_data* ic_data;
+extern struct himax_ts_data *private_ts;
+extern void himax_ts_work(struct himax_ts_data *ts);
+extern enum hrtimer_restart himax_ts_timer_func(struct hrtimer *timer);
+
+#ifdef HX_TP_PROC_DIAG
+extern uint8_t getDiagCommand(void);
+#endif
+
+extern void himax_log_touch_int_devation(int touched);
+
+
+int himax_dev_set(struct himax_ts_data *ts)
+{
+ int ret = 0;
+
+ ts->input_dev = input_allocate_device();
+ if (ts->input_dev == NULL)
+ {
+ ret = -ENOMEM;
+ E("%s: Failed to allocate input device\n", __func__);
+ return ret;
+ }
+ ts->input_dev->name = "himax-touchscreen";
+
+ return ret;
+}
+int himax_input_register_device(struct input_dev *input_dev)
+{
+ return input_register_device(input_dev);
+}
+
+#if defined(HX_PLATFOME_DEFINE_KEY)
+void himax_platform_key(void)
+{
+ I("Nothing to be done! Plz cancel it!\n");
+}
+#endif
+
+void himax_vk_parser(struct device_node *dt,
+ struct himax_i2c_platform_data *pdata)
+{
+ u32 data = 0;
+ uint8_t cnt = 0, i = 0;
+ uint32_t coords[4] = {0};
+ struct device_node *node, *pp = NULL;
+ struct himax_virtual_key *vk;
+
+ node = of_parse_phandle(dt, "virtualkey", 0);
+ if (node == NULL)
+ {
+ I(" DT-No vk info in DT");
+ return;
+ }
+ else
+ {
+ while ((pp = of_get_next_child(node, pp)))
+ cnt++;
+ if (!cnt)
+ return;
+
+ vk = kzalloc(cnt * (sizeof *vk), GFP_KERNEL);
+ pp = NULL;
+ while ((pp = of_get_next_child(node, pp)))
+ {
+ if (of_property_read_u32(pp, "idx", &data) == 0)
+ vk[i].index = data;
+ if (of_property_read_u32_array(pp, "range", coords, 4) == 0)
+ {
+ vk[i].x_range_min = coords[0], vk[i].x_range_max = coords[1];
+ vk[i].y_range_min = coords[2], vk[i].y_range_max = coords[3];
+ }
+ else
+ I(" range faile");
+ i++;
+ }
+ pdata->virtual_key = vk;
+ for (i = 0; i < cnt; i++)
+ I(" vk[%d] idx:%d x_min:%d, y_max:%d", i,pdata->virtual_key[i].index,
+ pdata->virtual_key[i].x_range_min, pdata->virtual_key[i].y_range_max);
+ }
+}
+
+int himax_parse_dt(struct himax_ts_data *ts,
+ struct himax_i2c_platform_data *pdata)
+{
+ int rc, coords_size = 0;
+ uint32_t coords[4] = {0};
+ struct property *prop;
+ struct device_node *dt = ts->client->dev.of_node;
+ u32 data = 0;
+ //printk("AllenYu_7-1\n");
+ prop = of_find_property(dt, "himax,panel-coords", NULL);
+ if (prop)
+ {
+ coords_size = prop->length / sizeof(u32);
+ if (coords_size != 4)
+ D(" %s:Invalid panel coords size %d", __func__, coords_size);
+ }
+ //printk("AllenYu_7-2\n");
+ if (of_property_read_u32_array(dt, "himax,panel-coords", coords, coords_size) == 0)
+ {
+ pdata->abs_x_min = coords[0], pdata->abs_x_max = coords[1];
+ pdata->abs_y_min = coords[2], pdata->abs_y_max = coords[3];
+ I(" DT-%s:panel-coords = %d, %d, %d, %d\n", __func__, pdata->abs_x_min,
+ pdata->abs_x_max, pdata->abs_y_min, pdata->abs_y_max);
+ }
+ //printk("AllenYu_7-3\n");
+ prop = of_find_property(dt, "himax,display-coords", NULL);
+ if (prop)
+ {
+ coords_size = prop->length / sizeof(u32);
+ if (coords_size != 4)
+ D(" %s:Invalid display coords size %d", __func__, coords_size);
+ }
+ //printk("AllenYu_7-4\n");
+ rc = of_property_read_u32_array(dt, "himax,display-coords", coords, coords_size);
+ if (rc && (rc != -EINVAL))
+ {
+ D(" %s:Fail to read display-coords %d\n", __func__, rc);
+ return rc;
+ }
+ //printk("AllenYu_7-5\n");
+ pdata->screenWidth = coords[1];
+ pdata->screenHeight = coords[3];
+ I(" DT-%s:display-coords = (%d, %d)", __func__, pdata->screenWidth,
+ pdata->screenHeight);
+ //printk("AllenYu_7-6\n");
+ pdata->gpio_irq = of_get_named_gpio(dt, "himax,irq-gpio", 0);
+ if (!gpio_is_valid(pdata->gpio_irq))
+ {
+ I(" DT:gpio_irq value is not valid\n");
+ }
+ //printk("AllenYu_7-7\n");
+ pdata->gpio_reset = of_get_named_gpio(dt, "himax,rst-gpio", 0);
+ if (!gpio_is_valid(pdata->gpio_reset))
+ {
+ I(" DT:gpio_rst value is not valid\n");
+ }
+ //printk("AllenYu_7-8\n");
+ pdata->gpio_3v3_en = of_get_named_gpio(dt, "himax,3v3-gpio", 0);
+ if (!gpio_is_valid(pdata->gpio_3v3_en))
+ {
+ I(" DT:gpio_3v3_en value is not valid\n");
+ }
+ I(" DT:gpio_irq=%d, gpio_rst=%d, gpio_3v3_en=%d", pdata->gpio_irq, pdata->gpio_reset, pdata->gpio_3v3_en);
+
+ if (of_property_read_u32(dt, "report_type", &data) == 0)
+ {
+ pdata->protocol_type = data;
+ I(" DT:protocol_type=%d", pdata->protocol_type);
+ }
+ //printk("AllenYu_7-9\n");
+ himax_vk_parser(dt, pdata);
+
+ return 0;
+}
+
+int i2c_himax_read(struct i2c_client *client, uint8_t command, uint8_t *data, uint8_t length, uint8_t toRetry)
+{
+ int retry;
+ struct i2c_msg msg[] =
+ {
+ {
+ .addr = client->addr,
+ .flags = 0,
+ .len = 1,
+ .buf = &command,
+ },
+ {
+ .addr = client->addr,
+ .flags = I2C_M_RD,
+ .len = length,
+ .buf = data,
+ }
+ };
+
+ mutex_lock(&private_ts->rw_lock);
+ for (retry = 0; retry < toRetry; retry++)
+ {
+ if (i2c_transfer(client->adapter, msg, 2) == 2)
+ break;
+ msleep(20);
+ }
+ if (retry == toRetry)
+ {
+ E("%s: i2c_read_block retry over %d\n",
+ __func__, toRetry);
+ i2c_error_count = toRetry;
+ mutex_unlock(&private_ts->rw_lock);
+ return -EIO;
+ }
+ mutex_unlock(&private_ts->rw_lock);
+ return 0;
+
+}
+
+int i2c_himax_write(struct i2c_client *client, uint8_t command, uint8_t *data, uint8_t length, uint8_t toRetry)
+{
+ int retry/*, loop_i*/;
+ uint8_t buf[length + 1];
+
+ struct i2c_msg msg[] =
+ {
+ {
+ .addr = client->addr,
+ .flags = 0,
+ .len = length + 1,
+ .buf = buf,
+ }
+ };
+
+ mutex_lock(&private_ts->rw_lock);
+ buf[0] = command;
+ memcpy(buf+1, data, length);
+
+ for (retry = 0; retry < toRetry; retry++)
+ {
+ if (i2c_transfer(client->adapter, msg, 1) == 1)
+ break;
+ msleep(20);
+ }
+
+ if (retry == toRetry)
+ {
+ E("%s: i2c_write_block retry over %d\n",
+ __func__, toRetry);
+ i2c_error_count = toRetry;
+ mutex_unlock(&private_ts->rw_lock);
+ return -EIO;
+ }
+ mutex_unlock(&private_ts->rw_lock);
+ return 0;
+
+}
+
+int i2c_himax_write_command(struct i2c_client *client, uint8_t command, uint8_t toRetry)
+{
+ return i2c_himax_write(client, command, NULL, 0, toRetry);
+}
+
+int i2c_himax_master_write(struct i2c_client *client, uint8_t *data, uint8_t length, uint8_t toRetry)
+{
+ int retry/*, loop_i*/;
+ uint8_t buf[length];
+
+ struct i2c_msg msg[] =
+ {
+ {
+ .addr = client->addr,
+ .flags = 0,
+ .len = length,
+ .buf = buf,
+ }
+ };
+ mutex_lock(&private_ts->rw_lock);
+ memcpy(buf, data, length);
+
+ for (retry = 0; retry < toRetry; retry++)
+ {
+ if (i2c_transfer(client->adapter, msg, 1) == 1)
+ break;
+ msleep(20);
+ }
+
+ if (retry == toRetry)
+ {
+ E("%s: i2c_write_block retry over %d\n",
+ __func__, toRetry);
+ i2c_error_count = toRetry;
+ mutex_unlock(&private_ts->rw_lock);
+ return -EIO;
+ }
+ mutex_unlock(&private_ts->rw_lock);
+ return 0;
+}
+
+void himax_int_enable(int irqnum, int enable)
+{
+ if (enable == 1 && irq_enable_count == 0)
+ {
+ enable_irq(irqnum);
+ irq_enable_count++;
+ private_ts->irq_enabled = 1;
+ }
+ else if (enable == 0 && irq_enable_count == 1)
+ {
+ disable_irq_nosync(irqnum);
+ irq_enable_count--;
+ private_ts->irq_enabled = 0;
+ }
+ I("irq_enable_count = %d", irq_enable_count);
+}
+
+#ifdef HX_RST_PIN_FUNC
+void himax_rst_gpio_set(int pinnum, uint8_t value)
+{
+ // gpio_direction_output(pinnum, value); // old
+ gpio_set_value(pinnum, value);
+}
+#endif
+
+uint8_t himax_int_gpio_read(int pinnum)
+{
+ return gpio_get_value(pinnum);
+}
+
+#if defined(CONFIG_HMX_DB)
+static int himax_regulator_configure(struct i2c_client *client,struct himax_i2c_platform_data *pdata)
+{
+ int retval;
+ pdata->vcc_dig = regulator_get(&client->dev,
+ "vdd");
+ if (IS_ERR(pdata->vcc_dig))
+ {
+ E("%s: Failed to get regulator vdd\n",
+ __func__);
+ retval = PTR_ERR(pdata->vcc_dig);
+ return retval;
+ }
+ pdata->vcc_ana = regulator_get(&client->dev,
+ "avdd");
+ if (IS_ERR(pdata->vcc_ana))
+ {
+ E("%s: Failed to get regulator avdd\n",
+ __func__);
+ retval = PTR_ERR(pdata->vcc_ana);
+ regulator_put(pdata->vcc_ana);
+ return retval;
+ }
+
+ return 0;
+};
+
+static int himax_power_on(struct himax_i2c_platform_data *pdata, bool on)
+{
+ int retval;
+
+ if (on)
+ {
+ retval = regulator_enable(pdata->vcc_dig);
+ if (retval)
+ {
+ E("%s: Failed to enable regulator vdd\n",
+ __func__);
+ return retval;
+ }
+ msleep(100);
+ retval = regulator_enable(pdata->vcc_ana);
+ if (retval)
+ {
+ E("%s: Failed to enable regulator avdd\n",
+ __func__);
+ regulator_disable(pdata->vcc_dig);
+ return retval;
+ }
+ }
+ else
+ {
+ regulator_disable(pdata->vcc_dig);
+ regulator_disable(pdata->vcc_ana);
+ }
+
+ return 0;
+}
+
+int himax_gpio_power_config(struct i2c_client *client,struct himax_i2c_platform_data *pdata)
+{
+ int error;
+
+ error = himax_regulator_configure(client, pdata);
+ if (error)
+ {
+ E("Failed to intialize hardware\n");
+ goto err_regulator_not_on;
+ }
+
+#ifdef HX_RST_PIN_FUNC
+ if (gpio_is_valid(pdata->gpio_reset))
+ {
+ /* configure touchscreen reset out gpio */
+ error = gpio_request(pdata->gpio_reset, "hmx_reset_gpio");
+ if (error)
+ {
+ E("unable to request gpio [%d]\n",
+ pdata->gpio_reset);
+ goto err_regulator_on;
+ }
+
+ error = gpio_direction_output(pdata->gpio_reset, 0);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",
+ pdata->gpio_reset);
+ goto err_gpio_reset_req;
+ }
+ }
+#endif
+
+ error = himax_power_on(pdata, true);
+ if (error)
+ {
+ E("Failed to power on hardware\n");
+ goto err_gpio_reset_req;
+ }
+
+ if (gpio_is_valid(pdata->gpio_irq))
+ {
+ /* configure touchscreen irq gpio */
+ error = gpio_request(pdata->gpio_irq, "hmx_gpio_irq");
+ if (error)
+ {
+ E("unable to request gpio [%d]\n",
+ pdata->gpio_irq);
+ goto err_power_on;
+ }
+ error = gpio_direction_input(pdata->gpio_irq);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",
+ pdata->gpio_irq);
+ goto err_gpio_irq_req;
+ }
+ client->irq = gpio_to_irq(pdata->gpio_irq);
+ }
+ else
+ {
+ E("irq gpio not provided\n");
+ goto err_power_on;
+ }
+
+ msleep(20);
+#ifdef HX_RST_PIN_FUNC
+ if (gpio_is_valid(pdata->gpio_reset))
+ {
+ error = gpio_direction_output(pdata->gpio_reset, 1);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",
+ pdata->gpio_reset);
+ goto err_gpio_irq_req;
+ }
+ }
+#endif
+ return 0;
+
+err_gpio_irq_req:
+ if (gpio_is_valid(pdata->gpio_irq))
+ gpio_free(pdata->gpio_irq);
+err_power_on:
+ himax_power_on(pdata, false);
+err_gpio_reset_req:
+#ifdef HX_RST_PIN_FUNC
+ if (gpio_is_valid(pdata->gpio_reset))
+ gpio_free(pdata->gpio_reset);
+err_regulator_on:
+#endif
+err_regulator_not_on:
+
+ return error;
+}
+
+#else
+int himax_gpio_power_config(struct i2c_client *client,struct himax_i2c_platform_data *pdata)
+{
+ int error=0;
+
+#ifdef HX_RST_PIN_FUNC
+ if (pdata->gpio_reset >= 0)
+ {
+ error = gpio_request(pdata->gpio_reset, "himax-reset");
+ if (error < 0)
+ {
+ E("%s: request reset pin failed\n", __func__);
+ return error;
+ }
+ error = gpio_direction_output(pdata->gpio_reset, 0);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",
+ pdata->gpio_reset);
+ return error;
+ }
+ }
+#endif
+ if (pdata->gpio_3v3_en >= 0)
+ {
+ error = gpio_request(pdata->gpio_3v3_en, "himax-3v3_en");
+ if (error < 0)
+ {
+ E("%s: request 3v3_en pin failed\n", __func__);
+ return error;
+ }
+ gpio_direction_output(pdata->gpio_3v3_en, 1);
+ I("3v3_en pin =%d\n", gpio_get_value(pdata->gpio_3v3_en));
+ }
+ if (gpio_is_valid(pdata->gpio_irq))
+ {
+ /* configure touchscreen irq gpio */
+ error = gpio_request(pdata->gpio_irq, "himax_gpio_irq");
+ if (error)
+ {
+ E("unable to request gpio [%d]\n",pdata->gpio_irq);
+ return error;
+ }
+ error = gpio_direction_input(pdata->gpio_irq);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",pdata->gpio_irq);
+ return error;
+ }
+ client->irq = gpio_to_irq(pdata->gpio_irq);
+ }
+ else
+ {
+ E("irq gpio not provided\n");
+ return error;
+ }
+ msleep(20);
+
+#ifdef HX_RST_PIN_FUNC
+ if (pdata->gpio_reset >= 0)
+ {
+ error = gpio_direction_output(pdata->gpio_reset, 1);
+ if (error)
+ {
+ E("unable to set direction for gpio [%d]\n",
+ pdata->gpio_reset);
+ return error;
+ }
+ }
+/*[Arima_7947][allen_yu] Enter safe mode when i2c fail 20180129 begin*/
+#if 0
+ msleep(20);
+#endif
+/*[Arima_7947][allen_yu] 20180129 end*/
+#endif
+
+ return error;
+}
+
+#endif
+
+static void himax_ts_isr_func(struct himax_ts_data *ts)
+{
+ himax_ts_work(ts);
+}
+
+irqreturn_t himax_ts_thread(int irq, void *ptr)
+{
+ struct himax_ts_data *ts = ptr;
+
+ if (ts->debug_log_level & BIT(2))
+ {
+ himax_log_touch_int_devation(HX_FINGER_ON);
+ }
+
+ himax_ts_isr_func((struct himax_ts_data *)ptr);
+
+ if(ts->debug_log_level & BIT(2))
+ {
+ himax_log_touch_int_devation(HX_FINGER_LEAVE);
+ }
+ return IRQ_HANDLED;
+}
+
+static void himax_ts_work_func(struct work_struct *work)
+{
+ struct himax_ts_data *ts = container_of(work, struct himax_ts_data, work);
+ himax_ts_work(ts);
+}
+
+int himax_int_register_trigger(struct i2c_client *client)
+{
+ int ret = 0;
+ struct himax_ts_data *ts = i2c_get_clientdata(client);
+
+ if(ic_data->HX_INT_IS_EDGE)
+ {
+ I("%s edge triiger falling\n ",__func__);
+ ret = request_threaded_irq(client->irq, NULL, himax_ts_thread,IRQF_TRIGGER_FALLING | IRQF_ONESHOT, client->name, ts);
+ }
+ else
+ {
+ I("%s level trigger low\n ",__func__);
+ ret = request_threaded_irq(client->irq, NULL, himax_ts_thread,IRQF_TRIGGER_LOW | IRQF_ONESHOT, client->name, ts);
+ }
+ return ret;
+}
+
+int himax_int_en_set(struct i2c_client *client)
+{
+ int ret = NO_ERR;
+ ret = himax_int_register_trigger(client);
+ return ret;
+}
+
+int himax_ts_register_interrupt(struct i2c_client *client)
+{
+ struct himax_ts_data *ts = i2c_get_clientdata(client);
+ int ret = 0;
+
+ ts->irq_enabled = 0;
+ //Work functon
+ if (client->irq) /*INT mode*/
+ {
+ ts->use_irq = 1;
+ ret = himax_int_register_trigger(client);
+ if (ret == 0)
+ {
+ ts->irq_enabled = 1;
+ irq_enable_count = 1;
+ I("%s: irq enabled at qpio: %d\n", __func__, client->irq);
+#ifdef HX_SMART_WAKEUP
+ irq_set_irq_wake(client->irq, 1);
+#endif
+ }
+ else
+ {
+ ts->use_irq = 0;
+ E("%s: request_irq failed\n", __func__);
+ }
+ }
+ else
+ {
+ I("%s: client->irq is empty, use polling mode.\n", __func__);
+ }
+
+ if (!ts->use_irq) /*if use polling mode need to disable HX_ESD_RECOVERY function*/
+ {
+ ts->himax_wq = create_singlethread_workqueue("himax_touch");
+
+ INIT_WORK(&ts->work, himax_ts_work_func);
+
+ hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+ ts->timer.function = himax_ts_timer_func;
+ hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL);
+ I("%s: polling mode enabled\n", __func__);
+ }
+ return ret;
+}
+
+static int himax_common_suspend(struct device *dev)
+{
+ struct himax_ts_data *ts = dev_get_drvdata(dev);
+
+ I("%s: enter \n", __func__);
+
+ himax_chip_common_suspend(ts);
+ return 0;
+}
+
+static int himax_common_resume(struct device *dev)
+{
+ struct himax_ts_data *ts = dev_get_drvdata(dev);
+
+ I("%s: enter \n", __func__);
+
+ himax_chip_common_resume(ts);
+ return 0;
+}
+
+#if defined(CONFIG_FB)
+int fb_notifier_callback(struct notifier_block *self,
+ unsigned long event, void *data)
+{
+ struct fb_event *evdata = data;
+ int *blank;
+ struct himax_ts_data *ts;
+/*[Arima_7947][allen_yu] Add mutex in callback function 20180131 begin*/
+ if (event != FB_EVENT_BLANK)
+ return 0;
+
+ ts=container_of(self, struct himax_ts_data, fb_notif);
+/*[Arima_7947][allen_yu] Modify Mutex initialization in callback function 20180305 begin*/
+//ParisKuong modified Mutex initialization +++
+#if 0
+ mutex_init(&ts->ops_lock);
+#endif
+//ParisKuong modified Mutex initialization ---
+/*[Arima_7947][allen_yu] 20180305 end*/
+ mutex_lock(&ts->ops_lock);
+
+/*[Arima_7947][allen_yu] 20180131 end*/
+/*[Arima_7947][allen_yu] Add error handling in callback function 20180123 begin*/
+ if(evdata == NULL)
+ {
+ E("%s(%d) evdata is NULL\n",__func__, __LINE__);
+ }
+ //I(" %s(%d)\n", __func__, __LINE__);
+/*[Arima_7947][allen_yu] 20180123 end*/
+ if (evdata && evdata->data && event == FB_EVENT_BLANK && ts && ts->client)
+ {
+/*[Arima_7947][allen_yu] Add error handling in callback function 20180123 begin*/
+ //I(" %s(%d)\n", __func__, __LINE__);
+/*[Arima_7947][allen_yu] 20180123 end*/
+ blank = evdata->data;
+/*[Arima_7947][allen_yu] Add error handling in callback function 20180123 begin*/
+ if(blank == NULL)
+ {
+ E("%s(%d) blank is NULL\n",__func__, __LINE__);
+ }
+/*[Arima_7947][allen_yu] 20180123 end*/
+/*[Arima_7947][allen_yu] fix the Ambient display issue 20180227 begin*/
+//I("blank = %d %s(%d)\n", *blank, __func__, __LINE__);
+ switch (*blank)
+ {
+ case FB_BLANK_UNBLANK:
+ case FB_BLANK_NORMAL:
+ himax_common_resume(&ts->client->dev);
+ break;
+
+ case FB_BLANK_POWERDOWN:
+ case FB_BLANK_HSYNC_SUSPEND:
+ case FB_BLANK_VSYNC_SUSPEND:
+#if 0
+ case FB_BLANK_NORMAL:
+#endif
+ himax_common_suspend(&ts->client->dev);
+ break;
+ }
+/*[Arima_7947][allen_yu] 20180227 end*/
+ }
+/*[Arima_7947][allen_yu] Add mutex in callback function 20180131 begin*/
+ mutex_unlock(&ts->ops_lock);
+/*[Arima_7947][allen_yu] 20180131 end*/
+ return 0;
+}
+#endif
+
+static const struct i2c_device_id himax_common_ts_id[] =
+{
+ {HIMAX_common_NAME, 0 },
+ {}
+};
+
+static const struct dev_pm_ops himax_common_pm_ops =
+{
+#if (!defined(CONFIG_FB))
+ .suspend = himax_common_suspend,
+ .resume = himax_common_resume,
+#endif
+};
+
+//#ifdef CONFIG_OF
+#if 1
+static struct of_device_id himax_match_table[] =
+{
+ {.compatible = "himax,hxcommon", },
+ {},
+};
+#else
+#define himax_match_table NULL
+#endif
+
+static struct i2c_driver himax_common_driver = {
+ //.id_table = himax_common_ts_id,
+ .probe = himax_chip_common_probe,
+ .remove = himax_chip_common_remove,
+ .driver = {
+ .name = HIMAX_common_NAME,
+ .owner = THIS_MODULE,
+ .of_match_table = himax_match_table,
+#ifdef CONFIG_PM
+ .pm = &himax_common_pm_ops,
+#endif
+ },
+ .id_table = himax_common_ts_id,
+};
+
+//static void __init himax_common_init_async(void *unused, async_cookie_t cookie)
+//{
+// I("%s:Enter \n", __func__);
+// i2c_add_driver(&himax_common_driver);
+//}
+
+static int __init himax_common_init(void)
+{
+ int ret = -1;
+ I("Enter Himax common touch panel driver init 83112-B\n");
+
+
+ ret = i2c_add_driver(&himax_common_driver);
+ printk("Himax ret : %d \n",ret);
+
+ if ( ret != 0 ) {
+ printk("Himax ret : %d \n",ret);
+ I("Focaltech touch screen driver init failed!");
+ }
+ //async_schedule(himax_common_init_async, NULL);
+
+ I("Exit Himax common touch panel driver init 83112-B\n");
+ //return i2c_add_driver(&himax_common_driver);
+ return ret;
+}
+
+static void __exit himax_common_exit(void)
+{
+ i2c_del_driver(&himax_common_driver);
+}
+
+module_init(himax_common_init);
+module_exit(himax_common_exit);
+
+MODULE_DESCRIPTION("Himax_common driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/input/touchscreen/hxchipset83112b/himax_platform.h b/drivers/input/touchscreen/hxchipset83112b/himax_platform.h
new file mode 100644
index 0000000..70def61
--- /dev/null
+++ b/drivers/input/touchscreen/hxchipset83112b/himax_platform.h
@@ -0,0 +1,130 @@
+/* Himax Android Driver Sample Code for QCT platform
+*
+* Copyright (C) 2017 Himax Corporation.
+*
+* 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.
+*
+*/
+
+#ifndef HIMAX_PLATFORM_H
+#define HIMAX_PLATFORM_H
+
+#include <linux/delay.h>
+#include <linux/fs.h>
+#include <linux/gpio.h>
+#include <linux/types.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#if defined(CONFIG_HMX_DB)
+#include <linux/regulator/consumer.h>
+#endif
+
+#define QCT
+
+#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
+#define D(x...) printk("[HXTP] " x)
+#define I(x...) printk("[HXTP] " x)
+#define W(x...) printk("[HXTP][WARNING] " x)
+#define E(x...) printk("[HXTP][ERROR] " x)
+#define DIF(x...) \
+ if (debug_flag) \
+ printk("[HXTP][DEBUG] " x) \
+} while(0)
+#else
+#define D(x...)
+#define I(x...)
+#define W(x...)
+#define E(x...)
+#define DIF(x...)
+#endif
+
+#if defined(CONFIG_HMX_DB)
+/* Analog voltage @2.7 V */
+#define HX_VTG_MIN_UV 2700000
+#define HX_VTG_MAX_UV 3300000
+#define HX_ACTIVE_LOAD_UA 15000
+#define HX_LPM_LOAD_UA 10
+/* Digital voltage @1.8 V */
+#define HX_VTG_DIG_MIN_UV 1800000
+#define HX_VTG_DIG_MAX_UV 1800000
+#define HX_ACTIVE_LOAD_DIG_UA 10000
+#define HX_LPM_LOAD_DIG_UA 10
+
+#define HX_I2C_VTG_MIN_UV 1800000
+#define HX_I2C_VTG_MAX_UV 1800000
+#define HX_I2C_LOAD_UA 10000
+#define HX_I2C_LPM_LOAD_UA 10
+#endif
+
+#define HIMAX_common_NAME "himax_tp"
+#define HIMAX_I2C_ADDR 0x48
+#define INPUT_DEV_NAME "himax-touchscreen"
+
+struct himax_i2c_platform_data
+{
+ int abs_x_min;
+ int abs_x_max;
+ int abs_x_fuzz;
+ int abs_y_min;
+ int abs_y_max;
+ int abs_y_fuzz;
+ int abs_pressure_min;
+ int abs_pressure_max;
+ int abs_pressure_fuzz;
+ int abs_width_min;
+ int abs_width_max;
+ int screenWidth;
+ int screenHeight;
+ uint8_t fw_version;
+ uint8_t tw_id;
+ uint8_t powerOff3V3;
+ uint8_t cable_config[2];
+ uint8_t protocol_type;
+ int gpio_irq;
+ int gpio_reset;
+ int gpio_3v3_en;
+ int (*power)(int on);
+ void (*reset)(void);
+ struct himax_virtual_key *virtual_key;
+ struct kobject *vk_obj;
+ struct kobj_attribute *vk2Use;
+
+ int hx_config_size;
+#if defined(CONFIG_HMX_DB)
+ bool i2c_pull_up;
+ bool digital_pwr_regulator;
+ int reset_gpio;
+ u32 reset_gpio_flags;
+ int irq_gpio;
+ u32 irq_gpio_flags;
+
+ struct regulator *vcc_ana; //For Dragon Board
+ struct regulator *vcc_dig; //For Dragon Board
+ struct regulator *vcc_i2c; //For Dragon Board
+#endif
+};
+
+
+extern int irq_enable_count;
+extern int i2c_himax_read(struct i2c_client *client, uint8_t command, uint8_t *data, uint8_t length, uint8_t toRetry);
+extern int i2c_himax_write(struct i2c_client *client, uint8_t command, uint8_t *data, uint8_t length, uint8_t toRetry);
+extern int i2c_himax_write_command(struct i2c_client *client, uint8_t command, uint8_t toRetry);
+extern int i2c_himax_master_write(struct i2c_client *client, uint8_t *data, uint8_t length, uint8_t toRetry);
+extern void himax_int_enable(int irqnum, int enable);
+extern int himax_ts_register_interrupt(struct i2c_client *client);
+extern uint8_t himax_int_gpio_read(int pinnum);
+
+extern int himax_gpio_power_config(struct i2c_client *client,struct himax_i2c_platform_data *pdata);
+
+#if defined(CONFIG_FB)
+extern int fb_notifier_callback(struct notifier_block *self, unsigned long event, void *data);
+#endif
+
+#endif