diff --git a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/DebugConfig/TencentOS_tiny_STM32L496ZGTx.dbgconf b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/DebugConfig/TencentOS_tiny_STM32L496ZGTx.dbgconf
deleted file mode 100644
index 979440d7..00000000
--- a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/DebugConfig/TencentOS_tiny_STM32L496ZGTx.dbgconf
+++ /dev/null
@@ -1,77 +0,0 @@
-// File: STM32L4x5_4x6.dbgconf
-// Version: 1.0.0
-// Note: refer to STM32L4x5 and STM32L4x6 Reference manual (RM0351)
-// refer to STM32L475xx STM32L476xx STM32L486xx STM32L496xx STM32L4A6xx datasheets
-
-// <<< Use Configuration Wizard in Context Menu >>>
-
-// Debug MCU configuration register (DBGMCU_CR)
-// DBG_STANDBY Debug Standby mode
-// DBG_STOP Debug Stop mode
-// DBG_SLEEP Debug Sleep mode
-//
-DbgMCU_CR = 0x00000007;
-
-// Debug MCU APB1 freeze register1 (DBGMCU_APB1FZR1)
-// Reserved bits must be kept at reset value
-// DBG_LPTIM1_STOP LPTIM1 counter stopped when core is halted
-// DBG_CAN2_STOP bxCAN2 stopped when core is halted
-// DBG_CAN1_STOP bxCAN1 stopped when core is halted
-// DBG_I2C3_STOP I2C3 SMBUS timeout counter stopped when core is halted
-// DBG_I2C2_STOP I2C2 SMBUS timeout counter stopped when core is halted
-// DBG_I2C1_STOP I2C1 SMBUS timeout counter stopped when core is halted
-// DBG_IWDG_STOP Independent watchdog counter stopped when core is halted
-// DBG_WWDG_STOP Window watchdog counter stopped when core is halted
-// DBG_RTC_STOP RTC counter stopped when core is halted
-// DBG_TIM7_STOP TIM7 counter stopped when core is halted
-// DBG_TIM6_STOP TIM6 counter stopped when core is halted
-// DBG_TIM5_STOP TIM5 counter stopped when core is halted
-// DBG_TIM4_STOP TIM4 counter stopped when core is halted
-// DBG_TIM3_STOP TIM3 counter stopped when core is halted
-// DBG_TIM2_STOP TIM2 counter stopped when core is halted
-//
-DbgMCU_APB1_Fz1 = 0x00000000;
-
-// Debug MCU APB1 freeze register 2 (DBGMCU_APB1FZR2)
-// Reserved bits must be kept at reset value
-// DBG_LPTIM2_STOP LPTIM2 counter stopped when core is halted
-// DBG_I2C4_STOP I2C4 SMBUS timeout counter stopped when core is halted
-//
-DbgMCU_APB1_Fz2 = 0x00000000;
-
-// Debug MCU APB2 freeze register (DBGMCU_APB2FZR)
-// Reserved bits must be kept at reset value
-// DBG_TIM17_STOP TIM17 counter stopped when core is halted
-// DBG_TIM16_STOP TIM16 counter stopped when core is halted
-// DBG_TIM15_STOP TIM15 counter stopped when core is halted
-// DBG_TIM8_STOP TIM8 counter stopped when core is halted
-// DBG_TIM1_STOP TIM1 counter stopped when core is halted
-//
-DbgMCU_APB2_Fz = 0x00000000;
-
-// TPIU Pin Routing (TRACECLK fixed on Pin PE2)
-// TRACECLK: Pin PE2
-// TRACED0
-// ETM Trace Data 0
-// <0x00040003=> Pin PE3
-// <0x00020001=> Pin PC1
-// TRACED1
-// ETM Trace Data 1
-// <0x00040004=> Pin PE4
-// <0x0002000A=> Pin PC10
-// TRACED2
-// ETM Trace Data 2
-// <0x00040005=> Pin PE5
-// <0x00030002=> Pin PD2
-// TRACED3
-// ETM Trace Data 3
-// <0x00040006=> Pin PE6
-// <0x0002000C=> Pin PC12
-//
-TraceClk_Pin = 0x00040002;
-TraceD0_Pin = 0x00040003;
-TraceD1_Pin = 0x00040004;
-TraceD2_Pin = 0x00040005;
-TraceD3_Pin = 0x00040006;
-
-// <<< end of configuration section >>>
diff --git a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/RTE/_TencentOS_tiny/RTE_Components.h b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/RTE/_TencentOS_tiny/RTE_Components.h
deleted file mode 100644
index 248f644f..00000000
--- a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/RTE/_TencentOS_tiny/RTE_Components.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/*
- * Auto generated Run-Time-Environment Configuration File
- * *** Do not modify ! ***
- *
- * Project: 'TencentOS_tiny'
- * Target: 'TencentOS_tiny'
- */
-
-#ifndef RTE_COMPONENTS_H
-#define RTE_COMPONENTS_H
-
-
-/*
- * Define the Device Header File:
- */
-#define CMSIS_device_header "stm32l4xx.h"
-
-
-
-#endif /* RTE_COMPONENTS_H */
diff --git a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvoptx b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvoptx
index c09f8373..21877009 100644
--- a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvoptx
+++ b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvoptx
@@ -1139,25 +1139,13 @@
tensorflow
- 0
+ 1
0
0
0
10
71
- 4
- 0
- 0
- 0
- ..\..\..\..\components\tflite_micro\STM32L496-lib\tflm_person_detection.lib
- tflm_person_detection.lib
- 0
- 0
-
-
- 10
- 72
1
0
0
@@ -1167,6 +1155,18 @@
0
0
+
+ 10
+ 72
+ 4
+ 0
+ 0
+ 0
+ ..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\tflm_person_detection.lib
+ tflm_person_detection.lib
+ 0
+ 0
+
diff --git a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvprojx b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvprojx
index 6916022e..f8cb62dc 100644
--- a/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvprojx
+++ b/board/NUCLEO_STM32L496ZG/KEIL/tflitemicro_person_detection/TencentOS_tiny.uvprojx
@@ -339,7 +339,7 @@
USE_HAL_DRIVER,STM32L496xx,NUCLEO_STM32L496ZG
- ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\kernel\core\include;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\hello_world;..\..\TOS_CONFIG;..\..\..\..\net\at\include;..\..\..\..\kernel\hal\include;..\..\BSP\Hardware\Inc;..\..\..\..\components\tflite_micro\STM32L496-lib;..\..\..\..\components\tflite_micro\STM32L496-lib\third_party\flatbuffers\include;..\..\..\..\components\tflite_micro\STM32L496-lib\third_party\gemmlowp;..\..\..\..\components\tflite_micro\STM32L496-lib\third_party\kissfft;..\..\..\..\components\tflite_micro\STM32L496-lib\third_party\ruy;..\..\..\..\components\tflite_micro\STM32L496-lib\tensorflow\lite\micro\tools\make\downloads
+ ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\kernel\core\include;..\..\..\..\kernel\pm\include;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\hello_world;..\..\TOS_CONFIG;..\..\..\..\net\at\include;..\..\..\..\kernel\hal\include;..\..\BSP\Hardware\Inc;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\third_party\flatbuffers\include;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\third_party\gemmlowp;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\third_party\kissfft;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\third_party\ruy;..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\tensorflow\lite\micro\tools\make\downloads
@@ -778,16 +778,16 @@
tensorflow
-
- tflm_person_detection.lib
- 4
- ..\..\..\..\components\tflite_micro\STM32L496-lib\tflm_person_detection.lib
-
regarget.c
1
..\..\..\..\components\tflite_micro\KEIL\regarget.c
+
+ tflm_person_detection.lib
+ 4
+ ..\..\..\..\components\tflite_micro\ARM_CortexM4_lib\tflm_person_detection.lib
+
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/core/public/version.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/core/public/version.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/core/public/version.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/core/public/version.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/c/builtin_op_data.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/c/builtin_op_data.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/c/builtin_op_data.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/c/builtin_op_data.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/c/common.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/c/common.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/c/common.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/c/common.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/error_reporter.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/error_reporter.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/error_reporter.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/error_reporter.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/flatbuffer_conversions.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/flatbuffer_conversions.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/flatbuffer_conversions.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/flatbuffer_conversions.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/op_resolver.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/op_resolver.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/op_resolver.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/op_resolver.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/profiler.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/profiler.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/profiler.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/profiler.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/tensor_utils.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/tensor_utils.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/core/api/tensor_utils.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/core/api/tensor_utils.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/common.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/common.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/common.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/common.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/compatibility.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/compatibility.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/compatibility.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/compatibility.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/cppmath.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/cppmath.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/cppmath.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/cppmath.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/max.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/max.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/max.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/max.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/min.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/min.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/min.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/min.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/optimized/neon_check.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/optimized/neon_check.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/optimized/neon_check.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/optimized/neon_check.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/quantization_util.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/quantization_util.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/quantization_util.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/quantization_util.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/add.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/add.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/add.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/add.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/binary_function.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/binary_function.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/binary_function.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/binary_function.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/ceil.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/ceil.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/ceil.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/ceil.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/comparisons.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/comparisons.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/comparisons.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/comparisons.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/concatenation.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/concatenation.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/concatenation.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/concatenation.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/conv.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/conv.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/conv.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/conv.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/dequantize.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/dequantize.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/dequantize.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/dequantize.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/floor.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/floor.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/floor.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/floor.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/fully_connected.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/fully_connected.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/fully_connected.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/fully_connected.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/hard_swish.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/hard_swish.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/hard_swish.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/hard_swish.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/l2normalization.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/l2normalization.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/l2normalization.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/l2normalization.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/logistic.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/logistic.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/logistic.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/logistic.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/mul.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/mul.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/mul.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/mul.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/neg.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/neg.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/neg.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/neg.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/pad.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/pad.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/pad.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/pad.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/pooling.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/pooling.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/pooling.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/pooling.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/prelu.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/prelu.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/prelu.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/prelu.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/quantize.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/quantize.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/quantize.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/quantize.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/reduce.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/reduce.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/reduce.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/reduce.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/requantize.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/requantize.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/requantize.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/requantize.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/round.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/round.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/round.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/round.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/softmax.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/softmax.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/softmax.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/softmax.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/strided_slice.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/strided_slice.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/strided_slice.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/strided_slice.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/sub.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/sub.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/sub.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/sub.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/tanh.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/tanh.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/reference/tanh.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/reference/tanh.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/strided_slice_logic.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/strided_slice_logic.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/strided_slice_logic.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/strided_slice_logic.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/tensor.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/tensor.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/tensor.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/tensor.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/tensor_ctypes.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/tensor_ctypes.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/tensor_ctypes.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/tensor_ctypes.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/types.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/types.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/internal/types.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/internal/types.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/kernel_util.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/kernel_util.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/kernel_util.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/kernel_util.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/op_macros.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/op_macros.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/op_macros.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/op_macros.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/padding.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/padding.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/kernels/padding.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/kernels/padding.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/all_ops_resolver.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/all_ops_resolver.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/all_ops_resolver.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/all_ops_resolver.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/compatibility.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/compatibility.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/compatibility.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/compatibility.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/debug_log.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/debug_log.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/debug_log.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/debug_log.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/activation_utils.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/activation_utils.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/activation_utils.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/activation_utils.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/kernel_runner.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/kernel_runner.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/kernel_runner.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/kernel_runner.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/kernel_util.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/kernel_util.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/kernel_util.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/kernel_util.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/micro_ops.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/micro_ops.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/micro_ops.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/micro_ops.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/micro_utils.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/micro_utils.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/kernels/micro_utils.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/kernels/micro_utils.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_helpers.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_helpers.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_helpers.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_helpers.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/memory_planner.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/memory_planner.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/memory_planner/memory_planner.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/memory_planner/memory_planner.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_allocator.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_allocator.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_allocator.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_allocator.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_error_reporter.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_error_reporter.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_error_reporter.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_error_reporter.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_interpreter.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_interpreter.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_interpreter.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_interpreter.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_mutable_op_resolver.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_mutable_op_resolver.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_mutable_op_resolver.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_mutable_op_resolver.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_op_resolver.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_op_resolver.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_op_resolver.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_op_resolver.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_optional_debug_tools.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_optional_debug_tools.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_optional_debug_tools.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_optional_debug_tools.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_profiler.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_profiler.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_profiler.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_profiler.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_string.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_string.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_string.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_string.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_time.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_time.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_time.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_time.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_utils.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_utils.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/micro_utils.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/micro_utils.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_micro_allocator.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_micro_allocator.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_micro_allocator.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_micro_allocator.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_micro_interpreter.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_micro_interpreter.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_micro_interpreter.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_micro_interpreter.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_simple_memory_allocator.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_simple_memory_allocator.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/recording_simple_memory_allocator.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/recording_simple_memory_allocator.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/simple_memory_allocator.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/simple_memory_allocator.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/simple_memory_allocator.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/simple_memory_allocator.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/test_helpers.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/test_helpers.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/test_helpers.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/test_helpers.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/micro_test.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/micro_test.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/micro_test.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/micro_test.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/test_conv_model.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/test_conv_model.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/test_conv_model.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/test_conv_model.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/test_utils.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/test_utils.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/testing/test_utils.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/testing/test_utils.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/schema/schema_generated.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/schema/schema_generated.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/schema/schema_generated.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/schema/schema_generated.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/string_type.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/string_type.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/string_type.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/string_type.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/string_util.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/string_util.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/string_util.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/string_util.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/type_to_tflitetype.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/type_to_tflitetype.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/type_to_tflitetype.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/type_to_tflitetype.h
diff --git a/components/tflite_micro/STM32L496-lib/tensorflow/lite/version.h b/components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/version.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tensorflow/lite/version.h
rename to components/tflite_micro/ARM_CortexM4_lib/tensorflow/lite/version.h
diff --git a/components/tflite_micro/STM32L496-lib/tflm_person_detection.lib b/components/tflite_micro/ARM_CortexM4_lib/tflm_person_detection.lib
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/tflm_person_detection.lib
rename to components/tflite_micro/ARM_CortexM4_lib/tflm_person_detection.lib
diff --git a/components/tflite_micro/STM32L496-lib/third_party/flatbuffers/LICENSE.txt b/components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/LICENSE.txt
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/flatbuffers/LICENSE.txt
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/LICENSE.txt
diff --git a/components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/base.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/base.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/base.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/base.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/gemmlowp/LICENSE b/components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/LICENSE
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/gemmlowp/LICENSE
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/LICENSE
diff --git a/components/tflite_micro/STM32L496-lib/third_party/gemmlowp/fixedpoint/fixedpoint.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/fixedpoint/fixedpoint.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/gemmlowp/fixedpoint/fixedpoint.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/fixedpoint/fixedpoint.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/gemmlowp/internal/detect_platform.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/internal/detect_platform.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/gemmlowp/internal/detect_platform.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/gemmlowp/internal/detect_platform.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/kissfft/COPYING b/components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/COPYING
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/kissfft/COPYING
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/COPYING
diff --git a/components/tflite_micro/STM32L496-lib/third_party/kissfft/_kiss_fft_guts.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/_kiss_fft_guts.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/kissfft/_kiss_fft_guts.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/_kiss_fft_guts.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/kissfft/kiss_fft.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/kiss_fft.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/kissfft/kiss_fft.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/kiss_fft.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/kissfft/tools/kiss_fftr.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/tools/kiss_fftr.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/kissfft/tools/kiss_fftr.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/kissfft/tools/kiss_fftr.h
diff --git a/components/tflite_micro/STM32L496-lib/third_party/ruy/ruy/profiler/instrumentation.h b/components/tflite_micro/ARM_CortexM4_lib/third_party/ruy/ruy/profiler/instrumentation.h
similarity index 100%
rename from components/tflite_micro/STM32L496-lib/third_party/ruy/ruy/profiler/instrumentation.h
rename to components/tflite_micro/ARM_CortexM4_lib/third_party/ruy/ruy/profiler/instrumentation.h
diff --git a/components/tflite_micro/Source/tensorflow/core/public/version.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/core/public/version.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/core/public/version.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/core/public/version.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/c/builtin_op_data.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/c/builtin_op_data.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/c/builtin_op_data.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/c/builtin_op_data.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/c/common.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/c/common.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/c/common.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/c/common.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/error_reporter.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/error_reporter.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/core/api/error_reporter.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/error_reporter.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/flatbuffer_conversions.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/flatbuffer_conversions.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/core/api/flatbuffer_conversions.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/flatbuffer_conversions.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/op_resolver.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/op_resolver.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/core/api/op_resolver.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/op_resolver.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/profiler.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/profiler.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/core/api/profiler.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/profiler.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/tensor_utils.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/tensor_utils.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/core/api/tensor_utils.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/core/api/tensor_utils.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/common.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/common.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/common.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/common.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/compatibility.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/compatibility.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/compatibility.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/compatibility.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/cppmath.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/cppmath.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/cppmath.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/cppmath.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/max.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/max.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/max.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/max.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/min.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/min.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/min.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/min.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/optimized/neon_check.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/optimized/neon_check.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/optimized/neon_check.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/optimized/neon_check.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/quantization_util.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/quantization_util.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/quantization_util.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/quantization_util.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/add.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/add.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/add.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/add.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/arg_min_max.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/arg_min_max.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/arg_min_max.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/binary_function.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/binary_function.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/binary_function.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/binary_function.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/ceil.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/ceil.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/ceil.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/ceil.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/comparisons.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/comparisons.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/comparisons.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/comparisons.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/concatenation.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/concatenation.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/concatenation.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/concatenation.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/conv.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/conv.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/conv.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/conv.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/dequantize.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/dequantize.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/dequantize.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/dequantize.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/floor.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/floor.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/floor.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/floor.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/fully_connected.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/fully_connected.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/fully_connected.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/fully_connected.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/hard_swish.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/hard_swish.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/hard_swish.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/hard_swish.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/add.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/add.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/conv.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/fully_connected.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/l2normalization.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/logistic.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/mul.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/pooling.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/integer_ops/tanh.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/l2normalization.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/l2normalization.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/l2normalization.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/l2normalization.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/logistic.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/logistic.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/logistic.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/logistic.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/maximum_minimum.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/maximum_minimum.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/mul.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/mul.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/mul.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/mul.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/neg.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/neg.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/neg.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/neg.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/pad.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/pad.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/pad.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/pad.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/pooling.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/pooling.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/pooling.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/pooling.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/prelu.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/prelu.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/prelu.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/prelu.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/quantize.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/quantize.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/quantize.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/quantize.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/reduce.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/reduce.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/reduce.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/reduce.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/requantize.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/requantize.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/requantize.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/requantize.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/resize_nearest_neighbor.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/round.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/round.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/round.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/round.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/softmax.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/softmax.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/softmax.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/softmax.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/strided_slice.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/strided_slice.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/strided_slice.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/strided_slice.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/sub.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/sub.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/sub.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/sub.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/tanh.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/tanh.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/reference/tanh.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/reference/tanh.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/strided_slice_logic.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/strided_slice_logic.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/strided_slice_logic.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/strided_slice_logic.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/tensor.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/tensor.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/tensor.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/tensor.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/tensor_ctypes.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/tensor_ctypes.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/tensor_ctypes.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/tensor_ctypes.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/types.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/types.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/internal/types.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/internal/types.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/kernel_util.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/kernel_util.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/kernel_util.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/kernel_util.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/op_macros.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/op_macros.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/op_macros.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/op_macros.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/padding.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/padding.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/kernels/padding.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/kernels/padding.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/all_ops_resolver.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/all_ops_resolver.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/all_ops_resolver.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/all_ops_resolver.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/compatibility.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/compatibility.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/compatibility.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/compatibility.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/debug_log.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/debug_log.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/debug_log.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/debug_log.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activation_utils.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/activation_utils.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/kernels/activation_utils.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/activation_utils.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/kernel_runner.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/kernel_runner.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/kernels/kernel_runner.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/kernel_runner.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/kernel_util.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/kernel_util.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/kernels/kernel_util.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/kernel_util.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/micro_ops.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/micro_ops.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/kernels/micro_ops.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/micro_ops.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/micro_utils.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/micro_utils.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/kernels/micro_utils.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/kernels/micro_utils.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/memory_helpers.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_helpers.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/memory_helpers.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_helpers.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/greedy_memory_planner.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/linear_memory_planner.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/linear_memory_planner.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/memory_planner.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/memory_planner.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/memory_planner/memory_planner.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/memory_planner/memory_planner.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_allocator.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_allocator.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_allocator.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_allocator.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_error_reporter.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_error_reporter.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_error_reporter.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_error_reporter.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_interpreter.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_interpreter.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_interpreter.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_interpreter.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_mutable_op_resolver.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_mutable_op_resolver.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_mutable_op_resolver.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_mutable_op_resolver.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_op_resolver.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_op_resolver.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_op_resolver.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_op_resolver.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_optional_debug_tools.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_optional_debug_tools.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_optional_debug_tools.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_optional_debug_tools.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_profiler.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_profiler.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_profiler.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_profiler.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_string.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_string.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_string.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_string.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_time.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_time.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_time.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_time.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/micro_utils.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_utils.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/micro_utils.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/micro_utils.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/recording_micro_allocator.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_micro_allocator.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/recording_micro_allocator.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_micro_allocator.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/recording_micro_interpreter.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_micro_interpreter.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/recording_micro_interpreter.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_micro_interpreter.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/recording_simple_memory_allocator.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_simple_memory_allocator.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/recording_simple_memory_allocator.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/recording_simple_memory_allocator.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/simple_memory_allocator.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/simple_memory_allocator.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/simple_memory_allocator.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/simple_memory_allocator.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/test_helpers.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/test_helpers.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/test_helpers.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/test_helpers.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/testing/micro_test.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/micro_test.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/testing/micro_test.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/micro_test.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/testing/test_conv_model.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/test_conv_model.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/testing/test_conv_model.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/test_conv_model.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/testing/test_utils.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/test_utils.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/testing/test_utils.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/testing/test_utils.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_common_tables.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/arm_math.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_armclang.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/DSP/Include/cmsis_compiler.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_tables.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nn_types.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnfunctions.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/micro/tools/make/downloads/cmsis/CMSIS/NN/Include/arm_nnsupportfunctions.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/schema/schema_generated.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/schema/schema_generated.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/schema/schema_generated.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/schema/schema_generated.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/string_type.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/string_type.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/string_type.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/string_type.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/string_util.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/string_util.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/string_util.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/string_util.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/type_to_tflitetype.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/type_to_tflitetype.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/type_to_tflitetype.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/type_to_tflitetype.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/version.h b/components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/version.h
similarity index 100%
rename from components/tflite_micro/Source/tensorflow/lite/version.h
rename to components/tflite_micro/ARM_CortexM7_lib/tensorflow/lite/version.h
diff --git a/components/tflite_micro/ARM_CortexM7_lib/tflm_person_detection.lib b/components/tflite_micro/ARM_CortexM7_lib/tflm_person_detection.lib
new file mode 100644
index 00000000..866180b3
Binary files /dev/null and b/components/tflite_micro/ARM_CortexM7_lib/tflm_person_detection.lib differ
diff --git a/components/tflite_micro/Source/third_party/flatbuffers/LICENSE.txt b/components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/LICENSE.txt
similarity index 100%
rename from components/tflite_micro/Source/third_party/flatbuffers/LICENSE.txt
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/LICENSE.txt
diff --git a/components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/base.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/base.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/base.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/base.h
diff --git a/components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/flatbuffers.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/flatbuffers.h
diff --git a/components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/stl_emulation.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/flatbuffers/include/flatbuffers/stl_emulation.h
diff --git a/components/tflite_micro/Source/third_party/gemmlowp/LICENSE b/components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/LICENSE
similarity index 100%
rename from components/tflite_micro/Source/third_party/gemmlowp/LICENSE
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/LICENSE
diff --git a/components/tflite_micro/Source/third_party/gemmlowp/fixedpoint/fixedpoint.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/fixedpoint/fixedpoint.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/gemmlowp/fixedpoint/fixedpoint.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/fixedpoint/fixedpoint.h
diff --git a/components/tflite_micro/Source/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/fixedpoint/fixedpoint_sse.h
diff --git a/components/tflite_micro/Source/third_party/gemmlowp/internal/detect_platform.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/internal/detect_platform.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/gemmlowp/internal/detect_platform.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/gemmlowp/internal/detect_platform.h
diff --git a/components/tflite_micro/Source/third_party/kissfft/COPYING b/components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/COPYING
similarity index 100%
rename from components/tflite_micro/Source/third_party/kissfft/COPYING
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/COPYING
diff --git a/components/tflite_micro/Source/third_party/kissfft/_kiss_fft_guts.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/_kiss_fft_guts.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/kissfft/_kiss_fft_guts.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/_kiss_fft_guts.h
diff --git a/components/tflite_micro/Source/third_party/kissfft/kiss_fft.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/kiss_fft.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/kissfft/kiss_fft.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/kiss_fft.h
diff --git a/components/tflite_micro/Source/third_party/kissfft/tools/kiss_fftr.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/tools/kiss_fftr.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/kissfft/tools/kiss_fftr.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/kissfft/tools/kiss_fftr.h
diff --git a/components/tflite_micro/Source/third_party/ruy/ruy/profiler/instrumentation.h b/components/tflite_micro/ARM_CortexM7_lib/third_party/ruy/ruy/profiler/instrumentation.h
similarity index 100%
rename from components/tflite_micro/Source/third_party/ruy/ruy/profiler/instrumentation.h
rename to components/tflite_micro/ARM_CortexM7_lib/third_party/ruy/ruy/profiler/instrumentation.h
diff --git a/components/tflite_micro/Source/tensorflow/lite/c/common.c b/components/tflite_micro/Source/tensorflow/lite/c/common.c
deleted file mode 100644
index 0264f420..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/c/common.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/c/common.h"
-#ifndef TF_LITE_STATIC_MEMORY
-#include
-#include
-#endif // TF_LITE_STATIC_MEMORY
-
-int TfLiteIntArrayGetSizeInBytes(int size) {
- static TfLiteIntArray dummy;
- return sizeof(dummy) + sizeof(dummy.data[0]) * size;
-}
-
-int TfLiteIntArrayEqual(const TfLiteIntArray* a, const TfLiteIntArray* b) {
- if (a == b) return 1;
- if (a == NULL || b == NULL) return 0;
- return TfLiteIntArrayEqualsArray(a, b->size, b->data);
-}
-
-int TfLiteIntArrayEqualsArray(const TfLiteIntArray* a, int b_size,
- const int b_data[]) {
- if (a == NULL) return (b_size == 0);
- if (a->size != b_size) return 0;
- int i = 0;
- for (; i < a->size; i++)
- if (a->data[i] != b_data[i]) return 0;
- return 1;
-}
-
-#ifndef TF_LITE_STATIC_MEMORY
-
-TfLiteIntArray* TfLiteIntArrayCreate(int size) {
- TfLiteIntArray* ret =
- (TfLiteIntArray*)malloc(TfLiteIntArrayGetSizeInBytes(size));
- ret->size = size;
- return ret;
-}
-
-TfLiteIntArray* TfLiteIntArrayCopy(const TfLiteIntArray* src) {
- if (!src) return NULL;
- TfLiteIntArray* ret = TfLiteIntArrayCreate(src->size);
- if (ret) {
- memcpy(ret->data, src->data, src->size * sizeof(int));
- }
- return ret;
-}
-
-void TfLiteIntArrayFree(TfLiteIntArray* a) { free(a); }
-
-#endif // TF_LITE_STATIC_MEMORY
-
-int TfLiteFloatArrayGetSizeInBytes(int size) {
- static TfLiteFloatArray dummy;
- return sizeof(dummy) + sizeof(dummy.data[0]) * size;
-}
-
-#ifndef TF_LITE_STATIC_MEMORY
-
-TfLiteFloatArray* TfLiteFloatArrayCreate(int size) {
- TfLiteFloatArray* ret =
- (TfLiteFloatArray*)malloc(TfLiteFloatArrayGetSizeInBytes(size));
- ret->size = size;
- return ret;
-}
-
-void TfLiteFloatArrayFree(TfLiteFloatArray* a) { free(a); }
-
-void TfLiteTensorDataFree(TfLiteTensor* t) {
- if (t->allocation_type == kTfLiteDynamic ||
- t->allocation_type == kTfLitePersistentRo) {
- free(t->data.raw);
- }
- t->data.raw = NULL;
-}
-
-void TfLiteQuantizationFree(TfLiteQuantization* quantization) {
- if (quantization->type == kTfLiteAffineQuantization) {
- TfLiteAffineQuantization* q_params =
- (TfLiteAffineQuantization*)(quantization->params);
- if (q_params->scale) {
- TfLiteFloatArrayFree(q_params->scale);
- q_params->scale = NULL;
- }
- if (q_params->zero_point) {
- TfLiteIntArrayFree(q_params->zero_point);
- q_params->zero_point = NULL;
- }
- free(q_params);
- }
- quantization->params = NULL;
- quantization->type = kTfLiteNoQuantization;
-}
-
-void TfLiteSparsityFree(TfLiteSparsity* sparsity) {
- if (sparsity == NULL) {
- return;
- }
-
- if (sparsity->traversal_order) {
- TfLiteIntArrayFree(sparsity->traversal_order);
- sparsity->traversal_order = NULL;
- }
-
- if (sparsity->block_map) {
- TfLiteIntArrayFree(sparsity->block_map);
- sparsity->block_map = NULL;
- }
-
- if (sparsity->dim_metadata) {
- int i = 0;
- for (; i < sparsity->dim_metadata_size; i++) {
- TfLiteDimensionMetadata metadata = sparsity->dim_metadata[i];
- if (metadata.format == kTfLiteDimSparseCSR) {
- TfLiteIntArrayFree(metadata.array_segments);
- metadata.array_segments = NULL;
- TfLiteIntArrayFree(metadata.array_indices);
- metadata.array_indices = NULL;
- }
- }
- free(sparsity->dim_metadata);
- sparsity->dim_metadata = NULL;
- }
-
- free(sparsity);
-}
-
-void TfLiteTensorFree(TfLiteTensor* t) {
- TfLiteTensorDataFree(t);
- if (t->dims) TfLiteIntArrayFree(t->dims);
- t->dims = NULL;
-
- if (t->dims_signature) {
- TfLiteIntArrayFree((TfLiteIntArray *) t->dims_signature);
- }
- t->dims_signature = NULL;
-
- TfLiteQuantizationFree(&t->quantization);
- TfLiteSparsityFree(t->sparsity);
- t->sparsity = NULL;
-}
-
-void TfLiteTensorReset(TfLiteType type, const char* name, TfLiteIntArray* dims,
- TfLiteQuantizationParams quantization, char* buffer,
- size_t size, TfLiteAllocationType allocation_type,
- const void* allocation, bool is_variable,
- TfLiteTensor* tensor) {
- TfLiteTensorFree(tensor);
- tensor->type = type;
- tensor->name = name;
- tensor->dims = dims;
- tensor->params = quantization;
- tensor->data.raw = buffer;
- tensor->bytes = size;
- tensor->allocation_type = allocation_type;
- tensor->allocation = allocation;
- tensor->is_variable = is_variable;
-
- tensor->quantization.type = kTfLiteNoQuantization;
- tensor->quantization.params = NULL;
-}
-
-void TfLiteTensorRealloc(size_t num_bytes, TfLiteTensor* tensor) {
- if (tensor->allocation_type != kTfLiteDynamic &&
- tensor->allocation_type != kTfLitePersistentRo) {
- return;
- }
- // TODO(b/145340303): Tensor data should be aligned.
- if (!tensor->data.raw) {
- tensor->data.raw = malloc(num_bytes);
- } else if (num_bytes > tensor->bytes) {
- tensor->data.raw = realloc(tensor->data.raw, num_bytes);
- }
- tensor->bytes = num_bytes;
-}
-#endif // TF_LITE_STATIC_MEMORY
-
-const char* TfLiteTypeGetName(TfLiteType type) {
- switch (type) {
- case kTfLiteNoType:
- return "NOTYPE";
- case kTfLiteFloat32:
- return "FLOAT32";
- case kTfLiteInt16:
- return "INT16";
- case kTfLiteInt32:
- return "INT32";
- case kTfLiteUInt8:
- return "UINT8";
- case kTfLiteInt8:
- return "INT8";
- case kTfLiteInt64:
- return "INT64";
- case kTfLiteBool:
- return "BOOL";
- case kTfLiteComplex64:
- return "COMPLEX64";
- case kTfLiteComplex128:
- return "COMPLEX128";
- case kTfLiteString:
- return "STRING";
- case kTfLiteFloat16:
- return "FLOAT16";
- case kTfLiteFloat64:
- return "FLOAT64";
- }
- return "Unknown type";
-}
-
-TfLiteDelegate TfLiteDelegateCreate() {
- TfLiteDelegate d = {
- .data_ = NULL,
- .Prepare = NULL,
- .CopyFromBufferHandle = NULL,
- .CopyToBufferHandle = NULL,
- .FreeBufferHandle = NULL,
- .flags = kTfLiteDelegateFlagsNone,
- };
- return d;
-}
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/error_reporter.cc b/components/tflite_micro/Source/tensorflow/lite/core/api/error_reporter.cc
deleted file mode 100644
index 7070eaa5..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/core/api/error_reporter.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-#include "tensorflow/lite/core/api/error_reporter.h"
-#include
-
-namespace tflite {
-
-int ErrorReporter::Report(const char* format, ...) {
- va_list args;
- va_start(args, format);
- int code = Report(format, args);
- va_end(args);
- return code;
-}
-
-// TODO(aselle): Make the name of ReportError on context the same, so
-// we can use the ensure functions w/o a context and w/ a reporter.
-int ErrorReporter::ReportError(void*, const char* format, ...) {
- va_list args;
- va_start(args, format);
- int code = Report(format, args);
- va_end(args);
- return code;
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/flatbuffer_conversions.cc b/components/tflite_micro/Source/tensorflow/lite/core/api/flatbuffer_conversions.cc
deleted file mode 100644
index 7fb04f5b..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/core/api/flatbuffer_conversions.cc
+++ /dev/null
@@ -1,1739 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/core/api/flatbuffer_conversions.h"
-
-#include
-#include
-#include
-
-#include "flatbuffers/flatbuffers.h" // from @flatbuffers
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/core/api/error_reporter.h"
-#include "tensorflow/lite/kernels/internal/compatibility.h"
-#include "tensorflow/lite/schema/schema_generated.h"
-
-namespace tflite {
-
-namespace {
-
-// Utility class for safely allocating POD data. This is useful for avoiding
-// leaks in cases where op params are allocated but fail to propagate to the
-// parsed op data (e.g., when model parameters are invalid).
-class SafeBuiltinDataAllocator {
- public:
- class BuiltinDataDeleter {
- public:
- explicit BuiltinDataDeleter(BuiltinDataAllocator* allocator)
- : allocator_(allocator) {}
-
- void operator()(void* data) { allocator_->Deallocate(data); }
-
- private:
- BuiltinDataAllocator* allocator_;
- };
-
- template
- using BuiltinDataPtr = std::unique_ptr;
-
- explicit SafeBuiltinDataAllocator(BuiltinDataAllocator* allocator)
- : allocator_(allocator) {}
-
- template
- BuiltinDataPtr Allocate() {
- return BuiltinDataPtr(allocator_->AllocatePOD(),
- BuiltinDataDeleter(allocator_));
- }
-
- private:
- BuiltinDataAllocator* allocator_;
-};
-
-// All the Parse functions take some pointers as params and this function has
-// the common DCHECKs to catch if any of those are nullptr.
-void CheckParsePointerParams(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- TFLITE_DCHECK(op != nullptr);
- TFLITE_DCHECK(error_reporter != nullptr);
- TFLITE_DCHECK(allocator != nullptr);
- TFLITE_DCHECK(builtin_data != nullptr);
-}
-
-// Copies the contents from the flatbuffer int vector `flatbuffer` into the
-// int array `buffer`. `flat_vector` and `buffer` represent the same
-// configuration operation for a given operation.
-TfLiteStatus FlatBufferIntVectorToArray(
- int max_size_of_buffer, const flatbuffers::Vector* flat_vector,
- int* buffer, ErrorReporter* error_reporter, const char* op_name) {
- if (!flat_vector) {
- TF_LITE_REPORT_ERROR(error_reporter,
- "Input array not provided for operation '%s'.\n",
- op_name);
- return kTfLiteError;
- } else {
- size_t num_dimensions = flat_vector->size();
- if (num_dimensions > max_size_of_buffer / sizeof(int)) {
- TF_LITE_REPORT_ERROR(
- error_reporter,
- "Found too many dimensions in the input array of operation '%s'.\n",
- op_name);
- return kTfLiteError;
- } else {
- for (size_t i = 0; i < num_dimensions; ++i) {
- buffer[i] = flat_vector->Get(i);
- }
- }
- }
- return kTfLiteOk;
-}
-
-// Converts the flatbuffer activation to what is used at runtime.
-TfLiteFusedActivation ConvertActivation(ActivationFunctionType activation) {
- switch (activation) {
- case ActivationFunctionType_NONE:
- return kTfLiteActNone;
- case ActivationFunctionType_RELU:
- return kTfLiteActRelu;
- case ActivationFunctionType_RELU_N1_TO_1:
- return kTfLiteActReluN1To1;
- case ActivationFunctionType_RELU6:
- return kTfLiteActRelu6;
- case ActivationFunctionType_TANH:
- return kTfLiteActTanh;
- case ActivationFunctionType_SIGN_BIT:
- return kTfLiteActSignBit;
- }
- return kTfLiteActNone;
-}
-
-// Converts the flatbuffer padding enum to what is used at runtime.
-TfLitePadding ConvertPadding(Padding padding) {
- switch (padding) {
- case Padding_SAME:
- return kTfLitePaddingSame;
- case Padding_VALID:
- return kTfLitePaddingValid;
- }
- return kTfLitePaddingUnknown;
-}
-
-#ifndef TF_LITE_STATIC_MEMORY
-TfLiteStatus ParseOpDataTfLite(const Operator* op, BuiltinOperator op_type,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- auto parseLSHProjectionType = [](LSHProjectionType type) {
- switch (type) {
- case LSHProjectionType_SPARSE:
- return kTfLiteLshProjectionSparse;
- case LSHProjectionType_DENSE:
- return kTfLiteLshProjectionDense;
- default:
- return kTfLiteLshProjectionUnknown;
- }
- };
- auto parseCombinerType = [](CombinerType type) {
- switch (type) {
- case CombinerType_MEAN:
- return kTfLiteCombinerTypeMean;
- case CombinerType_SQRTN:
- return kTfLiteCombinerTypeSqrtn;
- case CombinerType_SUM:
- default:
- return kTfLiteCombinerTypeSum;
- }
- };
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- *builtin_data = nullptr;
- switch (op_type) {
- case BuiltinOperator_ABS: {
- return ParseAbs(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_ADD: {
- return ParseAdd(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_ARG_MAX: {
- return ParseArgMax(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_ARG_MIN: {
- return ParseArgMin(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_AVERAGE_POOL_2D: {
- return ParsePool(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_CEIL: {
- return ParseCeil(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_CONCATENATION: {
- return ParseConcatenation(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_CONV_2D: {
- return ParseConv2D(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_DEPTHWISE_CONV_2D: {
- return ParseDepthwiseConv2D(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_DEQUANTIZE: {
- return ParseDequantize(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_FLOOR: {
- return ParseFloor(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_FULLY_CONNECTED: {
- return ParseFullyConnected(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_GREATER: {
- return ParseGreater(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_GREATER_EQUAL: {
- return ParseGreaterEqual(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_HARD_SWISH: {
- return ParseHardSwish(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_L2_NORMALIZATION: {
- return ParseL2Normalization(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_L2_POOL_2D: {
- return ParsePool(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LESS: {
- return ParseLess(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LESS_EQUAL: {
- return ParseLessEqual(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LOG: {
- return ParseLog(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LOGICAL_AND: {
- return ParseLogicalAnd(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LOGICAL_NOT: {
- return ParseLogicalNot(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LOGICAL_OR: {
- return ParseLogicalOr(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_LOGISTIC: {
- return ParseLogistic(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_MAXIMUM: {
- return ParseMaximum(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_MAX_POOL_2D: {
- return ParsePool(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_MEAN: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_MINIMUM: {
- return ParseMinimum(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_MUL: {
- return ParseMul(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_NEG: {
- return ParseNeg(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_NOT_EQUAL: {
- return ParseNotEqual(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_PACK: {
- return ParsePack(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_PAD: {
- return ParsePad(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_PADV2: {
- return ParsePadV2(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_PRELU: {
- return ParsePrelu(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_QUANTIZE: {
- return ParseQuantize(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_REDUCE_ANY: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_REDUCE_MAX: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_REDUCE_MIN: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_REDUCE_PROD: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_RELU: {
- return ParseRelu(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_RELU6: {
- return ParseRelu6(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_RESHAPE: {
- return ParseReshape(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_RESIZE_NEAREST_NEIGHBOR: {
- return ParseResizeNearestNeighbor(op, error_reporter, allocator,
- builtin_data);
- }
-
- case BuiltinOperator_ROUND: {
- return ParseRound(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_RSQRT: {
- return ParseRsqrt(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SIN: {
- return ParseSin(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SOFTMAX: {
- return ParseSoftmax(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SPLIT: {
- return ParseSplit(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SQRT: {
- return ParseSqrt(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SQUARE: {
- return ParseSquare(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_STRIDED_SLICE: {
- return ParseStridedSlice(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SUB: {
- return ParseSub(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SUM: {
- return ParseReducer(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_SVDF: {
- return ParseSvdf(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_TANH: {
- return ParseTanh(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_UNPACK: {
- return ParseUnpack(op, error_reporter, allocator, builtin_data);
- }
-
- case BuiltinOperator_CAST: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_CastOptions()) {
- TF_LITE_ENSURE_STATUS(ConvertTensorType(schema_params->in_data_type(),
- ¶ms->in_data_type,
- error_reporter));
- TF_LITE_ENSURE_STATUS(ConvertTensorType(schema_params->out_data_type(),
- ¶ms->out_data_type,
- error_reporter));
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_LSH_PROJECTION: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* lshParams =
- op->builtin_options_as_LSHProjectionOptions()) {
- params->type = parseLSHProjectionType(lshParams->type());
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_RNN: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* sequence_rnn_params =
- op->builtin_options_as_SequenceRNNOptions()) {
- params->activation =
- ConvertActivation(sequence_rnn_params->fused_activation_function());
- params->time_major = sequence_rnn_params->time_major();
- params->asymmetric_quantize_inputs =
- sequence_rnn_params->asymmetric_quantize_inputs();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_BIDIRECTIONAL_SEQUENCE_RNN: {
- auto params =
- safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* bidi_sequence_rnn_params =
- op->builtin_options_as_BidirectionalSequenceRNNOptions()) {
- params->activation = ConvertActivation(
- bidi_sequence_rnn_params->fused_activation_function());
- params->time_major = bidi_sequence_rnn_params->time_major();
- params->merge_outputs = bidi_sequence_rnn_params->merge_outputs();
- params->asymmetric_quantize_inputs =
- bidi_sequence_rnn_params->asymmetric_quantize_inputs();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_RNN: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* rnn_params = op->builtin_options_as_RNNOptions()) {
- params->activation =
- ConvertActivation(rnn_params->fused_activation_function());
- params->asymmetric_quantize_inputs =
- rnn_params->asymmetric_quantize_inputs();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_EMBEDDING_LOOKUP_SPARSE: {
- auto params =
- safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* embedding_params =
- op->builtin_options_as_EmbeddingLookupSparseOptions()) {
- params->combiner = parseCombinerType(embedding_params->combiner());
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
-
- case BuiltinOperator_HASHTABLE_LOOKUP:
- // no-op.
- return kTfLiteOk;
- case BuiltinOperator_DIV: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_DivOptions()) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_LOCAL_RESPONSE_NORMALIZATION: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params =
- op->builtin_options_as_LocalResponseNormalizationOptions()) {
- params->radius = schema_params->radius();
- params->bias = schema_params->bias();
- params->alpha = schema_params->alpha();
- params->beta = schema_params->beta();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_LSTM: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* lstm_params = op->builtin_options_as_LSTMOptions()) {
- params->activation =
- ConvertActivation(lstm_params->fused_activation_function());
- params->cell_clip = lstm_params->cell_clip();
- params->proj_clip = lstm_params->proj_clip();
- switch (lstm_params->kernel_type()) {
- case LSTMKernelType_FULL:
- params->kernel_type = kTfLiteLSTMFullKernel;
- break;
- case LSTMKernelType_BASIC:
- params->kernel_type = kTfLiteLSTMBasicKernel;
- break;
- default:
- TF_LITE_REPORT_ERROR(error_reporter,
- "Unhandled LSTM kernel type: %d",
- lstm_params->kernel_type());
- return kTfLiteError;
- }
- params->asymmetric_quantize_inputs =
- lstm_params->asymmetric_quantize_inputs();
- } else {
- TF_LITE_REPORT_ERROR(error_reporter,
- "No valid LSTM builtin options exist");
- return kTfLiteError;
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_UNIDIRECTIONAL_SEQUENCE_LSTM: {
- auto params =
- safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* seq_lstm_params =
- op->builtin_options_as_UnidirectionalSequenceLSTMOptions()) {
- params->activation =
- ConvertActivation(seq_lstm_params->fused_activation_function());
- params->cell_clip = seq_lstm_params->cell_clip();
- params->proj_clip = seq_lstm_params->proj_clip();
- params->time_major = seq_lstm_params->time_major();
- params->asymmetric_quantize_inputs =
- seq_lstm_params->asymmetric_quantize_inputs();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_BIDIRECTIONAL_SEQUENCE_LSTM: {
- auto params =
- safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* bidi_lstm_params =
- op->builtin_options_as_BidirectionalSequenceLSTMOptions()) {
- params->activation =
- ConvertActivation(bidi_lstm_params->fused_activation_function());
- params->cell_clip = bidi_lstm_params->cell_clip();
- params->proj_clip = bidi_lstm_params->proj_clip();
- params->merge_outputs = bidi_lstm_params->merge_outputs();
- params->time_major = bidi_lstm_params->time_major();
- params->asymmetric_quantize_inputs =
- bidi_lstm_params->asymmetric_quantize_inputs();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_RESIZE_BILINEAR: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params =
- op->builtin_options_as_ResizeBilinearOptions()) {
- params->align_corners = schema_params->align_corners();
- params->half_pixel_centers = schema_params->half_pixel_centers();
- } else {
- // Some older models did not populate the ResizeBilinearOptions field in
- // the flatbuffer, so ensure it's set to a sensible default.
- params->align_corners = false;
- params->half_pixel_centers = false;
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SKIP_GRAM: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* skip_gram_params =
- op->builtin_options_as_SkipGramOptions()) {
- params->ngram_size = skip_gram_params->ngram_size();
- params->max_skip_size = skip_gram_params->max_skip_size();
- params->include_all_ngrams = skip_gram_params->include_all_ngrams();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SPACE_TO_DEPTH: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params =
- op->builtin_options_as_SpaceToDepthOptions()) {
- params->block_size = schema_params->block_size();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_DEPTH_TO_SPACE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params =
- op->builtin_options_as_DepthToSpaceOptions()) {
- params->block_size = schema_params->block_size();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_GATHER: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- params->axis = 0;
- if (const auto* gather_params = op->builtin_options_as_GatherOptions()) {
- params->axis = gather_params->axis();
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SPLIT_V: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_SplitVOptions()) {
- params->num_splits = schema_params->num_splits();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SQUEEZE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_SqueezeOptions()) {
- const auto* squeeze_dims = schema_params->squeeze_dims();
- TF_LITE_ENSURE_STATUS(FlatBufferIntVectorToArray(
- sizeof(params->squeeze_dims), squeeze_dims, params->squeeze_dims,
- error_reporter, "squeeze"));
- params->num_squeeze_dims = squeeze_dims->size();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_TRANSPOSE_CONV: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* transpose_conv_params =
- op->builtin_options_as_TransposeConvOptions()) {
- params->padding = ConvertPadding(transpose_conv_params->padding());
- params->stride_width = transpose_conv_params->stride_w();
- params->stride_height = transpose_conv_params->stride_h();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SPARSE_TO_DENSE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* sparse_to_dense_params =
- op->builtin_options_as_SparseToDenseOptions()) {
- params->validate_indices = sparse_to_dense_params->validate_indices();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_SHAPE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_ShapeOptions()) {
- TF_LITE_ENSURE_STATUS(ConvertTensorType(
- schema_params->out_type(), ¶ms->out_type, error_reporter));
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_DELEGATE: {
- // TODO(ycling): Revisit when supporting saving delegated models.
- TF_LITE_REPORT_ERROR(error_reporter,
- "DELEGATE op shouldn't exist in model.");
- return kTfLiteError;
- }
- case BuiltinOperator_FAKE_QUANT: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params =
- op->builtin_options_as_FakeQuantOptions()) {
- params->min = schema_params->min();
- params->max = schema_params->max();
- params->num_bits = schema_params->num_bits();
- params->narrow_range = schema_params->narrow_range();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_ONE_HOT: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* schema_params = op->builtin_options_as_OneHotOptions()) {
- params->axis = schema_params->axis();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_LEAKY_RELU: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* leaky_relu_params =
- op->builtin_options_as_LeakyReluOptions()) {
- params->alpha = leaky_relu_params->alpha();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_MIRROR_PAD: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- const auto* mirror_pad_params = op->builtin_options_as_MirrorPadOptions();
- if (mirror_pad_params != nullptr) {
- params->mode =
- mirror_pad_params->mode() == tflite::MirrorPadMode_REFLECT
- ? TfLiteMirrorPaddingMode::kTfLiteMirrorPaddingReflect
- : TfLiteMirrorPaddingMode::kTfLiteMirrorPaddingSymmetric;
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_UNIQUE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- const auto* unique_params = op->builtin_options_as_UniqueOptions();
- if (unique_params != nullptr) {
- params->index_out_type =
- unique_params->idx_out_type() == tflite::TensorType_INT64
- ? TfLiteType::kTfLiteInt64
- : TfLiteType::kTfLiteInt32;
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_REVERSE_SEQUENCE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* reverse_seq_params =
- op->builtin_options_as_ReverseSequenceOptions()) {
- params->seq_dim = reverse_seq_params->seq_dim();
- params->batch_dim = reverse_seq_params->batch_dim();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_IF: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* if_params = op->builtin_options_as_IfOptions()) {
- params->then_subgraph_index = if_params->then_subgraph_index();
- params->else_subgraph_index = if_params->else_subgraph_index();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_WHILE: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* while_params = op->builtin_options_as_WhileOptions()) {
- params->cond_subgraph_index = while_params->cond_subgraph_index();
- params->body_subgraph_index = while_params->body_subgraph_index();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- case BuiltinOperator_BATCH_MATMUL: {
- auto params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
- if (const auto* bmm_params =
- op->builtin_options_as_BatchMatMulOptions()) {
- params->adj_x = bmm_params->adj_x();
- params->adj_y = bmm_params->adj_y();
- }
- *builtin_data = params.release();
- return kTfLiteOk;
- }
- // Below are the ops with no builtin_data structure.
- case BuiltinOperator_BATCH_TO_SPACE_ND:
- // TODO(aselle): Implement call in BuiltinOptions, but nullptrs are
- // ok for now, since there is no call implementation either.
- case BuiltinOperator_CALL:
- case BuiltinOperator_CONCAT_EMBEDDINGS:
- case BuiltinOperator_COS:
- case BuiltinOperator_CUSTOM:
- case BuiltinOperator_ELU:
- case BuiltinOperator_EMBEDDING_LOOKUP:
- case BuiltinOperator_EQUAL:
- case BuiltinOperator_EXP:
- case BuiltinOperator_EXPAND_DIMS:
- case BuiltinOperator_LOG_SOFTMAX:
- case BuiltinOperator_MATRIX_DIAG:
- case BuiltinOperator_MATRIX_SET_DIAG:
- case BuiltinOperator_RELU_N1_TO_1:
- case BuiltinOperator_SELECT:
- case BuiltinOperator_SELECT_V2:
- case BuiltinOperator_SLICE:
- case BuiltinOperator_SPACE_TO_BATCH_ND:
- case BuiltinOperator_TILE:
- case BuiltinOperator_TOPK_V2:
- case BuiltinOperator_TRANSPOSE:
- case BuiltinOperator_POW:
- case BuiltinOperator_FLOOR_DIV:
- case BuiltinOperator_ZEROS_LIKE:
- case BuiltinOperator_FILL:
- case BuiltinOperator_FLOOR_MOD:
- case BuiltinOperator_RANGE:
- case BuiltinOperator_SQUARED_DIFFERENCE:
- case BuiltinOperator_REVERSE_V2:
- case BuiltinOperator_ADD_N:
- case BuiltinOperator_GATHER_ND:
- case BuiltinOperator_WHERE:
- case BuiltinOperator_RANK:
- case BuiltinOperator_NON_MAX_SUPPRESSION_V4:
- case BuiltinOperator_NON_MAX_SUPPRESSION_V5:
- case BuiltinOperator_SCATTER_ND:
- case BuiltinOperator_DENSIFY:
- case BuiltinOperator_SEGMENT_SUM:
- return kTfLiteOk;
- }
- return kTfLiteError;
-} // NOLINT[readability/fn_size]
-#endif // !defined(TF_LITE_STATIC_MEMORY)
-} // namespace
-
-TfLiteStatus ConvertTensorType(TensorType tensor_type, TfLiteType* type,
- ErrorReporter* error_reporter) {
- switch (tensor_type) {
- case TensorType_FLOAT16:
- *type = kTfLiteFloat16;
- return kTfLiteOk;
- case TensorType_FLOAT32:
- *type = kTfLiteFloat32;
- return kTfLiteOk;
- case TensorType_FLOAT64:
- *type = kTfLiteFloat64;
- return kTfLiteOk;
- case TensorType_INT16:
- *type = kTfLiteInt16;
- return kTfLiteOk;
- case TensorType_INT32:
- *type = kTfLiteInt32;
- return kTfLiteOk;
- case TensorType_UINT8:
- *type = kTfLiteUInt8;
- return kTfLiteOk;
- case TensorType_INT8:
- *type = kTfLiteInt8;
- return kTfLiteOk;
- case TensorType_INT64:
- *type = kTfLiteInt64;
- return kTfLiteOk;
- case TensorType_STRING:
- *type = kTfLiteString;
- return kTfLiteOk;
- case TensorType_BOOL:
- *type = kTfLiteBool;
- return kTfLiteOk;
- case TensorType_COMPLEX64:
- *type = kTfLiteComplex64;
- return kTfLiteOk;
- case TensorType_COMPLEX128:
- *type = kTfLiteComplex128;
- return kTfLiteOk;
- default:
- *type = kTfLiteNoType;
- TF_LITE_REPORT_ERROR(error_reporter,
- "Unsupported data type %d in tensor\n", tensor_type);
- return kTfLiteError;
- }
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseAbs(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseAdd(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const AddOptions* schema_params = op->builtin_options_as_AddOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- params->pot_scale_int16 = schema_params->pot_scale_int16();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseArgMax(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ArgMaxOptions* schema_params = op->builtin_options_as_ArgMaxOptions();
-
- if (schema_params != nullptr) {
- TF_LITE_ENSURE_STATUS(ConvertTensorType(
- schema_params->output_type(), ¶ms->output_type, error_reporter));
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseArgMin(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ArgMinOptions* schema_params = op->builtin_options_as_ArgMinOptions();
-
- if (schema_params != nullptr) {
- TF_LITE_ENSURE_STATUS(ConvertTensorType(
- schema_params->output_type(), ¶ms->output_type, error_reporter));
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseCeil(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseConcatenation(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ConcatenationOptions* schema_params =
- op->builtin_options_as_ConcatenationOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- params->axis = schema_params->axis();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseConv2D(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const Conv2DOptions* schema_params = op->builtin_options_as_Conv2DOptions();
-
- if (schema_params != nullptr) {
- params->padding = ConvertPadding(schema_params->padding());
- params->stride_width = schema_params->stride_w();
- params->stride_height = schema_params->stride_h();
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
-
- params->dilation_width_factor = schema_params->dilation_w_factor();
- params->dilation_height_factor = schema_params->dilation_h_factor();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseCos(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseDepthwiseConv2D(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
-
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const DepthwiseConv2DOptions* schema_params =
- op->builtin_options_as_DepthwiseConv2DOptions();
-
- if (schema_params != nullptr) {
- params->padding = ConvertPadding(schema_params->padding());
- params->stride_width = schema_params->stride_w();
- params->stride_height = schema_params->stride_h();
- params->depth_multiplier = schema_params->depth_multiplier();
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
-
- params->dilation_width_factor = schema_params->dilation_w_factor();
- params->dilation_height_factor = schema_params->dilation_h_factor();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseDequantize(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseEqual(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseFloor(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseFullyConnected(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
-
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const FullyConnectedOptions* schema_params =
- op->builtin_options_as_FullyConnectedOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- params->keep_num_dims = schema_params->keep_num_dims();
- params->asymmetric_quantize_inputs =
- schema_params->asymmetric_quantize_inputs();
-
- switch (schema_params->weights_format()) {
- case FullyConnectedOptionsWeightsFormat_DEFAULT:
- params->weights_format = kTfLiteFullyConnectedWeightsFormatDefault;
- break;
- case FullyConnectedOptionsWeightsFormat_SHUFFLED4x16INT8:
- params->weights_format =
- kTfLiteFullyConnectedWeightsFormatShuffled4x16Int8;
- break;
- default:
- TF_LITE_REPORT_ERROR(error_reporter,
- "Unhandled fully-connected weights format.");
- return kTfLiteError;
- }
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseGreater(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseGreaterEqual(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseHardSwish(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseL2Normalization(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const L2NormOptions* schema_params = op->builtin_options_as_L2NormOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLess(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLessEqual(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLog(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLogicalAnd(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLogicalNot(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLogicalOr(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseLogistic(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseMaximum(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseMinimum(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseMul(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const MulOptions* schema_params = op->builtin_options_as_MulOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseNeg(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseNotEqual(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParsePack(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const PackOptions* schema_params = op->builtin_options_as_PackOptions();
-
- if (schema_params != nullptr) {
- params->values_count = schema_params->values_count();
- params->axis = schema_params->axis();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParsePad(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParsePadV2(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParsePool(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const Pool2DOptions* schema_params = op->builtin_options_as_Pool2DOptions();
-
- if (schema_params != nullptr) {
- params->padding = ConvertPadding(schema_params->padding());
- params->stride_width = schema_params->stride_w();
- params->stride_height = schema_params->stride_h();
- params->filter_width = schema_params->filter_width();
- params->filter_height = schema_params->filter_height();
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParsePrelu(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseQuantize(const Operator*, ErrorReporter*,
- BuiltinDataAllocator*, void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseReducer(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
-
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ReducerOptions* schema_params = op->builtin_options_as_ReducerOptions();
-
- if (schema_params != nullptr) {
- params->keep_dims = schema_params->keep_dims();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseRelu(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseRelu6(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseReshape(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
-
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ReshapeOptions* schema_params = op->builtin_options_as_ReshapeOptions();
-
- if (schema_params != nullptr) {
- const flatbuffers::Vector* new_shape = schema_params->new_shape();
- // TODO(b/147203660): We need to figure out when dynamic reshape
- // (new_shape is a tensor) happens, why the option is not a nullptr.
- // But nonethless, we should only copy when new_shape is not a nullptr.
- if (new_shape != nullptr) {
- TF_LITE_ENSURE_STATUS(
- FlatBufferIntVectorToArray(sizeof(params->shape), new_shape,
- params->shape, error_reporter, "reshape"));
- params->num_dimensions = new_shape->size();
- } else {
- // TODO(b/157480169) TODO(b/147203660): We should either return
- // kTfLiteError or fill in some reasonable defaults in the params struct.
- // We are not doing so until we better undertand the ramifications of
- // changing the legacy behavior.
- }
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseResizeNearestNeighbor(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const ResizeNearestNeighborOptions* schema_params =
- op->builtin_options_as_ResizeNearestNeighborOptions();
-
- if (schema_params != nullptr) {
- params->align_corners = schema_params->align_corners();
- params->half_pixel_centers = schema_params->half_pixel_centers();
- } else {
- params->align_corners = false;
- params->half_pixel_centers = false;
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseRound(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseRsqrt(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseSin(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseSoftmax(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const SoftmaxOptions* schema_params = op->builtin_options_as_SoftmaxOptions();
-
- if (schema_params != nullptr) {
- params->beta = schema_params->beta();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseSplit(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const SplitOptions* schema_params = op->builtin_options_as_SplitOptions();
-
- if (schema_params != nullptr) {
- params->num_splits = schema_params->num_splits();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseSqrt(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseSquare(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseStridedSlice(const Operator* op,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator,
- void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const StridedSliceOptions* schema_params =
- op->builtin_options_as_StridedSliceOptions();
-
- if (schema_params != nullptr) {
- params->begin_mask = schema_params->begin_mask();
- params->end_mask = schema_params->end_mask();
- params->ellipsis_mask = schema_params->ellipsis_mask();
- params->new_axis_mask = schema_params->new_axis_mask();
- params->shrink_axis_mask = schema_params->shrink_axis_mask();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseSub(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const SubOptions* schema_params = op->builtin_options_as_SubOptions();
-
- if (schema_params != nullptr) {
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- params->pot_scale_int16 = schema_params->pot_scale_int16();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseSvdf(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const SVDFOptions* schema_params = op->builtin_options_as_SVDFOptions();
- if (schema_params != nullptr) {
- params->rank = schema_params->rank();
- params->activation =
- ConvertActivation(schema_params->fused_activation_function());
- params->asymmetric_quantize_inputs =
- schema_params->asymmetric_quantize_inputs();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-// We have this parse function instead of directly returning kTfLiteOk from the
-// switch-case in ParseOpData because this function is used as part of the
-// selective registration for the OpResolver implementation in micro.
-TfLiteStatus ParseTanh(const Operator*, ErrorReporter*, BuiltinDataAllocator*,
- void**) {
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseUnpack(const Operator* op, ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
- CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
-
- SafeBuiltinDataAllocator safe_allocator(allocator);
- std::unique_ptr
- params = safe_allocator.Allocate();
- TF_LITE_ENSURE(error_reporter, params != nullptr);
-
- const UnpackOptions* schema_params = op->builtin_options_as_UnpackOptions();
-
- if (schema_params != nullptr) {
- params->num = schema_params->num();
- params->axis = schema_params->axis();
- } else {
- // TODO(b/157480169): We should either return kTfLiteError or fill in some
- // reasonable defaults in the params struct. We are not doing so until we
- // better undertand the ramifications of changing the legacy behavior.
- }
-
- *builtin_data = params.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
- ErrorReporter* error_reporter,
- BuiltinDataAllocator* allocator, void** builtin_data) {
-// TODO(b/145762662): It would be preferable to have the build graph for TF Lite
-// Micro not have the ParseOpData function at all. This would require splitting
-// the current file into two separate files, one of which defines the
-// ParseOpData function and the other that defines the operator specific parse
-// functions (e.g. ParseAdd).
-//
-// Such a split was attempted but was not worth the effort at the time because
-// of the following reasons:
-// * We could either duplicate the functions and the SafeBuiltinDataAllocator
-// class in the anonymous namespace of this file, or attempt to make a common
-// library with these helper functions and class.
-// * Making a common library with a separate build target was not feasible as
-// it introduced circular dependencies due to the ErrorReporter and a common
-// .cc and .h within the same api build target the also cause circular
-// dependencies due to the BuiltinDataAllocator class.
-// * If all the builtin operators were to have their own parse functions, or we
-// were ok with some amount of code duplication, then this split of the .cc
-// files would be a lot more feasible.
-#ifdef TF_LITE_STATIC_MEMORY
- TF_LITE_REPORT_ERROR(
- error_reporter,
- "ParseOpData is unsupported on TfLiteMicro, please use the operator "
- "specific parse functions (e.g. ParseAdd etc.).\n");
- return kTfLiteError;
-#else
- return ParseOpDataTfLite(op, op_type, error_reporter, allocator,
- builtin_data);
-#endif
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/op_resolver.cc b/components/tflite_micro/Source/tensorflow/lite/core/api/op_resolver.cc
deleted file mode 100644
index c239d9ed..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/core/api/op_resolver.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/core/api/op_resolver.h"
-
-#include "flatbuffers/flatbuffers.h" // from @flatbuffers
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/core/api/error_reporter.h"
-
-namespace tflite {
-
-TfLiteStatus GetRegistrationFromOpCode(
- const OperatorCode* opcode, const OpResolver& op_resolver,
- ErrorReporter* error_reporter, const TfLiteRegistration** registration) {
- TfLiteStatus status = kTfLiteOk;
- *registration = nullptr;
- auto builtin_code = opcode->builtin_code();
- int version = opcode->version();
-
- if (builtin_code > BuiltinOperator_MAX ||
- builtin_code < BuiltinOperator_MIN) {
- TF_LITE_REPORT_ERROR(
- error_reporter,
- "Op builtin_code out of range: %d. Are you using old TFLite binary "
- "with newer model?",
- builtin_code);
- status = kTfLiteError;
- } else if (builtin_code != BuiltinOperator_CUSTOM) {
- *registration = op_resolver.FindOp(builtin_code, version);
- if (*registration == nullptr) {
- TF_LITE_REPORT_ERROR(
- error_reporter,
- "Didn't find op for builtin opcode '%s' version '%d'\n",
- EnumNameBuiltinOperator(builtin_code), version);
- status = kTfLiteError;
- }
- } else if (!opcode->custom_code()) {
- TF_LITE_REPORT_ERROR(
- error_reporter,
- "Operator with CUSTOM builtin_code has no custom_code.\n");
- status = kTfLiteError;
- } else {
- const char* name = opcode->custom_code()->c_str();
- *registration = op_resolver.FindOp(name, version);
- if (*registration == nullptr) {
- // Do not report error for unresolved custom op, we do the final check
- // while preparing ops.
- status = kTfLiteError;
- }
- }
- return status;
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/core/api/tensor_utils.cc b/components/tflite_micro/Source/tensorflow/lite/core/api/tensor_utils.cc
deleted file mode 100644
index 3aac16b6..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/core/api/tensor_utils.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/core/api/tensor_utils.h"
-
-#include
-
-#include "tensorflow/lite/c/common.h"
-
-namespace tflite {
-
-TfLiteStatus ResetVariableTensor(TfLiteTensor* tensor) {
- if (!tensor->is_variable) {
- return kTfLiteOk;
- }
- // TODO(b/115961645): Implement - If a variable tensor has a buffer, reset it
- // to the value of the buffer.
- int value = 0;
- if (tensor->type == kTfLiteInt8) {
- value = tensor->params.zero_point;
- }
- // TODO(b/139446230): Provide a platform header to better handle these
- // specific scenarios.
-#if __ANDROID__ || defined(__x86_64__) || defined(__i386__) || \
- defined(__i386) || defined(__x86__) || defined(__X86__) || \
- defined(_X86_) || defined(_M_IX86) || defined(_M_X64)
- memset(tensor->data.raw, value, tensor->bytes);
-#else
- char* raw_ptr = tensor->data.raw;
- for (size_t i = 0; i < tensor->bytes; ++i) {
- *raw_ptr = value;
- raw_ptr++;
- }
-#endif
- return kTfLiteOk;
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/quantization_util.cc b/components/tflite_micro/Source/tensorflow/lite/kernels/internal/quantization_util.cc
deleted file mode 100644
index cf431cff..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/kernels/internal/quantization_util.cc
+++ /dev/null
@@ -1,395 +0,0 @@
-/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-
-#include
-#include
-#include
-
-#include "tensorflow/lite/kernels/internal/compatibility.h"
-#include "tensorflow/lite/kernels/internal/cppmath.h"
-
-namespace tflite {
-
-namespace {
-// These constants are used to manipulate the binary representation of doubles.
-// Double-precision binary64 floating point format is:
-// Bit | 63 | 62-52 | 51-0 |
-// | Sign | Exponent | Fraction |
-// To avoid 64-bit integers as much as possible, I break this into high and
-// low 32-bit chunks. High is:
-// Bit | 31 | 30-20 | 19-0 |
-// | Sign | Exponent | High Fraction |
-// Low is:
-// Bit | 31-0 |
-// | Low Fraction |
-// We then access the components through logical bit-wise operations to
-// extract the parts needed, with the positions and masks derived from the
-// layout shown above.
-constexpr uint64_t kSignMask = 0x8000000000000000LL;
-constexpr uint64_t kExponentMask = 0x7ff0000000000000LL;
-constexpr int32_t kExponentShift = 52;
-constexpr int32_t kExponentBias = 1023;
-constexpr uint32_t kExponentIsBadNum = 0x7ff;
-constexpr uint64_t kFractionMask = 0x000fffffffc00000LL;
-constexpr uint32_t kFractionShift = 22;
-constexpr uint32_t kFractionRoundingMask = 0x003fffff;
-constexpr uint32_t kFractionRoundingThreshold = 0x00200000;
-} // namespace
-
-void QuantizeMultiplier(double double_multiplier, int32_t* quantized_multiplier,
- int* shift) {
- if (double_multiplier == 0.) {
- *quantized_multiplier = 0;
- *shift = 0;
- return;
- }
-#ifdef TFLITE_EMULATE_FLOAT
- // If we're trying to avoid the use of floating-point instructions (for
- // example on microcontrollers) then use an alternative implementation
- // that only requires integer and bitwise operations. To enable this, you
- // need to set the define during the build process for your platform.
- int64_t q_fixed = IntegerFrExp(double_multiplier, shift);
-#else // TFLITE_EMULATE_FLOAT
- const double q = std::frexp(double_multiplier, shift);
- auto q_fixed = static_cast(TfLiteRound(q * (1ll << 31)));
-#endif // TFLITE_EMULATE_FLOAT
- TFLITE_CHECK(q_fixed <= (1ll << 31));
- if (q_fixed == (1ll << 31)) {
- q_fixed /= 2;
- ++*shift;
- }
- TFLITE_CHECK_LE(q_fixed, std::numeric_limits::max());
- // A shift amount smaller than -31 would cause all bits to be shifted out
- // and thus all results would be zero. We implement that instead with
- // q_fixed==0, so as to avoid hitting issues with right-shift
- // operations with shift amounts greater than 31. Note that this happens
- // roughly when abs(double_multiplier) < 2^-31 and the present handling means
- // that we're effectively flushing tiny double_multiplier's to zero.
- // We could conceivably handle values in the range (roughly) [32, 63]
- // as 'denormals' i.e. (shift==0, q_fixed < 2^30). In that point of view
- // the present handling is just doing 'flush denormals to zero'. We could
- // reconsider and actually generate nonzero denormals if a need arises.
- if (*shift < -31) {
- *shift = 0;
- q_fixed = 0;
- }
- *quantized_multiplier = static_cast(q_fixed);
-}
-
-void QuantizeMultiplierGreaterThanOne(double double_multiplier,
- int32_t* quantized_multiplier,
- int* left_shift) {
- TFLITE_CHECK_GT(double_multiplier, 1.);
- QuantizeMultiplier(double_multiplier, quantized_multiplier, left_shift);
- TFLITE_CHECK_GE(*left_shift, 0);
-}
-
-void QuantizeMultiplierSmallerThanOneExp(double double_multiplier,
- int32_t* quantized_multiplier,
- int* left_shift) {
- TFLITE_CHECK_LT(double_multiplier, 1.);
- TFLITE_CHECK_GT(double_multiplier, 0.);
- int shift;
- QuantizeMultiplier(double_multiplier, quantized_multiplier, &shift);
- TFLITE_CHECK_LE(shift, 0);
- *left_shift = shift;
-}
-
-int64_t IntegerFrExp(double input, int* shift) {
- // Make sure our assumptions about the double layout hold.
- TFLITE_CHECK_EQ(8, sizeof(double));
-
- // We want to access the bits of the input double value directly, which is
- // tricky to do safely, so use a union to handle the casting.
- union {
- double double_value;
- uint64_t double_as_uint;
- } cast_union;
- cast_union.double_value = input;
- const uint64_t u = cast_union.double_as_uint;
-
- // If the bitfield is all zeros apart from the sign bit, this is a normalized
- // zero value, so return standard values for this special case.
- if ((u & ~kSignMask) == 0) {
- *shift = 0;
- return 0;
- }
-
- // Deal with NaNs and Infs, which are always indicated with a fixed pattern in
- // the exponent, and distinguished by whether the fractions are zero or
- // non-zero.
- const uint32_t exponent_part = ((u & kExponentMask) >> kExponentShift);
- if (exponent_part == kExponentIsBadNum) {
- *shift = std::numeric_limits::max();
- if (u & kFractionMask) {
- // NaN, so just return zero (with the exponent set to INT_MAX).
- return 0;
- } else {
- // Infinity, so return +/- INT_MAX.
- if (u & kSignMask) {
- return std::numeric_limits::min();
- } else {
- return std::numeric_limits::max();
- }
- }
- }
-
- // The shift is fairly easy to extract from the high bits of the double value,
- // just by masking it out and applying a bias. The std::frexp() implementation
- // always returns values between 0.5 and 1.0 though, whereas the exponent
- // assumes 1.0 to 2.0 is the standard range, so I add on one to match that
- // interface.
- *shift = (exponent_part - kExponentBias) + 1;
-
- // There's an implicit high bit in the double format definition, so make sure
- // we include that at the top, and then reconstruct the rest of the fractional
- // value from the remaining fragments.
- int64_t fraction = 0x40000000 + ((u & kFractionMask) >> kFractionShift);
-
- // We're cutting off some bits at the bottom, so to exactly match the standard
- // frexp implementation here we'll apply rounding by adding one to the least
- // significant bit of the result if the discarded portion is over half of the
- // maximum.
- if ((u & kFractionRoundingMask) > kFractionRoundingThreshold) {
- fraction += 1;
- }
- // Negate the fraction if the sign bit was set.
- if (u & kSignMask) {
- fraction *= -1;
- }
-
- return fraction;
-}
-
-double DoubleFromFractionAndShift(int64_t fraction, int shift) {
- union {
- double double_value;
- uint64_t double_as_uint;
- } result;
-
- // Detect NaNs and infinities.
- if (shift == std::numeric_limits::max()) {
- if (fraction == 0) {
- return std::numeric_limits::quiet_NaN();
- } else if (fraction > 0) {
- return std::numeric_limits::infinity();
- } else {
- return -std::numeric_limits::infinity();
- }
- }
-
- // Return a normalized zero for a zero fraction.
- if (fraction == 0) {
- result.double_as_uint = 0;
- return result.double_value;
- }
-
- bool is_negative = (fraction < 0);
- int64_t encoded_fraction = is_negative ? -fraction : fraction;
- int64_t encoded_shift = (shift - 1);
- while (encoded_fraction < 0x40000000) {
- encoded_fraction *= 2;
- encoded_shift -= 1;
- }
- while (encoded_fraction > 0x80000000) {
- encoded_fraction /= 2;
- encoded_shift += 1;
- }
- encoded_fraction -= 0x40000000;
- if (encoded_shift < -1022) {
- encoded_shift = -1023;
- } else if (encoded_shift > 1022) {
- encoded_shift = 1023;
- }
- encoded_shift += kExponentBias;
- uint64_t encoded_sign = is_negative ? kSignMask : 0;
- result.double_as_uint = encoded_sign | (encoded_shift << kExponentShift) |
- (encoded_fraction << kFractionShift);
- return result.double_value;
-}
-
-double IntegerDoubleMultiply(double a, double b) {
- int a_shift;
- const int64_t a_fraction = IntegerFrExp(a, &a_shift);
- int b_shift;
- const int64_t b_fraction = IntegerFrExp(b, &b_shift);
- // Detect NaNs and infinities.
- if (a_shift == std::numeric_limits::max() ||
- (b_shift == std::numeric_limits::max())) {
- return std::numeric_limits::quiet_NaN();
- }
- const int result_shift = a_shift + b_shift + 1;
- const int64_t result_fraction = (a_fraction * b_fraction) >> 32;
- return DoubleFromFractionAndShift(result_fraction, result_shift);
-}
-
-int IntegerDoubleCompare(double a, double b) {
- int a_shift;
- const int64_t a_fraction = IntegerFrExp(a, &a_shift);
- int b_shift;
- const int64_t b_fraction = IntegerFrExp(b, &b_shift);
-
- // Detect NaNs and infinities.
- if (a_shift == std::numeric_limits::max() ||
- (b_shift == std::numeric_limits::max())) {
- return 1;
- }
-
- if ((a_fraction == 0) && (b_fraction < 0)) {
- return 1;
- } else if ((a_fraction < 0) && (b_fraction == 0)) {
- return -1;
- } else if (a_shift < b_shift) {
- return -1;
- } else if (a_shift > b_shift) {
- return 1;
- } else if (a_fraction < b_fraction) {
- return -1;
- } else if (a_fraction > b_fraction) {
- return 1;
- } else {
- return 0;
- }
-}
-
-void PreprocessSoftmaxScaling(double beta, double input_scale,
- int input_integer_bits,
- int32_t* quantized_multiplier, int* left_shift) {
- // If the overall multiplier (input and beta) is large, then exp() of an
- // input difference of 1 scaled by this will be large. In other words, we
- // can cap the multiplier and know that, when it is used, the output will be
- // (round to) zero wherever the input is not at the maximum value.
-
- // If the overall scale is less than one, and input_integer_bits=0, then the
- // result is double equivalent of Q0.31 (actually with more precision). Thus
- // this generates a Q(input_integer_bits).(31-input_integer_bits)
- // representation.
-#ifdef TFLITE_EMULATE_FLOAT
- const double input_beta = IntegerDoubleMultiply(beta, input_scale);
- int shift;
- int64_t fraction = IntegerFrExp(input_beta, &shift);
- shift += (31 - input_integer_bits);
- double input_beta_real_multiplier =
- DoubleFromFractionAndShift(fraction, shift);
- if (IntegerDoubleCompare(input_beta_real_multiplier, (1ll << 31) - 1.0) > 0) {
- input_beta_real_multiplier = (1ll << 31) - 1.0;
- }
-#else // TFLITE_EMULATE_FLOAT
- const double input_beta_real_multiplier = std::min(
- beta * input_scale * (1 << (31 - input_integer_bits)), (1ll << 31) - 1.0);
-#endif // TFLITE_EMULATE_FLOAT
-
- QuantizeMultiplierGreaterThanOne(input_beta_real_multiplier,
- quantized_multiplier, left_shift);
-}
-
-void PreprocessLogSoftmaxScalingExp(double beta, double input_scale,
- int input_integer_bits,
- int32_t* quantized_multiplier,
- int* left_shift,
- int32_t* reverse_scaling_divisor,
- int* reverse_scaling_left_shift) {
- PreprocessSoftmaxScaling(beta, input_scale, input_integer_bits,
- quantized_multiplier, left_shift);
-
- // Also calculate what amounts to the inverse scaling factor for the input.
- const double real_reverse_scaling_divisor =
- (1 << (31 - *left_shift)) / static_cast(*quantized_multiplier);
- tflite::QuantizeMultiplierSmallerThanOneExp(real_reverse_scaling_divisor,
- reverse_scaling_divisor,
- reverse_scaling_left_shift);
-}
-
-int CalculateInputRadius(int input_integer_bits, int input_left_shift,
- int total_signed_bits) {
-#ifdef TFLITE_EMULATE_FLOAT
- int64_t result = (1 << input_integer_bits) - 1;
- result <<= (total_signed_bits - input_integer_bits);
- result >>= input_left_shift;
- return result;
-#else // TFLITE_EMULATE_FLOAT
- const double max_input_rescaled =
- 1.0 * ((1 << input_integer_bits) - 1) *
- (1ll << (total_signed_bits - input_integer_bits)) /
- (1ll << input_left_shift);
- // Tighten bound using floor. Suppose that we could use the exact value.
- // After scaling the difference, the result would be at the maximum. Thus we
- // must ensure that our value has lower magnitude.
- return static_cast(std::floor(max_input_rescaled));
-#endif // TFLITE_EMULATE_FLOAT
-}
-
-void NudgeQuantizationRange(const float min, const float max,
- const int quant_min, const int quant_max,
- float* nudged_min, float* nudged_max,
- float* nudged_scale) {
- // This code originates from tensorflow/core/kernels/fake_quant_ops_functor.h.
- const float quant_min_float = static_cast(quant_min);
- const float quant_max_float = static_cast(quant_max);
- *nudged_scale = (max - min) / (quant_max_float - quant_min_float);
- const float zero_point_from_min = quant_min_float - min / *nudged_scale;
- uint16_t nudged_zero_point;
- if (zero_point_from_min < quant_min_float) {
- nudged_zero_point = static_cast(quant_min);
- } else if (zero_point_from_min > quant_max_float) {
- nudged_zero_point = static_cast(quant_max);
- } else {
- nudged_zero_point = static_cast(TfLiteRound(zero_point_from_min));
- }
- *nudged_min = (quant_min_float - nudged_zero_point) * (*nudged_scale);
- *nudged_max = (quant_max_float - nudged_zero_point) * (*nudged_scale);
-}
-
-void FakeQuantizeArray(const float nudged_scale, const float nudged_min,
- const float nudged_max, const float* input_data,
- float* output_data, const float size) {
- // This code originates from tensorflow/core/kernels/fake_quant_ops_functor.h.
- const float inv_nudged_scale = 1.0f / nudged_scale;
-
- for (int i = 0; i < size; i++) {
- const float src_val = input_data[i];
- const float clamped = std::min(nudged_max, std::max(nudged_min, src_val));
- const float clamped_shifted = clamped - nudged_min;
- const float dst_val =
- TfLiteRound(clamped_shifted * inv_nudged_scale) * nudged_scale +
- nudged_min;
- output_data[i] = dst_val;
- }
-}
-
-bool CheckedLog2(const float x, int* log2_result) {
- // Using TfLiteRound instead of std::round and std::log instead of
- // std::log2 to work around these functions being missing in a toolchain
- // used in some TensorFlow tests as of May 2018.
- const float x_log2 = std::log(x) * (1.0f / std::log(2.0f));
- const float x_log2_rounded = TfLiteRound(x_log2);
- const float x_log2_fracpart = x_log2 - x_log2_rounded;
-
- *log2_result = static_cast(x_log2_rounded);
- return std::abs(x_log2_fracpart) < 1e-3f;
-}
-
-void QuantizeMultiplierArray(const double* effective_scales, size_t size,
- int32_t* effective_scale_significand,
- int* effective_shift) {
- for (size_t i = 0; i < size; ++i) {
- QuantizeMultiplier(effective_scales[i], &effective_scale_significand[i],
- &effective_shift[i]);
- }
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/kernels/kernel_util.cc b/components/tflite_micro/Source/tensorflow/lite/kernels/kernel_util.cc
deleted file mode 100644
index 74c8c88d..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/kernels/kernel_util.cc
+++ /dev/null
@@ -1,325 +0,0 @@
-/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-#include "tensorflow/lite/kernels/kernel_util.h"
-
-#include
-#include
-
-#include
-#include
-#include
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/cppmath.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-
-namespace tflite {
-
-const TfLiteTensor* GetInput(const TfLiteContext* context,
- const TfLiteNode* node, int index) {
- if (context->tensors != nullptr) {
- return &context->tensors[node->inputs->data[index]];
- } else {
- return context->GetTensor(context, node->inputs->data[index]);
- }
-}
-
-TfLiteTensor* GetVariableInput(TfLiteContext* context, const TfLiteNode* node,
- int index) {
- TfLiteTensor* tensor = nullptr;
- if (context->tensors != nullptr) {
- tensor = &context->tensors[node->inputs->data[index]];
- } else {
- tensor = context->GetTensor(context, node->inputs->data[index]);
- }
- return tensor->is_variable ? tensor : nullptr;
-}
-
-TfLiteTensor* GetOutput(TfLiteContext* context, const TfLiteNode* node,
- int index) {
- if (context->tensors != nullptr) {
- return &context->tensors[node->outputs->data[index]];
- } else {
- return context->GetTensor(context, node->outputs->data[index]);
- }
-}
-
-const TfLiteTensor* GetOptionalInputTensor(const TfLiteContext* context,
- const TfLiteNode* node, int index) {
- const bool use_tensor = index < node->inputs->size &&
- node->inputs->data[index] != kTfLiteOptionalTensor;
- if (use_tensor) {
- if (context->tensors != nullptr) {
- return &context->tensors[node->inputs->data[index]];
- } else {
- return context->GetTensor(context, node->inputs->data[index]);
- }
- }
- return nullptr;
-}
-
-// Per-axis
-TfLiteStatus PopulateConvolutionQuantizationParams(
- TfLiteContext* context, const TfLiteTensor* input,
- const TfLiteTensor* filter, const TfLiteTensor* bias, TfLiteTensor* output,
- const TfLiteFusedActivation& activation, int32_t* multiplier, int* shift,
- int32_t* output_activation_min, int32_t* output_activation_max,
- int32_t* per_channel_multiplier, int* per_channel_shift) {
- const auto* affine_quantization =
- reinterpret_cast(filter->quantization.params);
- return PopulateConvolutionQuantizationParams(
- context, input, filter, bias, output, activation, multiplier, shift,
- output_activation_min, output_activation_max, per_channel_multiplier,
- per_channel_shift, affine_quantization->scale->size);
-}
-
-// Per-axis & per-tensor
-TfLiteStatus PopulateConvolutionQuantizationParams(
- TfLiteContext* context, const TfLiteTensor* input,
- const TfLiteTensor* filter, const TfLiteTensor* bias, TfLiteTensor* output,
- const TfLiteFusedActivation& activation, int32_t* multiplier, int* shift,
- int32_t* output_activation_min, int32_t* output_activation_max,
- int32_t* per_channel_multiplier, int* per_channel_shift, int num_channels) {
- TF_LITE_ENSURE_EQ(context, input->quantization.type,
- kTfLiteAffineQuantization);
- TF_LITE_ENSURE_EQ(context, filter->quantization.type,
- kTfLiteAffineQuantization);
- // TODO(jianlijianli): Enable bias type check and bias scale == input scale
- // * filter scale for each channel in affine quantization once bias
- // quantization is properly populated.
- // TF_LITE_ENSURE_EQ(context, bias->quantization.type,
- // kTfLiteAffineQuantization);
-
- // Check data type.
- const auto* affine_quantization =
- reinterpret_cast(filter->quantization.params);
- TF_LITE_ENSURE(context, affine_quantization);
- TF_LITE_ENSURE(context, affine_quantization->scale);
- const bool is_per_channel = affine_quantization->scale->size > 1;
- if (is_per_channel) {
- // Currently only Int8/Int16 is supported for per channel quantization.
- TF_LITE_ENSURE(context,
- input->type == kTfLiteInt8 || input->type == kTfLiteInt16);
- TF_LITE_ENSURE_EQ(context, filter->type, kTfLiteInt8);
- TF_LITE_ENSURE_EQ(context, affine_quantization->scale->size, num_channels);
- TF_LITE_ENSURE_EQ(
- context, num_channels,
- filter->dims->data[affine_quantization->quantized_dimension]);
- }
-
- // Populate multiplier and shift using affine quantization.
- const float input_scale = input->params.scale;
- const float output_scale = output->params.scale;
- const float* filter_scales = affine_quantization->scale->data;
- for (int i = 0; i < num_channels; ++i) {
- // If per-tensor quantization parameter is specified, broadcast it along the
- // quantization dimension (channels_out).
- const float scale = is_per_channel ? filter_scales[i] : filter_scales[0];
- const double filter_scale = static_cast(scale);
- const double effective_output_scale = static_cast(input_scale) *
- filter_scale /
- static_cast(output_scale);
- int32_t significand;
- int channel_shift;
- QuantizeMultiplier(effective_output_scale, &significand, &channel_shift);
- per_channel_multiplier[i] = significand;
- per_channel_shift[i] = channel_shift;
- }
-
- // Populate scalar quantization parameters.
- // This check on legacy quantization parameters is kept only for backward
- // compatibility.
- if (input->type == kTfLiteUInt8) {
- // Check bias scale == input scale * filter scale.
- double real_multiplier = 0.0;
- TF_LITE_ENSURE_STATUS(GetQuantizedConvolutionMultipler(
- context, input, filter, bias, output, &real_multiplier));
- int exponent;
-
- // Populate quantization parameters with multiplier and shift.
- QuantizeMultiplier(real_multiplier, multiplier, &exponent);
- *shift = -exponent;
- }
- if (input->type == kTfLiteInt8 || input->type == kTfLiteUInt8 ||
- input->type == kTfLiteInt16) {
- TF_LITE_ENSURE_STATUS(CalculateActivationRangeQuantized(
- context, activation, output, output_activation_min,
- output_activation_max));
- }
- return kTfLiteOk;
-}
-
-TfLiteStatus GetQuantizedConvolutionMultipler(TfLiteContext* context,
- const TfLiteTensor* input,
- const TfLiteTensor* filter,
- const TfLiteTensor* bias,
- TfLiteTensor* output,
- double* multiplier) {
- const double input_product_scale = static_cast(input->params.scale) *
- static_cast(filter->params.scale);
- // TODO(ahentz): The following conditions must be guaranteed by the training
- // pipeline.
- if (bias) {
- const double bias_scale = static_cast(bias->params.scale);
- // Here we're making sure the input_product_scale & bias_scale are about the
- // same. Since we have:
- // (output - output_zp) * output_scale =
- // input_product_scale * input_product + bias * bias_scale ---- (0)
- //
- // (0) equals:
- // (input_product + bias) * input_product_scale ----- (1)
- // +
- // bias * (bias_scale - input_product_scale) ------ (2)
- //
- // For the real kernel computation, we're doing (1), so we really need to
- // make sure (2) has minimum impact on the output, so:
- // bias * (bias_scale - input_product_scale) / output_scale should be
- // a small number for an integer.
- // Since normally bias should be within a small range.
- // We should expect (bias_scale - input_product_scale) / output_scale to
- // be a small number like 0.02.
- const double scale_diff = std::abs(input_product_scale - bias_scale);
- const double output_scale = static_cast(output->params.scale);
-
- TF_LITE_ENSURE(context, scale_diff / output_scale <= 0.02);
- }
- return GetQuantizedConvolutionMultipler(context, input, filter, output,
- multiplier);
-}
-
-TfLiteStatus GetQuantizedConvolutionMultipler(TfLiteContext* context,
- const TfLiteTensor* input,
- const TfLiteTensor* filter,
- TfLiteTensor* output,
- double* multiplier) {
- const double input_product_scale =
- static_cast(input->params.scale * filter->params.scale);
- TF_LITE_ENSURE(context, input_product_scale >= 0);
- *multiplier = input_product_scale / static_cast(output->params.scale);
-
- return kTfLiteOk;
-}
-
-namespace {
-void CalculateActivationRangeQuantizedImpl(TfLiteFusedActivation activation,
- int32_t qmin, int32_t qmax,
- TfLiteTensor* output,
- int32_t* act_min, int32_t* act_max) {
- const auto scale = output->params.scale;
- const auto zero_point = output->params.zero_point;
-
- auto quantize = [scale, zero_point](float f) {
- return zero_point + static_cast(TfLiteRound(f / scale));
- };
-
- if (activation == kTfLiteActRelu) {
- *act_min = std::max(qmin, quantize(0.0));
- *act_max = qmax;
- } else if (activation == kTfLiteActRelu6) {
- *act_min = std::max(qmin, quantize(0.0));
- *act_max = std::min(qmax, quantize(6.0));
- } else if (activation == kTfLiteActReluN1To1) {
- *act_min = std::max(qmin, quantize(-1.0));
- *act_max = std::min(qmax, quantize(1.0));
- } else {
- *act_min = qmin;
- *act_max = qmax;
- }
-}
-} // namespace
-
-TfLiteStatus CalculateActivationRangeQuantized(TfLiteContext* context,
- TfLiteFusedActivation activation,
- TfLiteTensor* output,
- int32_t* act_min,
- int32_t* act_max) {
- int32_t qmin = 0;
- int32_t qmax = 0;
- if (output->type == kTfLiteUInt8) {
- qmin = std::numeric_limits::min();
- qmax = std::numeric_limits::max();
- } else if (output->type == kTfLiteInt8) {
- qmin = std::numeric_limits::min();
- qmax = std::numeric_limits::max();
- } else if (output->type == kTfLiteInt16) {
- qmin = std::numeric_limits::min();
- qmax = std::numeric_limits::max();
- } else {
- TF_LITE_ENSURE(context, false);
- }
-
- CalculateActivationRangeQuantizedImpl(activation, qmin, qmax, output, act_min,
- act_max);
- return kTfLiteOk;
-}
-
-bool HaveSameShapes(const TfLiteTensor* input1, const TfLiteTensor* input2) {
- return TfLiteIntArrayEqual(input1->dims, input2->dims);
-}
-
-// TODO(petewarden): Having macros around this is ugly, look at other strategies
-// before replicating this approach elsewhere.
-#ifndef TF_LITE_STATIC_MEMORY
-TfLiteStatus CalculateShapeForBroadcast(TfLiteContext* context,
- const TfLiteTensor* input1,
- const TfLiteTensor* input2,
- TfLiteIntArray** output_shape) {
- int dims1 = NumDimensions(input1);
- int dims2 = NumDimensions(input2);
- int out_dims = std::max(dims1, dims2);
- if (NumElements(input1) == 0) {
- *output_shape = TfLiteIntArrayCopy(input1->dims);
- return kTfLiteOk;
- }
- std::unique_ptr shape(
- TfLiteIntArrayCreate(out_dims), TfLiteIntArrayFree);
- for (int i = 0; i < out_dims; ++i) {
- int d1 = i >= dims1 ? 1 : SizeOfDimension(input1, dims1 - i - 1);
- int d2 = i >= dims2 ? 1 : SizeOfDimension(input2, dims2 - i - 1);
- TF_LITE_ENSURE(context, d1 == d2 || d1 == 1 || d2 == 1);
- shape->data[out_dims - i - 1] = std::max(d1, d2);
- }
- *output_shape = shape.release();
- return kTfLiteOk;
-}
-
-TfLiteStatus CalculateShapeForBroadcast(TfLiteContext* context,
- const TfLiteTensor* input1,
- const TfLiteTensor* input2,
- const TfLiteTensor* input3,
- TfLiteIntArray** output_shape) {
- int dims1 = NumDimensions(input1);
- int dims2 = NumDimensions(input2);
- int dims3 = NumDimensions(input3);
- int out_dims = std::max(std::max(dims1, dims2), dims3);
- std::unique_ptr shape(
- TfLiteIntArrayCreate(out_dims), TfLiteIntArrayFree);
- for (int i = 0; i < out_dims; ++i) {
- int d1 = i >= dims1 ? 1 : SizeOfDimension(input1, dims1 - i - 1);
- int d2 = i >= dims2 ? 1 : SizeOfDimension(input2, dims2 - i - 1);
- int d3 = i >= dims3 ? 1 : SizeOfDimension(input3, dims3 - i - 1);
- int max_value = std::max(std::max(d1, d2), d3);
- TF_LITE_ENSURE(context, d1 == 1 || d1 == max_value);
- TF_LITE_ENSURE(context, d2 == 1 || d2 == max_value);
- TF_LITE_ENSURE(context, d3 == 1 || d3 == max_value);
- shape->data[out_dims - i - 1] = max_value;
- }
- *output_shape = shape.release();
- return kTfLiteOk;
-}
-#endif // TF_LITE_STATIC_MEMORY
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/all_ops_resolver.cc b/components/tflite_micro/Source/tensorflow/lite/micro/all_ops_resolver.cc
deleted file mode 100644
index ff461cb9..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/all_ops_resolver.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/all_ops_resolver.h"
-
-#include "tensorflow/lite/micro/kernels/micro_ops.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace custom {
-TfLiteRegistration* Register_ETHOSU();
-const char* GetString_ETHOSU();
-} // namespace custom
-} // namespace micro
-} // namespace ops
-
-AllOpsResolver::AllOpsResolver() {
- // Please keep this list of Builtin Operators in alphabetical order.
- AddAbs();
- AddAdd();
- AddArgMax();
- AddArgMin();
- AddAveragePool2D();
- AddCeil();
- AddConcatenation();
- AddConv2D();
- AddCos();
- AddDepthwiseConv2D();
- AddDequantize();
- AddEqual();
- AddFloor();
- AddFullyConnected();
- AddGreater();
- AddGreaterEqual();
- AddHardSwish();
- AddL2Normalization();
- AddLess();
- AddLessEqual();
- AddLog();
- AddLogicalAnd();
- AddLogicalNot();
- AddLogicalOr();
- AddLogistic();
- AddMaximum();
- AddMaxPool2D();
- AddMean();
- AddMinimum();
- AddMul();
- AddNeg();
- AddNotEqual();
- AddPack();
- AddPad();
- AddPadV2();
- AddPrelu();
- AddQuantize();
- AddRelu();
- AddRelu6();
- AddReshape();
- AddResizeNearestNeighbor();
- AddRound();
- AddRsqrt();
- AddSin();
- AddSoftmax();
- AddSplit();
- AddSqrt();
- AddSquare();
- AddStridedSlice();
- AddSub();
- AddSvdf();
- AddTanh();
- AddUnpack();
-
- // TODO(b/159644355): Figure out if custom Ops belong in AllOpsResolver.
- TfLiteRegistration* registration =
- tflite::ops::micro::custom::Register_ETHOSU();
- if (registration) {
- AddCustom(tflite::ops::micro::custom::GetString_ETHOSU(), registration);
- }
-}
-
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc b/components/tflite_micro/Source/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc
deleted file mode 100644
index 834f44ca..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.cc
+++ /dev/null
@@ -1,2898 +0,0 @@
-/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/benchmarks/keyword_scrambled_model_data.h"
-
-// Keep model aligned to 8 bytes to guarantee aligned 64-bit accesses.
-alignas(8) const unsigned char g_keyword_scrambled_model_data[] = {
- 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
- 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00,
- 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd0, 0x6e, 0x00, 0x00,
- 0xe4, 0x85, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0xbc, 0x6e, 0x00, 0x00, 0xac, 0x56, 0x00, 0x00, 0x9c, 0x52, 0x00, 0x00,
- 0x8c, 0x51, 0x00, 0x00, 0x7c, 0x4d, 0x00, 0x00, 0x2c, 0x4d, 0x00, 0x00,
- 0x1c, 0x49, 0x00, 0x00, 0x0c, 0x45, 0x00, 0x00, 0xfc, 0x43, 0x00, 0x00,
- 0xec, 0x3f, 0x00, 0x00, 0x9c, 0x3f, 0x00, 0x00, 0x8c, 0x3b, 0x00, 0x00,
- 0x7c, 0x37, 0x00, 0x00, 0x6c, 0x36, 0x00, 0x00, 0x5c, 0x32, 0x00, 0x00,
- 0x0c, 0x32, 0x00, 0x00, 0xfc, 0x2d, 0x00, 0x00, 0xec, 0x29, 0x00, 0x00,
- 0xdc, 0x28, 0x00, 0x00, 0xcc, 0x24, 0x00, 0x00, 0x7c, 0x24, 0x00, 0x00,
- 0x6c, 0x22, 0x00, 0x00, 0x5c, 0x1a, 0x00, 0x00, 0xcc, 0x19, 0x00, 0x00,
- 0xbc, 0x15, 0x00, 0x00, 0xac, 0x0d, 0x00, 0x00, 0x1c, 0x0d, 0x00, 0x00,
- 0x0c, 0x09, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x91, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0xe1, 0x4f, 0xa1,
- 0x63, 0xa4, 0x62, 0xbf, 0x3e, 0x91, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0xa3, 0xb2, 0x8f, 0xee, 0x35, 0xe6, 0xf2, 0xcc,
- 0x68, 0xa0, 0x33, 0xc4, 0x7d, 0x4e, 0xbb, 0xa9, 0x10, 0x32, 0x8e, 0x3d,
- 0x76, 0x14, 0x1c, 0x33, 0x0e, 0x77, 0xf7, 0xc8, 0x7b, 0x45, 0xc7, 0xdb,
- 0xcf, 0x87, 0xc7, 0x70, 0xa9, 0x29, 0xfd, 0x70, 0x32, 0x96, 0x35, 0x7d,
- 0xe9, 0xac, 0x6d, 0x9b, 0xfd, 0xe4, 0xbc, 0x4a, 0x57, 0xcd, 0x43, 0xcc,
- 0x73, 0x72, 0xdf, 0x07, 0x68, 0xc5, 0x67, 0xbd, 0x8a, 0x91, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb0, 0xfb, 0x5f, 0xdf,
- 0x0e, 0xb9, 0xa2, 0xfd, 0x66, 0x86, 0x13, 0x1b, 0x6d, 0x1d, 0x53, 0xdb,
- 0x83, 0xbf, 0x44, 0x29, 0x3f, 0x93, 0xee, 0x42, 0x9a, 0xf4, 0x31, 0x6e,
- 0xc3, 0x15, 0x7e, 0x48, 0x72, 0x50, 0xc3, 0x53, 0xef, 0x35, 0x1f, 0xc2,
- 0x29, 0x42, 0xb4, 0xd7, 0x4b, 0xd7, 0x98, 0x60, 0xb9, 0x3e, 0xbb, 0x31,
- 0x35, 0xc3, 0xf6, 0x15, 0x7a, 0x9a, 0x2c, 0xfd, 0xff, 0x04, 0xd9, 0x04,
- 0x57, 0x52, 0xae, 0x99, 0xa3, 0x95, 0xae, 0x6a, 0x66, 0x52, 0x5f, 0x91,
- 0x17, 0x83, 0x0d, 0x27, 0x16, 0x02, 0x06, 0x64, 0x80, 0x05, 0x99, 0x1c,
- 0x6c, 0xab, 0xb1, 0xa1, 0x0e, 0x44, 0x1f, 0x63, 0xe9, 0xc1, 0xab, 0x8d,
- 0x08, 0x79, 0x56, 0xe0, 0x90, 0xa5, 0xb8, 0x3b, 0xc4, 0x1e, 0xa5, 0x1f,
- 0x64, 0xe4, 0x0b, 0x72, 0x62, 0x19, 0x5f, 0x66, 0xc0, 0x9b, 0x7b, 0xc4,
- 0xe5, 0x9f, 0x82, 0xa7, 0x16, 0x92, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x00, 0x3e, 0x3d, 0xf4, 0x61, 0x45, 0x2a, 0x48, 0x53,
- 0x1f, 0x22, 0x74, 0x65, 0xea, 0x5a, 0x00, 0x83, 0x68, 0xf9, 0xbb, 0xa3,
- 0xc2, 0x1a, 0x8f, 0xe1, 0xfb, 0x76, 0x6a, 0xe9, 0x1a, 0x0e, 0x4d, 0x32,
- 0xc6, 0xf3, 0x8d, 0x85, 0x54, 0xa1, 0xe9, 0xb8, 0x35, 0xee, 0xba, 0x53,
- 0x40, 0xa2, 0xea, 0x7f, 0xc3, 0x99, 0x71, 0x17, 0xdd, 0xd5, 0xfe, 0xdf,
- 0x5e, 0x15, 0xa0, 0x73, 0xf8, 0x78, 0x49, 0x73, 0xcc, 0xf0, 0x18, 0x12,
- 0x06, 0x81, 0xd6, 0x19, 0x2c, 0xa8, 0xd7, 0x80, 0x19, 0x19, 0xbf, 0x1e,
- 0x50, 0xb1, 0xfb, 0xb3, 0xa6, 0x56, 0x6f, 0x52, 0xa6, 0xc0, 0xdd, 0x3f,
- 0xbb, 0x13, 0x6e, 0x04, 0xdf, 0x79, 0xca, 0x8b, 0xa5, 0x9c, 0xa1, 0x78,
- 0x49, 0xca, 0xe5, 0x29, 0xbb, 0x29, 0x7c, 0x96, 0xc6, 0x29, 0x06, 0x99,
- 0xec, 0x50, 0xd1, 0xe8, 0x9b, 0xb7, 0x53, 0xd2, 0x36, 0x89, 0xb1, 0x5c,
- 0x38, 0xf4, 0x2f, 0xa1, 0xda, 0x6f, 0xd8, 0xd1, 0x62, 0xd2, 0xd4, 0x97,
- 0xce, 0xf1, 0xbd, 0x73, 0x2d, 0x92, 0xdb, 0x62, 0x0c, 0xb0, 0x77, 0xed,
- 0x32, 0x3a, 0xfc, 0x59, 0x94, 0xef, 0x2b, 0x48, 0x60, 0xb2, 0x82, 0xa2,
- 0xb6, 0x51, 0xdb, 0x51, 0x47, 0x99, 0x4c, 0x50, 0x93, 0x53, 0x9d, 0xa9,
- 0x3c, 0x94, 0x34, 0x9f, 0xa6, 0x3e, 0x4f, 0x87, 0xd4, 0xa0, 0x40, 0xeb,
- 0x7b, 0xfa, 0x1b, 0x7d, 0x03, 0xa8, 0xf8, 0x8b, 0xa5, 0x32, 0x3a, 0xaf,
- 0x7e, 0x6b, 0x25, 0x08, 0x97, 0x71, 0x8d, 0x0c, 0x30, 0xc9, 0xa7, 0x23,
- 0xe3, 0x51, 0xb3, 0xf2, 0x86, 0xad, 0x12, 0xe2, 0x79, 0x94, 0x7f, 0xf3,
- 0xf7, 0x88, 0x67, 0x3e, 0x8e, 0x8e, 0x04, 0x5e, 0x4f, 0x01, 0x6f, 0x1d,
- 0x78, 0x42, 0x9e, 0x47, 0x81, 0xdf, 0x03, 0x39, 0x3d, 0x9b, 0xbd, 0xb6,
- 0x06, 0x21, 0x82, 0xfe, 0xf2, 0x50, 0xe1, 0x14, 0xbc, 0xe3, 0x5e, 0xe1,
- 0xbd, 0x8f, 0xfa, 0x35, 0x31, 0x4e, 0x66, 0xeb, 0x67, 0x49, 0x1c, 0x07,
- 0x88, 0xb6, 0x22, 0x0c, 0xeb, 0xd9, 0x9f, 0x9b, 0x8b, 0xe0, 0x9c, 0x3c,
- 0xf7, 0x91, 0xab, 0x98, 0x5b, 0x0e, 0x09, 0xdd, 0xe3, 0x0b, 0x14, 0x55,
- 0xe9, 0xe4, 0x42, 0xd8, 0xce, 0xd7, 0xfd, 0x4c, 0x20, 0x9f, 0x44, 0x93,
- 0xa6, 0x17, 0x8a, 0x68, 0x8f, 0xec, 0x62, 0xd1, 0x97, 0x9c, 0xcc, 0xc4,
- 0xd9, 0x42, 0xda, 0xf1, 0x34, 0x04, 0xc6, 0xb6, 0x0f, 0xc7, 0xe6, 0x2d,
- 0x26, 0x6e, 0x6f, 0x92, 0x7e, 0xd9, 0xd4, 0x40, 0xc6, 0x70, 0xfa, 0x12,
- 0x2a, 0x1b, 0xbc, 0x50, 0xeb, 0x3b, 0x24, 0x96, 0x8d, 0x7c, 0xae, 0xbe,
- 0xc3, 0x27, 0xce, 0x97, 0xcf, 0xcd, 0x10, 0x13, 0x01, 0xc6, 0x48, 0x6a,
- 0x99, 0x38, 0x79, 0xb9, 0x1c, 0xc9, 0x09, 0xac, 0x96, 0x8c, 0xf7, 0x82,
- 0x8f, 0xb8, 0x17, 0x94, 0x2c, 0x5f, 0x40, 0xcc, 0x80, 0xf4, 0x9f, 0xaa,
- 0xcb, 0x83, 0x13, 0x7b, 0x3a, 0x78, 0x0a, 0x9f, 0x79, 0x9e, 0xfc, 0x0e,
- 0x8f, 0x98, 0x60, 0x39, 0x86, 0x44, 0x8e, 0x4b, 0xc4, 0xad, 0xe6, 0x98,
- 0x92, 0x08, 0x84, 0x48, 0x8f, 0x1d, 0x78, 0x10, 0x9e, 0xf7, 0xb8, 0x61,
- 0x65, 0x46, 0xdb, 0x4a, 0xcf, 0xc5, 0x37, 0xe3, 0x77, 0x76, 0xcf, 0x0a,
- 0x7e, 0x72, 0x3f, 0xe4, 0x51, 0x30, 0x28, 0x57, 0x13, 0xfd, 0xdb, 0x7e,
- 0xd6, 0xa3, 0xdd, 0x64, 0xdd, 0x00, 0xd0, 0x7f, 0xbc, 0x48, 0x1d, 0xaf,
- 0xde, 0x0e, 0x45, 0xc4, 0xc9, 0xfa, 0xf6, 0xb2, 0xb7, 0x9a, 0x42, 0x8b,
- 0x18, 0x08, 0xed, 0xdb, 0xa9, 0xc3, 0x32, 0xf1, 0x9c, 0xcf, 0x16, 0x74,
- 0x57, 0xce, 0xe9, 0x44, 0x21, 0xdb, 0x8a, 0x45, 0x89, 0x70, 0x41, 0x5c,
- 0xbf, 0x10, 0xdf, 0x83, 0x4a, 0xe4, 0x4c, 0xd8, 0xc9, 0x2e, 0x5b, 0xa3,
- 0x05, 0xed, 0x73, 0xb1, 0xb0, 0xb7, 0xc4, 0xd7, 0x0d, 0xea, 0xf6, 0xb4,
- 0xc1, 0x5e, 0x12, 0x54, 0x30, 0x73, 0x5c, 0x93, 0xd9, 0xf7, 0xc9, 0x24,
- 0x43, 0x8f, 0x4f, 0x8e, 0x94, 0x95, 0xb6, 0xfd, 0xa3, 0x14, 0x42, 0x50,
- 0xb8, 0x66, 0xfb, 0xc4, 0xed, 0x72, 0xcf, 0x7b, 0xa9, 0x73, 0xeb, 0xc4,
- 0x4a, 0x05, 0xea, 0xb4, 0x47, 0xca, 0x21, 0x56, 0x28, 0xa8, 0x87, 0xb8,
- 0x87, 0x0b, 0xe3, 0x8d, 0xfd, 0x70, 0xf7, 0x33, 0x76, 0xf0, 0x3d, 0xa4,
- 0x3b, 0x83, 0xab, 0x14, 0x01, 0xe1, 0xb0, 0xa9, 0x44, 0xe8, 0xd7, 0x50,
- 0x26, 0x0b, 0xbb, 0x2d, 0x57, 0x39, 0x82, 0x7c, 0x71, 0xd8, 0x12, 0xaf,
- 0xf3, 0x9f, 0x46, 0xbd, 0x62, 0xd6, 0x61, 0xf5, 0xb7, 0x04, 0x94, 0xbf,
- 0x87, 0xea, 0xc4, 0xc4, 0x33, 0xcf, 0x36, 0x3b, 0x4f, 0xc7, 0x71, 0xf1,
- 0x98, 0xe6, 0xb0, 0x96, 0x25, 0xd7, 0xac, 0x75, 0xfc, 0x92, 0xe0, 0x69,
- 0x72, 0x37, 0x8d, 0x40, 0x31, 0xaa, 0x2c, 0x86, 0xfb, 0x95, 0x3f, 0x9c,
- 0x23, 0xd4, 0x39, 0x99, 0xff, 0xea, 0x95, 0x79, 0xb9, 0x2e, 0xb0, 0x33,
- 0xf1, 0xe8, 0xd0, 0x42, 0xb5, 0x70, 0x5c, 0xca, 0x69, 0x48, 0x28, 0x23,
- 0x58, 0xb4, 0x07, 0xfc, 0x3e, 0x15, 0x29, 0x00, 0xa9, 0x22, 0x44, 0x70,
- 0xd0, 0xc7, 0x01, 0x0d, 0x3e, 0xfc, 0x57, 0xb7, 0x54, 0x3a, 0xc3, 0x43,
- 0xd6, 0x2f, 0x55, 0x09, 0x52, 0x4a, 0x6b, 0x8e, 0x4c, 0x82, 0xbb, 0x4e,
- 0x3e, 0x38, 0xe1, 0x9e, 0x72, 0x83, 0xec, 0x40, 0xf5, 0xf7, 0x0e, 0x3c,
- 0x24, 0xed, 0xda, 0xf2, 0x39, 0x6c, 0xad, 0xeb, 0xff, 0xfb, 0x4a, 0x38,
- 0x50, 0x49, 0x28, 0x3d, 0x05, 0xb2, 0x98, 0x44, 0x2b, 0x61, 0xa2, 0x9b,
- 0x3a, 0x3c, 0xad, 0xd9, 0x8c, 0xef, 0x3c, 0x72, 0x50, 0x74, 0x13, 0x80,
- 0xc4, 0x7e, 0x6e, 0xf3, 0xc9, 0xdf, 0x63, 0xf6, 0x41, 0xb2, 0x08, 0x78,
- 0x9b, 0x7c, 0xa9, 0x13, 0xd1, 0x21, 0xe7, 0x5e, 0x6a, 0x0d, 0x64, 0xf7,
- 0x52, 0x75, 0xf2, 0x80, 0x69, 0xbe, 0x43, 0xf8, 0xd4, 0xad, 0x49, 0xfc,
- 0x97, 0x76, 0x1c, 0xb6, 0x43, 0x9e, 0xcb, 0x45, 0x4d, 0x75, 0x07, 0xae,
- 0xdb, 0xbf, 0xf5, 0x8a, 0xeb, 0xb9, 0x6b, 0x12, 0x06, 0xbf, 0x94, 0xad,
- 0x77, 0x29, 0xb1, 0xae, 0x24, 0x9b, 0x4d, 0xdc, 0xe1, 0x5e, 0xd7, 0x57,
- 0xec, 0xd1, 0xd8, 0xad, 0xf0, 0x06, 0x08, 0x43, 0x33, 0x99, 0xd2, 0x04,
- 0xfc, 0xc8, 0xf6, 0x53, 0x3d, 0x73, 0xd4, 0x36, 0xd3, 0x8e, 0x4a, 0xcd,
- 0xb1, 0xe9, 0xcb, 0x3a, 0x5f, 0x54, 0xbc, 0xde, 0x16, 0xa2, 0x85, 0xde,
- 0x35, 0x27, 0x99, 0x32, 0x4f, 0xb9, 0x2c, 0x16, 0xa2, 0x6e, 0xae, 0x75,
- 0x60, 0x77, 0xe9, 0x08, 0x0f, 0x08, 0xc4, 0xd0, 0x62, 0xc7, 0xd2, 0x1f,
- 0x3b, 0x29, 0xdd, 0xb7, 0xea, 0xa3, 0x58, 0xaf, 0x4c, 0x05, 0xd2, 0x82,
- 0x6a, 0xe0, 0xc4, 0xe9, 0x70, 0x7e, 0xf2, 0xca, 0x82, 0x6a, 0xae, 0xc1,
- 0x9a, 0x42, 0x5d, 0x46, 0x4a, 0xb7, 0x8f, 0x4d, 0x33, 0xfe, 0x6f, 0x47,
- 0xb5, 0x49, 0xb3, 0x89, 0x51, 0x31, 0x74, 0x68, 0x14, 0xda, 0x0a, 0x41,
- 0x3d, 0x1f, 0x8e, 0x30, 0x8c, 0x77, 0xd1, 0xa9, 0x36, 0x41, 0x78, 0x34,
- 0xb7, 0x7e, 0x4e, 0x7a, 0x77, 0x12, 0x43, 0x97, 0x43, 0xba, 0xd6, 0x28,
- 0x14, 0x2a, 0x9f, 0x98, 0xb4, 0x39, 0x08, 0x5c, 0xb7, 0xb8, 0x03, 0x63,
- 0x62, 0x68, 0xc6, 0x9a, 0x4d, 0xf5, 0xdc, 0x7c, 0x0f, 0x7e, 0x77, 0xdc,
- 0x85, 0x53, 0x31, 0x8c, 0x53, 0x8b, 0x27, 0xc4, 0xb7, 0x3d, 0xd0, 0x94,
- 0x9b, 0x7e, 0x59, 0x59, 0x03, 0x09, 0x8c, 0x30, 0x70, 0x7d, 0x9c, 0x73,
- 0x89, 0x6c, 0x5f, 0xbf, 0xf9, 0xc7, 0x72, 0x76, 0x12, 0x98, 0xe3, 0xbe,
- 0xc3, 0x67, 0xdf, 0xa1, 0x76, 0xa3, 0xec, 0x44, 0x30, 0x70, 0x2f, 0x6a,
- 0x86, 0x28, 0xb9, 0x9d, 0x7f, 0x93, 0xf2, 0x4a, 0x34, 0x48, 0x1f, 0x2e,
- 0x2e, 0x95, 0x88, 0xdb, 0x1f, 0x2c, 0x19, 0x46, 0x2e, 0x91, 0x5f, 0x81,
- 0x0d, 0x08, 0x9d, 0x03, 0x0b, 0xaf, 0x59, 0x0a, 0x41, 0xad, 0x4d, 0x6c,
- 0x09, 0x0e, 0x9f, 0xd1, 0xc4, 0xdb, 0xac, 0x59, 0x27, 0x04, 0x1c, 0x73,
- 0xe9, 0xf3, 0xe8, 0x54, 0xd9, 0x11, 0x31, 0xb2, 0xed, 0x2d, 0x8c, 0xeb,
- 0x99, 0x26, 0x48, 0x9e, 0xac, 0x88, 0x96, 0xcb, 0x19, 0x49, 0xfa, 0x4a,
- 0x82, 0xd5, 0x5d, 0xb8, 0x0f, 0x22, 0x3f, 0xb6, 0x5c, 0x02, 0x2a, 0xb9,
- 0xd9, 0xfe, 0x4d, 0x9d, 0xdb, 0x85, 0x90, 0x19, 0x7f, 0x1a, 0x44, 0xa3,
- 0x74, 0x68, 0xbf, 0xa2, 0x3b, 0xb4, 0x3b, 0xeb, 0xab, 0x99, 0xc2, 0x46,
- 0x50, 0x7e, 0xec, 0xa9, 0xb4, 0x86, 0xfa, 0x50, 0xcb, 0x71, 0x7e, 0x75,
- 0xa5, 0xca, 0xa6, 0x2f, 0x40, 0x1d, 0xa1, 0x4a, 0x5c, 0x91, 0xd7, 0x2a,
- 0xa6, 0x17, 0x11, 0x4d, 0x19, 0x2b, 0xb3, 0x0f, 0xf0, 0xb3, 0x06, 0x70,
- 0x51, 0x5c, 0x52, 0x8c, 0xdf, 0xe3, 0x19, 0x92, 0x08, 0x40, 0xa2, 0xb4,
- 0xc0, 0xf2, 0xe8, 0x44, 0xcc, 0x36, 0xaa, 0xf9, 0xf8, 0xfc, 0x2d, 0x83,
- 0x79, 0xc6, 0x58, 0xc1, 0xdf, 0x32, 0xb7, 0xde, 0x0f, 0x3e, 0xc0, 0xa8,
- 0x7e, 0xeb, 0xf2, 0x30, 0x16, 0xdf, 0x38, 0xcb, 0x69, 0xd9, 0x44, 0x0d,
- 0x44, 0xf4, 0x45, 0x9c, 0x81, 0xc8, 0xe7, 0x06, 0xae, 0x95, 0xaf, 0xff,
- 0x17, 0x3b, 0x1c, 0x3f, 0xda, 0xa5, 0xf8, 0xfd, 0x9c, 0xf1, 0x0a, 0xca,
- 0xda, 0xc0, 0xfa, 0x02, 0xc4, 0xce, 0x78, 0xfb, 0x35, 0x8c, 0xfe, 0x55,
- 0xad, 0x0d, 0x9b, 0xeb, 0x10, 0xf1, 0x7b, 0xb1, 0x09, 0xf8, 0xef, 0xfc,
- 0xde, 0x7a, 0x69, 0x74, 0x76, 0xef, 0x91, 0x64, 0x33, 0xc4, 0x08, 0x15,
- 0x73, 0x85, 0x56, 0xae, 0x9c, 0xf6, 0xdd, 0x55, 0x19, 0x96, 0xe6, 0x41,
- 0x12, 0xc9, 0x87, 0x91, 0x9e, 0xc6, 0x18, 0xe8, 0xbf, 0xa0, 0x59, 0xfd,
- 0x20, 0xab, 0xb5, 0xcf, 0x0f, 0x6e, 0x30, 0xd3, 0xc5, 0x70, 0xf2, 0x50,
- 0xa4, 0x2a, 0xdf, 0xb0, 0x45, 0xfc, 0x82, 0x1a, 0x3b, 0xfe, 0x0c, 0xad,
- 0x41, 0x95, 0xf1, 0xd6, 0x85, 0xa2, 0xc9, 0xff, 0xbe, 0x3a, 0x64, 0x70,
- 0x43, 0xc0, 0xc5, 0xc8, 0x80, 0x11, 0x0d, 0x20, 0xcd, 0xf2, 0xa2, 0xbb,
- 0x43, 0x68, 0x0e, 0xf4, 0x01, 0xb3, 0x73, 0x79, 0x9f, 0x68, 0x41, 0x63,
- 0x3e, 0xda, 0xf9, 0xf4, 0x23, 0x57, 0x97, 0x84, 0x99, 0xe8, 0x5e, 0xdb,
- 0xaa, 0x24, 0xab, 0x9c, 0x40, 0x83, 0xf9, 0x3f, 0x4f, 0x5a, 0x53, 0xa6,
- 0xf1, 0xe8, 0x95, 0xcf, 0xcb, 0x50, 0x13, 0x51, 0xa7, 0x8c, 0x71, 0x1d,
- 0xff, 0xcc, 0x66, 0xab, 0xff, 0xca, 0xc5, 0xc3, 0x73, 0x45, 0xb7, 0x21,
- 0x1d, 0x65, 0x7a, 0xe5, 0x1f, 0x3f, 0x1a, 0x58, 0x23, 0x28, 0xc8, 0xf3,
- 0xbf, 0x98, 0x25, 0xc0, 0x83, 0x68, 0xf0, 0x62, 0x63, 0x90, 0xcf, 0x1f,
- 0x20, 0xb8, 0x04, 0x5c, 0xc4, 0x80, 0x5b, 0xf4, 0x6d, 0xdc, 0xe9, 0xac,
- 0xd8, 0x13, 0x3b, 0x42, 0xf8, 0x4e, 0xa2, 0x1c, 0xce, 0x3f, 0x8d, 0x15,
- 0xd3, 0x87, 0x1b, 0x44, 0x79, 0x52, 0x34, 0x4b, 0x63, 0x4d, 0xbf, 0x95,
- 0xec, 0xae, 0xf9, 0xc6, 0x7b, 0x7b, 0x85, 0x8c, 0x4f, 0x20, 0x58, 0x9d,
- 0x48, 0x03, 0x2f, 0x77, 0x2e, 0x8b, 0x6f, 0x66, 0x76, 0xb9, 0xb8, 0xb7,
- 0x34, 0x5a, 0x63, 0x06, 0x85, 0x82, 0x5f, 0x23, 0x8f, 0x8d, 0x0c, 0x92,
- 0x3b, 0xd2, 0x8a, 0x1b, 0x39, 0xee, 0x6a, 0xbc, 0xf6, 0x94, 0x2a, 0xc6,
- 0x73, 0xa6, 0x99, 0x98, 0xdc, 0x96, 0xd7, 0xc1, 0xfe, 0x9b, 0xc8, 0xfb,
- 0x86, 0x5a, 0xad, 0xce, 0xf8, 0xd5, 0x32, 0x62, 0x96, 0x63, 0xaf, 0x4c,
- 0x4a, 0xae, 0xec, 0x26, 0x3d, 0x84, 0x69, 0x50, 0x5f, 0x37, 0x9b, 0x29,
- 0xac, 0x15, 0x76, 0x3d, 0x33, 0x96, 0x06, 0xde, 0xc1, 0x6d, 0xa2, 0xc7,
- 0xc3, 0x8a, 0x20, 0x2e, 0xf7, 0x08, 0x55, 0x83, 0x23, 0x9c, 0x23, 0x2d,
- 0x3a, 0xa1, 0x32, 0xbc, 0x47, 0x48, 0xd5, 0x6a, 0x71, 0xb9, 0xcc, 0x2d,
- 0x99, 0xa0, 0x37, 0x07, 0x46, 0x45, 0xbe, 0xf0, 0x27, 0x5a, 0x25, 0x72,
- 0x58, 0x47, 0x6d, 0xbf, 0x23, 0xdc, 0x48, 0x44, 0x45, 0x95, 0xb1, 0x62,
- 0xf1, 0x7e, 0x4c, 0x95, 0x1c, 0xb4, 0x17, 0x8b, 0x59, 0x2e, 0xf3, 0x4f,
- 0x45, 0x3b, 0x5d, 0x67, 0x92, 0x52, 0xd8, 0xc1, 0x91, 0xfa, 0x53, 0xaa,
- 0x87, 0xc0, 0xa7, 0xb0, 0x9f, 0x10, 0xe8, 0xac, 0x45, 0x52, 0xbb, 0x17,
- 0xee, 0xf6, 0x18, 0xbe, 0x02, 0x70, 0xce, 0x79, 0x66, 0x72, 0xf9, 0xf6,
- 0xca, 0x66, 0xff, 0xa4, 0x9a, 0xd9, 0xb7, 0x07, 0xa9, 0xc1, 0x23, 0x7e,
- 0x7b, 0x9c, 0xe3, 0x02, 0x7a, 0xcc, 0xa3, 0x67, 0xb7, 0xb0, 0x37, 0xba,
- 0xae, 0x12, 0xda, 0x48, 0x6e, 0x7f, 0xde, 0x5f, 0x75, 0x15, 0xca, 0xd2,
- 0x46, 0xdd, 0xb0, 0x82, 0xbf, 0x6d, 0xe9, 0x51, 0x66, 0xa5, 0x9e, 0x0c,
- 0xd5, 0x03, 0xbd, 0x97, 0x0e, 0x1b, 0x88, 0xf6, 0x61, 0x5a, 0x8b, 0xe0,
- 0xdd, 0x3e, 0x59, 0x4c, 0x35, 0xfd, 0xb0, 0x3b, 0x79, 0x8c, 0x1c, 0x96,
- 0x97, 0x35, 0x62, 0x36, 0x62, 0x4c, 0x4b, 0x46, 0xb1, 0x21, 0xf7, 0xf0,
- 0x34, 0xdc, 0xd9, 0x9f, 0xf8, 0x53, 0x7d, 0xca, 0xbc, 0x4d, 0xaf, 0xf4,
- 0xb7, 0x2f, 0xa7, 0x5d, 0x18, 0xf9, 0x3b, 0xa9, 0xb0, 0xbb, 0xdf, 0xfa,
- 0x28, 0x2b, 0x58, 0xce, 0x46, 0x01, 0x3f, 0x76, 0xf2, 0x39, 0x45, 0x8b,
- 0x3c, 0xda, 0x62, 0x2b, 0x6b, 0xe1, 0x5f, 0x14, 0xfc, 0x79, 0x17, 0x2d,
- 0xe2, 0xe5, 0x8c, 0xc5, 0xde, 0x91, 0xfd, 0xf5, 0x6d, 0x9b, 0x6b, 0xbb,
- 0xb0, 0x13, 0xae, 0xbe, 0x1e, 0xa8, 0x8f, 0x3c, 0xfd, 0x24, 0xbe, 0xb8,
- 0x39, 0x80, 0x03, 0x06, 0x8b, 0xff, 0xca, 0x90, 0x88, 0x0f, 0x45, 0xc4,
- 0xeb, 0x50, 0x52, 0xf5, 0x00, 0x8c, 0x16, 0x9d, 0x26, 0xaa, 0xec, 0xb1,
- 0x44, 0xd6, 0xfe, 0x67, 0xa3, 0xc1, 0xec, 0x4a, 0x12, 0xa6, 0x7c, 0x7c,
- 0xc3, 0x46, 0x1c, 0x64, 0x61, 0x67, 0xec, 0xce, 0x1e, 0xa2, 0xb4, 0xdd,
- 0x6e, 0x7f, 0x02, 0x14, 0xf4, 0x1c, 0x17, 0xa7, 0x31, 0x9f, 0xc2, 0xc6,
- 0xc0, 0x21, 0x41, 0x88, 0x61, 0xd8, 0xca, 0x06, 0xa5, 0xe4, 0xef, 0xa4,
- 0xaa, 0x4d, 0xa3, 0xad, 0x5f, 0xd4, 0x0c, 0x6b, 0x14, 0x38, 0x2e, 0xe8,
- 0x87, 0x5a, 0x68, 0x10, 0x51, 0xd8, 0xbb, 0xa6, 0xd9, 0xdc, 0xd3, 0x7f,
- 0x1f, 0xea, 0xa8, 0xcc, 0x3f, 0x43, 0xa4, 0x04, 0x95, 0xb4, 0xde, 0x2f,
- 0x07, 0x5d, 0x91, 0x1c, 0x8e, 0xc3, 0xbc, 0xaa, 0x46, 0x8a, 0xa8, 0x42,
- 0xa7, 0x2c, 0x0f, 0x1f, 0xb3, 0xe2, 0x8a, 0x0b, 0xa0, 0x3f, 0xfb, 0x87,
- 0x9e, 0x42, 0xa5, 0x60, 0xce, 0x5a, 0x54, 0x91, 0x26, 0x51, 0xea, 0x81,
- 0x6f, 0xf1, 0x54, 0x93, 0xe7, 0xa0, 0xf8, 0x64, 0xab, 0x1d, 0x0d, 0x9d,
- 0x64, 0x6a, 0xd5, 0x19, 0x03, 0xbb, 0x94, 0x7f, 0x0a, 0xb8, 0x6b, 0x87,
- 0xc3, 0x1a, 0x38, 0xe5, 0xe8, 0xba, 0x13, 0x17, 0xeb, 0x13, 0xcc, 0xac,
- 0xcb, 0x1f, 0x96, 0x4c, 0x3b, 0x18, 0xfb, 0xe8, 0x5c, 0x54, 0xce, 0x1a,
- 0x91, 0x44, 0xf5, 0x49, 0x6c, 0x38, 0x2a, 0x92, 0x8a, 0x0d, 0x3d, 0x08,
- 0xc2, 0x5f, 0x6c, 0xac, 0x48, 0xb3, 0xdc, 0x2e, 0xa6, 0x5a, 0xa8, 0xee,
- 0x22, 0x9a, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x96, 0xc5, 0x3a, 0x4e, 0x42, 0x7d, 0x27, 0xce, 0x44, 0x84, 0xf1, 0x67,
- 0x8c, 0xc5, 0xdd, 0x75, 0x3b, 0x8a, 0xed, 0x2e, 0x29, 0x62, 0x7b, 0xb0,
- 0xe6, 0xa3, 0xb4, 0x61, 0x73, 0x10, 0xff, 0x0e, 0x0c, 0x98, 0x74, 0xef,
- 0xbb, 0xc4, 0xca, 0x03, 0x88, 0xa4, 0x96, 0x61, 0xef, 0x36, 0x6d, 0xa2,
- 0xb1, 0xc8, 0xf0, 0xac, 0xf1, 0xb2, 0x08, 0x56, 0xc7, 0x99, 0xcf, 0xae,
- 0x0a, 0x37, 0x85, 0x60, 0x78, 0x2d, 0x14, 0xda, 0xb1, 0xa7, 0x00, 0xb6,
- 0x00, 0x04, 0x76, 0x80, 0x0e, 0x9f, 0x2a, 0x30, 0x8b, 0x85, 0xd9, 0xc1,
- 0xaf, 0xee, 0x27, 0x80, 0x20, 0xed, 0xef, 0x25, 0x5c, 0x98, 0x6b, 0xcc,
- 0xf8, 0x72, 0xfb, 0x3f, 0x13, 0xe6, 0x9b, 0x47, 0xee, 0xa1, 0x18, 0x55,
- 0xa0, 0x68, 0xbe, 0xd4, 0x21, 0x59, 0x72, 0xa8, 0xa4, 0xd2, 0x33, 0x57,
- 0x50, 0xfc, 0x6b, 0xa8, 0x49, 0x1b, 0x74, 0xdb, 0x5a, 0x16, 0xb8, 0x52,
- 0x0c, 0xda, 0xa0, 0xa3, 0xff, 0x33, 0x56, 0x82, 0x0f, 0x0a, 0x90, 0x82,
- 0xee, 0xf1, 0x1b, 0xb3, 0x05, 0x44, 0x39, 0x01, 0xf7, 0x1e, 0xff, 0xcb,
- 0xea, 0xd0, 0xb6, 0x20, 0xbc, 0x84, 0xb1, 0xf9, 0xa2, 0xc1, 0x56, 0xe6,
- 0xfa, 0x47, 0xc9, 0xfd, 0x45, 0x77, 0x51, 0x8e, 0x01, 0xe4, 0x17, 0x20,
- 0x6f, 0x99, 0xe3, 0x90, 0x2f, 0xcc, 0xaf, 0xd9, 0x61, 0x32, 0x91, 0x62,
- 0x58, 0xf4, 0x98, 0xf5, 0xf4, 0xeb, 0x13, 0xeb, 0xdc, 0x8a, 0xac, 0xb2,
- 0x9e, 0xcf, 0xe7, 0xa7, 0xd4, 0x97, 0x22, 0x12, 0x08, 0x10, 0x6d, 0x40,
- 0xea, 0x26, 0xea, 0x42, 0x29, 0x6e, 0x75, 0x62, 0x47, 0x08, 0x17, 0xa8,
- 0x69, 0x0f, 0xf7, 0x35, 0x59, 0x23, 0x86, 0x83, 0xfd, 0xb5, 0x61, 0x98,
- 0x9c, 0x4d, 0x37, 0xda, 0x9f, 0xfc, 0xfb, 0x16, 0xb7, 0x6c, 0x52, 0xee,
- 0xa8, 0x9c, 0x3e, 0x93, 0x43, 0xc5, 0x2b, 0xd4, 0xd0, 0x9f, 0x69, 0x2c,
- 0xc9, 0x1f, 0x2e, 0xdf, 0x5b, 0xe6, 0xc6, 0x5f, 0x71, 0xd1, 0xd7, 0xb2,
- 0x8f, 0x3a, 0xba, 0x60, 0x75, 0x3d, 0x34, 0x41, 0x43, 0x9b, 0x13, 0xc0,
- 0x3b, 0x30, 0xc5, 0xe9, 0x84, 0x81, 0xde, 0x85, 0x4e, 0x65, 0x7b, 0x21,
- 0x37, 0xb8, 0xef, 0x24, 0x19, 0xaa, 0x26, 0x0c, 0x27, 0xa7, 0xd9, 0x29,
- 0x47, 0x1a, 0x15, 0x42, 0x1e, 0x30, 0x79, 0x79, 0x96, 0x09, 0x62, 0x26,
- 0xad, 0x98, 0x8b, 0xcb, 0x3d, 0xeb, 0x66, 0x83, 0x77, 0xd9, 0x79, 0x4d,
- 0x05, 0x81, 0x72, 0xe9, 0xe0, 0x6f, 0x13, 0x00, 0x7e, 0xa3, 0x92, 0x82,
- 0x1c, 0x90, 0x83, 0x4b, 0x15, 0x97, 0x0f, 0x92, 0xe2, 0xd3, 0x3d, 0xd7,
- 0x6c, 0xb9, 0x60, 0x9a, 0x23, 0x52, 0xbe, 0x59, 0xc9, 0x36, 0x9e, 0xf7,
- 0x77, 0x09, 0x79, 0x01, 0xcc, 0xec, 0x17, 0xd1, 0x74, 0xbc, 0x58, 0x65,
- 0x45, 0x3c, 0x86, 0xf1, 0xbc, 0xbd, 0x95, 0x54, 0x46, 0x45, 0x7b, 0x4c,
- 0xa2, 0xea, 0x2a, 0x6e, 0xa8, 0xd1, 0x66, 0x03, 0xb2, 0x6a, 0xe0, 0xd3,
- 0x07, 0x8d, 0xe0, 0x09, 0x81, 0x42, 0xe3, 0x97, 0xc4, 0xe7, 0x37, 0xc5,
- 0x82, 0xcf, 0xb1, 0xec, 0xba, 0xbd, 0xf4, 0xb6, 0x41, 0xb2, 0xb8, 0xa6,
- 0x3a, 0x85, 0x4b, 0x4f, 0x46, 0x48, 0xe9, 0x9b, 0x72, 0xf5, 0xb0, 0x64,
- 0x66, 0x75, 0x42, 0xb4, 0x00, 0xbe, 0x11, 0x6d, 0x86, 0x93, 0x07, 0x50,
- 0xa7, 0xef, 0x55, 0x42, 0xcf, 0xe8, 0x61, 0xd0, 0x9b, 0x11, 0x84, 0x8c,
- 0x74, 0xe4, 0xb8, 0x3f, 0x48, 0xb3, 0x61, 0xe3, 0xea, 0x66, 0x86, 0x94,
- 0x95, 0x12, 0x77, 0x26, 0x75, 0x30, 0xb5, 0xd3, 0x7a, 0xad, 0x2d, 0x58,
- 0x46, 0x1b, 0x4b, 0xd9, 0x2d, 0x1e, 0x0b, 0xff, 0xd7, 0x03, 0x56, 0x3b,
- 0xbd, 0x65, 0xb0, 0xf9, 0xfe, 0x43, 0x1c, 0x9c, 0x18, 0x82, 0x78, 0x5e,
- 0x06, 0x02, 0x21, 0x70, 0xb2, 0x7f, 0xb5, 0x63, 0x71, 0x85, 0x95, 0x79,
- 0xae, 0x1e, 0xc6, 0x62, 0x7a, 0x7c, 0x63, 0x46, 0x70, 0x1c, 0x58, 0x72,
- 0x1d, 0xde, 0xca, 0xb4, 0xfc, 0xc8, 0x56, 0x38, 0x32, 0xf4, 0x0b, 0x56,
- 0x87, 0x6b, 0x5b, 0x53, 0xd2, 0x2c, 0x35, 0xef, 0x5b, 0x33, 0x59, 0x13,
- 0x76, 0x82, 0x30, 0x80, 0x23, 0x10, 0x07, 0x4c, 0x3f, 0xac, 0x9c, 0x58,
- 0x2d, 0x04, 0xe6, 0x6a, 0xd3, 0x5c, 0xf9, 0xb6, 0x59, 0x4e, 0x85, 0xfe,
- 0x01, 0x71, 0xf0, 0xf7, 0xf2, 0x1f, 0x46, 0xd5, 0x20, 0x3c, 0x9b, 0xc2,
- 0x1e, 0x73, 0x1c, 0x56, 0x9c, 0x76, 0x8c, 0x12, 0x95, 0x51, 0xd4, 0x6f,
- 0x5b, 0x3a, 0xa7, 0x5f, 0xa7, 0xe4, 0xfa, 0xb7, 0x1a, 0xdd, 0xb6, 0x4c,
- 0x01, 0x02, 0xae, 0x9c, 0x02, 0x0d, 0x66, 0x2f, 0x40, 0x87, 0xa1, 0xbc,
- 0xf3, 0xde, 0xf4, 0xdb, 0x65, 0xee, 0xcc, 0xca, 0xe1, 0x7a, 0xa2, 0xf4,
- 0xf7, 0xf5, 0x7c, 0x2a, 0x3f, 0xa4, 0x67, 0xbb, 0x07, 0x50, 0x7a, 0x29,
- 0x8a, 0xcf, 0x2c, 0x7a, 0x0e, 0x0d, 0xc7, 0x95, 0x8b, 0xf4, 0xe2, 0x50,
- 0xe1, 0xc1, 0x40, 0x16, 0x99, 0x5c, 0x72, 0xe7, 0xe4, 0x01, 0xeb, 0x29,
- 0x6a, 0x99, 0xf2, 0x67, 0x23, 0x46, 0x1f, 0xaa, 0xea, 0xc1, 0x51, 0x30,
- 0xeb, 0x7d, 0x34, 0x52, 0x91, 0x37, 0x2d, 0xc6, 0x5c, 0x3a, 0x7c, 0x54,
- 0xc0, 0x79, 0xdc, 0xf9, 0xbf, 0x08, 0x2a, 0xf6, 0xe1, 0x1e, 0xee, 0xc6,
- 0xd2, 0xe9, 0x30, 0x27, 0x60, 0x0c, 0xa2, 0x63, 0x16, 0x06, 0x3d, 0xe2,
- 0xf5, 0x6f, 0xea, 0xe4, 0x4d, 0x9f, 0x2d, 0x36, 0x62, 0x95, 0x47, 0x5d,
- 0x00, 0x22, 0x9f, 0x0c, 0xbb, 0x71, 0xad, 0xea, 0xe7, 0x62, 0x59, 0x21,
- 0xd1, 0xaf, 0x04, 0x5a, 0xfc, 0x1f, 0x28, 0x6b, 0x6f, 0x71, 0xec, 0xd4,
- 0xbd, 0x9c, 0x88, 0xfb, 0x3f, 0x04, 0xea, 0xd6, 0xb2, 0x24, 0xe5, 0x28,
- 0xfe, 0xc5, 0x3e, 0x15, 0x00, 0x8c, 0xa2, 0xdf, 0x18, 0x3d, 0x10, 0x9a,
- 0xb1, 0xcd, 0x64, 0xda, 0x87, 0x41, 0xc8, 0xa1, 0x1c, 0x97, 0xd5, 0x44,
- 0xd9, 0x51, 0xd2, 0x96, 0xed, 0xad, 0x28, 0x1f, 0x03, 0x89, 0x21, 0xbd,
- 0x79, 0x91, 0x48, 0x9c, 0x8e, 0x17, 0xfd, 0x36, 0x72, 0xf6, 0x69, 0x4f,
- 0x3f, 0x02, 0x57, 0xcc, 0x3f, 0x1c, 0x49, 0x82, 0x00, 0x45, 0x9e, 0x29,
- 0x83, 0x14, 0x12, 0xbb, 0xd2, 0xd0, 0x1a, 0x66, 0x0f, 0x57, 0x24, 0xd4,
- 0x9f, 0x46, 0x0c, 0xf4, 0xb8, 0x28, 0x85, 0x52, 0xe2, 0xa1, 0xc2, 0x3a,
- 0x8c, 0x34, 0x4a, 0x81, 0xe3, 0xbc, 0xa2, 0x67, 0x67, 0x12, 0x13, 0xc4,
- 0xe7, 0xd7, 0x2c, 0x4e, 0xa9, 0xf5, 0xed, 0x63, 0xf2, 0x18, 0x9c, 0x0c,
- 0xe2, 0x4d, 0x25, 0x23, 0x30, 0x3e, 0x49, 0x29, 0xa6, 0x37, 0xdf, 0xc2,
- 0xdc, 0xf6, 0x5e, 0xae, 0x45, 0xd7, 0x8d, 0x56, 0xba, 0x29, 0x4f, 0xee,
- 0xc9, 0x26, 0xd7, 0xbf, 0x10, 0x4d, 0x0a, 0x3b, 0x3d, 0x1f, 0xd5, 0x72,
- 0xe1, 0xe6, 0xf5, 0x23, 0x4a, 0x17, 0x2d, 0xe4, 0x40, 0x55, 0x9b, 0x39,
- 0x66, 0x36, 0xe4, 0x6d, 0x6d, 0xb6, 0x8d, 0x2a, 0x7e, 0x76, 0x73, 0xa5,
- 0x86, 0x20, 0x3d, 0x18, 0xa0, 0x6c, 0x35, 0x59, 0xc8, 0x1c, 0xef, 0x0f,
- 0x36, 0x1d, 0x6f, 0xba, 0x89, 0xb9, 0x9e, 0x7a, 0x58, 0x1d, 0x43, 0xad,
- 0x85, 0x8b, 0x6b, 0xcc, 0x25, 0xb8, 0xe4, 0xdd, 0xa1, 0x35, 0xd9, 0xef,
- 0xc4, 0xb1, 0xf6, 0x99, 0x27, 0x17, 0xb7, 0xbe, 0xd1, 0x4f, 0xa1, 0x81,
- 0x4e, 0xb6, 0x19, 0xcd, 0xa0, 0x92, 0xeb, 0x56, 0x41, 0x4f, 0x37, 0xca,
- 0x3b, 0x43, 0x85, 0x86, 0xdf, 0x5d, 0x5a, 0x8c, 0xd4, 0x5b, 0xc4, 0x28,
- 0xdb, 0x16, 0xea, 0x3a, 0x2e, 0x9e, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x80, 0x00, 0x00, 0x00, 0xea, 0x59, 0x40, 0xc4, 0x40, 0x8b, 0x6a, 0x8a,
- 0xb8, 0x7f, 0x1e, 0x0b, 0xfe, 0xab, 0xa4, 0xac, 0x42, 0x91, 0xc5, 0xfa,
- 0x2c, 0x7e, 0xb4, 0xf9, 0x5c, 0xd5, 0x4c, 0x6a, 0x74, 0x82, 0x90, 0x81,
- 0x96, 0xb0, 0xf4, 0xd4, 0xba, 0xc9, 0xa3, 0x2e, 0x26, 0x0a, 0xc9, 0x55,
- 0x65, 0xac, 0xde, 0x83, 0x37, 0xec, 0x0e, 0xf6, 0xdc, 0x8c, 0x34, 0xe6,
- 0x57, 0xde, 0x32, 0x0a, 0x02, 0x62, 0x4f, 0x6a, 0x92, 0xa5, 0xb4, 0x40,
- 0xde, 0x57, 0xf4, 0xd1, 0xa3, 0x1c, 0xd3, 0xf7, 0x4a, 0x15, 0xcc, 0x27,
- 0x26, 0x00, 0xba, 0xf3, 0xfa, 0x4e, 0xc6, 0xe9, 0xc3, 0x05, 0x3d, 0x3a,
- 0x89, 0x96, 0x7d, 0x41, 0xac, 0xca, 0x28, 0x7f, 0x69, 0x02, 0x40, 0x03,
- 0x93, 0x86, 0x85, 0x85, 0x73, 0x00, 0x09, 0x5a, 0xcf, 0x5f, 0x1d, 0xaa,
- 0x46, 0x41, 0x9d, 0x08, 0xbf, 0xea, 0x45, 0x9b, 0x93, 0xda, 0x9e, 0x81,
- 0xba, 0x9e, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
- 0x6a, 0x1f, 0x9b, 0x03, 0xdd, 0xe4, 0x16, 0x07, 0x7f, 0x5b, 0xb0, 0xee,
- 0xac, 0x55, 0xc4, 0x50, 0xe6, 0x2b, 0x17, 0xed, 0x7f, 0x50, 0x4d, 0x71,
- 0x73, 0xae, 0xe0, 0x4d, 0xce, 0x08, 0xd9, 0x8b, 0x83, 0x2c, 0x01, 0x48,
- 0x02, 0xd3, 0xbb, 0xca, 0x86, 0xd7, 0xca, 0x5f, 0xc7, 0xce, 0x59, 0xdf,
- 0xc1, 0xcc, 0xf7, 0x7b, 0x54, 0xf8, 0x0d, 0x4f, 0x81, 0x9e, 0x50, 0x6a,
- 0x65, 0x66, 0x4a, 0xec, 0x7a, 0x1b, 0x92, 0xb2, 0x39, 0x8f, 0x5d, 0x41,
- 0x33, 0xcf, 0xe6, 0x1b, 0x34, 0x5d, 0xe1, 0xf6, 0xef, 0xcb, 0xa0, 0x55,
- 0x7e, 0x1f, 0x45, 0x38, 0xb9, 0x56, 0x15, 0x3b, 0x70, 0xab, 0xc8, 0x2f,
- 0x1c, 0xb9, 0x7d, 0x37, 0xe1, 0xb4, 0x03, 0x44, 0x5a, 0xf6, 0x57, 0x97,
- 0x03, 0x54, 0x4c, 0x22, 0x88, 0xc3, 0x82, 0xfd, 0x91, 0xc1, 0xf1, 0x63,
- 0xb4, 0x50, 0x46, 0x11, 0x64, 0x07, 0xfd, 0x85, 0xe5, 0x78, 0x57, 0xdd,
- 0x19, 0x2a, 0x6b, 0x64, 0x3e, 0xec, 0xb8, 0xf3, 0xb5, 0x95, 0x29, 0x72,
- 0xf1, 0x9d, 0xdd, 0xb9, 0xad, 0xd0, 0x78, 0x26, 0x86, 0x10, 0x10, 0x19,
- 0xe4, 0x79, 0xae, 0xdc, 0x56, 0xb7, 0x54, 0x4f, 0x94, 0xc6, 0x26, 0x9a,
- 0x93, 0xa8, 0x2e, 0x1b, 0x1c, 0xda, 0x87, 0x3a, 0xa2, 0x44, 0xb9, 0x0b,
- 0x0f, 0xab, 0x70, 0x3b, 0xb7, 0x6c, 0xbf, 0x58, 0x67, 0x32, 0x7d, 0xa3,
- 0x2a, 0xcb, 0x4e, 0x02, 0x92, 0xa1, 0x26, 0x0e, 0x20, 0x5e, 0xb3, 0xec,
- 0xc4, 0x04, 0x5b, 0x7f, 0xe5, 0xbd, 0x30, 0xeb, 0xc8, 0xdd, 0xf1, 0x72,
- 0x5a, 0x7e, 0xcb, 0x93, 0x22, 0xa0, 0x01, 0x9f, 0xbb, 0x24, 0x9f, 0x50,
- 0x01, 0x1f, 0x24, 0x02, 0x85, 0x6d, 0xe6, 0x4d, 0x55, 0xc4, 0x07, 0xe9,
- 0x87, 0x38, 0xbf, 0x1a, 0x3b, 0x05, 0x82, 0xc4, 0x73, 0x4b, 0x87, 0x3c,
- 0xb4, 0x0a, 0x48, 0x8c, 0x06, 0x67, 0xe7, 0xbf, 0xcc, 0xe7, 0xe5, 0xc3,
- 0xb2, 0x81, 0x60, 0xe2, 0xd1, 0xb1, 0x8f, 0x98, 0xbd, 0x7d, 0xbd, 0x4e,
- 0x9a, 0xca, 0xbe, 0xcb, 0x81, 0x47, 0x25, 0xaa, 0xfa, 0x91, 0xcf, 0x78,
- 0xce, 0xcb, 0x1a, 0x11, 0x79, 0xcf, 0x97, 0xa3, 0x95, 0x95, 0x6f, 0xd7,
- 0xae, 0x80, 0xc9, 0xd5, 0x95, 0xb7, 0xcf, 0xe2, 0x9d, 0x98, 0x65, 0x80,
- 0xfd, 0x2e, 0xee, 0x46, 0x5e, 0x46, 0x8c, 0xde, 0x52, 0xb4, 0xdc, 0xce,
- 0xa8, 0xab, 0x4e, 0x0c, 0x12, 0x9f, 0x89, 0x9c, 0x84, 0x80, 0xfe, 0x08,
- 0x64, 0x12, 0x12, 0x95, 0x62, 0xea, 0x65, 0xcc, 0x34, 0x80, 0xcf, 0x92,
- 0x5f, 0xc2, 0xae, 0x76, 0xe7, 0x2f, 0xbb, 0xa8, 0xdb, 0x6a, 0x66, 0x60,
- 0xaf, 0x88, 0xba, 0x65, 0x32, 0xcf, 0xf7, 0x6e, 0xd8, 0xd0, 0x69, 0xb0,
- 0x12, 0x23, 0xd6, 0xc2, 0x32, 0xe5, 0x8e, 0x51, 0xc5, 0x61, 0x28, 0x45,
- 0xf7, 0xf9, 0xea, 0x73, 0xce, 0x04, 0x2d, 0x56, 0x43, 0x10, 0x8b, 0x4f,
- 0x6b, 0xfa, 0x32, 0xa8, 0x92, 0x8f, 0xd9, 0xb4, 0xfd, 0xa4, 0x74, 0xa8,
- 0xea, 0xca, 0xd3, 0x84, 0xbb, 0x5a, 0x34, 0x57, 0xf9, 0xda, 0x25, 0x40,
- 0x1f, 0x5e, 0xc2, 0x66, 0x43, 0x05, 0xdd, 0x13, 0x88, 0x91, 0x60, 0xa1,
- 0x75, 0xd3, 0xc4, 0x27, 0xff, 0xda, 0x24, 0x3d, 0xd9, 0xd7, 0x47, 0x46,
- 0x30, 0xd0, 0x76, 0xc4, 0x9e, 0x97, 0xe3, 0x43, 0xd7, 0x45, 0xaf, 0x49,
- 0x36, 0xf2, 0x18, 0xdd, 0x3f, 0x86, 0x9a, 0xec, 0x9a, 0x70, 0xeb, 0x5a,
- 0xe2, 0xa0, 0x4b, 0x45, 0x21, 0xb3, 0x32, 0x3d, 0x0c, 0x8c, 0x03, 0x13,
- 0xae, 0x46, 0xb5, 0x1a, 0x0a, 0x03, 0x36, 0xfe, 0xfe, 0xfa, 0xc9, 0x4d,
- 0x46, 0xf8, 0xfe, 0x6f, 0x99, 0x8c, 0xe4, 0x77, 0x0c, 0x27, 0x59, 0xf7,
- 0xc3, 0xfc, 0x32, 0xb3, 0xa5, 0xae, 0xdc, 0x49, 0xac, 0x31, 0x27, 0xa6,
- 0x14, 0x92, 0xfb, 0xe3, 0x69, 0x35, 0x8d, 0xa0, 0x50, 0x55, 0x09, 0x90,
- 0xdf, 0x67, 0x08, 0x4c, 0x0e, 0xaf, 0x71, 0xc2, 0xe8, 0xb8, 0xdc, 0x45,
- 0xe3, 0x6d, 0x58, 0x3f, 0x19, 0x8d, 0xcd, 0xeb, 0xe3, 0x02, 0x49, 0xd8,
- 0xc8, 0x8b, 0x29, 0xb3, 0xef, 0x2b, 0xf0, 0x39, 0x5c, 0x11, 0xaa, 0x52,
- 0x44, 0x0d, 0x1a, 0x3a, 0x7a, 0x62, 0xda, 0x6d, 0xe3, 0xdd, 0x03, 0x30,
- 0x6d, 0x3e, 0x18, 0x30, 0x1d, 0xc0, 0xd0, 0x05, 0x67, 0x98, 0xf5, 0x2a,
- 0xc7, 0xa1, 0x58, 0xd7, 0xf8, 0x6f, 0x7d, 0x07, 0x59, 0x27, 0x95, 0xb9,
- 0x8d, 0x4d, 0xd7, 0xc8, 0x5e, 0x8b, 0x89, 0x14, 0xb7, 0x1b, 0x35, 0xaa,
- 0x72, 0x02, 0x39, 0x3c, 0x41, 0x7c, 0x91, 0x93, 0x81, 0xe1, 0xad, 0xbe,
- 0x77, 0x28, 0x80, 0xa2, 0x9c, 0xa8, 0x00, 0x18, 0xa5, 0x70, 0xec, 0xec,
- 0x96, 0x95, 0x37, 0xa3, 0xee, 0x15, 0xa0, 0x69, 0x0e, 0x05, 0xb5, 0xb4,
- 0xb6, 0xa7, 0x8b, 0xb9, 0x41, 0x88, 0x4f, 0x56, 0x39, 0xa7, 0xbe, 0x24,
- 0xce, 0x4c, 0xe0, 0x9c, 0x24, 0x5a, 0xa1, 0xab, 0xcd, 0x82, 0xf1, 0x16,
- 0x3f, 0xc0, 0xaf, 0xe1, 0x42, 0xe0, 0x7d, 0x1b, 0xd9, 0x8f, 0xb8, 0x04,
- 0xa1, 0x88, 0xd9, 0xc3, 0xaf, 0x4f, 0xda, 0xfd, 0x0b, 0x5c, 0xc3, 0x04,
- 0xf3, 0xdb, 0xe6, 0x76, 0x6e, 0xe9, 0xdc, 0xea, 0x6f, 0xa2, 0xa5, 0x75,
- 0x2c, 0xc7, 0x91, 0x7d, 0x4b, 0xd5, 0x68, 0x55, 0xbb, 0x2d, 0x14, 0xdb,
- 0x06, 0x76, 0xf7, 0xcc, 0x0a, 0x88, 0x6c, 0x2b, 0xa1, 0x57, 0xd6, 0x15,
- 0x9c, 0x46, 0xcf, 0x5b, 0x6f, 0x9e, 0x7e, 0xc5, 0x39, 0xda, 0x97, 0x26,
- 0x5e, 0xf5, 0x25, 0x06, 0xed, 0x8e, 0x9b, 0x1d, 0x1b, 0x91, 0x07, 0x89,
- 0x08, 0xce, 0xd7, 0x38, 0x43, 0x64, 0x8e, 0xf5, 0x3a, 0x52, 0x4a, 0xfb,
- 0x3e, 0xff, 0x2c, 0xb3, 0x78, 0x40, 0xb5, 0xdd, 0xb2, 0x8a, 0xd3, 0x6a,
- 0xc5, 0xb0, 0xa3, 0x4a, 0xb8, 0xe7, 0x27, 0xa0, 0x5a, 0x8f, 0x0f, 0xda,
- 0x53, 0x49, 0xc9, 0x77, 0x2a, 0xef, 0x78, 0xc6, 0xec, 0xaf, 0x10, 0xe5,
- 0x71, 0xc5, 0x7a, 0x85, 0xdf, 0xb2, 0x85, 0x02, 0xe3, 0x55, 0x7a, 0x91,
- 0x3a, 0x68, 0xb2, 0x9d, 0x3d, 0xd9, 0x01, 0xc5, 0x5f, 0x3c, 0xa8, 0x1d,
- 0x99, 0xc6, 0xe7, 0xad, 0x09, 0xd1, 0x39, 0x3a, 0x92, 0xc5, 0x77, 0x9c,
- 0xdf, 0x99, 0x56, 0x9f, 0xfe, 0xf8, 0xfd, 0xc8, 0x4f, 0x19, 0xa3, 0xa0,
- 0xdf, 0xff, 0x17, 0xac, 0xa9, 0x03, 0x32, 0x85, 0x4c, 0x29, 0xca, 0x89,
- 0x58, 0xdc, 0x88, 0xdd, 0xeb, 0x79, 0x68, 0x5e, 0x0f, 0x37, 0x1a, 0xf7,
- 0x05, 0xfd, 0x39, 0x91, 0x25, 0x61, 0xf3, 0x04, 0xda, 0x97, 0xfc, 0x7b,
- 0xcc, 0x40, 0x63, 0xfd, 0x5b, 0x3b, 0x27, 0x8e, 0x92, 0x6d, 0x98, 0x0f,
- 0xcc, 0x9c, 0x9b, 0xda, 0xb2, 0xc6, 0xca, 0x56, 0xff, 0x7e, 0xcc, 0xa2,
- 0xc0, 0x45, 0x3e, 0xf6, 0xdf, 0xa7, 0xe8, 0x2a, 0xef, 0x0c, 0xde, 0xec,
- 0xa4, 0x1d, 0x2c, 0x3e, 0x03, 0xfd, 0xa4, 0x44, 0x60, 0x4a, 0xf5, 0x83,
- 0x8f, 0x09, 0x2d, 0xe8, 0xd5, 0x46, 0xf6, 0x1c, 0x2d, 0x39, 0x28, 0x0c,
- 0xdf, 0xa1, 0x2b, 0x05, 0x6e, 0x3c, 0x36, 0xdd, 0x91, 0x81, 0x52, 0xf1,
- 0x56, 0xdc, 0xbb, 0x79, 0x62, 0xd8, 0x2e, 0x27, 0x5d, 0x9f, 0x3c, 0xce,
- 0x81, 0x5c, 0x70, 0xe5, 0x4d, 0x33, 0x06, 0xd5, 0x14, 0x04, 0xb7, 0xbc,
- 0x7b, 0x7a, 0xb4, 0xf7, 0x4a, 0x48, 0x8f, 0x97, 0x85, 0x96, 0x69, 0xc9,
- 0x40, 0x52, 0xb1, 0x1c, 0x28, 0x82, 0xb3, 0x63, 0xee, 0x94, 0x2f, 0xcb,
- 0x40, 0xad, 0xd7, 0x78, 0xb1, 0xc4, 0x21, 0x05, 0x36, 0xd9, 0x46, 0xf0,
- 0x83, 0xcd, 0xee, 0x52, 0x7a, 0xa6, 0xa4, 0x40, 0xb0, 0x2f, 0xf0, 0x1c,
- 0xfa, 0x42, 0x98, 0x54, 0x5b, 0xfe, 0x5e, 0xd6, 0x84, 0x73, 0xca, 0x39,
- 0xbe, 0x87, 0xf2, 0x92, 0xee, 0x3d, 0x21, 0xcc, 0x69, 0x81, 0xe5, 0xe8,
- 0x8a, 0xc3, 0x23, 0x64, 0x98, 0xd5, 0x1d, 0xcd, 0x5c, 0x6c, 0x37, 0xc8,
- 0x8b, 0x08, 0x22, 0x12, 0x9f, 0x85, 0xc9, 0xed, 0xb4, 0xa6, 0x07, 0xe1,
- 0x62, 0x79, 0x35, 0x5d, 0x26, 0x11, 0x4a, 0x6b, 0x33, 0x37, 0x91, 0x78,
- 0xe8, 0xe2, 0xba, 0x8b, 0x8a, 0xb7, 0xbb, 0x0f, 0xd2, 0xb3, 0xa2, 0x02,
- 0x0c, 0x57, 0x35, 0x99, 0x88, 0x6b, 0x9b, 0x64, 0x79, 0x1f, 0x4a, 0x48,
- 0xd4, 0x3b, 0x5c, 0xeb, 0xb4, 0x83, 0xc3, 0xad, 0x9c, 0x6a, 0xb0, 0xcf,
- 0x7f, 0x70, 0xe8, 0x22, 0x46, 0x25, 0xfe, 0x7e, 0x02, 0x44, 0x83, 0x02,
- 0xb3, 0x08, 0x2e, 0x34, 0x08, 0x4b, 0xff, 0xa2, 0xc1, 0x60, 0xbb, 0xd8,
- 0x89, 0x16, 0xf8, 0xaa, 0xab, 0xea, 0xf7, 0xa0, 0x10, 0x9a, 0xc9, 0xe9,
- 0xa4, 0x81, 0xa7, 0x87, 0x32, 0x5b, 0xc1, 0xd0, 0xd9, 0x70, 0x6f, 0xb6,
- 0x7c, 0x65, 0xd5, 0x0e, 0x65, 0x93, 0xfe, 0x6d, 0x66, 0xaa, 0xab, 0xd0,
- 0x03, 0x07, 0xf2, 0xbe, 0x39, 0xd6, 0xc8, 0xac, 0xf2, 0x06, 0x58, 0x58,
- 0x46, 0xc0, 0x1a, 0xbd, 0xa4, 0x96, 0x38, 0x31, 0x32, 0x89, 0x04, 0xdf,
- 0xcd, 0x3c, 0x2e, 0x98, 0xb8, 0x39, 0xba, 0xe2, 0xca, 0x6b, 0xd0, 0x53,
- 0xce, 0x4a, 0xc8, 0x95, 0x81, 0x84, 0x17, 0xce, 0x7f, 0x1d, 0xc1, 0x5a,
- 0xc4, 0xc2, 0x73, 0x30, 0x6d, 0x0b, 0x8c, 0xf8, 0x66, 0x38, 0x4e, 0xa3,
- 0x14, 0x84, 0x15, 0x36, 0x9e, 0x0d, 0x56, 0x6b, 0xa6, 0x77, 0x65, 0xa4,
- 0x2c, 0x77, 0x00, 0x8b, 0x43, 0x57, 0xc6, 0x25, 0xc5, 0xd0, 0x17, 0x79,
- 0x6b, 0x5d, 0xbc, 0xcd, 0xc8, 0x25, 0x8f, 0x20, 0x09, 0xcc, 0xbd, 0x80,
- 0x10, 0xdf, 0x35, 0xf6, 0x9c, 0x04, 0x80, 0x23, 0xdc, 0x97, 0xe0, 0xba,
- 0x29, 0x48, 0x2e, 0x95, 0x0f, 0xb1, 0x9b, 0xc7, 0xe6, 0x0b, 0x89, 0x16,
- 0xe2, 0x81, 0x3b, 0x32, 0x69, 0xc4, 0xde, 0xc6, 0x12, 0x09, 0x47, 0xff,
- 0x50, 0xe4, 0x45, 0xb7, 0x35, 0xd2, 0x61, 0x9b, 0x52, 0x6e, 0xbe, 0xaf,
- 0xd2, 0xeb, 0x0c, 0x50, 0xf1, 0x57, 0x9f, 0x59, 0xe1, 0xc1, 0x4f, 0x8c,
- 0x79, 0x07, 0x05, 0xce, 0x8d, 0x64, 0xb2, 0xf0, 0xd3, 0x4f, 0xe1, 0x7b,
- 0xfa, 0x30, 0x0a, 0xc2, 0x5d, 0x0c, 0x47, 0x6c, 0x17, 0x77, 0x1f, 0xe5,
- 0xd8, 0x14, 0xfd, 0xc1, 0x01, 0x70, 0x51, 0x60, 0xb2, 0x20, 0xfd, 0x86,
- 0xbc, 0x19, 0x5e, 0x01, 0xa6, 0x19, 0x3a, 0x21, 0xa5, 0x0a, 0x1c, 0xd9,
- 0xa9, 0x78, 0xbb, 0xc9, 0x01, 0x65, 0xe4, 0xb3, 0x48, 0xb8, 0xe1, 0xe7,
- 0xb5, 0xf4, 0x4e, 0xa9, 0xb6, 0xe2, 0x5b, 0xeb, 0xf5, 0x76, 0x06, 0x1a,
- 0xd9, 0x08, 0x40, 0xff, 0x72, 0xb2, 0xe3, 0x01, 0x50, 0xb1, 0xad, 0xb3,
- 0xa3, 0xf6, 0xef, 0x72, 0x05, 0x0c, 0xf4, 0xce, 0x24, 0x2c, 0x63, 0x89,
- 0x63, 0x9e, 0x21, 0xb8, 0xb0, 0xbe, 0xc7, 0x45, 0xae, 0x47, 0x2b, 0x9e,
- 0x61, 0x81, 0x4c, 0x76, 0x96, 0x7b, 0x18, 0x37, 0x74, 0xcb, 0x00, 0xef,
- 0x38, 0x72, 0x24, 0x0a, 0x63, 0xc1, 0x64, 0xd6, 0x41, 0xc8, 0x6a, 0xf1,
- 0xe7, 0x11, 0x20, 0x4b, 0xc2, 0x95, 0x70, 0xb8, 0xf8, 0x8f, 0xd9, 0xae,
- 0x8c, 0x12, 0xd8, 0x6f, 0x63, 0x30, 0xca, 0x56, 0x46, 0x11, 0xda, 0x49,
- 0x1f, 0x84, 0x3d, 0xae, 0xab, 0x78, 0x29, 0x02, 0x6c, 0x43, 0xa3, 0xef,
- 0x9d, 0x97, 0x59, 0x15, 0x53, 0xcd, 0xc7, 0x47, 0x65, 0x30, 0xc7, 0xae,
- 0x31, 0x4a, 0x41, 0xb4, 0x66, 0x9c, 0xbb, 0x51, 0x0b, 0xbd, 0xe2, 0x7d,
- 0x41, 0x2c, 0xd0, 0x75, 0x57, 0x93, 0xce, 0x2e, 0xeb, 0x31, 0x7f, 0x56,
- 0xb2, 0xa4, 0x2b, 0x9f, 0xcc, 0xef, 0x6f, 0xf0, 0x77, 0x19, 0xad, 0x4d,
- 0x2e, 0x37, 0x00, 0x75, 0x53, 0xae, 0x22, 0x44, 0x69, 0x1c, 0x8a, 0x90,
- 0xf2, 0xcd, 0x0f, 0x6b, 0x37, 0xdb, 0xfd, 0x71, 0x64, 0x80, 0xd8, 0x57,
- 0x1b, 0x8f, 0xff, 0x14, 0xd4, 0x5f, 0xe1, 0xd1, 0x0f, 0x06, 0x13, 0x61,
- 0x29, 0xa9, 0x80, 0x9d, 0xc7, 0x8a, 0xa0, 0xb5, 0xaa, 0xfc, 0xe0, 0xb4,
- 0xb4, 0xf0, 0x31, 0xf0, 0xec, 0x78, 0x03, 0x28, 0xb9, 0xf7, 0xd9, 0xa7,
- 0xc8, 0xad, 0x2e, 0x16, 0xb8, 0x18, 0x82, 0x43, 0x66, 0x8b, 0xae, 0xb2,
- 0x45, 0x2b, 0x0c, 0x9d, 0x69, 0xbd, 0x1b, 0xc5, 0x20, 0xc6, 0x41, 0xe7,
- 0x4f, 0x4b, 0x7b, 0x46, 0x3d, 0x7a, 0x6d, 0x9f, 0x13, 0x2e, 0x0f, 0xf3,
- 0x85, 0x3e, 0x5b, 0x12, 0xe5, 0xbf, 0x1b, 0x20, 0xc3, 0x5f, 0x6b, 0xf7,
- 0xf7, 0xa3, 0xd7, 0x33, 0xd2, 0xcb, 0x18, 0xa5, 0xa4, 0xa2, 0xd3, 0x59,
- 0x91, 0x9a, 0x04, 0xfa, 0x9d, 0xa5, 0x55, 0xad, 0x09, 0x5a, 0x1e, 0x0b,
- 0x10, 0xd0, 0x46, 0x18, 0xe4, 0x09, 0xe8, 0x1b, 0x44, 0xd3, 0x78, 0x45,
- 0xc0, 0xdf, 0xa2, 0xef, 0xfc, 0x59, 0x8a, 0x1b, 0x22, 0x60, 0xc9, 0x58,
- 0x7d, 0x65, 0x45, 0xa9, 0xac, 0xd5, 0xd4, 0xc4, 0x44, 0xd3, 0x08, 0x44,
- 0x40, 0x4d, 0x3d, 0x7e, 0x39, 0x81, 0x72, 0x15, 0x49, 0xd7, 0x2c, 0xda,
- 0x33, 0xaf, 0xc5, 0xb5, 0x8a, 0x3c, 0xbf, 0x81, 0x88, 0x4f, 0x12, 0xe4,
- 0xe8, 0xe6, 0x00, 0xb6, 0xd9, 0xcd, 0xb2, 0x70, 0x08, 0x15, 0x72, 0xf6,
- 0x46, 0xc7, 0x98, 0x7c, 0x1d, 0x54, 0xd0, 0x66, 0x2d, 0xa1, 0xd8, 0xda,
- 0xb0, 0xe5, 0x9f, 0xa3, 0x2f, 0x2c, 0xfb, 0x34, 0xb3, 0x21, 0x8b, 0x61,
- 0xf4, 0xce, 0x60, 0x2b, 0xb5, 0x5e, 0x3d, 0x14, 0x2c, 0xbe, 0x19, 0x9d,
- 0x5f, 0x01, 0xe1, 0x21, 0x34, 0x11, 0x6b, 0x10, 0xd4, 0x17, 0x58, 0xb3,
- 0x0a, 0x30, 0xe4, 0x17, 0x51, 0x0b, 0xf2, 0xbb, 0xa6, 0xb7, 0x00, 0xa2,
- 0xe8, 0xa5, 0xa3, 0x41, 0x1d, 0x65, 0x2d, 0x26, 0x93, 0x26, 0x7d, 0xdc,
- 0xad, 0x6f, 0x83, 0xeb, 0x66, 0x55, 0xde, 0x60, 0x21, 0x56, 0x19, 0x4f,
- 0x9b, 0x7b, 0x26, 0x4a, 0x80, 0xf5, 0xab, 0x8b, 0xbf, 0xe4, 0xb1, 0xa1,
- 0xd6, 0x33, 0x32, 0xbf, 0x86, 0x8c, 0x3c, 0xd0, 0x12, 0x03, 0xd4, 0xb9,
- 0x23, 0x54, 0x1b, 0x94, 0x2f, 0xa5, 0x34, 0x4d, 0x59, 0x18, 0x33, 0x8e,
- 0x8c, 0xf7, 0x1f, 0xc9, 0x6d, 0x75, 0xfb, 0x2a, 0x22, 0x6c, 0x64, 0xb7,
- 0x79, 0xd8, 0x3b, 0xf6, 0x4e, 0x98, 0xd8, 0xa8, 0x2c, 0x06, 0xd1, 0x92,
- 0x32, 0x44, 0xec, 0x38, 0x40, 0x3b, 0x53, 0x16, 0x40, 0x8f, 0x92, 0x72,
- 0x87, 0xa8, 0xb8, 0xc0, 0x8f, 0x25, 0x4c, 0x4f, 0x24, 0xfc, 0x8d, 0xc6,
- 0xa6, 0xeb, 0x2f, 0xdf, 0x2f, 0x0d, 0x2f, 0xd3, 0x6e, 0x70, 0x71, 0xfe,
- 0xf0, 0x2e, 0xe9, 0x84, 0xd3, 0xc1, 0xd1, 0x70, 0x4b, 0x8f, 0x7b, 0x60,
- 0xb0, 0xb7, 0xe3, 0x79, 0x52, 0x6a, 0x6b, 0x26, 0x03, 0x8f, 0x6a, 0x0f,
- 0x8d, 0x85, 0xd7, 0x5f, 0xf7, 0x39, 0x31, 0x0e, 0x26, 0x73, 0x84, 0x3f,
- 0x9b, 0x10, 0x6f, 0x29, 0x63, 0x14, 0x36, 0xa2, 0xec, 0x44, 0x7d, 0x84,
- 0xc6, 0x4a, 0xec, 0xfe, 0xac, 0xcb, 0xe4, 0xfa, 0xf6, 0x68, 0x83, 0x68,
- 0xe0, 0x8f, 0xd3, 0x8a, 0x60, 0x73, 0xf1, 0x5c, 0x71, 0x02, 0x0c, 0xa2,
- 0x88, 0x2c, 0xa2, 0x35, 0x35, 0x5c, 0x3f, 0xb1, 0xbe, 0xb3, 0x6b, 0x5c,
- 0xe1, 0x78, 0x75, 0x40, 0x20, 0x87, 0x67, 0xca, 0x07, 0x1c, 0x9c, 0x02,
- 0xc7, 0xf2, 0x9d, 0x1c, 0xda, 0x1b, 0x86, 0x1b, 0xc6, 0xa6, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x93, 0xca, 0x30, 0xae,
- 0xea, 0x26, 0x6a, 0x1b, 0x15, 0x46, 0x0a, 0xe3, 0x57, 0x23, 0x4c, 0x0c,
- 0x98, 0x8e, 0x3e, 0xbb, 0x43, 0x14, 0x73, 0xdf, 0x17, 0x91, 0xe2, 0xee,
- 0x39, 0xf9, 0xc2, 0x2f, 0xdc, 0xad, 0x0e, 0x00, 0xf5, 0xdd, 0xe3, 0x97,
- 0xba, 0x8c, 0xee, 0x53, 0xc4, 0x70, 0x37, 0x46, 0xcf, 0x04, 0xc3, 0xc8,
- 0x56, 0x38, 0x2e, 0x39, 0x75, 0x32, 0x6d, 0x98, 0xc4, 0x14, 0xae, 0xa4,
- 0x29, 0xa3, 0xc6, 0xb6, 0x66, 0x45, 0x48, 0xdf, 0xc0, 0xa9, 0x4b, 0x4f,
- 0xef, 0xb9, 0xb4, 0x89, 0x0d, 0x64, 0x00, 0x5c, 0xd1, 0xc8, 0x2b, 0xf7,
- 0xc5, 0x1a, 0x1b, 0x06, 0xb7, 0x49, 0xb1, 0xe3, 0x4d, 0x87, 0xf9, 0x3f,
- 0xba, 0x39, 0xa3, 0x56, 0x7f, 0x43, 0xcc, 0x15, 0x9c, 0x3d, 0xba, 0x71,
- 0x7b, 0xeb, 0x45, 0x0f, 0x15, 0x1b, 0x6c, 0x84, 0x75, 0x6d, 0x43, 0x0b,
- 0x27, 0x12, 0x6b, 0xbc, 0x0a, 0x6d, 0xe4, 0xf6, 0x4f, 0xc7, 0xbb, 0x9e,
- 0x91, 0xb5, 0x09, 0x5f, 0x79, 0x2a, 0xbf, 0xda, 0x34, 0x91, 0x44, 0x47,
- 0x52, 0x64, 0x00, 0x89, 0x27, 0x17, 0x5c, 0xe9, 0x90, 0x8b, 0xcb, 0xbe,
- 0x21, 0x47, 0x65, 0x1c, 0x54, 0x61, 0x48, 0x17, 0x66, 0xb7, 0xa1, 0x60,
- 0x27, 0x31, 0x04, 0x42, 0x3b, 0x33, 0x3d, 0xda, 0xf7, 0x61, 0x3d, 0x4b,
- 0x91, 0xa5, 0x74, 0x4b, 0xde, 0x16, 0xf2, 0x79, 0x3e, 0xf7, 0x89, 0x87,
- 0xb3, 0xdd, 0xa2, 0x49, 0xd7, 0x54, 0x1b, 0x39, 0xff, 0xb5, 0xec, 0x9d,
- 0x1d, 0x09, 0x7e, 0x5a, 0x3c, 0xd1, 0xdc, 0x0e, 0x2a, 0x0e, 0x2c, 0x40,
- 0x4e, 0xa5, 0x8c, 0x9d, 0xc8, 0x9b, 0xa5, 0xb2, 0x40, 0xa4, 0xaa, 0x3b,
- 0xac, 0x93, 0x19, 0xf7, 0xa1, 0x8b, 0xf8, 0x4a, 0x40, 0x08, 0x5d, 0x1d,
- 0xb0, 0xae, 0x0f, 0x67, 0xa7, 0x21, 0xaf, 0xe3, 0xb1, 0xfc, 0xff, 0xa0,
- 0x95, 0x66, 0x2b, 0xf7, 0x82, 0x2d, 0x8a, 0x26, 0x0f, 0xc3, 0xed, 0x62,
- 0xb6, 0xcb, 0x4c, 0x86, 0xe9, 0x20, 0x78, 0x3f, 0x08, 0x53, 0x8f, 0x41,
- 0xf1, 0xa1, 0x04, 0x77, 0xd9, 0xe6, 0xea, 0x26, 0x6d, 0x33, 0x48, 0xb3,
- 0xbb, 0xed, 0xfc, 0xd7, 0xa3, 0x2b, 0xe2, 0x39, 0xcf, 0x78, 0x4e, 0x11,
- 0x26, 0xad, 0x39, 0x83, 0x6e, 0x72, 0xbf, 0xc6, 0x34, 0x23, 0x97, 0x5d,
- 0x7b, 0x64, 0x1e, 0x78, 0x00, 0x34, 0x92, 0x5d, 0x3f, 0x23, 0x28, 0x60,
- 0x7f, 0x88, 0xf0, 0xca, 0x96, 0x4a, 0x15, 0xbf, 0x8a, 0xb7, 0xd0, 0xd9,
- 0x99, 0x8b, 0xdb, 0x26, 0xdc, 0x7e, 0x8d, 0x35, 0x53, 0x60, 0x07, 0x85,
- 0x80, 0xc4, 0x9c, 0x0d, 0x81, 0xe2, 0x93, 0x85, 0x76, 0x2d, 0x85, 0x21,
- 0x6e, 0xda, 0x29, 0xe5, 0xb1, 0x08, 0x46, 0x09, 0x1b, 0x8a, 0xd9, 0xd2,
- 0xd7, 0x16, 0x74, 0xee, 0x26, 0x3e, 0xc4, 0x8c, 0x2e, 0x6b, 0x0c, 0xbc,
- 0x95, 0xea, 0x4a, 0xb2, 0xd6, 0x6f, 0x43, 0xd1, 0x3a, 0x8f, 0xbd, 0x77,
- 0xb4, 0x67, 0x63, 0x6b, 0xd2, 0xe0, 0xf0, 0x81, 0x74, 0xb7, 0xc5, 0x11,
- 0x60, 0x10, 0x6b, 0xc6, 0x0f, 0xfd, 0x84, 0x2e, 0x5c, 0x8f, 0x3b, 0xf5,
- 0x68, 0xa7, 0x62, 0xc6, 0x4f, 0xa6, 0xee, 0x19, 0x44, 0xea, 0xc0, 0xe4,
- 0x64, 0x12, 0x71, 0x2f, 0xfb, 0xa3, 0x4d, 0xb0, 0x8e, 0x5e, 0xe1, 0x79,
- 0x65, 0xd4, 0xf3, 0xed, 0x73, 0x04, 0xf1, 0x6d, 0xc6, 0x75, 0x54, 0x28,
- 0x13, 0xe2, 0xd6, 0xa1, 0x26, 0xf9, 0xa4, 0x29, 0x20, 0x5b, 0xd0, 0x3c,
- 0x3d, 0xf3, 0x7a, 0x18, 0x9a, 0x3d, 0xec, 0x6a, 0x4c, 0xfd, 0xa5, 0x00,
- 0xdf, 0xec, 0xfd, 0x64, 0x38, 0x66, 0xa7, 0xba, 0x59, 0xb3, 0x9b, 0x9c,
- 0x44, 0xfb, 0x10, 0x08, 0xb8, 0x79, 0xea, 0x85, 0xbf, 0xa4, 0x14, 0xce,
- 0xce, 0x85, 0x22, 0x3f, 0x16, 0x00, 0x1c, 0x57, 0xc8, 0x5a, 0x1b, 0xf5,
- 0xff, 0xde, 0x7e, 0xa9, 0xcc, 0xf3, 0xb5, 0x1d, 0x57, 0x06, 0xda, 0xbb,
- 0x6c, 0x0a, 0x1e, 0xd4, 0x09, 0x74, 0x84, 0x1d, 0xfa, 0xdf, 0x33, 0x1e,
- 0xe2, 0x8f, 0x10, 0xf7, 0x73, 0xab, 0x71, 0xb8, 0x64, 0xce, 0xc0, 0x49,
- 0xc0, 0x36, 0xd3, 0x39, 0x31, 0x4c, 0x12, 0x5b, 0xf3, 0xf9, 0xb4, 0x2c,
- 0x88, 0xba, 0xd4, 0x1a, 0xbd, 0x0c, 0x99, 0xbd, 0x0e, 0xad, 0x51, 0xe0,
- 0xca, 0xdb, 0x25, 0x66, 0x83, 0xe0, 0x55, 0x18, 0xeb, 0xa6, 0x4e, 0x56,
- 0xcb, 0x2f, 0xa5, 0xf2, 0x42, 0x7a, 0xa1, 0x05, 0xf0, 0x3a, 0x71, 0x5a,
- 0x78, 0x3a, 0x7a, 0x6d, 0x12, 0x9f, 0x43, 0xc5, 0xcc, 0xb3, 0xfd, 0xf2,
- 0xbf, 0x05, 0x16, 0xef, 0x07, 0xf9, 0xde, 0x0d, 0x51, 0xf0, 0x33, 0x86,
- 0x43, 0x57, 0x40, 0xbc, 0xa9, 0xbd, 0xa0, 0x23, 0xff, 0xbb, 0xe6, 0x15,
- 0xa1, 0xeb, 0xe9, 0x78, 0x0d, 0x72, 0x76, 0xf2, 0xb6, 0x6e, 0x46, 0xe2,
- 0x86, 0xab, 0x3c, 0x52, 0x2c, 0xc6, 0x77, 0xdd, 0x57, 0xf7, 0x4d, 0x36,
- 0xbb, 0x41, 0x08, 0x21, 0xaa, 0xe6, 0x44, 0x50, 0xed, 0xaf, 0x18, 0xb3,
- 0xdd, 0x6b, 0x57, 0x46, 0x9e, 0x44, 0x93, 0x20, 0xe0, 0x62, 0x95, 0xcd,
- 0xcf, 0xe4, 0x96, 0x92, 0xc3, 0x0d, 0x16, 0xb2, 0xc3, 0xf4, 0x0f, 0x3f,
- 0x87, 0x17, 0xb9, 0x7b, 0x60, 0x60, 0xfa, 0xfb, 0x81, 0x5c, 0xb3, 0xb7,
- 0x89, 0x73, 0xf7, 0x35, 0xf7, 0x27, 0xf1, 0x0e, 0xa4, 0xa1, 0xba, 0xea,
- 0x6a, 0xe3, 0x5c, 0x0f, 0xf7, 0x15, 0xbc, 0x28, 0x57, 0x27, 0x8f, 0xd8,
- 0xca, 0x82, 0x19, 0xd0, 0xa3, 0x9d, 0xe5, 0xe0, 0x44, 0xbf, 0x78, 0xa4,
- 0x09, 0x69, 0x27, 0xa0, 0x69, 0xb5, 0xd4, 0xbe, 0x00, 0xe6, 0x03, 0x97,
- 0xbc, 0x8b, 0xfc, 0x25, 0x70, 0xb3, 0x49, 0x30, 0xe3, 0x24, 0x19, 0x77,
- 0xb4, 0x93, 0x46, 0x03, 0xe6, 0x22, 0xaf, 0x76, 0xd2, 0x90, 0x00, 0x05,
- 0x46, 0xb8, 0xa4, 0xf5, 0x4c, 0xaa, 0x04, 0x63, 0xa0, 0x57, 0xe0, 0x20,
- 0x6e, 0x1a, 0xed, 0x21, 0x86, 0xd0, 0x38, 0x5b, 0xe6, 0xa7, 0xb0, 0xe7,
- 0x75, 0xe3, 0x76, 0xb3, 0x15, 0x8b, 0xdc, 0x10, 0x52, 0x15, 0x21, 0x7b,
- 0xd0, 0xc4, 0x75, 0x26, 0x1d, 0x6e, 0x0d, 0x4c, 0x08, 0x5b, 0x95, 0x9a,
- 0xd0, 0xda, 0xbe, 0x23, 0x98, 0xde, 0x60, 0x2a, 0xe9, 0xa4, 0x92, 0xf0,
- 0x92, 0x84, 0xdc, 0x86, 0x60, 0xf5, 0x23, 0x31, 0xf5, 0xe9, 0xd6, 0x00,
- 0xc1, 0x78, 0xab, 0x05, 0x94, 0xd3, 0x47, 0x4d, 0x32, 0x0f, 0x82, 0xa0,
- 0x99, 0x0b, 0xfe, 0x6b, 0x58, 0xf9, 0x24, 0xf6, 0x17, 0xa0, 0x5f, 0x24,
- 0x6a, 0xc6, 0x01, 0xa8, 0xfa, 0xca, 0xdc, 0xb6, 0x83, 0xcb, 0xd2, 0x3b,
- 0xb7, 0x0b, 0x04, 0x3e, 0x6a, 0xaf, 0x23, 0x17, 0x3e, 0x14, 0xce, 0x52,
- 0x1c, 0xe3, 0x06, 0x66, 0x29, 0x17, 0x6f, 0x7e, 0x66, 0x06, 0xa9, 0x68,
- 0x7f, 0xca, 0xad, 0xa8, 0xb7, 0x2d, 0xa4, 0x5d, 0xa6, 0x16, 0xcd, 0xed,
- 0xee, 0x14, 0x96, 0xc8, 0x12, 0x69, 0x4e, 0x70, 0x72, 0x2a, 0x75, 0x82,
- 0x08, 0x3f, 0x3e, 0x27, 0xa0, 0xea, 0x43, 0x84, 0xa9, 0x9a, 0x91, 0x87,
- 0x4f, 0x20, 0x61, 0x55, 0x8d, 0x70, 0xad, 0x6c, 0x59, 0x5d, 0x13, 0x80,
- 0xbb, 0x52, 0x55, 0x81, 0x8b, 0x59, 0x94, 0x0f, 0xc2, 0x54, 0x79, 0x59,
- 0xe8, 0x9d, 0x58, 0xe5, 0x91, 0x10, 0xb3, 0xef, 0x1c, 0xda, 0xaa, 0xdd,
- 0x91, 0x0b, 0xb0, 0x14, 0x3b, 0xad, 0x02, 0x98, 0x40, 0x3c, 0x54, 0xc4,
- 0x23, 0xb9, 0x40, 0x54, 0x7e, 0x88, 0x10, 0x3e, 0x24, 0xe5, 0xf6, 0xdf,
- 0x5c, 0x9e, 0x7a, 0x9f, 0xd0, 0xff, 0x5e, 0x9c, 0xb6, 0x30, 0x17, 0x94,
- 0xd2, 0xaa, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
- 0x96, 0xff, 0x2f, 0x01, 0x60, 0x2c, 0x1b, 0xe3, 0xc6, 0xcb, 0xa4, 0x41,
- 0xa1, 0x44, 0x13, 0x14, 0xe2, 0x44, 0x77, 0x1c, 0x96, 0xe8, 0xe6, 0x4f,
- 0x70, 0x99, 0x3a, 0xef, 0xa1, 0x6f, 0x1f, 0x7f, 0xb9, 0xe9, 0x1e, 0x35,
- 0x37, 0x5b, 0x94, 0x90, 0x78, 0xcc, 0x8d, 0xcd, 0x6c, 0x9f, 0xf6, 0x73,
- 0xed, 0x23, 0xa2, 0x28, 0x64, 0x58, 0x50, 0x64, 0x05, 0xbc, 0xc9, 0x9b,
- 0x5a, 0xec, 0x3f, 0x2b, 0x61, 0xcf, 0xa7, 0x35, 0x56, 0x8c, 0x77, 0x68,
- 0xd6, 0xcf, 0x9b, 0xc5, 0x62, 0xee, 0x3a, 0xb2, 0xfe, 0x78, 0xba, 0x02,
- 0xe7, 0x26, 0x8a, 0x89, 0x30, 0x19, 0xcc, 0xb0, 0x98, 0xbf, 0x30, 0x2c,
- 0xae, 0x13, 0x6c, 0x93, 0x86, 0x19, 0x84, 0x13, 0x01, 0x2f, 0x39, 0x4e,
- 0x33, 0xd1, 0x15, 0x99, 0xf7, 0x1e, 0xb8, 0x86, 0xdb, 0xb6, 0xf9, 0x56,
- 0x42, 0x0e, 0x4a, 0xb1, 0x5e, 0xf0, 0x9a, 0x06, 0x5e, 0xab, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xcd, 0xde, 0xad, 0x40,
- 0x34, 0xcd, 0x79, 0x0a, 0x29, 0x84, 0x05, 0x3f, 0xb5, 0xbe, 0x49, 0x84,
- 0x43, 0xcc, 0xa6, 0xe3, 0xe9, 0xdc, 0x84, 0x14, 0xe7, 0xb3, 0x1b, 0x96,
- 0xe8, 0xda, 0x35, 0x15, 0x38, 0xf5, 0xb3, 0xb5, 0x91, 0xc3, 0xc3, 0x94,
- 0xc6, 0x79, 0xeb, 0xf5, 0x22, 0x78, 0xf0, 0x0b, 0xda, 0xb0, 0x91, 0xa7,
- 0x43, 0x71, 0x8e, 0xa6, 0x52, 0x0f, 0x81, 0x06, 0xc8, 0xdf, 0xb5, 0x1f,
- 0x92, 0xb0, 0xfe, 0x93, 0x38, 0x4c, 0xf4, 0x17, 0x66, 0x31, 0xea, 0x08,
- 0x72, 0xb9, 0xaa, 0xfd, 0x40, 0x8d, 0xbf, 0x56, 0x19, 0xb1, 0xb5, 0x8e,
- 0x4e, 0x4e, 0x73, 0x7f, 0x4b, 0x0c, 0x70, 0x94, 0x7c, 0x9f, 0xfc, 0x23,
- 0x35, 0xba, 0xd2, 0x23, 0x88, 0x1d, 0x83, 0x28, 0x45, 0xd7, 0x1b, 0x63,
- 0xfb, 0x36, 0x86, 0x06, 0xf3, 0x99, 0x81, 0x6e, 0xd7, 0xf1, 0xd4, 0x53,
- 0x6d, 0x30, 0x3c, 0x8d, 0xac, 0xc6, 0x9a, 0xd5, 0xe8, 0x4f, 0x11, 0x58,
- 0xba, 0xfd, 0x67, 0x06, 0xe7, 0x1a, 0xb4, 0xa1, 0x45, 0x13, 0xf2, 0x3b,
- 0xdc, 0x71, 0xf0, 0xc6, 0x53, 0xfc, 0x8b, 0x2f, 0x14, 0xe4, 0xe0, 0xd6,
- 0x8c, 0x96, 0x4c, 0x48, 0xc0, 0x30, 0x6e, 0x00, 0x0f, 0x42, 0xfe, 0xa7,
- 0x9d, 0x0f, 0xf2, 0x52, 0x58, 0xf9, 0x35, 0x33, 0x99, 0xda, 0xd5, 0x9d,
- 0x61, 0x26, 0x6b, 0x80, 0xff, 0x08, 0x51, 0x54, 0x26, 0xfa, 0x8d, 0xfc,
- 0x67, 0x60, 0x93, 0x0e, 0xcd, 0x78, 0x41, 0x5a, 0x31, 0x47, 0x14, 0xb0,
- 0x65, 0x89, 0x30, 0xcb, 0x0c, 0xc5, 0xa0, 0x37, 0xa8, 0xe0, 0xcf, 0x24,
- 0xa4, 0x2f, 0xad, 0xa7, 0x9c, 0xa2, 0xe8, 0x81, 0x17, 0xbe, 0x2f, 0xd5,
- 0xd1, 0xa8, 0xff, 0x9d, 0x5e, 0x7f, 0xd9, 0x6c, 0x56, 0xe6, 0xc4, 0x60,
- 0x8d, 0xa5, 0x47, 0x5e, 0x43, 0x1e, 0x34, 0x23, 0xb3, 0x6a, 0xdf, 0x6c,
- 0xf8, 0xd1, 0x85, 0x11, 0xaa, 0x74, 0x85, 0x71, 0x27, 0xc5, 0x80, 0x37,
- 0x60, 0xb4, 0x2b, 0x53, 0x5a, 0xc4, 0x35, 0xd1, 0xe8, 0x4b, 0x01, 0x58,
- 0x1f, 0xdb, 0x73, 0xf3, 0x2c, 0x8b, 0xbb, 0x17, 0x36, 0x76, 0x35, 0x6b,
- 0xa0, 0x82, 0x47, 0xf5, 0x16, 0x21, 0x41, 0x43, 0xc9, 0x1f, 0x53, 0xf9,
- 0xe9, 0x47, 0xf0, 0x9c, 0x6d, 0xe3, 0x23, 0x59, 0x74, 0xdc, 0x1a, 0x8f,
- 0x4e, 0x6c, 0x71, 0x83, 0x7e, 0xd0, 0x2b, 0x50, 0x44, 0x86, 0x5f, 0xbf,
- 0x60, 0x92, 0xeb, 0x9a, 0x9b, 0xa2, 0xc9, 0x2b, 0xa8, 0xc4, 0x77, 0x4e,
- 0x3f, 0xf8, 0xa6, 0x39, 0x50, 0x5c, 0x7e, 0x2a, 0x70, 0xb0, 0x5d, 0x28,
- 0xb2, 0x81, 0xa9, 0xaf, 0x16, 0x5e, 0x27, 0xeb, 0x03, 0x0e, 0x82, 0xad,
- 0x28, 0x51, 0x16, 0xd1, 0xf4, 0x58, 0x75, 0x1a, 0xf9, 0x6a, 0xbf, 0x73,
- 0xd7, 0x84, 0x07, 0x7f, 0x4c, 0x4e, 0x29, 0x02, 0x9b, 0x60, 0x81, 0x85,
- 0xa9, 0xbf, 0xc7, 0xa0, 0x8f, 0x8a, 0xdc, 0xa4, 0xc5, 0x17, 0x51, 0x24,
- 0x15, 0x28, 0x9e, 0x5e, 0x78, 0x84, 0x21, 0x02, 0xca, 0x26, 0x61, 0x4e,
- 0x95, 0xa6, 0x8d, 0xa6, 0x98, 0x7d, 0x1f, 0x84, 0x19, 0x24, 0x8b, 0x31,
- 0x76, 0x89, 0x2a, 0x5f, 0xa9, 0xfb, 0xaa, 0x8a, 0x8c, 0xce, 0xe4, 0x30,
- 0xd6, 0xec, 0x5b, 0x39, 0xb7, 0x09, 0x80, 0x23, 0x4c, 0xe1, 0x6e, 0x8f,
- 0x7c, 0x10, 0xe8, 0x8a, 0x60, 0x35, 0xd7, 0xa3, 0xe0, 0x5f, 0xcd, 0xfa,
- 0x3d, 0x8f, 0xd8, 0x5d, 0xec, 0xc9, 0xc5, 0xa0, 0x73, 0x41, 0x89, 0xe5,
- 0x39, 0xf2, 0x42, 0xff, 0x08, 0xa0, 0x12, 0xb7, 0x4a, 0x5e, 0x46, 0x06,
- 0x31, 0xbd, 0x88, 0x5e, 0x9e, 0x05, 0x17, 0x51, 0xb3, 0xe7, 0x88, 0x10,
- 0x19, 0x32, 0xff, 0x8a, 0x1e, 0xce, 0x66, 0xbc, 0x84, 0x1f, 0xed, 0x52,
- 0x52, 0x77, 0xe1, 0x5e, 0xa6, 0x21, 0xe4, 0xad, 0x59, 0xca, 0xa3, 0x77,
- 0xea, 0x66, 0x28, 0x15, 0x73, 0x3a, 0xfd, 0xe4, 0x75, 0x46, 0x99, 0x59,
- 0x5c, 0x7a, 0x9b, 0x9d, 0x11, 0xb4, 0x76, 0x45, 0x06, 0x45, 0x41, 0x1e,
- 0x94, 0xb7, 0xd9, 0xb8, 0xcb, 0xbf, 0x71, 0xec, 0xba, 0x9f, 0x4a, 0x1b,
- 0xbc, 0xfd, 0x5c, 0x06, 0x64, 0xfd, 0x31, 0x52, 0xc0, 0xe4, 0xa7, 0x21,
- 0x2f, 0x22, 0x92, 0xf0, 0x51, 0x33, 0x92, 0x1d, 0x40, 0x3c, 0x01, 0x81,
- 0x3b, 0xa8, 0x2e, 0x4e, 0xb6, 0x60, 0xcd, 0xd4, 0x36, 0x3b, 0x2e, 0x1d,
- 0x5e, 0x43, 0xd9, 0x94, 0xf1, 0x51, 0xd3, 0x59, 0x94, 0x6a, 0xd5, 0x5f,
- 0x1f, 0xd3, 0xa6, 0x55, 0xda, 0x15, 0xf1, 0x3e, 0x2c, 0x60, 0xb8, 0xc3,
- 0xda, 0x0e, 0x56, 0x53, 0xea, 0xcd, 0x39, 0x27, 0x94, 0x86, 0x94, 0xb2,
- 0x5b, 0xd8, 0x9a, 0x12, 0x94, 0xb0, 0xb6, 0x77, 0x28, 0xba, 0xde, 0xb6,
- 0x60, 0x4d, 0x2b, 0x6e, 0x3d, 0xf6, 0xf1, 0x48, 0xf7, 0x77, 0xa1, 0x49,
- 0xe0, 0x9f, 0x1e, 0xc9, 0xe6, 0xcb, 0x95, 0x26, 0x61, 0x5a, 0xc9, 0xed,
- 0x49, 0x40, 0x17, 0x57, 0x15, 0xfc, 0x3c, 0xb8, 0x28, 0x79, 0xb8, 0x42,
- 0x2a, 0xf9, 0xd4, 0x19, 0xb9, 0x5f, 0x41, 0xc2, 0x25, 0xd7, 0x88, 0x34,
- 0xb3, 0x25, 0x4e, 0xca, 0xff, 0x9e, 0x59, 0x9a, 0x33, 0xc8, 0x12, 0xf9,
- 0xd5, 0x70, 0xc0, 0x8b, 0x43, 0x13, 0xc4, 0x8d, 0x45, 0x99, 0xaa, 0xd7,
- 0xeb, 0xb1, 0xe9, 0xb7, 0x5b, 0xab, 0x48, 0xd1, 0x26, 0x60, 0x8c, 0x13,
- 0x55, 0x8a, 0x41, 0xd3, 0x68, 0x58, 0xd4, 0xa6, 0x30, 0x6e, 0x88, 0x3e,
- 0x81, 0x6e, 0x61, 0x06, 0x13, 0x66, 0xd5, 0x8e, 0x5d, 0x87, 0x4f, 0xd9,
- 0xb1, 0x66, 0xb3, 0xc5, 0x88, 0xa9, 0xc0, 0x73, 0xcb, 0x7f, 0x42, 0xec,
- 0x96, 0x64, 0xad, 0x72, 0x85, 0x72, 0xaf, 0xeb, 0xa9, 0xc4, 0x17, 0x86,
- 0xab, 0xe7, 0x23, 0xd7, 0x96, 0xf7, 0xb2, 0xb3, 0x51, 0xe1, 0x9a, 0x3b,
- 0x0e, 0xaf, 0x89, 0xca, 0x7b, 0xf1, 0x70, 0x7b, 0xc7, 0x82, 0xfc, 0xc7,
- 0x6c, 0x37, 0xd9, 0x7b, 0x82, 0x0f, 0x94, 0xcf, 0xd1, 0xa9, 0x33, 0xc2,
- 0xa4, 0xab, 0xed, 0xad, 0xee, 0x64, 0x5d, 0x04, 0xf2, 0xcb, 0x8e, 0x99,
- 0x22, 0x33, 0x69, 0x85, 0x85, 0xb6, 0x1a, 0x9b, 0x09, 0x18, 0xbe, 0xcd,
- 0x63, 0xf6, 0x5d, 0x52, 0xbc, 0x26, 0x99, 0x3e, 0x52, 0xe5, 0x0c, 0xc5,
- 0xee, 0xdd, 0xbb, 0x07, 0xbc, 0x38, 0xc1, 0x67, 0x96, 0x8c, 0xe6, 0xe4,
- 0x18, 0xfa, 0x07, 0x91, 0x48, 0xef, 0x9c, 0x70, 0x9d, 0x5b, 0x1c, 0x0e,
- 0xd5, 0xd3, 0x59, 0xee, 0x44, 0x13, 0xf7, 0x00, 0xa6, 0x20, 0xad, 0x65,
- 0x1d, 0xb7, 0x96, 0x2f, 0x79, 0x7b, 0x04, 0xa3, 0x10, 0x90, 0x29, 0x8c,
- 0xa3, 0x2e, 0x14, 0x39, 0xd3, 0xe4, 0x6e, 0x46, 0xf7, 0x6e, 0x96, 0x68,
- 0xd9, 0xef, 0x45, 0xf7, 0x3c, 0xcd, 0xc7, 0xca, 0x33, 0x64, 0x8e, 0x31,
- 0x80, 0x48, 0x7b, 0x7c, 0x81, 0x9a, 0x48, 0xff, 0xd5, 0x0d, 0x74, 0xe7,
- 0x77, 0x46, 0x61, 0x9b, 0xde, 0xed, 0x83, 0xe9, 0x4f, 0x92, 0xc1, 0x16,
- 0xad, 0x44, 0x40, 0x23, 0xce, 0x04, 0x31, 0xbf, 0xcf, 0xe2, 0x5a, 0x68,
- 0x5a, 0xf4, 0x0f, 0xe1, 0x87, 0x79, 0xb0, 0x32, 0x0b, 0x09, 0x6b, 0x72,
- 0x2b, 0x16, 0x06, 0x67, 0x82, 0x0b, 0x92, 0x35, 0xdb, 0x4c, 0xe2, 0x4a,
- 0x60, 0x99, 0xaf, 0x52, 0x10, 0x4b, 0xa5, 0xcf, 0xac, 0x66, 0x49, 0x56,
- 0x04, 0xc0, 0xd6, 0x6f, 0x62, 0x53, 0x6f, 0xcb, 0x62, 0xe9, 0xa5, 0xca,
- 0x18, 0x8e, 0x86, 0x3f, 0x36, 0xfd, 0xea, 0x55, 0x16, 0x6d, 0x6c, 0x6a,
- 0x8f, 0xa7, 0x9c, 0x70, 0x15, 0xd7, 0xf4, 0x57, 0x68, 0x04, 0x84, 0x60,
- 0x3b, 0xb0, 0x32, 0xc4, 0xea, 0x9d, 0x70, 0xb9, 0xa6, 0x34, 0xe5, 0xfa,
- 0xa1, 0x24, 0x54, 0x7f, 0xef, 0xac, 0xb4, 0x5f, 0xa0, 0xc0, 0x40, 0x3f,
- 0x73, 0xdf, 0x56, 0xa6, 0xd9, 0x17, 0xf4, 0xff, 0x50, 0xae, 0x21, 0x0d,
- 0x5a, 0xe0, 0xb0, 0xf9, 0x5b, 0x7a, 0x61, 0x6e, 0xa6, 0x85, 0x85, 0xbf,
- 0x19, 0x03, 0xe2, 0x74, 0x1f, 0x03, 0x70, 0x76, 0x3c, 0xed, 0x02, 0x7d,
- 0xfa, 0xf9, 0x1e, 0x17, 0xdd, 0x42, 0x30, 0xf0, 0x32, 0x47, 0x46, 0xae,
- 0xf5, 0x64, 0xe6, 0x5e, 0x2b, 0x40, 0x86, 0x97, 0xb1, 0x24, 0x52, 0x69,
- 0x67, 0x79, 0x8e, 0x0d, 0xcc, 0x07, 0xcb, 0x72, 0x29, 0xe9, 0xba, 0x2d,
- 0xf7, 0xcb, 0xe3, 0x86, 0x06, 0xaa, 0x6d, 0x79, 0xf8, 0xb6, 0x93, 0x0a,
- 0x9c, 0x97, 0xef, 0x47, 0x37, 0x13, 0x2e, 0x6b, 0xfd, 0x59, 0x0c, 0xc9,
- 0x5e, 0x5e, 0xcd, 0x71, 0x6f, 0x99, 0x0d, 0x88, 0x9d, 0xbb, 0x7c, 0x2b,
- 0x22, 0xd5, 0xbe, 0xee, 0x26, 0x1c, 0xe1, 0xad, 0xc8, 0x4d, 0x5f, 0x6b,
- 0xd1, 0xf4, 0x30, 0x4d, 0x46, 0x1d, 0x54, 0x11, 0x4b, 0xa0, 0x7f, 0x94,
- 0x71, 0xc0, 0x44, 0x4a, 0x42, 0x11, 0xf5, 0x89, 0xec, 0xb5, 0x24, 0x45,
- 0xf1, 0xf0, 0x30, 0x54, 0xf8, 0x62, 0xdb, 0x58, 0x3d, 0x7c, 0x2a, 0x82,
- 0xe5, 0xbe, 0x13, 0xcf, 0xdc, 0x88, 0xfb, 0xd3, 0x1e, 0x4d, 0xa5, 0x3e,
- 0xad, 0x95, 0xa2, 0xe6, 0x48, 0x73, 0xb2, 0xbe, 0x96, 0xef, 0x8e, 0x0b,
- 0x28, 0xf9, 0xbe, 0x2a, 0xd6, 0x68, 0x9e, 0x9c, 0x7b, 0x5a, 0xaf, 0x20,
- 0xf6, 0xa5, 0x3f, 0x99, 0x61, 0x57, 0xe8, 0x1c, 0xb2, 0xc3, 0xd0, 0x7f,
- 0x2c, 0xb5, 0xe9, 0x66, 0x8e, 0x88, 0xec, 0x13, 0x51, 0xbc, 0x8e, 0xb6,
- 0xe2, 0x91, 0xbf, 0x5e, 0x8c, 0x1c, 0xdd, 0x0e, 0x0a, 0x13, 0x06, 0xc6,
- 0x62, 0x1c, 0x41, 0x8d, 0xa1, 0xc0, 0xf2, 0xfa, 0x76, 0x35, 0xaa, 0x77,
- 0x06, 0x3f, 0x76, 0x50, 0xf6, 0x43, 0xf2, 0x25, 0x00, 0x79, 0xde, 0xca,
- 0xa1, 0x06, 0x6f, 0xb4, 0x17, 0x4b, 0x99, 0x5a, 0x00, 0x32, 0xd6, 0xb0,
- 0x1f, 0x80, 0x53, 0x16, 0xaa, 0x87, 0x72, 0xa2, 0x34, 0xaf, 0x90, 0x3d,
- 0x60, 0xde, 0x0e, 0x6d, 0x83, 0xda, 0xb2, 0x11, 0x2f, 0x39, 0xdc, 0x1a,
- 0xfe, 0x51, 0x74, 0x10, 0x3c, 0x41, 0xd5, 0x41, 0x65, 0x4a, 0xa0, 0x11,
- 0xde, 0x95, 0x34, 0xef, 0xa0, 0xc9, 0xa8, 0xd3, 0xcb, 0xb9, 0x7d, 0x51,
- 0x7d, 0xff, 0x26, 0x88, 0xd8, 0x29, 0x0e, 0xa0, 0xd4, 0xa7, 0x07, 0x33,
- 0xe7, 0x7d, 0x59, 0x9f, 0x35, 0xc1, 0xb5, 0xf7, 0x78, 0x78, 0x84, 0xf0,
- 0x20, 0x41, 0x3f, 0x02, 0x7d, 0x41, 0x90, 0x01, 0x8d, 0xa4, 0xd8, 0xd7,
- 0xeb, 0x56, 0x7f, 0x38, 0xbc, 0x1e, 0x15, 0xdf, 0xfc, 0x34, 0xe7, 0x99,
- 0xd4, 0x92, 0xd5, 0xf3, 0x9e, 0x16, 0x0b, 0x5c, 0xeb, 0xb6, 0x78, 0xac,
- 0x84, 0x06, 0x8e, 0xfe, 0xd0, 0x7c, 0xce, 0x4a, 0x43, 0x49, 0x3b, 0xe1,
- 0xab, 0x57, 0xc0, 0x12, 0xd6, 0x9d, 0xa4, 0xee, 0x91, 0x10, 0x81, 0xe2,
- 0xfc, 0x02, 0x26, 0x7a, 0xca, 0x81, 0x5b, 0x2f, 0x34, 0x51, 0xdd, 0x25,
- 0x4d, 0xc8, 0xf9, 0x3e, 0x59, 0x0f, 0x3d, 0x64, 0x51, 0xbf, 0x42, 0xc4,
- 0x92, 0x9d, 0x8f, 0x39, 0x8a, 0x31, 0x09, 0x24, 0x19, 0x44, 0xc0, 0xf4,
- 0xea, 0xca, 0x59, 0xcb, 0x86, 0x6c, 0x02, 0x7a, 0xe5, 0x30, 0x79, 0xe2,
- 0x2c, 0x76, 0x08, 0x8f, 0x98, 0x0d, 0x4d, 0x12, 0xc3, 0x98, 0xb4, 0x24,
- 0x04, 0x4f, 0x51, 0xec, 0x4e, 0xec, 0xbd, 0x8c, 0xc4, 0x79, 0x51, 0x7f,
- 0xe1, 0xce, 0x76, 0x28, 0x0b, 0x7b, 0xc5, 0x3f, 0x5b, 0x48, 0x19, 0x76,
- 0x68, 0x31, 0x8e, 0x28, 0xff, 0x18, 0x24, 0xe3, 0x91, 0xe7, 0x49, 0x0d,
- 0x10, 0xbd, 0x00, 0xc6, 0x58, 0xfd, 0xb6, 0x88, 0x63, 0xbd, 0xb4, 0x4b,
- 0xb8, 0xed, 0xdd, 0xb7, 0x53, 0xce, 0x89, 0xdb, 0x7f, 0xf4, 0xc3, 0x21,
- 0x31, 0xad, 0x20, 0x78, 0x06, 0x71, 0xaf, 0xc0, 0xe3, 0xdc, 0xb8, 0xf4,
- 0x80, 0xc8, 0x33, 0x1d, 0x8b, 0xff, 0x5a, 0x92, 0x68, 0x4d, 0xc1, 0x5b,
- 0x58, 0x3e, 0xf6, 0x7f, 0xba, 0x42, 0xa5, 0x6d, 0xec, 0x03, 0x36, 0xc9,
- 0x3f, 0x83, 0x1f, 0x0c, 0x33, 0x57, 0x6a, 0x43, 0x5f, 0x11, 0x72, 0x19,
- 0x2c, 0xda, 0x71, 0x58, 0xf2, 0x50, 0x50, 0x06, 0x97, 0xd0, 0xdf, 0xd1,
- 0x4f, 0x0b, 0x00, 0x1a, 0xea, 0x85, 0x3b, 0x37, 0x2f, 0xf0, 0x40, 0x52,
- 0xd9, 0x2a, 0xe8, 0x54, 0xa5, 0xee, 0x0f, 0x49, 0x74, 0x39, 0x96, 0x5d,
- 0x60, 0x8f, 0x14, 0x59, 0x86, 0x59, 0x86, 0xfb, 0x67, 0x71, 0x5c, 0x26,
- 0x5f, 0xe9, 0xab, 0x32, 0x77, 0x83, 0xdf, 0x02, 0x19, 0x85, 0xae, 0x4d,
- 0x7d, 0x9c, 0x8d, 0x4f, 0x61, 0x05, 0x3c, 0x0c, 0xc6, 0x74, 0x9e, 0x36,
- 0x33, 0xb8, 0x14, 0x85, 0xab, 0xa2, 0x0b, 0x5d, 0x22, 0xf2, 0x50, 0x3e,
- 0xa4, 0x88, 0xac, 0x67, 0xf9, 0x06, 0xe5, 0x30, 0x8e, 0xf9, 0x67, 0x34,
- 0xd5, 0x94, 0x5b, 0x35, 0xb7, 0x3d, 0x39, 0x5f, 0x4e, 0xae, 0xfe, 0xf7,
- 0x57, 0xd3, 0x95, 0x7b, 0x0a, 0xd9, 0x92, 0x4a, 0x66, 0x29, 0xa0, 0x18,
- 0x35, 0x54, 0x14, 0x44, 0x79, 0x72, 0xc3, 0xbc, 0xa8, 0x1a, 0xd3, 0xa3,
- 0xbe, 0x6f, 0x9e, 0xcc, 0x68, 0xb6, 0x5f, 0xd4, 0x42, 0xab, 0xe8, 0x09,
- 0x60, 0x57, 0x2e, 0xb2, 0x9a, 0x5b, 0x62, 0x38, 0xfb, 0x0a, 0x35, 0x9c,
- 0x4f, 0xf7, 0xe0, 0xd2, 0x06, 0x04, 0x1f, 0x79, 0x7f, 0xa7, 0x7b, 0xd3,
- 0x63, 0xc9, 0xbd, 0x16, 0x58, 0x38, 0x7b, 0xaa, 0x08, 0xf3, 0x14, 0x6c,
- 0x25, 0xf8, 0xa5, 0xe9, 0x4b, 0x45, 0x34, 0x89, 0x76, 0x74, 0xcb, 0x41,
- 0x9c, 0x2a, 0xd9, 0xca, 0xb3, 0x12, 0x46, 0x6d, 0x85, 0x4d, 0x63, 0x2d,
- 0x24, 0x1b, 0x19, 0x6b, 0x3f, 0x61, 0x6b, 0x4b, 0x15, 0x83, 0x2d, 0x8f,
- 0x61, 0xab, 0xd1, 0x55, 0x93, 0x4e, 0x26, 0xd6, 0x7a, 0x0a, 0x8a, 0xff,
- 0x58, 0x44, 0xf7, 0x39, 0x31, 0x1a, 0xab, 0xa6, 0x98, 0x31, 0x41, 0x03,
- 0xb6, 0xc9, 0xf5, 0x50, 0xe3, 0x7b, 0xc0, 0x59, 0x74, 0x60, 0x91, 0xb4,
- 0x79, 0x02, 0x25, 0xc1, 0xb5, 0xbd, 0xcb, 0x6e, 0x40, 0x61, 0xfe, 0x68,
- 0x29, 0x83, 0x1b, 0xd2, 0x49, 0xe1, 0x31, 0xde, 0xdd, 0x53, 0xb0, 0xb8,
- 0x96, 0xa2, 0xce, 0xea, 0x8b, 0x66, 0x2c, 0x5a, 0x80, 0x51, 0x0b, 0xc1,
- 0x2d, 0x9a, 0xfa, 0x9d, 0xc6, 0xcc, 0x2b, 0xbb, 0xaa, 0xce, 0x98, 0xaa,
- 0x26, 0x15, 0x8f, 0x4a, 0xe7, 0xdb, 0x17, 0x6c, 0xe5, 0x58, 0xc9, 0xae,
- 0xe4, 0x9c, 0x1d, 0xab, 0x59, 0x84, 0x3e, 0x27, 0x76, 0x03, 0xe3, 0x82,
- 0x64, 0x6f, 0x6e, 0x6f, 0x63, 0xd2, 0x12, 0x84, 0xe3, 0x9b, 0x9d, 0x7e,
- 0x53, 0x1a, 0x54, 0x8d, 0xc1, 0xf0, 0x94, 0xae, 0xad, 0x8f, 0x6a, 0x12,
- 0x4e, 0xa7, 0x30, 0xdb, 0x55, 0xbe, 0x09, 0xe2, 0x56, 0x08, 0xc4, 0x3a,
- 0xb0, 0x55, 0xb0, 0x24, 0x96, 0xa6, 0x3e, 0x28, 0xd0, 0x35, 0xfb, 0x58,
- 0x47, 0xba, 0x2d, 0x51, 0xbb, 0x72, 0x20, 0x59, 0xd2, 0xdd, 0x9c, 0xe2,
- 0xb5, 0x31, 0x90, 0xac, 0x74, 0x5d, 0x9f, 0x3d, 0x8c, 0x1c, 0x96, 0xc0,
- 0x60, 0x61, 0xa8, 0xbb, 0x3c, 0xb3, 0x6d, 0x6d, 0x92, 0x4a, 0xca, 0xbb,
- 0x60, 0x5e, 0x82, 0x0d, 0x7f, 0xab, 0x4b, 0x36, 0x4c, 0x93, 0x0d, 0x88,
- 0x71, 0xaf, 0xb6, 0x53, 0xb0, 0x38, 0xb4, 0x1c, 0xb4, 0x7b, 0xd4, 0x13,
- 0x32, 0x6c, 0xe4, 0xee, 0x6a, 0xb3, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x88, 0x83, 0x91, 0x4c, 0x2e, 0x1e, 0xbe, 0xa4,
- 0xb5, 0x96, 0xff, 0x67, 0x50, 0xe9, 0x81, 0x0e, 0x5d, 0x0e, 0xad, 0xc4,
- 0x1f, 0xeb, 0x98, 0x38, 0xcc, 0x54, 0x9d, 0x27, 0xa6, 0xf1, 0x37, 0x23,
- 0xce, 0xb4, 0x5b, 0xff, 0x12, 0xb1, 0xb8, 0x35, 0x5e, 0x03, 0x02, 0x04,
- 0xad, 0xa6, 0x6f, 0x43, 0xfc, 0xe4, 0xbe, 0x0c, 0xe0, 0x93, 0xd5, 0xef,
- 0x09, 0xfa, 0x04, 0xe9, 0x5a, 0x22, 0xd4, 0x81, 0xc1, 0x27, 0x4f, 0x5f,
- 0x6e, 0x83, 0x5a, 0x8a, 0x2d, 0xbb, 0x8f, 0xa4, 0x91, 0xcc, 0x82, 0x37,
- 0x3b, 0x14, 0x98, 0x58, 0x86, 0x44, 0xb7, 0xa9, 0x58, 0xf3, 0x3d, 0x49,
- 0x71, 0x7a, 0x37, 0xcd, 0xc5, 0xb9, 0xc9, 0x46, 0xd5, 0xd4, 0x17, 0x60,
- 0x1a, 0xbf, 0x93, 0xa9, 0xe9, 0x08, 0x25, 0x40, 0xd1, 0x65, 0xae, 0xdd,
- 0x85, 0xa6, 0xcc, 0x06, 0xca, 0x91, 0xe1, 0x63, 0xf9, 0x6b, 0x15, 0xa8,
- 0x04, 0x61, 0xd2, 0xa6, 0x59, 0x21, 0x1a, 0x1c, 0xc9, 0xa9, 0xa9, 0xc8,
- 0x54, 0x86, 0xac, 0xa5, 0xd6, 0x95, 0x39, 0x83, 0x4b, 0x6b, 0x69, 0xa6,
- 0x94, 0xd8, 0xc0, 0xfb, 0x66, 0x0f, 0x3a, 0xbe, 0xc7, 0xf3, 0xcc, 0xd5,
- 0xb7, 0x1b, 0x60, 0x02, 0x95, 0x45, 0x4a, 0x12, 0xc9, 0xfe, 0x75, 0x7c,
- 0x1b, 0xb2, 0x86, 0x96, 0x28, 0x07, 0xa2, 0x18, 0x7a, 0x6c, 0x90, 0x6f,
- 0x32, 0x0c, 0xc8, 0x34, 0xbc, 0x75, 0x4d, 0x96, 0x03, 0xa6, 0x0f, 0x3d,
- 0x35, 0x1b, 0x64, 0x76, 0x95, 0x55, 0xff, 0x25, 0xd4, 0x71, 0xcf, 0x8a,
- 0x73, 0x6d, 0x9b, 0x74, 0xfe, 0xff, 0x9e, 0x31, 0x9e, 0x5e, 0x89, 0x5a,
- 0x1a, 0xeb, 0x8d, 0x06, 0x3b, 0xf2, 0xf6, 0x06, 0x5d, 0xc3, 0xba, 0x04,
- 0xca, 0x0f, 0x07, 0x2c, 0xbd, 0x54, 0x52, 0xd9, 0x1c, 0x2f, 0x0e, 0x13,
- 0x5e, 0x25, 0x13, 0xe5, 0xd7, 0x8e, 0x19, 0x42, 0x1b, 0x52, 0x2e, 0xd2,
- 0x8f, 0xc5, 0x8e, 0x1c, 0x34, 0x2e, 0x4d, 0xd5, 0x51, 0x7d, 0x91, 0x64,
- 0xbc, 0xb4, 0x0d, 0xc9, 0xe7, 0x1c, 0x6c, 0x47, 0xe9, 0xbb, 0x67, 0x9a,
- 0x96, 0xde, 0xad, 0xff, 0xba, 0x35, 0x25, 0x6d, 0x57, 0xa1, 0x93, 0xfe,
- 0xe2, 0x8d, 0x02, 0xeb, 0xf0, 0x2f, 0x54, 0xfd, 0x46, 0xc0, 0x8f, 0xea,
- 0x32, 0x7b, 0x57, 0xda, 0xe0, 0x29, 0x1c, 0x19, 0xba, 0xa4, 0xa6, 0x1c,
- 0x6e, 0xeb, 0x7a, 0xa8, 0x8a, 0xe1, 0xc6, 0x12, 0xf5, 0xa3, 0x24, 0x1a,
- 0x96, 0xe1, 0x02, 0xc0, 0xf4, 0x7d, 0x14, 0x72, 0xd6, 0x12, 0x8e, 0x6c,
- 0x8c, 0xd2, 0xfd, 0x88, 0x78, 0x48, 0xf3, 0x74, 0x38, 0x86, 0x04, 0x68,
- 0x6d, 0x7c, 0xf4, 0x4c, 0x40, 0x17, 0xf6, 0x8f, 0xb2, 0x6c, 0xd7, 0x66,
- 0x66, 0x3b, 0x38, 0xa1, 0xbb, 0x1e, 0xff, 0x72, 0x1f, 0x64, 0x56, 0xc2,
- 0x53, 0x1c, 0x6f, 0x84, 0x2b, 0xbd, 0x23, 0xd9, 0xb4, 0x6b, 0x87, 0x79,
- 0x99, 0xec, 0x81, 0x8d, 0x1a, 0x58, 0x00, 0xf0, 0x2c, 0xc1, 0xc4, 0x57,
- 0x74, 0x0f, 0xce, 0x32, 0xe2, 0x5e, 0xae, 0x02, 0x1c, 0xe8, 0x94, 0xc6,
- 0x44, 0xaa, 0x7b, 0x9a, 0x32, 0xb5, 0x33, 0xac, 0xfc, 0x41, 0x65, 0xf2,
- 0xca, 0xcc, 0xc6, 0x74, 0x36, 0xb2, 0xc9, 0x0e, 0x26, 0x73, 0xae, 0x68,
- 0x98, 0xa4, 0x36, 0xe8, 0x98, 0x39, 0xad, 0x05, 0x3f, 0xca, 0x12, 0xcc,
- 0x86, 0xfd, 0xc6, 0x57, 0xf0, 0x02, 0x4e, 0x45, 0xcb, 0x54, 0x34, 0xdd,
- 0x66, 0x26, 0xab, 0xda, 0x95, 0xa5, 0x85, 0xec, 0x02, 0x03, 0xb6, 0x29,
- 0x30, 0x11, 0x40, 0x54, 0x9a, 0x6a, 0x87, 0x2e, 0x97, 0xa1, 0x7e, 0xeb,
- 0x34, 0x39, 0x78, 0x3b, 0xbc, 0x5f, 0x8e, 0xc5, 0x0e, 0x21, 0x29, 0x4b,
- 0xb7, 0x1b, 0xe7, 0x14, 0x08, 0x34, 0xb7, 0x9a, 0x0a, 0xb2, 0x6c, 0x25,
- 0x76, 0xb5, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0xe2, 0x7d, 0x48, 0xdd, 0x1a, 0xcb, 0xb6, 0x5c, 0x6f, 0xbe, 0x32, 0x9d,
- 0xd2, 0x2b, 0x9e, 0x10, 0x65, 0xd7, 0x1e, 0xec, 0xc8, 0xb5, 0x10, 0x64,
- 0x8f, 0x5d, 0xef, 0xfe, 0x9b, 0x6c, 0x9b, 0x02, 0x6a, 0x6d, 0xf7, 0x98,
- 0x7b, 0xf7, 0x17, 0xfd, 0x49, 0x1b, 0x6a, 0xc5, 0x3c, 0xa0, 0xfc, 0xa8,
- 0x94, 0x95, 0xed, 0x48, 0x81, 0x04, 0x53, 0x8c, 0xbe, 0xe4, 0x4e, 0xaf,
- 0xc1, 0x9d, 0xc3, 0xdf, 0xc2, 0xb5, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0xae, 0xb0, 0x67, 0x5b, 0x99, 0x26, 0x07, 0xfb,
- 0x6c, 0x98, 0xfe, 0xbb, 0x35, 0xf1, 0x5b, 0x02, 0xc6, 0x03, 0xfc, 0x97,
- 0x21, 0x16, 0x8d, 0x48, 0xd4, 0x4f, 0x03, 0xd9, 0x7c, 0x9f, 0xa6, 0x1e,
- 0x6f, 0x5a, 0x58, 0x17, 0x6d, 0x26, 0xb4, 0xc5, 0x4c, 0xe5, 0x93, 0x0a,
- 0x9c, 0xb2, 0x40, 0xbc, 0x60, 0xc7, 0x2b, 0xdb, 0x3b, 0xc0, 0x3c, 0x5c,
- 0x44, 0x4b, 0xdd, 0x58, 0xbe, 0xdc, 0xc5, 0xb5, 0x6a, 0xf9, 0x5e, 0x73,
- 0x07, 0x58, 0x8f, 0x45, 0x7b, 0xac, 0xba, 0x82, 0x96, 0x49, 0x4d, 0x22,
- 0x70, 0x7a, 0x3d, 0x69, 0x26, 0x8b, 0x88, 0x13, 0xf1, 0x8d, 0xfc, 0xdf,
- 0x73, 0xd5, 0x20, 0x3c, 0x52, 0x92, 0x16, 0xb1, 0x6e, 0xb7, 0x41, 0xbe,
- 0x23, 0x9b, 0x51, 0xf7, 0xc9, 0x38, 0x8a, 0xc7, 0x6e, 0x68, 0x82, 0xd1,
- 0x59, 0x50, 0x09, 0x4b, 0x44, 0x3b, 0x28, 0x06, 0x60, 0x75, 0x7a, 0xe5,
- 0xa1, 0x36, 0xbb, 0x62, 0x44, 0xe3, 0xd0, 0x68, 0x14, 0xea, 0xad, 0xf9,
- 0x18, 0xcc, 0xd5, 0x42, 0x5d, 0x18, 0x53, 0xe6, 0x4a, 0xfe, 0xde, 0x32,
- 0xe1, 0xe7, 0xf8, 0x8c, 0x9d, 0x35, 0xf4, 0x4a, 0xcb, 0x23, 0x2f, 0x91,
- 0xb5, 0xb0, 0xb2, 0x01, 0x5c, 0x22, 0x8c, 0x42, 0x42, 0xd5, 0xf0, 0x82,
- 0x6f, 0x9f, 0x64, 0xe5, 0x99, 0x4d, 0x36, 0x0b, 0xfc, 0x78, 0x38, 0x30,
- 0x47, 0x8f, 0x0b, 0x57, 0x86, 0x4f, 0x1b, 0xc9, 0x05, 0x0e, 0x08, 0xc4,
- 0xf4, 0xab, 0x9e, 0x90, 0xb4, 0x4f, 0x36, 0x54, 0xe8, 0xa1, 0x3f, 0x90,
- 0xd2, 0xf3, 0xb4, 0xb4, 0xdd, 0xf3, 0x43, 0x2f, 0xc4, 0x43, 0xbb, 0x99,
- 0x8e, 0xb8, 0x61, 0x59, 0x5e, 0xfa, 0x1b, 0x3c, 0xc1, 0xeb, 0x9d, 0x35,
- 0x62, 0x34, 0x82, 0x45, 0xef, 0x41, 0xe9, 0xfc, 0x35, 0xae, 0xb4, 0x0b,
- 0xce, 0x52, 0x5b, 0x40, 0x7d, 0xdd, 0x86, 0x83, 0x52, 0x74, 0x77, 0x11,
- 0xc2, 0x9b, 0x8c, 0xa3, 0x63, 0xc2, 0x2d, 0xdd, 0x8c, 0x76, 0x13, 0xc5,
- 0xc0, 0xde, 0x3e, 0x6b, 0xe1, 0x0f, 0xeb, 0x0f, 0x0a, 0x25, 0x41, 0x2f,
- 0x8b, 0x4a, 0x98, 0x30, 0xcb, 0x1a, 0x43, 0xa3, 0xc1, 0xcc, 0x44, 0x9a,
- 0x6c, 0xdc, 0x92, 0x40, 0xc4, 0x7a, 0x1f, 0x8a, 0x6f, 0x74, 0xf3, 0xf5,
- 0x52, 0x72, 0xf7, 0x81, 0x6e, 0x74, 0x75, 0xe6, 0xea, 0xd9, 0x57, 0x91,
- 0xae, 0xf2, 0x3f, 0x35, 0x4b, 0x99, 0xd9, 0x3f, 0x85, 0xe0, 0x92, 0xaa,
- 0x35, 0xac, 0x28, 0xbf, 0x43, 0xb8, 0xad, 0xc7, 0xc5, 0xf6, 0x15, 0x2f,
- 0x7c, 0xfb, 0x34, 0x48, 0xf3, 0x04, 0x12, 0xf4, 0x2f, 0x92, 0x74, 0xc8,
- 0xea, 0xbc, 0x24, 0x6e, 0x3b, 0x0e, 0x9e, 0xf0, 0xaf, 0x02, 0x97, 0x95,
- 0xbc, 0x90, 0x7f, 0xc4, 0xf8, 0xe2, 0x04, 0x9a, 0x8f, 0xfc, 0xbc, 0x50,
- 0xfe, 0xf7, 0x89, 0x17, 0x2c, 0xdb, 0xd6, 0x5e, 0xbf, 0xd9, 0x8e, 0x89,
- 0x8b, 0x06, 0x1d, 0x0b, 0x81, 0x2a, 0x55, 0x5c, 0x5f, 0xb6, 0xa6, 0xa5,
- 0xd2, 0xaa, 0x79, 0x9c, 0x39, 0x31, 0x76, 0x03, 0x98, 0x42, 0xd6, 0xb7,
- 0x37, 0x1f, 0xc8, 0x51, 0x8a, 0x1c, 0x5d, 0xcd, 0x9c, 0x78, 0xa4, 0x22,
- 0x6e, 0x12, 0x10, 0x0a, 0x33, 0xc9, 0xe0, 0xfe, 0xfc, 0xe8, 0x15, 0xe7,
- 0xef, 0xd8, 0x6d, 0xc7, 0xc9, 0xc2, 0x8e, 0x18, 0x82, 0x2f, 0xa6, 0x09,
- 0x8a, 0xdc, 0x41, 0x6b, 0x89, 0xea, 0xd9, 0xd6, 0x96, 0xfd, 0xba, 0x6e,
- 0xae, 0x2d, 0x0c, 0xf9, 0x3c, 0x4c, 0x1a, 0xfa, 0x98, 0x83, 0x51, 0x45,
- 0x9d, 0x1e, 0xa5, 0xc1, 0x81, 0x54, 0x37, 0x5d, 0x28, 0xca, 0xa6, 0xfe,
- 0x48, 0xf4, 0x77, 0x17, 0x92, 0x1d, 0x0c, 0xb3, 0x39, 0x77, 0x22, 0xd9,
- 0xc7, 0xc2, 0xaf, 0x70, 0x0a, 0xd3, 0xa6, 0x57, 0x69, 0xfb, 0xb9, 0xe0,
- 0xc4, 0x73, 0x7a, 0x68, 0xee, 0x27, 0x6e, 0x3a, 0x6e, 0xae, 0x32, 0xf6,
- 0x09, 0xb3, 0x0b, 0x40, 0x72, 0xc6, 0x26, 0x6e, 0xc5, 0x88, 0x6b, 0xce,
- 0x99, 0x88, 0x60, 0x6f, 0x6e, 0xa9, 0xe6, 0xd7, 0x35, 0x5e, 0x3b, 0x36,
- 0x0d, 0x14, 0xb8, 0x2f, 0xde, 0x67, 0xc8, 0x2e, 0x52, 0xc1, 0xf1, 0x58,
- 0x87, 0x32, 0x2a, 0x52, 0x21, 0x27, 0x1e, 0x04, 0xed, 0xc4, 0x82, 0xd7,
- 0xeb, 0x85, 0x12, 0x3e, 0xea, 0xd0, 0x07, 0xa0, 0x80, 0x48, 0xe9, 0xbd,
- 0x9b, 0x3a, 0x8e, 0x8b, 0xa0, 0xfc, 0x07, 0xf0, 0x69, 0x4e, 0xc7, 0x1d,
- 0xd9, 0x9a, 0x73, 0x18, 0x63, 0xb8, 0xe6, 0x4a, 0xa0, 0x81, 0xf0, 0xdb,
- 0xb9, 0x88, 0xf4, 0x2b, 0x1f, 0x0d, 0xda, 0x31, 0xc0, 0xb0, 0x55, 0x79,
- 0x56, 0x48, 0x22, 0xbb, 0x49, 0x7f, 0xb1, 0xf1, 0xf6, 0x6f, 0x42, 0xd3,
- 0xba, 0x68, 0x3a, 0x8f, 0xe7, 0xac, 0x53, 0x30, 0x96, 0xec, 0x51, 0x7d,
- 0xfc, 0xc0, 0x35, 0xe9, 0x59, 0xe7, 0x0e, 0xed, 0x29, 0x46, 0x50, 0x3c,
- 0x4b, 0x36, 0xc6, 0x2a, 0xaa, 0x3b, 0xbe, 0xce, 0xd3, 0xda, 0x4d, 0x65,
- 0xb0, 0xe8, 0x52, 0x68, 0xf0, 0x23, 0xde, 0x02, 0x77, 0xb3, 0xcc, 0xce,
- 0x78, 0xdd, 0x8c, 0xf8, 0xbe, 0x5d, 0x0d, 0xa9, 0xb6, 0x96, 0x85, 0xbf,
- 0x92, 0x2a, 0x6b, 0x1b, 0xe8, 0x76, 0x05, 0x13, 0x30, 0xd8, 0x3d, 0x80,
- 0xaa, 0xa2, 0xa3, 0xbc, 0x07, 0xba, 0x9c, 0x75, 0x5b, 0x42, 0x03, 0xd8,
- 0xde, 0x42, 0x44, 0xf7, 0x29, 0x43, 0x29, 0x0d, 0x48, 0x2b, 0x02, 0xd0,
- 0xcc, 0xe9, 0x17, 0x47, 0x23, 0x73, 0x6d, 0xc5, 0x91, 0x6d, 0x4e, 0xc5,
- 0xcf, 0xc3, 0x58, 0xaf, 0x6e, 0xa2, 0x9e, 0xe7, 0xe1, 0x88, 0xac, 0x62,
- 0xff, 0xbc, 0x69, 0x57, 0xad, 0x0f, 0x08, 0xf8, 0x32, 0xfd, 0x79, 0xcb,
- 0x30, 0xbc, 0xd2, 0xe5, 0x20, 0xd9, 0x0f, 0xd1, 0x33, 0xbf, 0xe4, 0x49,
- 0x7a, 0x2b, 0x5c, 0xb3, 0x63, 0x13, 0x4d, 0xed, 0x17, 0xe7, 0x5b, 0xf4,
- 0x36, 0x9d, 0x3c, 0x4e, 0x51, 0xb2, 0xf7, 0xf2, 0xcd, 0xfb, 0xec, 0x42,
- 0x79, 0x46, 0xae, 0x18, 0x50, 0xdf, 0xbf, 0x5b, 0xb1, 0x9a, 0x49, 0x22,
- 0xae, 0xe9, 0xf3, 0x86, 0x3f, 0xe0, 0xb4, 0xc6, 0x9c, 0x08, 0xd6, 0xd9,
- 0xf4, 0x68, 0xbb, 0x33, 0x0e, 0x59, 0x3d, 0x76, 0xf0, 0xd7, 0x54, 0x04,
- 0x19, 0x66, 0xee, 0x61, 0x11, 0x0d, 0x48, 0x10, 0x21, 0x16, 0x7c, 0xac,
- 0x49, 0xab, 0xe0, 0x19, 0x85, 0x93, 0x48, 0x65, 0x7c, 0x5e, 0x6c, 0x1a,
- 0xf5, 0xb0, 0xc6, 0x80, 0xa1, 0x2a, 0xd5, 0x71, 0x42, 0xec, 0x2f, 0x25,
- 0xf7, 0xb8, 0x84, 0xcd, 0xf0, 0x5c, 0xcd, 0xee, 0x44, 0xcb, 0xeb, 0x74,
- 0x96, 0x3c, 0xb0, 0x56, 0xcb, 0xaf, 0x7e, 0x9e, 0x4a, 0x12, 0x06, 0xae,
- 0x57, 0x43, 0x2d, 0xb2, 0x11, 0x96, 0x05, 0xdb, 0xb3, 0x1a, 0x01, 0xa7,
- 0x1d, 0x02, 0x81, 0x1c, 0x36, 0x41, 0x65, 0xf0, 0x67, 0xd6, 0xd0, 0x0f,
- 0xec, 0x34, 0x7d, 0xd3, 0x89, 0xac, 0x60, 0x67, 0x95, 0x81, 0x84, 0xe7,
- 0xbb, 0x9a, 0x59, 0x36, 0x3b, 0xde, 0xa4, 0x88, 0xda, 0xf2, 0xd2, 0xa2,
- 0x0c, 0xba, 0xfb, 0x93, 0xbf, 0xc8, 0xad, 0xe8, 0x57, 0xa0, 0x2b, 0xbb,
- 0x4e, 0xa9, 0x38, 0xe7, 0x86, 0x6b, 0x95, 0x34, 0x24, 0x96, 0xc0, 0x09,
- 0xd9, 0xfd, 0x5f, 0x1c, 0x93, 0xd9, 0x72, 0xfa, 0xc4, 0x14, 0x72, 0x9c,
- 0x19, 0x6f, 0xee, 0x12, 0x17, 0xee, 0x65, 0xb4, 0x8c, 0x83, 0x39, 0x3c,
- 0x0f, 0xbf, 0x25, 0xcf, 0xee, 0x05, 0x8c, 0x6a, 0x56, 0x18, 0xf0, 0x20,
- 0x72, 0xc1, 0xbf, 0xe4, 0xce, 0x37, 0xbf, 0x2b, 0xba, 0x70, 0x1e, 0xc2,
- 0xc8, 0xcd, 0x58, 0xb9, 0x60, 0xc7, 0xfb, 0xd0, 0xce, 0xb9, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7c, 0x63, 0x50, 0x90,
- 0xcb, 0x9c, 0xce, 0x59, 0xb1, 0x47, 0xb0, 0x49, 0x9b, 0xfc, 0xfb, 0x3d,
- 0x3d, 0x62, 0xcf, 0x58, 0x4c, 0x2a, 0x79, 0xf0, 0x72, 0x7f, 0x81, 0x41,
- 0xac, 0x82, 0x2d, 0xa9, 0xf0, 0x0e, 0x4d, 0xd2, 0xe0, 0xbd, 0xca, 0x17,
- 0xb7, 0x59, 0x9f, 0xdb, 0xfe, 0x51, 0x90, 0x88, 0xb9, 0xeb, 0x4e, 0xac,
- 0x80, 0x30, 0x64, 0xc4, 0x49, 0xd1, 0xb6, 0x65, 0x67, 0xef, 0x9d, 0x5c,
- 0x04, 0xe0, 0x9d, 0xbe, 0x47, 0x75, 0x9b, 0x6e, 0x30, 0x76, 0xad, 0x37,
- 0x9a, 0x56, 0xff, 0xcd, 0x40, 0x26, 0x3e, 0xe2, 0x7d, 0x30, 0x55, 0x09,
- 0x92, 0x25, 0x36, 0x2f, 0xf8, 0x55, 0xb8, 0x9b, 0x66, 0x49, 0x41, 0x9d,
- 0x78, 0x6d, 0x3f, 0x54, 0x41, 0x01, 0x93, 0x9c, 0x5e, 0x0c, 0x4a, 0x38,
- 0x79, 0x76, 0xb4, 0x98, 0xae, 0xf9, 0x99, 0x21, 0x05, 0x6a, 0xfb, 0xbc,
- 0x44, 0xf7, 0xdc, 0x85, 0x5e, 0x5f, 0x18, 0x49, 0x22, 0x11, 0x6d, 0xa5,
- 0x9e, 0x6b, 0x59, 0x60, 0xf8, 0x73, 0x8b, 0xcb, 0x38, 0xbb, 0xc9, 0xbf,
- 0x49, 0x0e, 0x57, 0x65, 0x48, 0x41, 0x41, 0xa2, 0x40, 0x67, 0x91, 0x1d,
- 0x54, 0xac, 0xa7, 0xef, 0x16, 0x8b, 0xc7, 0xd1, 0xe6, 0xdb, 0xc5, 0x9c,
- 0xd4, 0x04, 0x67, 0xd8, 0x75, 0x21, 0x2b, 0x1d, 0x11, 0xc1, 0x79, 0x45,
- 0xb4, 0x91, 0x7a, 0x97, 0x00, 0xde, 0xc6, 0xc5, 0x8a, 0xd1, 0xd7, 0xea,
- 0xc1, 0x22, 0xe1, 0x58, 0x61, 0xf2, 0x89, 0x3d, 0xdb, 0x04, 0x3d, 0xe4,
- 0xe9, 0xe7, 0xbf, 0x4b, 0x99, 0x8a, 0xc6, 0xf2, 0x09, 0xc4, 0xe2, 0x6d,
- 0x0b, 0xda, 0x13, 0xfb, 0xff, 0xbf, 0x0b, 0xfc, 0x78, 0x33, 0xb8, 0x7b,
- 0x3e, 0xd8, 0xba, 0x27, 0xba, 0xae, 0xdf, 0xce, 0xea, 0x80, 0x08, 0x38,
- 0xd8, 0x33, 0x00, 0xa9, 0xb6, 0x88, 0x48, 0xa9, 0x3b, 0x54, 0xf0, 0x95,
- 0xda, 0xba, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0xb1, 0xd7, 0x8d, 0x6c, 0xb9, 0x96, 0xdc, 0x64, 0x9b, 0x0c, 0x74, 0x54,
- 0x59, 0x82, 0xf6, 0x6e, 0x7c, 0x4e, 0x23, 0x83, 0x04, 0x2e, 0x49, 0xfb,
- 0x56, 0x4b, 0xcd, 0x0d, 0x76, 0x29, 0xb1, 0xce, 0x40, 0xa3, 0xd0, 0x02,
- 0x16, 0x8e, 0x1c, 0x0a, 0x00, 0x5b, 0x8c, 0x06, 0xf9, 0x07, 0x97, 0x12,
- 0x0c, 0x33, 0xd5, 0x48, 0x6d, 0xae, 0x7d, 0x2c, 0x8f, 0x74, 0x32, 0x24,
- 0xcf, 0x91, 0xd7, 0xbe, 0xb2, 0x05, 0xcf, 0x2f, 0x93, 0xd5, 0x43, 0x90,
- 0xce, 0x02, 0x97, 0xf8, 0x51, 0xb3, 0xba, 0x56, 0x5d, 0x94, 0x41, 0xa4,
- 0x11, 0xf3, 0x21, 0xc0, 0xcc, 0x28, 0xf8, 0x5a, 0x00, 0x0a, 0xd4, 0x53,
- 0xdd, 0xac, 0xfe, 0x25, 0x03, 0xea, 0x2b, 0x6b, 0x9d, 0x7e, 0x1a, 0xe1,
- 0x5f, 0x5c, 0xa7, 0x47, 0xa2, 0x72, 0x4f, 0x92, 0x60, 0x25, 0x7c, 0x1c,
- 0xa5, 0x34, 0xa6, 0x86, 0x0e, 0xda, 0x8f, 0x3f, 0xec, 0xe2, 0xe4, 0xad,
- 0xa9, 0x41, 0xcc, 0x3d, 0x94, 0x43, 0xfd, 0x28, 0xd8, 0xb0, 0x0f, 0x05,
- 0x9e, 0x2b, 0x27, 0x3f, 0xe0, 0x84, 0xbc, 0x9e, 0x7a, 0xa5, 0x83, 0x3d,
- 0x3b, 0xac, 0x83, 0xd3, 0x16, 0x92, 0x8c, 0xd2, 0x4a, 0x81, 0xdd, 0xba,
- 0x0a, 0xb7, 0xc5, 0x9f, 0x83, 0x0f, 0x78, 0xb8, 0xab, 0x2d, 0xca, 0xf8,
- 0x6c, 0x06, 0xd7, 0x82, 0xb8, 0x61, 0x7d, 0x2a, 0x31, 0x3a, 0x39, 0x97,
- 0x5f, 0xc7, 0x00, 0x6e, 0x46, 0xf2, 0xc5, 0x12, 0x71, 0x55, 0x5b, 0x10,
- 0xaf, 0xbb, 0x07, 0x4c, 0x2f, 0xa3, 0x51, 0x53, 0x22, 0x20, 0xab, 0xed,
- 0x02, 0x95, 0xc6, 0x5f, 0xaa, 0xb8, 0xc0, 0xcb, 0xe5, 0xe0, 0x25, 0x97,
- 0xf7, 0xda, 0x1d, 0xd8, 0x5a, 0xff, 0x76, 0x0c, 0x3e, 0x33, 0x1b, 0x7a,
- 0x15, 0xb8, 0x34, 0x75, 0xcf, 0xe9, 0xf3, 0x53, 0x61, 0x03, 0x2d, 0x52,
- 0x29, 0x69, 0x3a, 0xc3, 0xd9, 0x22, 0xc0, 0x2d, 0x80, 0xed, 0x66, 0xc4,
- 0xf4, 0x89, 0x60, 0x14, 0xdb, 0xec, 0x7d, 0xcc, 0x99, 0x5c, 0x94, 0x27,
- 0xab, 0xed, 0xd2, 0x17, 0xf4, 0x36, 0xfc, 0x7e, 0x99, 0x98, 0xb6, 0x86,
- 0xb6, 0x7c, 0x54, 0xd6, 0xec, 0xb5, 0xad, 0x62, 0xcc, 0xb0, 0xf7, 0x8c,
- 0x52, 0x99, 0xf2, 0x44, 0x27, 0x3a, 0xb0, 0xff, 0x8f, 0x09, 0xae, 0xe1,
- 0x61, 0xd8, 0x9f, 0xdd, 0x2f, 0x6b, 0xea, 0xd0, 0x12, 0x70, 0x8c, 0x9d,
- 0x8f, 0x4c, 0x36, 0x98, 0x1e, 0x2e, 0xb5, 0x50, 0x63, 0x33, 0x9c, 0x4b,
- 0xc3, 0xd4, 0xa0, 0xe6, 0x96, 0x96, 0x75, 0xfd, 0x8a, 0xc4, 0x0c, 0xa7,
- 0xea, 0x9d, 0xf1, 0x23, 0x9e, 0x38, 0xff, 0x1a, 0x67, 0x36, 0x5f, 0x5f,
- 0x17, 0x88, 0x1a, 0x43, 0x25, 0xea, 0x76, 0xb5, 0xcd, 0xce, 0x43, 0xf8,
- 0x71, 0x2b, 0xdb, 0xf0, 0xcd, 0x76, 0xbd, 0x94, 0x57, 0xdb, 0x77, 0xcd,
- 0xb2, 0x8f, 0xd1, 0xc0, 0xeb, 0x00, 0x61, 0x7f, 0x66, 0xb0, 0x43, 0x6e,
- 0xe0, 0x9f, 0x11, 0x0e, 0x65, 0xf7, 0x4e, 0x00, 0x74, 0xc3, 0xeb, 0xb1,
- 0xeb, 0x0c, 0x24, 0x5d, 0x15, 0x56, 0x16, 0x47, 0x87, 0xcf, 0x34, 0xbe,
- 0x2a, 0xdd, 0x77, 0x55, 0xa4, 0x09, 0x15, 0x79, 0x8c, 0xaa, 0xce, 0x32,
- 0x90, 0x9b, 0x16, 0x40, 0x94, 0x7f, 0x19, 0x27, 0xbc, 0xbf, 0x45, 0x4b,
- 0xa5, 0xf0, 0xd0, 0x9e, 0x5b, 0xb9, 0x46, 0x6e, 0x72, 0x8f, 0x49, 0x3b,
- 0x7a, 0xc1, 0x92, 0xb0, 0xd5, 0x25, 0x1b, 0x0b, 0xf3, 0xd0, 0x8a, 0x47,
- 0x8b, 0xbe, 0xa4, 0xf9, 0x6a, 0x09, 0x84, 0x9a, 0x5b, 0x5b, 0xea, 0xbb,
- 0x6f, 0xd8, 0xaf, 0xcd, 0x67, 0x9b, 0x79, 0x7c, 0x8f, 0xcc, 0xd7, 0x5f,
- 0x3a, 0xc3, 0xd0, 0xb7, 0xba, 0x28, 0x83, 0x81, 0x4a, 0x05, 0x51, 0xaf,
- 0xa0, 0x52, 0x34, 0xe3, 0x4f, 0xec, 0x82, 0xdc, 0x97, 0xd8, 0x69, 0xb2,
- 0x0d, 0x68, 0x35, 0x87, 0x58, 0xc0, 0xcf, 0x58, 0x0d, 0xf6, 0x6b, 0x6d,
- 0x2a, 0xc0, 0x72, 0xe4, 0x90, 0x8c, 0x7b, 0x45, 0xba, 0xf1, 0x13, 0x6f,
- 0x8c, 0xd2, 0xdd, 0xc5, 0x8e, 0xc8, 0xec, 0xf9, 0xfb, 0xde, 0xe5, 0xaa,
- 0xcb, 0xc0, 0xff, 0x77, 0x2d, 0x99, 0xb1, 0x69, 0x7f, 0xe3, 0x38, 0x61,
- 0x35, 0xb6, 0x45, 0xdd, 0x73, 0x45, 0x84, 0x89, 0x1b, 0x96, 0x7e, 0x6a,
- 0x1d, 0xd9, 0xe6, 0x76, 0xa8, 0x16, 0x0f, 0x42, 0xc9, 0x41, 0xec, 0x5d,
- 0x25, 0x01, 0xb0, 0x45, 0xa6, 0xaa, 0x69, 0x87, 0x11, 0xa1, 0xb8, 0x9e,
- 0x68, 0x48, 0x68, 0xe9, 0xb5, 0xc2, 0xff, 0x83, 0x8f, 0x71, 0xb9, 0xd7,
- 0xbb, 0xae, 0x59, 0x8b, 0x1b, 0x4c, 0x44, 0xd8, 0xe3, 0xce, 0xab, 0x88,
- 0xfb, 0x64, 0xd9, 0x61, 0x5a, 0x7d, 0xce, 0x3a, 0x27, 0xb5, 0xa3, 0xfd,
- 0x5d, 0xa3, 0xb8, 0xa1, 0x15, 0x63, 0x0b, 0x75, 0x39, 0xc3, 0xa4, 0xfb,
- 0x60, 0x53, 0xfd, 0x11, 0x21, 0x35, 0x0f, 0x19, 0x28, 0x14, 0xcd, 0x8a,
- 0xcf, 0x33, 0xaa, 0x4f, 0x6a, 0x1e, 0x56, 0x87, 0xd5, 0x6e, 0x43, 0x9b,
- 0xa3, 0x72, 0x95, 0x8c, 0x34, 0xa2, 0xac, 0x11, 0x76, 0x95, 0xd7, 0xdd,
- 0xbf, 0x10, 0xf4, 0x0f, 0x2a, 0x64, 0xd2, 0x4d, 0x7b, 0xc6, 0x9b, 0x7d,
- 0xf7, 0xa5, 0xb3, 0x84, 0x9a, 0x9a, 0x5e, 0xcf, 0x7f, 0x95, 0x6d, 0x44,
- 0xd1, 0xb2, 0x19, 0xbb, 0xed, 0x37, 0x42, 0x4b, 0x4b, 0x6d, 0xb7, 0x10,
- 0x02, 0x5f, 0x00, 0x1f, 0x24, 0xce, 0xb2, 0x8b, 0x3e, 0x7d, 0xc6, 0x6e,
- 0x6c, 0x90, 0x75, 0xad, 0x3f, 0x9d, 0x63, 0x04, 0x76, 0x20, 0x7a, 0x56,
- 0x48, 0xa1, 0x6a, 0x37, 0x74, 0xd2, 0xb7, 0x4f, 0xa3, 0x64, 0x62, 0xaa,
- 0xce, 0x75, 0x8c, 0x15, 0x75, 0x79, 0xa0, 0xbd, 0xdd, 0x01, 0x46, 0xca,
- 0xa0, 0x31, 0x1a, 0x16, 0x1f, 0xef, 0x8b, 0xc6, 0x54, 0x57, 0xfa, 0x6e,
- 0x43, 0xdf, 0xb0, 0x99, 0xed, 0xa4, 0xcb, 0xeb, 0x91, 0x35, 0x14, 0x0c,
- 0xa9, 0x1d, 0xb5, 0xa9, 0x32, 0x99, 0xe3, 0x89, 0x74, 0xaa, 0xa4, 0x65,
- 0x1e, 0x82, 0x47, 0xfa, 0x37, 0x23, 0xe5, 0x86, 0xb6, 0xc0, 0xb6, 0x89,
- 0x9a, 0xd9, 0xae, 0x29, 0x39, 0x7b, 0x66, 0xc7, 0x5b, 0x02, 0x08, 0x86,
- 0xd4, 0xf0, 0x75, 0xc2, 0x05, 0x86, 0xc3, 0x75, 0xd2, 0x2a, 0x1e, 0xec,
- 0x6e, 0x75, 0x29, 0x58, 0x8c, 0x25, 0x3b, 0x95, 0x21, 0xde, 0x42, 0xd5,
- 0xb7, 0x15, 0x30, 0x09, 0x49, 0x78, 0x55, 0xd5, 0xf2, 0x30, 0x80, 0x93,
- 0x8a, 0xce, 0x84, 0x27, 0xdb, 0x4a, 0x09, 0x30, 0x0c, 0x7f, 0x4d, 0xd1,
- 0x0f, 0xda, 0x66, 0x58, 0xe1, 0x01, 0xfd, 0x75, 0x83, 0xf5, 0x39, 0x2e,
- 0xe2, 0x6b, 0xde, 0xff, 0x20, 0x8a, 0xf7, 0xcc, 0x81, 0x8e, 0x99, 0xb4,
- 0xeb, 0x76, 0x74, 0x38, 0x2b, 0xe0, 0x6d, 0x61, 0x8f, 0x39, 0x59, 0x10,
- 0x7d, 0xb5, 0xd3, 0x14, 0x96, 0x04, 0x1d, 0x22, 0x89, 0xef, 0x15, 0x7c,
- 0x28, 0x5a, 0xd6, 0x8d, 0xf3, 0xb7, 0x6a, 0x9a, 0xce, 0x21, 0x77, 0xfd,
- 0x4f, 0x22, 0x26, 0x28, 0xb8, 0xb5, 0xb3, 0x73, 0xfd, 0x2a, 0x7b, 0x42,
- 0x26, 0x77, 0x41, 0x93, 0xed, 0xf9, 0x8f, 0xa9, 0x92, 0xd5, 0x9f, 0x2e,
- 0x60, 0xec, 0x60, 0x98, 0xf1, 0xd5, 0x11, 0xe2, 0xe0, 0xd7, 0x45, 0xa7,
- 0xe4, 0xf2, 0x82, 0x61, 0x2f, 0x41, 0x1b, 0xd9, 0x8e, 0x78, 0xd5, 0x6b,
- 0x68, 0x74, 0xf0, 0xc3, 0x83, 0x01, 0x16, 0x60, 0x6e, 0x34, 0x88, 0x45,
- 0x8a, 0x86, 0x44, 0x5b, 0xa5, 0xa8, 0x55, 0xbc, 0xfa, 0x8f, 0xbd, 0x93,
- 0x95, 0x3f, 0xab, 0x19, 0x54, 0x8f, 0x06, 0x8e, 0xca, 0x0b, 0x4a, 0x18,
- 0x3f, 0x7a, 0x9c, 0x3f, 0xe6, 0xbe, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x81, 0x32, 0x41, 0x46, 0x59, 0x26, 0xf4, 0xef,
- 0x93, 0x9f, 0x04, 0xc2, 0x67, 0x13, 0x32, 0x45, 0xc0, 0x79, 0x70, 0x27,
- 0x21, 0x2b, 0xaf, 0x35, 0xf3, 0xc4, 0x88, 0x52, 0x28, 0xea, 0xca, 0x8a,
- 0x08, 0x01, 0x6f, 0x61, 0xab, 0x10, 0xa3, 0xf0, 0x6b, 0x3b, 0x54, 0x64,
- 0xf1, 0x63, 0x83, 0x38, 0x2b, 0x26, 0x18, 0x5a, 0x67, 0xc4, 0x67, 0x38,
- 0x3f, 0x2c, 0x9a, 0xc9, 0x48, 0x33, 0x77, 0xb4, 0xb2, 0xc2, 0xc7, 0x08,
- 0x21, 0x5e, 0xc4, 0x19, 0x59, 0xe1, 0xfa, 0x32, 0xa4, 0x4c, 0x3e, 0xba,
- 0x65, 0x92, 0x98, 0x39, 0x71, 0x2f, 0x99, 0x08, 0xf8, 0xb3, 0x7a, 0x03,
- 0x53, 0xd7, 0x68, 0xb2, 0x5e, 0xb0, 0xef, 0xe0, 0x1e, 0x7d, 0xb2, 0x23,
- 0x5d, 0x2b, 0xd7, 0x09, 0xa6, 0x78, 0xa4, 0x7c, 0x08, 0xed, 0x8a, 0xf6,
- 0x96, 0xa0, 0x10, 0x17, 0x62, 0x8b, 0x8a, 0xa0, 0xac, 0x22, 0x67, 0x02,
- 0xa8, 0x66, 0x1a, 0xb5, 0x02, 0xde, 0xa5, 0xfa, 0x69, 0x29, 0x5f, 0x24,
- 0x89, 0x46, 0x68, 0xd6, 0x51, 0x2a, 0xfe, 0x88, 0xf0, 0x40, 0xde, 0xd1,
- 0x12, 0x2e, 0xed, 0x13, 0x7b, 0x49, 0xf6, 0xe1, 0x7a, 0xcf, 0x61, 0xcb,
- 0x70, 0x9d, 0xaa, 0x51, 0x07, 0xc2, 0x54, 0x76, 0x89, 0x29, 0x94, 0x29,
- 0x8b, 0x0e, 0xf5, 0xe8, 0x81, 0xc7, 0xdb, 0x59, 0x1e, 0x75, 0xda, 0x6a,
- 0x94, 0x18, 0x16, 0xae, 0xbb, 0x43, 0x87, 0x56, 0x66, 0x8b, 0x84, 0xe9,
- 0xa9, 0xd0, 0xd2, 0x8f, 0x5b, 0xbf, 0x1d, 0x24, 0x3a, 0xb7, 0x64, 0xff,
- 0xe9, 0x22, 0x21, 0x65, 0xaf, 0x2b, 0x45, 0x8d, 0x28, 0xea, 0xbc, 0x07,
- 0x10, 0x6e, 0xfb, 0x4d, 0x6f, 0x35, 0xe5, 0xeb, 0x5d, 0x29, 0x72, 0xe1,
- 0x94, 0xad, 0xed, 0x25, 0xd7, 0x39, 0x63, 0x32, 0x37, 0x0b, 0xb2, 0xd7,
- 0x54, 0x1f, 0xe4, 0x0d, 0xe7, 0xb3, 0xd1, 0xa6, 0x2a, 0xcf, 0x8e, 0x97,
- 0xf1, 0xa8, 0xfc, 0xb1, 0x61, 0xdc, 0xb4, 0x8f, 0x29, 0xa2, 0x68, 0x4a,
- 0xe6, 0x2f, 0x8a, 0x69, 0x2c, 0xa1, 0x1d, 0xe2, 0x9e, 0x65, 0x71, 0xb7,
- 0x83, 0xef, 0x63, 0xf5, 0x36, 0xdc, 0xa0, 0x94, 0x5a, 0x45, 0x8a, 0x85,
- 0x5e, 0x28, 0x86, 0x21, 0xd2, 0xbf, 0x7a, 0x2f, 0x76, 0x1c, 0x2a, 0x15,
- 0xb2, 0xe8, 0xaf, 0x63, 0x37, 0xbe, 0xd8, 0x0a, 0xef, 0x54, 0xee, 0xe6,
- 0xd9, 0xb3, 0xdb, 0x41, 0x55, 0xba, 0xd8, 0x14, 0x7c, 0x10, 0x61, 0x06,
- 0x40, 0x45, 0x69, 0x37, 0x60, 0xf7, 0x6a, 0x7a, 0x23, 0x70, 0x30, 0x57,
- 0x3e, 0xe5, 0x12, 0x24, 0xbc, 0x5e, 0x82, 0x89, 0xd8, 0x37, 0xc9, 0x33,
- 0xb9, 0x38, 0xa5, 0xba, 0xed, 0xdd, 0x93, 0x58, 0x81, 0x15, 0xec, 0x15,
- 0x70, 0x2f, 0x30, 0xfa, 0xaf, 0xf7, 0xf5, 0xcb, 0x41, 0x74, 0xea, 0xc0,
- 0x91, 0xbe, 0x53, 0x4c, 0xc2, 0x74, 0x1b, 0x5b, 0x8c, 0x74, 0xd8, 0xc3,
- 0x4a, 0x12, 0xaa, 0x57, 0xd6, 0x61, 0xb1, 0xb8, 0x81, 0x5d, 0x81, 0x37,
- 0x1e, 0x5b, 0x3d, 0x5a, 0xbc, 0xa6, 0xb2, 0x27, 0xe3, 0x01, 0x4c, 0xf0,
- 0xad, 0x7b, 0xdf, 0x50, 0xf9, 0xd7, 0xb7, 0xcc, 0xa8, 0x5c, 0x3d, 0x9a,
- 0xb7, 0x60, 0x3e, 0x63, 0x3f, 0x6a, 0x08, 0x0b, 0x82, 0xdc, 0x3e, 0xfa,
- 0x24, 0x33, 0xd3, 0x01, 0xbf, 0xef, 0xeb, 0x52, 0x3f, 0x91, 0x61, 0xda,
- 0xe2, 0x26, 0x10, 0xdf, 0xe4, 0x9b, 0x77, 0x91, 0x22, 0xc5, 0x4e, 0x9c,
- 0x0b, 0x32, 0xff, 0x27, 0x85, 0x85, 0x0c, 0x99, 0x50, 0x8f, 0xad, 0x5d,
- 0x06, 0x18, 0x52, 0xb4, 0x64, 0x09, 0xc4, 0xa4, 0x84, 0xd4, 0x81, 0x07,
- 0x0a, 0x97, 0x55, 0xf8, 0x96, 0x52, 0xb2, 0x9a, 0xf4, 0x06, 0x2c, 0x9a,
- 0x3b, 0x8b, 0xaa, 0x67, 0x18, 0x3a, 0xee, 0xbc, 0xca, 0x8f, 0x46, 0xf6,
- 0x4a, 0x33, 0x5b, 0x56, 0x09, 0xb2, 0x72, 0x87, 0xdb, 0xbb, 0x57, 0x67,
- 0x53, 0x82, 0x77, 0x31, 0x66, 0xbb, 0xf1, 0x33, 0x6d, 0x55, 0x82, 0xaa,
- 0x80, 0xd4, 0x4d, 0xb8, 0xab, 0xbd, 0x2a, 0xda, 0x10, 0x3a, 0xc8, 0xf0,
- 0x14, 0x1e, 0xcb, 0x8e, 0x76, 0x6c, 0xc8, 0x74, 0x05, 0xb3, 0x51, 0xbd,
- 0x63, 0x06, 0x69, 0x05, 0x2a, 0x21, 0xd6, 0x2f, 0xe4, 0x38, 0xae, 0xf8,
- 0xd4, 0xe9, 0xa7, 0xe8, 0xc8, 0x5a, 0x65, 0x7d, 0x54, 0x34, 0x33, 0x0d,
- 0xf6, 0x07, 0xd6, 0x8c, 0xe5, 0x72, 0x9b, 0xfb, 0x60, 0x49, 0xd2, 0xaf,
- 0xb4, 0x17, 0xc4, 0x74, 0x8d, 0xe5, 0x54, 0xda, 0x96, 0x56, 0x7d, 0x97,
- 0x62, 0xe8, 0xec, 0x0d, 0x2b, 0x02, 0x2e, 0x59, 0xf8, 0xa1, 0x06, 0x6a,
- 0xb6, 0x3e, 0x15, 0xeb, 0x64, 0x1a, 0x48, 0x3d, 0x53, 0x2c, 0x42, 0x3b,
- 0x97, 0xa1, 0x3f, 0x47, 0x8b, 0x74, 0x87, 0x8b, 0x96, 0x63, 0x08, 0x4c,
- 0x99, 0x38, 0x5a, 0xb6, 0x93, 0xa8, 0xcc, 0xee, 0x62, 0x3a, 0x00, 0x6d,
- 0x5c, 0xab, 0x77, 0x3c, 0x46, 0xae, 0x6e, 0xeb, 0xf1, 0xf9, 0x63, 0xf1,
- 0xa2, 0x31, 0x21, 0x38, 0xc3, 0x4f, 0xe2, 0x3a, 0x33, 0x7f, 0xe7, 0xc6,
- 0x69, 0xd5, 0x1c, 0x7e, 0x5b, 0x4f, 0xb1, 0x50, 0x3b, 0xbe, 0x31, 0xa7,
- 0x42, 0xa3, 0x97, 0x7b, 0xe3, 0x90, 0xd0, 0x07, 0xfd, 0x05, 0xb9, 0xf2,
- 0x47, 0xc4, 0xc8, 0xdd, 0x1c, 0x3c, 0xa4, 0x22, 0x96, 0x04, 0xca, 0x28,
- 0x17, 0xcc, 0x5c, 0x49, 0x7e, 0xc6, 0x93, 0x98, 0xd3, 0x8b, 0xd2, 0xf6,
- 0x4a, 0xb6, 0xbe, 0x8d, 0xa2, 0xdd, 0xb6, 0x7c, 0x66, 0x0c, 0x29, 0xcb,
- 0x1d, 0x98, 0xf6, 0xe4, 0xe5, 0x30, 0x4c, 0x84, 0xbf, 0x6f, 0x71, 0x4e,
- 0xc2, 0x12, 0x9f, 0x35, 0xd6, 0xf8, 0xc6, 0x30, 0xe9, 0x9e, 0x1a, 0x8a,
- 0x2f, 0xd1, 0x96, 0xb3, 0x3c, 0x0f, 0xf5, 0x78, 0xa7, 0xe0, 0xbd, 0x4b,
- 0xe0, 0xd8, 0x3d, 0x57, 0xa5, 0x44, 0xa0, 0xd9, 0x10, 0x79, 0xd2, 0x10,
- 0x50, 0xc7, 0x77, 0x73, 0x09, 0xf8, 0xb4, 0xcf, 0x66, 0xe3, 0x0c, 0xfb,
- 0x96, 0xf8, 0x52, 0xb3, 0x7e, 0x44, 0xf0, 0x03, 0x54, 0xd4, 0xa2, 0x57,
- 0x38, 0x8a, 0x96, 0xfc, 0x7c, 0x4c, 0x9f, 0x3a, 0xf2, 0xa2, 0x48, 0xbb,
- 0x3e, 0xd1, 0x11, 0x2c, 0xab, 0xdf, 0x53, 0x96, 0xac, 0x58, 0x33, 0xb9,
- 0xdd, 0xd2, 0x4f, 0x8a, 0x0a, 0x89, 0x0e, 0xd3, 0x6f, 0x58, 0x8c, 0xa1,
- 0x0a, 0x0b, 0xa7, 0xd7, 0x1f, 0x0a, 0x70, 0xe3, 0x43, 0x12, 0x56, 0xb8,
- 0x6c, 0xf8, 0x75, 0x4e, 0x2b, 0xb0, 0x17, 0x29, 0xe4, 0x95, 0x85, 0xd8,
- 0x85, 0x95, 0x63, 0x55, 0xa8, 0x82, 0xf0, 0xe7, 0x7d, 0xf3, 0xf1, 0x78,
- 0x66, 0xd1, 0x92, 0x71, 0x99, 0xad, 0x30, 0x94, 0xe9, 0x54, 0x2c, 0xe1,
- 0x57, 0xf3, 0x6a, 0xe6, 0x0c, 0x5e, 0xc7, 0x58, 0xba, 0xb7, 0x61, 0xd3,
- 0x74, 0x72, 0x96, 0x06, 0x0b, 0x01, 0x3d, 0xc2, 0xa1, 0xb4, 0x38, 0x81,
- 0x19, 0x44, 0xbc, 0x84, 0x52, 0x22, 0xc9, 0x67, 0x81, 0x99, 0xfb, 0x0a,
- 0xc2, 0xff, 0x50, 0x67, 0xbe, 0x38, 0x5e, 0x13, 0x16, 0x60, 0x83, 0x35,
- 0xb9, 0x2f, 0xa9, 0x55, 0xbb, 0x30, 0x6b, 0x19, 0xfc, 0x2a, 0x40, 0x24,
- 0x74, 0x20, 0x57, 0x78, 0xb9, 0x55, 0xb7, 0x70, 0x86, 0x65, 0x43, 0x1c,
- 0x76, 0x2e, 0x91, 0x83, 0x5e, 0x33, 0xc2, 0xd4, 0xcc, 0xb5, 0x1c, 0x45,
- 0xaf, 0xa3, 0x87, 0x95, 0x9b, 0x77, 0x50, 0x44, 0x7e, 0xdd, 0xca, 0x3f,
- 0x51, 0x21, 0xae, 0xf2, 0x15, 0xa9, 0x32, 0x94, 0xca, 0xde, 0x3b, 0x97,
- 0x13, 0x6b, 0xff, 0xe0, 0x79, 0x39, 0x40, 0xf0, 0x66, 0x7d, 0x5e, 0xef,
- 0xec, 0x0a, 0x35, 0xd2, 0x0d, 0x09, 0x19, 0x13, 0xf2, 0xc2, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x2e, 0x46,
- 0xab, 0x4d, 0x6d, 0xf7, 0x24, 0xba, 0x02, 0xe3, 0xc5, 0xe3, 0xed, 0x64,
- 0xc6, 0x77, 0x5a, 0x14, 0xae, 0x38, 0x52, 0x8c, 0x16, 0x2c, 0x52, 0x0e,
- 0xf6, 0x65, 0x99, 0xcc, 0xf6, 0x9f, 0x77, 0xcc, 0x2e, 0xaf, 0x14, 0xd1,
- 0xf0, 0x0f, 0xa7, 0x3e, 0x5b, 0x74, 0xff, 0xb9, 0xd3, 0x30, 0x02, 0x5e,
- 0x52, 0xc8, 0x6f, 0x57, 0xef, 0x28, 0xf5, 0xfa, 0x9e, 0x70, 0x00, 0xfc,
- 0x3e, 0xc3, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0xaa, 0x9f, 0x86, 0xb0, 0x6d, 0xa1, 0x0c, 0xfa, 0xef, 0xb3, 0x6a, 0x50,
- 0xa6, 0xfe, 0xff, 0xa9, 0x61, 0x0b, 0x18, 0x72, 0xee, 0xc6, 0xcd, 0x3a,
- 0x34, 0x5e, 0xa8, 0x81, 0x31, 0x54, 0x25, 0x05, 0xc1, 0xd9, 0x66, 0x3d,
- 0x17, 0xbb, 0x03, 0x21, 0x07, 0x69, 0x3a, 0x37, 0xe8, 0xd4, 0x6a, 0x68,
- 0xe1, 0xa3, 0x19, 0x5a, 0x8d, 0x14, 0x11, 0x09, 0xef, 0xae, 0xfe, 0x94,
- 0x19, 0x8a, 0xe4, 0xb9, 0x6e, 0xe8, 0xfa, 0x12, 0x2a, 0x5d, 0x00, 0x29,
- 0x27, 0x6d, 0x5a, 0xa5, 0x09, 0x34, 0x79, 0x2b, 0xa8, 0xcc, 0x42, 0xb4,
- 0xde, 0xe0, 0x91, 0xb9, 0x06, 0x0c, 0x11, 0x17, 0x25, 0x7a, 0x35, 0x57,
- 0x51, 0x40, 0xf3, 0xc7, 0xc6, 0x4a, 0x69, 0x98, 0x2b, 0x2b, 0x3e, 0x5d,
- 0x32, 0xd8, 0x8f, 0xb0, 0x1d, 0xee, 0x77, 0xe3, 0xaf, 0x4f, 0x71, 0x05,
- 0x04, 0xd2, 0xff, 0x51, 0xed, 0xa4, 0x69, 0x50, 0x24, 0x2a, 0xe5, 0xaa,
- 0xbb, 0xc6, 0x7a, 0x7f, 0xb2, 0xdf, 0x1d, 0xc2, 0x02, 0x2e, 0x52, 0xd1,
- 0xd9, 0x5b, 0xe7, 0x6c, 0x50, 0x31, 0x4e, 0xdf, 0x8e, 0x3f, 0x37, 0xfc,
- 0xf5, 0x34, 0x0e, 0xdb, 0x4c, 0x5d, 0x7d, 0xc8, 0xe4, 0x72, 0x40, 0xcb,
- 0x95, 0xa5, 0x41, 0xeb, 0x78, 0x5f, 0x64, 0x20, 0x55, 0x19, 0xc7, 0xf9,
- 0x9c, 0x71, 0x40, 0x8f, 0xcc, 0x2d, 0x86, 0xc0, 0xf4, 0x36, 0x2b, 0x0e,
- 0x28, 0xb4, 0xad, 0x1b, 0xde, 0x60, 0x67, 0x03, 0x0f, 0x7c, 0x18, 0xd9,
- 0xc3, 0x73, 0x67, 0x0d, 0x44, 0x3d, 0xbe, 0x7c, 0xcf, 0x96, 0x22, 0x0b,
- 0x0e, 0x3a, 0x0b, 0xcf, 0x04, 0x95, 0x92, 0x7d, 0x4b, 0xa2, 0x6a, 0x0b,
- 0x47, 0x72, 0x73, 0xa8, 0x9b, 0x96, 0x3d, 0xc6, 0x03, 0x34, 0xb1, 0x69,
- 0xc2, 0x50, 0x60, 0x89, 0x8c, 0x55, 0x8f, 0x8e, 0x74, 0xa8, 0x9e, 0x25,
- 0xe4, 0x0e, 0x73, 0xef, 0x4f, 0x51, 0xbe, 0xed, 0x5c, 0x14, 0xd3, 0xfa,
- 0x94, 0x58, 0x8d, 0x5c, 0xa0, 0xb1, 0xfc, 0x37, 0x6e, 0x9c, 0x9e, 0x61,
- 0xe5, 0x12, 0x13, 0xb2, 0x88, 0xc6, 0xcf, 0x60, 0x3f, 0x0d, 0x51, 0x33,
- 0x22, 0xfa, 0xfb, 0x2d, 0x2b, 0x8d, 0x43, 0x9b, 0x3d, 0x1e, 0x88, 0x24,
- 0x50, 0x78, 0xf7, 0x7e, 0x45, 0xb1, 0x0f, 0xa9, 0xe6, 0x77, 0xf8, 0x78,
- 0xff, 0x57, 0x6a, 0x05, 0x06, 0x0c, 0x7e, 0x1e, 0x7f, 0xe9, 0x90, 0xe8,
- 0x61, 0x68, 0xbc, 0x9e, 0xc4, 0xe5, 0x06, 0x04, 0x76, 0xcc, 0x01, 0x57,
- 0x1a, 0x55, 0x9e, 0x45, 0x26, 0xd6, 0xd8, 0xc2, 0x50, 0x25, 0xfc, 0x72,
- 0x4e, 0x18, 0xbe, 0xf2, 0x2f, 0xc0, 0x1b, 0xc8, 0x14, 0xeb, 0x24, 0xda,
- 0x15, 0x0a, 0x83, 0x38, 0xc5, 0xdd, 0xc9, 0xd7, 0x12, 0x35, 0x55, 0xdf,
- 0x2c, 0x23, 0xea, 0x17, 0xca, 0xbf, 0x18, 0xc9, 0x80, 0x63, 0x4b, 0x77,
- 0x8b, 0x17, 0x01, 0x05, 0x1b, 0xa3, 0x0b, 0x0f, 0xdd, 0xc6, 0xe0, 0xdf,
- 0xc9, 0xa6, 0x8c, 0x50, 0x95, 0x8d, 0x6c, 0x96, 0x67, 0xff, 0x88, 0x38,
- 0x3b, 0x76, 0x72, 0x11, 0x35, 0xa0, 0x1c, 0xc8, 0x96, 0x9c, 0xe5, 0x90,
- 0x79, 0x0e, 0x62, 0x57, 0x00, 0xd9, 0x57, 0xf8, 0xa4, 0xc2, 0xc2, 0x0a,
- 0x17, 0x8e, 0xd7, 0x03, 0x6d, 0x4d, 0x14, 0xb6, 0x96, 0x8a, 0x76, 0x67,
- 0x58, 0xce, 0x9c, 0xb3, 0x10, 0x49, 0x06, 0xeb, 0x56, 0x43, 0x40, 0xcb,
- 0xd4, 0xd7, 0x59, 0x42, 0xa4, 0xd7, 0x21, 0x6a, 0x51, 0x3d, 0x1c, 0x54,
- 0xd7, 0xd6, 0xa2, 0xcf, 0xf8, 0xf6, 0x72, 0x35, 0x04, 0xa6, 0xe3, 0x53,
- 0xca, 0xc5, 0x62, 0xee, 0xa9, 0xc3, 0x6d, 0x1b, 0xc4, 0xc5, 0xd9, 0xa7,
- 0x37, 0xc2, 0x04, 0x01, 0xc9, 0x4a, 0x2e, 0x26, 0xdd, 0x12, 0x6e, 0x41,
- 0x64, 0xb4, 0xe8, 0xe8, 0xc7, 0xf8, 0xab, 0x8a, 0xab, 0x1d, 0x7f, 0x2d,
- 0x58, 0xc2, 0xc4, 0xf0, 0x5d, 0x11, 0x35, 0x52, 0x88, 0xbc, 0x0f, 0x44,
- 0x6e, 0x91, 0x1e, 0x87, 0xb4, 0xb1, 0x91, 0x52, 0x32, 0xe4, 0x38, 0x6d,
- 0x5e, 0x8d, 0x30, 0xf0, 0xbc, 0xc3, 0x15, 0x80, 0x47, 0x36, 0x35, 0xb0,
- 0x93, 0xf3, 0xc4, 0x82, 0xc7, 0x73, 0xc1, 0x67, 0x0c, 0x7a, 0x31, 0x36,
- 0xbc, 0x73, 0x67, 0x66, 0xae, 0x48, 0x82, 0x27, 0x6e, 0x14, 0xd0, 0xd5,
- 0x12, 0x10, 0xce, 0x5e, 0x37, 0xcd, 0x7e, 0xa5, 0xcb, 0xff, 0x91, 0xf0,
- 0x62, 0xdb, 0x95, 0x74, 0x0c, 0x8c, 0x1e, 0x78, 0x11, 0x02, 0xb3, 0x02,
- 0x0b, 0x31, 0xe7, 0x4e, 0x8b, 0x58, 0x6a, 0xde, 0x20, 0x93, 0x8b, 0x8e,
- 0x62, 0x03, 0x24, 0xc9, 0xca, 0xf8, 0x44, 0x1d, 0x0c, 0x1b, 0xd8, 0x5d,
- 0xcc, 0xe2, 0x8e, 0x02, 0xc6, 0x5c, 0x06, 0x45, 0xe6, 0x94, 0x8f, 0xa2,
- 0x3e, 0xf5, 0xe9, 0xf5, 0x88, 0x87, 0xb2, 0x84, 0x1e, 0xb6, 0xb6, 0xfc,
- 0x9f, 0x8e, 0x79, 0xf5, 0x4b, 0x24, 0x81, 0x3e, 0x5d, 0xf4, 0x10, 0x6e,
- 0xdd, 0x8c, 0x8c, 0xae, 0xc6, 0x2c, 0x26, 0xb2, 0xfc, 0xf3, 0x99, 0xe8,
- 0x8c, 0x65, 0x5d, 0x6c, 0xa8, 0x1d, 0x6f, 0x1e, 0x32, 0x0a, 0xee, 0x87,
- 0xf6, 0xe1, 0xdd, 0x5e, 0x7f, 0x7a, 0x90, 0x8c, 0x3f, 0xe8, 0x47, 0x95,
- 0x9b, 0xc8, 0x2c, 0x49, 0xc9, 0xe4, 0x2d, 0xea, 0x58, 0xfc, 0x29, 0x1a,
- 0xb7, 0xa1, 0xf9, 0xb8, 0x84, 0x41, 0xa0, 0xf1, 0x77, 0x83, 0x56, 0x73,
- 0x86, 0xea, 0xf4, 0xf5, 0x2a, 0xa6, 0x6b, 0x00, 0x64, 0x39, 0x08, 0x8f,
- 0xf0, 0x22, 0x1a, 0x4c, 0xf2, 0x5a, 0xd0, 0xaa, 0x39, 0xae, 0x8a, 0xbc,
- 0x03, 0x99, 0xf7, 0xcc, 0x80, 0xdf, 0x2b, 0x85, 0xbe, 0x1a, 0x97, 0x28,
- 0x63, 0x04, 0x72, 0x75, 0x75, 0xb4, 0x9c, 0xd3, 0x17, 0xcc, 0x1e, 0xa1,
- 0xd2, 0x47, 0x18, 0x45, 0xad, 0xb4, 0x0a, 0x32, 0x31, 0x36, 0x64, 0x48,
- 0x3f, 0x7b, 0x4b, 0xc0, 0xd6, 0x78, 0x46, 0xaa, 0x90, 0x89, 0xf9, 0x36,
- 0x3d, 0xb4, 0xb3, 0x50, 0x51, 0xd9, 0x55, 0x6f, 0xa9, 0xe7, 0x25, 0xaf,
- 0xa0, 0xca, 0x9d, 0x45, 0x83, 0xc3, 0x0b, 0x2a, 0x0c, 0xf9, 0x3f, 0xe4,
- 0x08, 0xf4, 0xbd, 0x23, 0x45, 0x85, 0xcf, 0x41, 0x93, 0xd3, 0x21, 0x5f,
- 0x53, 0xa2, 0x5b, 0xa9, 0xf5, 0xe9, 0x8f, 0x2a, 0x2d, 0x53, 0x3c, 0x36,
- 0x17, 0xce, 0x37, 0x35, 0x3e, 0x9e, 0x6b, 0xbc, 0xba, 0xaa, 0xa5, 0x61,
- 0x79, 0x98, 0x8e, 0xbd, 0x19, 0xf4, 0x5f, 0xa9, 0xb8, 0x96, 0xa2, 0xce,
- 0x32, 0x00, 0xab, 0x51, 0xcb, 0xfa, 0x30, 0x3a, 0x83, 0x92, 0x91, 0xad,
- 0x08, 0x61, 0x62, 0x51, 0x7f, 0x19, 0xa9, 0x2a, 0x84, 0xf2, 0xab, 0x7e,
- 0x5e, 0xa7, 0x5a, 0x54, 0x7f, 0x68, 0x2a, 0x7b, 0x4f, 0xde, 0x45, 0x1d,
- 0xef, 0x73, 0x5f, 0xc0, 0x40, 0x6e, 0xec, 0x6c, 0xe9, 0xa5, 0x6b, 0x46,
- 0x54, 0x7c, 0x24, 0x8b, 0xa4, 0xe5, 0xb4, 0x82, 0x31, 0x1f, 0x3e, 0x79,
- 0x2e, 0x21, 0x8c, 0xf1, 0xbd, 0xad, 0x7c, 0x28, 0xcc, 0xbd, 0x58, 0x72,
- 0xe9, 0x6a, 0x04, 0x56, 0x67, 0x0f, 0x62, 0x98, 0x5a, 0x97, 0x4b, 0xe2,
- 0x67, 0x70, 0xbb, 0x17, 0xb1, 0x84, 0x5b, 0xd4, 0x6e, 0xab, 0x90, 0x29,
- 0x20, 0x93, 0x34, 0xa8, 0x03, 0x0f, 0xed, 0x1a, 0xf0, 0x1b, 0x92, 0x87,
- 0x43, 0xa5, 0x6a, 0x1c, 0xdc, 0xd7, 0x22, 0x68, 0x83, 0x98, 0x74, 0x2a,
- 0x4c, 0x51, 0xef, 0x71, 0x19, 0xd5, 0x3d, 0x05, 0x19, 0x61, 0xb2, 0x52,
- 0xa8, 0x6e, 0xda, 0x72, 0x51, 0x66, 0x9f, 0xf0, 0x12, 0xf6, 0x18, 0x60,
- 0xcc, 0xd7, 0x2f, 0x2e, 0x83, 0x14, 0x09, 0xdb, 0x55, 0x1c, 0xf2, 0xaf,
- 0xfd, 0xa4, 0x40, 0xf1, 0x4a, 0xc7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x9c, 0x52, 0xff, 0x48, 0x06, 0x61, 0x76, 0x6d,
- 0xd7, 0x44, 0xb1, 0x0c, 0x32, 0x62, 0x15, 0xa1, 0xc3, 0x97, 0x03, 0xdd,
- 0xed, 0x20, 0x3c, 0x3a, 0x09, 0x16, 0xe5, 0x7d, 0x8c, 0xf9, 0x7b, 0x22,
- 0x5e, 0x3a, 0xdd, 0xf0, 0xc6, 0xf0, 0x3a, 0xd4, 0x94, 0x85, 0x1c, 0x60,
- 0x74, 0x91, 0xa3, 0xe2, 0x8a, 0xe5, 0x3e, 0xd4, 0x95, 0x28, 0x8b, 0x1a,
- 0x7b, 0xbe, 0x07, 0xc0, 0xe3, 0x6b, 0xb9, 0x85, 0x82, 0x0b, 0x24, 0xba,
- 0x1c, 0xfc, 0xc0, 0x0a, 0x21, 0x33, 0xad, 0x00, 0x19, 0xce, 0xb5, 0x8f,
- 0x73, 0x05, 0xf1, 0xac, 0x03, 0xbe, 0x1f, 0x22, 0xd5, 0x32, 0x5e, 0x50,
- 0xe3, 0xe0, 0x62, 0x26, 0xf4, 0xb0, 0x85, 0xd8, 0xf7, 0xa7, 0xf4, 0xa7,
- 0xff, 0x10, 0xb8, 0xbc, 0xe0, 0x3e, 0x4d, 0xcb, 0x37, 0x74, 0xcc, 0x85,
- 0xed, 0xa0, 0x34, 0x6c, 0xfa, 0x37, 0x84, 0x6a, 0x94, 0x55, 0x3b, 0x1e,
- 0x14, 0xab, 0x26, 0x7b, 0x3e, 0xac, 0xc3, 0x79, 0xcd, 0x1b, 0x00, 0x02,
- 0xb3, 0x01, 0xc3, 0x10, 0xdd, 0x56, 0x7d, 0x0e, 0x69, 0x39, 0x3c, 0x17,
- 0xa3, 0xae, 0x9c, 0x2d, 0xc7, 0x5a, 0x0b, 0x7c, 0xd0, 0xac, 0xa1, 0x91,
- 0x6a, 0x6d, 0xc0, 0x3f, 0x98, 0xf1, 0x21, 0xf5, 0xa5, 0x7c, 0xbc, 0x70,
- 0x0d, 0x7b, 0x2f, 0x0d, 0x5a, 0xa5, 0x4a, 0x5a, 0xff, 0x51, 0xbf, 0x7f,
- 0xb5, 0x4f, 0x2c, 0xba, 0xa9, 0x46, 0x81, 0x6b, 0xac, 0xc6, 0x62, 0x2d,
- 0xd7, 0xb5, 0x04, 0x5f, 0xd4, 0x5f, 0x1f, 0x6b, 0x11, 0x7d, 0xe3, 0x58,
- 0x1f, 0xb5, 0xbf, 0x16, 0x43, 0x88, 0x05, 0xf5, 0xa4, 0x7b, 0xb5, 0x0e,
- 0xf4, 0x01, 0xb6, 0x90, 0x69, 0x52, 0x0a, 0x5e, 0x9b, 0x87, 0x51, 0x5e,
- 0xd5, 0xed, 0x2c, 0xcc, 0x58, 0xad, 0xe6, 0x77, 0xa2, 0xc5, 0x7c, 0x1e,
- 0xc5, 0x92, 0xbe, 0xed, 0x3a, 0x9a, 0x97, 0xed, 0x56, 0xc8, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x16, 0xe8, 0x24, 0xe3,
- 0x82, 0x36, 0x8e, 0x50, 0x45, 0xbe, 0xc6, 0x10, 0x02, 0xb9, 0x6d, 0xf9,
- 0xed, 0x8f, 0x64, 0x35, 0x4d, 0x2c, 0x9f, 0x99, 0xdc, 0xee, 0xfa, 0x63,
- 0x99, 0xc4, 0xb8, 0x3d, 0x77, 0xea, 0xda, 0xd5, 0x95, 0x8b, 0x8e, 0x76,
- 0x02, 0x9c, 0x62, 0xa0, 0xad, 0xfe, 0x80, 0x61, 0x72, 0x59, 0xd6, 0x9f,
- 0x16, 0x2e, 0x09, 0x71, 0xb8, 0xd7, 0x65, 0x25, 0xc2, 0x5b, 0x40, 0x67,
- 0x8e, 0xd6, 0xf8, 0xdf, 0x67, 0x29, 0x19, 0xa2, 0xa6, 0x07, 0xf3, 0xc8,
- 0x91, 0x7d, 0xf2, 0x50, 0x71, 0xba, 0x5c, 0x2d, 0xa7, 0xae, 0xc4, 0xd5,
- 0xeb, 0xb9, 0x0d, 0x2d, 0x23, 0xe5, 0x8c, 0x65, 0xf5, 0xf8, 0x97, 0x69,
- 0xde, 0x25, 0x6f, 0xea, 0x12, 0x72, 0x3e, 0xb9, 0xa7, 0x8d, 0xcf, 0xa5,
- 0x66, 0xee, 0x4e, 0x2e, 0x66, 0x6b, 0xec, 0x77, 0x7f, 0x53, 0xdc, 0x29,
- 0x73, 0x5e, 0xe9, 0x2f, 0x79, 0xac, 0x8d, 0x0f, 0x44, 0x09, 0x5d, 0x25,
- 0x1d, 0x78, 0xb6, 0xe9, 0xd0, 0xfa, 0x8f, 0x5f, 0x9c, 0xf0, 0xe0, 0xfc,
- 0x62, 0x9f, 0x52, 0x6b, 0x5b, 0x8e, 0x3f, 0xdf, 0xb4, 0xf1, 0xdf, 0x35,
- 0xd0, 0x8f, 0x5a, 0xc9, 0x1f, 0x08, 0x86, 0xaa, 0x5a, 0x9e, 0xe8, 0xb0,
- 0xaa, 0xd4, 0xcd, 0x2a, 0x5b, 0x4f, 0x7f, 0x39, 0x9f, 0x7f, 0x21, 0xf2,
- 0xfd, 0x05, 0x96, 0x53, 0x09, 0xfd, 0x36, 0x4c, 0xcd, 0x98, 0x74, 0xf5,
- 0xbd, 0xcd, 0x9e, 0x14, 0x15, 0x05, 0xb9, 0x3d, 0x5f, 0x8a, 0x02, 0x86,
- 0x10, 0xd7, 0xd4, 0x01, 0x20, 0xd9, 0x8c, 0x65, 0x7d, 0x9d, 0x39, 0x25,
- 0xbc, 0xce, 0x1a, 0xb1, 0x76, 0x92, 0xc3, 0x03, 0xed, 0xa2, 0x41, 0x31,
- 0x0d, 0xc0, 0x40, 0x94, 0x01, 0xbc, 0x9b, 0xe9, 0x5e, 0x3e, 0x8c, 0x49,
- 0xf6, 0x98, 0x0c, 0x39, 0x79, 0xdc, 0xd1, 0x1b, 0xc5, 0xb2, 0x20, 0xb4,
- 0x6c, 0xb4, 0x4f, 0xce, 0xf4, 0x6c, 0x0b, 0xef, 0x85, 0xf2, 0x7d, 0x9a,
- 0x90, 0x58, 0x1b, 0x51, 0x56, 0x52, 0xac, 0x75, 0x9f, 0x17, 0xe6, 0x48,
- 0xaf, 0x18, 0x4c, 0xd8, 0x67, 0xe8, 0xd2, 0x61, 0xbc, 0xa0, 0x95, 0xc9,
- 0x78, 0xd8, 0xa2, 0x1d, 0x47, 0x59, 0x30, 0xcf, 0xf3, 0x79, 0x06, 0xd4,
- 0x25, 0xf8, 0x9c, 0x5c, 0x28, 0xee, 0xb0, 0xd2, 0xb6, 0xaf, 0x34, 0x0e,
- 0xe5, 0xe4, 0x16, 0x2e, 0x05, 0x45, 0x23, 0xc1, 0x88, 0x90, 0x4a, 0x8f,
- 0xff, 0xfb, 0xe2, 0xc0, 0xb7, 0xae, 0xb5, 0x50, 0xc9, 0x26, 0xf0, 0xa2,
- 0xf5, 0x21, 0x23, 0x79, 0x23, 0xb6, 0x8f, 0x57, 0x64, 0xd1, 0x27, 0xc2,
- 0x07, 0x63, 0xa6, 0x54, 0x1f, 0x2f, 0xca, 0x16, 0xb8, 0x28, 0x51, 0x2a,
- 0x92, 0xe0, 0x06, 0x36, 0x55, 0x00, 0x6c, 0x99, 0x31, 0xa7, 0x56, 0xb3,
- 0x7b, 0x15, 0xcd, 0xc1, 0x32, 0x3a, 0xc0, 0x37, 0x1f, 0xea, 0x29, 0xb6,
- 0x75, 0xdf, 0x8a, 0x17, 0x09, 0x45, 0xc2, 0x6e, 0xe2, 0x4c, 0xa5, 0x93,
- 0x9b, 0x17, 0x08, 0x27, 0x75, 0x33, 0xdb, 0x1f, 0xab, 0x37, 0xad, 0x8e,
- 0xaa, 0xef, 0x0b, 0x82, 0xaa, 0xa7, 0xae, 0x2c, 0x43, 0x4d, 0x8f, 0xa0,
- 0x43, 0xd7, 0xa1, 0x34, 0xeb, 0xc0, 0x4e, 0xbd, 0x64, 0xfc, 0xc8, 0x6a,
- 0x56, 0xa8, 0xfc, 0x9e, 0x2d, 0x5f, 0x7a, 0xa3, 0x72, 0x06, 0x79, 0x38,
- 0x33, 0x05, 0xa7, 0xf0, 0x09, 0x48, 0x55, 0xfe, 0x3f, 0xab, 0x25, 0x8e,
- 0x76, 0x1d, 0x12, 0x5a, 0x20, 0x68, 0xfb, 0x51, 0x51, 0x33, 0x40, 0x37,
- 0x0c, 0x90, 0x98, 0x6f, 0x66, 0x3f, 0x40, 0xa2, 0x2e, 0x3c, 0xd1, 0x22,
- 0x51, 0x54, 0x25, 0x7e, 0x4c, 0x5d, 0x96, 0xb2, 0x65, 0x0f, 0xa3, 0xdf,
- 0x8e, 0x97, 0xfe, 0xeb, 0xe7, 0xc6, 0x22, 0x2a, 0x47, 0x3a, 0x78, 0x1b,
- 0x39, 0x2e, 0xd6, 0xbc, 0x35, 0xb4, 0xf4, 0xc3, 0xf2, 0x6a, 0x12, 0xc9,
- 0xe7, 0x6c, 0x9a, 0xfc, 0xed, 0xbc, 0x11, 0xc7, 0x71, 0x09, 0x8f, 0x56,
- 0xc1, 0xd8, 0xb6, 0x92, 0x35, 0x97, 0x8e, 0x71, 0xd2, 0xbb, 0xb4, 0xed,
- 0xf0, 0x7e, 0xff, 0x58, 0xd9, 0x95, 0x26, 0xea, 0xa9, 0x4d, 0x38, 0x8d,
- 0x4e, 0x8e, 0x53, 0xae, 0x7e, 0xe6, 0xe6, 0x82, 0x35, 0x96, 0xab, 0x0f,
- 0x04, 0x0f, 0xf2, 0xac, 0x1b, 0xcd, 0x07, 0x17, 0x1b, 0x25, 0x2f, 0x92,
- 0xaf, 0x19, 0xa2, 0x1b, 0xa0, 0x7a, 0xc7, 0x4f, 0xb8, 0x1b, 0x89, 0x21,
- 0xb5, 0xe2, 0x24, 0xe9, 0x78, 0xae, 0x7d, 0xd7, 0xcc, 0x8e, 0x3f, 0xa7,
- 0xe9, 0xbe, 0xe6, 0x79, 0x0f, 0xdf, 0x86, 0xe9, 0xb9, 0xcd, 0x82, 0x7b,
- 0xf5, 0x04, 0x89, 0xa0, 0x73, 0x5d, 0xa2, 0x4e, 0xd6, 0xa0, 0x60, 0x21,
- 0xe2, 0xfe, 0xd3, 0xf4, 0x19, 0x8b, 0x6a, 0x03, 0x12, 0x9c, 0x51, 0x9a,
- 0x41, 0x4e, 0xf6, 0xb4, 0x6e, 0x0c, 0x43, 0xf5, 0x00, 0x00, 0x78, 0x12,
- 0xdd, 0x21, 0xa8, 0xc7, 0x21, 0xa1, 0x4e, 0x44, 0x10, 0xd0, 0xdb, 0x6f,
- 0x0b, 0x4c, 0xe7, 0x7a, 0x8c, 0x0c, 0xaa, 0xb6, 0x9a, 0x7d, 0xa9, 0xff,
- 0x5a, 0x2e, 0x15, 0x9e, 0x6f, 0xea, 0xe1, 0x42, 0x0c, 0x9c, 0x5a, 0x3b,
- 0xd5, 0xe6, 0xde, 0x23, 0x3f, 0x9c, 0x45, 0x20, 0x67, 0x96, 0x50, 0x16,
- 0x80, 0x42, 0xe7, 0x67, 0x7d, 0x24, 0xdc, 0x00, 0xaa, 0x01, 0x8a, 0xa3,
- 0x61, 0xfe, 0x9a, 0xce, 0xc1, 0xe5, 0x2e, 0x19, 0x85, 0x04, 0xe6, 0x7b,
- 0xe8, 0x7a, 0xbc, 0x9d, 0xfe, 0x71, 0x29, 0x1d, 0x17, 0xae, 0x6b, 0x1a,
- 0x64, 0xd7, 0xfe, 0x18, 0x29, 0x07, 0x9b, 0x49, 0x43, 0xba, 0x29, 0x37,
- 0xa8, 0xb0, 0x26, 0x27, 0x6b, 0x7d, 0xde, 0x49, 0x12, 0x90, 0x05, 0xe2,
- 0x2c, 0xd8, 0x08, 0xd0, 0x5d, 0x74, 0xa7, 0x15, 0xbe, 0x34, 0x34, 0x6d,
- 0xad, 0xfb, 0xa8, 0x01, 0x4a, 0x6c, 0x98, 0xba, 0x84, 0x38, 0xbd, 0x05,
- 0xe8, 0x87, 0x27, 0x91, 0x3f, 0xb8, 0xe9, 0x06, 0x27, 0xda, 0x56, 0x07,
- 0xaa, 0xea, 0xf4, 0x80, 0x5c, 0x12, 0x44, 0xbe, 0x23, 0xb3, 0x63, 0x9f,
- 0x5f, 0x37, 0xa7, 0x53, 0x4c, 0xfc, 0x4d, 0x87, 0xeb, 0x91, 0xe8, 0xd7,
- 0x5a, 0xd6, 0xca, 0x67, 0x2d, 0x2f, 0x5a, 0x0e, 0xc7, 0x82, 0x78, 0xa4,
- 0xf3, 0x56, 0x07, 0xa5, 0xab, 0x6d, 0x09, 0xd2, 0x0d, 0x08, 0x6b, 0x6e,
- 0x1f, 0xc1, 0xf2, 0x91, 0x1a, 0x39, 0xfe, 0x14, 0x56, 0x3f, 0xeb, 0x9f,
- 0x14, 0xc2, 0xb3, 0xb2, 0xc2, 0x8d, 0xc2, 0xee, 0x7e, 0xf0, 0x7d, 0x92,
- 0xd2, 0xc3, 0x57, 0x3e, 0x2c, 0x07, 0x1b, 0x6a, 0x9b, 0x3b, 0x79, 0x59,
- 0xc9, 0x22, 0x96, 0x6c, 0x3e, 0x37, 0xd3, 0x0e, 0x5c, 0xf6, 0x8f, 0xa9,
- 0xaa, 0xc9, 0xa4, 0x4b, 0xaf, 0x5d, 0x1a, 0xb6, 0xf3, 0x91, 0x32, 0x4f,
- 0xca, 0x72, 0xa0, 0x42, 0x01, 0x51, 0xaf, 0x19, 0x89, 0xc4, 0xcc, 0x9b,
- 0xf3, 0x52, 0xe9, 0xa6, 0xf2, 0x71, 0x6f, 0x5a, 0x38, 0x02, 0xb8, 0x75,
- 0x88, 0x5f, 0x8d, 0x12, 0xc5, 0x55, 0x4f, 0xd1, 0xba, 0xf2, 0x24, 0xdc,
- 0x63, 0x5f, 0x93, 0xc7, 0xf3, 0xe7, 0x59, 0xac, 0xc3, 0xed, 0xbc, 0x02,
- 0xe3, 0xad, 0xb2, 0x8e, 0x2c, 0x2d, 0x47, 0xb4, 0x34, 0x8d, 0xae, 0x44,
- 0xc8, 0x5f, 0x14, 0xe8, 0x8e, 0x7b, 0xc3, 0x60, 0x53, 0x9a, 0x51, 0xea,
- 0x7f, 0x2f, 0xb6, 0x62, 0x61, 0xf7, 0xc0, 0x18, 0x0f, 0x20, 0x79, 0x13,
- 0x5c, 0xe8, 0xca, 0x04, 0x29, 0x5f, 0x70, 0x4d, 0x88, 0xa2, 0x43, 0x20,
- 0x57, 0x33, 0x04, 0x74, 0x8e, 0x7c, 0x89, 0xd4, 0x56, 0x8f, 0x93, 0x86,
- 0x81, 0x6c, 0x11, 0xfc, 0x32, 0x0e, 0xb0, 0x3e, 0xe5, 0x13, 0xbf, 0x76,
- 0x62, 0xcc, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x0e, 0xf8, 0x8f, 0xde, 0xfd, 0xfd, 0xcf, 0xd1, 0x6f, 0x9f, 0xf2, 0xb6,
- 0xb6, 0x59, 0xb2, 0x73, 0x1c, 0x3c, 0x0d, 0xb0, 0x4d, 0xb8, 0x96, 0xc6,
- 0xeb, 0xe5, 0xf8, 0x0d, 0x3e, 0xd7, 0x0c, 0xbd, 0x9c, 0xaa, 0xd5, 0x1c,
- 0x19, 0x9a, 0x4c, 0x8e, 0xfa, 0xac, 0x68, 0x74, 0x16, 0x06, 0xb5, 0x49,
- 0xe7, 0xd5, 0x6f, 0x4f, 0xcc, 0xd9, 0x02, 0x74, 0xd6, 0x08, 0x73, 0x7c,
- 0xa9, 0xfa, 0x3e, 0x50, 0x87, 0xf7, 0xfb, 0xa6, 0x94, 0xdc, 0xb1, 0x40,
- 0xec, 0xa7, 0xa9, 0x39, 0xff, 0x40, 0x4a, 0x97, 0x9b, 0xcc, 0x57, 0x66,
- 0x68, 0xd6, 0xa8, 0x4d, 0x13, 0x06, 0x0e, 0x03, 0xc4, 0xdf, 0x7a, 0xe4,
- 0x2f, 0x0e, 0xd7, 0x54, 0xe0, 0xbd, 0x93, 0xeb, 0x82, 0xd8, 0x05, 0x2d,
- 0xa2, 0xf0, 0x4e, 0xd0, 0xf9, 0x3e, 0x3e, 0x6b, 0x3d, 0x08, 0x39, 0x4e,
- 0x35, 0x13, 0x7b, 0x3b, 0x39, 0x2c, 0x47, 0x2c, 0x61, 0x9f, 0xfd, 0x59,
- 0x88, 0x5f, 0x65, 0x08, 0xa9, 0x66, 0xec, 0xb5, 0x21, 0xf3, 0xe9, 0xba,
- 0x11, 0x63, 0x24, 0x6c, 0xf4, 0x50, 0x3a, 0xe5, 0x0c, 0x06, 0x39, 0x69,
- 0x2f, 0xca, 0x0f, 0x48, 0xbe, 0x95, 0x7d, 0x13, 0x3d, 0xa5, 0x75, 0x69,
- 0x85, 0xc8, 0xb3, 0x72, 0x72, 0x3c, 0x4f, 0x96, 0xe7, 0xb7, 0xbd, 0xe7,
- 0x76, 0xba, 0xac, 0xc0, 0x07, 0x4d, 0xc1, 0xed, 0xb9, 0xf0, 0x91, 0x2e,
- 0x36, 0xb7, 0x5b, 0x1c, 0xb7, 0xd6, 0xb3, 0x45, 0x7d, 0x0a, 0xf5, 0x43,
- 0xdd, 0x7a, 0x8b, 0x4e, 0x18, 0xf2, 0xf3, 0x19, 0xcd, 0x4a, 0xda, 0x3c,
- 0x1b, 0x05, 0x27, 0x67, 0x43, 0xa9, 0x8e, 0xe7, 0x4a, 0x95, 0xa9, 0xad,
- 0x6c, 0x8c, 0xb2, 0x2e, 0x12, 0xcb, 0xf3, 0xeb, 0x65, 0x26, 0xf4, 0x3e,
- 0x86, 0xee, 0x7e, 0xd9, 0xba, 0xce, 0x8d, 0x15, 0x3e, 0xa8, 0x40, 0x59,
- 0x1d, 0x27, 0x78, 0x75, 0xf0, 0xf9, 0x33, 0xb5, 0x32, 0xa9, 0x66, 0xe6,
- 0x2e, 0x2e, 0x3d, 0xf5, 0x4a, 0xf0, 0x97, 0x2d, 0xe7, 0x43, 0x85, 0x43,
- 0x61, 0x25, 0x15, 0x13, 0x9e, 0x8e, 0xf6, 0x78, 0xe8, 0x67, 0xba, 0xc2,
- 0x6d, 0xda, 0x46, 0x25, 0x76, 0xd9, 0x9b, 0x69, 0x95, 0x4b, 0x50, 0x8c,
- 0xb7, 0x36, 0x49, 0xbc, 0xd7, 0x39, 0x69, 0xb9, 0xc1, 0x5f, 0x5f, 0xcc,
- 0x83, 0x4c, 0x16, 0xb8, 0x0c, 0x85, 0xf1, 0xa4, 0x57, 0x6c, 0x22, 0x1f,
- 0x60, 0x0c, 0xff, 0xb6, 0xc9, 0xf7, 0x21, 0x2d, 0x35, 0x78, 0x31, 0x79,
- 0xd0, 0x6d, 0x61, 0xec, 0x61, 0x04, 0x75, 0x5c, 0x06, 0xc3, 0x53, 0x1b,
- 0xb5, 0xdc, 0x23, 0xb9, 0xd9, 0x07, 0xd1, 0xd0, 0xb3, 0xa5, 0xab, 0xd9,
- 0xbe, 0xb7, 0xdc, 0xae, 0x3f, 0x3e, 0xd7, 0x2a, 0x79, 0x3f, 0x9c, 0x27,
- 0x81, 0x8d, 0x61, 0xe8, 0x46, 0x8f, 0x05, 0xf4, 0x9c, 0x30, 0x35, 0x9a,
- 0x2f, 0x62, 0x84, 0x7c, 0xa5, 0x95, 0x68, 0x34, 0xe6, 0xf0, 0xb9, 0x42,
- 0xd4, 0x37, 0xc6, 0xd2, 0x35, 0x1f, 0x7b, 0xe0, 0xa6, 0x92, 0xcf, 0xf7,
- 0x0f, 0x08, 0x10, 0x79, 0xbd, 0xa8, 0x7c, 0x4e, 0xef, 0xf1, 0x01, 0x8d,
- 0x1b, 0x0c, 0x98, 0x46, 0x28, 0xdc, 0xd5, 0xa8, 0xcf, 0x67, 0x7d, 0x87,
- 0x2a, 0x8f, 0xdd, 0x52, 0x43, 0x5a, 0x55, 0x80, 0x88, 0xa6, 0xcd, 0x9c,
- 0x5d, 0x36, 0xae, 0xef, 0x61, 0x43, 0xec, 0xf0, 0x7f, 0x92, 0x21, 0x1f,
- 0xa2, 0xa3, 0x76, 0x0e, 0x5d, 0xf3, 0xa7, 0xe7, 0x7d, 0xb0, 0x2c, 0x94,
- 0x36, 0x95, 0x34, 0x4e, 0x04, 0xfb, 0x51, 0xf9, 0xe6, 0x7e, 0x56, 0x7a,
- 0x59, 0xce, 0x0a, 0x45, 0x7e, 0xeb, 0xc4, 0xbc, 0xfd, 0x20, 0xaa, 0x34,
- 0x6b, 0xee, 0x3b, 0x09, 0xe8, 0x00, 0x4b, 0xfc, 0x68, 0x24, 0x43, 0xdb,
- 0x09, 0x58, 0xd0, 0xb6, 0xbf, 0xaf, 0x1d, 0x7f, 0x8a, 0x4c, 0x9e, 0x51,
- 0x97, 0x97, 0xe1, 0x0c, 0x0d, 0xaf, 0xd1, 0x1e, 0x62, 0xad, 0x70, 0xa5,
- 0x8a, 0x24, 0x2f, 0x4a, 0xa6, 0x55, 0xb1, 0x44, 0x09, 0x88, 0xab, 0xa5,
- 0x45, 0x28, 0xa0, 0x34, 0x9e, 0x14, 0x2c, 0xf9, 0x0f, 0xb8, 0x33, 0x8f,
- 0xcc, 0xba, 0x50, 0x34, 0x4c, 0x96, 0x89, 0x09, 0xb9, 0xa8, 0xfb, 0xac,
- 0x59, 0x73, 0xea, 0x61, 0xbc, 0x0d, 0x24, 0x3a, 0x20, 0xc2, 0x76, 0xfc,
- 0x2e, 0xce, 0xfb, 0x75, 0x00, 0xca, 0x58, 0xbd, 0xab, 0x61, 0x9b, 0x13,
- 0x2b, 0xa3, 0xf6, 0x15, 0x55, 0x83, 0x23, 0xc4, 0xf3, 0x4c, 0x89, 0xc5,
- 0x4a, 0x18, 0x5c, 0x8d, 0x41, 0xcc, 0x06, 0x7b, 0xe3, 0x2a, 0x1f, 0x6a,
- 0x57, 0xbc, 0x54, 0x61, 0x0c, 0xf2, 0xec, 0xbf, 0xb0, 0xf0, 0x21, 0xde,
- 0xfc, 0xe4, 0xef, 0xce, 0x47, 0xc8, 0xdc, 0x11, 0xc7, 0x8a, 0x12, 0x97,
- 0x68, 0x1d, 0x9e, 0x9a, 0xbf, 0xad, 0x62, 0x7e, 0x4b, 0x88, 0xd7, 0x20,
- 0x22, 0xce, 0x5e, 0xe3, 0x87, 0x12, 0xa3, 0x05, 0xef, 0x1f, 0x05, 0xb1,
- 0xbd, 0x1b, 0x80, 0x43, 0x84, 0x33, 0x8b, 0x87, 0xa5, 0xc2, 0xe1, 0x49,
- 0xa8, 0x75, 0x49, 0x9b, 0x1b, 0x64, 0x8a, 0xd0, 0x86, 0x10, 0xa8, 0x72,
- 0xeb, 0x2e, 0xe7, 0x3f, 0xaa, 0x6b, 0x4a, 0x22, 0xae, 0x17, 0x8f, 0x10,
- 0x22, 0x03, 0x66, 0x67, 0x35, 0x40, 0x29, 0x1e, 0xf2, 0x05, 0x36, 0xd5,
- 0xed, 0xe2, 0x2a, 0xcc, 0x77, 0xe2, 0x16, 0xef, 0xa7, 0x9b, 0xe1, 0x1b,
- 0xba, 0xf3, 0xf5, 0x74, 0x6c, 0x2a, 0x98, 0x8a, 0x14, 0xaf, 0x2c, 0xab,
- 0xfb, 0x51, 0x53, 0x75, 0x17, 0xcb, 0x5c, 0x86, 0xb5, 0x60, 0x70, 0x29,
- 0x65, 0x69, 0x49, 0x42, 0x4f, 0x42, 0x6b, 0xc7, 0xdb, 0x98, 0x7d, 0x1e,
- 0xf8, 0x45, 0xb2, 0x33, 0xd6, 0x34, 0x26, 0xa6, 0x7f, 0x76, 0x31, 0x13,
- 0x13, 0x9d, 0xd2, 0xb0, 0x30, 0x0b, 0x0b, 0x3e, 0x1a, 0x84, 0xb0, 0xbd,
- 0x81, 0x34, 0x25, 0x73, 0x99, 0x87, 0x1a, 0xc8, 0x44, 0x34, 0x9d, 0x1a,
- 0x3d, 0x76, 0x44, 0x1d, 0xe2, 0x22, 0xad, 0x3d, 0xb2, 0xa3, 0x1c, 0xd5,
- 0x27, 0x8c, 0xc6, 0x84, 0xdf, 0x33, 0xbe, 0xb2, 0xa7, 0xb9, 0xc5, 0x6e,
- 0x48, 0xdc, 0xe9, 0xf8, 0xef, 0xfc, 0xaa, 0x1f, 0x5e, 0x41, 0x48, 0x1e,
- 0xe0, 0xb9, 0xd6, 0x6e, 0x7a, 0x9c, 0xa3, 0x98, 0x4b, 0xfa, 0x90, 0xa4,
- 0x58, 0x33, 0x85, 0x3b, 0x11, 0x44, 0x83, 0x4b, 0x1e, 0x0e, 0x5d, 0x11,
- 0x36, 0x15, 0xe1, 0xbf, 0x15, 0x04, 0x8e, 0x88, 0xc6, 0x18, 0x53, 0xc3,
- 0x8d, 0x28, 0x86, 0x25, 0xef, 0x55, 0x7b, 0xf6, 0x85, 0xf8, 0xed, 0x3b,
- 0xcf, 0x5d, 0xa6, 0xc7, 0x66, 0xb7, 0xbe, 0x14, 0xf0, 0x62, 0x89, 0x1f,
- 0x32, 0x1e, 0x86, 0x2a, 0x93, 0xd5, 0xca, 0x37, 0x03, 0x0b, 0xf8, 0x0f,
- 0xca, 0x50, 0x6c, 0x16, 0x2b, 0xf0, 0x77, 0xca, 0xbb, 0x8e, 0x95, 0x11,
- 0xef, 0x5b, 0xbe, 0x2f, 0x62, 0x50, 0xb8, 0x3d, 0xff, 0xfa, 0x30, 0x21,
- 0xb2, 0x86, 0x3f, 0x50, 0x57, 0x98, 0x79, 0x15, 0xce, 0x3e, 0xbf, 0x49,
- 0x58, 0xb0, 0xb5, 0xd7, 0xbe, 0x01, 0x55, 0xee, 0x60, 0x14, 0x9d, 0x5b,
- 0x57, 0x48, 0x05, 0x72, 0x6a, 0x23, 0x29, 0xeb, 0xf3, 0x36, 0x2a, 0xc1,
- 0xda, 0x5e, 0x4a, 0x63, 0xc4, 0x6b, 0x04, 0xe8, 0xe8, 0xc1, 0xb5, 0xc4,
- 0x2d, 0x60, 0x1f, 0xa0, 0x2b, 0x33, 0xa5, 0xb7, 0x82, 0x59, 0x21, 0xba,
- 0x13, 0xda, 0x79, 0xda, 0x5a, 0xb1, 0x82, 0x5b, 0x52, 0x7f, 0x0c, 0x70,
- 0x75, 0x65, 0xe0, 0x44, 0xb3, 0xca, 0xd0, 0x09, 0x38, 0x24, 0x83, 0x8e,
- 0x0c, 0x4c, 0xef, 0x96, 0xe4, 0x04, 0x30, 0x46, 0x23, 0x6a, 0x28, 0x13,
- 0x1d, 0x37, 0x14, 0x75, 0x6e, 0xd0, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x21, 0xa2, 0xf0, 0x7d, 0x29, 0x8f, 0x62, 0x2e,
- 0xf4, 0x0e, 0x14, 0x9b, 0x60, 0x38, 0xc0, 0x95, 0xfb, 0x3c, 0x90, 0x5a,
- 0xa0, 0x1f, 0x30, 0x09, 0xfc, 0x6d, 0xa9, 0xd1, 0x7b, 0x0b, 0x7c, 0x78,
- 0xf9, 0xf6, 0xa8, 0x5e, 0xa6, 0x7a, 0xf6, 0x1c, 0xab, 0x1b, 0x0e, 0xa9,
- 0x08, 0xfd, 0xd9, 0x97, 0x08, 0x24, 0x2b, 0xda, 0x08, 0x8b, 0x0c, 0x07,
- 0x70, 0x15, 0xa8, 0x0c, 0x86, 0xfc, 0xd1, 0x84, 0xba, 0xd0, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x35, 0x7a, 0xab, 0xaa,
- 0xbe, 0xd7, 0xad, 0x22, 0x99, 0x46, 0xbb, 0x78, 0xfd, 0x47, 0x8f, 0x2a,
- 0x4a, 0xa6, 0x2f, 0x8d, 0x15, 0x07, 0xed, 0x26, 0x1d, 0xb3, 0x12, 0xd3,
- 0x88, 0x0f, 0xf1, 0x75, 0x2a, 0x07, 0x62, 0xac, 0xbf, 0x52, 0x4a, 0xc3,
- 0x12, 0xe5, 0x3c, 0xea, 0xa6, 0x1e, 0x57, 0x90, 0x56, 0x60, 0x7d, 0xcf,
- 0x4b, 0x65, 0xaf, 0xee, 0x17, 0x56, 0xbe, 0xd2, 0x38, 0x3f, 0xd6, 0xbc,
- 0xef, 0xa7, 0x32, 0xb7, 0x10, 0xe9, 0xbd, 0x97, 0x45, 0x92, 0x3c, 0xd3,
- 0x35, 0x2e, 0x59, 0x37, 0x65, 0x5c, 0x7f, 0xd0, 0x99, 0x9c, 0x01, 0xe9,
- 0x1f, 0x65, 0xe9, 0xec, 0x0f, 0x2d, 0x46, 0xbc, 0xd4, 0x8f, 0x51, 0x1c,
- 0xa0, 0xa4, 0x9b, 0x4f, 0x95, 0x54, 0xb0, 0x50, 0x74, 0xfa, 0x0f, 0xe6,
- 0x55, 0x81, 0xce, 0x0f, 0xd1, 0x25, 0x56, 0xc8, 0x2f, 0x3a, 0x65, 0xd4,
- 0x86, 0x4a, 0x8e, 0xff, 0x5a, 0xcc, 0x67, 0x96, 0xcc, 0x65, 0x0d, 0x20,
- 0xee, 0xba, 0x6b, 0xcb, 0xde, 0x10, 0x2f, 0xbf, 0x67, 0x6d, 0xbe, 0xef,
- 0x72, 0xfc, 0x25, 0x62, 0xbf, 0xbb, 0xc5, 0xe0, 0x7b, 0x4c, 0x32, 0xc5,
- 0xdb, 0x9f, 0xb5, 0xe2, 0x75, 0x8a, 0xba, 0xbb, 0x69, 0x28, 0xb6, 0x41,
- 0x25, 0x83, 0x67, 0x35, 0x1b, 0xd7, 0xb3, 0xd7, 0x58, 0x54, 0x8a, 0x0b,
- 0x7c, 0xf3, 0x05, 0xcf, 0x2c, 0x78, 0x70, 0xc6, 0xed, 0x7e, 0x56, 0xb6,
- 0x4e, 0x48, 0xaa, 0x57, 0xc4, 0xb0, 0xb2, 0xa0, 0xca, 0x50, 0xe1, 0xc7,
- 0x41, 0xea, 0xac, 0x5f, 0x18, 0x13, 0xe5, 0x85, 0x78, 0x3f, 0x05, 0xf3,
- 0xfd, 0x74, 0x7a, 0x42, 0x61, 0x91, 0x19, 0xc6, 0x19, 0xe9, 0xd2, 0x78,
- 0x2c, 0xb1, 0xa3, 0x7f, 0x62, 0xea, 0x2a, 0x35, 0x1c, 0x55, 0xa3, 0xf7,
- 0xdc, 0xec, 0x48, 0x23, 0x99, 0x8d, 0xe1, 0x4d, 0x45, 0xad, 0x92, 0xc6,
- 0xf4, 0xa2, 0xe5, 0xe6, 0x58, 0xe4, 0xd5, 0x37, 0xd0, 0x47, 0x0b, 0x64,
- 0x68, 0x48, 0x7e, 0xeb, 0xbe, 0x5e, 0x74, 0xd1, 0xc4, 0xa5, 0x60, 0xd0,
- 0x30, 0x62, 0xbc, 0x81, 0xc4, 0x01, 0x68, 0x18, 0xf3, 0xac, 0x9d, 0xb1,
- 0x4d, 0xdd, 0x8b, 0xd2, 0x54, 0x5d, 0xd1, 0x1c, 0xee, 0x75, 0x9e, 0x99,
- 0x42, 0x69, 0x38, 0xcc, 0x66, 0x24, 0xd9, 0x8f, 0x70, 0x98, 0xc3, 0x5e,
- 0x08, 0xf0, 0xd8, 0x2d, 0xe6, 0x52, 0x48, 0xdf, 0xd0, 0x03, 0x04, 0x92,
- 0xab, 0xa1, 0xa1, 0x2f, 0x7d, 0x84, 0xb2, 0x82, 0x51, 0x56, 0x74, 0x4a,
- 0x94, 0xff, 0xd2, 0xe4, 0x4e, 0x1a, 0xbd, 0x18, 0xab, 0x33, 0x68, 0x0e,
- 0x4f, 0x99, 0x1d, 0x7e, 0x02, 0x3f, 0x1f, 0x50, 0x05, 0xf8, 0x59, 0x47,
- 0x97, 0x98, 0x60, 0xb1, 0x30, 0xb1, 0x14, 0xac, 0x2c, 0x0a, 0xa8, 0x97,
- 0x83, 0xf5, 0x5a, 0x5c, 0x87, 0xe5, 0x36, 0x26, 0xec, 0xb4, 0x94, 0x46,
- 0x9a, 0xad, 0x2b, 0x9a, 0xb7, 0xac, 0xc4, 0x1a, 0x55, 0x53, 0xc0, 0x16,
- 0x91, 0x1c, 0xd6, 0xaa, 0x6b, 0xdd, 0x85, 0x6a, 0x54, 0xec, 0x7c, 0xa1,
- 0xd5, 0x18, 0x00, 0x74, 0xd2, 0xf1, 0x7e, 0xad, 0x7c, 0xa8, 0x85, 0x9b,
- 0xc0, 0x9f, 0x4f, 0x3b, 0xd9, 0x08, 0xc8, 0x9d, 0x31, 0x22, 0x7a, 0x53,
- 0xa8, 0xbd, 0x00, 0xdf, 0xe8, 0x39, 0x52, 0xe9, 0x14, 0x74, 0x7b, 0x53,
- 0xf9, 0xbd, 0x29, 0x8e, 0x5d, 0xf2, 0x35, 0x3b, 0xe3, 0x48, 0xbf, 0xa0,
- 0xc4, 0x3d, 0x40, 0xb4, 0xf2, 0x7c, 0xd0, 0xe3, 0x17, 0x11, 0x5b, 0xd6,
- 0x55, 0xd2, 0x54, 0xcf, 0x20, 0x8d, 0x74, 0x4a, 0x6b, 0xe9, 0x5d, 0xfe,
- 0x72, 0x14, 0x6a, 0x11, 0x8b, 0x14, 0x19, 0xba, 0x63, 0xe4, 0x6b, 0x39,
- 0xb4, 0x90, 0x67, 0x79, 0x56, 0x31, 0xd3, 0xb5, 0xeb, 0x9e, 0x95, 0x4b,
- 0x1e, 0x04, 0x20, 0xd8, 0xbe, 0xe8, 0x1c, 0xd7, 0x95, 0xcb, 0x57, 0x60,
- 0xe6, 0x11, 0x35, 0x42, 0x90, 0xfd, 0xb2, 0xe4, 0x9b, 0x24, 0x70, 0xc0,
- 0xc3, 0xa9, 0x8a, 0xc9, 0x46, 0xd0, 0xea, 0xc9, 0x93, 0x7d, 0x9f, 0x64,
- 0x12, 0x54, 0x09, 0xb7, 0xc2, 0x4d, 0x6e, 0xcc, 0x60, 0x07, 0x36, 0x31,
- 0x64, 0x3d, 0x1e, 0xd3, 0x86, 0x47, 0x47, 0x42, 0x76, 0xb6, 0xf0, 0xe5,
- 0xb4, 0xe7, 0xbe, 0x47, 0x91, 0x78, 0xbe, 0x06, 0xf1, 0x6e, 0x58, 0xce,
- 0x32, 0x13, 0x26, 0x34, 0x92, 0xae, 0xb2, 0x29, 0xd0, 0x30, 0x55, 0xfd,
- 0x89, 0x6a, 0xbf, 0x3e, 0xdf, 0x11, 0x39, 0xe4, 0xfd, 0x56, 0xd7, 0x2f,
- 0x89, 0x96, 0x08, 0x54, 0xaa, 0xab, 0x8b, 0xfa, 0x65, 0xe5, 0x64, 0xff,
- 0x24, 0x25, 0x8f, 0x7d, 0xf6, 0xb1, 0x7f, 0x2f, 0xa6, 0xf6, 0x46, 0xab,
- 0x61, 0xfd, 0x47, 0xad, 0x6d, 0x38, 0x6d, 0xc1, 0xe9, 0x4a, 0xf1, 0x85,
- 0x05, 0x0e, 0x69, 0x48, 0x7c, 0xa6, 0x76, 0x61, 0xe3, 0x94, 0xf2, 0xd6,
- 0x7a, 0x9c, 0x79, 0xc0, 0x2a, 0x51, 0x23, 0xc6, 0xaf, 0x29, 0x04, 0x0f,
- 0x47, 0xc2, 0x93, 0xd7, 0x64, 0xe5, 0x37, 0x2e, 0x53, 0x3b, 0xb7, 0x7c,
- 0x9c, 0xb4, 0x63, 0x13, 0xc7, 0x56, 0x90, 0xe9, 0x53, 0xd5, 0x86, 0x2b,
- 0x96, 0x41, 0x42, 0x56, 0xc5, 0x16, 0xd7, 0x9e, 0x30, 0xce, 0xa1, 0x0d,
- 0x93, 0x5d, 0x11, 0x07, 0xb2, 0x95, 0xfd, 0xf6, 0x0b, 0x28, 0x95, 0x1a,
- 0x8f, 0xfa, 0xe1, 0x57, 0x7e, 0x06, 0xff, 0x18, 0xaf, 0xe3, 0x4f, 0x3c,
- 0x34, 0x5b, 0xd4, 0x46, 0x1a, 0xd1, 0xd1, 0x7e, 0x55, 0xba, 0x5d, 0x2a,
- 0x1f, 0x42, 0x49, 0x95, 0x75, 0x5f, 0x80, 0x60, 0x02, 0x01, 0xdb, 0x36,
- 0xad, 0x68, 0x69, 0x1e, 0x0b, 0x90, 0x3f, 0xa6, 0xb6, 0x2f, 0x66, 0xa6,
- 0x7d, 0x81, 0x8c, 0xa0, 0xee, 0x05, 0x95, 0xbc, 0xb3, 0x7c, 0x18, 0xd4,
- 0x1b, 0x40, 0x96, 0xf5, 0x05, 0x9d, 0x27, 0x3b, 0x78, 0xfc, 0x19, 0x18,
- 0xc0, 0x61, 0xa0, 0xd6, 0xf9, 0xc0, 0x3f, 0xe5, 0x48, 0x35, 0x0f, 0x8b,
- 0x0d, 0xfb, 0x31, 0xb7, 0x32, 0x40, 0x1d, 0x69, 0x12, 0x5a, 0x23, 0xf0,
- 0xce, 0xe9, 0x5e, 0xa6, 0x68, 0x6b, 0xe1, 0xe2, 0x68, 0x07, 0x02, 0x0d,
- 0x7a, 0xc2, 0x0a, 0x40, 0x10, 0x5e, 0x94, 0xba, 0x77, 0x1d, 0xf7, 0xac,
- 0xec, 0x79, 0xa9, 0xa1, 0x8a, 0xb8, 0x49, 0x32, 0x08, 0xe0, 0x18, 0xa8,
- 0x3d, 0x69, 0x41, 0x5d, 0x30, 0x3b, 0xb6, 0x91, 0x46, 0x8d, 0x81, 0x10,
- 0xb0, 0xc2, 0xed, 0xa0, 0x4e, 0x59, 0x48, 0xd8, 0x64, 0x7d, 0x2d, 0x46,
- 0xf2, 0x8a, 0x2e, 0x5d, 0x0c, 0x4d, 0x9f, 0xfe, 0x7b, 0x5e, 0xbf, 0x1a,
- 0x78, 0xdf, 0xfc, 0x0f, 0x04, 0x37, 0x72, 0x1a, 0x09, 0xb8, 0x6e, 0x1b,
- 0xf1, 0x18, 0x7d, 0x83, 0x44, 0xaa, 0x9b, 0x71, 0xe1, 0x03, 0x04, 0x83,
- 0xe5, 0xaa, 0xc0, 0xd4, 0xa7, 0x80, 0x10, 0x35, 0x09, 0xae, 0xf7, 0xe1,
- 0x5e, 0x7c, 0x31, 0x20, 0x43, 0x82, 0xda, 0x07, 0x39, 0xfe, 0x8f, 0x9d,
- 0x70, 0x3c, 0x57, 0x43, 0x01, 0x51, 0x37, 0x2e, 0x97, 0xef, 0xcf, 0x05,
- 0x44, 0x75, 0x69, 0xf7, 0xdb, 0xda, 0x80, 0x78, 0x0c, 0xcc, 0xc1, 0x49,
- 0xac, 0x3b, 0x7e, 0x27, 0x6a, 0xbb, 0xdf, 0x45, 0x5b, 0x3b, 0x29, 0xf6,
- 0x1b, 0xa9, 0x25, 0xf9, 0x2f, 0xcf, 0x37, 0x71, 0x33, 0xb4, 0x90, 0xd7,
- 0x9b, 0x87, 0x41, 0x15, 0xd1, 0xa6, 0x39, 0xa7, 0xa9, 0xcd, 0x66, 0x29,
- 0x59, 0xb4, 0x53, 0x12, 0xa1, 0x20, 0xd5, 0x04, 0xca, 0x40, 0x31, 0xfa,
- 0x6f, 0xbb, 0x92, 0x04, 0xf3, 0xc2, 0x10, 0x0d, 0xc1, 0x19, 0x78, 0x8c,
- 0x82, 0xed, 0x92, 0x3a, 0x6b, 0xd1, 0x3d, 0xe8, 0xac, 0x55, 0xe4, 0x8c,
- 0xc6, 0xd4, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
- 0xc2, 0x1d, 0x86, 0xe4, 0xf6, 0xa1, 0xbe, 0xf5, 0xf3, 0x36, 0x9d, 0x32,
- 0x80, 0x17, 0x3b, 0x1f, 0x18, 0x21, 0xed, 0xa7, 0xf5, 0xaf, 0xf1, 0x94,
- 0xe2, 0xa7, 0x08, 0xd5, 0xca, 0x18, 0x45, 0xf5, 0x68, 0x94, 0x82, 0x61,
- 0xf7, 0xb7, 0xb2, 0xfa, 0xd4, 0x5e, 0x32, 0xd0, 0xf0, 0x20, 0x66, 0x83,
- 0xd1, 0x6b, 0x3c, 0xdf, 0x73, 0xeb, 0x73, 0x82, 0x09, 0x9b, 0xd0, 0xc5,
- 0xb0, 0x9f, 0x01, 0x77, 0x85, 0xcc, 0x6e, 0x23, 0xb7, 0x00, 0x45, 0xe0,
- 0xa6, 0x01, 0x29, 0x1d, 0x8b, 0xc4, 0xe0, 0xc2, 0xe0, 0x4f, 0x3b, 0x07,
- 0xd5, 0xac, 0x6b, 0x88, 0xb8, 0xa4, 0xe2, 0x5c, 0x19, 0xe9, 0x98, 0x72,
- 0xa5, 0x6b, 0xf5, 0xa4, 0xf7, 0x15, 0xaf, 0xfb, 0xb4, 0x80, 0x9a, 0xe3,
- 0xa5, 0x35, 0x2f, 0x45, 0x81, 0xf1, 0x8b, 0x2d, 0x26, 0x5c, 0x65, 0xa9,
- 0x5b, 0x6e, 0x83, 0xc3, 0x62, 0x2f, 0x84, 0xef, 0x11, 0xa5, 0x58, 0x48,
- 0xe9, 0x67, 0x7e, 0xd3, 0x0b, 0x5d, 0x51, 0x80, 0x39, 0x08, 0x8e, 0xc1,
- 0x0d, 0x04, 0x11, 0x5f, 0x72, 0x64, 0x1f, 0x83, 0xf8, 0xd3, 0x09, 0x38,
- 0xb6, 0x7f, 0x50, 0x78, 0x27, 0x20, 0xe5, 0xbd, 0x16, 0xbf, 0x51, 0xd8,
- 0x4f, 0x67, 0x60, 0xf6, 0x9e, 0xff, 0x08, 0xfe, 0xc6, 0x96, 0xd6, 0x64,
- 0x94, 0x28, 0xc6, 0x9a, 0x09, 0x1a, 0x34, 0x08, 0x31, 0x4b, 0x0b, 0x97,
- 0x5a, 0x18, 0x72, 0x49, 0xe9, 0x1d, 0xbb, 0x9c, 0xed, 0x7e, 0xb5, 0xc5,
- 0xa7, 0xf4, 0x25, 0x7a, 0x26, 0xe9, 0x15, 0x61, 0x85, 0x32, 0xc9, 0xb3,
- 0xcf, 0x95, 0xbf, 0x35, 0x10, 0x2d, 0x71, 0xfe, 0x03, 0xd6, 0x69, 0x75,
- 0x8d, 0xb7, 0x16, 0xa7, 0x3d, 0x0e, 0xb7, 0x55, 0x6d, 0xa7, 0x9f, 0x10,
- 0x7e, 0x7e, 0xff, 0x39, 0xee, 0x8e, 0xa7, 0x81, 0x7d, 0x11, 0xea, 0xa9,
- 0xd6, 0xed, 0x54, 0xf8, 0xd2, 0xd5, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0xf9, 0xde, 0x41, 0xe7, 0xa6, 0x88, 0x53, 0x76,
- 0x5a, 0x26, 0xc3, 0x5c, 0xf2, 0x58, 0x68, 0x9c, 0xc7, 0x4e, 0x53, 0x18,
- 0x53, 0x67, 0x39, 0x23, 0x96, 0xb0, 0xef, 0x58, 0x29, 0xe1, 0x68, 0xd8,
- 0xce, 0xc0, 0x41, 0xc2, 0x35, 0x5f, 0x74, 0xfa, 0xdf, 0xc7, 0x0f, 0x80,
- 0x50, 0xd1, 0xf6, 0x5a, 0x3a, 0x81, 0xe0, 0xd9, 0x9b, 0x47, 0x96, 0xcd,
- 0xc5, 0x0f, 0x91, 0x12, 0x81, 0x77, 0x1e, 0xef, 0x2e, 0xba, 0x16, 0x51,
- 0x70, 0x78, 0xdc, 0xa3, 0x84, 0x12, 0x7c, 0x9e, 0x21, 0x7d, 0xa3, 0x5f,
- 0xce, 0xa1, 0x25, 0x84, 0x99, 0xa4, 0x2d, 0xa6, 0x0f, 0x95, 0xef, 0xef,
- 0x31, 0xe6, 0xf2, 0x18, 0x08, 0x47, 0xd2, 0x5a, 0x39, 0x01, 0x7a, 0xca,
- 0xd3, 0x03, 0xb1, 0xc2, 0x48, 0xf4, 0x1f, 0x6d, 0xc2, 0x8c, 0x5c, 0xda,
- 0xf5, 0x10, 0xed, 0xfc, 0x2e, 0x0c, 0xb3, 0x52, 0xaa, 0xa9, 0xed, 0xbc,
- 0x41, 0xcc, 0xd4, 0x4b, 0x1c, 0xd0, 0xa3, 0x1d, 0xf4, 0xe7, 0x48, 0x34,
- 0x4e, 0xcf, 0x3b, 0xb3, 0x71, 0x06, 0xbe, 0x0c, 0x35, 0xbb, 0xb4, 0x17,
- 0xd8, 0x8b, 0xba, 0xdd, 0x32, 0x30, 0x51, 0xb1, 0xb1, 0xd6, 0x3a, 0xdc,
- 0x3b, 0x25, 0x9a, 0x57, 0xc7, 0x4d, 0xd3, 0x75, 0x93, 0x59, 0x3e, 0x9b,
- 0x10, 0xcf, 0xdb, 0x38, 0x75, 0x51, 0xb2, 0x2a, 0x48, 0x78, 0xfc, 0xaa,
- 0xe3, 0x91, 0xe7, 0x93, 0xe7, 0x0a, 0x07, 0x2c, 0xf8, 0x88, 0x93, 0xde,
- 0x2f, 0xba, 0x7b, 0x72, 0xcd, 0x92, 0xdd, 0xb1, 0xac, 0x1e, 0xe4, 0xe3,
- 0x5d, 0xa4, 0x7f, 0x86, 0xa7, 0xcb, 0xb5, 0x81, 0x86, 0xf1, 0xf5, 0xad,
- 0xd6, 0x36, 0x08, 0x09, 0x9f, 0x75, 0x6f, 0x4a, 0x5b, 0x30, 0xf8, 0xaf,
- 0xd2, 0xbc, 0xb5, 0xbe, 0xf2, 0xeb, 0x9b, 0xbc, 0x11, 0xd4, 0x0c, 0x14,
- 0xa6, 0x6f, 0x43, 0xd3, 0xc9, 0x4e, 0xca, 0x9b, 0x4e, 0x46, 0x60, 0x4c,
- 0x63, 0xcc, 0x07, 0x36, 0x8c, 0xf2, 0xd1, 0x93, 0x7a, 0x51, 0x49, 0x15,
- 0xbf, 0xbf, 0x9e, 0x82, 0x21, 0x06, 0xa0, 0x39, 0x11, 0x1d, 0x6c, 0x41,
- 0x72, 0xcd, 0x2a, 0x8a, 0x4a, 0xd0, 0x13, 0x6c, 0x56, 0xf4, 0x00, 0x48,
- 0xaf, 0xab, 0xdf, 0xa9, 0xe9, 0xa6, 0xaa, 0x06, 0x61, 0x79, 0xc4, 0x57,
- 0x42, 0xca, 0x12, 0x18, 0xcf, 0x81, 0xec, 0x79, 0x19, 0xd2, 0xd2, 0xe3,
- 0x1d, 0xc6, 0x6c, 0xd0, 0xd6, 0x0a, 0xfb, 0x70, 0x42, 0x28, 0x25, 0x23,
- 0xb6, 0x23, 0x15, 0x28, 0x5e, 0x9f, 0x49, 0xf2, 0x7b, 0x69, 0x74, 0xa5,
- 0xb9, 0x26, 0x81, 0xfe, 0x39, 0x3e, 0x3f, 0xc8, 0x7e, 0x9e, 0x5e, 0x8e,
- 0xf2, 0xdb, 0x6b, 0xfd, 0xe1, 0xc3, 0x01, 0x4a, 0xba, 0x8f, 0x33, 0x71,
- 0x09, 0x80, 0x5d, 0x9c, 0x58, 0x64, 0xb7, 0x90, 0x13, 0x2a, 0xe9, 0x1d,
- 0x07, 0x2c, 0x06, 0x70, 0x43, 0x0d, 0xb6, 0x57, 0x02, 0x3c, 0xbe, 0x3c,
- 0x42, 0xab, 0x77, 0x15, 0x0e, 0x98, 0xfb, 0xf2, 0x1d, 0x14, 0xd9, 0xb8,
- 0xd1, 0x59, 0x2a, 0x67, 0x6f, 0xfc, 0x59, 0x39, 0x33, 0xe0, 0x49, 0x0b,
- 0x4e, 0x65, 0x81, 0x9f, 0x71, 0xf2, 0xa5, 0x90, 0x4f, 0x24, 0xc7, 0x05,
- 0xfb, 0x77, 0x1e, 0x14, 0xca, 0x2f, 0xfc, 0xac, 0xec, 0xbf, 0xa2, 0x69,
- 0x15, 0x0a, 0x6b, 0xa9, 0xa0, 0x74, 0xee, 0xad, 0xa9, 0x50, 0x4d, 0x4d,
- 0xab, 0x6e, 0xc1, 0xb3, 0xda, 0xbb, 0xbd, 0xab, 0x00, 0x05, 0x14, 0xc1,
- 0xc4, 0x53, 0x7b, 0x78, 0x97, 0x68, 0x3c, 0x05, 0xf2, 0xed, 0x87, 0xca,
- 0x86, 0xd1, 0xdf, 0xda, 0xb3, 0x2f, 0x17, 0x87, 0x87, 0x2f, 0xd8, 0xe9,
- 0xb2, 0x96, 0xdc, 0x7f, 0x22, 0xf1, 0x2a, 0x9f, 0xfe, 0x54, 0x55, 0xa1,
- 0x96, 0xab, 0x9f, 0x61, 0x74, 0xcd, 0x4d, 0x77, 0x38, 0x02, 0x23, 0x29,
- 0x28, 0x5b, 0xfc, 0x86, 0x17, 0x40, 0xd4, 0x42, 0x2a, 0x9b, 0x84, 0xf7,
- 0x67, 0x2b, 0x3a, 0xc1, 0x31, 0x89, 0x4b, 0x67, 0xd1, 0x7d, 0x6b, 0x36,
- 0xec, 0x69, 0x6b, 0x24, 0xca, 0xd6, 0x2d, 0xbb, 0x21, 0xc8, 0x0c, 0x53,
- 0x41, 0x29, 0x0b, 0xc1, 0xfe, 0xd5, 0xa3, 0x4c, 0x66, 0x2f, 0xc7, 0xf1,
- 0xa8, 0xc0, 0x3d, 0x9a, 0xb9, 0x09, 0x50, 0x3f, 0x09, 0x87, 0xa4, 0x3f,
- 0x7a, 0x33, 0xef, 0xf0, 0xfb, 0x77, 0x02, 0x7d, 0x92, 0xaf, 0x73, 0xaa,
- 0xcc, 0x3f, 0x66, 0x56, 0xd0, 0x21, 0xd1, 0xe8, 0x0e, 0x47, 0x03, 0x5e,
- 0x3b, 0xe9, 0xa2, 0xe3, 0x83, 0x0b, 0x73, 0xd3, 0xaa, 0x94, 0x80, 0xef,
- 0x7c, 0xdf, 0xde, 0x86, 0xc3, 0xa9, 0x62, 0x34, 0x76, 0xee, 0x4d, 0x15,
- 0x73, 0x7b, 0xd7, 0x6d, 0xd4, 0x21, 0x05, 0xd4, 0xcf, 0xf3, 0x54, 0xdc,
- 0x49, 0x5f, 0x5a, 0x2a, 0x37, 0x19, 0x89, 0x61, 0x1d, 0x95, 0x17, 0x8b,
- 0x09, 0x95, 0x5d, 0x9f, 0xde, 0x86, 0x03, 0x93, 0x76, 0xec, 0x54, 0xec,
- 0x13, 0xc3, 0xf9, 0x38, 0x8f, 0xa9, 0x11, 0xf0, 0x9a, 0x0e, 0x5e, 0x38,
- 0x69, 0xeb, 0x62, 0x41, 0x9e, 0xd0, 0x1b, 0x59, 0x8c, 0xfd, 0x16, 0xfa,
- 0xd8, 0x99, 0x0d, 0x83, 0x7e, 0xba, 0x5b, 0xc6, 0x59, 0xe1, 0xae, 0xba,
- 0xb9, 0xb8, 0xba, 0xa5, 0x4d, 0x20, 0x00, 0xc9, 0x0c, 0xe1, 0x77, 0xdf,
- 0xc4, 0x95, 0xca, 0x7c, 0xa5, 0xef, 0x0a, 0xed, 0x9b, 0x31, 0x06, 0xe1,
- 0xc9, 0xa3, 0x88, 0x0a, 0xcc, 0x3d, 0xc8, 0xb6, 0x01, 0xe2, 0xa9, 0x29,
- 0x03, 0x8a, 0x28, 0xf8, 0x0d, 0x70, 0x77, 0xb9, 0xe1, 0x1b, 0x06, 0x19,
- 0x86, 0xc1, 0xd3, 0xcf, 0x6b, 0x9c, 0x09, 0x70, 0x50, 0xed, 0xb5, 0xf6,
- 0x69, 0xcc, 0xac, 0x30, 0x6a, 0x1f, 0x1d, 0xe6, 0x75, 0x33, 0xab, 0x55,
- 0x48, 0xfa, 0x81, 0xb8, 0x06, 0x3a, 0x78, 0xee, 0xde, 0xef, 0xe2, 0x17,
- 0xc4, 0x3e, 0xe5, 0x22, 0xa7, 0xd1, 0x45, 0x5b, 0x57, 0xb0, 0xde, 0x69,
- 0x30, 0xd1, 0x9a, 0xd7, 0x6b, 0x0e, 0x7a, 0x30, 0x0d, 0xb5, 0xec, 0x60,
- 0xa7, 0x05, 0x87, 0x42, 0x4b, 0x92, 0x1f, 0x68, 0x8e, 0x1a, 0x90, 0x84,
- 0x27, 0x2a, 0xc0, 0xd2, 0xff, 0xbc, 0x8e, 0x34, 0x53, 0x9d, 0x04, 0x50,
- 0xcb, 0x79, 0xd9, 0x55, 0xd5, 0x4d, 0x3c, 0xe2, 0xb4, 0x9b, 0x57, 0x07,
- 0x1f, 0xce, 0xd0, 0xa7, 0x84, 0xe1, 0xb7, 0x3a, 0xaf, 0xc5, 0x67, 0x64,
- 0xbc, 0x02, 0xbe, 0xb0, 0x65, 0x7e, 0xb0, 0x4c, 0xc2, 0x2d, 0xcd, 0xf8,
- 0x60, 0xcb, 0xfe, 0xd1, 0x8d, 0x14, 0x5a, 0xd3, 0x38, 0xd4, 0x71, 0x5a,
- 0xca, 0xbb, 0xfe, 0x0e, 0x54, 0xf9, 0xb4, 0x25, 0xa5, 0x71, 0x13, 0x95,
- 0x14, 0xdc, 0x86, 0xb8, 0x21, 0xa7, 0x2e, 0x13, 0xc6, 0x2f, 0xce, 0xe7,
- 0x6c, 0xb8, 0x0d, 0xc9, 0xe4, 0xc4, 0x64, 0x12, 0x78, 0x1c, 0x95, 0x92,
- 0xc2, 0xec, 0xaa, 0xd3, 0xc3, 0x3a, 0xd2, 0xe8, 0x95, 0xf0, 0x6b, 0x03,
- 0x8c, 0xcf, 0x6b, 0xdb, 0x21, 0xa0, 0xcf, 0xf4, 0x05, 0xc8, 0xe7, 0x77,
- 0x05, 0x55, 0x7b, 0x6b, 0xfa, 0x96, 0xf1, 0x7c, 0x30, 0x62, 0x75, 0xbe,
- 0x6e, 0xea, 0xba, 0x9f, 0x40, 0x2e, 0x9a, 0x86, 0x93, 0xcc, 0x38, 0xf7,
- 0xee, 0xd8, 0xbb, 0x24, 0xcd, 0x85, 0x3e, 0x85, 0x16, 0x8c, 0x33, 0x23,
- 0x73, 0xe6, 0x43, 0xc4, 0x67, 0xbf, 0xef, 0x85, 0xb1, 0x44, 0xf9, 0x55,
- 0x93, 0x4d, 0x0b, 0x8e, 0xc1, 0x42, 0x13, 0xc6, 0xc8, 0x09, 0x63, 0xab,
- 0xb3, 0xc7, 0xc4, 0xa4, 0x8b, 0x72, 0xfb, 0xa5, 0x99, 0xa1, 0x5d, 0x07,
- 0x02, 0x82, 0x56, 0x11, 0x3c, 0xc2, 0x5a, 0x55, 0xf9, 0x3a, 0x93, 0x61,
- 0x89, 0x46, 0xb7, 0x6a, 0x42, 0x76, 0x1e, 0x70, 0xde, 0xd9, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x32, 0xc1, 0x61, 0xaa,
- 0xdb, 0xe9, 0xae, 0x88, 0xcb, 0xf7, 0x28, 0xdd, 0x82, 0x62, 0x61, 0x41,
- 0x4e, 0xbb, 0xf9, 0xb7, 0xe8, 0x81, 0x99, 0x18, 0xe2, 0xa7, 0xb4, 0x7c,
- 0xb7, 0x08, 0x44, 0x6f, 0x24, 0xb3, 0xda, 0x57, 0x62, 0x29, 0xc7, 0xa6,
- 0x84, 0xb1, 0x5d, 0xc5, 0x00, 0x4c, 0x30, 0x16, 0xf0, 0x0a, 0x74, 0x73,
- 0xec, 0xaf, 0xb5, 0xde, 0xb0, 0xa7, 0x75, 0x22, 0x8f, 0x9e, 0x43, 0x01,
- 0x68, 0xae, 0x91, 0xeb, 0x46, 0x52, 0x3f, 0x2c, 0x4e, 0xc5, 0xd0, 0xc8,
- 0x15, 0xea, 0x99, 0xc2, 0x37, 0x5b, 0x68, 0xb5, 0xce, 0x41, 0x92, 0xbf,
- 0xd6, 0xdb, 0x85, 0xad, 0x08, 0xd1, 0x11, 0x93, 0xe8, 0xd4, 0x78, 0x43,
- 0x3b, 0x7d, 0xcb, 0x42, 0x84, 0xf3, 0x61, 0x88, 0x9e, 0x6a, 0x73, 0xb9,
- 0x78, 0x17, 0x9a, 0x9f, 0xfb, 0x97, 0xcb, 0xd6, 0xb5, 0x3f, 0x00, 0x41,
- 0xb0, 0x30, 0x2f, 0x6f, 0x89, 0xdd, 0xfa, 0x13, 0xd1, 0x07, 0xbe, 0x2f,
- 0xea, 0x91, 0x62, 0xaa, 0xed, 0xcb, 0xfd, 0x07, 0x82, 0xbb, 0x3f, 0xf4,
- 0xa6, 0x94, 0x66, 0x71, 0x20, 0x61, 0xac, 0x84, 0x04, 0x70, 0xf2, 0xd3,
- 0xdf, 0xac, 0x44, 0xfd, 0x47, 0x26, 0x81, 0x64, 0xb3, 0xa6, 0x90, 0x2b,
- 0xd2, 0x2c, 0xd0, 0x77, 0x81, 0x53, 0x45, 0x78, 0x5f, 0x30, 0x77, 0x91,
- 0x83, 0x13, 0x33, 0xd1, 0x91, 0xa6, 0x35, 0x21, 0xcb, 0x26, 0x54, 0x0a,
- 0xf7, 0x70, 0x5e, 0xdb, 0xd8, 0x92, 0xc7, 0xdf, 0xf9, 0x2a, 0x46, 0x91,
- 0x22, 0x3b, 0xe6, 0xe1, 0x91, 0xeb, 0xa6, 0x78, 0x81, 0x57, 0xf3, 0x04,
- 0xdf, 0x34, 0x55, 0x74, 0x0a, 0xfe, 0xf2, 0xbd, 0xb3, 0xeb, 0xa3, 0x8e,
- 0x71, 0x15, 0xa9, 0x2f, 0x53, 0xe2, 0xa1, 0x45, 0xdf, 0xe8, 0x29, 0x40,
- 0xf1, 0x4b, 0x23, 0xdb, 0x8e, 0xee, 0x19, 0xa8, 0xd4, 0x15, 0x90, 0x8c,
- 0x04, 0x46, 0x81, 0x49, 0x92, 0xe5, 0xe1, 0xfe, 0x99, 0x06, 0xfc, 0x3e,
- 0x43, 0x58, 0x3b, 0x19, 0x7f, 0xd2, 0x13, 0x65, 0xc2, 0x64, 0x27, 0x6d,
- 0x93, 0x6a, 0xcf, 0x48, 0x2a, 0x3d, 0xdd, 0x79, 0x9f, 0x05, 0x32, 0xeb,
- 0xfd, 0xb4, 0xd2, 0x1d, 0x16, 0x61, 0x3d, 0x17, 0x4c, 0xb8, 0xad, 0x63,
- 0x0e, 0x6b, 0x8a, 0x4a, 0x34, 0x4c, 0xb5, 0x3c, 0x0f, 0x05, 0x28, 0x8c,
- 0x8b, 0xdf, 0xf4, 0xa0, 0x49, 0xbf, 0x34, 0x6c, 0x6a, 0x5f, 0x40, 0x95,
- 0x48, 0x4b, 0x93, 0x1e, 0x61, 0x6d, 0x58, 0xc3, 0x86, 0x98, 0x70, 0x11,
- 0x4e, 0x44, 0x65, 0xc1, 0x0d, 0xea, 0x2f, 0xda, 0x38, 0x16, 0xbd, 0xd4,
- 0x7b, 0x3e, 0x31, 0xee, 0x42, 0x4c, 0xdc, 0xe9, 0x8b, 0x1f, 0xa9, 0xcf,
- 0xab, 0x60, 0xb5, 0xb1, 0xd2, 0xf2, 0x6a, 0xe9, 0xbc, 0xcc, 0xcb, 0x60,
- 0x4a, 0xca, 0x70, 0x79, 0x64, 0x9d, 0x07, 0x1e, 0xdb, 0xef, 0x34, 0xaf,
- 0x17, 0x93, 0x6b, 0x60, 0x73, 0x2d, 0x8c, 0x08, 0x27, 0x1e, 0x46, 0x9f,
- 0xcb, 0x33, 0xdd, 0x76, 0xef, 0x17, 0x58, 0x9a, 0x5f, 0x82, 0x78, 0x0f,
- 0xbf, 0xe7, 0x0f, 0x3a, 0x1e, 0xa8, 0x30, 0xbf, 0xff, 0xc7, 0xc7, 0x82,
- 0x8b, 0xc3, 0x65, 0x04, 0xfd, 0x45, 0xc9, 0x88, 0x99, 0x8e, 0x44, 0xc5,
- 0x23, 0x1e, 0xbf, 0xf1, 0x95, 0x70, 0x35, 0xe6, 0x56, 0x4a, 0x53, 0xb2,
- 0xac, 0x0c, 0xfd, 0xf5, 0x61, 0x26, 0x5b, 0x70, 0xd6, 0x4c, 0xfc, 0x0f,
- 0xcc, 0x53, 0x6e, 0x25, 0xca, 0x1d, 0x0c, 0x56, 0xf7, 0x9c, 0x95, 0xf6,
- 0x3c, 0x08, 0x0c, 0x64, 0xb1, 0x1c, 0x5c, 0xe6, 0x25, 0xa4, 0xa3, 0xb7,
- 0xaf, 0x8b, 0xbc, 0xe1, 0x68, 0xdf, 0x10, 0xab, 0xbb, 0xd5, 0x30, 0x64,
- 0x42, 0xf6, 0xe6, 0x9a, 0xb5, 0x59, 0x12, 0x76, 0x92, 0xac, 0x29, 0xe9,
- 0x45, 0xdb, 0x2e, 0x62, 0x22, 0x58, 0x24, 0x89, 0xc8, 0x6a, 0x2a, 0xa7,
- 0x3f, 0x04, 0x53, 0x4e, 0x07, 0x41, 0x4e, 0x5f, 0x95, 0x5f, 0x6e, 0x14,
- 0x5b, 0xa7, 0xa7, 0xd3, 0x5a, 0xa2, 0x95, 0x4a, 0xc8, 0xe9, 0x3c, 0x5a,
- 0x84, 0x50, 0xbc, 0xe1, 0x9c, 0x7a, 0x16, 0xe5, 0xc7, 0x04, 0x9d, 0x60,
- 0x2e, 0x7d, 0xb3, 0x77, 0x5d, 0x86, 0x2e, 0xac, 0x57, 0x2a, 0x31, 0x26,
- 0x23, 0x6e, 0xcc, 0x7f, 0xb8, 0x36, 0x29, 0xa9, 0xa8, 0xd9, 0xc6, 0x75,
- 0xee, 0x16, 0x23, 0x27, 0x0f, 0xe1, 0xb0, 0x3d, 0x91, 0x3a, 0x26, 0x4a,
- 0x60, 0x72, 0x14, 0xf9, 0x3c, 0x66, 0x66, 0xe8, 0x7d, 0x4a, 0x6f, 0x7e,
- 0x63, 0x58, 0x6a, 0x28, 0x78, 0x50, 0xef, 0x3b, 0x9d, 0xeb, 0xb6, 0x4b,
- 0x5d, 0x55, 0x80, 0x84, 0x97, 0x9b, 0x74, 0x4b, 0x5c, 0x09, 0x1d, 0xe7,
- 0x57, 0xfc, 0x40, 0x3f, 0xa9, 0xbd, 0xdf, 0x61, 0x2a, 0x89, 0x62, 0x51,
- 0xfc, 0x24, 0xee, 0xee, 0x97, 0x10, 0xca, 0xb6, 0x0e, 0x8e, 0x71, 0x67,
- 0x2a, 0x79, 0x4f, 0xc4, 0xe6, 0x3e, 0x27, 0xc2, 0x9b, 0x85, 0xfd, 0xde,
- 0xfb, 0x58, 0x75, 0xf3, 0x1c, 0x31, 0xa2, 0x56, 0x3e, 0xdc, 0x24, 0xf4,
- 0x4f, 0xcb, 0x5a, 0x1a, 0x77, 0x5c, 0x28, 0xd1, 0x5a, 0x55, 0xa9, 0x8c,
- 0xb5, 0xdd, 0x77, 0x93, 0x58, 0xd8, 0x2f, 0x7d, 0x5a, 0x67, 0xa1, 0x95,
- 0x0a, 0xd2, 0x6a, 0x93, 0xa6, 0xf0, 0x5f, 0x7f, 0x0a, 0x29, 0xdb, 0x1d,
- 0x8c, 0xa7, 0x12, 0x0a, 0xf4, 0xc9, 0xcd, 0x70, 0xd1, 0xbd, 0x48, 0xd4,
- 0x9a, 0xbb, 0xbb, 0x24, 0xbf, 0x52, 0x25, 0xb9, 0x75, 0xc2, 0x17, 0x36,
- 0x6f, 0x4a, 0xc0, 0x53, 0x6d, 0x38, 0xfb, 0x7a, 0x60, 0xc8, 0x5d, 0x03,
- 0xc1, 0x1c, 0x0c, 0x31, 0xf0, 0x59, 0xed, 0x0a, 0x5f, 0x84, 0xf2, 0x89,
- 0x6c, 0xb4, 0xd5, 0x24, 0x2d, 0x2a, 0xda, 0xbe, 0x74, 0x1d, 0x22, 0xe2,
- 0xc6, 0xf0, 0x9b, 0x98, 0x5a, 0x41, 0x11, 0x4c, 0x51, 0x97, 0x16, 0xa7,
- 0xc9, 0xd8, 0x53, 0x12, 0x53, 0xdd, 0x22, 0xa9, 0xf2, 0xae, 0x52, 0x49,
- 0x02, 0xf9, 0x5c, 0x78, 0x00, 0xa2, 0x64, 0xff, 0x91, 0x62, 0x20, 0x6a,
- 0x87, 0x6a, 0x40, 0x01, 0x85, 0x30, 0xf5, 0xdd, 0xa7, 0x64, 0x0a, 0x85,
- 0x8d, 0x37, 0x99, 0xcb, 0x03, 0xc8, 0x29, 0x56, 0x7e, 0x75, 0x4f, 0xa1,
- 0xc3, 0x76, 0xce, 0xdb, 0xa3, 0xb4, 0x7e, 0x91, 0x95, 0xbe, 0x53, 0x0e,
- 0x20, 0xc9, 0xe7, 0x71, 0x78, 0xad, 0x3d, 0x4c, 0xbb, 0x59, 0xb9, 0x77,
- 0xcf, 0x7d, 0x7b, 0xff, 0x15, 0xdb, 0x1d, 0xae, 0x1f, 0xbe, 0x33, 0x88,
- 0x01, 0x04, 0x95, 0xe5, 0xe9, 0x6a, 0x1c, 0xbf, 0xc8, 0xc3, 0x33, 0x3b,
- 0xd8, 0x2f, 0x75, 0x4a, 0xc3, 0x6f, 0x09, 0x88, 0x26, 0x46, 0x90, 0x89,
- 0x53, 0x12, 0x27, 0xc2, 0x7d, 0x23, 0x6b, 0xc4, 0xe3, 0x0a, 0x0f, 0xc2,
- 0x86, 0x6d, 0x20, 0x35, 0x82, 0x33, 0xec, 0xdd, 0xa7, 0x6a, 0xc3, 0xa8,
- 0x11, 0xdc, 0x02, 0xd9, 0x05, 0x1b, 0x04, 0x75, 0x92, 0x6c, 0x08, 0x9e,
- 0x38, 0x72, 0xd9, 0x7d, 0x9b, 0xbc, 0xfd, 0xca, 0xb8, 0x06, 0x0e, 0x24,
- 0x89, 0x90, 0xde, 0x52, 0xe4, 0xd1, 0xcc, 0x99, 0x87, 0x0b, 0x87, 0xbb,
- 0x5c, 0xa9, 0xab, 0xec, 0xb5, 0xe4, 0xdd, 0x5d, 0xfa, 0xb1, 0x97, 0x5f,
- 0x61, 0xf7, 0x58, 0xd6, 0x08, 0x02, 0xf2, 0x51, 0x7c, 0x7a, 0xe6, 0xf1,
- 0xcb, 0x43, 0xd0, 0x21, 0x09, 0xb8, 0x82, 0xa9, 0x52, 0xd9, 0xa8, 0x7f,
- 0x2b, 0xe1, 0x0f, 0x31, 0xbc, 0x16, 0xa2, 0xce, 0x35, 0x55, 0x2e, 0xd6,
- 0xda, 0x38, 0xd9, 0xc2, 0x5e, 0xca, 0x27, 0xd9, 0xa6, 0xd6, 0x4b, 0xa2,
- 0x73, 0xc4, 0xce, 0x66, 0x30, 0x60, 0xa2, 0x01, 0xfa, 0xc1, 0xd6, 0xc8,
- 0xea, 0xdd, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x70, 0xe2, 0x62, 0x68, 0xff, 0x60, 0x67, 0x64, 0x88, 0xdd, 0x81, 0x79,
- 0x82, 0xf5, 0x46, 0xf9, 0x7e, 0x0e, 0xa9, 0x26, 0xf6, 0xcf, 0x5d, 0xef,
- 0x10, 0x11, 0xe1, 0x71, 0x72, 0x77, 0xcf, 0x02, 0x7b, 0xf1, 0x6e, 0xc4,
- 0xb4, 0xfa, 0x2a, 0x12, 0xfe, 0x7e, 0x3c, 0x66, 0xef, 0x41, 0x98, 0x3a,
- 0x1f, 0xa9, 0x14, 0x8f, 0x46, 0x22, 0xa0, 0xc2, 0xee, 0x93, 0x25, 0x34,
- 0xf2, 0xb7, 0x6d, 0x0a, 0x36, 0xde, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0xd4, 0x17, 0x62, 0x25, 0xfd, 0x5b, 0x75, 0xeb,
- 0xec, 0x06, 0xc9, 0x39, 0x86, 0x6d, 0xc5, 0x60, 0x2d, 0x33, 0x3d, 0xce,
- 0x6a, 0x9f, 0x07, 0x3b, 0xb9, 0x70, 0x0f, 0xc7, 0x13, 0x46, 0x35, 0x46,
- 0x26, 0xe4, 0xbc, 0x6e, 0x54, 0x89, 0x29, 0xd5, 0xa4, 0x94, 0xa0, 0x3a,
- 0x7a, 0x61, 0xcf, 0xd1, 0x48, 0x27, 0x7a, 0x72, 0x95, 0xde, 0x93, 0xd1,
- 0x19, 0x1f, 0xc9, 0xc8, 0x8f, 0x0d, 0xce, 0x34, 0x03, 0x39, 0x0a, 0x92,
- 0x16, 0x09, 0xc4, 0x49, 0xf9, 0x30, 0x2e, 0x19, 0xd1, 0x69, 0x7e, 0x78,
- 0x00, 0x25, 0x30, 0x6f, 0x6b, 0xe1, 0xbe, 0xad, 0xb2, 0x05, 0xde, 0xc7,
- 0xc2, 0xf7, 0xd5, 0xa7, 0x4d, 0x03, 0x6f, 0x6b, 0xcd, 0xcb, 0x42, 0xfa,
- 0x88, 0x16, 0xd5, 0xa6, 0x60, 0x08, 0xd4, 0xa5, 0x5b, 0x3b, 0x7b, 0xa2,
- 0xca, 0xa3, 0xa2, 0x5d, 0x63, 0x7f, 0xc0, 0x37, 0xc5, 0x7e, 0x99, 0x04,
- 0x5d, 0x9a, 0xb9, 0xa5, 0xac, 0xd1, 0xe2, 0x5d, 0xb2, 0x2b, 0x7e, 0xbb,
- 0xb9, 0x66, 0x13, 0xa7, 0x30, 0xbf, 0x80, 0x0c, 0x2b, 0x8d, 0x45, 0xe1,
- 0x8d, 0x96, 0x25, 0x27, 0x47, 0x3d, 0x21, 0x7d, 0x1c, 0x42, 0xac, 0x31,
- 0x26, 0x47, 0x59, 0xb3, 0x44, 0x85, 0xf2, 0x8e, 0x7d, 0x01, 0x96, 0x6d,
- 0xb2, 0x64, 0xc3, 0xfc, 0xa7, 0x82, 0x06, 0x4a, 0x87, 0x75, 0x9b, 0x99,
- 0x47, 0x7e, 0xa6, 0x4d, 0x2c, 0x36, 0xff, 0xac, 0x2b, 0x77, 0x96, 0x52,
- 0x14, 0x8d, 0x07, 0x0d, 0x28, 0x9d, 0x84, 0xa2, 0xda, 0xd6, 0x45, 0x3a,
- 0xd4, 0xe6, 0xb7, 0x9a, 0xf3, 0x34, 0xe3, 0xda, 0x39, 0xdf, 0x35, 0x9c,
- 0xe4, 0x87, 0x55, 0xc8, 0x43, 0xd0, 0x61, 0x46, 0x52, 0x2f, 0x75, 0x63,
- 0xbb, 0x98, 0x97, 0xeb, 0xfb, 0x15, 0xaf, 0x8e, 0x96, 0xdc, 0xff, 0x0a,
- 0x90, 0xda, 0x09, 0x63, 0x28, 0x7b, 0x92, 0x73, 0x0b, 0xd4, 0x2b, 0x72,
- 0x2a, 0x86, 0x32, 0xc3, 0xc1, 0x3e, 0xe4, 0x2c, 0x07, 0x89, 0x53, 0xb7,
- 0xfe, 0x78, 0x6c, 0x95, 0xb4, 0x62, 0x4d, 0x4b, 0xfe, 0x6c, 0xfc, 0x5e,
- 0x4e, 0xa7, 0x8c, 0x07, 0x4f, 0x85, 0x27, 0xe0, 0x7b, 0xd9, 0x7a, 0xe5,
- 0x1d, 0xbc, 0x36, 0xda, 0x8e, 0x21, 0xff, 0xb3, 0x60, 0x2c, 0x5e, 0x23,
- 0x0f, 0xde, 0x3f, 0xae, 0xa5, 0x3a, 0x50, 0xa9, 0x99, 0x39, 0x45, 0xaf,
- 0xd3, 0x5f, 0x4a, 0x15, 0xad, 0x9c, 0x66, 0x7f, 0x92, 0xe0, 0x02, 0x81,
- 0x3e, 0x06, 0x6a, 0x5e, 0xd0, 0x0c, 0x42, 0xe7, 0xcf, 0xe2, 0xeb, 0xa3,
- 0xe0, 0xf7, 0x2d, 0x8a, 0x21, 0xdb, 0x64, 0x28, 0x2a, 0xb3, 0x2b, 0xc4,
- 0xc9, 0xd5, 0x60, 0xaf, 0xfc, 0x15, 0xa1, 0x44, 0x9c, 0x96, 0x04, 0x42,
- 0x1c, 0x55, 0x8c, 0xa5, 0xce, 0x80, 0xce, 0x75, 0x64, 0xa9, 0xf6, 0xa5,
- 0x5a, 0x0f, 0x8a, 0x4b, 0x8b, 0x72, 0xcf, 0x3e, 0xd7, 0xeb, 0xe1, 0xd0,
- 0xd3, 0x2d, 0x04, 0x6c, 0x9e, 0x02, 0x75, 0x43, 0x5c, 0xc1, 0x57, 0x66,
- 0xd9, 0x14, 0x5b, 0x08, 0x10, 0x44, 0x8d, 0x8e, 0x89, 0xd1, 0x65, 0x27,
- 0x2a, 0x0b, 0x99, 0x6f, 0x09, 0xa6, 0x20, 0xa5, 0x75, 0x24, 0xe4, 0xf7,
- 0xf5, 0xe0, 0xed, 0x79, 0x37, 0x18, 0x13, 0x1c, 0xd9, 0xd1, 0xf5, 0x69,
- 0x0c, 0xa5, 0x02, 0xdf, 0x6a, 0xfd, 0x2e, 0x35, 0x8e, 0xd0, 0x41, 0x91,
- 0x61, 0x0f, 0x5c, 0xdd, 0x70, 0xbf, 0x1c, 0x49, 0xcb, 0xe9, 0xc9, 0x33,
- 0xc4, 0x99, 0x1e, 0x8b, 0x75, 0x48, 0xc2, 0x58, 0xa4, 0x70, 0x1f, 0xbb,
- 0xcd, 0xd3, 0x0e, 0x79, 0x25, 0xbe, 0x53, 0xfa, 0x32, 0x32, 0xf6, 0xb9,
- 0xf0, 0x0a, 0x52, 0x5b, 0xe0, 0x69, 0xff, 0x43, 0xda, 0x98, 0x1f, 0xee,
- 0x54, 0x60, 0xf8, 0x24, 0x43, 0xc5, 0x37, 0x72, 0xd1, 0xfc, 0x99, 0x9a,
- 0x3e, 0x24, 0xe0, 0xd9, 0xc2, 0x61, 0x47, 0xb3, 0x26, 0x09, 0x85, 0x74,
- 0xa1, 0x2b, 0x4a, 0x70, 0xd0, 0x1b, 0x90, 0x03, 0x25, 0xd9, 0x22, 0xc2,
- 0x16, 0x22, 0x3a, 0x62, 0x20, 0xd4, 0x13, 0xce, 0xa2, 0xc7, 0x02, 0xfb,
- 0x9a, 0xbf, 0xf1, 0x1c, 0x80, 0x01, 0x97, 0x90, 0x7f, 0x5a, 0x98, 0x70,
- 0x30, 0x61, 0x77, 0xe5, 0xd4, 0x3b, 0x03, 0x42, 0x57, 0x31, 0x5e, 0xc6,
- 0x64, 0xe1, 0xf4, 0x64, 0x77, 0x21, 0x9b, 0x44, 0x1c, 0xd9, 0x8c, 0x95,
- 0x8a, 0xf1, 0xcb, 0x82, 0xac, 0xc1, 0x26, 0x31, 0xf2, 0x22, 0x41, 0xab,
- 0xbb, 0x23, 0xd3, 0x8d, 0xcc, 0x5c, 0x9d, 0x9b, 0x1d, 0x9c, 0x4d, 0xf3,
- 0x62, 0xde, 0x15, 0x6a, 0x94, 0x8d, 0x24, 0xe7, 0x52, 0x8d, 0x2a, 0xa4,
- 0x1d, 0x54, 0x5a, 0xda, 0xaf, 0xab, 0x05, 0x27, 0x4b, 0xbb, 0xb4, 0xda,
- 0x0c, 0xb9, 0x20, 0xb3, 0xaf, 0x4a, 0xeb, 0x37, 0xe5, 0x43, 0xe4, 0xc1,
- 0xf6, 0x9e, 0xf8, 0x6c, 0xd8, 0xa1, 0x0c, 0xf9, 0xd1, 0x4b, 0x96, 0xa0,
- 0x6d, 0x38, 0x64, 0x41, 0xd3, 0x14, 0xfb, 0xad, 0x89, 0xa9, 0xf7, 0x36,
- 0x01, 0x0f, 0xbe, 0x8e, 0xd7, 0x76, 0xc6, 0x70, 0x22, 0x32, 0x8b, 0x08,
- 0xca, 0x95, 0xbf, 0xcf, 0x5e, 0xb8, 0xc0, 0x3f, 0xd9, 0xaa, 0x84, 0xab,
- 0x30, 0x5b, 0xe3, 0x7a, 0x61, 0x32, 0xe5, 0x54, 0x01, 0x5e, 0xb6, 0x1c,
- 0x9c, 0x78, 0x52, 0x2a, 0xa7, 0xf5, 0x29, 0xa6, 0x0f, 0x14, 0xa5, 0x3a,
- 0x34, 0xd4, 0xf5, 0xc2, 0xb2, 0x8d, 0x12, 0x7b, 0x8a, 0x64, 0x00, 0xfd,
- 0x02, 0x0e, 0x02, 0x26, 0x5a, 0xb9, 0xeb, 0xfd, 0x30, 0xce, 0x51, 0xec,
- 0x5f, 0xbc, 0xee, 0x53, 0x21, 0xec, 0x0e, 0xee, 0xc4, 0x28, 0x1a, 0xec,
- 0x2a, 0x39, 0x4e, 0xe1, 0x50, 0x11, 0x3f, 0x16, 0xdd, 0xbf, 0xaf, 0x3e,
- 0xbe, 0xd4, 0xfe, 0x34, 0x1e, 0x62, 0x3f, 0x5a, 0xea, 0x05, 0xfc, 0xd5,
- 0x45, 0x08, 0x47, 0xce, 0x38, 0x3f, 0x75, 0x7e, 0x0c, 0x3a, 0x2a, 0x14,
- 0xa7, 0x61, 0xba, 0x3a, 0xa1, 0x41, 0xa2, 0x72, 0x19, 0xfa, 0x33, 0x43,
- 0xa7, 0xf4, 0x4e, 0x5b, 0xf9, 0xb1, 0x45, 0x16, 0x57, 0x8e, 0xb1, 0xad,
- 0x7d, 0x88, 0xd3, 0x93, 0xa2, 0x08, 0xf3, 0x96, 0x4d, 0x84, 0x63, 0x08,
- 0xfa, 0x9d, 0xf3, 0x04, 0x33, 0xbd, 0x7e, 0x7a, 0xc7, 0x63, 0xc5, 0x31,
- 0x5a, 0x82, 0x33, 0x90, 0x56, 0x44, 0xe9, 0xd3, 0xc4, 0xd4, 0x76, 0x29,
- 0x2f, 0xdb, 0xa3, 0x9d, 0xff, 0xd4, 0xd2, 0xb1, 0xce, 0xf1, 0xcb, 0x7f,
- 0x10, 0x3b, 0x90, 0xa4, 0x1b, 0xa0, 0x9b, 0xa7, 0xfa, 0x27, 0x40, 0x11,
- 0x35, 0xc9, 0x7f, 0x01, 0x97, 0x76, 0x9f, 0x33, 0xc5, 0xd6, 0x8d, 0x20,
- 0x07, 0x73, 0x93, 0x0b, 0x24, 0x88, 0x4e, 0x73, 0x68, 0x79, 0x92, 0x20,
- 0x2a, 0x71, 0xed, 0x22, 0x0b, 0xfb, 0x42, 0xb5, 0xd9, 0xc3, 0xaa, 0xed,
- 0x45, 0x03, 0x64, 0xde, 0x6f, 0x25, 0x8e, 0x3b, 0x9a, 0xef, 0xc5, 0x63,
- 0xc2, 0x7f, 0x34, 0xd0, 0x1b, 0x20, 0xa3, 0xab, 0x9d, 0x54, 0x41, 0x0e,
- 0x7b, 0x2e, 0x96, 0x12, 0x75, 0x58, 0xdf, 0xd5, 0xaa, 0x3c, 0xf2, 0x26,
- 0xc1, 0xf1, 0x18, 0x37, 0x56, 0xf2, 0xd2, 0x86, 0x6f, 0xd4, 0x9f, 0x57,
- 0x2b, 0x32, 0xe9, 0x08, 0x94, 0x53, 0x40, 0xc5, 0x4d, 0x77, 0x39, 0xc6,
- 0x4c, 0x63, 0x53, 0xf9, 0xbf, 0x35, 0x08, 0xc5, 0x0d, 0xd0, 0x89, 0x82,
- 0xa7, 0x2d, 0x6a, 0xb4, 0x22, 0xb1, 0x10, 0x7f, 0xcf, 0x2e, 0x21, 0x27,
- 0x9c, 0x12, 0xc6, 0x0e, 0xca, 0xd2, 0x32, 0xb1, 0x6d, 0xfd, 0x59, 0x12,
- 0x23, 0x60, 0x46, 0x89, 0xe0, 0x75, 0x5e, 0xc9, 0xf4, 0x3d, 0x8a, 0x89,
- 0xd4, 0x23, 0xc2, 0xbe, 0x30, 0x32, 0x4a, 0x95, 0x42, 0xe2, 0xff, 0xff,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xa7, 0x0b, 0x48, 0xe2,
- 0xeb, 0xd7, 0x12, 0x42, 0x4c, 0x71, 0xfb, 0x25, 0x17, 0x23, 0x0e, 0x01,
- 0xa6, 0x21, 0xb9, 0x17, 0x6e, 0xf0, 0x24, 0x66, 0x9e, 0x9d, 0x0f, 0x71,
- 0xf8, 0x5b, 0x79, 0xb0, 0x1b, 0x1f, 0xe7, 0xa2, 0xc0, 0x17, 0x16, 0x08,
- 0x5e, 0x24, 0x7b, 0xf9, 0x7a, 0x1e, 0x70, 0xe2, 0x05, 0x40, 0x16, 0x56,
- 0xe7, 0x79, 0xf2, 0x30, 0xa3, 0xdc, 0xe3, 0x7a, 0x7e, 0x22, 0x88, 0xc0,
- 0xf7, 0xc8, 0x5c, 0x93, 0x95, 0x86, 0x02, 0x6c, 0x73, 0x76, 0xef, 0x03,
- 0x2d, 0xcb, 0xa5, 0x22, 0xfe, 0x05, 0xbb, 0xe6, 0xfd, 0x19, 0x8c, 0x8b,
- 0x67, 0x58, 0x81, 0x81, 0x2d, 0x36, 0xd0, 0xc1, 0x20, 0xb2, 0x87, 0x87,
- 0xdb, 0xe4, 0xe5, 0xd1, 0xd1, 0xd5, 0x81, 0x34, 0x4c, 0xd6, 0x09, 0xa2,
- 0x5d, 0xcc, 0x99, 0x12, 0xa5, 0x06, 0x0f, 0x06, 0x7e, 0xbb, 0x67, 0x26,
- 0x69, 0x15, 0x6e, 0x5f, 0xb1, 0x8e, 0xd6, 0x34, 0xfc, 0x4d, 0xd9, 0x03,
- 0xb7, 0x5a, 0xf4, 0xaa, 0x03, 0x00, 0x88, 0x6b, 0x5a, 0xc9, 0xf2, 0xfb,
- 0x67, 0x72, 0xbc, 0xf7, 0xb9, 0xdc, 0x97, 0xdf, 0x80, 0x91, 0xfa, 0x30,
- 0x18, 0x02, 0x89, 0xc7, 0xc9, 0x62, 0x1d, 0xc0, 0x0b, 0xa6, 0xfe, 0x7e,
- 0xb9, 0xa9, 0x1f, 0x11, 0x71, 0xe1, 0xd1, 0xfe, 0x8d, 0x90, 0x2c, 0x09,
- 0x82, 0x2e, 0x36, 0x79, 0xa5, 0x75, 0x54, 0xfb, 0xd3, 0x3c, 0xb4, 0x18,
- 0x2f, 0x4e, 0x3f, 0x37, 0xc4, 0xf8, 0xc5, 0x59, 0xa3, 0xfd, 0x0c, 0x62,
- 0x9e, 0xa8, 0x7a, 0x56, 0xc5, 0x97, 0x89, 0x35, 0xc7, 0xb0, 0x29, 0x87,
- 0xbf, 0x6a, 0xdc, 0xb1, 0x2f, 0x01, 0xf4, 0x0d, 0x7c, 0x25, 0x95, 0x39,
- 0x81, 0xdd, 0x1a, 0x81, 0x36, 0xc0, 0x6b, 0xbf, 0x6b, 0x4d, 0xea, 0x23,
- 0xc0, 0x3e, 0x5c, 0x39, 0xe5, 0x6b, 0x59, 0xa0, 0x50, 0x02, 0x99, 0xdf,
- 0x4e, 0xe3, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
- 0x17, 0x88, 0xf8, 0xda, 0x3d, 0x57, 0x83, 0x63, 0x76, 0xa0, 0x5c, 0x13,
- 0x1a, 0x00, 0x64, 0x30, 0x19, 0xfd, 0x2e, 0x9c, 0x64, 0xb6, 0xda, 0x51,
- 0x7b, 0x55, 0xe8, 0xc4, 0x67, 0x1b, 0xda, 0xfc, 0x4c, 0xd0, 0x27, 0x58,
- 0x56, 0xa1, 0x52, 0xd2, 0xb8, 0xd8, 0xd5, 0x94, 0x69, 0xcf, 0xd0, 0xd5,
- 0x72, 0xeb, 0x2b, 0x05, 0xf3, 0x12, 0xa6, 0xac, 0xa6, 0xf7, 0x90, 0x24,
- 0x1f, 0x22, 0x97, 0x5e, 0x8b, 0x7c, 0x2c, 0x30, 0x61, 0x11, 0x9b, 0xdf,
- 0x83, 0x2b, 0x10, 0x09, 0x42, 0x77, 0x2b, 0xd9, 0x43, 0xb3, 0x27, 0x69,
- 0x75, 0xf2, 0x2e, 0x72, 0xed, 0x50, 0xea, 0xbf, 0x7f, 0x47, 0x39, 0x9c,
- 0xf8, 0x1e, 0xce, 0x6f, 0xdd, 0xe8, 0x40, 0xc5, 0x14, 0x01, 0x7e, 0xbb,
- 0x0f, 0x43, 0x2d, 0x36, 0x70, 0x54, 0xc6, 0xbe, 0x69, 0x24, 0xd1, 0x65,
- 0x49, 0x77, 0xf0, 0xd2, 0x99, 0xb4, 0x50, 0x8d, 0x98, 0xcb, 0xbf, 0x7a,
- 0x7c, 0x65, 0xd3, 0x46, 0xcf, 0x90, 0x69, 0x56, 0x15, 0xa2, 0xae, 0x11,
- 0x94, 0x60, 0xf9, 0x45, 0x17, 0x54, 0x6b, 0xbd, 0xeb, 0xd8, 0x74, 0x41,
- 0x5c, 0xf6, 0x49, 0x0a, 0x14, 0xce, 0x43, 0x1f, 0x67, 0xc3, 0x6c, 0xf4,
- 0x01, 0xce, 0x3f, 0x85, 0xed, 0x19, 0xa1, 0xf7, 0x1b, 0xf8, 0x46, 0x45,
- 0xb4, 0xe9, 0xa7, 0x1f, 0x2a, 0x65, 0x00, 0x2a, 0xd3, 0x8b, 0x6a, 0x3b,
- 0xac, 0x78, 0xab, 0xf4, 0xc8, 0x62, 0x76, 0xc8, 0x24, 0xf8, 0xf8, 0x08,
- 0xe0, 0x64, 0x00, 0x64, 0x74, 0x9e, 0x55, 0x2e, 0xf8, 0xc9, 0xc8, 0x58,
- 0x0e, 0x1f, 0x27, 0x32, 0xfd, 0x30, 0x24, 0x68, 0xc8, 0xa4, 0x8c, 0x1c,
- 0xf3, 0xa7, 0x32, 0xae, 0x84, 0x0a, 0x8a, 0x1e, 0x11, 0xce, 0xb2, 0x02,
- 0xf1, 0xb3, 0x5f, 0x7d, 0x5e, 0x54, 0x8c, 0xe0, 0xeb, 0x46, 0x6e, 0x8a,
- 0x5f, 0x3f, 0x71, 0x47, 0x2a, 0x8a, 0xe6, 0xf0, 0xb0, 0x04, 0x49, 0x64,
- 0xb3, 0x7e, 0x16, 0x09, 0x83, 0x5f, 0x12, 0xe0, 0x85, 0xb7, 0x36, 0xc0,
- 0x8a, 0xa5, 0xcd, 0xae, 0xc0, 0xb4, 0xa2, 0x62, 0x9b, 0xfa, 0x64, 0x18,
- 0x16, 0x8e, 0xb6, 0x50, 0xf2, 0x9b, 0xc4, 0x7d, 0x0c, 0x4c, 0x8b, 0x58,
- 0xcf, 0x9b, 0x87, 0x09, 0xb1, 0x37, 0xbb, 0xaf, 0xa7, 0x72, 0x79, 0x81,
- 0x09, 0x55, 0xa1, 0x6a, 0x87, 0xb0, 0x7d, 0xc8, 0xb0, 0xc1, 0xa4, 0xa9,
- 0xdf, 0xcf, 0x95, 0x77, 0x36, 0x8e, 0x2b, 0xae, 0xeb, 0x4b, 0xf9, 0x2a,
- 0x83, 0x6c, 0x53, 0x3c, 0x89, 0xa6, 0x08, 0xae, 0x00, 0x4e, 0xb8, 0xf6,
- 0x34, 0x7c, 0xc6, 0x76, 0x87, 0x1a, 0x02, 0xb0, 0x89, 0xa3, 0x0f, 0x00,
- 0xc6, 0x7b, 0xeb, 0xf7, 0x95, 0x40, 0xc5, 0x0d, 0x6f, 0x74, 0xd8, 0x21,
- 0x2f, 0x9f, 0x24, 0xac, 0x43, 0xdb, 0x3a, 0x39, 0x6c, 0x34, 0x59, 0x62,
- 0x66, 0xbc, 0x28, 0x7f, 0x8c, 0x64, 0x62, 0x8c, 0x28, 0x6c, 0xf5, 0x79,
- 0x24, 0xb1, 0x00, 0x9c, 0x58, 0x6b, 0x09, 0xef, 0xb0, 0x73, 0xcd, 0x47,
- 0xbb, 0x52, 0xfd, 0x26, 0x6a, 0xff, 0xb9, 0xf1, 0xd5, 0x82, 0x59, 0x01,
- 0xfa, 0x87, 0x14, 0x24, 0x10, 0xb0, 0xf7, 0xdf, 0xf9, 0x3f, 0x67, 0x19,
- 0xbd, 0xc7, 0x85, 0xb0, 0xad, 0x47, 0xa8, 0x4c, 0x3e, 0xb6, 0x2e, 0x8a,
- 0xb3, 0xcc, 0x35, 0xa0, 0x48, 0xc7, 0x90, 0x81, 0xb7, 0x53, 0x1c, 0x38,
- 0x63, 0xf2, 0x2f, 0xa0, 0x71, 0x82, 0xe2, 0x56, 0xdb, 0x68, 0xe8, 0x5f,
- 0xf8, 0x42, 0xf2, 0xf6, 0xb8, 0x10, 0x6b, 0x54, 0x21, 0xa0, 0xc1, 0xfe,
- 0xcb, 0xce, 0x12, 0xa2, 0x49, 0x51, 0x86, 0x53, 0x56, 0xec, 0x33, 0xb3,
- 0x72, 0xce, 0xa4, 0x46, 0xe3, 0x37, 0xcb, 0xc0, 0x95, 0xaa, 0xe2, 0xa3,
- 0xc5, 0xe9, 0x36, 0x40, 0xfe, 0xf7, 0xe2, 0x5a, 0x6d, 0x58, 0x39, 0xb2,
- 0x41, 0x5d, 0xe2, 0x71, 0x72, 0xd0, 0xf0, 0x5c, 0x16, 0x88, 0x95, 0x30,
- 0x0a, 0xfb, 0x8d, 0xda, 0x14, 0x80, 0xf4, 0x15, 0xf2, 0xf6, 0xac, 0xf3,
- 0xd8, 0x8d, 0x13, 0x24, 0x2c, 0x74, 0x60, 0x6e, 0x8c, 0xa1, 0x59, 0xcf,
- 0x74, 0x7c, 0x2d, 0x0b, 0xbb, 0x06, 0x5c, 0x9d, 0xcd, 0xf3, 0x1e, 0x4a,
- 0xba, 0x3f, 0x9c, 0x4a, 0xc4, 0xd7, 0xf9, 0xf0, 0xa5, 0x56, 0x7f, 0xb0,
- 0xa2, 0x57, 0xd0, 0xc3, 0xaa, 0xa7, 0xd0, 0x49, 0xe2, 0x28, 0x9b, 0xc4,
- 0x64, 0x0c, 0xe0, 0x71, 0x9c, 0x05, 0x04, 0x95, 0x00, 0x1f, 0x7b, 0xa9,
- 0xb9, 0xb3, 0x2b, 0x8f, 0x0b, 0x45, 0x1e, 0x23, 0xaa, 0x27, 0x89, 0x4a,
- 0xb0, 0x7d, 0x03, 0xdf, 0xae, 0xdb, 0xcb, 0xc4, 0xec, 0x3b, 0x02, 0xe2,
- 0x85, 0x3a, 0xb7, 0x25, 0xfb, 0xab, 0xca, 0xc1, 0x33, 0x00, 0x5b, 0xd2,
- 0xcf, 0xb0, 0x11, 0x1d, 0x51, 0xb5, 0x5b, 0xea, 0x94, 0xf7, 0xa0, 0x98,
- 0x33, 0xba, 0x58, 0xfc, 0x12, 0xea, 0xdd, 0x89, 0xbd, 0x63, 0x03, 0xbe,
- 0x7e, 0x3b, 0x69, 0xc4, 0x9d, 0x57, 0x0f, 0xd6, 0xbe, 0xea, 0x5b, 0xd0,
- 0x97, 0x63, 0x89, 0xb0, 0xa0, 0xc0, 0xd6, 0x39, 0xc1, 0x69, 0x12, 0x6a,
- 0xfb, 0xac, 0x74, 0x7f, 0xfb, 0xf4, 0x7f, 0x38, 0x44, 0x4c, 0x8a, 0xa2,
- 0x41, 0x15, 0xc0, 0x54, 0xc0, 0xed, 0x14, 0x83, 0xef, 0xbc, 0x9c, 0xc7,
- 0xdd, 0x21, 0xd6, 0xf0, 0x9b, 0x7f, 0x09, 0xd5, 0x96, 0xe5, 0xf7, 0xc5,
- 0xa9, 0xb3, 0x41, 0xb0, 0x9d, 0xeb, 0x49, 0x68, 0x9d, 0x2b, 0xea, 0x47,
- 0x80, 0x3b, 0x54, 0xb8, 0xf4, 0x14, 0x5e, 0xd6, 0x66, 0x89, 0x04, 0xb3,
- 0x00, 0xa3, 0xa8, 0x32, 0x62, 0x2e, 0xc3, 0x15, 0xc6, 0x93, 0x7d, 0x40,
- 0x32, 0xb1, 0x6b, 0x60, 0xd3, 0x52, 0xdf, 0x09, 0x8c, 0x80, 0x2b, 0x01,
- 0xe7, 0x97, 0x8d, 0xbb, 0x14, 0xd6, 0x10, 0x15, 0x64, 0x00, 0x4a, 0x2c,
- 0x67, 0xca, 0xd0, 0xa1, 0x37, 0x33, 0x7b, 0xa1, 0x2a, 0x5b, 0x5b, 0x78,
- 0xf8, 0x2f, 0xdd, 0x76, 0xab, 0x8a, 0xc3, 0xe3, 0x37, 0x00, 0xd1, 0x29,
- 0xb0, 0x96, 0x1d, 0x18, 0xbe, 0x5d, 0x32, 0x7e, 0xb7, 0x11, 0xa9, 0x78,
- 0x72, 0xa2, 0x2d, 0x29, 0x1c, 0x32, 0xa4, 0xff, 0xc7, 0xce, 0xfe, 0xaf,
- 0xb7, 0x17, 0x43, 0xe5, 0x2f, 0xae, 0x45, 0xd3, 0xaf, 0x10, 0xe3, 0xd0,
- 0x58, 0xb6, 0xee, 0xee, 0x7a, 0xb5, 0x06, 0x70, 0x26, 0x7e, 0x2d, 0x5b,
- 0xd5, 0xe1, 0x7b, 0x9a, 0x37, 0x02, 0xfc, 0x1d, 0x08, 0x4f, 0x1a, 0xf5,
- 0x44, 0x63, 0xde, 0x4b, 0x14, 0x68, 0x54, 0x0b, 0x6a, 0x22, 0x4e, 0x02,
- 0x65, 0xcd, 0xf4, 0x04, 0xec, 0xcc, 0x8a, 0x0b, 0xe0, 0x59, 0xf8, 0x65,
- 0x25, 0x63, 0xed, 0x0f, 0xa6, 0xc5, 0x3c, 0xcb, 0x5d, 0xc5, 0xd8, 0x9f,
- 0x5a, 0xd3, 0x88, 0x3d, 0xd4, 0x2c, 0xb3, 0x04, 0xf6, 0x97, 0xc7, 0xe2,
- 0xfd, 0xb6, 0xf4, 0x7d, 0x0d, 0xb9, 0x75, 0x7e, 0x9d, 0x81, 0xdc, 0xdf,
- 0x8e, 0x90, 0x40, 0x0c, 0x7b, 0x45, 0xfe, 0x68, 0xfd, 0xff, 0x1c, 0xf1,
- 0x16, 0x09, 0x33, 0x74, 0x27, 0x7b, 0x4d, 0xd9, 0x9b, 0x48, 0x6d, 0x84,
- 0xeb, 0x96, 0x8f, 0x4b, 0x82, 0x73, 0xd5, 0x69, 0x7d, 0x14, 0x45, 0x8c,
- 0xb8, 0x71, 0x87, 0x70, 0x09, 0x26, 0xfc, 0x89, 0x6f, 0x0f, 0xb6, 0xc1,
- 0xd6, 0xe1, 0xbf, 0xdb, 0x85, 0x8f, 0x94, 0xad, 0x94, 0x01, 0x01, 0xbb,
- 0x3f, 0xc0, 0xb5, 0xff, 0xf5, 0xbb, 0x4f, 0x50, 0x09, 0xca, 0x7d, 0x36,
- 0x47, 0x66, 0x9a, 0x8c, 0xee, 0x84, 0x73, 0x9a, 0x1f, 0x49, 0x75, 0xb4,
- 0xab, 0x66, 0xf7, 0x3b, 0xfe, 0x81, 0x67, 0xc9, 0xd1, 0x16, 0xde, 0x1f,
- 0xc2, 0x24, 0xed, 0x6a, 0x5a, 0xe7, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x18, 0x00, 0x00, 0xc5, 0xd7, 0x14, 0x84, 0xf8, 0xcf, 0x9b, 0xf4,
- 0xb7, 0x6f, 0x47, 0x90, 0x47, 0x30, 0x80, 0x4b, 0x9e, 0x32, 0x25, 0xa9,
- 0xf1, 0x33, 0xb5, 0xde, 0xa1, 0x68, 0xf4, 0xe2, 0x85, 0x1f, 0x07, 0x2f,
- 0xcc, 0x00, 0xfc, 0xaa, 0x7c, 0xa6, 0x20, 0x61, 0x71, 0x7a, 0x48, 0xe5,
- 0x2e, 0x29, 0xa3, 0xfa, 0x37, 0x9a, 0x95, 0x3f, 0xaa, 0x68, 0x93, 0xe3,
- 0x2e, 0xc5, 0xa2, 0x7b, 0x94, 0x5e, 0x60, 0x5f, 0x10, 0x85, 0xf3, 0x23,
- 0x2d, 0x42, 0x4c, 0x13, 0x29, 0xc8, 0x8d, 0x78, 0x6e, 0xd6, 0x8c, 0xe6,
- 0xfc, 0xb6, 0x2a, 0xa6, 0x3b, 0xf9, 0xab, 0x61, 0x7c, 0x08, 0x8a, 0x3b,
- 0x70, 0xbe, 0x57, 0xaa, 0xda, 0x1f, 0x33, 0x4a, 0x70, 0x17, 0x25, 0x0d,
- 0x3f, 0x60, 0x3d, 0xc8, 0x2e, 0xbd, 0x3b, 0x12, 0x0b, 0x63, 0x5e, 0x3f,
- 0xf5, 0x6b, 0x1f, 0x0b, 0xd9, 0x33, 0x85, 0x23, 0x71, 0x24, 0x9a, 0xb3,
- 0xdf, 0x5c, 0x1f, 0xef, 0x14, 0x33, 0xc8, 0x66, 0x85, 0xb7, 0xf0, 0x56,
- 0x68, 0x1d, 0x51, 0x52, 0xaf, 0x80, 0x3c, 0xe2, 0x59, 0x06, 0xf1, 0xd1,
- 0x9f, 0xb6, 0xc6, 0x80, 0x4e, 0x06, 0xea, 0x28, 0xab, 0x17, 0x8f, 0x45,
- 0x7a, 0xf6, 0xb4, 0x93, 0xb7, 0x43, 0x9e, 0xc6, 0xd4, 0x29, 0x00, 0x62,
- 0xab, 0x51, 0x7a, 0x72, 0xe5, 0xc1, 0xd4, 0x10, 0xcd, 0xd6, 0x17, 0x54,
- 0xe4, 0x20, 0x84, 0x50, 0xe4, 0xf9, 0x00, 0x13, 0xfd, 0xa6, 0x9f, 0xef,
- 0x19, 0xd4, 0x60, 0x2a, 0x42, 0x07, 0xcd, 0xd5, 0xa1, 0x01, 0x6d, 0x07,
- 0x01, 0x32, 0x61, 0x3c, 0x65, 0x9a, 0x8f, 0x5d, 0x33, 0xf3, 0xcb, 0x29,
- 0x0b, 0x8c, 0xe7, 0x3b, 0x83, 0x44, 0xb1, 0x3a, 0x4f, 0x8e, 0x09, 0x15,
- 0x14, 0x69, 0x84, 0xa1, 0xbb, 0x15, 0xfd, 0xea, 0xde, 0xbe, 0x5b, 0x6a,
- 0xc0, 0x95, 0x04, 0x46, 0x4d, 0x8a, 0xaa, 0xac, 0xbc, 0x2f, 0xad, 0x12,
- 0x15, 0x8a, 0x53, 0x4c, 0x94, 0xb8, 0xca, 0x42, 0x96, 0x3a, 0xf4, 0x7a,
- 0x18, 0x9d, 0x5b, 0x24, 0x9a, 0xce, 0xa8, 0x99, 0xd4, 0x37, 0x32, 0xf6,
- 0xf2, 0xac, 0xaf, 0x3f, 0xf5, 0x3b, 0xfe, 0xda, 0x13, 0x9a, 0xab, 0x4f,
- 0x55, 0xc0, 0x2c, 0x21, 0x2b, 0x65, 0x71, 0x1f, 0xc5, 0x04, 0x32, 0xc9,
- 0x94, 0xe5, 0xfa, 0x6f, 0xd8, 0x2a, 0xbc, 0x70, 0x85, 0x55, 0xdc, 0x62,
- 0xb7, 0x3a, 0x20, 0x0e, 0xe7, 0x67, 0x3c, 0xfe, 0xcb, 0x83, 0x6a, 0x15,
- 0x6e, 0x4a, 0x35, 0x65, 0xea, 0xc1, 0xb9, 0x4d, 0x35, 0xf9, 0x4b, 0xcf,
- 0xd8, 0xfd, 0xa5, 0xff, 0xff, 0x67, 0x70, 0x04, 0xae, 0xa2, 0xa4, 0x12,
- 0x4b, 0x83, 0x4f, 0xc2, 0x96, 0xf0, 0x21, 0x2b, 0x14, 0x21, 0x73, 0x42,
- 0x14, 0x99, 0x07, 0xe5, 0xa9, 0x52, 0x4c, 0xeb, 0xbe, 0xc3, 0x11, 0x2e,
- 0x27, 0xda, 0x69, 0x94, 0xd5, 0xf6, 0xc6, 0x77, 0x0a, 0x00, 0x5d, 0x9a,
- 0x82, 0xaa, 0x21, 0xfc, 0x86, 0x9b, 0xd0, 0xc4, 0xc4, 0x1f, 0x53, 0x41,
- 0x7a, 0x92, 0xab, 0x1c, 0x12, 0xf6, 0xd5, 0x48, 0xfb, 0x29, 0x4d, 0xb4,
- 0xd2, 0x12, 0xee, 0xc5, 0xea, 0x18, 0x33, 0xf1, 0x4d, 0x0a, 0x10, 0x43,
- 0xa5, 0x35, 0xb1, 0x63, 0xc4, 0xfb, 0x38, 0x1e, 0xef, 0xac, 0x3f, 0x97,
- 0x41, 0xc6, 0x96, 0x3e, 0x60, 0x13, 0xc8, 0xe3, 0xbe, 0x61, 0xe9, 0xb6,
- 0x26, 0x16, 0x14, 0xf8, 0x82, 0x0d, 0x6e, 0x75, 0x2f, 0xd7, 0x9c, 0x3a,
- 0x4a, 0xda, 0xd8, 0x2b, 0x35, 0xd4, 0x20, 0x32, 0xd4, 0x4f, 0x0f, 0xe4,
- 0xdc, 0xd5, 0x0f, 0xfe, 0xa6, 0x81, 0x28, 0xb4, 0x24, 0x3e, 0xb7, 0x0f,
- 0xb0, 0xb2, 0x5b, 0x05, 0x76, 0xbb, 0x24, 0x49, 0x6a, 0x01, 0x68, 0x3f,
- 0x03, 0x96, 0xbc, 0x0c, 0x77, 0x48, 0x5f, 0xe8, 0x39, 0xf4, 0xb0, 0x84,
- 0x42, 0x0e, 0x6a, 0xb9, 0xab, 0xf2, 0x95, 0x97, 0xa7, 0x5e, 0x29, 0x34,
- 0x9d, 0x50, 0xc0, 0x4b, 0x40, 0x72, 0xa1, 0x7c, 0x79, 0x5e, 0x95, 0xbe,
- 0xd6, 0x17, 0x43, 0x0a, 0xc9, 0x27, 0x25, 0x43, 0xd7, 0x99, 0xd5, 0x48,
- 0xd8, 0x98, 0xb5, 0x2b, 0x7f, 0xe3, 0xbd, 0x1d, 0xc0, 0xd1, 0x04, 0xd5,
- 0xa4, 0xe1, 0x68, 0xbe, 0x96, 0xf1, 0x2e, 0x5e, 0x37, 0x8d, 0x39, 0x4e,
- 0xe4, 0xcc, 0x5e, 0xd7, 0xdd, 0x59, 0x7e, 0xe8, 0xae, 0x48, 0xb5, 0xec,
- 0x2c, 0xf7, 0x68, 0x96, 0x00, 0xe5, 0xec, 0x03, 0x6f, 0x98, 0x3a, 0x9a,
- 0x4f, 0xd9, 0xf1, 0x2f, 0xfe, 0x76, 0xcf, 0x8f, 0x0b, 0x3d, 0x8a, 0x14,
- 0x00, 0x83, 0xcb, 0xca, 0xe3, 0x34, 0x81, 0xb5, 0x91, 0x64, 0x2b, 0x12,
- 0x24, 0x86, 0x9c, 0xae, 0x3c, 0x7f, 0x53, 0x22, 0xd4, 0x94, 0x90, 0x44,
- 0x6b, 0x35, 0xd2, 0xce, 0x8e, 0x95, 0xe2, 0xbe, 0x46, 0x50, 0x3f, 0x3d,
- 0xc3, 0xcd, 0xef, 0x47, 0x99, 0xb5, 0xf2, 0xd4, 0x6f, 0xf4, 0xfa, 0xa2,
- 0xfc, 0x1e, 0xe3, 0x99, 0x49, 0xfd, 0x1a, 0x6e, 0x0d, 0xb5, 0xf1, 0xc8,
- 0x05, 0x22, 0x29, 0xca, 0x03, 0xb8, 0x15, 0x3b, 0x01, 0x8a, 0x95, 0x74,
- 0x48, 0x93, 0x61, 0x35, 0xde, 0xeb, 0xa9, 0xc4, 0x56, 0xa9, 0xd7, 0xde,
- 0x4b, 0xe5, 0x4b, 0xa1, 0x42, 0x6a, 0x5f, 0xe3, 0xb2, 0xc7, 0xda, 0xfb,
- 0xc7, 0x70, 0x64, 0xe0, 0x68, 0x19, 0xc6, 0x11, 0x77, 0x2b, 0x5f, 0xba,
- 0x1d, 0x58, 0x77, 0x98, 0x2c, 0x91, 0xb4, 0xd2, 0xea, 0x1b, 0xdc, 0xe8,
- 0xfa, 0x82, 0xf3, 0x6e, 0xac, 0x88, 0x15, 0x16, 0x1a, 0x53, 0xb3, 0x01,
- 0x94, 0x03, 0x47, 0x20, 0xdb, 0x71, 0xcb, 0x71, 0xe8, 0x62, 0xad, 0x34,
- 0x2b, 0xa3, 0xa5, 0xe9, 0xa6, 0x82, 0x0e, 0x16, 0x61, 0xbc, 0x29, 0x6b,
- 0xb1, 0x60, 0x67, 0x80, 0x9a, 0x9f, 0xc4, 0x82, 0xf6, 0xb0, 0x7a, 0x16,
- 0x9c, 0x25, 0x04, 0xeb, 0xfd, 0xe0, 0x18, 0xd3, 0xfc, 0xeb, 0xe1, 0x3c,
- 0x2b, 0x29, 0x7b, 0x32, 0x4e, 0xd3, 0x6d, 0xe1, 0x27, 0xda, 0xc9, 0x14,
- 0x5c, 0x7f, 0xfa, 0x70, 0x41, 0x8e, 0xb4, 0xa3, 0xde, 0x36, 0x92, 0x67,
- 0x97, 0xe2, 0xec, 0x85, 0x8b, 0x76, 0x08, 0x3c, 0x32, 0x58, 0xd4, 0x7f,
- 0x6f, 0x91, 0x03, 0xdb, 0x19, 0x3e, 0xc4, 0x8b, 0x3c, 0xb7, 0x75, 0x90,
- 0x71, 0x7a, 0x21, 0x9d, 0xa7, 0x77, 0xbf, 0xf5, 0x92, 0x57, 0x46, 0x07,
- 0xa7, 0xbb, 0x0c, 0x42, 0xca, 0x4f, 0x5a, 0x27, 0x45, 0x69, 0xfe, 0x6d,
- 0x78, 0x43, 0x77, 0xc4, 0xb4, 0x43, 0xff, 0x37, 0x0d, 0xb7, 0xfa, 0xe9,
- 0x9e, 0x06, 0x70, 0x53, 0xfd, 0xf6, 0xa0, 0x28, 0x84, 0x46, 0xcd, 0x61,
- 0xa2, 0x95, 0xc4, 0x1e, 0x6a, 0x13, 0xa1, 0x7f, 0xaf, 0xe1, 0x73, 0x85,
- 0xb0, 0x53, 0x9c, 0x08, 0xb6, 0x1d, 0x4d, 0xb4, 0x0b, 0xfb, 0x1f, 0x0c,
- 0x7b, 0x17, 0x06, 0x73, 0xa7, 0x22, 0x1f, 0xb0, 0xd8, 0x45, 0x6e, 0xe5,
- 0xde, 0x48, 0xb7, 0x9f, 0x5a, 0xa8, 0xd1, 0xc3, 0x04, 0xd1, 0x87, 0xec,
- 0x15, 0x3e, 0xd1, 0xc7, 0x57, 0x01, 0x46, 0x4b, 0x28, 0xa8, 0x79, 0x5a,
- 0x7e, 0x0b, 0x56, 0x56, 0x28, 0xda, 0x35, 0xea, 0x4c, 0x14, 0x81, 0xae,
- 0xc0, 0x0d, 0x12, 0xfe, 0x2d, 0xb7, 0x95, 0x4d, 0xea, 0x78, 0xb6, 0x53,
- 0xcf, 0xac, 0x8a, 0xfc, 0xc9, 0x07, 0x9f, 0x93, 0xf0, 0x11, 0x86, 0x13,
- 0xe9, 0xca, 0x3d, 0xce, 0xb1, 0xfd, 0x1a, 0x0a, 0x8b, 0x11, 0x82, 0x94,
- 0x6a, 0xae, 0xc5, 0x80, 0x6a, 0x3b, 0xa8, 0x7c, 0xb4, 0x53, 0x4e, 0xa9,
- 0x04, 0x1a, 0x4f, 0xb0, 0xb9, 0x95, 0x96, 0xa5, 0xfd, 0xce, 0xdc, 0x57,
- 0x00, 0x48, 0x16, 0xe2, 0x40, 0xae, 0x04, 0xf5, 0x83, 0x60, 0x23, 0xd9,
- 0x8e, 0x59, 0x56, 0x20, 0x50, 0x38, 0xc4, 0xde, 0x88, 0x9f, 0x91, 0x06,
- 0xdb, 0x8f, 0x84, 0xa2, 0xaf, 0x61, 0xdd, 0x48, 0x03, 0x4f, 0xc4, 0xb8,
- 0xed, 0x12, 0xd2, 0x74, 0x08, 0xb9, 0x51, 0x63, 0xb5, 0xfe, 0x09, 0x7f,
- 0x7b, 0x8c, 0x5e, 0xd7, 0x27, 0xe5, 0x79, 0xe6, 0x33, 0x60, 0x54, 0xe1,
- 0x21, 0xda, 0xca, 0x8b, 0x81, 0xdf, 0xb6, 0xa7, 0x2e, 0x9d, 0x0f, 0xfc,
- 0x05, 0x80, 0x67, 0xcb, 0xc5, 0xdf, 0xc7, 0x13, 0xee, 0xb5, 0x40, 0x8e,
- 0xa7, 0x0c, 0xcb, 0xf2, 0x45, 0x15, 0x29, 0xb1, 0xb8, 0x02, 0x23, 0x61,
- 0x38, 0xf1, 0x16, 0xa1, 0x0c, 0xa1, 0xc9, 0x40, 0x8c, 0xd0, 0x48, 0x4b,
- 0xce, 0x9c, 0x1e, 0x53, 0x40, 0x44, 0xf6, 0x17, 0x16, 0xc6, 0x5c, 0xb0,
- 0x2a, 0x29, 0x59, 0x87, 0x67, 0x85, 0xa7, 0x81, 0x84, 0xe9, 0x4f, 0xe5,
- 0x4e, 0x13, 0x5a, 0x11, 0xa1, 0x24, 0x62, 0xe9, 0x7a, 0xea, 0x51, 0xaa,
- 0x45, 0xf3, 0x1d, 0x2a, 0xaf, 0x01, 0x28, 0x35, 0xda, 0xb4, 0xe7, 0xab,
- 0xc1, 0xb9, 0x3c, 0x45, 0xa2, 0x0b, 0x5d, 0x40, 0x09, 0xac, 0x62, 0x16,
- 0xd3, 0x1f, 0x9f, 0xc7, 0x1a, 0x56, 0xb7, 0x27, 0xd1, 0x1b, 0xe1, 0xb5,
- 0x82, 0x9e, 0xe8, 0xd3, 0x5c, 0x0f, 0xe8, 0x87, 0x61, 0xc6, 0x20, 0xb7,
- 0x31, 0x3f, 0x0d, 0xb3, 0x0a, 0x5a, 0xce, 0x06, 0xa5, 0xe9, 0xfd, 0xf3,
- 0x29, 0x1a, 0xcd, 0x86, 0x0e, 0x31, 0x29, 0xaa, 0xb7, 0x32, 0xf1, 0x10,
- 0x4e, 0x92, 0x12, 0x00, 0xc0, 0xac, 0x50, 0x4b, 0x52, 0x59, 0x51, 0x7c,
- 0xa8, 0x0c, 0xf7, 0xcb, 0x16, 0x73, 0x7b, 0x90, 0xa8, 0x57, 0x79, 0xb4,
- 0x73, 0x53, 0xd7, 0xed, 0xba, 0x46, 0xc5, 0x06, 0x53, 0x02, 0xc7, 0x58,
- 0x4c, 0x09, 0x0c, 0xa5, 0x01, 0x13, 0x18, 0x39, 0x4b, 0x4e, 0xc2, 0x0d,
- 0xd6, 0xdf, 0xaa, 0x7e, 0x46, 0xba, 0x6e, 0xcc, 0x25, 0x42, 0xd0, 0xb3,
- 0x31, 0xdc, 0xdf, 0x7d, 0xf1, 0xc3, 0x73, 0xca, 0x7a, 0xf6, 0xcb, 0x23,
- 0x81, 0x8d, 0xbe, 0x0b, 0xf2, 0x79, 0x8d, 0x14, 0xa4, 0xc8, 0x36, 0x18,
- 0x49, 0xc8, 0x0d, 0xd7, 0xc9, 0xdd, 0x35, 0xeb, 0xec, 0x52, 0x56, 0xae,
- 0xf2, 0xd2, 0x51, 0x91, 0x39, 0xbc, 0xb0, 0x49, 0xb7, 0xf2, 0x1b, 0x64,
- 0x83, 0x5a, 0xa6, 0x97, 0xc2, 0x15, 0x95, 0xdc, 0x11, 0xd2, 0x89, 0xc0,
- 0x6a, 0xb1, 0x44, 0x43, 0x38, 0xb6, 0x54, 0x0f, 0xdc, 0xcb, 0xed, 0x26,
- 0x27, 0xd9, 0x46, 0x56, 0x4e, 0x6a, 0x54, 0x74, 0x0f, 0x45, 0xfc, 0xb6,
- 0x93, 0xab, 0x3c, 0xd1, 0x86, 0x51, 0xaf, 0xa9, 0x4a, 0xc0, 0x9c, 0x78,
- 0xc1, 0xb1, 0xc7, 0xf1, 0x9c, 0xd1, 0xd0, 0x32, 0x4e, 0x4b, 0x02, 0x36,
- 0x68, 0x38, 0x88, 0x56, 0xc0, 0x2b, 0x12, 0x05, 0x3b, 0xb9, 0xf6, 0xa2,
- 0x37, 0xe7, 0xbc, 0x81, 0xf9, 0x75, 0x51, 0x27, 0x56, 0x0d, 0x55, 0xd1,
- 0x6a, 0xe0, 0xcf, 0x87, 0x0a, 0x44, 0xc6, 0x57, 0xe1, 0x1b, 0xc0, 0x2c,
- 0xcf, 0xab, 0x77, 0xe9, 0x14, 0xf5, 0x34, 0x89, 0xfb, 0xc9, 0xf2, 0x87,
- 0x5c, 0x75, 0xba, 0x51, 0x9a, 0x49, 0xe9, 0x23, 0x23, 0xf4, 0xc9, 0xd1,
- 0x2f, 0x87, 0xf6, 0x75, 0x38, 0x97, 0x48, 0xb8, 0x30, 0x46, 0x1d, 0x46,
- 0x65, 0x03, 0x10, 0xcf, 0xfb, 0x36, 0xf2, 0xb1, 0xaf, 0x31, 0x02, 0x7b,
- 0x74, 0xfe, 0x9f, 0x8c, 0x73, 0x04, 0xfd, 0xb5, 0xae, 0x2e, 0x27, 0x9c,
- 0xd8, 0x73, 0xbc, 0xc3, 0x4a, 0x76, 0x93, 0x66, 0xf6, 0xb7, 0x90, 0xc4,
- 0x42, 0x3d, 0xcd, 0xb5, 0xf1, 0x75, 0xbf, 0xb7, 0xdd, 0x8e, 0xb7, 0xcd,
- 0x90, 0x35, 0xf5, 0x95, 0x3d, 0xe4, 0x4e, 0xb0, 0x7c, 0x5f, 0xad, 0xff,
- 0x75, 0x38, 0xc4, 0xc7, 0xed, 0xec, 0x70, 0xcc, 0x9f, 0xf9, 0x77, 0xa1,
- 0x00, 0x2f, 0xf1, 0xa2, 0xc9, 0x74, 0xdc, 0x18, 0x14, 0xd0, 0x2f, 0x86,
- 0x66, 0xa7, 0x5b, 0x39, 0x5c, 0xba, 0x0e, 0x77, 0x16, 0x04, 0xc3, 0x02,
- 0x42, 0x3b, 0x66, 0x29, 0xee, 0x65, 0x00, 0xd4, 0x22, 0x5a, 0x77, 0x74,
- 0xd4, 0xc3, 0xf3, 0x00, 0xdf, 0x6b, 0xc3, 0x15, 0x89, 0x0e, 0xb1, 0xbc,
- 0xac, 0xe8, 0x44, 0x2f, 0x80, 0x34, 0x34, 0x8b, 0x0c, 0x48, 0x45, 0xc2,
- 0x6a, 0xa3, 0x67, 0xd7, 0x3d, 0x36, 0xf3, 0x3f, 0xe5, 0xf0, 0x5b, 0xe8,
- 0xad, 0x41, 0xd5, 0x82, 0xc1, 0x28, 0xab, 0x77, 0xe8, 0x7f, 0xb3, 0xf6,
- 0xd2, 0x0c, 0xe4, 0x03, 0xcf, 0xe4, 0x72, 0xdb, 0x7b, 0x81, 0xf4, 0xf3,
- 0x48, 0x74, 0xe1, 0x91, 0xb8, 0xf8, 0x4c, 0x2c, 0x60, 0x99, 0x3e, 0x1e,
- 0x4f, 0xaf, 0x12, 0xab, 0x52, 0xef, 0xc7, 0x60, 0xd2, 0xfe, 0x62, 0x55,
- 0xc8, 0x18, 0xad, 0x60, 0xa7, 0x5d, 0xde, 0x4d, 0xfc, 0x6d, 0xe1, 0x10,
- 0x7c, 0xf9, 0xa2, 0x64, 0x00, 0x16, 0x1f, 0x44, 0x7c, 0xe2, 0x72, 0x37,
- 0xd9, 0x92, 0xad, 0xfc, 0x62, 0x53, 0xbe, 0xb6, 0xe0, 0xc8, 0xe0, 0xa2,
- 0xef, 0x22, 0x4b, 0x70, 0x3a, 0x4f, 0xc9, 0xed, 0x6b, 0xbc, 0x17, 0x0a,
- 0xcf, 0x6a, 0x2c, 0xd3, 0xd2, 0x6b, 0x02, 0x45, 0xfa, 0x9e, 0xc2, 0x21,
- 0x28, 0xfc, 0x07, 0x68, 0xd6, 0xb8, 0x9f, 0x2a, 0x0b, 0x7a, 0x0e, 0xbc,
- 0x4e, 0xee, 0x84, 0x38, 0xe4, 0x8e, 0x70, 0xc3, 0xc4, 0xad, 0x74, 0x87,
- 0x2d, 0x16, 0x4f, 0xa1, 0xf8, 0x20, 0xf5, 0xde, 0xa3, 0xc5, 0x0c, 0x3b,
- 0xde, 0x44, 0x48, 0x0f, 0x3c, 0xdc, 0x7e, 0x10, 0x8b, 0x87, 0xc4, 0x3b,
- 0xb0, 0x95, 0xbf, 0x61, 0x1e, 0xad, 0x07, 0x52, 0xfd, 0x0b, 0x84, 0xa9,
- 0x46, 0xb0, 0x32, 0xd5, 0x22, 0x80, 0x35, 0x26, 0x41, 0xf8, 0x11, 0x72,
- 0xb1, 0x31, 0x6f, 0x5a, 0x75, 0xcc, 0x67, 0xe0, 0xb2, 0x50, 0x89, 0xb2,
- 0x66, 0x6e, 0xee, 0xa0, 0x41, 0x8d, 0x00, 0x2a, 0xa7, 0x9d, 0xa5, 0x11,
- 0x2b, 0x07, 0x95, 0x3a, 0x55, 0x8c, 0x67, 0xb1, 0xe5, 0x2d, 0xd4, 0xd1,
- 0x3e, 0x29, 0xed, 0xa5, 0x59, 0x97, 0x7b, 0xdf, 0x92, 0x10, 0x0b, 0x04,
- 0x89, 0x27, 0xa0, 0xa2, 0x93, 0x18, 0x7f, 0x47, 0x84, 0x1c, 0xc6, 0xd6,
- 0x8f, 0x73, 0x81, 0xa0, 0xfa, 0xe5, 0x3e, 0xd8, 0xbf, 0x56, 0x1a, 0x76,
- 0xf4, 0xc4, 0x0f, 0x7a, 0x29, 0x9d, 0x32, 0x5d, 0x41, 0xe0, 0x07, 0xb9,
- 0xd3, 0x3f, 0x7e, 0xff, 0x90, 0x89, 0xce, 0xdc, 0xf1, 0x1d, 0x54, 0xb6,
- 0x67, 0x7f, 0x4d, 0x71, 0x9a, 0x4a, 0x5f, 0x80, 0x0d, 0x5c, 0x77, 0xd5,
- 0x50, 0x7c, 0x41, 0x56, 0x7e, 0x99, 0x0a, 0xeb, 0x66, 0x1f, 0xd2, 0x55,
- 0xc3, 0xc6, 0x6c, 0xc5, 0xfc, 0x34, 0x40, 0x2c, 0x05, 0x29, 0x05, 0x7c,
- 0xca, 0xe6, 0x8d, 0xd3, 0xb0, 0xca, 0x84, 0x27, 0x50, 0x7c, 0x6b, 0x17,
- 0x1b, 0x22, 0xe4, 0x7f, 0xe6, 0x44, 0x94, 0x06, 0x4b, 0xb3, 0xb7, 0xbb,
- 0x98, 0x81, 0x44, 0x0b, 0xf5, 0x66, 0xcb, 0xad, 0xf2, 0x9a, 0xe1, 0x47,
- 0xf3, 0x97, 0xa9, 0xb2, 0xc2, 0xca, 0xcd, 0x98, 0x78, 0x60, 0xdc, 0x6e,
- 0x87, 0x55, 0x47, 0xf3, 0xae, 0x84, 0xdd, 0x9a, 0xe9, 0x1a, 0x63, 0x83,
- 0xea, 0x23, 0x09, 0x67, 0x34, 0x83, 0x00, 0x6e, 0x5e, 0x58, 0xb8, 0x89,
- 0x04, 0x08, 0x0a, 0x55, 0x9e, 0x78, 0xc9, 0xff, 0xb9, 0xb5, 0x2c, 0xdd,
- 0x3b, 0x0c, 0x58, 0x07, 0x8b, 0xb4, 0x6a, 0xc4, 0x64, 0xa3, 0x5e, 0x5b,
- 0xfe, 0x4d, 0xd0, 0x74, 0x01, 0x1b, 0xdf, 0x10, 0x45, 0x2b, 0xd6, 0x9e,
- 0xa9, 0x60, 0x1f, 0xad, 0x46, 0xa1, 0x8c, 0xf8, 0xf6, 0xa9, 0x8a, 0x27,
- 0xea, 0x51, 0x37, 0x84, 0xcf, 0xe5, 0xd7, 0x51, 0xd6, 0x40, 0x39, 0x39,
- 0x5f, 0xf6, 0x96, 0x33, 0xd9, 0x86, 0x8d, 0x38, 0xb6, 0x26, 0x04, 0x14,
- 0x07, 0x46, 0x3e, 0xd0, 0xc5, 0xf6, 0x0d, 0xa0, 0x47, 0x2b, 0xc8, 0x73,
- 0x18, 0x6b, 0xd3, 0x0e, 0x18, 0xcc, 0x43, 0x98, 0xd0, 0xcf, 0x1c, 0xe4,
- 0x4a, 0x41, 0x6a, 0x56, 0x2d, 0xf0, 0x93, 0x89, 0x81, 0x6c, 0xce, 0x04,
- 0x1a, 0x23, 0x05, 0x91, 0x4f, 0x48, 0x44, 0x3a, 0xaa, 0x03, 0xa5, 0x4a,
- 0xa9, 0x20, 0x2c, 0xbe, 0x6a, 0x81, 0xe6, 0xa9, 0xf8, 0xf0, 0x2b, 0x29,
- 0xa1, 0xe0, 0xc4, 0xce, 0xf5, 0xda, 0x25, 0x70, 0x49, 0xcc, 0xa0, 0x4b,
- 0x24, 0x49, 0x4f, 0x11, 0xc4, 0x3b, 0x22, 0x89, 0x9a, 0xb4, 0xf4, 0xcd,
- 0xa3, 0xee, 0xb0, 0x76, 0x13, 0xc4, 0xbb, 0xaf, 0x03, 0x7f, 0x27, 0xf3,
- 0x38, 0xbc, 0xde, 0x7c, 0x0c, 0x39, 0x14, 0xb7, 0x14, 0xbb, 0x5c, 0xae,
- 0x89, 0xf8, 0xf7, 0xd6, 0x00, 0x78, 0xf4, 0xb0, 0x52, 0x16, 0xf5, 0x54,
- 0xc5, 0x93, 0xf7, 0x6d, 0x0d, 0xe8, 0x58, 0xe2, 0xa1, 0xa7, 0xdc, 0x49,
- 0xdb, 0xc8, 0x79, 0xbc, 0xc3, 0x97, 0x7b, 0x6c, 0x82, 0x7b, 0xbe, 0xe9,
- 0x79, 0xac, 0x4a, 0xa4, 0x7c, 0x49, 0x83, 0x58, 0x3a, 0xe4, 0xf5, 0x68,
- 0x5c, 0xb7, 0x7f, 0x2d, 0xfe, 0x6b, 0x96, 0xc7, 0x8b, 0x67, 0xb5, 0xd0,
- 0xa1, 0x0a, 0x16, 0x62, 0x64, 0x53, 0xea, 0x29, 0x80, 0x93, 0xf9, 0xd6,
- 0xa0, 0xc5, 0x1b, 0x3a, 0x1e, 0xab, 0x51, 0x88, 0xe0, 0x9e, 0xd4, 0xf6,
- 0xbf, 0x70, 0x2d, 0x29, 0x2e, 0x08, 0xa9, 0x31, 0x78, 0x0a, 0x15, 0x30,
- 0x9f, 0x2e, 0xc8, 0x41, 0x65, 0x8e, 0x97, 0x51, 0x5e, 0x73, 0x46, 0x42,
- 0x74, 0x84, 0xfd, 0x9b, 0x4a, 0x8a, 0x68, 0x28, 0x45, 0xd0, 0x5d, 0x65,
- 0x08, 0xb3, 0xf5, 0x40, 0x8a, 0x29, 0x8e, 0x70, 0x02, 0x49, 0x6a, 0x01,
- 0xd6, 0x41, 0x4a, 0xf8, 0x15, 0xa3, 0x70, 0x59, 0xe9, 0xa2, 0xe2, 0x76,
- 0x8c, 0x60, 0x33, 0xb3, 0xfa, 0x8b, 0xb4, 0x90, 0x6f, 0x92, 0xc8, 0x21,
- 0x59, 0xc0, 0x3a, 0x30, 0x46, 0xeb, 0x49, 0xd8, 0x85, 0x63, 0x5a, 0x23,
- 0x87, 0xe1, 0xa7, 0xc0, 0x1a, 0xb0, 0xc7, 0xc4, 0x40, 0x4d, 0x11, 0x9c,
- 0xe3, 0xd4, 0x6b, 0xef, 0x68, 0xc8, 0x2c, 0x31, 0xcd, 0x3e, 0xee, 0x55,
- 0x10, 0x67, 0x77, 0x7b, 0x30, 0xc1, 0xd0, 0x23, 0x6c, 0x65, 0x6f, 0xfb,
- 0x2e, 0x62, 0x33, 0x42, 0x63, 0xdc, 0xca, 0x86, 0xf1, 0x0e, 0xb3, 0xb0,
- 0x69, 0x11, 0x65, 0xe1, 0x6e, 0x6c, 0x03, 0x49, 0x79, 0xe8, 0xf1, 0x2e,
- 0x8d, 0x94, 0xc8, 0xa8, 0x98, 0x2d, 0x3f, 0xfe, 0xbd, 0x2d, 0x75, 0x45,
- 0xd1, 0x7a, 0x09, 0xf8, 0x90, 0x49, 0xbd, 0x4a, 0x3b, 0xa4, 0xa3, 0x26,
- 0xb8, 0x62, 0x66, 0x97, 0xd9, 0xc1, 0xca, 0x12, 0x49, 0xe1, 0x27, 0x93,
- 0x4f, 0x60, 0xfa, 0xb3, 0x4f, 0x4c, 0xdb, 0x87, 0x6c, 0x3b, 0x50, 0x47,
- 0xe2, 0xd8, 0x5b, 0x13, 0x99, 0xf0, 0x2b, 0xbb, 0x32, 0x33, 0xfd, 0x7d,
- 0x15, 0x0f, 0x2c, 0xee, 0x85, 0x83, 0xc0, 0x53, 0x79, 0x3e, 0x51, 0xfe,
- 0x7c, 0x06, 0x73, 0x49, 0x49, 0x4f, 0x5a, 0x22, 0x36, 0x8f, 0x30, 0x8a,
- 0xef, 0x84, 0xd6, 0x15, 0x26, 0x48, 0xe7, 0x1e, 0xb1, 0xaa, 0x82, 0xd0,
- 0xc7, 0x0b, 0x97, 0x7b, 0x6c, 0x2d, 0x49, 0x7e, 0x6d, 0xe7, 0xa3, 0x05,
- 0x80, 0xd7, 0x42, 0xa9, 0xc6, 0x66, 0x98, 0x30, 0xe3, 0x8a, 0x79, 0x86,
- 0x9c, 0x2b, 0xbc, 0x4a, 0xe6, 0x0d, 0xc5, 0xe5, 0x1a, 0x92, 0xd9, 0xef,
- 0x63, 0x52, 0x03, 0x88, 0x36, 0xc5, 0x83, 0x65, 0xf8, 0xf1, 0x87, 0xce,
- 0x43, 0xfe, 0x89, 0x58, 0x07, 0x6a, 0xad, 0x85, 0x37, 0x0f, 0xdf, 0x9e,
- 0xa5, 0x62, 0xa9, 0xd2, 0x41, 0x3f, 0x7f, 0xb7, 0xf1, 0xe2, 0x58, 0xb5,
- 0xda, 0xdf, 0xd1, 0xba, 0x36, 0x2c, 0xe7, 0x43, 0x31, 0x07, 0xc5, 0xf5,
- 0x79, 0xc9, 0x31, 0xd7, 0x1d, 0x97, 0x57, 0x9a, 0x8e, 0x3f, 0xac, 0x00,
- 0x49, 0x00, 0x2f, 0xad, 0xac, 0xe7, 0x65, 0x7c, 0xbf, 0xec, 0x85, 0x57,
- 0xe6, 0xcc, 0x07, 0x34, 0x02, 0x36, 0xa8, 0x6a, 0x9f, 0x3a, 0x9a, 0x2f,
- 0x34, 0x93, 0x1f, 0x7d, 0x38, 0x54, 0xe3, 0x54, 0x54, 0xee, 0x84, 0x55,
- 0xe1, 0x0d, 0xc1, 0x08, 0x3e, 0x33, 0x9e, 0x2a, 0xc3, 0x6a, 0x83, 0xc4,
- 0x75, 0xed, 0xbc, 0x5f, 0xd9, 0x04, 0xd7, 0x77, 0x91, 0xb1, 0xa0, 0xf2,
- 0xef, 0x81, 0xb0, 0x8b, 0x53, 0x5f, 0x71, 0xec, 0xa5, 0x0b, 0xbe, 0xf2,
- 0x92, 0x7e, 0x0a, 0x34, 0xeb, 0x5d, 0x65, 0xc7, 0xa9, 0x44, 0x10, 0xfb,
- 0xd3, 0xef, 0xe1, 0xbc, 0x06, 0x65, 0x68, 0x22, 0xfb, 0x43, 0x2c, 0xcf,
- 0x8e, 0x6a, 0x28, 0xdb, 0x0b, 0xf4, 0xaf, 0x01, 0x65, 0x97, 0xd6, 0xe5,
- 0x91, 0x20, 0x13, 0x2c, 0xb1, 0xc2, 0xd3, 0xc3, 0x76, 0x90, 0xf8, 0xcd,
- 0x00, 0xde, 0x93, 0xf8, 0x4e, 0xcc, 0xdc, 0xca, 0x9a, 0xf0, 0xbd, 0x9b,
- 0xd6, 0x57, 0xb1, 0x13, 0xd9, 0xe0, 0xe1, 0x9e, 0x21, 0x74, 0xa9, 0x76,
- 0xc0, 0x0c, 0xad, 0x4f, 0x5d, 0xfe, 0x23, 0x32, 0x5a, 0x10, 0x75, 0x5b,
- 0x05, 0xdf, 0xdc, 0x5b, 0x94, 0xcb, 0xe1, 0x9f, 0x13, 0x51, 0xf5, 0x50,
- 0x36, 0x3b, 0xf2, 0x90, 0x9c, 0x9a, 0xc8, 0x10, 0x88, 0xa9, 0xec, 0x22,
- 0x1e, 0x96, 0x70, 0xe8, 0x9e, 0x69, 0xc1, 0x22, 0xd9, 0x14, 0x15, 0x2e,
- 0xbc, 0x03, 0x96, 0x9e, 0x1d, 0x00, 0x10, 0x16, 0x4f, 0x56, 0xf0, 0x29,
- 0x47, 0x0a, 0x45, 0x34, 0x27, 0x21, 0x3b, 0x67, 0x33, 0xf9, 0xdd, 0x29,
- 0x3a, 0xf2, 0xe4, 0x56, 0x34, 0x46, 0xbe, 0xd8, 0x42, 0x29, 0x11, 0x7f,
- 0x30, 0xc1, 0xbe, 0xa5, 0xc8, 0x9d, 0x7b, 0x2e, 0x4e, 0xcf, 0xba, 0x91,
- 0xb4, 0xbf, 0x0a, 0x04, 0x00, 0x49, 0x83, 0x6b, 0x46, 0x5f, 0x3b, 0xfa,
- 0xf7, 0x40, 0x8d, 0x85, 0x47, 0x14, 0x58, 0xb3, 0xa5, 0x66, 0x30, 0xfd,
- 0x4a, 0x80, 0xa4, 0x61, 0x3b, 0x7c, 0xb4, 0xcc, 0x34, 0x8c, 0xc6, 0xb6,
- 0x10, 0xa9, 0x76, 0xc9, 0x11, 0xd7, 0x8a, 0x51, 0x86, 0x17, 0x89, 0x28,
- 0xab, 0xd5, 0x03, 0x88, 0x74, 0x5b, 0x81, 0xbd, 0x3a, 0x57, 0xfe, 0x66,
- 0x25, 0xd0, 0x92, 0x15, 0x84, 0x02, 0x0f, 0x51, 0xa8, 0x58, 0xcf, 0x77,
- 0x65, 0x10, 0x61, 0xe8, 0xe6, 0xab, 0xb1, 0xba, 0x3b, 0x08, 0xd6, 0xba,
- 0x5f, 0xf5, 0x74, 0xc5, 0x07, 0x60, 0xfd, 0xd3, 0xc8, 0x52, 0x4e, 0xdb,
- 0xc3, 0xe3, 0x6d, 0x81, 0x20, 0x51, 0x01, 0x9a, 0x5e, 0x32, 0x4e, 0x80,
- 0x5a, 0xcb, 0x83, 0xd7, 0xa4, 0xd9, 0xfb, 0xed, 0x3d, 0x80, 0xa1, 0x83,
- 0x81, 0x91, 0xc0, 0x0b, 0xff, 0x67, 0xd8, 0x8b, 0xd0, 0x12, 0x0b, 0xd4,
- 0x2b, 0x8e, 0x0d, 0x0f, 0xfc, 0xc7, 0xb3, 0xf1, 0xe3, 0xf3, 0x5e, 0x0c,
- 0xb6, 0x6b, 0x9d, 0xdc, 0x22, 0x70, 0x31, 0x54, 0xe8, 0x41, 0xfe, 0xa1,
- 0xe1, 0x4f, 0xfa, 0x81, 0xfb, 0xae, 0x72, 0x16, 0xb8, 0x87, 0xc9, 0x31,
- 0x9d, 0x42, 0x47, 0x4a, 0x20, 0xae, 0x63, 0x16, 0x0d, 0xfa, 0xf1, 0x27,
- 0x19, 0x47, 0xee, 0x45, 0x84, 0x29, 0x9a, 0xb6, 0x42, 0xef, 0xbd, 0x15,
- 0xa8, 0x34, 0x33, 0x38, 0x9c, 0x9d, 0xbb, 0x5c, 0x03, 0xf3, 0xcf, 0xcf,
- 0x6d, 0x2e, 0xd5, 0x88, 0xf8, 0xdd, 0xfc, 0xc0, 0x4a, 0xdb, 0x69, 0xd9,
- 0x62, 0x89, 0x24, 0x46, 0xee, 0xa4, 0xb9, 0x95, 0xe6, 0xaf, 0x7d, 0x53,
- 0xec, 0x41, 0xae, 0x70, 0xfe, 0x4f, 0x31, 0xe3, 0xa2, 0x59, 0x2c, 0xa1,
- 0x53, 0x8b, 0xb6, 0x3b, 0x39, 0xc1, 0xa4, 0xa7, 0x9e, 0xaa, 0x00, 0x60,
- 0x9a, 0x5f, 0x56, 0x51, 0xf3, 0x7b, 0x28, 0x84, 0x36, 0x1a, 0xc1, 0x2d,
- 0xc8, 0xed, 0xf8, 0x48, 0x48, 0x1d, 0x39, 0x4d, 0x3d, 0xce, 0x30, 0x90,
- 0x29, 0x33, 0x6f, 0x9a, 0xce, 0x58, 0xe7, 0x88, 0xac, 0x59, 0xce, 0x85,
- 0x5a, 0x52, 0x2b, 0x6c, 0xb7, 0xe9, 0x2e, 0xa9, 0xd9, 0x9a, 0xea, 0x1c,
- 0x47, 0xb2, 0x59, 0xff, 0x73, 0x76, 0x21, 0x40, 0xe1, 0xde, 0x32, 0xb8,
- 0x73, 0x3d, 0xa5, 0x44, 0x66, 0x79, 0xa1, 0xfe, 0xaf, 0xf6, 0x8a, 0x97,
- 0x09, 0x5c, 0x8b, 0x64, 0x38, 0x9f, 0xe1, 0x59, 0x38, 0x18, 0xe9, 0xc0,
- 0xd6, 0xa2, 0xac, 0x74, 0xa9, 0xfd, 0x4a, 0x0d, 0xf6, 0x47, 0x00, 0x2b,
- 0x09, 0x46, 0x38, 0x1c, 0xa4, 0x9f, 0x63, 0x20, 0x18, 0x75, 0x5a, 0xb8,
- 0xc4, 0xbc, 0xd6, 0x6b, 0xc8, 0x14, 0x72, 0x03, 0xe4, 0x05, 0xd4, 0x4e,
- 0x66, 0x20, 0x42, 0xa2, 0x8f, 0x96, 0xe7, 0xaf, 0xd3, 0xfb, 0xa8, 0x88,
- 0x9b, 0xe3, 0xaa, 0xcd, 0xab, 0xce, 0x8f, 0x07, 0x6d, 0xef, 0x98, 0xce,
- 0xdb, 0x42, 0x5b, 0xf4, 0x61, 0x57, 0x62, 0x27, 0x8a, 0x53, 0x5e, 0xf8,
- 0x3e, 0xf6, 0x7f, 0xde, 0x5e, 0x3b, 0x1b, 0x13, 0x2e, 0x30, 0x46, 0x4b,
- 0x6b, 0xb7, 0xbb, 0x33, 0x31, 0xc0, 0xfa, 0x40, 0xab, 0x68, 0x72, 0xe3,
- 0x92, 0x30, 0x47, 0xd6, 0x30, 0x60, 0x42, 0x5b, 0x88, 0x8d, 0xa6, 0x56,
- 0xe4, 0xac, 0x33, 0x2e, 0xca, 0x05, 0x1f, 0x60, 0xaf, 0xde, 0x7f, 0xa9,
- 0xda, 0x3f, 0xa8, 0x21, 0xf6, 0xfc, 0x98, 0x7d, 0xc4, 0x1e, 0xb0, 0xa9,
- 0x56, 0x2d, 0x8d, 0xea, 0x03, 0x51, 0x48, 0xac, 0xe8, 0x22, 0xc7, 0x8b,
- 0xef, 0x91, 0x0e, 0xcf, 0x0c, 0xe9, 0x38, 0x43, 0x99, 0xa8, 0x98, 0x4f,
- 0xfa, 0xe3, 0x03, 0xa6, 0x4f, 0xd4, 0x0d, 0x98, 0x5b, 0x50, 0x28, 0xd7,
- 0xe7, 0x46, 0xd7, 0xad, 0x43, 0xb8, 0x56, 0x2a, 0x2f, 0x7c, 0x39, 0x67,
- 0xf4, 0x62, 0x0e, 0xc0, 0xa8, 0x87, 0xb5, 0x81, 0xe2, 0x13, 0x9f, 0xe4,
- 0xdd, 0x72, 0xf2, 0x07, 0xca, 0xac, 0x6d, 0xb2, 0x96, 0x53, 0x5a, 0x8f,
- 0x66, 0x3c, 0xb4, 0xc1, 0x4f, 0x9a, 0x82, 0x55, 0xcf, 0x0e, 0x27, 0x5f,
- 0xc7, 0xd2, 0x28, 0x27, 0x7f, 0x22, 0x6e, 0xa5, 0xe7, 0x32, 0x56, 0x51,
- 0x18, 0xe0, 0x85, 0x6d, 0x1f, 0xfc, 0x25, 0x08, 0x18, 0x60, 0x57, 0xfc,
- 0x66, 0x94, 0x2c, 0x4c, 0xbe, 0x00, 0xab, 0x9e, 0x73, 0x9b, 0x06, 0xd3,
- 0xb5, 0x24, 0xa8, 0x8f, 0xb1, 0x33, 0x99, 0x4c, 0xb4, 0x13, 0x07, 0xcd,
- 0x04, 0xdd, 0x77, 0xdc, 0xee, 0x96, 0x02, 0x59, 0xe8, 0x22, 0x07, 0x16,
- 0x2e, 0x41, 0xc9, 0xc4, 0x59, 0x70, 0x37, 0x0f, 0x14, 0xc9, 0xcf, 0x90,
- 0x57, 0xc2, 0x0d, 0xa3, 0xd7, 0x66, 0xb6, 0x7d, 0x10, 0xd4, 0xfc, 0x18,
- 0x66, 0xad, 0xea, 0x5e, 0x64, 0x6c, 0x12, 0x66, 0x3d, 0x96, 0xa5, 0xa8,
- 0x9c, 0x49, 0x5c, 0xd4, 0x8d, 0x1c, 0xc3, 0x38, 0xfe, 0x53, 0xc2, 0x71,
- 0xd1, 0xc6, 0x41, 0xe2, 0xb9, 0x17, 0x74, 0x6e, 0xcc, 0xf8, 0x72, 0x28,
- 0x38, 0x4e, 0x54, 0x9b, 0x0e, 0xa3, 0x3a, 0x43, 0x5c, 0xd5, 0x83, 0x06,
- 0xbb, 0x46, 0x16, 0x6e, 0xe3, 0x8a, 0xd5, 0x1e, 0x7f, 0x88, 0x62, 0xac,
- 0x35, 0x89, 0xfb, 0xbe, 0x96, 0x1d, 0x87, 0x37, 0xb7, 0x91, 0x63, 0xae,
- 0x77, 0x7b, 0x66, 0x60, 0xc1, 0x3e, 0x80, 0x56, 0xb1, 0xc8, 0x0d, 0x16,
- 0xde, 0x38, 0x82, 0x66, 0x99, 0x2b, 0x35, 0xd8, 0xb4, 0x5b, 0x4b, 0x3e,
- 0x93, 0x96, 0x59, 0xf8, 0x96, 0x7e, 0x7b, 0x27, 0xf4, 0x62, 0xb7, 0xda,
- 0x89, 0xa7, 0x34, 0x47, 0xed, 0xb3, 0x42, 0x20, 0xeb, 0xcd, 0xf6, 0xa3,
- 0x9f, 0xf7, 0x48, 0x91, 0x17, 0xd2, 0x21, 0xed, 0x5a, 0x22, 0x39, 0xc9,
- 0x76, 0x95, 0x36, 0xd9, 0x97, 0x0f, 0x19, 0xce, 0xd3, 0xbc, 0x74, 0x7d,
- 0x53, 0x37, 0x3b, 0x4a, 0x97, 0xb7, 0xf8, 0x7e, 0xdd, 0x4c, 0x5f, 0xae,
- 0x5c, 0x0b, 0xab, 0x4c, 0x34, 0xa1, 0x7e, 0x34, 0x35, 0xf4, 0xfc, 0x92,
- 0xab, 0x2e, 0x6a, 0x15, 0xce, 0x84, 0xae, 0x70, 0xae, 0x85, 0x21, 0xe6,
- 0x41, 0x13, 0x31, 0xe0, 0x8f, 0xab, 0x82, 0xe3, 0x09, 0xaf, 0xa4, 0x7c,
- 0xb4, 0xb9, 0xb7, 0xc0, 0x67, 0x08, 0xc9, 0x9d, 0xcd, 0x0b, 0x3c, 0xa0,
- 0x0c, 0xde, 0x49, 0x2f, 0x40, 0x19, 0x95, 0x64, 0xb9, 0x7c, 0x2a, 0x72,
- 0xdd, 0xa2, 0x92, 0x0a, 0x21, 0xeb, 0x8c, 0xc3, 0x6d, 0x52, 0xe7, 0x05,
- 0x50, 0x01, 0x55, 0x19, 0x2f, 0xbd, 0x1b, 0x72, 0x73, 0xfe, 0x82, 0x9f,
- 0xbf, 0xa0, 0xfe, 0x19, 0x7c, 0x42, 0x6d, 0x76, 0x32, 0x47, 0x36, 0x15,
- 0x2e, 0xde, 0xe8, 0xe6, 0xca, 0x07, 0xa3, 0x6b, 0x40, 0x99, 0x96, 0xcd,
- 0x19, 0xea, 0x7e, 0xc9, 0x87, 0x9d, 0x3d, 0xa0, 0x82, 0x88, 0xe7, 0xe4,
- 0x34, 0x9f, 0xa5, 0x27, 0xdf, 0xae, 0x03, 0x37, 0xa8, 0x35, 0x64, 0x02,
- 0x09, 0x09, 0x9e, 0xec, 0x38, 0x0a, 0xff, 0x79, 0x8c, 0x9a, 0x87, 0x66,
- 0xcd, 0xe4, 0xf4, 0x9d, 0xa9, 0x07, 0x96, 0x36, 0xae, 0x2e, 0x4e, 0xc5,
- 0xe9, 0x86, 0xb2, 0x8e, 0x71, 0x5d, 0xe8, 0xee, 0x84, 0xf3, 0x30, 0x2a,
- 0x58, 0x1a, 0x80, 0xb8, 0xaa, 0xb8, 0x1d, 0xc4, 0xae, 0x59, 0x91, 0xf3,
- 0x16, 0x9b, 0xa3, 0x8a, 0xa3, 0x26, 0xb2, 0x0a, 0xe5, 0x58, 0xb7, 0x96,
- 0x87, 0xfb, 0x00, 0xe4, 0x50, 0x7c, 0xb1, 0x77, 0x3a, 0x18, 0xc2, 0xe3,
- 0xc1, 0x12, 0xa6, 0x0d, 0x06, 0xeb, 0x80, 0x6c, 0x5a, 0xee, 0x34, 0xcc,
- 0x1c, 0x87, 0x35, 0x46, 0x1d, 0x05, 0x83, 0xd8, 0x91, 0x22, 0xaa, 0xf6,
- 0xad, 0x87, 0xab, 0x76, 0x18, 0x79, 0xe2, 0x09, 0xc3, 0xa3, 0x15, 0x67,
- 0x3a, 0x7c, 0x0f, 0xa0, 0x4c, 0x7b, 0xfc, 0xfc, 0xdd, 0x5c, 0xe4, 0x86,
- 0x58, 0x13, 0xb8, 0x97, 0xae, 0x8c, 0x75, 0xc8, 0x02, 0x1e, 0x33, 0x45,
- 0xa9, 0x54, 0x09, 0x15, 0x53, 0x4f, 0x28, 0x47, 0x4d, 0x5f, 0xd0, 0xc7,
- 0x09, 0xbd, 0x93, 0xb0, 0x08, 0x79, 0x05, 0xbc, 0xbc, 0xaf, 0x2c, 0xbd,
- 0xbb, 0x21, 0xd1, 0x60, 0xb8, 0x81, 0x4c, 0x6c, 0x5e, 0x45, 0x39, 0xa3,
- 0x31, 0x54, 0xb7, 0x82, 0xef, 0x86, 0xe4, 0x5e, 0xca, 0xd6, 0xb8, 0x31,
- 0xa2, 0x4c, 0x84, 0x5b, 0xac, 0xe5, 0x29, 0xbf, 0xbf, 0x89, 0xb4, 0x4c,
- 0xd3, 0x69, 0x66, 0x50, 0xeb, 0xda, 0x7d, 0x00, 0xbb, 0x45, 0x0f, 0xe1,
- 0xd1, 0x30, 0x1a, 0xc6, 0x94, 0x66, 0xdc, 0x01, 0x75, 0xce, 0xf8, 0xfc,
- 0xd9, 0xce, 0xcf, 0x1f, 0x9e, 0x5a, 0x55, 0xa4, 0x3e, 0xe6, 0x51, 0xc7,
- 0x74, 0x40, 0x82, 0x09, 0xea, 0xa0, 0xf5, 0xb2, 0x70, 0x9f, 0x0e, 0xfb,
- 0x46, 0x8a, 0x69, 0xbf, 0x07, 0x92, 0xdc, 0x74, 0x03, 0x70, 0xc6, 0x44,
- 0x81, 0x66, 0x40, 0xc7, 0xf5, 0xb8, 0xf0, 0x45, 0x0f, 0xca, 0xd8, 0xb0,
- 0x9e, 0x48, 0x94, 0xff, 0x85, 0xcb, 0x7b, 0xec, 0x67, 0x5d, 0xfe, 0xe9,
- 0x13, 0xd1, 0x67, 0x95, 0xd9, 0x35, 0x9e, 0x8a, 0x53, 0x4d, 0x6b, 0x9d,
- 0x42, 0x53, 0xb1, 0x6b, 0x51, 0x1e, 0x35, 0x40, 0x81, 0x92, 0x91, 0x5f,
- 0x1f, 0x8e, 0xbe, 0x37, 0xd3, 0x85, 0xab, 0x85, 0x37, 0x1c, 0x0f, 0xae,
- 0xd9, 0xf7, 0xa2, 0x75, 0x3d, 0xd9, 0xd7, 0x2a, 0x80, 0xb0, 0x4c, 0x14,
- 0x04, 0x40, 0xc5, 0xba, 0x0e, 0xbe, 0xab, 0xcc, 0x38, 0x35, 0x62, 0x6c,
- 0xa5, 0xce, 0x49, 0x15, 0x2a, 0x10, 0xb5, 0x6a, 0xd2, 0x3b, 0xd2, 0x6a,
- 0xad, 0x2e, 0x34, 0x46, 0x8b, 0x78, 0x57, 0x6e, 0xc4, 0xde, 0x65, 0x68,
- 0x05, 0x8f, 0xd6, 0x6e, 0x34, 0xb9, 0xaa, 0x80, 0x77, 0xff, 0x6c, 0x1a,
- 0x37, 0x87, 0xdd, 0x33, 0x13, 0x33, 0xa7, 0xa9, 0x3a, 0x90, 0x32, 0x7b,
- 0x9b, 0x21, 0x31, 0xc8, 0xf5, 0x4c, 0xa6, 0x73, 0x42, 0x79, 0x46, 0x14,
- 0x1b, 0xef, 0xf4, 0x78, 0xd9, 0x7e, 0x6f, 0x31, 0xaa, 0x59, 0x97, 0x34,
- 0xe5, 0xe6, 0x67, 0xf3, 0x86, 0xf5, 0x61, 0xe7, 0x51, 0x6d, 0xce, 0xb3,
- 0xdc, 0x86, 0xc7, 0x55, 0x43, 0xfa, 0x38, 0x78, 0xb0, 0x8d, 0x03, 0x9c,
- 0xe4, 0x6c, 0xca, 0x73, 0x94, 0xa1, 0x0c, 0xb8, 0x11, 0xda, 0x0c, 0x0b,
- 0x18, 0x1b, 0xd0, 0x99, 0xe7, 0xa9, 0x0d, 0xc3, 0x36, 0xd7, 0x8c, 0x16,
- 0xad, 0x16, 0x1f, 0xb2, 0x3c, 0x07, 0x32, 0x11, 0x6c, 0xd2, 0x8f, 0x33,
- 0x37, 0x5c, 0x3e, 0x4f, 0x7a, 0x76, 0xf7, 0x85, 0xcc, 0x68, 0x1a, 0xf9,
- 0x26, 0x74, 0x42, 0xc9, 0xea, 0x21, 0x7e, 0x74, 0x3c, 0x4f, 0xde, 0xfb,
- 0xd7, 0x83, 0x62, 0x12, 0xc7, 0x4f, 0xfc, 0x47, 0x18, 0x9d, 0xc5, 0xf5,
- 0xe9, 0xd7, 0xaa, 0x76, 0x20, 0x99, 0x79, 0xae, 0x9b, 0x7a, 0xde, 0x8b,
- 0x95, 0xc2, 0xa5, 0xa3, 0x6a, 0x30, 0x9b, 0x99, 0x63, 0x34, 0x7c, 0xd1,
- 0x53, 0xa1, 0x6c, 0xd6, 0xed, 0x7d, 0x8c, 0xba, 0xc8, 0x21, 0xf3, 0xe1,
- 0x31, 0x55, 0x3d, 0x88, 0x87, 0x04, 0xc7, 0xc9, 0x65, 0x0c, 0x53, 0x1e,
- 0xd4, 0xd9, 0xaa, 0xda, 0xc2, 0x14, 0x88, 0xf2, 0x07, 0x2c, 0x12, 0x4d,
- 0x79, 0x54, 0xaa, 0xd9, 0x47, 0x95, 0xf9, 0x7e, 0x26, 0x89, 0x4b, 0x63,
- 0x7e, 0x44, 0x06, 0x0e, 0xe2, 0x8d, 0x9a, 0x0a, 0xc3, 0xee, 0x55, 0x13,
- 0x55, 0x04, 0xcc, 0xb5, 0x2e, 0xa0, 0x0d, 0xec, 0x76, 0x84, 0xc1, 0x1e,
- 0xdd, 0xe6, 0xfa, 0x54, 0x6e, 0x38, 0x30, 0x6f, 0xcc, 0xa4, 0x8d, 0x76,
- 0x1e, 0xa3, 0x8e, 0x2c, 0x5e, 0x37, 0xeb, 0x0b, 0xf4, 0xb5, 0x80, 0xde,
- 0x58, 0x13, 0x5a, 0x52, 0xdc, 0x65, 0x99, 0x1a, 0x1b, 0x75, 0x0c, 0xbd,
- 0x83, 0xe8, 0x90, 0x8e, 0xa9, 0xbf, 0x42, 0x22, 0xe1, 0x3a, 0x31, 0x4e,
- 0x54, 0xad, 0xd4, 0x6f, 0x80, 0xb4, 0xb5, 0x82, 0x05, 0x20, 0xd7, 0x38,
- 0xd7, 0xeb, 0x25, 0x33, 0xe9, 0x4b, 0xc3, 0x5e, 0xd1, 0x11, 0xb0, 0xd9,
- 0x8e, 0x90, 0x48, 0x2a, 0xe3, 0xa0, 0x60, 0x16, 0x70, 0xe3, 0xd1, 0x45,
- 0x11, 0x64, 0x91, 0x69, 0x87, 0x1c, 0xbb, 0x91, 0xc4, 0x43, 0x12, 0x62,
- 0x99, 0x69, 0xe5, 0x96, 0x01, 0x15, 0xdb, 0xdf, 0x05, 0x55, 0x34, 0xbb,
- 0xd6, 0x76, 0x89, 0xcd, 0xb5, 0x4f, 0x2e, 0xa7, 0x6e, 0x15, 0xc9, 0xc0,
- 0x8e, 0xa8, 0x63, 0x79, 0x12, 0xfb, 0x7e, 0x69, 0x8f, 0x52, 0x5e, 0xe7,
- 0x76, 0x16, 0x28, 0x76, 0xca, 0xcb, 0xd8, 0x0e, 0x4a, 0x93, 0x9d, 0x16,
- 0x68, 0x98, 0xf8, 0xc3, 0x39, 0xb2, 0x2d, 0xea, 0xba, 0x72, 0x16, 0x33,
- 0xb7, 0xec, 0x61, 0x9e, 0x94, 0x32, 0x01, 0x22, 0xde, 0x66, 0xfd, 0x68,
- 0xfa, 0xcf, 0xf2, 0x52, 0x4f, 0x02, 0xe8, 0x25, 0xd3, 0xa3, 0x5b, 0x29,
- 0xae, 0xe9, 0x62, 0xfa, 0xd6, 0x1a, 0x50, 0x80, 0x95, 0x96, 0xdf, 0x00,
- 0xfc, 0x23, 0xf1, 0x95, 0xef, 0xbb, 0xf5, 0x23, 0x9d, 0x6b, 0xd6, 0xed,
- 0xb4, 0xe2, 0x4a, 0xf6, 0xb8, 0x20, 0x83, 0x6b, 0x45, 0x92, 0x29, 0x5a,
- 0x02, 0xe9, 0xf7, 0x8e, 0x5c, 0x02, 0xde, 0xb4, 0x9a, 0xdf, 0x18, 0x10,
- 0x17, 0x7f, 0xd8, 0x2e, 0x17, 0xc0, 0xf0, 0x6b, 0x3b, 0x88, 0x09, 0x58,
- 0xf2, 0x18, 0x22, 0x09, 0x80, 0x4a, 0xe0, 0x51, 0x6f, 0x7a, 0x70, 0x09,
- 0x1f, 0xe5, 0xfa, 0xa9, 0x4d, 0x24, 0x1f, 0x18, 0x1c, 0x74, 0xcd, 0x87,
- 0x04, 0xfd, 0x85, 0x33, 0x4c, 0x28, 0xbd, 0xa3, 0x66, 0x6c, 0x99, 0x7e,
- 0x50, 0x5e, 0xb5, 0x22, 0x33, 0x92, 0xd4, 0xd8, 0x82, 0x4e, 0x38, 0xbe,
- 0xcb, 0x3d, 0x5f, 0x19, 0xd1, 0x0f, 0x8b, 0xa1, 0x78, 0x08, 0x1c, 0x10,
- 0x0b, 0x77, 0xa7, 0x39, 0x2e, 0x91, 0x83, 0xee, 0x1d, 0x36, 0xd8, 0x77,
- 0x87, 0x8a, 0x38, 0x45, 0x3c, 0xbd, 0xb9, 0x88, 0xbb, 0x1b, 0x20, 0xd1,
- 0x95, 0xb9, 0x8f, 0x03, 0x46, 0xfa, 0xab, 0x70, 0x68, 0x26, 0xd9, 0xb1,
- 0x25, 0x52, 0x5a, 0x77, 0x2d, 0x92, 0xc2, 0x1d, 0xb6, 0x6e, 0xec, 0x67,
- 0xef, 0x34, 0xe2, 0x64, 0xb3, 0xa0, 0xae, 0x0c, 0xd9, 0x36, 0xa1, 0xc7,
- 0xd8, 0xbf, 0x7a, 0x43, 0xbf, 0xc0, 0xc6, 0x90, 0x60, 0x6a, 0x23, 0xc0,
- 0x6a, 0x5d, 0x62, 0x18, 0xac, 0xc1, 0x20, 0x35, 0x17, 0xba, 0x4e, 0x54,
- 0xb7, 0xec, 0xd4, 0xad, 0x99, 0x94, 0xa4, 0xda, 0x57, 0xe7, 0x46, 0xed,
- 0x47, 0xd1, 0xb4, 0xa2, 0x3e, 0x0f, 0x4a, 0xb6, 0xa6, 0x68, 0x3e, 0x94,
- 0xb9, 0x18, 0x30, 0xe0, 0x75, 0x08, 0xe8, 0xf3, 0x21, 0x79, 0x26, 0x68,
- 0x6a, 0x65, 0xb6, 0xbe, 0x03, 0x98, 0x8f, 0x04, 0xad, 0x1e, 0xb0, 0x54,
- 0xd2, 0x28, 0xdd, 0x4a, 0xe9, 0xf3, 0xa0, 0x06, 0xbf, 0x0b, 0x2a, 0xee,
- 0xf8, 0x03, 0x7e, 0x1d, 0x37, 0xc1, 0x32, 0xd1, 0x41, 0xf4, 0x9b, 0xc5,
- 0x02, 0x10, 0x6f, 0x55, 0x5a, 0xec, 0x5b, 0xe7, 0x61, 0x05, 0x17, 0xf0,
- 0xf8, 0xc6, 0x89, 0xe8, 0xad, 0x32, 0x57, 0x14, 0xe5, 0xf8, 0xf5, 0x88,
- 0xd9, 0x73, 0x17, 0x10, 0xa7, 0xc3, 0xf8, 0x78, 0x0b, 0x66, 0xab, 0x63,
- 0x4f, 0x96, 0x5d, 0xdf, 0x36, 0x83, 0xc4, 0x6f, 0x20, 0xbd, 0xcb, 0x4c,
- 0xd2, 0xfa, 0x35, 0x87, 0xd8, 0xb6, 0xbb, 0xcc, 0xb6, 0xd2, 0x85, 0x03,
- 0x6a, 0xea, 0xbb, 0x6d, 0x2f, 0xa2, 0x06, 0xc0, 0xd6, 0x68, 0xd9, 0x7f,
- 0xd6, 0xa2, 0x3b, 0x08, 0x6a, 0x98, 0x26, 0x6d, 0x9a, 0x2b, 0x68, 0x51,
- 0x78, 0xde, 0xa6, 0x96, 0x50, 0x7b, 0xfc, 0x03, 0x43, 0xf8, 0x21, 0x01,
- 0x9d, 0xe2, 0x89, 0x65, 0x47, 0xae, 0x9c, 0x45, 0x5e, 0xa5, 0xce, 0x97,
- 0xb3, 0xe6, 0xf6, 0xd4, 0x5a, 0xe8, 0x6b, 0x87, 0xd6, 0xdf, 0xfb, 0x1f,
- 0xaf, 0xfb, 0xaf, 0x19, 0xa5, 0xfd, 0xba, 0xe0, 0x22, 0x2f, 0x91, 0x97,
- 0xdf, 0xae, 0xe9, 0x39, 0xb1, 0xe4, 0xd3, 0x10, 0xcb, 0xb3, 0x03, 0xb5,
- 0x0b, 0xf0, 0xd9, 0x70, 0x1e, 0x9c, 0x63, 0x6f, 0x3a, 0xcf, 0x3c, 0x1b,
- 0x86, 0xa3, 0xad, 0x1a, 0xe7, 0x4c, 0x09, 0xd0, 0x80, 0xf6, 0x8b, 0x72,
- 0x96, 0x53, 0x7e, 0x66, 0xfb, 0x7c, 0x7c, 0x8a, 0xb0, 0x60, 0xa6, 0x4c,
- 0x20, 0xc4, 0x63, 0x69, 0x6a, 0xc3, 0x53, 0xf8, 0x9a, 0x28, 0x30, 0x9d,
- 0x6f, 0x0e, 0x1b, 0xb2, 0x2c, 0xe6, 0x94, 0x9f, 0xfc, 0xc0, 0x8d, 0x71,
- 0xbe, 0x37, 0xa6, 0xc9, 0xbd, 0x3c, 0x4a, 0xf3, 0xc4, 0xb3, 0x88, 0x4c,
- 0x45, 0x26, 0x4e, 0x2f, 0x83, 0x16, 0x70, 0xb6, 0xc7, 0xb2, 0x36, 0xf0,
- 0x0c, 0x67, 0xd2, 0x0a, 0xd3, 0xd9, 0x7c, 0x35, 0x29, 0xac, 0xd4, 0x9c,
- 0x6d, 0xfc, 0xec, 0x58, 0x92, 0xf0, 0xba, 0x32, 0x00, 0xae, 0xb1, 0xeb,
- 0x4d, 0x8c, 0x1a, 0x20, 0xe7, 0x5c, 0xfc, 0x9a, 0x4d, 0x51, 0x24, 0x7b,
- 0x52, 0xeb, 0x13, 0x3d, 0xb4, 0xab, 0xda, 0xb3, 0x74, 0x39, 0xd2, 0xf8,
- 0x2d, 0xef, 0x9b, 0x0f, 0xae, 0xf5, 0x3c, 0x99, 0x34, 0xbe, 0x15, 0x5c,
- 0x9f, 0x5d, 0xae, 0xf4, 0x72, 0xc2, 0xac, 0x06, 0xbe, 0xad, 0xe4, 0x68,
- 0xea, 0xd5, 0xa1, 0xdc, 0xdb, 0xf4, 0x61, 0x51, 0xf5, 0x1a, 0x62, 0x15,
- 0xfd, 0x00, 0x51, 0x35, 0x53, 0x6c, 0x39, 0x3e, 0xdb, 0x60, 0x0a, 0x52,
- 0xc1, 0x52, 0x3c, 0xd7, 0xab, 0x73, 0xea, 0x1e, 0x38, 0x38, 0x65, 0x35,
- 0x35, 0x2b, 0x28, 0x04, 0x5c, 0x82, 0xea, 0x4a, 0x9e, 0x96, 0x72, 0xa4,
- 0x8e, 0x42, 0xfd, 0x55, 0xa8, 0x66, 0x7a, 0x40, 0xc9, 0xf2, 0xc2, 0x1e,
- 0x5d, 0x09, 0x90, 0x32, 0x18, 0xdb, 0x11, 0x4c, 0x6c, 0x9c, 0x27, 0x62,
- 0x0a, 0xe6, 0xc1, 0xdf, 0xf2, 0x6a, 0x8c, 0x26, 0xb4, 0xfb, 0xda, 0xa9,
- 0x08, 0x10, 0x3a, 0xf0, 0xe1, 0x64, 0xe5, 0x03, 0x81, 0x7d, 0x15, 0x74,
- 0xa1, 0x8d, 0x10, 0xc8, 0xbb, 0x6a, 0x7c, 0x60, 0xa1, 0x09, 0x35, 0x19,
- 0x2d, 0x70, 0xb5, 0x36, 0xc8, 0x8b, 0x66, 0x5f, 0xe0, 0xe7, 0xea, 0x70,
- 0x2f, 0x5d, 0x3f, 0xae, 0x5e, 0x25, 0x84, 0xdd, 0x9b, 0x69, 0x44, 0x37,
- 0x7c, 0x6b, 0x9e, 0x81, 0x18, 0x36, 0x4b, 0xff, 0x86, 0x44, 0x2a, 0x39,
- 0x66, 0x7f, 0x71, 0x43, 0xe7, 0x65, 0xfe, 0xfd, 0x34, 0xb9, 0xd9, 0x5a,
- 0x00, 0xd1, 0x41, 0x43, 0xc7, 0xbc, 0x65, 0x68, 0xb7, 0x73, 0xff, 0x19,
- 0xd3, 0xed, 0x15, 0xa4, 0x67, 0xa1, 0x53, 0x0e, 0xa6, 0xfb, 0x25, 0xce,
- 0x9d, 0x5b, 0x73, 0x08, 0xf3, 0x3b, 0x69, 0xe4, 0x94, 0x9b, 0x94, 0x03,
- 0xb3, 0x8a, 0x2e, 0x07, 0x0c, 0xef, 0x18, 0x4c, 0x2b, 0x1c, 0x83, 0x9f,
- 0x25, 0x20, 0x29, 0x72, 0x11, 0xa0, 0xaa, 0xed, 0x0c, 0xf9, 0xce, 0x94,
- 0x0d, 0x7a, 0xb6, 0xb3, 0xa4, 0x57, 0xd6, 0x61, 0xca, 0x1a, 0x0e, 0x89,
- 0x6d, 0x99, 0x4d, 0x06, 0xcd, 0x83, 0x7e, 0x09, 0x14, 0x5b, 0xe7, 0x4c,
- 0x72, 0xa8, 0x98, 0xc8, 0x27, 0xf3, 0x70, 0x89, 0x87, 0x11, 0xbb, 0x98,
- 0x82, 0x77, 0x9d, 0xaa, 0x95, 0x8c, 0xc1, 0xf8, 0x39, 0x27, 0xd5, 0x64,
- 0x59, 0x6a, 0x8c, 0xbe, 0xe2, 0xe1, 0xd1, 0x6b, 0xe3, 0xaf, 0x30, 0x6f,
- 0xf4, 0x9e, 0x35, 0x0b, 0x10, 0x24, 0x77, 0xd8, 0xa4, 0x30, 0x2e, 0xf7,
- 0x97, 0xfd, 0xef, 0x1e, 0x9e, 0xf2, 0xbd, 0xf2, 0x41, 0x73, 0x19, 0xe6,
- 0x7b, 0x7f, 0x74, 0x11, 0x91, 0x38, 0xc5, 0xac, 0xd5, 0xb0, 0x48, 0xc4,
- 0xe9, 0x41, 0xd4, 0x50, 0x76, 0x13, 0xbf, 0xec, 0xe8, 0x3a, 0xa8, 0x84,
- 0x42, 0x98, 0x12, 0x64, 0x95, 0x85, 0x79, 0x29, 0xea, 0x3a, 0xf9, 0xa4,
- 0x5c, 0x9c, 0x35, 0x01, 0x68, 0x71, 0xb9, 0x5b, 0xbe, 0xaa, 0x76, 0x9e,
- 0x63, 0x1c, 0xc1, 0x83, 0x94, 0xc6, 0x89, 0x2b, 0x1d, 0x00, 0x43, 0x74,
- 0x00, 0x41, 0x93, 0x58, 0x52, 0xf9, 0x13, 0xfe, 0x9f, 0x7a, 0xb7, 0x3d,
- 0x6b, 0x70, 0x4e, 0x4f, 0x8f, 0xf4, 0x9c, 0xe4, 0x97, 0x62, 0xaf, 0x69,
- 0x45, 0xec, 0xf4, 0x53, 0x71, 0xdc, 0xc7, 0x8d, 0x6f, 0xb2, 0x9d, 0xec,
- 0x43, 0xdd, 0xc0, 0xe5, 0xd1, 0x6c, 0x1a, 0x82, 0x19, 0xf6, 0x18, 0xd3,
- 0x59, 0x0e, 0x07, 0x81, 0x5a, 0x23, 0x10, 0x8b, 0xaa, 0x0b, 0x99, 0xc8,
- 0x34, 0xc2, 0xd0, 0xa9, 0x69, 0x7f, 0x54, 0xe3, 0xc4, 0xa0, 0xe7, 0x4b,
- 0x31, 0x90, 0xe7, 0x3b, 0x45, 0x9b, 0x7f, 0xae, 0xd2, 0xab, 0x22, 0xb9,
- 0xfc, 0x07, 0x39, 0x4b, 0x45, 0x83, 0x8d, 0x41, 0x7a, 0x52, 0xb2, 0xae,
- 0x71, 0x78, 0x17, 0x63, 0xfa, 0xbe, 0x59, 0xca, 0xf0, 0xfd, 0x68, 0xe5,
- 0xc4, 0x9a, 0x74, 0x3d, 0xec, 0xd4, 0x8b, 0xa1, 0x2c, 0x31, 0x4d, 0x73,
- 0xfd, 0x5c, 0x1e, 0xeb, 0x5f, 0xf6, 0x42, 0x0d, 0x79, 0x5f, 0x64, 0x10,
- 0xae, 0xb2, 0xf6, 0x9e, 0xa8, 0xab, 0xa5, 0x2b, 0x9a, 0xcf, 0x25, 0xfa,
- 0xa2, 0xb3, 0xdc, 0x30, 0x3d, 0x08, 0x4e, 0xbb, 0x7b, 0x0c, 0x28, 0x34,
- 0x9d, 0xda, 0xc4, 0x94, 0xa4, 0xf4, 0x1e, 0x78, 0x8b, 0xa9, 0xd3, 0xa7,
- 0x1c, 0x2a, 0x27, 0x14, 0xa0, 0x44, 0x1a, 0x9a, 0x87, 0x72, 0xa5, 0x6d,
- 0x69, 0x46, 0xe5, 0xc1, 0x4f, 0x29, 0x87, 0xc0, 0xa7, 0xa8, 0x96, 0xde,
- 0xa9, 0x63, 0x08, 0xd8, 0x4a, 0xa1, 0x25, 0x43, 0x76, 0x41, 0xf7, 0x9f,
- 0x17, 0xe3, 0xe1, 0x4b, 0xc6, 0x2b, 0x79, 0xea, 0xd5, 0xa7, 0x72, 0x16,
- 0x0a, 0x8c, 0xcd, 0x49, 0x70, 0x75, 0xd4, 0x59, 0x4a, 0x19, 0x7b, 0x31,
- 0x02, 0x7a, 0x3a, 0x20, 0x15, 0x62, 0x7e, 0x4e, 0x6f, 0xac, 0xd0, 0xd1,
- 0x29, 0xbd, 0x2d, 0xa1, 0xc6, 0x3e, 0xa6, 0x1a, 0x26, 0x18, 0x96, 0x98,
- 0x12, 0x56, 0x37, 0xbf, 0xb4, 0x91, 0x57, 0xe8, 0xda, 0x61, 0x7c, 0x2f,
- 0x3e, 0xd4, 0x51, 0xfe, 0xe8, 0x5b, 0x00, 0x30, 0x08, 0xf6, 0x4e, 0x69,
- 0xa8, 0x1a, 0x2b, 0x82, 0x41, 0x85, 0xa9, 0xd9, 0x3c, 0xc8, 0x02, 0x91,
- 0x99, 0xd4, 0xa2, 0xfd, 0x9d, 0x1b, 0x08, 0xfc, 0x41, 0x3e, 0x10, 0x6b,
- 0x80, 0x74, 0x3d, 0x72, 0x61, 0x97, 0xdd, 0x96, 0xec, 0xf4, 0xd6, 0x6d,
- 0x68, 0x02, 0x6e, 0xbb, 0x55, 0x9d, 0x6f, 0x11, 0xde, 0xd1, 0xad, 0x6d,
- 0x42, 0x96, 0x2c, 0x42, 0x1e, 0xa9, 0x19, 0x42, 0x22, 0x38, 0x38, 0x18,
- 0x3c, 0x4b, 0xc1, 0x9c, 0x0f, 0xe1, 0x34, 0x61, 0x06, 0x77, 0x54, 0x04,
- 0xe0, 0x87, 0x94, 0x5c, 0xc9, 0xa1, 0x35, 0x55, 0x3d, 0x4a, 0xf2, 0x4f,
- 0x05, 0x11, 0x98, 0x6f, 0x3c, 0x85, 0x84, 0xe6, 0xf8, 0x71, 0x8a, 0xdf,
- 0xe9, 0x9a, 0xe3, 0x70, 0xd6, 0x36, 0xd6, 0xc8, 0x66, 0x3e, 0xba, 0x7c,
- 0x0a, 0x23, 0x0a, 0xd0, 0xb6, 0x66, 0x68, 0xa8, 0xdf, 0x37, 0x17, 0xfb,
- 0xdd, 0x9c, 0x8b, 0xc7, 0x8e, 0xc4, 0x4f, 0x40, 0x08, 0x23, 0x58, 0x15,
- 0xa2, 0xba, 0xef, 0xdf, 0x67, 0xcd, 0x1f, 0xb6, 0xc4, 0xea, 0xce, 0x81,
- 0x38, 0x58, 0x92, 0x57, 0xcf, 0x83, 0x47, 0x29, 0x9f, 0xde, 0x9b, 0xde,
- 0x01, 0xfe, 0x68, 0x91, 0x67, 0x06, 0x9d, 0x31, 0xd0, 0xb9, 0xc3, 0xbb,
- 0xc3, 0x6b, 0xa0, 0x04, 0x1e, 0x34, 0xd5, 0x38, 0xd4, 0xac, 0x70, 0xae,
- 0xab, 0xb2, 0xbd, 0x4b, 0xa0, 0xad, 0x2b, 0x82, 0xaf, 0x8c, 0x90, 0x4d,
- 0xd3, 0xca, 0x71, 0x35, 0x75, 0x89, 0xe5, 0x42, 0x91, 0x46, 0x8d, 0x18,
- 0x04, 0x7a, 0xb9, 0xaa, 0x3b, 0xe7, 0x1e, 0x8c, 0x4e, 0xf9, 0x6e, 0x74,
- 0xaa, 0x2e, 0x36, 0x86, 0xfb, 0xef, 0x9c, 0xd7, 0xba, 0x5e, 0x2e, 0x3c,
- 0x40, 0xce, 0x8b, 0x2b, 0x94, 0x55, 0xf2, 0xd4, 0x7d, 0xbf, 0x8c, 0x8a,
- 0xa8, 0x59, 0x84, 0x6f, 0x32, 0x95, 0xc5, 0xcc, 0xad, 0xee, 0x30, 0x23,
- 0x7c, 0x54, 0xea, 0x60, 0xb8, 0x88, 0x12, 0x45, 0x03, 0xbc, 0xe3, 0x92,
- 0x9f, 0xa8, 0x5b, 0x07, 0x97, 0x53, 0x0d, 0xe1, 0xe3, 0x3d, 0xdf, 0xf2,
- 0x2a, 0x12, 0xee, 0xdf, 0x73, 0x8d, 0x41, 0xf4, 0xe4, 0x2c, 0xb4, 0xd4,
- 0x9e, 0xfe, 0xf2, 0xe6, 0xa0, 0x9e, 0x2a, 0x3a, 0x36, 0x26, 0x7e, 0xd9,
- 0xe1, 0x22, 0xee, 0x0b, 0x5b, 0x48, 0xd2, 0xa9, 0x55, 0xab, 0x50, 0x7c,
- 0xf6, 0xc8, 0x56, 0x31, 0xbb, 0x51, 0xe9, 0x31, 0x4d, 0xaa, 0x13, 0x3a,
- 0x99, 0x9f, 0x8c, 0x59, 0x6a, 0xc9, 0xf1, 0x0a, 0x89, 0xcc, 0x39, 0x98,
- 0xbd, 0xc3, 0x93, 0x97, 0x28, 0xe5, 0x73, 0x94, 0xf2, 0x0a, 0x7a, 0x09,
- 0x38, 0x0b, 0xab, 0xd8, 0x49, 0x98, 0x14, 0x34, 0x32, 0x9d, 0xef, 0x9d,
- 0x47, 0xdb, 0x82, 0xb9, 0x84, 0xd6, 0xd7, 0x9f, 0xf7, 0xdf, 0x79, 0x5b,
- 0xe8, 0x92, 0x44, 0x31, 0x5d, 0x42, 0x80, 0x90, 0x8d, 0x36, 0xa2, 0x39,
- 0x02, 0x64, 0x21, 0xa2, 0xb8, 0xfc, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x4c, 0xe9, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0xd8, 0x03, 0x00, 0x00, 0xdc, 0x03, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00,
- 0x0f, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x00, 0x50, 0x03, 0x00, 0x00,
- 0x04, 0x03, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00,
- 0x2c, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00,
- 0x74, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
- 0x9c, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x9e, 0xfc, 0xff, 0xff, 0x0c, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x35, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
- 0x5e, 0xfd, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0x3f, 0x01, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x96, 0xfd, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x88, 0xfd, 0xff, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x2f, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
- 0xca, 0xfd, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
- 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
- 0x78, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
- 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
- 0x2d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x0e, 0xfe, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xbc, 0xfd, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x2a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
- 0x26, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
- 0x29, 0x00, 0x00, 0x00, 0x52, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
- 0x22, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x96, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x88, 0xfe, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
- 0x1f, 0x00, 0x00, 0x00, 0xca, 0xfe, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x78, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00,
- 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x0e, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
- 0x17, 0x00, 0x00, 0x00, 0x42, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
- 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x86, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
- 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x78, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x03, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
- 0x0f, 0x00, 0x00, 0x00, 0xba, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x68, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
- 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x14, 0x00, 0x10, 0x00, 0x0c, 0x00,
- 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x0e, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00,
- 0x0b, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
- 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x0c, 0x00,
- 0x08, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0xac, 0x12, 0x00, 0x00,
- 0x3c, 0x12, 0x00, 0x00, 0xdc, 0x11, 0x00, 0x00, 0x90, 0x11, 0x00, 0x00,
- 0x24, 0x11, 0x00, 0x00, 0xac, 0x10, 0x00, 0x00, 0x5c, 0x10, 0x00, 0x00,
- 0x10, 0x10, 0x00, 0x00, 0xa8, 0x0f, 0x00, 0x00, 0x58, 0x0f, 0x00, 0x00,
- 0x04, 0x0f, 0x00, 0x00, 0xb8, 0x0e, 0x00, 0x00, 0x4c, 0x0e, 0x00, 0x00,
- 0xe4, 0x0d, 0x00, 0x00, 0x94, 0x0d, 0x00, 0x00, 0x48, 0x0d, 0x00, 0x00,
- 0xe0, 0x0c, 0x00, 0x00, 0x90, 0x0c, 0x00, 0x00, 0x3c, 0x0c, 0x00, 0x00,
- 0xf0, 0x0b, 0x00, 0x00, 0x84, 0x0b, 0x00, 0x00, 0x1c, 0x0b, 0x00, 0x00,
- 0xcc, 0x0a, 0x00, 0x00, 0x80, 0x0a, 0x00, 0x00, 0x18, 0x0a, 0x00, 0x00,
- 0xc8, 0x09, 0x00, 0x00, 0x74, 0x09, 0x00, 0x00, 0x28, 0x09, 0x00, 0x00,
- 0xbc, 0x08, 0x00, 0x00, 0x54, 0x08, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00,
- 0xb8, 0x07, 0x00, 0x00, 0x50, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
- 0xac, 0x06, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0xf4, 0x05, 0x00, 0x00,
- 0x8c, 0x05, 0x00, 0x00, 0x3c, 0x05, 0x00, 0x00, 0xe8, 0x04, 0x00, 0x00,
- 0x9c, 0x04, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0xc8, 0x03, 0x00, 0x00,
- 0x78, 0x03, 0x00, 0x00, 0x24, 0x03, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00,
- 0x6c, 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00,
- 0x68, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
- 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3a, 0xee, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0x94, 0xee, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x82, 0xee, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x2c, 0x00, 0x00, 0x00, 0xdc, 0xee, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0xd7, 0x23, 0x3a,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xca, 0xee, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x44, 0x00, 0x00, 0x00, 0xbc, 0xee, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x01, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x37, 0x01, 0x00, 0x00, 0x00,
- 0xc2, 0xff, 0x7f, 0x3f, 0x01, 0x00, 0x00, 0x00, 0xd2, 0x6f, 0x75, 0x36,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0xef, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x48, 0x00, 0x00, 0x00, 0x1c, 0xef, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x16, 0x49, 0x3d,
- 0x01, 0x00, 0x00, 0x00, 0x87, 0x19, 0xb1, 0x40, 0x01, 0x00, 0x00, 0x00,
- 0x58, 0x80, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0xfa, 0xef, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00,
- 0xec, 0xef, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x5d, 0xd1, 0xce, 0x39, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x42, 0xf0, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0x34, 0xf0, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x23, 0x20, 0xb6, 0x3b, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x22, 0xf0, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0x14, 0xf0, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xa2, 0x5a, 0x91, 0x3d, 0x01, 0x00, 0x00, 0x00,
- 0x47, 0xc9, 0x90, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xf2, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00, 0x7c, 0xf0, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x81, 0xb7, 0xf1, 0x39, 0x01, 0x00, 0x00, 0x00, 0x9e, 0xb5, 0x71, 0x41,
- 0x01, 0x00, 0x00, 0x00, 0x33, 0x20, 0x70, 0xc1, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x5a, 0xf1, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0x4c, 0xf1, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7a, 0x08, 0x97, 0x35,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0xa2, 0xf1, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x30, 0x00, 0x00, 0x00, 0x94, 0xf1, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x2f, 0xf5, 0x1f, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0xf2, 0xf1, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0xe4, 0xf1, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xc7, 0xea, 0x1a, 0x3c, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0xd2, 0xf1, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0xc4, 0xf1, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xb2, 0x78, 0x3f, 0x3d, 0x01, 0x00, 0x00, 0x00,
- 0x39, 0xb9, 0x3e, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xb0, 0xf3, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00, 0x2c, 0xf2, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x89, 0x25, 0xf2, 0x39, 0x01, 0x00, 0x00, 0x00, 0xde, 0xdc, 0x1d, 0x41,
- 0x01, 0x00, 0x00, 0x00, 0xa5, 0x23, 0x72, 0xc1, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0x0a, 0xf3, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0xfc, 0xf2, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0xe0, 0x90, 0x35,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x52, 0xf3, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x30, 0x00, 0x00, 0x00, 0x44, 0xf3, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x1a, 0x2a, 0x19, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0xa2, 0xf3, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0x94, 0xf3, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xe9, 0x36, 0xdd, 0x3b, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x82, 0xf3, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0x74, 0xf3, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xdd, 0x43, 0x7e, 0x3d, 0x01, 0x00, 0x00, 0x00,
- 0x99, 0x45, 0x7d, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x60, 0xf5, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00, 0xdc, 0xf3, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x5c, 0xfd, 0xa9, 0x39, 0x01, 0x00, 0x00, 0x00, 0x1e, 0xaa, 0x87, 0x40,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x29, 0xc1, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x04, 0x00, 0x00, 0xba, 0xf4, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0xac, 0xf4, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x55, 0xf7, 0x52, 0x35,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x02, 0xf5, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x30, 0x00, 0x00, 0x00, 0xf4, 0xf4, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xd0, 0xda, 0x1e, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x52, 0xf5, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0x44, 0xf5, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x8e, 0x0b, 0xa8, 0x3b, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x32, 0xf5, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0x24, 0xf5, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x12, 0x1c, 0x6e, 0x3d, 0x01, 0x00, 0x00, 0x00,
- 0xdd, 0x4a, 0x00, 0x41, 0x01, 0x00, 0x00, 0x00, 0x31, 0xc6, 0xd9, 0xc0,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0xf6, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x80, 0x9d, 0x16, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4a, 0xf6, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00, 0x3c, 0xf6, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xa4, 0x34, 0xab, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x2a, 0xf6, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00, 0x1c, 0xf6, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x2e, 0x36, 0xe1, 0x3c, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x54, 0xe0, 0x40,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x08, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x48, 0x00, 0x00, 0x00, 0x84, 0xf6, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe1, 0xd0, 0xa2, 0x39,
- 0x01, 0x00, 0x00, 0x00, 0x9b, 0xcf, 0x22, 0x41, 0x01, 0x00, 0x00, 0x00,
- 0xea, 0x23, 0x12, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x62, 0xf7, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00,
- 0x54, 0xf7, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x99, 0xd3, 0xf7, 0x34, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0xaa, 0xf7, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
- 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x00,
- 0x9c, 0xf7, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0xd5, 0xc2, 0x3a,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xfa, 0xf7, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00, 0xec, 0xf7, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x8f, 0x84, 0xa2, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0xda, 0xf7, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00, 0xcc, 0xf7, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x64, 0xeb, 0x8e, 0x3d, 0x01, 0x00, 0x00, 0x00, 0x3b, 0xf3, 0x17, 0x41,
- 0x01, 0x00, 0x00, 0x00, 0xb7, 0xc5, 0x04, 0xc1, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0xaa, 0xf8, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0x9c, 0xf8, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0xa8, 0x98, 0x39,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0xf2, 0xf8, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x2c, 0x00, 0x00, 0x00, 0xe4, 0xf8, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x76, 0xb9, 0x3b,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xd2, 0xf8, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x48, 0x00, 0x00, 0x00, 0xc4, 0xf8, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x43, 0xb8, 0x52, 0x3d,
- 0x01, 0x00, 0x00, 0x00, 0x8b, 0xe5, 0x51, 0x41, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0xb0, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00,
- 0x2c, 0xf9, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xe3, 0xa1, 0xf0, 0x39, 0x01, 0x00, 0x00, 0x00,
- 0x02, 0xa0, 0x70, 0x41, 0x01, 0x00, 0x00, 0x00, 0x87, 0x08, 0x65, 0xc1,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0a, 0xfa, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0xfc, 0xf9, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xcc, 0x98, 0x41, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x52, 0xfa, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x00, 0x44, 0xfa, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xed, 0xf5, 0xcd, 0x3a, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x08, 0x00, 0x00, 0x00, 0xa2, 0xfa, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x2c, 0x00, 0x00, 0x00, 0x94, 0xfa, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9d, 0xca, 0xd4, 0x3b,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x82, 0xfa, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x48, 0x00, 0x00, 0x00, 0x74, 0xfa, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x58, 0x58, 0xce, 0x3d,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x49, 0x41, 0x01, 0x00, 0x00, 0x00,
- 0x01, 0x06, 0x52, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x52, 0xfb, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00,
- 0x44, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x9b, 0x9c, 0xe1, 0x39, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x9a, 0xfb, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0x8c, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xf8, 0xb6, 0xc3, 0x3b, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x7a, 0xfb, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0x6c, 0xfb, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x94, 0x8d, 0x93, 0x3d, 0x01, 0x00, 0x00, 0x00,
- 0x06, 0xfa, 0x92, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x58, 0xfd, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00, 0xd4, 0xfb, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x7a, 0xf6, 0x5f, 0x3a, 0x01, 0x00, 0x00, 0x00, 0xba, 0xf4, 0xdf, 0x41,
- 0x01, 0x00, 0x00, 0x00, 0xf4, 0x7c, 0xcf, 0xc1, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0xb2, 0xfc, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0xa4, 0xfc, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x2f, 0xc4, 0x35,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0xfa, 0xfc, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x34, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x30, 0x00, 0x00, 0x00, 0xec, 0xfc, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x8f, 0x3f, 0xe0, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x4a, 0xfd, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00,
- 0x3c, 0xfd, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x25, 0xd7, 0xa9, 0x3b, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x2a, 0xfd, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00,
- 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00,
- 0x1c, 0xfd, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0xc4, 0xf4, 0x39, 0x3e, 0x01, 0x00, 0x00, 0x00,
- 0xf4, 0x1f, 0xe3, 0x41, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x8f, 0xc1,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xfa, 0xfd, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x02, 0x2c, 0x00, 0x00, 0x00, 0xec, 0xfd, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x8b, 0x00, 0x4b, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x42, 0xfe, 0xff, 0xff,
- 0x14, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x2c, 0x00, 0x00, 0x00, 0x34, 0xfe, 0xff, 0xff,
- 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xd7, 0xdf, 0xc3, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x22, 0xfe, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x48, 0x00, 0x00, 0x00, 0x14, 0xfe, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x68, 0xa8, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x00, 0xc0, 0x23, 0x04, 0x42,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x14, 0x00, 0x13, 0x00,
- 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x07, 0x48, 0x00, 0x00, 0x00, 0x8c, 0xfe, 0xff, 0xff,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x3b, 0xda, 0x75, 0x3b, 0x01, 0x00, 0x00, 0x00, 0x4f, 0xd8, 0xf5, 0x42,
- 0x01, 0x00, 0x00, 0x00, 0xa8, 0x2a, 0x61, 0xc2, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- 0x2c, 0x00, 0x00, 0x00, 0x5c, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xcf, 0x37, 0x69, 0x37,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0xb2, 0xff, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00,
- 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- 0x2c, 0x00, 0x00, 0x00, 0xa4, 0xff, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0xd8, 0x72, 0x3b,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
- 0x18, 0x00, 0x14, 0x00, 0x13, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00,
- 0x0e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x3c, 0x00, 0x00, 0x00,
- 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
- 0x0c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x42, 0x16, 0x3c,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00,
- 0x14, 0x00, 0x10, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00,
- 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x09, 0x54, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00,
- 0x10, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
- 0x24, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0xa8, 0x41, 0x5b, 0x3d, 0x01, 0x00, 0x00, 0x00, 0x66, 0x66, 0x5a, 0x41,
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
- 0x60, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
- 0xb4, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
- 0x8c, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
- 0x68, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
- 0x44, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
- 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00,
- 0x0c, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x96, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x72, 0x9e, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x19,
- 0xa6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xae, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x1b, 0xb6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1b,
- 0xbe, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1b, 0xc6, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x09, 0xce, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1b,
- 0xd6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09, 0xde, 0xff, 0xff, 0xff,
- 0x00, 0x00, 0x00, 0x1b, 0xe6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x09,
- 0xfa, 0xff, 0xff, 0xff, 0x00, 0x1b, 0x06, 0x00, 0x06, 0x00, 0x05, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x00, 0x08, 0x00, 0x07, 0x00,
- 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b};
-
-const unsigned int g_keyword_scrambled_model_data_length = 34520;
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/debug_log.cc b/components/tflite_micro/Source/tensorflow/lite/micro/debug_log.cc
deleted file mode 100644
index 966b0bb6..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/debug_log.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/debug_log.h"
-#include "stdio.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void DebugLog(const char *s) { printf("%s", s); }
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.cc b/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.cc
deleted file mode 100644
index bc409b5b..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h"
-
-// This dummy implementation writes person and no person scores to the error
-// console. Real applications will want to take some custom action instead, and
-// should implement their own versions of this function.
-void RespondToDetection(tflite::ErrorReporter* error_reporter,
- int8_t person_score, int8_t no_person_score) {
- TF_LITE_REPORT_ERROR(error_reporter, "person score:%d no person score %d",
- person_score, no_person_score);
-}
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.cc b/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.cc
deleted file mode 100644
index 0b295228..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/image_provider.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h"
-#include "tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h"
-
-TfLiteStatus GetImage(tflite::ErrorReporter* error_reporter, int image_width,
- int image_height, int channels, int8_t* image_data,
- uint8_t * hardware_input) {
- for (int i = 0; i < image_width * image_height * channels; ++i) {
- image_data[i] = hardware_input[i];
- }
- return kTfLiteOk;
-}
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.cc b/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.cc
deleted file mode 100644
index 8d248ab7..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/main_functions.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/examples/person_detection_experimental/main_functions.h"
-
-#include "tensorflow/lite/micro/examples/person_detection_experimental/detection_responder.h"
-#include "tensorflow/lite/micro/examples/person_detection_experimental/image_provider.h"
-#include "tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h"
-#include "tensorflow/lite/micro/examples/person_detection_experimental/person_detect_model_data.h"
-#include "tensorflow/lite/micro/micro_error_reporter.h"
-#include "tensorflow/lite/micro/micro_interpreter.h"
-#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
-#include "tensorflow/lite/schema/schema_generated.h"
-#include "tensorflow/lite/version.h"
-
-// Globals, used for compatibility with Arduino-style sketches.
-namespace {
-tflite::ErrorReporter* error_reporter = nullptr;
-const tflite::Model* model = nullptr;
-tflite::MicroInterpreter* interpreter = nullptr;
-TfLiteTensor* input = nullptr;
-
-// In order to use optimized tensorflow lite kernels, a signed int8_t quantized
-// model is preferred over the legacy unsigned model format. This means that
-// throughout this project, input images must be converted from unisgned to
-// signed format. The easiest and quickest way to convert from unsigned to
-// signed 8-bit integers is to subtract 128 from the unsigned value to get a
-// signed value.
-
-// An area of memory to use for input, output, and intermediate arrays.
-constexpr int kTensorArenaSize = 115 * 1024;
-static uint8_t tensor_arena[kTensorArenaSize];
-} // namespace
-
-// The name of this function is important for Arduino compatibility.
-void person_detect_init() {
- // Set up logging. Google style is to avoid globals or statics because of
- // lifetime uncertainty, but since this has a trivial destructor it's okay.
- // NOLINTNEXTLINE(runtime-global-variables)
- static tflite::MicroErrorReporter micro_error_reporter;
- error_reporter = µ_error_reporter;
-
- // Map the model into a usable data structure. This doesn't involve any
- // copying or parsing, it's a very lightweight operation.
- model = tflite::GetModel(g_person_detect_model_data);
- if (model->version() != TFLITE_SCHEMA_VERSION) {
- TF_LITE_REPORT_ERROR(error_reporter,
- "Model provided is schema version %d not equal "
- "to supported version %d.",
- model->version(), TFLITE_SCHEMA_VERSION);
- return;
- }
-
- // Pull in only the operation implementations we need.
- // This relies on a complete list of all the ops needed by this graph.
- // An easier approach is to just use the AllOpsResolver, but this will
- // incur some penalty in code space for op implementations that are not
- // needed by this graph.
- //
- // tflite::AllOpsResolver resolver;
- // NOLINTNEXTLINE(runtime-global-variables)
- static tflite::MicroMutableOpResolver<5> micro_op_resolver;
- micro_op_resolver.AddAveragePool2D();
- micro_op_resolver.AddConv2D();
- micro_op_resolver.AddDepthwiseConv2D();
- micro_op_resolver.AddReshape();
- micro_op_resolver.AddSoftmax();
-
- // Build an interpreter to run the model with.
- // NOLINTNEXTLINE(runtime-global-variables)
- static tflite::MicroInterpreter static_interpreter(
- model, micro_op_resolver, tensor_arena, kTensorArenaSize, error_reporter);
- interpreter = &static_interpreter;
-
- // Allocate memory from the tensor_arena for the model's tensors.
- TfLiteStatus allocate_status = interpreter->AllocateTensors();
- if (allocate_status != kTfLiteOk) {
- TF_LITE_REPORT_ERROR(error_reporter, "AllocateTensors() failed");
- return;
- }
-
- // Get information about the memory area to use for the model's input.
- input = interpreter->input(0);
-}
-
-// The name of this function is important for Arduino compatibility.
-int person_detect(uint8_t * hardware_input) {
- // Get image from provider.
- if (kTfLiteOk != GetImage(error_reporter, kNumCols, kNumRows, kNumChannels,
- input->data.int8, hardware_input)) {
- TF_LITE_REPORT_ERROR(error_reporter, "Image capture failed.");
- }
-
- // Run the model on this input and make sure it succeeds.
- if (kTfLiteOk != interpreter->Invoke()) {
- TF_LITE_REPORT_ERROR(error_reporter, "Invoke failed.");
- }
-
- TfLiteTensor* output = interpreter->output(0);
-
- // Process the inference results.
- int8_t person_score = output->data.uint8[kPersonIndex];
- int8_t no_person_score = output->data.uint8[kNotAPersonIndex];
- RespondToDetection(error_reporter, person_score, no_person_score);
- if(person_score >= no_person_score + 50) return 1;
- else return 0;
-}
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.cc b/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.cc
deleted file mode 100644
index c7359b8f..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/examples/person_detection_experimental/model_settings.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/micro/examples/person_detection_experimental/model_settings.h"
-
-const char* kCategoryLabels[kCategoryCount] = {
- "notperson",
- "person",
-};
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations.cc
deleted file mode 100644
index 2bdc0b51..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations.cc
+++ /dev/null
@@ -1,285 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/common.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/internal/types.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/op_macros.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/micro_utils.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace activations {
-namespace {
-
-struct ReluOpData {
- ReluParams params;
-};
-
-struct Relu6OpData {
- int8_t six_int8;
- int8_t zero_int8;
- uint8_t six_uint8;
- uint8_t zero_uint8;
-};
-
-} // namespace
-
-constexpr int kInputTensor = 0;
-constexpr int kOutputTensor = 0;
-
-template
-inline void ReluQuantized(const ReluOpData& data,
- const RuntimeShape& input_shape,
- const RuntimeShape& output_shape, const T* input_data,
- T* output_data) {
- const int flat_size = MatchingFlatSize(input_shape, output_shape);
- for (int i = 0; i < flat_size; ++i) {
- const int32_t val = static_cast(input_data[i]);
- int32_t clamped =
- data.params.output_offset +
- MultiplyByQuantizedMultiplier(val - data.params.input_offset,
- data.params.output_multiplier,
- data.params.output_shift);
- clamped = std::max(data.params.quantized_activation_min, clamped);
- clamped = std::min(data.params.quantized_activation_max, clamped);
- output_data[i] = static_cast(clamped);
- }
-}
-
-template
-inline void CalculateReluOpData(const TfLiteTensor* input, TfLiteTensor* output,
- ReluOpData* data) {
- float act_min = 0.0;
- float act_max = std::numeric_limits::infinity();
- double real_multiplier =
- static_cast(input->params.scale / output->params.scale);
-
- const RuntimeShape input_shape = GetTensorShape(input);
- const RuntimeShape output_shape = GetTensorShape(output);
-
- QuantizeMultiplier(real_multiplier, &data->params.output_multiplier,
- &data->params.output_shift);
-
- data->params.quantized_activation_min = std::max(
- static_cast(std::numeric_limits::min()),
- output->params.zero_point +
- static_cast(roundf(act_min / output->params.scale)));
- data->params.quantized_activation_max =
- act_max == std::numeric_limits::infinity()
- ? static_cast(std::numeric_limits::max())
- : std::min(static_cast(std::numeric_limits::max()),
- output->params.zero_point +
- static_cast(
- roundf(act_max / output->params.scale)));
- data->params.input_offset = input->params.zero_point;
- data->params.output_offset = output->params.zero_point;
-}
-
-inline void ReluFloat(const RuntimeShape& input_shape, const float* input_data,
- const RuntimeShape& output_shape, float* output_data) {
- const int flat_size = MatchingFlatSize(input_shape, output_shape);
- for (int i = 0; i < flat_size; ++i) {
- const float val = input_data[i];
- const float lower = 0.0f;
- const float clamped = val < lower ? lower : val;
- output_data[i] = clamped;
- }
-}
-
-inline void Relu6Float(const RuntimeShape& input_shape, const float* input_data,
- const RuntimeShape& output_shape, float* output_data) {
- const int flat_size = MatchingFlatSize(input_shape, output_shape);
- for (int i = 0; i < flat_size; ++i) {
- const float val = input_data[i];
- const float upper = 6.0f;
- const float lower = 0.0f;
- const float clamped = val > upper ? upper : val < lower ? lower : val;
- output_data[i] = clamped;
- }
-}
-
-template
-inline void Relu6Quantized(Q lower, Q upper, const RuntimeShape& input_shape,
- const Q* input_data,
- const RuntimeShape& output_shape, Q* output_data) {
- const int flat_size = MatchingFlatSize(input_shape, output_shape);
- for (int i = 0; i < flat_size; ++i) {
- const Q val = input_data[i];
- const Q clamped = val > upper ? upper : val < lower ? lower : val;
- output_data[i] = clamped;
- }
-}
-
-void* ReluInit(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(ReluOpData));
-}
-
-TfLiteStatus ReluPrepare(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- ReluOpData* data = static_cast(node->user_data);
-
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- if (input->type == kTfLiteInt8) {
- CalculateReluOpData(input, output, data);
- } else if (input->type == kTfLiteUInt8) {
- CalculateReluOpData(input, output, data);
- }
-
- return kTfLiteOk;
-}
-
-TfLiteStatus ReluEval(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- const ReluOpData& data = *(static_cast(node->user_data));
-
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- switch (input->type) {
- case kTfLiteFloat32: {
- ReluFloat(tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
-
- return kTfLiteOk;
- }
- case kTfLiteInt8: {
- ReluQuantized(data, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorData(output));
- return kTfLiteOk;
- }
- case kTfLiteUInt8: {
- ReluQuantized(data, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorData(output));
- return kTfLiteOk;
- }
- default: {
- TF_LITE_KERNEL_LOG(context, "Only float32 is supported currently, got %s",
- TfLiteTypeGetName(input->type));
- return kTfLiteError;
- }
- }
-}
-
-void* Relu6Init(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(Relu6OpData));
-}
-
-TfLiteStatus Relu6Prepare(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- Relu6OpData* data = static_cast(node->user_data);
-
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
-
- if (input->type == kTfLiteInt8) {
- data->six_int8 = FloatToAsymmetricQuantizedInt8(6.0f, input->params.scale,
- input->params.zero_point);
- data->zero_int8 = input->params.zero_point;
- } else if (input->type == kTfLiteUInt8) {
- data->six_uint8 = FloatToAsymmetricQuantizedUInt8(6.0f, input->params.scale,
- input->params.zero_point);
- data->zero_uint8 = input->params.zero_point;
- }
-
- return kTfLiteOk;
-}
-
-TfLiteStatus Relu6Eval(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- const Relu6OpData& data = *(static_cast(node->user_data));
-
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- switch (input->type) {
- case kTfLiteFloat32: {
- Relu6Float(tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
-
- return kTfLiteOk;
- }
- case kTfLiteInt8: {
- Relu6Quantized(data.zero_int8, data.six_int8,
- tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
- return kTfLiteOk;
- }
- case kTfLiteUInt8: {
- Relu6Quantized(data.zero_uint8, data.six_uint8,
- tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
- return kTfLiteOk;
- }
- default: {
- TF_LITE_KERNEL_LOG(context, "Only float32 is supported currently, got %s",
- TfLiteTypeGetName(input->type));
- return kTfLiteError;
- }
- }
-}
-
-} // namespace activations
-
-TfLiteRegistration Register_RELU() {
- return {/*init=*/activations::ReluInit,
- /*free=*/nullptr,
- /*prepare=*/activations::ReluPrepare,
- /*invoke=*/activations::ReluEval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-TfLiteRegistration Register_RELU6() {
- return {/*init=*/activations::Relu6Init,
- /*free=*/nullptr,
- /*prepare=*/activations::Relu6Prepare,
- /*invoke=*/activations::Relu6Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations_test.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations_test.cc
deleted file mode 100644
index f7466f9b..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/activations_test.cc
+++ /dev/null
@@ -1,378 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-#include "mcu_init.h"
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/micro/all_ops_resolver.h"
-#include "tensorflow/lite/micro/kernels/kernel_runner.h"
-#include "tensorflow/lite/micro/testing/micro_test.h"
-#include "tensorflow/lite/micro/testing/test_utils.h"
-
-namespace tflite {
-namespace testing {
-namespace {
-
-void TestReluFloat(const int* input_dims_data, const float* input_data,
- const int* output_dims_data, const float* golden,
- float* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
-
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateFloatTensor(input_data, input_dims),
- CreateFloatTensor(output_data, output_dims),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_NEAR(golden[i], output_data[i], 1e-5f);
- }
-}
-
-void TestRelu6Float(const int* input_dims_data, const float* input_data,
- const int* output_dims_data, const float* golden,
- float* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
-
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateFloatTensor(input_data, input_dims),
- CreateFloatTensor(output_data, output_dims),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU6();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_NEAR(golden[i], output_data[i], 1e-5f);
- }
-}
-
-void TestReluUint8(const int* input_dims_data, const float* input_data,
- uint8_t* input_data_quantized, const float input_scale,
- const int input_zero_point, const float* golden,
- uint8_t* golden_quantized, const int* output_dims_data,
- const float output_scale, const int output_zero_point,
- uint8_t* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
-
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateQuantizedTensor(input_data, input_data_quantized, input_dims,
- input_scale, input_zero_point),
- CreateQuantizedTensor(output_data, output_dims, output_scale,
- output_zero_point),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- AsymmetricQuantize(golden, golden_quantized, output_elements_count,
- output_scale, output_zero_point);
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_EQ(golden_quantized[i], output_data[i]);
- }
-}
-
-void TestRelu6Uint8(const int* input_dims_data, const float* input_data,
- uint8_t* input_data_quantized, const float input_scale,
- const int input_zero_point, const float* golden,
- uint8_t* golden_quantized, const int* output_dims_data,
- const float output_scale, const int output_zero_point,
- uint8_t* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
-
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateQuantizedTensor(input_data, input_data_quantized, input_dims,
- input_scale, input_zero_point),
- CreateQuantizedTensor(output_data, output_dims, output_scale,
- output_zero_point),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU6();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- AsymmetricQuantize(golden, golden_quantized, output_elements_count,
- output_scale, output_zero_point);
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_EQ(golden_quantized[i], output_data[i]);
- }
-}
-
-void TestReluInt8(const int* input_dims_data, const float* input_data,
- int8_t* input_data_quantized, const float input_scale,
- const int input_zero_point, const float* golden,
- int8_t* golden_quantized, const int* output_dims_data,
- const float output_scale, const int output_zero_point,
- int8_t* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateQuantizedTensor(input_data, input_data_quantized, input_dims,
- input_scale, input_zero_point),
- CreateQuantizedTensor(output_data, output_dims, output_scale,
- output_zero_point),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- AsymmetricQuantize(golden, golden_quantized, output_elements_count,
- output_scale, output_zero_point);
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_EQ(golden_quantized[i], output_data[i]);
- }
-}
-
-void TestRelu6Int8(const int* input_dims_data, const float* input_data,
- int8_t* input_data_quantized, const float input_scale,
- const int input_zero_point, const float* golden,
- int8_t* golden_quantized, const int* output_dims_data,
- const float output_scale, const int output_zero_point,
- int8_t* output_data) {
- TfLiteIntArray* input_dims = IntArrayFromInts(input_dims_data);
- TfLiteIntArray* output_dims = IntArrayFromInts(output_dims_data);
- const int output_elements_count = ElementCount(*output_dims);
- constexpr int inputs_size = 1;
- constexpr int outputs_size = 1;
- constexpr int tensors_size = inputs_size + outputs_size;
- TfLiteTensor tensors[tensors_size] = {
- CreateQuantizedTensor(input_data, input_data_quantized, input_dims,
- input_scale, input_zero_point),
- CreateQuantizedTensor(output_data, output_dims, output_scale,
- output_zero_point),
- };
-
- int inputs_array_data[] = {1, 0};
- TfLiteIntArray* inputs_array = IntArrayFromInts(inputs_array_data);
- int outputs_array_data[] = {1, 1};
- TfLiteIntArray* outputs_array = IntArrayFromInts(outputs_array_data);
-
- const TfLiteRegistration registration = ops::micro::Register_RELU6();
- micro::KernelRunner runner(registration, tensors, tensors_size, inputs_array,
- outputs_array,
- /*builtin_data=*/nullptr, micro_test::reporter);
-
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.InitAndPrepare());
- TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, runner.Invoke());
-
- AsymmetricQuantize(golden, golden_quantized, output_elements_count,
- output_scale, output_zero_point);
-
- for (int i = 0; i < output_elements_count; ++i) {
- TF_LITE_MICRO_EXPECT_EQ(golden_quantized[i], output_data[i]);
- }
-}
-
-} // namespace
-} // namespace testing
-} // namespace tflite
-
-TF_LITE_MICRO_TESTS_BEGIN
-
-TF_LITE_MICRO_TEST(SimpleReluTestFloat) {
- const int output_elements_count = 10;
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {
- 1.0, 2.0, 3.0, 4.0, 5.0, -1.0, -2.0, -3.0, -4.0, -5.0,
- };
- const float golden[] = {1.0, 2.0, 3.0, 4.0, 5.0, 0, 0, 0, 0, 0};
- const int output_shape[] = {2, 1, 5};
- float output_data[output_elements_count];
- tflite::testing::TestReluFloat(input_shape, input_data, output_shape, golden,
- output_data);
-}
-
-TF_LITE_MICRO_TEST(SimpleRelu6TestFloat) {
- const int output_elements_count = 10;
- float output_data[output_elements_count];
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {4.0, 5.0, 6.0, 7.0, 8.0,
- -4.0, -5.0, -6.0, -7.0, -8.0};
- const int output_shape[] = {2, 1, 5};
- const float golden[] = {
- 4.0, 5.0, 6.0, 6.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0,
- };
-
- tflite::testing::TestRelu6Float(input_shape, input_data, output_shape, golden,
- output_data);
-}
-
-TF_LITE_MICRO_TEST(SimpleReluTestUint8) {
- const int elements_count = 10;
-
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {1, 2, 3, 4, 5, -1, -2, -3, -4, -5};
- uint8_t input_quantized[elements_count];
- const int output_shape[] = {2, 1, 5};
- const float golden[] = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0};
- uint8_t golden_quantized[elements_count];
- uint8_t output_data[elements_count];
-
- const float input_scale = 0.5f;
- const int input_zero_point = 127;
- const float output_scale = 0.5f;
- const int output_zero_point = 127;
-
- tflite::testing::TestReluUint8(input_shape, input_data, input_quantized,
- input_scale, input_zero_point, golden,
- golden_quantized, output_shape, output_scale,
- output_zero_point, output_data);
-}
-
-TF_LITE_MICRO_TEST(SimpleRelu6TestUint8) {
- const int elements_count = 10;
-
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {4, 5, 6, 7, 8, -1, -2, -3, -4, -5};
- uint8_t input_quantized[elements_count];
- const int output_shape[] = {2, 1, 5};
- const float golden[] = {4, 5, 6, 6, 6, 0, 0, 0, 0, 0};
- uint8_t golden_quantized[elements_count];
- uint8_t output_data[elements_count];
-
- const float input_scale = 0.5f;
- const int input_zero_point = 127;
- const float output_scale = 0.5f;
- const int output_zero_point = 127;
-
- tflite::testing::TestRelu6Uint8(input_shape, input_data, input_quantized,
- input_scale, input_zero_point, golden,
- golden_quantized, output_shape, output_scale,
- output_zero_point, output_data);
-}
-
-TF_LITE_MICRO_TEST(SimpleReluTestInt8) {
- const int elements_count = 10;
-
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {1, 2, 3, 4, 5, -1, -2, -3, -4, -5};
- int8_t input_quantized[elements_count];
- const int output_shape[] = {2, 1, 5};
- const float golden[] = {1, 2, 3, 4, 5, 0, 0, 0, 0, 0};
- int8_t golden_quantized[elements_count];
- int8_t output_data[elements_count];
-
- const float input_scale = 0.5f;
- const int input_zero_point = 0;
- const float output_scale = 0.5f;
- const int output_zero_point = 0;
-
- tflite::testing::TestReluInt8(input_shape, input_data, input_quantized,
- input_scale, input_zero_point, golden,
- golden_quantized, output_shape, output_scale,
- output_zero_point, output_data);
-}
-
-TF_LITE_MICRO_TEST(SimpleRelu6TestInt8) {
- const int elements_count = 10;
-
- const int input_shape[] = {2, 1, 5};
- const float input_data[] = {4, 5, 6, 7, 8, -1, -2, -3, -4, -5};
- int8_t input_quantized[elements_count];
- const int output_shape[] = {2, 1, 5};
- const float golden[] = {4, 5, 6, 6, 6, 0, 0, 0, 0, 0};
- int8_t golden_quantized[elements_count];
- int8_t output_data[elements_count];
-
- const float input_scale = 0.5f;
- const int input_zero_point = 127;
- const float output_scale = 0.5f;
- const int output_zero_point = 127;
-
- tflite::testing::TestRelu6Int8(input_shape, input_data, input_quantized,
- input_scale, input_zero_point, golden,
- golden_quantized, output_shape, output_scale,
- output_zero_point, output_data);
-}
-
-TF_LITE_MICRO_TESTS_END
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/add.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/add.cc
deleted file mode 100644
index 79a04875..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/add.cc
+++ /dev/null
@@ -1,240 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/add.h"
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/reference/integer_ops/add.h"
-#include "tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/op_macros.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/memory_helpers.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace add {
-
-constexpr int kInputTensor1 = 0;
-constexpr int kInputTensor2 = 1;
-constexpr int kOutputTensor = 0;
-
-struct OpData {
- bool requires_broadcast;
-
- // These fields are used in both the general 8-bit -> 8bit quantized path,
- // and the special 16-bit -> 16bit quantized path
- int input1_shift;
- int input2_shift;
- int32_t output_activation_min;
- int32_t output_activation_max;
-
- // These fields are used only in the general 8-bit -> 8bit quantized path
- int32_t input1_multiplier;
- int32_t input2_multiplier;
- int32_t output_multiplier;
- int output_shift;
- int left_shift;
- int32_t input1_offset;
- int32_t input2_offset;
- int32_t output_offset;
-
- // Used only for float evals:
- float output_activation_min_f32;
- float output_activation_max_f32;
-};
-
-TfLiteStatus CalculateOpData(TfLiteContext* context, TfLiteAddParams* params,
- const TfLiteTensor* input1,
- const TfLiteTensor* input2, TfLiteTensor* output,
- OpData* data) {
- data->requires_broadcast = !HaveSameShapes(input1, input2);
-
- if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- // 8bit -> 8bit general quantized path, with general rescalings
- data->input1_offset = -input1->params.zero_point;
- data->input2_offset = -input2->params.zero_point;
- data->output_offset = output->params.zero_point;
- data->left_shift = 20;
- const double twice_max_input_scale =
- 2 * static_cast(
- std::max(input1->params.scale, input2->params.scale));
- const double real_input1_multiplier =
- static_cast(input1->params.scale) / twice_max_input_scale;
- const double real_input2_multiplier =
- static_cast(input2->params.scale) / twice_max_input_scale;
- const double real_output_multiplier =
- twice_max_input_scale /
- ((1 << data->left_shift) * static_cast(output->params.scale));
-
- QuantizeMultiplierSmallerThanOneExp(
- real_input1_multiplier, &data->input1_multiplier, &data->input1_shift);
-
- QuantizeMultiplierSmallerThanOneExp(
- real_input2_multiplier, &data->input2_multiplier, &data->input2_shift);
-
- QuantizeMultiplierSmallerThanOneExp(
- real_output_multiplier, &data->output_multiplier, &data->output_shift);
-
- TF_LITE_ENSURE_STATUS(CalculateActivationRangeQuantized(
- context, params->activation, output, &data->output_activation_min,
- &data->output_activation_max));
- } else if (output->type == kTfLiteFloat32) {
- CalculateActivationRange(params->activation,
- &data->output_activation_min_f32,
- &data->output_activation_max_f32);
- }
-
- return kTfLiteOk;
-}
-
-void EvalAdd(TfLiteContext* context, TfLiteNode* node, TfLiteAddParams* params,
- const OpData* data, const TfLiteEvalTensor* input1,
- const TfLiteEvalTensor* input2, TfLiteEvalTensor* output) {
- tflite::ArithmeticParams op_params;
- SetActivationParams(data->output_activation_min_f32,
- data->output_activation_max_f32, &op_params);
-#define TF_LITE_ADD(opname) \
- reference_ops::opname(op_params, tflite::micro::GetTensorShape(input1), \
- tflite::micro::GetTensorData(input1), \
- tflite::micro::GetTensorShape(input2), \
- tflite::micro::GetTensorData(input2), \
- tflite::micro::GetTensorShape(output), \
- tflite::micro::GetTensorData(output))
- if (data->requires_broadcast) {
- TF_LITE_ADD(BroadcastAdd4DSlow);
- } else {
- TF_LITE_ADD(Add);
- }
-#undef TF_LITE_ADD
-}
-
-TfLiteStatus EvalAddQuantized(TfLiteContext* context, TfLiteNode* node,
- TfLiteAddParams* params, const OpData* data,
- const TfLiteEvalTensor* input1,
- const TfLiteEvalTensor* input2,
- TfLiteEvalTensor* output) {
- if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- tflite::ArithmeticParams op_params;
- op_params.left_shift = data->left_shift;
- op_params.input1_offset = data->input1_offset;
- op_params.input1_multiplier = data->input1_multiplier;
- op_params.input1_shift = data->input1_shift;
- op_params.input2_offset = data->input2_offset;
- op_params.input2_multiplier = data->input2_multiplier;
- op_params.input2_shift = data->input2_shift;
- op_params.output_offset = data->output_offset;
- op_params.output_multiplier = data->output_multiplier;
- op_params.output_shift = data->output_shift;
- SetActivationParams(data->output_activation_min,
- data->output_activation_max, &op_params);
- bool need_broadcast = reference_ops::ProcessBroadcastShapes(
- tflite::micro::GetTensorShape(input1),
- tflite::micro::GetTensorShape(input2), &op_params);
-#define TF_LITE_ADD(type, opname, dtype) \
- type::opname(op_params, tflite::micro::GetTensorShape(input1), \
- tflite::micro::GetTensorData(input1), \
- tflite::micro::GetTensorShape(input2), \
- tflite::micro::GetTensorData(input2), \
- tflite::micro::GetTensorShape(output), \
- tflite::micro::GetTensorData(output));
- if (output->type == kTfLiteInt8) {
- if (need_broadcast) {
- TF_LITE_ADD(reference_integer_ops, BroadcastAdd4DSlow, int8_t);
- } else {
- TF_LITE_ADD(reference_integer_ops, Add, int8_t);
- }
- } else {
- if (need_broadcast) {
- TF_LITE_ADD(reference_ops, BroadcastAdd4DSlow, uint8_t);
- } else {
- TF_LITE_ADD(reference_ops, Add, uint8_t);
- }
- }
-#undef TF_LITE_ADD
- }
-
- return kTfLiteOk;
-}
-
-void* Init(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(OpData));
-}
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- TFLITE_DCHECK(node->builtin_data != nullptr);
-
- const TfLiteTensor* input1 = GetInput(context, node, kInputTensor1);
- const TfLiteTensor* input2 = GetInput(context, node, kInputTensor2);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- OpData* data = static_cast(node->user_data);
- auto* params = reinterpret_cast(node->builtin_data);
-
- TF_LITE_ENSURE_STATUS(
- CalculateOpData(context, params, input1, input2, output, data));
-
- return kTfLiteOk;
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
- auto* params = reinterpret_cast(node->builtin_data);
-
- TFLITE_DCHECK(node->user_data != nullptr);
- const OpData* data = static_cast(node->user_data);
-
- const TfLiteEvalTensor* input1 =
- tflite::micro::GetEvalInput(context, node, kInputTensor1);
- const TfLiteEvalTensor* input2 =
- tflite::micro::GetEvalInput(context, node, kInputTensor2);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- if (output->type == kTfLiteFloat32) {
- EvalAdd(context, node, params, data, input1, input2, output);
- } else if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- TF_LITE_ENSURE_OK(context, EvalAddQuantized(context, node, params, data,
- input1, input2, output));
- } else {
- TF_LITE_KERNEL_LOG(context, "Type %s (%d) not supported.",
- TfLiteTypeGetName(output->type), output->type);
- return kTfLiteError;
- }
-
- return kTfLiteOk;
-}
-
-} // namespace add
-
-TfLiteRegistration Register_ADD() {
- return {/*init=*/add::Init,
- /*free=*/nullptr,
- /*prepare=*/add::Prepare,
- /*invoke=*/add::Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/arg_min_max.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/arg_min_max.cc
deleted file mode 100644
index 12ac0019..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/arg_min_max.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/arg_min_max.h"
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/kernels/micro_utils.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace arg_min_max {
-
-constexpr int kInputTensor = 0;
-constexpr int kAxis = 1;
-constexpr int kOutputTensor = 0;
-
-template
-inline void ArgMinMaxHelper(const RuntimeShape& input1_shape,
- const T1* input1_data, const T3* input2_data,
- const RuntimeShape& output_shape, T2* output_data,
- bool is_arg_max) {
- if (is_arg_max) {
- reference_ops::ArgMinMax(input1_shape, input1_data, input2_data,
- output_shape, output_data, micro::Greater());
- } else {
- reference_ops::ArgMinMax(input1_shape, input1_data, input2_data,
- output_shape, output_data, micro::Less());
- }
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node, bool is_arg_max) {
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- const TfLiteEvalTensor* axis =
- tflite::micro::GetEvalInput(context, node, kAxis);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
-#define TF_LITE_ARG_MIN_MAX(data_type, axis_type, output_type) \
- ArgMinMaxHelper(tflite::micro::GetTensorShape(input), \
- tflite::micro::GetTensorData(input), \
- tflite::micro::GetTensorData(axis), \
- tflite::micro::GetTensorShape(output), \
- tflite::micro::GetTensorData(output), \
- is_arg_max)
- if (axis->type == kTfLiteInt32) {
- if (output->type == kTfLiteInt32) {
- switch (input->type) {
- case kTfLiteFloat32:
- TF_LITE_ARG_MIN_MAX(float, int32_t, int32_t);
- break;
- case kTfLiteUInt8:
- TF_LITE_ARG_MIN_MAX(uint8_t, int32_t, int32_t);
- break;
- case kTfLiteInt8:
- TF_LITE_ARG_MIN_MAX(int8_t, int32_t, int32_t);
- break;
- default:
- TF_LITE_KERNEL_LOG(context,
- "Only float32, uint8_t and int8_t are "
- "supported currently, got %s.",
- TfLiteTypeGetName(input->type));
- return kTfLiteError;
- }
- } else {
- TF_LITE_KERNEL_LOG(context,
- "Only int32_t are supported currently, got %s.",
- TfLiteTypeGetName(output->type));
- return kTfLiteError;
- }
- } else {
- TF_LITE_KERNEL_LOG(context, "Only int32_t are supported currently, got %s.",
- TfLiteTypeGetName(axis->type));
- return kTfLiteError;
- }
-
-#undef TF_LITE_ARG_MIN_MAX
-
- return kTfLiteOk;
-}
-
-TfLiteStatus ArgMinEval(TfLiteContext* context, TfLiteNode* node) {
- return Eval(context, node, false);
-}
-
-TfLiteStatus ArgMaxEval(TfLiteContext* context, TfLiteNode* node) {
- return Eval(context, node, true);
-}
-
-} // namespace arg_min_max
-
-TfLiteRegistration Register_ARG_MAX() {
- return {/*init=*/nullptr,
- /*free=*/nullptr,
- /*prepare=*/nullptr,
- /*invoke=*/arg_min_max::ArgMaxEval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-TfLiteRegistration Register_ARG_MIN() {
- return {/*init=*/nullptr,
- /*free=*/nullptr,
- /*prepare=*/nullptr,
- /*invoke=*/arg_min_max::ArgMinEval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/ceil.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/ceil.cc
deleted file mode 100644
index 3bce8a73..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/ceil.cc
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/ceil.h"
-
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace ceil {
-
-constexpr int kInputTensor = 0;
-constexpr int kOutputTensor = 0;
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
- TF_LITE_ENSURE_EQ(context, NumInputs(node), 1);
- TF_LITE_ENSURE_EQ(context, NumOutputs(node), 1);
- TF_LITE_ENSURE_TYPES_EQ(context, input->type, kTfLiteFloat32);
- TF_LITE_ENSURE_TYPES_EQ(context, output->type, input->type);
- TF_LITE_ENSURE_EQ(context, output->bytes, input->bytes);
- TF_LITE_ENSURE_EQ(context, output->dims->size, input->dims->size);
- for (int i = 0; i < output->dims->size; ++i) {
- TF_LITE_ENSURE_EQ(context, output->dims->data[i], input->dims->data[i]);
- }
- return kTfLiteOk;
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- reference_ops::Ceil(tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
-
- return kTfLiteOk;
-}
-} // namespace ceil
-
-TfLiteRegistration Register_CEIL() {
- return {/*init=*/nullptr,
- /*free=*/nullptr,
- /*prepare=*/ceil::Prepare,
- /*invoke=*/ceil::Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/circular_buffer.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/circular_buffer.cc
deleted file mode 100644
index b5a8ae1b..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/circular_buffer.cc
+++ /dev/null
@@ -1,178 +0,0 @@
-/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/compatibility.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/reference/integer_ops/add.h"
-#include "tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/op_macros.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-
-/*
- * The circular buffer custom operator is used to implement strided streaming
- * convolutions on TFLite Micro. Each time this operator is invoked, it checks
- * whether or not to run, based on a predetermined stride in time. If the op
- * runs, it inserts the input into the end of the output buffer and shifts the
- * output values towards the start of the buffer. It discards the oldest value
- * in the output buffer.
- *
- * Input: [, , , ]
- *
- * After shifting:
- * Output: [, , , ]
- *
- * We make some assumptions in this custom operator:
- * - Input shape must be [1, 1, 1, depth]
- * - Output shape must be [1, num_slots, 1, depth]
- * - Input and output types must match.
- * - Input and output quantization params must be identical.
- */
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace circular_buffer {
-
-namespace {
-
-// The CircularBuffer op has one input and one output tensor.
-constexpr int kInputTensor = 0;
-constexpr int kOutputTensor = 0;
-
-// TODO(b/149795762): Add this to TfLiteStatus enum.
-constexpr int kTfLiteAbort = -9;
-
-// These fields control the stride period of a strided streaming model. This op
-// returns kTfLiteAbort until cycles_until_run-- is zero. At this time,
-// cycles_until_run is reset to cycles_max.
-struct OpData {
- int cycles_until_run;
- int cycles_max;
-};
-
-// These constants represent constants specific to the music detect model.
-// They exist until (b/132070898) is fixed.
-constexpr int kMaxOpDataSize = 7;
-int op_data_counter = 0;
-OpData op_data_array[kMaxOpDataSize];
-
-} // namespace
-
-void Free(TfLiteContext* context, void* buffer) { op_data_counter = 0; }
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- TF_LITE_ENSURE(context, input != nullptr);
- TF_LITE_ENSURE(context, output != nullptr);
- TF_LITE_ENSURE_EQ(context, 1, output->dims->data[0]);
- TF_LITE_ENSURE_EQ(context, 1, input->dims->data[0]);
- TF_LITE_ENSURE_EQ(context, 1, input->dims->data[1]);
- TF_LITE_ENSURE_EQ(context, 1, output->dims->data[2]);
- TF_LITE_ENSURE_EQ(context, 1, input->dims->data[2]);
- TF_LITE_ENSURE_EQ(context, output->dims->data[3], input->dims->data[3]);
-
- TF_LITE_ENSURE_TYPES_EQ(context, input->type, output->type);
-
- // The circular buffer custom operator currently only supports int8_t.
- TF_LITE_ENSURE_TYPES_EQ(context, input->type, kTfLiteInt8);
-
- // TODO(b/132070898): Use statically slotted OpData structures until a
- // scratch memory API is ready.
- TFLITE_DCHECK_LE(op_data_counter, kMaxOpDataSize);
- OpData* op_data = &op_data_array[op_data_counter++];
- // The last circular buffer layer (length 5) simply accumulates outputs, and
- // does not run periodically.
- // TODO(b/150001379): Move this special case logic to the tflite flatbuffer.
- if (output->dims->data[1] == 5) {
- op_data->cycles_max = 1;
- } else {
- op_data->cycles_max = 2;
- }
- op_data->cycles_until_run = op_data->cycles_max;
- node->user_data = op_data;
-
- return kTfLiteOk;
-}
-
-// Shifts buffer over by the output depth, and write new input to end of buffer.
-// num_slots is the number of samples stored in the output buffer.
-// depth is the size of each sample.
-void EvalInt8(const int8_t* input, int num_slots, int depth, int8_t* output) {
- memmove(output, &output[depth], (num_slots - 1) * depth);
- memcpy(&output[(num_slots - 1) * depth], input, depth);
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- OpData* data = reinterpret_cast(node->user_data);
-
- int num_slots = output->dims->data[1];
- int depth = output->dims->data[3];
-
- if (input->type == kTfLiteInt8) {
- EvalInt8(tflite::micro::GetTensorData(input), num_slots, depth,
- tflite::micro::GetTensorData(output));
- } else {
- TF_LITE_KERNEL_LOG(context, "Type %s (%d) not supported.",
- TfLiteTypeGetName(input->type), input->type);
- return kTfLiteError;
- }
-
- if (--data->cycles_until_run != 0) {
- // Signal the interpreter to end current run if the delay before op invoke
- // has not been reached.
- // TODO(b/149795762): Add kTfLiteAbort to TfLiteStatus enum.
- return static_cast(kTfLiteAbort);
- }
-
- // If prepare is ever called more than one time (for example, when testing the
- // ambient model, the interpreter is created a few times), this op data
- // counter needs to be reset so that future instances do not overrun this op
- // data array.
- op_data_counter = 0;
-
- data->cycles_until_run = data->cycles_max;
-
- return kTfLiteOk;
-}
-
-} // namespace circular_buffer
-
-TfLiteRegistration* Register_CIRCULAR_BUFFER() {
- static TfLiteRegistration r = {/*init=*/nullptr,
- /*free=*/circular_buffer::Free,
- /*prepare=*/circular_buffer::Prepare,
- /*invoke=*/circular_buffer::Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
- return &r;
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/add.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/add.cc
deleted file mode 100644
index 6db88839..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/add.cc
+++ /dev/null
@@ -1,246 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/add.h"
-
-#include "cmsis/CMSIS/NN/Include/arm_nnfunctions.h"
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/reference/integer_ops/add.h"
-#include "tensorflow/lite/kernels/internal/reference/process_broadcast_shapes.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/op_macros.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-#include "tensorflow/lite/micro/memory_helpers.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace add {
-
-constexpr int kInputTensor1 = 0;
-constexpr int kInputTensor2 = 1;
-constexpr int kOutputTensor = 0;
-
-struct OpData {
- bool requires_broadcast;
-
- // These fields are used in both the general 8-bit -> 8bit quantized path,
- // and the special 16-bit -> 16bit quantized path
- int input1_shift;
- int input2_shift;
- int32_t output_activation_min;
- int32_t output_activation_max;
-
- // These fields are used only in the general 8-bit -> 8bit quantized path
- int32_t input1_multiplier;
- int32_t input2_multiplier;
- int32_t output_multiplier;
- int output_shift;
- int left_shift;
- int32_t input1_offset;
- int32_t input2_offset;
- int32_t output_offset;
-};
-
-TfLiteStatus CalculateOpData(TfLiteContext* context, TfLiteAddParams* params,
- const TfLiteTensor* input1,
- const TfLiteTensor* input2, TfLiteTensor* output,
- OpData* data) {
- data->requires_broadcast = !HaveSameShapes(input1, input2);
-
- if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- // 8bit -> 8bit general quantized path, with general rescalings
- data->input1_offset = -input1->params.zero_point;
- data->input2_offset = -input2->params.zero_point;
- data->output_offset = output->params.zero_point;
- data->left_shift = 20;
- const double twice_max_input_scale =
- 2 * static_cast(
- std::max(input1->params.scale, input2->params.scale));
- const double real_input1_multiplier =
- static_cast(input1->params.scale) / twice_max_input_scale;
- const double real_input2_multiplier =
- static_cast(input2->params.scale) / twice_max_input_scale;
- const double real_output_multiplier =
- twice_max_input_scale /
- ((1 << data->left_shift) * static_cast(output->params.scale));
-
- QuantizeMultiplierSmallerThanOneExp(
- real_input1_multiplier, &data->input1_multiplier, &data->input1_shift);
-
- QuantizeMultiplierSmallerThanOneExp(
- real_input2_multiplier, &data->input2_multiplier, &data->input2_shift);
-
- QuantizeMultiplierSmallerThanOneExp(
- real_output_multiplier, &data->output_multiplier, &data->output_shift);
-
- TF_LITE_ENSURE_STATUS(CalculateActivationRangeQuantized(
- context, params->activation, output, &data->output_activation_min,
- &data->output_activation_max));
- }
-
- return kTfLiteOk;
-}
-
-void EvalAdd(TfLiteContext* context, TfLiteNode* node, TfLiteAddParams* params,
- const OpData* data, const TfLiteEvalTensor* input1,
- const TfLiteEvalTensor* input2, TfLiteEvalTensor* output) {
- float output_activation_min, output_activation_max;
- CalculateActivationRange(params->activation, &output_activation_min,
- &output_activation_max);
- tflite::ArithmeticParams op_params;
- SetActivationParams(output_activation_min, output_activation_max, &op_params);
-#define TF_LITE_ADD(opname) \
- reference_ops::opname(op_params, tflite::micro::GetTensorShape(input1), \
- tflite::micro::GetTensorData(input1), \
- tflite::micro::GetTensorShape(input2), \
- tflite::micro::GetTensorData(input2), \
- tflite::micro::GetTensorShape(output), \
- tflite::micro::GetTensorData(output))
- if (data->requires_broadcast) {
- TF_LITE_ADD(BroadcastAdd4DSlow);
- } else {
- TF_LITE_ADD(Add);
- }
-#undef TF_LITE_ADD
-}
-
-TfLiteStatus EvalAddQuantized(TfLiteContext* context, TfLiteNode* node,
- TfLiteAddParams* params, const OpData* data,
- const TfLiteEvalTensor* input1,
- const TfLiteEvalTensor* input2,
- TfLiteEvalTensor* output) {
- if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- tflite::ArithmeticParams op_params;
- op_params.left_shift = data->left_shift;
- op_params.input1_offset = data->input1_offset;
- op_params.input1_multiplier = data->input1_multiplier;
- op_params.input1_shift = data->input1_shift;
- op_params.input2_offset = data->input2_offset;
- op_params.input2_multiplier = data->input2_multiplier;
- op_params.input2_shift = data->input2_shift;
- op_params.output_offset = data->output_offset;
- op_params.output_multiplier = data->output_multiplier;
- op_params.output_shift = data->output_shift;
- SetActivationParams(data->output_activation_min,
- data->output_activation_max, &op_params);
- bool need_broadcast = reference_ops::ProcessBroadcastShapes(
- tflite::micro::GetTensorShape(input1),
- tflite::micro::GetTensorShape(input2), &op_params);
-#define TF_LITE_ADD(type, opname, dtype) \
- type::opname(op_params, tflite::micro::GetTensorShape(input1), \
- tflite::micro::GetTensorData(input1), \
- tflite::micro::GetTensorShape(input2), \
- tflite::micro::GetTensorData(input2), \
- tflite::micro::GetTensorShape(output), \
- tflite::micro::GetTensorData(output));
- if (output->type == kTfLiteInt8) {
- if (need_broadcast) {
- TF_LITE_ADD(reference_integer_ops, BroadcastAdd4DSlow, int8_t);
- } else {
- arm_elementwise_add_s8(
- tflite::micro::GetTensorData(input1),
- tflite::micro::GetTensorData(input2),
- op_params.input1_offset, op_params.input1_multiplier,
- op_params.input1_shift, op_params.input2_offset,
- op_params.input2_multiplier, op_params.input2_shift,
- op_params.left_shift, tflite::micro::GetTensorData(output),
- op_params.output_offset, op_params.output_multiplier,
- op_params.output_shift, op_params.quantized_activation_min,
- op_params.quantized_activation_max,
- MatchingElementsSize(tflite::micro::GetTensorShape(input1),
- tflite::micro::GetTensorShape(input2),
- tflite::micro::GetTensorShape(output)));
- }
- } else {
- if (need_broadcast) {
- TF_LITE_ADD(reference_ops, BroadcastAdd4DSlow, uint8_t);
- } else {
- TF_LITE_ADD(reference_ops, Add, uint8_t);
- }
- }
-#undef TF_LITE_ADD
- }
-
- return kTfLiteOk;
-}
-
-void* Init(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(OpData));
-}
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- TFLITE_DCHECK(node->builtin_data != nullptr);
-
- const TfLiteTensor* input1 = GetInput(context, node, kInputTensor1);
- const TfLiteTensor* input2 = GetInput(context, node, kInputTensor2);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- OpData* data = static_cast(node->user_data);
- auto* params = reinterpret_cast(node->builtin_data);
-
- TF_LITE_ENSURE_STATUS(
- CalculateOpData(context, params, input1, input2, output, data));
-
- return kTfLiteOk;
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
- auto* params = reinterpret_cast(node->builtin_data);
-
- const TfLiteEvalTensor* input1 =
- tflite::micro::GetEvalInput(context, node, kInputTensor1);
- const TfLiteEvalTensor* input2 =
- tflite::micro::GetEvalInput(context, node, kInputTensor2);
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- TFLITE_DCHECK(node->user_data != nullptr);
- const OpData* data = static_cast(node->user_data);
-
- if (output->type == kTfLiteFloat32) {
- EvalAdd(context, node, params, data, input1, input2, output);
- } else if (output->type == kTfLiteUInt8 || output->type == kTfLiteInt8) {
- TF_LITE_ENSURE_OK(context, EvalAddQuantized(context, node, params, data,
- input1, input2, output));
- } else {
- TF_LITE_KERNEL_LOG(context, "Type %s (%d) not supported.",
- TfLiteTypeGetName(output->type), output->type);
- return kTfLiteError;
- }
-
- return kTfLiteOk;
-}
-
-} // namespace add
-
-TfLiteRegistration Register_ADD() {
- return {/*init=*/add::Init,
- /*free=*/nullptr,
- /*prepare=*/add::Prepare,
- /*invoke=*/add::Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/conv.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/conv.cc
deleted file mode 100644
index cf1ce8cb..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/conv.cc
+++ /dev/null
@@ -1,455 +0,0 @@
-/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/conv.h"
-
-#include "cmsis/CMSIS/NN/Include/arm_nn_types.h"
-#include "cmsis/CMSIS/NN/Include/arm_nnfunctions.h"
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/common.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/reference/integer_ops/conv.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/padding.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace conv {
-
-constexpr int kInputTensor = 0;
-constexpr int kFilterTensor = 1;
-constexpr int kBiasTensor = 2;
-constexpr int kOutputTensor = 0;
-constexpr int kMaxChannels = 256;
-
-// Conv is quantized along dimension 0:
-// https://www.tensorflow.org/lite/performance/quantization_spec
-constexpr int kConvQuantizedDimension = 0;
-
-struct OpData {
- TfLitePaddingValues padding;
-
- // Cached tensor zero point values for quantized operations.
- int32_t input_zero_point;
- int32_t filter_zero_point;
- int32_t output_zero_point;
-
- // The scaling factor from input to output (aka the 'real multiplier') can
- // be represented as a fixed point multiplier plus a left shift.
- int32_t output_multiplier;
- int output_shift;
-
- // Per channel output multiplier and shift.
- // TODO(b/141139247): Allocate these dynamically when possible.
- int32_t per_channel_output_multiplier[kMaxChannels];
- int32_t per_channel_output_shift[kMaxChannels];
-
- // The range of the fused activation layer. For example for kNone and
- // uint8_t these would be 0 and 255.
- int32_t output_activation_min;
- int32_t output_activation_max;
-
- // Index to buffer for optimizations if applicable.
- int buffer_idx;
-};
-
-inline PaddingType RuntimePaddingType(TfLitePadding padding) {
- switch (padding) {
- case TfLitePadding::kTfLitePaddingSame:
- return PaddingType::kSame;
- case TfLitePadding::kTfLitePaddingValid:
- return PaddingType::kValid;
- case TfLitePadding::kTfLitePaddingUnknown:
- default:
- return PaddingType::kNone;
- }
-}
-
-TfLiteStatus CalculateOpData(TfLiteContext* context, TfLiteNode* node,
- TfLiteConvParams* params, int width, int height,
- int filter_width, int filter_height, int out_width,
- int out_height, const TfLiteType data_type,
- OpData* data) {
- bool has_bias = node->inputs->size == 3;
- // Check number of inputs/outputs
- TF_LITE_ENSURE(context, has_bias || node->inputs->size == 2);
- TF_LITE_ENSURE_EQ(context, node->outputs->size, 1);
-
- // Matching GetWindowedOutputSize in TensorFlow.
- auto padding = params->padding;
- data->padding = ComputePaddingHeightWidth(
- params->stride_height, params->stride_width,
- params->dilation_height_factor, params->dilation_width_factor, height,
- width, filter_height, filter_width, padding, &out_height, &out_width);
-
- // Note that quantized inference requires that all tensors have their
- // parameters set. This is usually done during quantized training.
- if (data_type != kTfLiteFloat32) {
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- const TfLiteTensor* filter = GetInput(context, node, kFilterTensor);
- const TfLiteTensor* bias =
- GetOptionalInputTensor(context, node, kBiasTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
- int num_channels = filter->dims->data[kConvQuantizedDimension];
-
- TF_LITE_ENSURE_STATUS(tflite::PopulateConvolutionQuantizationParams(
- context, input, filter, bias, output, params->activation,
- &data->output_multiplier, &data->output_shift,
- &data->output_activation_min, &data->output_activation_max,
- data->per_channel_output_multiplier,
- reinterpret_cast(data->per_channel_output_shift), num_channels));
- }
- return kTfLiteOk;
-}
-
-void* Init(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(OpData));
-}
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
-#if defined(__ARM_FEATURE_DSP) || defined(__ARM_FEATURE_MVE)
- int32_t buf_size = 0;
-
- TFLITE_DCHECK(node->user_data != nullptr);
- TFLITE_DCHECK(node->builtin_data != nullptr);
- auto* params = reinterpret_cast(node->builtin_data);
- auto* data = reinterpret_cast(node->user_data);
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- const TfLiteTensor* filter = GetInput(context, node, kFilterTensor);
- const TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- RuntimeShape input_shape = GetTensorShape(input);
- RuntimeShape output_shape = GetTensorShape(output);
-
- // Initialize cmsis-nn input dimensions
- cmsis_nn_dims input_dims;
- input_dims.n = MatchingDim(input_shape, 0, output_shape, 0);
- input_dims.h = input->dims->data[1];
- input_dims.w = input->dims->data[2];
- input_dims.c = input_shape.Dims(3);
-
- // Initialize cmsis-nn filter dimensions
- cmsis_nn_dims filter_dims;
- filter_dims.n = output_shape.Dims(3);
- filter_dims.h = filter->dims->data[1];
- filter_dims.w = filter->dims->data[2];
- filter_dims.c = input_dims.c;
-
- // Initialize cmsis-nn output dimensions
- cmsis_nn_dims output_dims;
- output_dims.n = input_dims.n;
- output_dims.h = output->dims->data[1];
- output_dims.w = output->dims->data[2];
- output_dims.c = output_shape.Dims(3);
-
- TF_LITE_ENSURE_STATUS(CalculateOpData(
- context, node, params, input_dims.w, input_dims.h, filter_dims.w,
- filter_dims.h, output_dims.w, output_dims.h, input->type, data));
-
- data->input_zero_point = input->params.zero_point;
- data->filter_zero_point = filter->params.zero_point;
- data->output_zero_point = output->params.zero_point;
-
- if (input->type == kTfLiteInt8) {
- // Initialize cmsis-nn convolution parameters
- cmsis_nn_conv_params conv_params;
- conv_params.input_offset = -input->params.zero_point;
- conv_params.output_offset = output->params.zero_point;
- conv_params.stride.h = params->stride_height;
- conv_params.stride.w = params->stride_width;
- conv_params.dilation.h = params->dilation_height_factor;
- conv_params.dilation.w = params->dilation_width_factor;
- conv_params.padding.h = data->padding.height;
- conv_params.padding.w = data->padding.width;
- conv_params.activation.min = data->output_activation_min;
- conv_params.activation.max = data->output_activation_max;
-
- buf_size = arm_convolve_wrapper_s8_get_buffer_size(
- &conv_params, &input_dims, &filter_dims, &output_dims);
- }
-
- if (buf_size > 0) {
- TF_LITE_ENSURE_STATUS(context->RequestScratchBufferInArena(
- context, buf_size, &data->buffer_idx));
- } else {
- data->buffer_idx = -1;
- }
-#endif
- return kTfLiteOk;
-}
-
-TfLiteStatus EvalQuantized(TfLiteContext* context, TfLiteNode* node,
- TfLiteConvParams* params, const OpData& data,
- const TfLiteEvalTensor* input,
- const TfLiteEvalTensor* filter,
- const TfLiteEvalTensor* bias,
- TfLiteEvalTensor* im2col,
- TfLiteEvalTensor* hwcn_weights,
- TfLiteEvalTensor* output) {
- const int32_t input_offset = -data.input_zero_point;
- const int32_t filter_offset = -data.filter_zero_point;
- const int32_t output_offset = data.output_zero_point;
-
- ConvParams op_params;
- op_params.padding_type = RuntimePaddingType(params->padding);
- op_params.padding_values.width = data.padding.width;
- op_params.padding_values.height = data.padding.height;
- op_params.stride_width = params->stride_width;
- op_params.stride_height = params->stride_height;
- op_params.dilation_width_factor = params->dilation_width_factor;
- op_params.dilation_height_factor = params->dilation_height_factor;
- op_params.input_offset = input_offset;
- op_params.weights_offset = filter_offset;
- op_params.output_offset = output_offset;
- op_params.output_multiplier = data.output_multiplier;
- op_params.output_shift = -data.output_shift;
- op_params.quantized_activation_min = data.output_activation_min;
- op_params.quantized_activation_max = data.output_activation_max;
- reference_ops::Conv(op_params, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(filter),
- tflite::micro::GetTensorData(filter),
- tflite::micro::GetTensorShape(bias),
- tflite::micro::GetTensorData(bias),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output),
- tflite::micro::GetTensorShape(im2col),
- tflite::micro::GetTensorData(im2col), nullptr);
- return kTfLiteOk;
-}
-
-TfLiteStatus EvalQuantizedPerChannel(
- TfLiteContext* context, TfLiteNode* node, TfLiteConvParams* params,
- const OpData& data, const TfLiteEvalTensor* input,
- const TfLiteEvalTensor* filter, const TfLiteEvalTensor* bias,
- TfLiteEvalTensor* output, TfLiteEvalTensor* im2col) {
- // Initialize cmsis-nn convolution parameters
- cmsis_nn_conv_params conv_params;
- conv_params.input_offset = -data.input_zero_point;
- conv_params.output_offset = data.output_zero_point;
- conv_params.stride.h = params->stride_height;
- conv_params.stride.w = params->stride_width;
- conv_params.dilation.h = params->dilation_height_factor;
- conv_params.dilation.w = params->dilation_width_factor;
- conv_params.padding.h = data.padding.height;
- conv_params.padding.w = data.padding.width;
- conv_params.activation.min = data.output_activation_min;
- conv_params.activation.max = data.output_activation_max;
-
- // Initialize cmsis-nn per channel quantization parameters
- cmsis_nn_per_channel_quant_params quant_params;
- quant_params.multiplier =
- const_cast(data.per_channel_output_multiplier);
- quant_params.shift = const_cast(data.per_channel_output_shift);
-
-#if defined(__ARM_FEATURE_DSP) || defined(__ARM_FEATURE_MVE)
- RuntimeShape filter_shape = tflite::micro::GetTensorShape(filter);
- RuntimeShape input_shape = tflite::micro::GetTensorShape(input);
- RuntimeShape output_shape = tflite::micro::GetTensorShape(output);
- RuntimeShape bias_shape = tflite::micro::GetTensorShape(bias);
-
- // Consistency check.
- TFLITE_DCHECK_LE(conv_params.activation.min, conv_params.activation.max);
- TFLITE_DCHECK_EQ(input_shape.DimensionsCount(), 4);
- TFLITE_DCHECK_EQ(filter_shape.DimensionsCount(), 4);
- TFLITE_DCHECK_EQ(output_shape.DimensionsCount(), 4);
- const int batch_size = MatchingDim(input_shape, 0, output_shape, 0);
- const int input_depth = MatchingDim(input_shape, 3, filter_shape, 3);
- const int output_depth = MatchingDim(filter_shape, 0, output_shape, 3);
- if (tflite::micro::GetTensorData(bias)) {
- TFLITE_DCHECK_EQ(bias_shape.FlatSize(), output_depth);
- }
-
- // Initialize cmsis-nn dimensions
- // Input
- cmsis_nn_dims input_dims;
- input_dims.n = batch_size;
- input_dims.h = input_shape.Dims(1);
- input_dims.w = input_shape.Dims(2);
- input_dims.c = input_depth;
-
- // Filter
- cmsis_nn_dims filter_dims;
- filter_dims.n = output_depth;
- filter_dims.h = filter_shape.Dims(1);
- filter_dims.w = filter_shape.Dims(2);
- filter_dims.c = input_depth;
-
- // Bias
- cmsis_nn_dims bias_dims;
- bias_dims.n = 1;
- bias_dims.h = 1;
- bias_dims.w = 1;
- bias_dims.c = output_depth;
-
- // Output
- cmsis_nn_dims output_dims;
- output_dims.n = batch_size;
- output_dims.h = output_shape.Dims(1);
- output_dims.w = output_shape.Dims(2);
- output_dims.c = output_depth;
-
- // Initialize cmsis-nn context
- cmsis_nn_context ctx;
- ctx.buf = nullptr;
- ctx.size = 0;
-
- if (data.buffer_idx > -1) {
- ctx.buf = context->GetScratchBuffer(context, data.buffer_idx);
- // Note: ctx.size is currently not used in cmsis-nn.
- // The buffer should be allocated in the Prepare function through
- // arm_convolve_wrapper_s8_get_buffer_size
- }
-
- // arm_convolve_wrapper_s8 dispatches the optimized kernel accordingly with
- // the parameters passed
- arm_status status = arm_convolve_wrapper_s8(
- &ctx, &conv_params, &quant_params, &input_dims,
- tflite::micro::GetTensorData(input), &filter_dims,
- tflite::micro::GetTensorData(filter), &bias_dims,
- tflite::micro::GetTensorData(bias), &output_dims,
- tflite::micro::GetTensorData(output));
-
- if (status == ARM_MATH_SUCCESS) {
- return kTfLiteOk;
- } else {
- return kTfLiteError;
- }
-
-#else
-#pragma message( \
- "CMSIS-NN optimization for conv not available for this target. Using reference kernel.")
-
- ConvParams op_params;
- conv_params.input_offset = -data.input_zero_point;
- conv_params.output_offset = data.output_zero_point;
- op_params.stride_height = params->stride_height;
- op_params.stride_width = params->stride_width;
- op_params.dilation_height_factor = params->dilation_height_factor;
- op_params.dilation_width_factor = params->dilation_width_factor;
- op_params.padding_values.height = data.padding.height;
- op_params.padding_values.width = data.padding.width;
- op_params.quantized_activation_min = data->output_activation_min;
- op_params.quantized_activation_max = data->output_activation_max;
-
- reference_integer_ops::ConvPerChannel(
- op_params, data->per_channel_output_multiplier,
- data->per_channel_output_shift, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(filter),
- tflite::micro::GetTensorData(filter),
- tflite::micro::GetTensorShape(bias),
- tflite::micro::GetTensorData(bias),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
-
-#endif
- return kTfLiteOk;
-}
-
-TfLiteStatus EvalFloat(TfLiteContext* context, TfLiteNode* node,
- TfLiteConvParams* params, const OpData& data,
- const TfLiteEvalTensor* input,
- const TfLiteEvalTensor* filter,
- const TfLiteEvalTensor* bias, TfLiteEvalTensor* im2col,
- TfLiteEvalTensor* hwcn_weights,
- TfLiteEvalTensor* output) {
- float output_activation_min, output_activation_max;
- CalculateActivationRange(params->activation, &output_activation_min,
- &output_activation_max);
- // TODO(b/154032858): Investigate removing extra copies.
- ConvParams op_params;
- op_params.padding_type = RuntimePaddingType(params->padding);
- op_params.padding_values.width = data.padding.width;
- op_params.padding_values.height = data.padding.height;
- op_params.stride_width = params->stride_width;
- op_params.stride_height = params->stride_height;
- op_params.dilation_width_factor = params->dilation_width_factor;
- op_params.dilation_height_factor = params->dilation_height_factor;
- op_params.float_activation_min = output_activation_min;
- op_params.float_activation_max = output_activation_max;
-
- reference_ops::Conv(op_params, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(filter),
- tflite::micro::GetTensorData(filter),
- tflite::micro::GetTensorShape(bias),
- tflite::micro::GetTensorData(bias),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output),
- tflite::micro::GetTensorShape(im2col),
- tflite::micro::GetTensorData(im2col));
- return kTfLiteOk;
-}
-
-TfLiteStatus Eval(TfLiteContext* context, TfLiteNode* node) {
- auto* params = reinterpret_cast(node->builtin_data);
-
- const TfLiteEvalTensor* input =
- tflite::micro::GetEvalInput(context, node, kInputTensor);
- const TfLiteEvalTensor* filter =
- tflite::micro::GetEvalInput(context, node, kFilterTensor);
- const TfLiteEvalTensor* bias =
- (NumInputs(node) == 3)
- ? tflite::micro::GetEvalInput(context, node, kBiasTensor)
- : nullptr;
- TfLiteEvalTensor* output =
- tflite::micro::GetEvalOutput(context, node, kOutputTensor);
-
- TFLITE_DCHECK(node->user_data != nullptr);
- const OpData& data = *(static_cast(node->user_data));
-
- switch (input->type) { // Already know in/out types are same.
- case kTfLiteFloat32:
- EvalFloat(context, node, params, data, input, filter, bias, nullptr,
- nullptr, output);
- break;
- case kTfLiteInt8:
- return EvalQuantizedPerChannel(context, node, params, data, input, filter,
- bias, output, nullptr);
- break;
- case kTfLiteUInt8:
- return EvalQuantized(context, node, params, data, input, filter, bias,
- nullptr, nullptr, output);
- break;
- default:
- TF_LITE_KERNEL_LOG(context, "Type %s (%d) not supported.",
- TfLiteTypeGetName(input->type), input->type);
- return kTfLiteError;
- }
- return kTfLiteOk;
-}
-
-} // namespace conv
-
-TfLiteRegistration Register_CONV_2D() {
- return {/*init=*/conv::Init,
- /*free=*/nullptr,
- /*prepare=*/conv::Prepare,
- /*invoke=*/conv::Eval,
- /*profiling_string=*/nullptr,
- /*builtin_code=*/0,
- /*custom_name=*/nullptr,
- /*version=*/0};
-}
-
-} // namespace micro
-} // namespace ops
-} // namespace tflite
diff --git a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/depthwise_conv.cc b/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/depthwise_conv.cc
deleted file mode 100644
index 42ac15a0..00000000
--- a/components/tflite_micro/Source/tensorflow/lite/micro/kernels/cmsis-nn/depthwise_conv.cc
+++ /dev/null
@@ -1,478 +0,0 @@
-/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-==============================================================================*/
-
-#include "tensorflow/lite/kernels/internal/reference/integer_ops/depthwise_conv.h"
-
-#include "cmsis/CMSIS/NN/Include/arm_nnfunctions.h"
-#include "tensorflow/lite/c/builtin_op_data.h"
-#include "tensorflow/lite/c/common.h"
-#include "tensorflow/lite/kernels/internal/common.h"
-#include "tensorflow/lite/kernels/internal/quantization_util.h"
-#include "tensorflow/lite/kernels/internal/reference/depthwiseconv_float.h"
-#include "tensorflow/lite/kernels/internal/reference/depthwiseconv_uint8.h"
-#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
-#include "tensorflow/lite/kernels/kernel_util.h"
-#include "tensorflow/lite/kernels/padding.h"
-#include "tensorflow/lite/micro/kernels/kernel_util.h"
-
-namespace tflite {
-namespace ops {
-namespace micro {
-namespace depthwise_conv {
-namespace {
-
-constexpr int kInputTensor = 0;
-constexpr int kFilterTensor = 1;
-constexpr int kBiasTensor = 2;
-constexpr int kOutputTensor = 0;
-constexpr int kMaxChannels = 256;
-
-// Depthwise conv is quantized along dimension 3:
-// https://www.tensorflow.org/lite/performance/quantization_spec
-constexpr int kDepthwiseConvQuantizedDimension = 3;
-
-struct OpData {
- TfLitePaddingValues padding;
-
- // Cached tensor zero point values for quantized operations.
- int32_t input_zero_point;
- int32_t filter_zero_point;
- int32_t output_zero_point;
-
- // The scaling factor from input to output (aka the 'real multiplier') can
- // be represented as a fixed point multiplier plus a left shift.
- int32_t output_multiplier;
- int output_shift;
-
- // Per channel output multiplier and shift.
- // TODO: Allocate dynamic buffers when b/158779832 is resolved
- int32_t per_channel_output_multiplier[kMaxChannels];
- int32_t per_channel_output_shift[kMaxChannels];
- // The range of the fused activation layer. For example for kNone and
- // uint8_t these would be 0 and 255.
- int32_t output_activation_min;
- int32_t output_activation_max;
- // Index to buffer for optimizations if applicable.
- int buffer_idx;
-};
-
-TfLiteStatus CalculateOpData(TfLiteContext* context, TfLiteNode* node,
- TfLiteDepthwiseConvParams* params, int width,
- int height, int filter_width, int filter_height,
- const TfLiteType data_type, OpData* data) {
- bool has_bias = node->inputs->size == 3;
- // Check number of inputs/outputs
- TF_LITE_ENSURE(context, has_bias || node->inputs->size == 2);
- TF_LITE_ENSURE_EQ(context, node->outputs->size, 1);
-
- int unused_output_height, unused_output_width;
- // Set buffer index to a reset value
- data->buffer_idx = -1;
- data->padding = ComputePaddingHeightWidth(
- params->stride_height, params->stride_width, 1, 1, height, width,
- filter_height, filter_width, params->padding, &unused_output_height,
- &unused_output_width);
-
- // Note that quantized inference requires that all tensors have their
- // parameters set. This is usually done during quantized training.
- if (data_type != kTfLiteFloat32) {
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- const TfLiteTensor* filter = GetInput(context, node, kFilterTensor);
- const TfLiteTensor* bias =
- GetOptionalInputTensor(context, node, kBiasTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
- int num_channels = filter->dims->data[kDepthwiseConvQuantizedDimension];
-
- return tflite::PopulateConvolutionQuantizationParams(
- context, input, filter, bias, output, params->activation,
- &data->output_multiplier, &data->output_shift,
- &data->output_activation_min, &data->output_activation_max,
- data->per_channel_output_multiplier,
- reinterpret_cast(data->per_channel_output_shift), num_channels);
- }
- return kTfLiteOk;
-}
-
-} // namespace
-
-void* Init(TfLiteContext* context, const char* buffer, size_t length) {
- TFLITE_DCHECK(context->AllocatePersistentBuffer != nullptr);
- return context->AllocatePersistentBuffer(context, sizeof(OpData));
-}
-
-TfLiteStatus Prepare(TfLiteContext* context, TfLiteNode* node) {
- TFLITE_DCHECK(node->user_data != nullptr);
- TFLITE_DCHECK(node->builtin_data != nullptr);
-
- OpData* data = static_cast(node->user_data);
- auto* params =
- reinterpret_cast(node->builtin_data);
-
- const TfLiteTensor* input = GetInput(context, node, kInputTensor);
- const TfLiteTensor* filter = GetInput(context, node, kFilterTensor);
- TfLiteTensor* output = GetOutput(context, node, kOutputTensor);
-
- const TfLiteType data_type = input->type;
- int width = SizeOfDimension(input, 2);
- int height = SizeOfDimension(input, 1);
- int filter_width = SizeOfDimension(filter, 2);
- int filter_height = SizeOfDimension(filter, 1);
-
- if (input->type == kTfLiteInt8) {
- // Allocate memory for per-channel quantization parameters
- const int num_channels =
- filter->dims->data[kDepthwiseConvQuantizedDimension];
- TFLITE_DCHECK_LE(num_channels, kMaxChannels);
-
- TF_LITE_ENSURE_EQ(context, filter->quantization.type,
- kTfLiteAffineQuantization);
-
- // All per-channel quantized tensors need valid zero point and scale arrays.
- const auto* affine_quantization =
- reinterpret_cast(
- filter->quantization.params);
- TF_LITE_ENSURE(context, affine_quantization);
- TF_LITE_ENSURE(context, affine_quantization->scale);
- TF_LITE_ENSURE(context, affine_quantization->zero_point);
- TF_LITE_ENSURE(
- context, affine_quantization->scale->size == 1 ||
- affine_quantization->scale->size ==
- filter->dims->data[kDepthwiseConvQuantizedDimension]);
- TF_LITE_ENSURE_EQ(context, affine_quantization->scale->size,
- affine_quantization->zero_point->size);
- }
-
- TF_LITE_ENSURE_STATUS(CalculateOpData(context, node, params, width, height,
- filter_width, filter_height, data_type,
- data));
-
- data->input_zero_point = input->params.zero_point;
- data->filter_zero_point = filter->params.zero_point;
- data->output_zero_point = output->params.zero_point;
-
- if (input->type == kTfLiteInt8) {
- RuntimeShape input_shape = GetTensorShape(input);
- RuntimeShape output_shape = GetTensorShape(output);
- RuntimeShape filter_shape = GetTensorShape(filter);
- TFLITE_DCHECK_EQ(input_shape.DimensionsCount(), 4);
- TFLITE_DCHECK_EQ(filter_shape.DimensionsCount(), 4);
- TFLITE_DCHECK_EQ(output_shape.DimensionsCount(), 4);
-
- const int batch_size = MatchingDim(input_shape, 0, output_shape, 0);
- const int output_depth = MatchingDim(output_shape, 3, filter_shape, 3);
- TFLITE_DCHECK_EQ(batch_size, 1); /* Only batch = 1 is supported */
-
- cmsis_nn_dims input_dims;
- input_dims.n = batch_size;
- input_dims.h = height;
- input_dims.w = width;
- input_dims.c = input_shape.Dims(3);
-
- cmsis_nn_dims filter_dims;
- filter_dims.n = 1;
- filter_dims.h = filter_height;
- filter_dims.w = filter_width;
- filter_dims.c = output_depth;
-
- cmsis_nn_dims output_dims;
- output_dims.n = batch_size;
- output_dims.h = output_shape.Dims(1);
- output_dims.w = output_shape.Dims(2);
- output_dims.c = output_depth;
-
- cmsis_nn_dw_conv_params dw_conv_params;
- dw_conv_params.padding.h = data->padding.height;
- dw_conv_params.padding.w = data->padding.width;
-
- const int32_t buf_size = arm_depthwise_conv_wrapper_s8_get_buffer_size(
- &dw_conv_params, &input_dims, &filter_dims, &output_dims);
-
- if (buf_size > 0) {
- TF_LITE_ENSURE_STATUS(context->RequestScratchBufferInArena(
- context, buf_size, &data->buffer_idx));
- } else {
- data->buffer_idx = -1;
- }
- }
- return kTfLiteOk;
-}
-
-void EvalFloat(TfLiteContext* context, TfLiteNode* node,
- TfLiteDepthwiseConvParams* params, const OpData* data,
- const TfLiteEvalTensor* input, const TfLiteEvalTensor* filter,
- const TfLiteEvalTensor* bias, TfLiteEvalTensor* output) {
- float output_activation_min, output_activation_max;
- CalculateActivationRange(params->activation, &output_activation_min,
- &output_activation_max);
-
- tflite::DepthwiseParams op_params;
- // Padding type is ignored, but still set.
- op_params.padding_type = PaddingType::kSame;
- op_params.padding_values.width = data->padding.width;
- op_params.padding_values.height = data->padding.height;
- op_params.stride_width = params->stride_width;
- op_params.stride_height = params->stride_height;
- op_params.dilation_width_factor = params->dilation_width_factor;
- op_params.dilation_height_factor = params->dilation_height_factor;
- op_params.depth_multiplier = params->depth_multiplier;
- op_params.float_activation_min = output_activation_min;
- op_params.float_activation_max = output_activation_max;
-
- tflite::reference_ops::DepthwiseConv(
- op_params, tflite::micro::GetTensorShape(input),
- tflite::micro::GetTensorData(input),
- tflite::micro::GetTensorShape(filter),
- tflite::micro::GetTensorData(filter),
- tflite::micro::GetTensorShape(bias),
- tflite::micro::GetTensorData(bias),
- tflite::micro::GetTensorShape(output),
- tflite::micro::GetTensorData(output));
-}
-
-void EvalQuantizedPerChannel(TfLiteContext* context, TfLiteNode* node,
- TfLiteDepthwiseConvParams* params, OpData* data,
- const TfLiteEvalTensor* input,
- const TfLiteEvalTensor* filter,
- const TfLiteEvalTensor* bias,
- TfLiteEvalTensor* output) {
- cmsis_nn_dw_conv_params dw_conv_params;
- dw_conv_params.dilation.h = params->dilation_height_factor;
- dw_conv_params.dilation.w = params->dilation_width_factor;
- // Call to reference implementation can be removed when dilation is supported
- // in the optimized implementations.
- if (1 == dw_conv_params.dilation.h && 1 == dw_conv_params.dilation.w) {
- dw_conv_params.input_offset = -data->input_zero_point;
- dw_conv_params.output_offset = data->output_zero_point;
- dw_conv_params.stride.h = params->stride_height;
- dw_conv_params.stride.w = params->stride_width;
- dw_conv_params.padding.h = data->padding.height;
- dw_conv_params.padding.w = data->padding.width;
- // TODO(b/130439627): Use calculated value for clamping.
- dw_conv_params.activation.min = std::numeric_limits::min();
- dw_conv_params.activation.max = std::numeric_limits::max();
- dw_conv_params.ch_mult = params->depth_multiplier;
-
- cmsis_nn_per_channel_quant_params quant_params;
- quant_params.multiplier = data->per_channel_output_multiplier;
- quant_params.shift = data->per_channel_output_shift;
-
- RuntimeShape filter_shape = tflite::micro::GetTensorShape(filter);
- RuntimeShape input_shape = tflite::micro::GetTensorShape(input);
- RuntimeShape output_shape = tflite::micro::GetTensorShape(output);
- RuntimeShape bias_shape = tflite::micro::GetTensorShape(bias);
-
- TFLITE_DCHECK_LE(dw_conv_params.activation.min,
- dw_conv_params.activation.max);
-
- const int batch_size = MatchingDim(input_shape, 0, output_shape, 0);
- const int output_depth = MatchingDim(filter_shape, 3, output_shape, 3);
-
- if (tflite::micro::GetTensorData