diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject index af3ca006..2340603b 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject @@ -51,10 +51,12 @@ + + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject index 250cbc2b..24117a89 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject @@ -1,8 +1,8 @@ [PreviousLibFiles] -LibFiles=Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f303xc.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\system_stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; +LibFiles=Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_spi.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_spi.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f303xc.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\system_stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h; [PreviousUsedCubeIDEFiles] -SourceFiles=Core\Src\main.c;Core\Src\stm32f3xx_it.c;Core\Src\stm32f3xx_hal_msp.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;;; +SourceFiles=Core\Src\main.c;Core\Src\stm32f3xx_it.c;Core\Src\stm32f3xx_hal_msp.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;;; HeaderPath=Drivers\STM32F3xx_HAL_Driver\Inc;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy;Drivers\CMSIS\Device\ST\STM32F3xx\Include;Drivers\CMSIS\Include;Core\Inc; CDefines=USE_FULL_LL_DRIVER;USE_HAL_DRIVER;STM32F303xC;USE_FULL_LL_DRIVER;USE_HAL_DRIVER;USE_HAL_DRIVER; diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project index f2a80080..15c127f3 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project @@ -38,7 +38,7 @@ - 1686569576442 + 1686649539105 Loader 9 @@ -46,6 +46,15 @@ 1.0-name-matches-false-false-ARMCM4_STM32F3 + + 1686649539109 + Loader + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-third_party + + 1686569589593 Loader/ARMCM4_STM32F3 @@ -55,6 +64,33 @@ 1.0-name-matches-false-false-GCC + + 1686649554358 + Loader/third_party + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-fatfs + + + + 1686649567497 + Loader/third_party/fatfs + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-src + + + + 1686649590858 + Loader/third_party/fatfs/src/option + 5 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-unicode.c + + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml index d60e03c8..31e7eed5 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h index d3314a56..f649d17e 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h @@ -117,6 +117,42 @@ #define BOOT_COM_USB_RX_MAX_DATA (63) +/**************************************************************************************** +* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N +****************************************************************************************/ +/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable + * to 1. This enables support for firmware updates from a file stored on a locally + * attached file system such as an SD-card. Note that this interface can be enabled + * together with one of the remote communication interfaces such as UART, CAN or USB. + * + * Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during + * a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each + * time a new string formatted log entry is available. This could be used during testing + * by outputting the string on UART or to create a log file on the file system itself. + * + * Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error + * occurs during the firmware update. This could for example be used to turn on an error + * LED to inform the user that something went wrong. Inspecting the log messages provides + * additional information on the error cause. + * + * Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new + * firmware update is started by the bootloader. + * + * Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a + * firmware update is completed by the bootloader. + */ +/** \brief Enable/disable support for firmware updates from a locally attached storage.*/ +#define BOOT_FILE_SYS_ENABLE (1) +/** \brief Enable/disable logging messages during firmware updates. */ +#define BOOT_FILE_LOGGING_ENABLE (1) +/** \brief Enable/disable a hook function that is called upon detection of an error. */ +#define BOOT_FILE_ERROR_HOOK_ENABLE (1) +/** \brief Enable/disable a hook function that is called at the start of the update. */ +#define BOOT_FILE_STARTED_HOOK_ENABLE (1) +/** \brief Enable/disable a hook function that is called at the end of the update. */ +#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1) + + /**************************************************************************************** * B A C K D O O R E N T R Y C O N F I G U R A T I O N ****************************************************************************************/ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c index ca6cbf48..1a6aa7e7 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c @@ -53,7 +53,22 @@ static const tFlashSector flashLayout[] = /* { 0x08006800, 0x00800 }, flash sector 13 - 2kb (reserved for bootloader)*/ /* { 0x08007000, 0x00800 }, flash sector 14 - 2kb (reserved for bootloader)*/ /* { 0x08007800, 0x00800 }, flash sector 15 - 2kb (reserved for bootloader)*/ - { 0x08008000, 0x08000 }, /* flash sectors 16 to 31 - 32kb */ + /* { 0x08008000, 0x00800 }, flash sector 16 - 2kb (reserved for bootloader)*/ + /* { 0x08008800, 0x00800 }, flash sector 17 - 2kb (reserved for bootloader)*/ + /* { 0x08009000, 0x00800 }, flash sector 18 - 2kb (reserved for bootloader)*/ + /* { 0x08009800, 0x00800 }, flash sector 19 - 2kb (reserved for bootloader)*/ + { 0x0800A000, 0x00800 }, /* flash sector 20 - 2kb */ + { 0x0800A800, 0x00800 }, /* flash sector 21 - 2kb */ + { 0x0800B000, 0x00800 }, /* flash sector 22 - 2kb */ + { 0x0800B800, 0x00800 }, /* flash sector 23 - 2kb */ + { 0x0800C000, 0x00800 }, /* flash sector 24 - 2kb */ + { 0x0800C800, 0x00800 }, /* flash sector 25 - 2kb */ + { 0x0800D000, 0x00800 }, /* flash sector 26 - 2kb */ + { 0x0800D800, 0x00800 }, /* flash sector 27 - 2kb */ + { 0x0800E000, 0x00800 }, /* flash sector 28 - 2kb */ + { 0x0800E800, 0x00800 }, /* flash sector 29 - 2kb */ + { 0x0800F000, 0x00800 }, /* flash sector 30 - 2kb */ + { 0x0800F800, 0x00800 }, /* flash sector 31 - 2kb */ { 0x08010000, 0x08000 }, /* flash sectors 32 to 47 - 32kb */ { 0x08018000, 0x08000 }, /* flash sectors 48 to 63 - 32kb */ { 0x08020000, 0x08000 }, /* flash sectors 64 to 79 - 32kb */ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c index bf19902e..b620c0eb 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c @@ -300,6 +300,168 @@ blt_bool NvmWriteChecksumHook(void) #endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */ +/**************************************************************************************** +* F I L E S Y S T E M I N T E R F A C E H O O K F U N C T I O N S +****************************************************************************************/ + +#if (BOOT_FILE_SYS_ENABLE > 0) + +/**************************************************************************************** +* Constant data declarations +****************************************************************************************/ +/** \brief Firmware filename. */ +static const blt_char firmwareFilename[] = "/demoprog_olimexino_stm32f3.srec"; + + +/**************************************************************************************** +* Local data declarations +****************************************************************************************/ +#if (BOOT_FILE_LOGGING_ENABLE > 0) +/** \brief Data structure for grouping log-file related information. */ +static struct +{ + FIL handle; /**< FatFS handle to the log-file. */ + blt_bool canUse; /**< Flag to indicate if the log-file can be used. */ +} logfile; +#endif + + +/************************************************************************************//** +** \brief Callback that gets called to check whether a firmware update from +** local file storage should be started. This could for example be when +** a switch is pressed, when a certain file is found on the local file +** storage, etc. +** \return BLT_TRUE if a firmware update is requested, BLT_FALSE otherwise. +** +****************************************************************************************/ +blt_bool FileIsFirmwareUpdateRequestedHook(void) +{ + FILINFO fileInfoObject = { 0 }; /* needs to be zeroed according to f_stat docs */; + + /* Current example implementation looks for a predetermined firmware file on the + * SD-card. If the SD-card is accessible and the firmware file was found the firmware + * update is started. When successfully completed, the firmware file is deleted. + * During the firmware update, progress information is written to a file called + * bootlog.txt and additionally outputted on UART @57600 bps for debugging purposes. + */ + /* check if firmware file is present and SD-card is accessible */ + if (f_stat(firmwareFilename, &fileInfoObject) == FR_OK) + { + /* check if the filesize is valid and that it is not a directory */ + if ( (fileInfoObject.fsize > 0) && (!(fileInfoObject.fattrib & AM_DIR)) ) + { + /* all conditions are met to start a firmware update from local file storage */ + return BLT_TRUE; + } + } + /* still here so no firmware update request is pending */ + return BLT_FALSE; +} /*** end of FileIsFirmwareUpdateRequestedHook ***/ + + +/************************************************************************************//** +** \brief Callback to obtain the filename of the firmware file that should be +** used during the firmware update from the local file storage. This +** hook function is called at the beginning of the firmware update from +** local storage sequence. +** \return valid firmware filename with full path or BLT_NULL. +** +****************************************************************************************/ +const blt_char *FileGetFirmwareFilenameHook(void) +{ + return firmwareFilename; +} /*** end of FileGetFirmwareFilenameHook ***/ + + +#if (BOOT_FILE_STARTED_HOOK_ENABLE > 0) +/************************************************************************************//** +** \brief Callback that gets called to inform the application that a firmware +** update from local storage just started. +** \return none. +** +****************************************************************************************/ +void FileFirmwareUpdateStartedHook(void) +{ + #if (BOOT_FILE_LOGGING_ENABLE > 0) + /* create/overwrite the logfile */ + logfile.canUse = BLT_FALSE; + if (f_open(&logfile.handle, "/bootlog.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) + { + logfile.canUse = BLT_TRUE; + } + #endif +} /*** end of FileFirmwareUpdateStartedHook ***/ +#endif /* BOOT_FILE_STARTED_HOOK_ENABLE > 0 */ + + +#if (BOOT_FILE_COMPLETED_HOOK_ENABLE > 0) +/************************************************************************************//** +** \brief Callback that gets called to inform the application that a firmware +** update was successfully completed. +** \return none. +** +****************************************************************************************/ +void FileFirmwareUpdateCompletedHook(void) +{ + #if (BOOT_FILE_LOGGING_ENABLE > 0) + /* close the log file */ + if (logfile.canUse == BLT_TRUE) + { + f_close(&logfile.handle); + } + /* now delete the firmware file from the disk since the update was successful */ + f_unlink(firmwareFilename); + #endif +} /*** end of FileFirmwareUpdateCompletedHook ***/ +#endif /* BOOT_FILE_COMPLETED_HOOK_ENABLE > 0 */ + + +#if (BOOT_FILE_ERROR_HOOK_ENABLE > 0) +/************************************************************************************//** +** \brief Callback that gets called in case an error occurred during a firmware +** update. Refer to for a list of available error codes. +** \return none. +** +****************************************************************************************/ +void FileFirmwareUpdateErrorHook(blt_int8u error_code) +{ + #if (BOOT_FILE_LOGGING_ENABLE > 0) + /* error detected which stops the firmware update, so close the log file */ + if (logfile.canUse == BLT_TRUE) + { + f_close(&logfile.handle); + } + #endif +} /*** end of FileFirmwareUpdateErrorHook ***/ +#endif /* BOOT_FILE_ERROR_HOOK_ENABLE > 0 */ + + +#if (BOOT_FILE_LOGGING_ENABLE > 0) +/************************************************************************************//** +** \brief Callback that gets called each time new log information becomes +** available during a firmware update. +** \param info_string Pointer to a character array with the log entry info. +** \return none. +** +****************************************************************************************/ +void FileFirmwareUpdateLogHook(blt_char *info_string) +{ + /* write the string to the log file */ + if (logfile.canUse == BLT_TRUE) + { + if (f_puts(info_string, &logfile.handle) < 0) + { + logfile.canUse = BLT_FALSE; + f_close(&logfile.handle); + } + } +} /*** end of FileFirmwareUpdateLogHook ***/ +#endif /* BOOT_FILE_LOGGING_ENABLE > 0 */ + + +#endif /* BOOT_FILE_SYS_ENABLE > 0 */ + + /**************************************************************************************** * S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S ****************************************************************************************/ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc index 908f55ea..13721592 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc @@ -11,29 +11,35 @@ CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,BS1,BS2 CAN.NART=ENABLE CAN.Prescaler=8 File.Version=6 +GPIO.groupedBy=Group By Peripherals KeepUserPlacement=false Mcu.CPN=STM32F303RCT6 Mcu.Family=STM32F3 Mcu.IP0=CAN Mcu.IP1=NVIC Mcu.IP2=RCC -Mcu.IP3=USART3 -Mcu.IP4=USB -Mcu.IPNb=5 +Mcu.IP3=SPI2 +Mcu.IP4=USART3 +Mcu.IP5=USB +Mcu.IPNb=6 Mcu.Name=STM32F303R(B-C)Tx Mcu.Package=LQFP64 Mcu.Pin0=PF0-OSC_IN Mcu.Pin1=PF1-OSC_OUT -Mcu.Pin10=PB9 +Mcu.Pin10=PA12 +Mcu.Pin11=PC12 +Mcu.Pin12=PD2 +Mcu.Pin13=PB8 +Mcu.Pin14=PB9 Mcu.Pin2=PA0 Mcu.Pin3=PA5 Mcu.Pin4=PB10 Mcu.Pin5=PB11 -Mcu.Pin6=PA11 -Mcu.Pin7=PA12 -Mcu.Pin8=PC12 -Mcu.Pin9=PB8 -Mcu.PinsNb=11 +Mcu.Pin6=PB13 +Mcu.Pin7=PB14 +Mcu.Pin8=PB15 +Mcu.Pin9=PA11 +Mcu.PinsNb=15 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F303RCTx @@ -66,6 +72,15 @@ PB10.Signal=USART3_TX PB11.Locked=true PB11.Mode=Asynchronous PB11.Signal=USART3_RX +PB13.Locked=true +PB13.Mode=Full_Duplex_Master +PB13.Signal=SPI2_SCK +PB14.Locked=true +PB14.Mode=Full_Duplex_Master +PB14.Signal=SPI2_MISO +PB15.Locked=true +PB15.Mode=Full_Duplex_Master +PB15.Signal=SPI2_MOSI PB8.Locked=true PB8.Mode=CAN_Activate PB8.Signal=CAN_RX @@ -75,6 +90,10 @@ PC12.GPIOParameters=PinState PC12.Locked=true PC12.PinState=GPIO_PIN_SET PC12.Signal=GPIO_Output +PD2.GPIOParameters=GPIO_Speed +PD2.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PD2.Locked=true +PD2.Signal=GPIO_Output PF0-OSC_IN.Mode=HSE-External-Oscillator PF0-OSC_IN.Signal=RCC_OSC_IN PF1-OSC_OUT.Mode=HSE-External-Oscillator @@ -107,7 +126,7 @@ ProjectManager.StackSize=0x1000 ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_CAN_Init-CAN-true-HAL-false,4-MX_USART3_UART_Init-USART3-false-LL-true,5-MX_USB_PCD_Init-USB-true-HAL-false +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_CAN_Init-CAN-true-HAL-false,4-MX_USART3_UART_Init-USART3-false-LL-true,5-MX_USB_PCD_Init-USB-true-HAL-false,6-MX_SPI2_Init-SPI2-true-LL-false RCC.ADC12outputFreq_Value=72000000 RCC.ADC34outputFreq_Value=72000000 RCC.AHBFreq_Value=72000000 @@ -149,6 +168,14 @@ RCC.USART2Freq_Value=36000000 RCC.USART3Freq_Value=36000000 RCC.USBFreq_Value=48000000 RCC.VCOOutput2Freq_Value=8000000 +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2 +SPI2.CalculateBaudRate=18.0 MBits/s +SPI2.DataSize=SPI_DATASIZE_8BIT +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler +SPI2.Mode=SPI_MODE_MASTER +SPI2.NSSPMode=SPI_NSS_PULSE_DISABLE +SPI2.VirtualType=VM_MASTER USART3.BaudRate=57600 USART3.IPParameters=VirtualMode-Asynchronous,BaudRate USART3.VirtualMode-Asynchronous=VM_ASYNC diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h index b07cca5a..21dac54d 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h @@ -36,6 +36,7 @@ extern "C" { #include "stm32f3xx_ll_utils.h" #include "stm32f3xx_ll_pwr.h" #include "stm32f3xx_ll_dma.h" +#include "stm32f3xx_ll_spi.h" #include "stm32f3xx_ll_usart.h" #include "stm32f3xx_ll_gpio.h" @@ -63,6 +64,7 @@ extern "C" { void Error_Handler(void); void MX_CAN_Init(void); void MX_USB_PCD_Init(void); +void MX_SPI2_Init(void); /* USER CODE BEGIN EFP */ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c index ce36861c..dc41fb44 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c @@ -192,6 +192,64 @@ void MX_CAN_Init(void) } +/** + * @brief SPI2 Initialization Function + * @param None + * @retval None + */ +void MX_SPI2_Init(void) +{ + + /* USER CODE BEGIN SPI2_Init 0 */ + /* Note that this function is generated but not actually used. The FatFS port handles + * the SPI initialization. + */ + /* USER CODE END SPI2_Init 0 */ + + LL_SPI_InitTypeDef SPI_InitStruct = {0}; + + LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* Peripheral clock enable */ + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2); + + LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB); + /**SPI2 GPIO Configuration + PB13 ------> SPI2_SCK + PB14 ------> SPI2_MISO + PB15 ------> SPI2_MOSI + */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + GPIO_InitStruct.Alternate = LL_GPIO_AF_5; + LL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI2_Init 1 */ + + /* USER CODE END SPI2_Init 1 */ + /* SPI2 parameter configuration*/ + SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct.Mode = LL_SPI_MODE_MASTER; + SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; + SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE; + SPI_InitStruct.NSS = LL_SPI_NSS_SOFT; + SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2; + SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct.CRCPoly = 7; + LL_SPI_Init(SPI2, &SPI_InitStruct); + LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA); + LL_SPI_DisableNSSPulseMgt(SPI2); + /* USER CODE BEGIN SPI2_Init 2 */ + + /* USER CODE END SPI2_Init 2 */ + +} + /** * @brief USART3 Initialization Function * @param None @@ -293,10 +351,14 @@ static void MX_GPIO_Init(void) LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB); LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC); + LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD); /**/ LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5); + /**/ + LL_GPIO_ResetOutputPin(GPIOD, LL_GPIO_PIN_2); + /**/ LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_12); @@ -322,6 +384,14 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /**/ + GPIO_InitStruct.Pin = LL_GPIO_PIN_2; + GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + LL_GPIO_Init(GPIOD, &GPIO_InitStruct); + } /* USER CODE BEGIN 4 */ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c index 3d59d38a..77909ba1 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c @@ -235,13 +235,17 @@ void HAL_MspDeInit(void) LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5); /* Deinit used GPIOs, except GPIOC to make sure USB DISC (PC12) stays high. */ + LL_GPIO_DeInit(GPIOD); LL_GPIO_DeInit(GPIOB); LL_GPIO_DeInit(GPIOA); /* UART clock disable. */ LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_USART3); + /* SPI clock disable. */ + LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_SPI2); /* GPIO ports clock disable, except GPIOC to make sure USB DISC (PC12) stays high. */ + LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOD); LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOB); LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOA); diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec index 78a33f3d..b446e661 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec @@ -1,1463 +1,2358 @@ S02100006F70656E626C745F6F6C696D6578696E6F5F73746D333266332E737265632B -S3150800000000A00020CD060008A1060008A3060008E7 -S31508000010A5060008A7060008A906000800000000B3 -S31508000020000000000000000000000000AB06000809 -S31508000030AD06000800000000AF060008B10600087B -S315080000401D0700081D0700081D0700081D070008F2 -S315080000501D0700081D0700081D0700081D070008E2 -S315080000601D0700081D0700081D0700081D070008D2 -S315080000701D0700081D0700081D0700081D070008C2 -S315080000801D0700081D0700081D0700081D070008B2 -S315080000901D0700081D0700081D0700081D070008A2 -S315080000A01D0700081D0700081D0700081D07000892 -S315080000B01D0700081D0700081D0700081D07000882 -S315080000C01D0700081D0700081D0700081D07000872 -S315080000D01D0700081D0700081D0700081D07000862 -S315080000E01D0700081D0700081D0700081D07000852 -S315080000F01D0700081D0700081D0700081D07000842 -S315080001000000000000000000000000001D070008B5 -S315080001101D0700081D0700081D0700081D07000821 -S315080001201D0700081D0700081D0700081D07000811 -S315080001301D0700081D070008000000000000000059 -S315080001401D0700081D0700081D070008000000001D +S3150800000000A00020F1070008C5070008C707000878 +S31508000010C9070008CB070008CD0700080000000044 +S31508000020000000000000000000000000CF070008E4 +S31508000030D107000800000000D3070008D50700080C +S31508000040410800084108000841080008410800085E +S31508000050410800084108000841080008410800084E +S31508000060410800084108000841080008410800083E +S31508000070410800084108000841080008410800082E +S31508000080410800084108000841080008410800081E +S31508000090410800084108000841080008410800080E +S315080000A041080008410800084108000841080008FE +S315080000B041080008410800084108000841080008EE +S315080000C041080008410800084108000841080008DE +S315080000D041080008410800084108000841080008CE +S315080000E041080008410800084108000841080008BE +S315080000F041080008410800084108000841080008AE +S315080001000000000000000000000000004108000890 +S31508000110410800084108000841080008410800088D +S31508000120410800084108000841080008410800087D +S31508000130410800084108000800000000000000000F +S3150800014041080008410800084108000800000000AE S315080001500000000000000000000000000000000091 -S3150800016000000000000000001D0700081D07000829 -S315080001701D07000800000000000000000000000045 -S30D08000180000000001D0700083D +S3150800016000000000000000004108000841080008DF +S315080001704108000800000000000000000000000020 +S30D08000180000000004108000818 S3150800018810B5054C237833B9044B13B10448AFF3BB S3150800019800800123237010BDC8000020000000005D -S315080001A8D058000808B5034B1BB103490348AFF3F9 -S315080001B8008008BD00000000CC000020D0580008C8 -S315080001C808B504F027FE08BD08B504F031FE08BDD9 +S315080001A85C89000808B5034B1BB103490348AFF33C +S315080001B8008008BD00000000CC0000205C8900080B +S315080001C808B505F045FB08BD08B505F051FB08BD9F S315080001D808B54FF090431B6913F0010F01D10020B1 -S315080001E808BD00F04BF80120FAE70000012804D002 +S315080001E808BD00F0B5F80120FAE70000012804D098 S315080001F8044B4FF480529A617047024B4FF4805271 S315080002089A627047000800487047704708B5642026 -S3150800021800F006F808BD08B500F008F808BD0000A3 -S31508000228014B1880704700BFE400002008B504F0A9 -S31508000238ADFB0F4B1B68984210D30E4B1B7873B94E -S315080002480C4B01221A704FF0904320229A6104F051 -S315080002589DFB094B1B880344054A136008BD054BDB -S3150800026800221A704FF0904320229A62EFE700BFE7 -S31508000278E8000020E6000020E40000204FF0904344 -S3150800028820229A62704700002DE9F0438BB00024BB -S31508000298049405940694079408940994264B5A6975 -S315080002A842F480025A615A6902F480020392039A58 -S315080002B85A6942F400325A615A6902F400320292C3 -S315080002C8029A5A6942F480225A615A6902F48022CB -S315080002D80192019A5A6942F400225A615B6903F449 -S315080002E800230093009B4FF090464FF02009C6F86C -S315080002F82890124F4FF48058C7F81880012504959E -S31508000308089504A9304602F077F8CDF810900595B7 -S3150800031806940794089404A9304602F06DF8CDF8B7 -S315080003281080059506940794089404A9384602F09F -S3150800033863F80BB0BDE8F0830010024000080048D7 -S3150800034810B590B0002409940A940B940C940D9453 -S315080003580E940F94039404940594069407940894A9 -S31508000368224BDA6942F48022DA61DA6902F48022D9 -S315080003780292029A5A6942F480225A615B6903F426 -S3150800038880230193019B4FF440630393022304934C -S31508000398032305930723089303A9154802F02CF8A5 -S315080003A84FF4614309930A940B940C940C230D9308 -S315080003B80E940F9409A90F4802F06CFA0E4A52E8EF -S315080003C8003F23F4806342E800310029F6D1094B3F -S315080003D85A6822F490425A609A6822F02A029A6069 -S315080003E81A6842F001021A6010B010BD00100240E7 -S315080003F800040048004800400848004072B6FEE776 -S3150800040808B52C4A136823F0070343F00203136060 -S31508000418284B1B6803F00703022BF9D1264A1368F1 -S3150800042843F480331360244B1B6813F4003FFAD057 -S31508000438214B5A6822F4741242F4E8125A60DA6AAE -S3150800044822F00F02DA621A6842F080721A601A4BB2 -S315080004581B6813F0007FFAD0174B5A6822F0F0028F -S315080004685A605A6822F4E06242F480625A605A680E -S3150800047822F460525A605A6822F0030242F00202D5 -S315080004885A600D4B5B6803F00C03082BF9D10B482F -S3150800049803F00EFA0F2000F051F948B9064B1A6B0B -S315080004A822F440221A635A6822F480025A6008BD68 -S315080004B8FFF7A4FF002002400010024000A24A04E9 -S315080004C808B500F061F9FFF79BFFFFF7DDFEFFF7B8 -S315080004D837FFFFF775FEFFF777FEFCE782B00A4B92 -S315080004E89A6942F001029A619A6902F00102009239 -S315080004F8009ADA6942F08052DA61DB6903F08053C0 -S315080005080193019B02B070470010024000B589B0FC -S315080005180023039304930593069307930268144BE1 -S315080005289A4202D009B05DF804FB03F5D633DA69B6 -S3150800053842F00072DA61DA6902F000720192019AF1 -S315080005485A6942F480225A615B6903F4802302934C -S31508000558029B4FF4407303930223049303230693E1 -S315080005680923079303A9034800F064FDDAE700BFE7 -S31508000578006400400004004810B588B000230393BF -S3150800058804930593069307930268134B9A4201D07E -S3150800059808B010BD114C636943F40033636163699D -S315080005A803F400330193019B4FF4C05303930223CA -S315080005B80493032306930E23079303A94FF0904049 -S315080005C800F038FDE36943F40003E361E36903F4E3 -S315080005D800030293029BDBE7005C00400010024020 -S315080005E808B50268074B9A4200D008BD064AD3697F -S315080005F823F40003D3614FF4C0514FF0904000F044 -S31508000608FDFDF2E7005C00400010024030B589B0F5 -S3150800061800230293039304930593069307931B4CAD -S31508000628636943F400236361636903F40023019350 -S31508000638019B17484FF48053836102930123039360 -S3150800064802A901F0D9FE01F081FF4FF09045202359 -S31508000658AB62104801F05EFE284601F05BFEE369CE -S3150800066823F48023E361636923F480236361636960 -S3150800067823F400336361E36923F08053E361A369D4 -S3150800068823F00103A36109B030BD00BF0010024082 -S315080006980008004800040048FEE7FEE7FEE7FEE714 -S315080006A8FEE770477047704708B500F07FF808BD41 -S315080006B8034AD2F8883043F47003C2F88830704782 -S315080006C800ED00E0DFF834D0FFF7F2FF0C480D49DB -S315080006D80D4A002302E0D458C4500433C4188C4287 -S315080006E8F9D30A4A0A4C002301E013600432A242ED -S315080006F8FBD305F0C5F8FFF7E3FEFEE700A00020E8 -S3150800070800000020C4000020545A0008C800002031 -S3150800071824100020FEE7000010B5074B4FF0FF3203 -S315080007281A6100241C61DA60DC609A629C62FFF731 -S315080007386DFF204610BD00BF0010024010B50446E4 -S315080007480E4B18784FF47A73B3FBF0F30C4A10681B -S31508000758B0FBF3F000F014FB68B90F2C01D901209F -S315080007680AE0002221464FF0FF3000F0D1FA054B87 -S315080007781C60002000E0012010BD00BF0400002016 -S31508000788000000200800002008B5074A136843F04F -S3150800079810031360032000F0A9FA0F20FFF7CEFF15 -S315080007A8FFF79CFE002008BD00200240034A116896 -S315080007B8034B1B780B441360704700BFD80300200F -S315080007C804000020002800F0A18038B5044690F8F7 -S315080007D82030D3B12268136843F00103136004F08C -S315080007E8DDF8054623685A6812F0010F10D104F09F -S315080007F8D5F8401B0A28F5D9636A43F400336362BF -S31508000808052384F82030012038BDFFF77FFEE1E78D -S315080008181A6822F002021A6004F0C0F8054623682E -S315080008285A6812F0020F0DD004F0B8F8401B0A28CF -S31508000838F5D9636A43F400336362052384F82030E4 -S315080008480120E1E7227E012A3DD01A6822F08002BB -S315080008581A60637E012B3BD02268136823F0400395 -S315080008681360A37E012B39D02268136823F020036E -S315080008781360E37E012B37D02268136843F0100310 -S315080008881360237F012B35D02268136823F00803E9 -S315080008981360637F012B33D02268136823F004039F -S315080008A81360A368E2681343226913436269134312 -S315080008B86268013A21681343CB610020606201230C -S315080008C884F82030A0E71A6842F080021A60C0E768 -S315080008D82268136843F040031360C2E72268136866 -S315080008E843F020031360C4E72268136823F0100353 -S315080008F81360C6E72268136843F008031360C8E75D -S315080009082268136843F004031360CAE70120704796 -S31508000918026890F82030013BDBB2012B05D9436AFF -S3150800092843F4802343620120704730B4D2F800327A -S3150800093843F00103C2F800324B6903F01F03012094 -S3150800094800FA03F3D2F81C026FEA030C20EA030044 -S31508000958C2F81C02C869B0B9D2F80C020CEA000041 -S31508000968C2F80C028C884869CD6844EA05444830C0 -S3150800097842F830400C8848698D6844EA054448308E -S3150800098802EBC0004460C86901281BD0886980BB8F -S31508000998D2F804020CEA0000C2F80402086970BB1F -S315080009A8D2F814020CEA0000C2F81402096A0129EE -S315080009B82BD0D2F8003223F00103C2F80032002007 -S315080009C830BC7047D2F80C021843C2F80C028C885F -S315080009D848690D6844EA0544483042F830408C892D -S315080009E848698D6844EA0544483002EBC00044600B -S315080009F8CCE7D2F804021843C2F80402CEE7D2F8C4 -S31508000A0814021843C2F81402D0E7D2F81C120B4392 -S31508000A18C2F81C32CDE770B5044690F82050EDB2FE -S31508000A28012D06D0436A43F400234362012528466C -S31508000A3870BD022380F820300268136823F001038A -S31508000A48136003F0ABFF064623685B6813F0010FD3 -S31508000A580CD003F0A3FF831B0A2BF5D9636A43F46A -S31508000A6800336362052384F82030E0E700256562D1 -S31508000A78DDE730B590F820C00468A4680CF1FF3C9F -S31508000A885FFA8CFCBCF1010F62D814F0E05F59D00C -S31508000A98C4F3016C012404FA0CF41C608B68002B5F -S31508000AA83DD10D68CB68046843EA45550CF118032F -S31508000AB81B01E55003680C690CF1180E03EB0E13BD -S31508000AC85C600B7D012B35D0D17993791B0443EAF9 -S31508000AD80163517943EA012314790168234301EB39 -S31508000AE80C11C1F88C31D17893781B0443EA016359 -S31508000AF8517843EA0123117802680B4302EB0C127A -S31508000B08C2F8883102680CF1180C4FEA0C1C52F826 -S31508000B180C3043F0010342F80C3000201DE04C6805 -S31508000B2843EAC403CC6823430CF118042401056876 -S31508000B382B51BFE7036803EB0E13596841F480711C -S31508000B485960C1E7436A43F400134362012004E08D -S31508000B58436A43F480234362012030BD90F820306D -S31508000B68013BDBB2012B01D90020704703689B685B -S31508000B7803EA8163B3EB816F01D001207047002037 -S31508000B88704790F820C00CF1FF3C5FFA8CFCBCF16A -S31508000B98010F00F2A58030B451B90468E46814F06E -S31508000BA8030F10D1436A43F40013436201207EE021 -S31508000BB80468246914F0030F05D1436A43F4001343 -S31508000BC84362012073E0056801F11B0424012C59CE -S31508000BD804F004049460002C6BD1056801F11B0429 -S31508000BE824012C59640D1460046801F11B0C4FEAA2 -S31508000BF80C1C54F80C4004F00204D4600468A4449D -S31508000C08DCF8045015F0080F5BD008241461056851 -S31508000C1801F11B0C05EB0C156D68C5F307259561E5 -S31508000C28046804EB0C146468240C5461026802EB2B -S31508000C380112D2F8B8211A70026802EB0112D2F82A -S31508000C48B821C2F307225A70026802EB0112D2F8D9 -S31508000C58B821C2F307429A70026802EB0112D2F869 -S31508000C68B821120EDA70026802EB0112D2F8BC211A -S31508000C781A71026802EB0112D2F8BC21C2F30722E4 -S31508000C885A71026802EB0112D2F8BC21C2F3074274 -S31508000C989A71026802EB0112D2F8BC21120EDA71B7 -S31508000CA8C1B90268D36843F02003D360002030BC7A -S31508000CB87047056801F11B0424012C59E40854609F -S31508000CC892E701F11B0504EB0514646804F00F04A8 -S31508000CD814619CE70268136943F020031361E5E78A -S31508000CE8436A43F48023436201207047074AD3685E -S31508000CF823F4E0631B041B0C000200F4E0600343C2 -S31508000D0843F0BF6343F40033D360704700ED00E057 -S31508000D1800B5194BDB68C3F30223C3F1070CBCF112 -S31508000D28040F28BF4FF0040C03F1040EBEF1060F9A -S31508000D3818D9033B4FF0FF3E0EFA0CFC21EA0C01CA -S31508000D4899400EFA03F322EA0303194300280BDB3A -S31508000D580901C9B200F1604000F5614080F8001346 -S31508000D685DF804FB0023E5E700F00F000901C9B2A6 -S31508000D78024B1954F4E700BF00ED00E014ED00E05B -S31508000D880138B0F1807F0BD24FF0E0235861054A4D -S31508000D98F02182F823100020986107221A6170470B -S31508000DA80120704700ED00E0044B0022DA61044A8E -S31508000DB8136943F00103136101807047E0030020BB -S31508000DC8002002400C4BDB6813F0100305D00B4AD1 -S31508000DD8D36943F00203D3611023074AD26812F095 -S31508000DE8040F06D00549CA6942F00102CA6143F0F0 -S31508000DF80403014AD360704700200240E00300203C -S31508000E080A4B1B6913F0800F0BD0084B084A5A6027 -S31508000E1802F188325A601B6913F0800F03D100204B -S31508000E287047002070470120704700BF0020024025 -S31508000E3823016745034A136943F0800313610020B9 -S31508000E48704700BF0020024038B5044603F0A6FDE7 -S31508000E580546144BDB6813F0010F0AD0B4F1FF3FBF -S31508000E68F7D024B103F09AFD401BA042F1D903201C -S31508000E7812E00C4BDB6813F0200F02D0094B202236 -S31508000E88DA60084BDB6813F0100F06D1054BDB68F0 -S31508000E9813F0040F01D1002038BDFFF793FF012096 -S31508000EA8FAE700BF002002402DE9F8431E46244B06 -S31508000EB81B7E012B41D004460F469046204B012243 -S31508000EC81A764CF25030FFF7BFFF034678BB012C61 -S31508000ED808D0022C03D04FF004091C4607E04FF04F -S31508000EE80209FAE74FF00109F7E70134E4B24C457D -S31508000EF81DD22101C1F12002A1F1200328FA01F12E -S31508000F0806FA02F2114326FA03F3194389B207EBE4 -S31508000F184400FFF749FF4CF25030FFF795FF094B9D -S31508000F281D6925F001051D6103460028DDD0044A20 -S31508000F38002111761846BDE8F8830223FAE700BFB0 -S31508000F48E003002000200240064B0022DA61064B27 -S31508000F581A6942F004021A611A6942F040021A61D3 -S31508000F68704700BFE003002000200240064B00221D -S31508000F78DA61064B1A6942F002021A6158611A695F -S31508000F8842F040021A617047E00300200020024040 -S31508000F98264B1B7E012B45D070B505460E46234BBE -S31508000FA801221A760368934220D04CF25030FFF794 -S31508000FB84BFF88BB4FF0FF3333606C680121AA6882 -S31508000FC86B6803EBC223A34227D92046FFF7CEFF57 -S31508000FD84CF25030FFF738FF154A136923F002031D -S31508000FE813610146B0B904F50064E8E74CF25030DD -S31508000FF8FFF72AFF08B101210FE0FFF7A5FF4CF21A -S315080010085030FFF721FF0146094A136923F0040304 -S31508001018136102E0346000E00121044B00221A76CD -S31508001028084670BD02210846704700BFE003002045 -S3150800103800200240F0B583B0002362E085685E00B0 -S315080010480324B44025EA0405CC68B4402C438460DC -S31508001058446824EA0C0C4C68C4F300149C4044EA1F -S315080010680C0444605EE0DD08083550F8256003F096 -S3150800107807044FEA840C0F2404FA0CF426EA040E33 -S315080010880C6904FA0CF444EA0E0440F8254060E0BA -S31508001098042400E0002404FA0EF42C430CF1020C94 -S315080010A8524D45F82C40524CA568D44325EA020609 -S315080010B84F6817F4801F01D042EA05064C4DAE600A -S315080010C8ED6804EA05064F6817F4001F01D042EADE -S315080010D80506474DEE606D6804EA05064F6817F47D -S315080010E8003F01D042EA0506414D6E602D682C4046 -S315080010F84E6816F4803F01D042EA05043C4A14605B -S3150800110801330A6832FA03F46ED04FF0010C0CFA70 -S3150800111803FC1CEA0202F3D04C6804F00304013C01 -S31508001128012C8BD94C6804F00304032C0CD0C46832 -S315080011385D004FF0030C0CFA05FC24EA0C0C8C68CD -S31508001148AC4044EA0C04C4604C6804F00304022C5E -S3150800115889D004684FEA430E4FF0030C0CFA0EFCCC -S3150800116824EA0C0C4C6804F0030404FA0EF444EA66 -S315080011780C0404604C6814F4403FC1D01D4CA569A2 -S3150800118845F00105A561A46904F001040194019CD0 -S315080011984FEA930C0CF10205144C54F8255003F049 -S315080011A803044FEA840E0F2404FA0EF425EA04050C -S315080011B8B0F1904F3FF46EAF0F4CA0420ED004F535 -S315080011C88064A0420CD004F58064A0420AD004F5D5 -S315080011D88064A0423FF45CAF05245CE701245AE723 -S315080011E8022458E7032456E703B0F0BD000001407F -S315080011F8000401400010024000040048002331FAA8 -S3150800120803F27AD0F0B52EE0042500E0002505FAA9 -S315080012180CFCA44555D004685D004FF0030C0CFA85 -S3150800122805FC24EA0C0404604FEAD30E0EF1080EF6 -S3150800123850F82E4003F00705AE000F25B54024EAFE -S31508001248050440F82E40C46824EA0C04C4604468BF -S3150800125824EA02024260826822EA0C0282600133AA -S3150800126831FA03F248D001229A4012EA0107F6D069 -S315080012784FEA930E0EF10205204C54F8254003F068 -S31508001288030C4FEA8C0C0F2505FA0CF63440B0F11E -S31508001298904FBBD01A4DA8420DD005F58065A842D7 -S315080012A80BD005F58065A84209D005F58065A842E2 -S315080012B8AAD00525ABE70125A9E70225A7E703254F -S315080012C8A5E7104C256825EA07052560656825EA17 -S315080012D807056560E56825EA0705E560A56825EA5E -S315080012E80707A760054F0EF1020457F8245025EAA8 -S315080012F8060547F824508EE7F0BD70470000014000 -S31508001308000400480004014038B512F4804F45D05F -S315080013180468B4F8503091F800C04FEACC0E1EFAAB -S3150800132883F3023304EB4303B3F80044C4F3090414 -S315080013388B69A34228D31B1B8B618B697BB905680C -S3150800134835F82C309BB223F4804323F0700383F4DA -S31508001358005343F4004343F0800325F82C3012F079 -S31508001368400F0ED002680D7832F825309BB223F468 -S31508001378E04323F0700343F4004343F0C00322F824 -S31508001388253024B9204638BD00238B61D5E7234686 -S315080013980A894969006802F072FAF3E70468B4F83A -S315080013A8503091F800C04FEACC0E1EFA83F3063384 -S315080013B804EB4303B3F80044C4F309048B69A34256 -S315080013C82FD31B1B8B618B697BB9056835F82C30C5 -S315080013D89BB223F4804323F0700383F4005343F449 -S315080013E8004343F0800325F82C3012F0400F0FD144 -S315080013F8026891F800C032F82C309BB223F4E04317 -S3150800140823F0700343F4004343F0C00322F82C305A -S31508001418002CB7D023464A894969006802F02FFA92 -S31508001428B0E700238B61CEE7002860D030B587B0D7 -S31508001438044690F8A9323BB1032384F8A9322068F8 -S3150800144801F0A5FA00231BE080F8A832FFF794F804 -S31508001458F2E75A1C02EB820104EBC101012048702D -S3150800146802EB820104F8313004EBC1000021C17097 -S3150800147803EB830004EBC0008163C1630164D3B244 -S3150800148860688342E5D3002316E003EB830204EB86 -S31508001498C202002182F8691182F8683182F86B1154 -S315080014A8C2F87811C2F87C1103EB830204EBC20276 -S315080014B8C2F880110133DBB29842E6D8A4465CF834 -S315080014C8105BEE46BCE80F00AEE80F00DCF800300B -S315080014D8CEF80030231D0ECB284601F062FA00200C -S315080014E884F82400012384F8A93207B030BD012006 -S315080014F8704738B590B10446032380F8A9320068C6 -S3150800150801F0A8FD054610B10125284638BD204634 -S31508001518FFF766F8002384F8A932F6E70125F4E709 -S3150800152838B590F8A832012B11D00446012580F861 -S31508001538A852006801F022FA2946204604F094F9D0 -S31508001548206801F098FD002084F8A80238BD02201A -S31508001558FCE790F8A832012B12D010B504460123EF -S3150800156880F8A832006801F012FA0021204604F033 -S315080015787BF9206801F081FD002084F8A80210BDD7 -S315080015880220704770B505460C46164612F0400FFD -S3150800159800F00E810268B2F850300978C80010FACF -S315080015A883F3023302EB4303B3F80024C2F30902B8 -S315080015B8A36993424ED99B1AA361A369002B66D1E6 -S315080015C86378002B49D12A68B2F8503012FA83F3A7 -S315080015D803EB0111B1F80434C3F30903A1F8043481 -S315080015E8B1F804346FEA43436FEA53439BB2A1F850 -S315080015F8043429686278002A3CD1B1F8503011FAC7 -S3150800160883F3227803EB0213B3F80C24C2F3090216 -S31508001618A3F80C24B3F80C246FEA42426FEA524244 -S3150800162892B2A3F80C242178284604F023F816F475 -S31508001638804F41D02A68217832F821309BB223F4AA -S31508001648E04323F0700343F4404343F0800322F851 -S31508001658213031E00023A361AFE7012BC9D12A68FD -S31508001668B2F8503012FA83F303EB01110023A1F8FC -S315080016780434BEE7012AD6D1B1F8503011FA83F3FB -S31508001688217803EB01130022A3F80C24CBE716F400 -S31508001698804F0DD0286830F821309BB223F4E043F8 -S315080016A823F0700343F4404343F0800320F82130C5 -S315080016B894F82430012B12D02A68217832F8213080 -S315080016C89BB223F4E04323F0400383F0300343F44A -S315080016D8004343F0800322F82130002070BD636977 -S315080016E813446361E3691344E361216A23699942F0 -S315080016F824D3C91A21626278002A44D12968B1F824 -S31508001708502011FA82F2217802EB0112B2F8041479 -S31508001718C1F30901A2F804143E2B1BD9580913F082 -S315080017281F0F00D10138B2F8041489B2800280B2BA -S31508001738014341F40041A2F8041426E021B9002324 -S3150800174884F824301346D6E7002384F82430236225 -S315080017580B46D0E74BB9B2F804146FEA41416FEA71 -S31508001768514189B2A2F804140FE0590813F0010F81 -S3150800177800D00131B2F8040480B2890289B2014363 -S31508001788A2F8041401E0012A06D09BB222896169ED -S31508001798286801F078FC8FE72968B1F8502011FA13 -S315080017A882F2217802EB011299B2A2F80414ECE746 -S315080017B80268B2F850300978C80010FA83F306337D -S315080017C802EB4303B3F80024C2F30902A369934260 -S315080017D84FD39B1AA361A369002B67D16378002BA3 -S315080017E84AD12A68B2F8503012FA83F303EB01118A -S315080017F8B1F80434C3F30903A1F80434B1F804347E -S315080018086FEA43436FEA53439BB2A1F80434296845 -S315080018186278002A3DD1B1F8503011FA83F322785C -S3150800182803EB0213B3F80C24C2F30902A3F80C2439 -S31508001838B3F80C246FEA42426FEA524292B2A3F80E -S315080018480C242178284603F015FF16F4804F7FF4F8 -S3150800185833AF2A68217832F821309BB223F4E04363 -S3150800186823F0700343F4404343F0800322F8213001 -S3150800187822E70023A361AEE7012BC8D12A68B2F88C -S31508001888503012FA83F303EB01110023A1F804344C -S31508001898BDE7012AD5D1B1F8503011FA83F321787A -S315080018A803EB01130022A3F80C24CAE716F4804FA9 -S315080018B80DD1286830F821309BB223F4E04323F091 -S315080018C8700343F4404343F0800320F8213094F82A -S315080018D82430012B7FF4F0AE636913446361E3692E -S315080018E81344E361216A2369994224D3C91A2162F8 -S315080018F829686278002A43D1B1F8502011FA82F291 -S31508001908217802EB0112B2F80C14C1F30901A2F806 -S315080019180C143E2B1BD9580913F01F0F00D1013898 -S31508001928B2F80C1489B2800280B2014341F400412E -S31508001938A2F80C1426E021B9002384F824301346AB -S31508001948D6E70023236284F824300B46D0E74BB940 -S31508001958B2F80C146FEA41416FEA514189B2A2F80C -S315080019680C140FE0590813F0010F00D00131B2F832 -S315080019780C0480B2890289B20143A2F80C1401E06A -S31508001988012A06D09BB262896169286801F07BFB47 -S3150800199892E6B1F8502011FA82F2217802EB011288 -S315080019A899B2A2F80C14EDE72DE9F0410546286826 -S315080019B8B0F8443013F4004F00F08E82B0F8444073 -S315080019C8A3B214F00F0440F0E28013F0100F6BD0A6 -S315080019D803889AB213F4006F40F09D8012F4004F02 -S315080019E8E5D0038823F070031B051B0D43F080031D -S315080019F803802868B0F8503095F86821D20012FAA2 -S31508001A0883F3063300EB4303B3F80034C3F309033F -S31508001A18C5F884318BB1D5F87C1171B1B5F86E214A -S31508001A2801F02DFFD5F88421D5F87C311344C5F883 -S31508001A387C310021284603F011FE2A68138899B2DA -S31508001A4813F4006FB3D101F44051B1F5405FAED03D -S31508001A58B2F8503012FA83F2B2F80C34C3F3090319 -S31508001A68A2F80C34D5F878313E2B77D9590913F0F2 -S31508001A781F0F00D10139B2F80C349BB2890289B21A -S31508001A880B4343F40043A2F80C342A6813889BB224 -S31508001A9823F4804323F0700383F4405343F400434C -S31508001AA843F08003138082E703889BB223F4E1435B -S31508001AB823F070036FEA43436FEA53439BB20380EC -S31508001AC82A68B2F8503095F82810C90011FA83F335 -S31508001AD8023302EB4303B3F80034C3F309036B6418 -S31508001AE8EA6B1344EB630021284603F0C3FD95F817 -S31508001AF82430002B3FF45BAF2B6C002B7FF457AFD9 -S31508001B0895F824302A6843F08003A2F84C3000235D -S31508001B1885F824304BE7B0F8503095F86821D2009C -S31508001B2812FA83F3063300EB4303B3F80034C3F31E -S31508001B380903C5F88431B5F86E2105F52C7101F04D -S31508001B489EFE2A68138823F070031B051B0D43F0B5 -S31508001B5880031380284603F079FD28E74BB9B2F8C5 -S31508001B680C346FEA43436FEA53439BB2A2F80C342A -S31508001B788BE7590813F0010F00D00131B2F80C347D -S31508001B8898B28B029BB20343A2F80C347DE730F86F -S31508001B9824309EB213F4004F4CD116F0800F3FF450 -S31508001BA806AF621C02EB820105EBC101286830F812 -S31508001BB824309BB223F4E14323F070036FEA4343CE -S31508001BC86FEA53439BB220F82430CB78012B00F0F8 -S31508001BD8F28016F4807F40F07A812868B0F8503091 -S31508001BE8621C02EB820215F83260F20012FA83F3DD -S31508001BF8023300EB4303B3F80034C3F3090304EBD9 -S31508001C08840205EBC202126C9A4240F24C8104EB3C -S31508001C18840705EBC707D21A3A6404EB840205EB76 -S31508001C28C202126C002A40F045813146284603F064 -S31508001C3821FDBCE630F8243023F070031B051B0D84 -S31508001C4843F0800320F8243004EB8401C90001F529 -S31508001C58B47105EB010804EB840305EBC30393F899 -S31508001C687431002B42D12868B0F8503004EB84024E -S31508001C7805EBC20292F86821D20012FA83F30633FA -S31508001C8800EB4303B3F80074C7F3090717BB04EB63 -S31508001C98840305EBC303D3F884213A44C3F88421A3 -S31508001CA8D3F87C213A44C3F87C21D3F880313BB178 -S31508001CB804EB840305EBC303D3F878319F4275D246 -S31508001CC804EB840305EBC30393F86811284603F06D -S31508001CD8C5FC62E704EB840105EBC1013B46B1F894 -S31508001CE86E21D1F87C1101F0CAFDD0E704EB840314 -S31508001CF805EBC30393F86B31022B35D0296804EB3F -S31508001D08840205EBC20292F8680131F820309BB2CA -S31508001D1823F4E04323F0700343F4004343F0C0037D -S31508001D2821F82030286892F8683130F8232012F410 -S31508001D38804F20D0B0F85020DB0013FA82F3023324 -S31508001D4800EB4303B3F80074C7F30907002F9ED0C6 -S31508001D5804EB840105EBC1013B46B1F87021D1F8C3 -S31508001D687C1101F08CFD92E7324641462846FFF77A -S31508001D78CBFA07468BE7B0F85020DB0013FA82F354 -S31508001D88063300EB4303B3F80074C7F30907002FBB -S31508001D983FF47DAF04EB840105EBC1013B46B1F87E -S31508001DA87221D1F87C1101F06AFD70E7414628686E -S31508001DB801F07EF9F1E604EB840305EBC303002280 -S31508001DC81A6493F83430FBB116F0400F37D04B78C5 -S31508001DD81BBB2A68B2F8503012FA83F3621C02EB6E -S31508001DE8820215F8322003EB0213B3F80424C2F36F -S31508001DF80902A3F80424B3F804246FEA42426FEAF6 -S31508001E08524292B2A3F80424013404EB840415F868 -S31508001E183410284603F02EFCC9E5012BF4D12A68AC -S31508001E28B2F8503012FA83F3621C02EB820215F8F4 -S31508001E38322003EB02130022A3F80424E4E72A68F5 -S31508001E48631C03EB830305EBC3035B78D3B9B2F8CA -S31508001E58503012FA83F3621C02EB820215F832201C -S31508001E6803EB0213B3F80C24C2F30902A3F80C24F3 -S31508001E78B3F80C246FEA42426FEA524292B2A3F8C8 -S31508001E880C24C1E7012BBFD1B2F8503012FA83F3FC -S31508001E98621C02EB820215F8322003EB02130022B9 -S31508001EA8A3F80C24B0E704EB840205EBC20200276A -S31508001EB81764B2E604EB840205EBC202D66B1E442D -S31508001EC8D663546C2344536401F0F2F86FE532463E -S31508001ED82846FFF757FB6AE50020BDE8F08190F829 -S31508001EE8A832012B0DD010B50446012180F8A81296 -S31508001EF803F0BAFC206801F0BEF8002084F8A802AE -S31508001F0810BD0220704790F8A832012B0ED010B5E4 -S31508001F180446012380F8A832002103F0A5FC2068AE -S31508001F2801F0ABF8002084F8A80210BD022070471B -S31508001F3890F8A832012B0DD010B50446012380F875 -S31508001F48A83280F82410006801F08FF8002084F879 -S31508001F58A80210BD0220704710B50446006801F0B3 -S31508001F688EF810F4004F1ED110F4806F1FD110F4AC -S31508001F78804F2DD110F4005F34D110F4805F3BD127 -S31508001F8810F4006F57D110F4007F71D110F4807FD8 -S31508001F9827D02268B2F844309BB223F480739BB2E8 -S31508001FA8A2F844301DE02046FFF7FEFC19E0226837 -S31508001FB8B2F844309BB223F480639BB2A2F844304B -S31508001FC8204603F069FB00212046FFF7B1FF08E029 -S31508001FD82268B2F844309BB223F480439BB2A2F835 -S31508001FE8443010BD2268B2F844309BB223F400533B -S31508001FF89BB2A2F84430F4E72268B2F840309BB2A4 -S3150800200823F004039BB2A2F840302268B2F84030A5 -S315080020189BB223F008039BB2A2F84030204603F08F -S3150800202863FB2268B2F844309BB223F480539BB210 -S31508002038A2F84430D5E72268B2F840309BB243F09C -S315080020480803A2F840302268B2F844309BB223F459 -S3150800205800639BB2A2F844302268B2F840309BB2BB -S3150800206843F00403A2F84030204603F02BFBB8E7F8 -S315080020782268B2F844309BB223F400739BB2A2F8E4 -S315080020884430204603F001FBABE710B50446084682 -S3150800209811F0800F25D101F0070C0CEB8C01C90053 -S315080020A801F5B47E04EB0E010CEB8C0C04EBCC0C9E -S315080020B84FF0000E8CF869E100F0070008700A6115 -S315080020C8CB70022B1AD094F8A832012B19D0012309 -S315080020D884F8A832206800F075FC002084F8A80265 -S315080020E810BD01F0070C0CF1010C0CEB8C0104EB8C -S315080020F8C1014FF0010E81F801E0DDE700230B71FD -S31508002108E1E70220ECE710B504460B4611F0800F0C -S315080021181FD101F0070202EB8201C90001F5B4716B -S31508002128014402EB820200EBC202002082F8690130 -S3150800213803F007030B7094F8A832012B13D0012378 -S3150800214884F8A832206800F024FE002084F8A80243 -S3150800215810BD01F00702013202EB820100EBC10152 -S3150800216801204870E4E70220F2E710B501F0070CF1 -S315080021780CEB8C01C90001F5B4710CEB8C0E00EB65 -S31508002188CE0ECEF87C21CEF880310024CEF88441D4 -S315080021988EF869418EF868C10144006800F088FF26 -S315080021A8204610BD01F0070101EB810100EBC101D2 -S315080021B8D1F88401704738B501F0070404F1010C19 -S315080021C80CEB8C0104EB840E00EBCE0ECEF83C200B -S315080021D8CEF8403001228EF84C20CEF8483000253B -S315080021E8CEF8445000EBC1035A7000F8314019463E -S315080021F8006800F05DFF284638BD0B4601F0070267 -S3150800220841688A422AD810B5044613F0800F1DD1B2 -S3150800221803EB8301C90001F5B471014403EB830399 -S3150800222800EBC303002083F8690101238B700A7049 -S3150800223894F8A832012B13D0012384F8A832206811 -S3150800224800F092FE002084F8A80210BD531C03EB88 -S31508002258830100EBC10101204870E6E701207047B9 -S315080022680220F2E70B4601F00F014268914230D886 -S3150800227810B5044613F0800F21D103F0070202EBCC -S315080022888201C90001F5B471014402EB820200EB30 -S31508002298C202002082F8690100228A7003F0070347 -S315080022A80B7094F8A832012B15D0012384F8A832AC -S315080022B8206800F07EFE002084F8A80210BD03F00E -S315080022C80702013202EB820100EBC10101204870C6 -S315080022D8E2E7012070470220F0E711F0800F0BD0E3 -S315080022E801F00701013101EB810100EBC10152B987 -S315080022F80A73CB800020704701EB8101C90001F5FC -S31508002308B4710144F3E701220A730B811B0C4B8154 -S31508002318F0E70000B0F1904F10D0314B984218D032 -S31508002328304B984223D0304B98422ED02F4B9842A8 -S3150800233839D02F4B984244D0012070472D4B9A6AC2 -S3150800234842F400329A629A6A22F400329A620020AB -S31508002358704703F1784303F503339A6A42F48022F7 -S315080023689A629A6A22F480229A620020704703F1D8 -S31508002378784303F502339A6A42F400229A629A6A03 -S3150800238822F400229A620020704703F1784303F585 -S3150800239801339A6A42F480129A629A6A22F480127F -S315080023A89A620020704703F1784303F500339A6A66 -S315080023B842F400129A629A6A22F400129A6200207B -S315080023C8704703F1784303F5FE339A6A42F48002AC -S315080023D89A629A6A22F480029A620020704700BFBD -S315080023E80004004800080048000C0048001000488F -S315080023F800140048001002400B6893FAA3F3B3FAD6 -S3150800240883FC57E08D68826893FAA3F4B4FA84F4D7 -S3150800241864004FF0030E0EFA04F422EA040293FA53 -S31508002428A3F4B4FA84F4640005FA04F42243826037 -S315080024380C68CD68426822EA040205FB04F42243C4 -S31508002448426045E093FAA3F2B2FA82F2072A15D84F -S315080024584D69026A93FAA3F4B4FA84F4A4000F2621 -S3150800246806FA04F422EA040293FAA3F4B4FA84F402 -S31508002478A40005FA04F42243026241E04C69456A5D -S315080024881A0A92FAA2FEBEFA8EFE4FEA8E0E0F2698 -S3150800249806FA0EFE25EA0E0592FAA2F2B2FA82F2B8 -S315080024A8920004FA02F22A43426229E0002070BD2B -S315080024B80CF1010C0B6833FA0CF244D0012202FA2B -S315080024C80CF21340F4D070B54A68013A012A99D932 -S315080024D8C26893FAA3F4B4FA84F46400032505FAE7 -S315080024E804F422EA040293FAA3F4B4FA84F464001E -S315080024F80D6905FA04F42243C2604A68022AA1D083 -S315080025084A68046893FAA3FEBEFA8EFE4FEA4E0E90 -S31508002518032505FA0EFE24EA0E0E93FAA3F3B3FA78 -S3150800252883F35B0002FA03F34EEA030303600CF134 -S31508002538010C0B6833FA0CF2B8D0012202FA0CF235 -S315080025481340F4D0C0E700207047000082B0224A42 -S31508002558136843F0010313601F4B1B6813F0020F3F -S31508002568FAD01D4A136823F0F80343F08003136072 -S315080025784FF0FF3301930199184B0B400193019BC8 -S315080025885360154B5B6813F00C0FFAD1124A13689F -S315080025980193019B23F0847323F480330193019BF1 -S315080025A813600D4B1B6813F0007FFAD10A4B1A68A3 -S315080025B822F480221A6000205860D86218634FF403 -S315080025C81F020192019A9A6098605A6A42F08072CC -S315080025D85A6202B0704700BF001002400CC0FFF8EC -S315080025E8034B5B68C3F30313024AD35CD8407047AE -S315080025F800100240E8580008034B5B68C3F302233F -S31508002608024AD35CD840704700100240F8580008C0 -S31508002618034B5B68C3F3C223024AD35CD8407047AE -S3150800262800100240F85800080E4B5B6803F4803324 -S31508002638ABB90D4B0B4AD06A00F00F000130B3FB5B -S31508002648F0F0536803F470134FF4701292FAA2F27A -S31508002658B2FA82F2D340023303FB00F07047034B09 -S31508002668E8E700BF0010024000093D0000127A00A2 -S3150800267808B5054B5B6803F00C03082B01D0034823 -S3150800268808BDFFF7D1FFFBE70010024000127A00E9 -S3150800269810B50446FFF7ECFF2060FFF7A1FF60605E -S315080026A8FFF7AAFFA0606068FFF7B2FFE06010BDF9 -S315080026B810B5044628BB414B1B6B032282401340C6 -S315080026C843EA0063022B14D0032B0BD0012B06D048 -S315080026D8FFF7CEFFFFF784FFFFF79AFF12E0FFF731 -S315080026E8C7FF0FE0354B186810F002000AD03448C7 -S315080026F808E0324B186A10F0020003D04FF4004085 -S3150800270800E00020102C02D0122C2BD010BD2B4B29 -S315080027181B6B0322A240134043EA0463294A9342E7 -S3150800272818D002F5803293420DD0A2F500329342B2 -S3150800273806D0FFF79DFFFFF753FFFFF75DFFE3E7B7 -S31508002748FFF796FFE0E71D4B1B6813F0020FDBD077 -S315080027581B48D9E7194B1B6A13F0020FD4D04FF45C -S315080027680040D1E7154B1B6B0322A240134043EAEE -S315080027780464154B9C4218D003F580239C420DD05F -S31508002788A3F500239C4206D0FFF772FFFFF728FF40 -S31508002798FFF732FFBAE7FFF76BFFB7E7074B1B6888 -S315080027A813F0020FB2D00648B0E7044B1B6A13F0C1 -S315080027B8020FABD04FF40040A8E700BF0010024054 -S315080027C800127A00000002100000081210B504462C -S315080027D8B0F5401F04D00020B4F5400F29D010BD2D -S315080027E8284B1B6B034043EA1023274A934218D009 -S315080027F802F5801293420DD0A2F50012934206D034 -S31508002808FFF736FFFFF7ECFEFFF7F6FEE4E7FFF7FC -S315080028182FFFE1E71B4B186810F00200DCD01B48B5 -S31508002828DAE7184B186A10F00200D5D04FF40040C2 -S31508002838D2E7144B1B6B234043EA1424144B9C42DF -S3150800284818D003F580039C420DD0A3F500039C42DB -S3150800285806D0FFF70DFFFFF7C3FEFFF7CDFEBEE76D -S31508002868FFF706FFBBE7074B1B6813F0020FB6D046 -S315080028780648B4E7034B1B6A13F0020FAFD04FF4B0 -S315080028880040ACE7001002400030200000127A0031 -S3150800289800C0800038B5036813F0010F5FD10446FD -S315080028A80D46036823F4164323F00C034A68C968DF -S315080028B80A4329690A43A9690A4313430360AB68AB -S315080028C8426822F44052134343606B69826822F4D3 -S315080028D8407213438360244B98420DD0234B984289 -S315080028E812D0234B984213D0224B984214D0224B2D -S315080028F8984216D0012033E00020FFF7D9FE80B3AE -S315080029082B689BB901202BE01020FFF7D1FEF6E7CC -S315080029181220FFF7CDFEF2E74FF44010FFF756FFF7 -S31508002928EDE74FF44000FFF751FFE8E7AA69B2F56B -S31508002938004F07D000EB5300B0FBF3F39BB2E360FC -S3150800294800200DE05A0802EB4000B0FBF3F34FF6FF -S31508002958F0721A40C3F342031343E360F0E7012019 -S3150800296838BD0120FCE700BF00380140004400409C -S3150800297800480040004C0040005000400346002034 -S31508002988A3F844004FF43F42A3F840207047B0F834 -S31508002998403023F47C535B045B0CA0F840300020DD -S315080029A8704784B0844601A880E80E000123ACF875 -S315080029B840300020ACF84000ACF84400ACF85000B1 -S315080029C804B0704710B503460A7830F822C01FFAD3 -S315080029D88CFC2CF4EC4C2CF0700C1FFA8CFCC87888 -S315080029E8032862D8DFE800F0565D0259002048F24D -S315080029F8800E4CEA0E0C23F822C091F800C033F872 -S31508002A082C2012B222F4E04222F070024CEA0202AA -S31508002A1892B242EA0E0223F82C200A7B002A40F0DA -S31508002A28DC804A78002A51D0B3F8502013FA82F28B -S31508002A380C7802EB0412B1F806C04FEA5C0C4FEAB0 -S31508002A484C0CA2F800C40C7833F8242012F0400F76 -S31508002A580CD033F8242092B222F4E04222F0700215 -S31508002A6842F4004242F0C00223F82420CA78012A18 -S31508002A781DD0097833F8212092B222F4E04222F0D8 -S31508002A88400282F0200242F4004242F0800223F813 -S31508002A98212017E14CF4007CA9E74CF4C06C00200F -S31508002AA8A5E74CF4806C0020A1E701209FE7097888 -S31508002AB833F8212092B222F4E04222F0400242F48E -S31508002AC8004242F0800223F82120FBE0B3F85020A8 -S31508002AD813FA82F20C7802EB0412B1F806C04FEA30 -S31508002AE85C0C4FEA4C0CA2F808C4B3F8502013FA49 -S31508002AF882F20C7802EB0412B2F80CC4CCF3090C77 -S31508002B08A2F80CC40C693E2C39D94FEA541E14F0A5 -S31508002B181F0F01D10EF1FF3EB2F80CC41FFA8CFC48 -S31508002B284FEA8E2E1FFA8EFE4CEA0E0C4CF4004C19 -S31508002B38A2F80CC40C7833F8242012F4804F0CD071 -S31508002B4833F8242092B222F4E04222F0700242F4CA -S31508002B58404242F0800223F82420097869BB33F8FA -S31508002B68212092B222F4804222F0700282F4405266 -S31508002B7842F4004242F0800223F82120A2E04CB930 -S31508002B88B2F80C446FEA44446FEA5444A4B2A2F873 -S31508002B980C44CFE74FEA540C14F0010F01D00CF19E -S31508002BA8010CB2F80C44A4B24FEA8C2C1FFA8CFC20 -S31508002BB844EA0C0CA2F80CC4BCE733F8212092B2FC -S31508002BC822F4804222F0700282F4005242F4004253 -S31508002BD842F0800223F8212074E0CA78022A72D0CB -S31508002BE80C7833F8242092B222F4E24222F07002DA -S31508002BF842F4004242F0800223F82420B3F8502019 -S31508002C0813FA82F291F800C002EB0C12B1F808C068 -S31508002C184FEA5C0C4FEA4C0CA2F800C4B3F85020F3 -S31508002C2813FA82F291F800C002EB0C12B1F80AC046 -S31508002C384FEA5C0C4FEA4C0CA2F808C44A78002AFA -S31508002C4850D10C7833F8242012F4804F0CD033F87E -S31508002C58242092B222F4E04222F0700242F4404262 -S31508002C6842F0800223F824200C7833F8242012F046 -S31508002C78400F0CD033F8242092B222F4E04222F016 -S31508002C88700242F4004242F0C00223F8242091F868 -S31508002C9800C033F82C2092B222F4804222F0700247 -S31508002CA882F4405248F28004224323F82C200978FB -S31508002CB833F8212092B222F4E04222F0400222435D -S31508002CC823F8212010BD0C7833F8242092B222F478 -S31508002CD8E04222F0700242F4014242F0800223F8F0 -S31508002CE824208BE70C7833F8242012F4804F0CD074 +S3150800021800F070F808BD08B500F072F808BD0000CF +S3150800022800B5C7B04FF48C720021684608F08AFBFF +S315080002386946084807F0E2FF40B9009B3BB19DF8BC +S31508000248083013F0100F02D1012000E0002047B053 +S315080002585DF804FB8489000800487047848900080B +S3150800026808B50748002380F828320A22054907F006 +S31508000278EDFB18B9024B012283F8282208BD00BFF6 +S31508000288E40000207489000808B5064B93F828325C +S31508000298012B03D0044807F0DBFF08BD014807F027 +S315080002A8D7FEF7E7E40000208489000808B5054B5F +S315080002B893F82832012B00D008BD024807F0C8FE7B +S315080002C8FAE700BFE400002008B5094B93F828327E +S315080002D8012B00D008BD064908F043F80028F9DACA +S315080002E80348002380F8283207F0B2FEF2E700BF79 +S315080002F8E4000020014B1880704700BF1003002057 +S3150800030808B505F05BF80F4B1B68984210D30E4BDF +S315080003181B7873B90C4B01221A704FF090432022B0 +S315080003289A6105F04BF8094B1B880344054A136084 +S3150800033808BD054B00221A704FF0904320229A6296 +S31508000348EFE700BF14030020120300201003002063 +S315080003584FF0904320229A62704700002DE9F04F2B +S315080003688DB0002406940794089409940A940B946B +S31508000378334B5A6942F480025A615A6902F4800278 +S315080003880592059A5A6942F400325A615A6902F482 +S3150800039800320492049A5A6942F480225A615A69C8 +S315080003A802F480220392039A5A6942F400225A6197 +S315080003B85A6902F400220292029A5A6942F4801291 +S315080003C85A615B6903F480130193019B4FF09046C9 +S315080003D84FF0200BC6F828B01A4F4FF00408C7F894 +S315080003E82880DFF864904FF4805AC9F818A00125C8 +S315080003F806950A9506A9304602F090F8CDF818B081 +S315080004080795089409940A9406A9304602F086F8CE +S31508000418CDF818A00795089409940A9406A9484699 +S3150800042802F07CF8CDF818800795032308930994F9 +S315080004380A9406A9384602F071F80DB0BDE8F08F9F +S3150800044800100240000C00480008004810B590B09B +S31508000458002409940A940B940C940D940E940F9402 +S31508000468039404940594069407940894224BDA692D +S3150800047842F48022DA61DA6902F480220292029A48 +S315080004885A6942F480225A615B6903F4802301930E +S31508000498019B4FF4406303930223049303230593B4 +S315080004A80723089303A9154802F038F84FF461435F +S315080004B809930A940B940C940C230D930E940F9499 +S315080004C809A90F4802F0BEFA0E4A52E8003F23F47B +S315080004D8806342E800310029F6D1094B5A6822F4AC +S315080004E890425A609A6822F02A029A601A6842F07C +S315080004F801021A6010B010BD00100240000400483E +S31508000508004800400848004072B6FEE708B52C4A7D +S31508000518136823F0070343F002031360284B1B688C +S3150800052803F00703022BF9D1264A136843F48033EC +S315080005381360244B1B6813F4003FFAD0214B5A6802 +S3150800054822F4741242F4E8125A60DA6A22F00F02A8 +S31508000558DA621A6842F080721A601A4B1B6813F03E +S31508000568007FFAD0174B5A6822F0F0025A605A6888 +S3150800057822F4E06242F480625A605A6822F46052B1 +S315080005885A605A6822F0030242F002025A600D4B7A +S315080005985B6803F00C03082BF9D10B4803F060FAE3 +S315080005A80F2000F05DF948B9064B1A6B22F4402271 +S315080005B81A635A6822F480025A6008BDFFF7A4FF36 +S315080005C8002002400010024000A24A0408B500F0C4 +S315080005D86DF9FFF79BFFFFF7C1FEFFF737FFFFF738 +S315080005E8EFFDFFF7F1FDFCE782B00A4B9A6942F086 +S315080005F801029A619A6902F001020092009ADA6980 +S3150800060842F08052DA61DB6903F080530193019B5B +S3150800061802B070470010024000B589B00023039362 +S3150800062804930593069307930268144B9A4202D0DB +S3150800063809B05DF804FB03F5D633DA6942F00072AF +S31508000648DA61DA6902F000720192019A5A6942F48B +S3150800065880225A615B6903F480230293029B4FF454 +S3150800066840730393022304930323069309230793EA +S3150800067803A9034800F070FDDAE700BF00640040EC +S315080006880004004810B588B0002303930493059323 +S31508000698069307930268134B9A4201D008B010BD17 +S315080006A8114C636943F400336361636903F40033E7 +S315080006B80193019B4FF4C053039302230493032326 +S315080006C806930E23079303A94FF0904000F044FDC4 +S315080006D8E36943F40003E361E36903F4000302935F +S315080006E8029BDBE7005C00400010024008B5026880 +S315080006F8074B9A4200D008BD064AD36923F400037B +S31508000708D3614FF4C0514FF0904000F009FEF2E76C +S31508000718005C00400010024030B589B000230293FF +S3150800072803930493059306930793204C636943F44C +S3150800073800236361636903F400230193019B1C4842 +S315080007484FF48053836102930123039302A901F0AE +S31508000758E5FE01F08DFF4FF090452023AB62154862 +S3150800076801F06AFE144801F067FE284601F064FEA7 +S31508000778E36923F48023E361E36923F48043E361AF +S31508000788636923F480136361636923F480236361CF +S31508000798636923F400336361E36923F08053E361F3 +S315080007A8A36923F00103A36109B030BD0010024014 +S315080007B800080048000C004800040048FEE7FEE769 +S315080007C8FEE7FEE7FEE770477047704708B500F092 +S315080007D87FF808BD034AD2F8883043F47003C2F894 +S315080007E88830704700ED00E0DFF834D0FFF7F2FFF5 +S315080007F80C480D490D4A002302E0D458C450043366 +S31508000808C4188C42F9D30A4A0A4C002301E013603B +S315080008180432A242FBD308F071F8FFF7D7FEFEE7C9 +S3150800082800A0002000000020C40000204492000810 +S31508000838C8000020801A0020FEE7000010B5074B04 +S315080008484FF0FF321A6100241C61DA60DC609A6294 +S315080008589C62FFF761FF204610BD00BF00100240EA +S3150800086810B504460E4B18784FF47A73B3FBF0F3B9 +S315080008780C4A1068B0FBF3F000F014FB68B90F2CAB +S3150800088801D901200AE0002221464FF0FF3000F086 +S31508000898D1FA054B1C60002000E0012010BD00BFFE +S315080008A804000020000000200800002008B5074AB8 +S315080008B8136843F010031360032000F0A9FA0F2009 +S315080008C8FFF7CEFFFFF790FE002008BD0020024084 +S315080008D8034A1168034B1B780B441360704700BF23 +S315080008E80406002004000020002800F0A18038B57E +S315080008F8044690F82030D3B12268136843F0010300 +S31508000908136004F063FD054623685A6812F0010F60 +S3150800091810D104F05BFD401B0A28F5D9636A43F435 +S3150800092800336362052384F82030012038BDFFF7B9 +S3150800093873FEE1E71A6822F002021A6004F046FD1F +S31508000948054623685A6812F0020F0DD004F03EFDDA +S31508000958401B0A28F5D9636A43F400336362052302 +S3150800096884F820300120E1E7227E012A3DD01A6862 +S3150800097822F080021A60637E012B3BD02268136836 +S3150800098823F040031360A37E012B39D0226813682D +S3150800099823F020031360E37E012B37D022681368FF +S315080009A843F010031360237F012B35D022681368A0 +S315080009B823F008031360637F012B33D0226813687A +S315080009C823F004031360A368E268134322691343F8 +S315080009D8626913436268013A21681343CB610020B0 +S315080009E86062012384F82030A0E71A6842F0800282 +S315080009F81A60C0E72268136843F040031360C2E729 +S31508000A082268136843F020031360C4E72268136852 +S31508000A1823F010031360C6E72268136843F0080337 +S31508000A281360C8E72268136843F004031360CAE72B +S31508000A3801207047026890F82030013BDBB2012B91 +S31508000A4805D9436A43F4802343620120704730B4CA +S31508000A58D2F8003243F00103C2F800324B6903F0BA +S31508000A681F03012000FA03F3D2F81C026FEA030CED +S31508000A7820EA0300C2F81C02C869B0B9D2F80C0209 +S31508000A880CEA0000C2F80C028C884869CD6844EA6A +S31508000A980544483042F830400C8848698D6844EA6D +S31508000AA80544483002EBC0004460C86901281BD0D9 +S31508000AB8886980BBD2F804020CEA0000C2F804026E +S31508000AC8086970BBD2F814020CEA0000C2F81402CE +S31508000AD8096A01292BD0D2F8003223F00103C2F89B +S31508000AE80032002030BC7047D2F80C021843C2F80E +S31508000AF80C028C8848690D6844EA0544483042F86F +S31508000B0830408C8948698D6844EA0544483002EBC8 +S31508000B18C0004460CCE7D2F804021843C2F80402BD +S31508000B28CEE7D2F814021843C2F81402D0E7D2F86E +S31508000B381C120B43C2F81C32CDE770B5044690F870 +S31508000B482050EDB2012D06D0436A43F400234362D0 +S31508000B580125284670BD022380F8203002681368EC +S31508000B6823F00103136004F031FC064623685B682A +S31508000B7813F0010F0CD004F029FC831B0A2BF5D9B6 +S31508000B88636A43F400336362052384F82030E0E798 +S31508000B9800256562DDE730B590F820C00468A468CA +S31508000BA80CF1FF3C5FFA8CFCBCF1010F62D814F01B +S31508000BB8E05F59D0C4F3016C012404FA0CF41C60F4 +S31508000BC88B68002B3DD10D68CB68046843EA455508 +S31508000BD80CF118031B01E55003680C690CF1180E93 +S31508000BE803EB0E135C600B7D012B35D0D179937915 +S31508000BF81B0443EA0163517943EA0123147901681E +S31508000C08234301EB0C11C1F88C31D17893781B0476 +S31508000C1843EA0163517843EA0123117802680B43D2 +S31508000C2802EB0C12C2F8883102680CF1180C4FEA6C +S31508000C380C1C52F80C3043F0010342F80C30002023 +S31508000C481DE04C6843EAC403CC6823430CF1180436 +S31508000C58240105682B51BFE7036803EB0E1359688F +S31508000C6841F480715960C1E7436A43F4001343624B +S31508000C78012004E0436A43F480234362012030BD1F +S31508000C8890F82030013BDBB2012B01D900207047D0 +S31508000C9803689B6803EA8163B3EB816F01D001207F +S31508000CA870470020704790F820C00CF1FF3C5FFAA7 +S31508000CB88CFCBCF1010F00F2A58030B451B9046868 +S31508000CC8E46814F0030F10D1436A43F4001343622F +S31508000CD801207EE00468246914F0030F05D1436AED +S31508000CE843F400134362012073E0056801F11B040D +S31508000CF824012C5904F004049460002C6BD105686F +S31508000D0801F11B0424012C59640D1460046801F1CF +S31508000D181B0C4FEA0C1C54F80C4004F00204D4606F +S31508000D280468A444DCF8045015F0080F5BD00824BE +S31508000D381461056801F11B0C05EB0C156D68C5F304 +S31508000D4807259561046804EB0C146468240C54613F +S31508000D58026802EB0112D2F8B8211A70026802EB8F +S31508000D680112D2F8B821C2F307225A70026802EBB8 +S31508000D780112D2F8B821C2F307429A70026802EB48 +S31508000D880112D2F8B821120EDA70026802EB0112C3 +S31508000D98D2F8BC211A71026802EB0112D2F8BC21FA +S31508000DA8C2F307225A71026802EB0112D2F8BC2173 +S31508000DB8C2F307429A71026802EB0112D2F8BC2103 +S31508000DC8120EDA71C1B90268D36843F02003D360FA +S31508000DD8002030BC7047056801F11B0424012C5912 +S31508000DE8E408546092E701F11B0504EB05146468EE +S31508000DF804F00F0414619CE70268136943F02003A2 +S31508000E081361E5E7436A43F4802343620120704788 +S31508000E18074AD36823F4E0631B041B0C000200F49A +S31508000E28E060034343F0BF6343F40033D36070477D +S31508000E3800ED00E000B5194BDB68C3F30223C3F1E4 +S31508000E48070CBCF1040F28BF4FF0040C03F1040E7D +S31508000E58BEF1060F18D9033B4FF0FF3E0EFA0CFCFD +S31508000E6821EA0C0199400EFA03F322EA030319430F +S31508000E7800280BDB0901C9B200F1604000F56140A2 +S31508000E8880F800135DF804FB0023E5E700F00F007F +S31508000E980901C9B2024B1954F4E700BF00ED00E096 +S31508000EA814ED00E00138B0F1807F0BD24FF0E02353 +S31508000EB85861054AF02182F8231000209861072214 +S31508000EC81A6170470120704700ED00E0044B0022C4 +S31508000ED8DA61044A136943F0010313610180704714 +S31508000EE808060020002002400C4BDB6813F01003AC +S31508000EF805D00B4AD36943F00203D3611023074A86 +S31508000F08D26812F0040F06D00549CA6942F00102F0 +S31508000F18CA6143F00403014AD360704700200240BF +S31508000F28080600200A4B1B6913F0800F0BD0084BE4 +S31508000F38084A5A6002F188325A601B6913F0800F12 +S31508000F4803D100207047002070470120704700BF72 +S31508000F580020024023016745034A136943F08003CA +S31508000F6813610020704700BF0020024038B50446C8 +S31508000F7804F02CFA0546144BDB6813F0010F0AD067 +S31508000F88B4F1FF3FF7D024B104F020FA401BA04281 +S31508000F98F1D9032012E00C4BDB6813F0200F02D0BE +S31508000FA8094B2022DA60084BDB6813F0100F06D1CC +S31508000FB8054BDB6813F0040F01D1002038BDFFF795 +S31508000FC893FF0120FAE700BF002002402DE9F84305 +S31508000FD81E46244B1B7E012B41D004460F469046DD +S31508000FE8204B01221A764CF25030FFF7BFFF034612 +S31508000FF878BB012C08D0022C03D04FF004091C46F4 +S3150800100807E04FF00209FAE74FF00109F7E701345C +S31508001018E4B24C451DD22101C1F12002A1F12003F9 +S3150800102828FA01F106FA02F2114326FA03F31943DC +S3150800103889B207EB4400FFF749FF4CF25030FFF737 +S3150800104895FF094B1D6925F001051D610346002812 +S31508001058DDD0044A002111761846BDE8F883022334 +S31508001068FAE700BF0806002000200240064B0022C7 +S31508001078DA61064B1A6942F004021A611A6942F0E3 +S3150800108840021A61704700BF080600200020024087 +S31508001098064B0022DA61064B1A6942F002021A6107 +S315080010A858611A6942F040021A617047080600201A +S315080010B800200240264B1B7E012B45D070B50546FD +S315080010C80E46234B01221A760368934220D04CF227 +S315080010D85030FFF74BFF88BB4FF0FF3333606C681F +S315080010E80121AA686B6803EBC223A34227D92046C5 +S315080010F8FFF7CEFF4CF25030FFF738FF154A136951 +S3150800110823F0020313610146B0B904F50064E8E761 +S315080011184CF25030FFF72AFF08B101210FE0FFF71C +S31508001128A5FF4CF25030FFF721FF0146094A13691B +S3150800113823F00403136102E0346000E00121044B44 +S3150800114800221A76084670BD02210846704700BF75 +S315080011580806002000200240F0B583B0002362E0AC +S3150800116885685E000324B44025EA0405CC68B440C3 +S315080011782C438460446824EA0C0C4C68C4F30014B5 +S315080011889C4044EA0C0444605EE0DD08083550F8E3 +S31508001198256003F007044FEA840C0F2404FA0CF4BC +S315080011A826EA040E0C6904FA0CF444EA0E0440F81C +S315080011B8254060E0042400E0002404FA0EF42C43D9 +S315080011C80CF1020C524D45F82C40524CA568D443F4 +S315080011D825EA02064F6817F4801F01D042EA050679 +S315080011E84C4DAE60ED6804EA05064F6817F4001F13 +S315080011F801D042EA0506474DEE606D6804EA050621 +S315080012084F6817F4003F01D042EA0506414D6E6063 +S315080012182D682C404E6816F4803F01D042EA050432 +S315080012283C4A146001330A6832FA03F46ED04FF068 +S31508001238010C0CFA03FC1CEA0202F3D04C6804F011 +S315080012480304013C012C8BD94C6804F00304032CD5 +S315080012580CD0C4685D004FF0030C0CFA05FC24EAB0 +S315080012680C0C8C68AC4044EA0C04C4604C6804F066 +S315080012780304022C89D004684FEA430E4FF0030C86 +S315080012880CFA0EFC24EA0C0C4C6804F0030404FA65 +S315080012980EF444EA0C0404604C6814F4403FC1D0C8 +S315080012A81D4CA56945F00105A561A46904F001046A +S315080012B80194019C4FEA930C0CF10205144C54F85E +S315080012C8255003F003044FEA840E0F2404FA0EF49B +S315080012D825EA0405B0F1904F3FF46EAF0F4CA042D3 +S315080012E80ED004F58064A0420CD004F58064A042B0 +S315080012F80AD004F58064A0423FF45CAF05245CE795 +S3150800130801245AE7022458E7032456E703B0F0BD38 +S315080013180000014000040140001002400004004893 +S31508001328002331FA03F27AD0F0B52EE0042500E05E +S31508001338002505FA0CFCA44555D004685D004FF055 +S31508001348030C0CFA05FC24EA0C0404604FEAD30ED5 +S315080013580EF1080E50F82E4003F00705AE000F25CB +S31508001368B54024EA050440F82E40C46824EA0C046B +S31508001378C460446824EA02024260826822EA0C02CF +S315080013888260013331FA03F248D001229A4012EA00 +S315080013980107F6D04FEA930E0EF10205204C54F8D1 +S315080013A8254003F0030C4FEA8C0C0F2505FA0CF6BA +S315080013B83440B0F1904FBBD01A4DA8420DD005F570 +S315080013C88065A8420BD005F58065A84209D005F5C1 +S315080013D88065A842AAD00525ABE70125A9E7022515 +S315080013E8A7E70325A5E7104C256825EA070525601C +S315080013F8656825EA07056560E56825EA0705E5607D +S31508001408A56825EA0707A760054F0EF1020457F8ED +S31508001418245025EA060547F824508EE7F0BD70479C +S3150800142800000140000400480004014038B512F4E1 +S31508001438804F45D00468B4F8503091F800C04FEA98 +S31508001448CC0E1EFA83F3023304EB4303B3F80044C5 +S31508001458C4F309048B69A34228D31B1B8B618B69C8 +S315080014687BB9056835F82C309BB223F4804323F002 +S31508001478700383F4005343F4004343F0800325F8CC +S315080014882C3012F0400F0ED002680D7832F825304D +S315080014989BB223F4E04323F0700343F4004343F07C +S315080014A8C00322F8253024B9204638BD00238B61AD +S315080014B8D5E723460A894969006802F0B8FAF3E7C6 +S315080014C80468B4F8503091F800C04FEACC0E1EFAFA +S315080014D883F3063304EB4303B3F80044C4F309045F +S315080014E88B69A3422FD31B1B8B618B697BB9056854 +S315080014F835F82C309BB223F4804323F0700383F429 +S31508001508005343F4004343F0800325F82C3012F0C7 +S31508001518400F0FD1026891F800C032F82C309BB200 +S3150800152823F4E04323F0700343F4004343F0C00375 +S3150800153822F82C30002CB7D023464A894969006816 +S3150800154802F075FAB0E700238B61CEE7002860D071 +S3150800155830B587B0044690F8A9323BB1032384F81E +S31508001568A932206801F0EBFA00231BE080F8A832BC +S31508001578FFF788F8F2E75A1C02EB820104EBC1016F +S315080015880120487002EB820104F8313004EBC100EF +S315080015980021C17003EB830004EBC0008163C163BB +S315080015A80164D3B260688342E5D3002316E003EBEF +S315080015B8830204EBC202002182F8691182F86831B5 +S315080015C882F86B11C2F87811C2F87C1103EB830212 +S315080015D804EBC202C2F880110133DBB29842E6D89E +S315080015E8A4465CF8105BEE46BCE80F00AEE80F00B0 +S315080015F8DCF80030CEF80030231D0ECB284601F063 +S31508001608A8FA002084F82400012384F8A93207B030 +S3150800161830BD0120704738B590B10446032380F8D9 +S31508001628A932006801F0EEFD054610B101252846E5 +S3150800163838BD2046FFF75AF8002384F8A932F6E79A +S315080016480125F4E738B590F8A832012B11D00446DD +S31508001658012580F8A852006801F068FA294620464C +S3150800166807F040F9206801F0DEFD002084F8A8029A +S3150800167838BD0220FCE790F8A832012B12D010B525 +S315080016880446012380F8A832006801F058FA0021B8 +S31508001698204607F027F9206801F0C7FD002084F8DE +S315080016A8A80210BD0220704770B505460C461646B6 +S315080016B812F0400F00F00E810268B2F8503009782F +S315080016C8C80010FA83F3023302EB4303B3F8002485 +S315080016D8C2F30902A36993424ED99B1AA361A36967 +S315080016E8002B66D16378002B49D12A68B2F85030A6 +S315080016F812FA83F303EB0111B1F80434C3F30903AF +S31508001708A1F80434B1F804346FEA43436FEA534343 +S315080017189BB2A1F8043429686278002A3CD1B1F84A +S31508001728503011FA83F3227803EB0213B3F80C242A +S31508001738C2F30902A3F80C24B3F80C246FEA424250 +S315080017486FEA524292B2A3F80C242178284606F08A +S31508001758CFFF16F4804F41D02A68217832F8213015 +S315080017689BB223F4E04323F0700343F4404343F069 +S31508001778800322F8213031E00023A361AFE7012B6B +S31508001788C9D12A68B2F8503012FA83F303EB01116B +S315080017980023A1F80434BEE7012AD6D1B1F850309F +S315080017A811FA83F3217803EB01130022A3F80C241A +S315080017B8CBE716F4804F0DD0286830F821309BB255 +S315080017C823F4E04323F0700343F4404343F08003D3 +S315080017D820F8213094F82430012B12D02A68217871 +S315080017E832F821309BB223F4E04323F0400383F018 +S315080017F8300343F4004343F0800322F821300020E5 +S3150800180870BD636913446361E3691344E361216A3C +S315080018182369994224D3C91A21626278002A44D1D5 +S315080018282968B1F8502011FA82F2217802EB0112E0 +S31508001838B2F80414C1F30901A2F804143E2B1BD903 +S31508001848580913F01F0F00D10138B2F8041489B2E9 +S31508001858800280B2014341F40041A2F8041426E04C +S3150800186821B9002384F824301346D6E7002384F8E0 +S31508001878243023620B46D0E74BB9B2F804146FEA52 +S3150800188841416FEA514189B2A2F804140FE0590898 +S3150800189813F0010F00D00131B2F8040480B28902AE +S315080018A889B20143A2F8041401E0012A06D09BB2C2 +S315080018B822896169286801F0BEFC8FE72968B1F8B2 +S315080018C8502011FA82F2217802EB011299B2A2F895 +S315080018D80414ECE70268B2F850300978C80010FA20 +S315080018E883F3063302EB4303B3F80024C2F3090271 +S315080018F8A36993424FD39B1AA361A369002B67D1A7 +S315080019086378002B4AD12A68B2F8503012FA83F362 +S3150800191803EB0111B1F80434C3F30903A1F804343D +S31508001928B1F804346FEA43436FEA53439BB2A1F80C +S31508001938043429686278002A3DD1B1F8503011FA82 +S3150800194883F3227803EB0213B3F80C24C2F30902D3 +S31508001958A3F80C24B3F80C246FEA42426FEA524201 +S3150800196892B2A3F80C242178284606F0C1FE16F48C +S31508001978804F7FF433AF2A68217832F821309BB23A +S3150800198823F4E04323F0700343F4404343F0800311 +S3150800199822F8213022E70023A361AEE7012BC8D13C +S315080019A82A68B2F8503012FA83F303EB01110023C0 +S315080019B8A1F80434BDE7012AD5D1B1F8503011FA97 +S315080019C883F3217803EB01130022A3F80C24CAE752 +S315080019D816F4804F0DD1286830F821309BB223F4CD +S315080019E8E04323F0700343F4404343F0800320F8B0 +S315080019F8213094F82430012B7FF4F0AE6369134440 +S31508001A086361E3691344E361216A2369994224D32C +S31508001A18C91A216229686278002A43D1B1F8502088 +S31508001A2811FA82F2217802EB0112B2F80C14C1F30A +S31508001A380901A2F80C143E2B1BD9580913F01F0FDD +S31508001A4800D10138B2F80C1489B2800280B2014379 +S31508001A5841F40041A2F80C1426E021B9002384F8C1 +S31508001A6824301346D6E70023236284F824300B462D +S31508001A78D0E74BB9B2F80C146FEA41416FEA514105 +S31508001A8889B2A2F80C140FE0590813F0010F00D018 +S31508001A980131B2F80C0480B2890289B20143A2F86E +S31508001AA80C1401E0012A06D09BB26289616928688C +S31508001AB801F0C1FB92E6B1F8502011FA82F22178BA +S31508001AC802EB011299B2A2F80C14EDE72DE9F041E0 +S31508001AD805462868B0F8443013F4004F00F08E82A3 +S31508001AE8B0F84440A3B214F00F0440F0E28013F0B3 +S31508001AF8100F6BD003889AB213F4006F40F09D80DC +S31508001B0812F4004FE5D0038823F070031B051B0D5C +S31508001B1843F0800303802868B0F8503095F86821A8 +S31508001B28D20012FA83F3063300EB4303B3F8003402 +S31508001B38C3F30903C5F884318BB1D5F87C1171B1A3 +S31508001B48B5F86E2101F073FFD5F88421D5F87C31F4 +S31508001B581344C5F87C310021284606F0BDFD2A68DD +S31508001B68138899B213F4006FB3D101F44051B1F553 +S31508001B78405FAED0B2F8503012FA83F2B2F80C349D +S31508001B88C3F30903A2F80C34D5F878313E2B77D974 +S31508001B98590913F01F0F00D10139B2F80C349BB25A +S31508001BA8890289B20B4343F40043A2F80C342A6825 +S31508001BB813889BB223F4804323F0700383F44053BD +S31508001BC843F4004343F08003138082E703889BB2FB +S31508001BD823F4E14323F070036FEA43436FEA534360 +S31508001BE89BB203802A68B2F8503095F82810C900C5 +S31508001BF811FA83F3023302EB4303B3F80034C3F351 +S31508001C0809036B64EA6B1344EB630021284606F064 +S31508001C186FFD95F82430002B3FF45BAF2B6C002B37 +S31508001C287FF457AF95F824302A6843F08003A2F862 +S31508001C384C30002385F824304BE7B0F8503095F837 +S31508001C486821D20012FA83F3063300EB4303B3F88C +S31508001C580034C3F30903C5F88431B5F86E2105F5D0 +S31508001C682C7101F0E4FE2A68138823F070031B051B +S31508001C781B0D43F080031380284606F025FD28E748 +S31508001C884BB9B2F80C346FEA43436FEA53439BB235 +S31508001C98A2F80C348BE7590813F0010F00D001316C +S31508001CA8B2F80C3498B28B029BB20343A2F80C34F0 +S31508001CB87DE730F824309EB213F4004F4CD116F065 +S31508001CC8800F3FF406AF621C02EB820105EBC101E7 +S31508001CD8286830F824309BB223F4E14323F07003D4 +S31508001CE86FEA43436FEA53439BB220F82430CB7814 +S31508001CF8012B00F0F28016F4807F40F07A8128687C +S31508001D08B0F85030621C02EB820215F83260F20015 +S31508001D1812FA83F3023300EB4303B3F80034C3F330 +S31508001D28090304EB840205EBC202126C9A4240F2DC +S31508001D384C8104EB840705EBC707D21A3A6404EB0F +S31508001D48840205EBC202126C002A40F0458131462E +S31508001D58284606F0CDFCBCE630F8243023F070039C +S31508001D681B051B0D43F0800320F8243004EB84017F +S31508001D78C90001F5B47105EB010804EB840305EB0A +S31508001D88C30393F87431002B42D12868B0F8503051 +S31508001D9804EB840205EBC20292F86821D20012FA13 +S31508001DA883F3063300EB4303B3F80074C7F3090754 +S31508001DB817BB04EB840305EBC303D3F884213A4421 +S31508001DC8C3F88421D3F87C213A44C3F87C21D3F894 +S31508001DD880313BB104EB840305EBC303D3F87831B0 +S31508001DE89F4275D204EB840305EBC30393F8681185 +S31508001DF8284606F071FC62E704EB840105EBC1018D +S31508001E083B46B1F86E21D1F87C1101F010FED0E7F7 +S31508001E1804EB840305EBC30393F86B31022B35D027 +S31508001E28296804EB840205EBC20292F8680131F8C6 +S31508001E3820309BB223F4E04323F0700343F40043B5 +S31508001E4843F0C00321F82030286892F8683130F842 +S31508001E58232012F4804F20D0B0F85020DB0013FA64 +S31508001E6882F3023300EB4303B3F80074C7F3090798 +S31508001E78002F9ED004EB840105EBC1013B46B1F85F +S31508001E887021D1F87C1101F0D2FD92E7324641461D +S31508001E982846FFF7CBFA07468BE7B0F85020DB0051 +S31508001EA813FA82F3063300EB4303B3F80074C7F357 +S31508001EB80907002F3FF47DAF04EB840105EBC10148 +S31508001EC83B46B1F87221D1F87C1101F0B0FD70E7F4 +S31508001ED84146286801F0C4F9F1E604EB840305EBEA +S31508001EE8C30300221A6493F83430FBB116F0400F86 +S31508001EF837D04B781BBB2A68B2F8503012FA83F3EE +S31508001F08621C02EB820215F8322003EB0213B3F8BF +S31508001F180424C2F30902A3F80424B3F804246FEAD4 +S31508001F2842426FEA524292B2A3F80424013404EBFF +S31508001F38840415F83410284606F0DAFBC9E5012B9F +S31508001F48F4D12A68B2F8503012FA83F3621C02EB0D +S31508001F58820215F8322003EB02130022A3F80424A0 +S31508001F68E4E72A68631C03EB830305EBC3035B7882 +S31508001F78D3B9B2F8503012FA83F3621C02EB820224 +S31508001F8815F8322003EB0213B3F80C24C2F309023E +S31508001F98A3F80C24B3F80C246FEA42426FEA5242BB +S31508001FA892B2A3F80C24C1E7012BBFD1B2F850307E +S31508001FB812FA83F3621C02EB820215F8322003EB4D +S31508001FC802130022A3F80C24B0E704EB840205EBFD +S31508001FD8C20200271764B2E604EB840205EBC202C4 +S31508001FE8D66B1E44D663546C2344536401F038F9FF +S31508001FF86FE532462846FFF757FB6AE50020BDE835 +S31508002008F08190F8A832012B0DD010B504460121AD +S3150800201880F8A81206F066FC206801F004F900208A +S3150800202884F8A80210BD0220704790F8A832012B40 +S315080020380ED010B50446012380F8A832002106F010 +S3150800204851FC206801F0F1F8002084F8A80210BDB8 +S315080020580220704790F8A832012B0DD010B5044617 +S31508002068012380F8A83280F82410006801F0D5F812 +S31508002078002084F8A80210BD0220704710B504464F +S31508002088006801F0D4F810F4004F1ED110F4806FE0 +S315080020981FD110F4804F2DD110F4005F34D110F4FD +S315080020A8805F3BD110F4006F57D110F4007F71D1CF +S315080020B810F4807F27D02268B2F844309BB223F404 +S315080020C880739BB2A2F844301DE02046FFF7FEFC59 +S315080020D819E02268B2F844309BB223F480639BB2B5 +S315080020E8A2F84430204606F015FB00212046FFF7E3 +S315080020F8B1FF08E02268B2F844309BB223F4804363 +S315080021089BB2A2F8443010BD2268B2F844309BB29C +S3150800211823F400539BB2A2F84430F4E72268B2F8D5 +S3150800212840309BB223F004039BB2A2F840302268E1 +S31508002138B2F840309BB223F008039BB2A2F84030AD +S31508002148204606F00FFB2268B2F844309BB223F407 +S3150800215880539BB2A2F84430D5E72268B2F84030DB +S315080021689BB243F00803A2F840302268B2F844301C +S315080021789BB223F400639BB2A2F844302268B2F8F3 +S3150800218840309BB243F00403A2F84030204606F0DC +S31508002198D7FAB8E72268B2F844309BB223F400733A +S315080021A89BB2A2F84430204606F0ADFAABE710B564 +S315080021B80446084611F0800F25D101F0070C0CEBF0 +S315080021C88C01C90001F5B47E04EB0E010CEB8C0CEE +S315080021D804EBCC0C4FF0000E8CF869E100F0070010 +S315080021E808700A61CB70022B1AD094F8A832012B12 +S315080021F819D0012384F8A832206800F0BBFC002017 +S3150800220884F8A80210BD01F0070C0CF1010C0CEBC0 +S315080022188C0104EBC1014FF0010E81F801E0DDE7FE +S3150800222800230B71E1E70220ECE710B504460B46DC +S3150800223811F0800F1FD101F0070202EB8201C900D5 +S3150800224801F5B471014402EB820200EBC2020020D8 +S3150800225882F8690103F007030B7094F8A832012B7A +S3150800226813D0012384F8A832206800F06AFE0020FB +S3150800227884F8A80210BD01F00702013202EB8201B8 +S3150800228800EBC10101204870E4E70220F2E710B527 +S3150800229801F0070C0CEB8C01C90001F5B4710CEBC5 +S315080022A88C0E00EBCE0ECEF87C21CEF880310024B9 +S315080022B8CEF884418EF869418EF868C101440068F1 +S315080022C800F0CEFF204610BD01F0070101EB8101A1 +S315080022D800EBC101D1F88401704738B501F007044D +S315080022E804F1010C0CEB8C0104EB840E00EBCE0E0A +S315080022F8CEF83C20CEF8403001228EF84C20CEF895 +S3150800230848300025CEF8445000EBC1035A7000F84F +S3150800231831401946006800F0A3FF284638BD0B4629 +S3150800232801F0070241688A422AD810B5044613F014 +S31508002338800F1DD103EB8301C90001F5B47101446F +S3150800234803EB830300EBC303002083F86901012329 +S315080023588B700A7094F8A832012B13D0012384F8DD +S31508002368A832206800F0D8FE002084F8A80210BD1C +S31508002378531C03EB830100EBC10101204870E6E713 +S31508002388012070470220F2E70B4601F00F01426868 +S31508002398914230D810B5044613F0800F21D103F0C6 +S315080023A8070202EB8201C90001F5B471014402EB88 +S315080023B8820200EBC202002082F8690100228A70B4 +S315080023C803F007030B7094F8A832012B15D00123E4 +S315080023D884F8A832206800F0C4FE002084F8A80211 +S315080023E810BD03F00702013202EB820100EBC101BE +S315080023F801204870E2E7012070470220F0E711F053 +S31508002408800F0BD001F00701013101EB810100EBC8 +S31508002418C10152B90A73CB800020704701EB8101CC +S31508002428C90001F5B4710144F3E701220A730B8167 +S315080024381B0C4B81F0E70000B0F1904F10D0314BE0 +S31508002448984218D0304B984223D0304B98422ED019 +S315080024582F4B984239D02F4B984244D001207047C9 +S315080024682D4B9A6A42F400329A629A6A22F400322A +S315080024789A620020704703F1784303F503339A6A92 +S3150800248842F480229A629A6A22F480229A6200208A +S31508002498704703F1784303F502339A6A42F4002237 +S315080024A89A629A6A22F400229A620020704703F117 +S315080024B8784303F501339A6A42F480129A629A6A53 +S315080024C822F480129A620020704703F1784303F5D4 +S315080024D800339A6A42F400129A629A6A22F400123F +S315080024E89A620020704703F1784303F5FE339A6A27 +S315080024F842F480029A629A6A22F480029A6200205A +S31508002508704700BF0004004800080048000C00484F +S315080025180010004800140048001002400B6893FA9F +S31508002528A3F3B3FA83FC57E08D68826893FAA3F499 +S31508002538B4FA84F464004FF0030E0EFA04F422EA9F +S31508002548040293FAA3F4B4FA84F4640005FA04F4CA +S31508002558224382600C68CD68426822EA040205FBB9 +S3150800256804F42243426045E093FAA3F2B2FA82F2EF +S31508002578072A15D84D69026A93FAA3F4B4FA84F4BB +S31508002588A4000F2606FA04F422EA040293FAA3F42E +S31508002598B4FA84F4A40005FA04F42243026241E07A +S315080025A84C69456A1A0A92FAA2FEBEFA8EFE4FEAE4 +S315080025B88E0E0F2606FA0EFE25EA0E0592FAA2F2E6 +S315080025C8B2FA82F2920004FA02F22A43426229E037 +S315080025D8002070BD0CF1010C0B6833FA0CF244D0DC +S315080025E8012202FA0CF21340F4D070B54A68013A8F +S315080025F8012A99D9C26893FAA3F4B4FA84F4640050 +S31508002608032505FA04F422EA040293FAA3F4B4FAB1 +S3150800261884F464000D6905FA04F42243C2604A6822 +S31508002628022AA1D04A68046893FAA3FEBEFA8EFE67 +S315080026384FEA4E0E032505FA0EFE24EA0E0E93FA05 +S31508002648A3F3B3FA83F35B0002FA03F34EEA030330 +S3150800265803600CF1010C0B6833FA0CF2B8D00122AE +S3150800266802FA0CF21340F4D0C0E7002070470000C5 +S3150800267882B0224A136843F0010313601F4B1B6894 +S3150800268813F0020FFAD01D4A136823F0F80343F033 +S31508002698800313604FF0FF3301930199184B0B40E1 +S315080026A80193019B5360154B5B6813F00C0FFAD125 +S315080026B8124A13680193019B23F0847323F4803329 +S315080026C80193019B13600D4B1B6813F0007FFAD129 +S315080026D80A4B1A6822F480221A6000205860D862C9 +S315080026E818634FF41F020192019A9A6098605A6A11 +S315080026F842F080725A6202B0704700BF001002406A +S315080027080CC0FFF8034B5B68C3F30313024AD35C98 +S31508002718D840704700100240A8890008034B5B6838 +S31508002728C3F30223024AD35CD8407047001002401C +S31508002738B8890008034B5B68C3F3C223024AD35C13 +S31508002748D840704700100240B88900080E4B5B68ED +S3150800275803F48033ABB90D4B0B4AD06A00F00F006F +S315080027680130B3FBF0F0536803F470134FF470129A +S3150800277892FAA2F2B2FA82F2D340023303FB00F0CD +S315080027887047034BE8E700BF0010024000093D0008 +S3150800279800127A0008B5054B5B6803F00C03082B92 +S315080027A801D0034808BDFFF7D1FFFBE70010024038 +S315080027B800127A0010B50446FFF7ECFF2060FFF711 +S315080027C8A1FF6060FFF7AAFFA0606068FFF7B2FF85 +S315080027D8E06010BD10B5044628BB414B1B6B0322AD +S315080027E88240134043EA0063022B14D0032B0BD014 +S315080027F8012B06D0FFF7CEFFFFF784FFFFF79AFFF6 +S3150800280812E0FFF7C7FF0FE0354B186810F0020013 +S315080028180AD0344808E0324B186A10F0020003D090 +S315080028284FF4004000E00020102C02D0122C2BD0C8 +S3150800283810BD2B4B1B6B0322A240134043EA0463CB +S31508002848294A934218D002F5803293420DD0A2F550 +S315080028580032934206D0FFF79DFFFFF753FFFFF7B5 +S315080028685DFFE3E7FFF796FFE0E71D4B1B6813F0EC +S31508002878020FDBD01B48D9E7194B1B6A13F0020F66 +S31508002888D4D04FF40040D1E7154B1B6B0322A24066 +S31508002898134043EA0464154B9C4218D003F5802379 +S315080028A89C420DD0A3F500239C4206D0FFF772FF81 +S315080028B8FFF728FFFFF732FFBAE7FFF76BFFB7E71F +S315080028C8074B1B6813F0020FB2D00648B0E7044B53 +S315080028D81B6A13F0020FABD04FF40040A8E700BFFD +S315080028E80010024000127A000000021000000812C8 +S315080028F810B50446B0F5401F04D00020B4F5400FC3 +S3150800290829D010BD284B1B6B034043EA1023274ADE +S31508002918934218D002F5801293420DD0A2F5001200 +S31508002928934206D0FFF736FFFFF7ECFEFFF7F6FEF1 +S31508002938E4E7FFF72FFFE1E71B4B186810F00200E2 +S31508002948DCD01B48DAE7184B186A10F00200D5D015 +S315080029584FF40040D2E7144B1B6B234043EA142478 +S31508002968144B9C4218D003F580039C420DD0A3F55E +S3150800297800039C4206D0FFF70DFFFFF7C3FEFFF7DB +S31508002988CDFEBEE7FFF706FFBBE7074B1B6813F04C +S31508002998020FB6D00648B4E7034B1B6A13F0020FBA +S315080029A8AFD04FF40040ACE70010024000302000DA +S315080029B800127A0000C080000346026812F0400F31 +S315080029C83AD110B4006820F47F4020F0BF000A68A6 +S315080029D84C682243CC6822430C6922434C6922433B +S315080029E88C692243CC6922430C6A224302431A6043 +S315080029F85A6822F4706222F004028868B1F816C090 +S31508002A0840EA0C0002435A608A68B2F5006F03D29E +S31508002A185A6842F480525A600A6AB2F5005F07D0CB +S31508002A280020DA6922F40062DA615DF8044B70471F +S31508002A388A8C1A610020F4E70120DA6922F4006218 +S31508002A48DA61704738B5036813F0010F5FD1044699 +S31508002A580D46036823F4164323F00C034A68C9682D +S31508002A680A4329690A43A9690A4313430360AB68F9 +S31508002A78426822F44052134343606B69826822F421 +S31508002A88407213438360244B98420DD0234B9842D7 +S31508002A9812D0234B984213D0224B984214D0224B7B +S31508002AA8984216D0012033E00020FFF793FE80B342 +S31508002AB82B689BB901202BE01020FFF78BFEF6E761 +S31508002AC81220FFF787FEF2E74FF44010FFF710FFD2 +S31508002AD8EDE74FF44000FFF70BFFE8E7AA69B2F500 +S31508002AE8004F07D000EB5300B0FBF3F39BB2E3604B +S31508002AF800200DE05A0802EB4000B0FBF3F34FF64E +S31508002B08F0721A40C3F342031343E360F0E7012067 +S31508002B1838BD0120FCE700BF0038014000440040EA +S31508002B2800480040004C0040005000400346002082 +S31508002B38A3F844004FF43F42A3F840207047B0F882 +S31508002B48403023F47C535B045B0CA0F8403000202B +S31508002B58704784B0844601A880E80E000123ACF8C3 +S31508002B6840300020ACF84000ACF84400ACF85000FF +S31508002B7804B0704710B503460A7830F822C01FFA21 +S31508002B888CFC2CF4EC4C2CF0700C1FFA8CFCC878D6 +S31508002B98032862D8DFE800F0565D0259002048F29B +S31508002BA8800E4CEA0E0C23F822C091F800C033F8C0 +S31508002BB82C2012B222F4E04222F070024CEA0202F9 +S31508002BC892B242EA0E0223F82C200A7B002A40F029 +S31508002BD8DC804A78002A51D0B3F8502013FA82F2DA +S31508002BE80C7802EB0412B1F806C04FEA5C0C4FEAFF +S31508002BF84C0CA2F800C40C7833F8242012F0400FC5 +S31508002C080CD033F8242092B222F4E04222F0700263 +S31508002C1842F4004242F0C00223F82420CA78012A66 +S31508002C281DD0097833F8212092B222F4E04222F026 +S31508002C38400282F0200242F4004242F0800223F861 +S31508002C48212017E14CF4007CA9E74CF4C06C00205D +S31508002C58A5E74CF4806C0020A1E701209FE70978D6 +S31508002C6833F8212092B222F4E04222F0400242F4DC +S31508002C78004242F0800223F82120FBE0B3F85020F6 +S31508002C8813FA82F20C7802EB0412B1F806C04FEA7E +S31508002C985C0C4FEA4C0CA2F808C4B3F8502013FA97 +S31508002CA882F20C7802EB0412B2F80CC4CCF3090CC5 +S31508002CB8A2F80CC40C693E2C39D94FEA541E14F0F4 +S31508002CC81F0F01D10EF1FF3EB2F80CC41FFA8CFC97 +S31508002CD84FEA8E2E1FFA8EFE4CEA0E0C4CF4004C68 +S31508002CE8A2F80CC40C7833F8242012F4804F0CD0C0 S31508002CF833F8242092B222F4E04222F0700242F419 -S31508002D08404242F0800223F824200C7833F8242025 -S31508002D1812F0400F0CD033F8242092B222F4E04285 -S31508002D2822F0700242F4004242F0C00223F824203E -S31508002D38CA78012A1ED00C7833F8242092B222F4D5 -S31508002D48E04222F0400282F0200242F4004242F0B9 -S31508002D58800223F82420097833F8212092B222F435 -S31508002D68804222F0700242F4004242F0800223F8C0 -S31508002D782120A7E70C7833F8242092B222F4E042FF -S31508002D8822F0400242F4004242F0800223F824204E -S31508002D98E1E70B7B002B46D14B7813B30A7830F85A -S31508002DA8223013F0400F0CD030F822309BB223F4AF -S31508002DB8E04323F0700343F4004343F0C00320F8CC -S31508002DC822300A7830F822309BB223F4E04323F005 -S31508002DD8400343F4004343F0800320F822300020E0 -S31508002DE870470A7830F8223013F4804F0CD030F840 -S31508002DF822309BB223F4E04323F0700343F44043A4 -S31508002E0843F0800320F822300A7830F822309BB243 -S31508002E1823F4804323F0700343F4004343F080030C -S31508002E2820F82230DBE74B78002B4ED10A7830F8A9 -S31508002E38223013F4804F0CD030F822309BB223F49A -S31508002E48E04323F0700343F4404343F0800320F83B -S31508002E5822300A7830F8223013F0400F0CD030F8B8 -S31508002E6822309BB223F4E04323F0700343F4004373 -S31508002E7843F0C00320F822300A7830F822309BB293 -S31508002E8823F4E04323F0700343F4004343F0C003FC -S31508002E9820F822300B7830F8232092B222F48042A8 -S31508002EA822F0700248F2800C42EA0C0220F823202D -S31508002EB80A7830F822309BB223F4E04323F0400323 -S31508002EC843EA0C0320F8223089E70A7830F82230DA -S31508002ED813F4804F0CD030F822309BB223F4E04329 -S31508002EE823F0700343F4404343F0800320F822306C -S31508002EF80A7830F8223013F0400F0CD030F8223018 -S31508002F089BB223F4E04323F0700343F4004343F0F1 -S31508002F18C00320F822300A7830F822309BB223F40E -S31508002F28E04323F0700343F4404343F0800320F85A -S31508002F3822300B7830F8232092B222F4E04222F0AD -S31508002F48400248F2800C42EA0C0220F823200A784C -S31508002F5830F822309BB223F4804323F0700343EA07 -S31508002F680C0320F822303AE74B788BB10A7830F808 -S31508002F7822309BB223F4E04323F0400383F0100386 -S31508002F8843F4004343F0800320F8223000207047BA -S31508002F980A7830F822309BB223F4804323F0700372 -S31508002FA883F4805343F4004343F0800320F8223027 -S31508002FB8ECE70B7B002B4BD14B7833B30A7830F808 -S31508002FC8223013F0400F0CD030F822309BB223F48D -S31508002FD8E04323F0700343F4004343F0C00320F8AA -S31508002FE82230CB78012B33D00A7830F822309BB2BE -S31508002FF823F4E04323F0400383F0200343F400431B -S3150800300843F0800320F8223022E00A7830F822308C -S3150800301813F4804F0CD030F822309BB223F4E043E7 -S3150800302823F0700343F4404343F0800320F822302A -S315080030380A7830F822309BB223F4804323F07003D1 -S3150800304883F4405343F4004343F0800320F82230C6 -S315080030580020704703460122A0F840200020A3F864 -S3150800306844000322A3F84020704711B98023A0F82A -S315080030784C30002070470020704700207047B0F891 -S31508003088440080B2704710B45C1C640800EB420226 -S3150800309802F5806207E00B78487843EA002322F8AD -S315080030A8043B0231013C002CF5D15DF8044B70470E -S315080030B870B505460C464A78012A3BD00B7B002B8F -S315080030C840F0A6828B690A69934240F284829B1A69 -S315080030D88B61B5F8503015FA83F3217803EB0113A1 -S315080030E8B3F80C14C1F30901A3F80C143E2A40F2EC -S315080030F87682510912F01F0F00D10139B3F80C2452 -S3150800310892B2890289B20A4342F40042A3F80C240F -S31508003118227835F822309BB223F4804323F07003D3 -S3150800312883F4405343F4004343F0800325F82230E0 -S31508003138002070BD8E6909698E4200D90E46237B28 -S3150800314873B3E378022B4DD0236A9B1B236223783B -S3150800315835F8231011F0400F00F0F581002A40F0E9 -S31508003168E281B5F8502015FA82F202EB0313B3F898 -S315080031780C24C2F30902A3F80C243E2E40F2BA81A5 -S31508003188710916F01F0F00D10139B3F80C2492B251 -S31508003198890289B20A4342F40042A3F80C24CBE117 -S315080031A8B6B23346E28861692846FFF76CFFB5F878 -S315080031B8503015FA83F3227803EB0213A3F8046454 -S315080031C8227835F822309BB223F4E04323F04003F3 -S315080031D883F0300343F4004343F0800325F8223094 -S315080031E80020A6E7236A994280F06681227835F896 -S315080031F822309BB223F4E04323F0700343F40143DF -S3150800320843F0800325F82230236A9B1B2362237820 -S3150800321835F8232012F0400F00F0A7806278B2BB79 -S31508003228B5F8502015FA82F202EB0313B3F80C240A -S31508003238C2F30902A3F80C243E2E0FD9710916F019 -S315080032481F0F00D10139B3F80C2492B2890289B24A -S315080032580A4342F40042A3F80C241AE04EB9B3F81C -S315080032680C246FEA42426FEA524292B2A3F80C243F -S315080032780FE0720816F0010F00D00132B3F80C14EB -S3150800328889B2920292B20A43A3F80C2401E0012AF1 -S3150800329830D0B3B2628961692846FFF7F4FE6369DC -S315080032A833446361236A226993422DD99B1B23629F -S315080032B86378002B45D1B5F8503015FA83F3227890 -S315080032C803EB0213B3F80424C2F30902A3F804248F -S315080032D83E2E1DD9710916F01F0F00D10139B3F812 -S315080032E8042492B2890289B20A4342F40042A3F836 -S315080032F8042428E0B5F8502015FA82F202EB0313E5 -S31508003308B2B2A3F80C24C4E7002222621E46CFE70D -S315080033184EB9B3F804246FEA42426FEA524292B2AF -S31508003328A3F804240FE0720816F0010F00D0013242 -S31508003338B3F8041489B2920292B20A43A3F8042491 -S3150800334801E0012B06D0B3B2228961692846FFF746 -S315080033589AFE35E7B5F8503015FA83F3227803EB69 -S315080033680213B2B2A3F80424EDE76278B2BBB5F843 -S31508003378502015FA82F202EB0313B3F80424C2F3B9 -S315080033880902A3F804243E2E0FD9710916F01F0F57 -S3150800339800D10139B3F8042492B2890289B20A43E2 -S315080033A842F40042A3F804241AE04EB9B3F80424F8 -S315080033B86FEA42426FEA524292B2A3F804240FE037 -S315080033C8720816F0010F00D00132B3F8041489B256 -S315080033D8920292B20A43A3F8042401E0012A30D0E3 -S315080033E8B3B2228961692846FFF74DFE63693344FB -S315080033F86361236A226993422DD99B1B23626378EA -S31508003408002B45D1B5F8503015FA83F3227803EB2B -S315080034180213B3F80C24C2F30902A3F80C243E2EAF -S315080034281DD9710916F01F0F00D10139B3F80C24FC -S3150800343892B2890289B20A4342F40042A3F80C24DC -S3150800344828E0B5F8502015FA82F202EB0313B2B257 -S31508003458A3F80424C4E7002222621E46CFE74EB921 -S31508003468B3F80C246FEA42426FEA524292B2A3F8C2 -S315080034780C240FE0720816F0010F00D00132B3F8D9 -S315080034880C1489B2920292B20A43A3F80C2401E0FA -S31508003498012B06D0B3B2628961692846FFF7F3FDA6 -S315080034A88EE6B5F8503015FA83F3227803EB021343 -S315080034B8B2B2A3F80C24EDE7217835F8212092B2A8 -S315080034C822F4E24222F0700242F4004242F08002FC -S315080034D825F82120B5F8502015FA82F2217802EB52 -S315080034E801129BB2A2F80434228961692846FFF7BB -S315080034F8CAFD65E64EB9B3F80C246FEA42426FEA8C -S31508003508524292B2A3F80C2416E0720816F0010F7C -S3150800351800D00132B3F80C1489B2920292B20A4367 -S31508003528A3F80C2408E0B5F8502015FA82F202EB45 -S315080035380313B2B2A3F80C24B3B2628961692846A8 -S31508003548FFF7A1FD3CE6B2BBB5F8502015FA82F2A2 -S3150800355802EB0313B3F80424C2F30902A3F80424FC -S315080035683E2E0FD9710916F01F0F00D10139B3F88D -S31508003578042492B2890289B20A4342F40042A3F8A3 -S31508003588042421E04EB9B3F804246FEA42426FEAEC -S31508003598524292B2A3F8042416E0720816F0010FF4 -S315080035A800D00132B3F8041489B2920292B20A43DF -S315080035B8A3F8042408E0B5F8502015FA82F202EBBD -S315080035C80313B2B2A3F80424B3B222896169284660 -S315080035D8FFF759FDF4E500228A611A4679E54AB9E2 -S315080035E8B3F80C246FEA42426FEA524292B2A3F841 -S315080035F80C248DE5510812F0010F00D00131B3F8FB -S315080036080C2492B2890289B21143A3F80C147FE5F7 -S31508003618CB78022B4DD0012B40F02F81896923697D -S31508003628994240F2E680C91AA161F2B9B5F8502064 -S3150800363815FA82F2217802EB0112B2F80414C1F3E2 -S315080036480901A2F804143E2B40F2D780580913F052 -S315080036581F0F00D10138B2F8041489B2800280B26B -S31508003668014341F40041A2F804146278002A40F0A4 -S31508003678F680B5F8502015FA82F2217802EB011285 -S31508003688B2F80C14C1F30901A2F80C143E2B40F247 -S31508003698CD80590913F01F0F00D10139B2F80C343F -S315080036A89BB2890289B20B4343F40043A2F80C344F -S315080036B82EE5F2B9B0F8503010FA83F30A7803EB1E -S315080036C80213B3F80424C2F30902A3F804240A6906 -S315080036D83E2A31D9510912F01F0F00D10139B3F822 -S315080036E8042492B2890289B20A4342F40042A3F832 -S315080036F804246378002B51D1B5F8503015FA83F3B2 -S31508003708227803EB0213B3F80C24C2F30902A3F8D0 -S315080037180C2422693E2A28D9510912F01F0F00D114 -S315080037280139B3F80C2492B2890289B20A4342F4E1 -S315080037380042A3F80C2433E04AB9B3F804246FEA24 -S3150800374842426FEA524292B2A3F80424D1E75108DA -S3150800375812F0010F00D00131B3F8042490B28A029E -S3150800376892B20243A3F80424C3E74AB9B3F80C246F -S315080037786FEA42426FEA524292B2A3F80C240FE06B -S31508003788510812F0010F00D00131B3F80C2490B299 -S315080037988A0292B20243A3F80C2401E0012B1DD039 -S315080037A8E369002B3FF4B4AC227835F8221044F2CA -S315080037B8400303EA01008B4302D000287FF4A8AC33 -S315080037C835F822309BB223F4E04323F0700343F420 -S315080037D8004343F0C00325F8223099E4B5F8503081 -S315080037E815FA83F3227803EB0213228AA3F80C242A -S315080037F8D6E70023A3610B4617E74BB9B2F80414BA -S315080038086FEA41416FEA514189B2A2F804142CE7DC -S31508003818590813F0010F00D00131B2F8040480B238 -S31508003828890289B20143A2F804141EE74BB9B2F813 -S315080038380C346FEA43436FEA53439BB2A2F80C343D -S3150800384866E4590813F0010F00D00131B2F80C34B8 -S3150800385898B28B029BB20343A2F80C3458E4012AA7 -S315080038687FF456ACB5F8502015FA82F2217802EBA7 -S3150800387801129BB2A2F80C344AE4012059E410B4A8 -S315080038885C0800EB420000F5806007E030F8042B7E -S315080038980A70C2F307224A700231013C002CF5D19E -S315080038A813F0010F01D003880B705DF8044B7047BD -S315080038B8014B1860704700BF0000002098B108B592 -S315080038C80346D0F8B40210B10020C3F8B40209B10F -S315080038D8C3F8B012012183F89C121A70184601F031 -S315080038E80BFF002008BD0220704710B504460123C7 -S315080038F880F89C32D0F8B4325B680179984720463C -S3150800390801F052FF204601F03FFF002010BD19B113 -S31508003918C0F8B412002070470220704708B501F0B5 -S315080039283BFF002008BD08B5D0F8B4322BB11B6898 -S31508003938984700B908BD0220FCE70220FAE708B54F -S31508003948D0F8B4325B689847002008BD38B50446F5 -S3150800395800F52A75284600F035F90123C4F894328B -S31508003968B4F8AE32C4F8983294F8A81201F01F03D6 -S31508003978012B0ED0022B11D02BB101F08001204665 -S3150800398801F02DFF03E02946204600F0C9FA002079 -S3150800399838BD2946204600F0F7FAF8E729462046B2 -S315080039A800F022FBF3E738B504460D4691BB1346EB -S315080039B8D0F89422032A03D0052A24D0084633E0EF -S315080039C8D0F86011D0F8642191420DD9891AC0F847 -S315080039D860118A4206D98AB21946204600F027FCA1 -S315080039E8284621E092B2F7E7D0F8B4321B691BB132 -S315080039F890F89C22032A04D0204600F020FC28468A -S31508003A0812E09847F8E70021C0F8941201F0E7FE9B -S31508003A18284609E0D0F8B4329B6933B190F89C225D -S31508003A28032A04D19847002038BD0220FCE7022063 -S31508003A38FAE738B504460D46002953D11346D0F897 -S31508003A489422022A0CD0042A00D01AB980212046CA -S31508003A5801F0C5FE94F8A032012B3ED0284638BDA1 -S31508003A68016A426A91421BD8C169B1FBF2F302FBAB -S31508003A7813132BB98A4203D8D0F8983299421CD323 -S31508003A88D4F8B432DB681BB194F89C22032A21D0F7 -S31508003A988021204601F0A3FE204600F0DBFBD9E78B -S31508003AA88A1A026292B2194600F0B9FB00231A462E -S31508003AB81946204601F0CAFECCE70022114600F056 -S31508003AC8AEFB0021C4F898120B460A46204601F0B8 -S31508003AD8BDFEBFE720469847DAE7002384F8A032F8 -S31508003AE82846BCE7D0F8B4325B6933B190F89C2213 -S31508003AF8032A04D198470020B1E70220AFE702203D -S31508003B08ADE770B5044640230022114601F054FE7D -S31508003B180125C4F858514026C4F864613346002282 -S31508003B288021204601F048FEA561666284F89C5209 -S31508003B380023C4F894326360C4F8A432D4F8B832BF -S31508003B482BB1D4F8B4325B68002120469847002088 -S31508003B5870BD01740020704790F89C3280F89D3239 -S31508003B68042380F89C320020704790F89C32042B76 -S31508003B7801D00020704790F89D3280F89C32F8E70B -S31508003B8808B590F89C32032B01D0002008BDD0F860 -S31508003B98B432DB69002BF8D09847F6E703460020CD -S31508003BA802E00130C0B201331A78002AF9D1704709 -S31508003BB808B54B88012B00D008BDC0F8A43200F020 -S31508003BC83EFBF9E70B7803704B7843708B78CA7815 -S31508003BD803EB022343800B794A7903EB022383809C -S31508003BE88B79CA7903EB0223C380704710B504465C -S31508003BF8802101F0F4FD0021204601F0F0FD10BDFA -S31508003C0830B583B005460C460023ADF806304A8819 -S31508003C18130A013B062B00F2A480DFE803F0041818 -S31508003C282CA2A2869300D0F8B0321B680DF10601C3 -S31508003C38007C9847BDF806201AB1E388002B40F0A7 -S31508003C489480E388002B00F09A8003B030BD037C8B -S31508003C5843B9D0F8B4329B6A0DF106009847022397 -S31508003C684370E7E7D0F8B432DB6A0DF106009847E7 -S31508003C7802234370DEE7D2B2052A52D8DFE802F0FB -S31508003C8803101D2A3744D0F8B0325B6823B10DF10A -S31508003C980601007C9847CDE72146FFF7A7FFD4E73A -S31508003CA8D0F8B0329B6823B10DF10601007C98471D -S31508003CB8C0E72146FFF79AFFC7E7D0F8B032DB68B6 -S31508003CC823B10DF10601007C9847B3E72146FFF7B3 -S31508003CD88DFFBAE7D0F8B0321B6923B10DF106019A -S31508003CE8007C9847A6E72146FFF780FFADE7D0F89E -S31508003CF8B0325B6923B10DF10601007C984799E754 -S31508003D082146FFF773FFA0E7D0F8B0329B6923B1C5 -S31508003D180DF10601007C98478CE72146FFF766FFF8 -S31508003D2893E72146FFF762FF8FE7037C33B9D0F89C -S31508003D38B4325B6B0DF1060098477BE72146FFF71F -S31508003D4855FF82E7037C43B9D0F8B4321B6B0DF1F3 -S31508003D5806009847072343706CE72146FFF746FF96 -S31508003D6873E72146FFF742FF6FE79A4228BF1A46CC -S31508003D78ADF806200146284600F044FA61E72846C9 -S31508003D8800F05DFA61E738B504468B88F3B9CB8845 -S31508003D98E3B94B887F2B19D803F07F0590F89C3236 -S31508003DA8032B0CD080F89E52294601F03FFD204689 -S31508003DB800F045FA35B1022384F89C3209E0FFF78A -S31508003DC815FF06E0012384F89C3202E02046FFF737 -S31508003DD80DFF38BD38B504460D468978284B197045 -S31508003DE801290ED890F89C32022B0ED0032B21D02D -S31508003DF82946FFF7FBFE224B19782046FFF79FFD59 -S31508003E0802E02946FFF7F2FE38BD81B14160032377 -S31508003E1880F89C32FFF787FD022803D0204600F079 -S31508003E280EFAF1E729462046FFF7E0FEECE700F030 -S31508003E3806FAE9E789B1436899421DD0D9B2FFF76E -S31508003E487EFD0F4B197861602046FFF76CFD022846 -S31508003E580DD0204600F0F3F9D6E7022380F89C3205 -S31508003E684160FFF76CFD204600F0E9F9CCE72946E2 -S31508003E782046FFF7BBFEC7E700F0E1F9C4E700BF35 -S31508003E880004002008B5CB88012B0AD190F89C328B -S31508003E98022B09D9032B09D10122011D00F0B2F919 -S31508003EA801E0FFF7A3FE08BD5BB213B9FFF79EFE54 -S31508003EB8F9E70146002341F8083F012200F0A2F974 -S31508003EC8F1E708B590F89C32013B022B12D8CB884B -S31508003ED8022B0CD10123C360D0F8A4320BB10323FB -S31508003EE8C360022200F10C0100F08CF908BDFFF747 -S31508003EF87DFEFBE7FFF77AFEF8E708B590F89C32EF -S31508003F08013B022B09D84B88012B00D008BD00239A -S31508003F18C0F8A43200F093F9F8E7FFF767FEF5E76B -S31508003F2808B50B7803F06003202B05D0402B03D087 -S31508003F3843B1FFF75BFE03E0D0F8B4329B689847B5 -S31508003F48002008BD4B78092B1BD8DFE803F01117AA -S31508003F581A141A08051A0E0BFFF752FEF0E7FFF7B0 -S31508003F6812FFEDE7FFF736FFEAE7FFF78BFFE7E70C -S31508003F78FFF7A7FFE4E7FFF71BFEE1E7FFF7BDFF3B -S31508003F88DEE7FFF733FEDBE738B505460C460B7860 -S31508003F9803F06003202B06D0402B04D01BB1FFF793 -S31508003FA825FE002038BD95F89C32013B022B16D811 -S31508003FB82379012B0ED8D5F8B4329B6821462846B2 -S31508003FC89847E388002BECD10028EAD1284600F068 -S31508003FD836F9E6E721462846FFF708FEE1E72146CF -S31508003FE82846FFF703FEDCE770B505468B880C788C -S31508003FF804F06004202C07D0DAB2402C04D05CB157 -S31508004008FFF7F4FD002405E0D5F8B4329B68284686 -S3150800401898470024204670BD202C09D04E78012EDA -S3150800402833D0032E0AD0002E55D0FFF7DFFDF1E76F -S31508004038D0F8B4329B6898470446EBE790F89C3268 -S31508004048022B04D0032B11D0FFF7D0FDE2E70AB103 -S31508004058802A03D12846FFF7C9FDDBE7114601F098 -S31508004068BEFB8021284601F0BAFBD3E74B8823B963 -S315080040781AB1802A01D0CB881BB1284600F0DFF890 -S31508004088C8E7114601F0ABFBF7E790F89C32022B1C -S3150800409804D0032B11D0FFF7A9FDBBE70AB1802A84 -S315080040A803D12846FFF7A2FDB4E7114601F097FBAE -S315080040B88021284601F093FBACE74B88002BA9D151 -S315080040C812F07F0F03D1284600F0B9F8A2E7114687 -S315080040D801F08DFBF7E790F89C02022806D0032822 -S315080040E829D02846FFF782FD344693E70AB1802A85 -S315080040F813D113F0800F15D102F07F0202EB82026A -S31508004108910001F5A8712944043100230B600222A5 -S31508004118284600F077F834467CE72846FFF766FD18 -S31508004128344677E702F07F0202EB820291001031EB -S3150800413829440431E9E75BB2002B1FDB02F00F00C4 -S3150800414800EB800005EB8000D0F8580120B3002B5F -S3150800415827DB02F07F0303EB83039C0004F5A874AE -S315080041682C4404340AB1802A24D10023236002226D -S315080041782146284600F046F834464BE702F00F0079 -S3150800418800EB800005EB800080690028DFD128460F -S31508004198FFF72CFD34463DE72846FFF727FD34464A -S315080041A838E702F07F0303EB83039C0010342C44A2 -S315080041B80434D7E71146284601F021FB10B101233C -S315080041C82360D4E700232360D1E7D0B170B50D4644 -S315080041D816460446FFF7E2FC431C5B009BB2338095 -S315080041E82B7003236B70022307E001345A1CD2B2E2 -S315080041F8E8540233DBB20021A95420780028F4D108 -S3150800420870BD704708B513460222C0F89422C361E8 -S3150800421803620A46002101F011FB002008BD08B513 -S3150800422813460A46002101F009FB002008BD08B517 -S3150800423813460A46002101F009FB002008BD08B507 -S315080042480423C0F8943200231A46194601F0F6FAF0 -S31508004258002008BD08B50523C0F8943200231A467D -S31508004268194601F0F3FA002008BD72B6704762B61F -S31508004278704700002DE9F04184B004460D461746FC -S3150800428898466846FEF704FA0299174BA3FB0131CC -S315080042988909002301E00133DBB2112B1FD8134A21 -S315080042A812F8130002EB4302527800EB020C0CFBDF -S315080042B8044CB1FBFCFE0CFB1E16002EEBD11FFAB4 -S315080042C88EFCA5F800C00CF1FF3C1FFA8CFCBCF567 -S315080042D8806FE0D2387088F80020012000E00020BE -S315080042E804B0BDE8F08100BFD34D62103C59000800 -S315080042F870B58CB00023ADF82E308DF82D308DF8BA -S315080043082C300BAB0DF12D020DF12E014FF4FA707E -S31508004318FFF7B0FF002835D01D4C1E4B236000253B -S3150800432825766576A5760126E67625776577A560E6 -S31508004338E5609DF82D30013B1B0423619DF82C3060 -S31508004348013B1B056361BDF82E3063602046FCF708 -S3150800435839FA0695079508964CF6E04301930295AF -S315080043684FF6E073039304230493059509960E23E1 -S315080043780A9301A92046FCF7CBFA2046FCF74BFB23 -S315080043880CB070BDAF21044800F0F6FCC4E700BFC6 -S3150800439804040020006400400059000810B588B0DD -S315080043A8024640F2E17302930023049305930691AB -S315080043B801AB02A90B48FCF75CFB08B108B010BDB5 -S315080043C800F0E4FA00F1320401990648FCF7C6FB46 -S315080043D80028F3D000F0D8FD00F0D8FAA042F3D9A7 -S315080043E8ECE700BF0404002010B588B003460C4665 -S315080043F801AA00210848FCF7C4FB50B9019A40F203 -S3150800440867639A4206D1039B23B9059B237001204B -S3150800441800E0002008B010BD0404002008B5FFF726 -S3150800442824FF08BD10B500F0C5F900B910BDFBF7A3 -S31508004438CFFE0028FAD000F053FDFCF76DF900F01E -S315080044487DFA00F0BBF920F0604020F07F00044BAD -S31508004458986000F0B3F94468FFF709FFA047E5E755 -S3150800446800ED00E070B50D46044606E015F8013B78 -S3150800447804F8013B00F088FD3246531E9EB2002A16 -S31508004488F4D170BD08B5C1F3080353B903688B4264 -S3150800449809D040F8041B4FF40072FFF7E3FF012028 -S315080044A808BD0020FCE70120FAE72DE9F041074698 -S315080044B8FCF7A6FC00247F2C15D83E6806EB840872 -S315080044C807EB84035D6800F05FFD2A460023414632 -S315080044D80220FCF7E9FC804640B956F82430AB427E -S315080044E806D10134E7E74FF0010801E04FF000086C -S315080044F8FCF7A0FC4046BDE8F081000038B50D463B -S315080045080C4B984211D004460B4B994207D1094CDB -S3150800451829462046FFF7B6FF48B1204638BDFFF7BB -S31508004528C4FF0028F4D10024F7E7044CF0E7002478 -S31508004538F3E700BF30060020008000082C0400209E -S315080045482DE9F04106460C4617461D4621F4FF7824 -S3150800455828F001080368B3F1FF3F07D033684345DD -S315080045680AD13168641A3444043414E04146FFF722 -S3150800457889FF0028F2D11FE041463046FFF7BEFF03 -S3150800458806460028EDD1002016E017F8013B04F886 -S31508004598013B013D0FD000F0F7FC311D611AB1F55A -S315080045A8007FF2D308F500713046FFF7A7FF0646E5 -S315080045B820B1041DE9E70120BDE8F0810020FBE7EA -S315080045C84FF0FF33024A1360024A1360704700BF70 -S315080045D82C040020300600200B4601F1FF3C124946 -S315080045E8091A8C4519D81149884218D310B51918CB -S315080045F801390D4CA14214D820F4FF7121F00101AC -S315080046080A4CA14204D001460948FFF799FF10BD94 -S3150800461801460848FFF794FFF9E70020704700208D -S3150800462870470020F3E700BFFFFF03080080000873 -S315080046382C0400203006002030B585B000230393EB -S315080046484A1E1F4B1B1A9A4231D820F4FF6323F0DF -S3150800465807031C4A93422ED30A18013A184CA24259 -S315080046682BD8C01A0844C0F3CF25C0F30A0008B1EE -S315080046780135ADB200240094019301230293FCF797 -S31508004688BFFBA5420DD900F07FFC03A96846FCF7D5 -S315080046987FFC50B9019B03F5006301930134A4B26A -S315080046A8EFE70124FCF7C6FB02E00024FAE700243A -S315080046B8204605B030BD0024FAE70024F8E700BF15 -S315080046C8FFFF03080080000800B583B000230193A4 -S315080046D8134B1B68B3F1FF3F20D0114A5368019367 -S315080046E891680B440193D1680B44019311690B44F3 -S315080046F8019351690B44019391690B440193D2695B -S3150800470813440193DB4301930133019301AA04215E -S315080047180448FFF761FF03B05DF804FB0120FAE7D8 -S3150800472830060020888100080A4B1A68596811441F -S315080047389A681144DA6811441A6911445A69114485 -S315080047489A690A44D3F88831D34201D000207047C1 -S31508004758012070470080000808B50C4B1B68B3F1A8 -S31508004768FF3F06D10A4B1B68B3F1FF3F07D101206B -S3150800477808BD0648FFF799FE0028F3D1F8E704486C -S31508004788FFF793FE0028F3D00120F1E73006002052 -S315080047982C040020004870470080000808B5FFF779 -S315080047A80FFF08BD08B5FFF717FF08BD08B5FFF7DF -S315080047B843FF08BD08B5FFF7B7FF08BD08B5FFF7FB -S315080047C8E9FF08BD08B5FFF77FFF00B908BDFFF781 -S315080047D8C3FFFBE7054BDB6913F0200F04D0034B37 -S315080047E89B8C0370012070470020704700480040E2 -S315080047F810B5094B188500F0C9F800F10A04064BEC -S31508004808DB6913F0800F05D100F0BEFB00F0BEF897 -S31508004818A042F4D910BD00BF0048004010B588B0C2 -S315080048280C4C236823F0010323604FF4614301937A -S3150800483800230293039304930C2205920693079385 -S3150800484801A92046FEF726F8236843F001032360EA -S3150800485808B010BD0048004070B506460D468129C7 -S3150800486804D82846FFF7C4FF00240BE06F21074841 -S3150800487800F082FAF5E700F087FB305DFFF7B8FF2E -S315080048880134A4B2ABB2A342F5D870BD605900088A -S3150800489870B5254B1C78BCB92448FFF79BFF01283F -S315080048A801D0204670BD214B1B78013BDBB2802B1B -S315080048B8F7D800F06BF81E4B18601E4B00221A70CA -S315080048C8194B01221A70ECE706460D46194B1B7858 -S315080048D8013316481844FFF77DFF0446012815D109 -S315080048E8144B1A780132D2B21A70104B1B789A42B6 -S315080048F801D00024D5E710493046FFF7B3FD0A4B27 -S3150800490800221A700B4B1B782B70CAE700F03EF88A -S31508004918074B1B68C833984203D90024024B1C70FE -S31508004928BFE70024BDE700BFB6080020340800200A -S31508004938B8080020B7080020350800204FF0E02303 -S3150800494800221A615A619A617047000008B5FFF794 -S31508004958F5FF4FF0E023044A5A6100229A610521BF -S315080049681961024B1A6008BD3F190100BC080020EE -S315080049784FF0E0231B6913F4803F03D0024A1368FB -S3150800498801331360704700BFBC08002008B5FFF75D -S31508004998EFFF014B186808BDBC08002008B5FFF7EB -S315080049A8F5FF08BD094B03F11801002232B19A74C4 -S315080049B800225A61064B054A1A6070479A7459616B -S315080049C8183318310132D2B2F0E700BF00090020C7 -S315080049D8300900200A4B1B6883B110B4084A5C6981 -S315080049E8146019749860D86000225A7418600139DE -S315080049F808445860987C5DF8044B7047FF20704758 -S31508004A083009002038B504460D46012824D804EB99 -S31508004A184403164A02EBC3035A7C1B7C9A4221D0EC -S31508004A2804EB4403114A02EBC303DA6815705A7C8F -S31508004A3801325A74DA680132DA605B689A4213D925 -S31508004A480A4B04EB440253F8322004EB440403EB04 -S31508004A58C404E260012008E04FF4DE71044800F05F -S31508004A688BF9D4E7002000E0012038BD00090020B2 -S31508004A78A059000808B50146024B1878FFF7C2FF87 -S31508004A8808BD00BF3409002038B504460D4601287C -S31508004A9822D804EB4403144A02EBC303587C10B328 -S31508004AA804EB440302EBC3039A6812782A705A7C0B -S31508004AB8013A5A749A6801329A605B689A4211D91F -S31508004AC8094B04EB440253F8322004EB440403EB85 -S31508004AD8C404A260012006E04FF4EF71034800F011 -S31508004AE84BF9D6E7012038BD00090020A05900086F -S31508004AF808B50146024B1878FFF7C6FF08BD00BF80 -S31508004B087809002010B50446012806D804EB4404A1 -S31508004B18054800EBC404607C10BD4FF4FF710348D8 -S31508004B2800F02AF9F2E700BF00090020A05900089A -S31508004B3838B5FFF737FF194C4021601CFFF74AFFC5 -S31508004B482070174D4021681CFFF744FF287023780A -S31508004B58FF2B18D0FF2816D0124C002212492046DF -S31508004B68FEF7ACFE11492046FEF7D1FE2046FEF7B1 -S31508004B78D5FED4F8C002FDF7B2F900F029F9B0F568 -S31508004B88FA6F05D338BD8421094800F0F5F8E3E73C -S31508004B984FF4FA6000F016F9F4E700BF340900206C -S31508004BA878090020BC0900207400002010000020A5 -S31508004BB8A059000810B5044CD4F8C002FDF7A3F9AB -S31508004BC82046FEF792FE10BDBC09002070B50646C1 -S31508004BD80D463F2906D82846FFF74CFF012806D177 -S31508004BE800240BE0B5210D4800F0C6F8F3E7B92113 -S31508004BF80A4800F0C1F8F3E70134A4B2ABB2A342FD -S31508004C080BD900F0C1F9305DFFF734FF0128F3D05E -S31508004C18C221024800F0B0F8EEE770BDA0590008B6 -S31508004C2870B506460D461F4BD3F8C002FDF794F932 -S31508004C381D4B1C789CB91D48FFF75AFF012801D05F -S31508004C48204670BD194B1B78013BDBB23E2BF7D8C3 -S31508004C58154B01221A70164B00221A70F0E7144BEE -S31508004C681B78013311481844FFF742FF0446012808 -S31508004C7801D00024E4E70E4B1A780132D2B21A7032 -S31508004C880A4B1B789A4201D00024D9E709493046CD -S31508004C98FFF7E8FB044B00221A70054B1B782B70AC -S31508004CA8CEE700BFBC090020C00C0020800C0020FD -S31508004CB8C10C0020810C002030B583B0144B18783D -S31508004CC8FFF720FF08B30546402800D940250024E9 -S31508004CD805E09DF807200F4B1A550134E4B2A542A2 -S31508004CE80DD90DF107010A4B1878FFF7CDFE0128F3 -S31508004CF8EFD04FF4A171084800F03EF8E9E7ABB2E7 -S31508004D08044A8121054800F099FD03B030BD00BF6B -S31508004D1834090020C0080020A0590008BC09002052 -S31508004D2870B5044600F0EAFB064621460F4800F02F -S31508004D3895FD85B2002401E00134A4B2AC420CD238 -S31508004D48315D0B4B1878FFF75DFE0128F4D04FF458 -S31508004D58B271084800F010F8EEE700F0CFFB0246FB -S31508004D6840230121014800F071FD70BDBC090020EF -S31508004D7878090020A059000808B500F005F9FCE7ED -S31508004D8808B500F0F7F8012803D00B4B1B78012B60 -S31508004D9800D008BDFFF7FAFD084B1B68084A1268D9 -S31508004DA8134403F5FA739842F3D3034B00221A7097 -S31508004DB8FFF738FBEDE700BFC80C0020C40C00203D -S31508004DC8CC0C0020014B1860704700BFC40C0020AB -S31508004DD8014B1868704700BFC40C002008B5054B7E -S31508004DE81B78012B00D008BDFFF7D0FD024B1860D1 -S31508004DF8F9E700BFC80C0020CC0C002008B5044B06 -S31508004E0801221A70FFF7EAFFFFF7BAFF08BD00BFCD -S31508004E18C80C002008B5FFF701FB00F0B1F8FFF74A -S31508004E2895FDFFF7BBFC00F00DF8FFF7E7FF08BD97 -S31508004E3808B500F0A9F8FFF79BFD00F017F8FFF78B -S31508004E489FFF08BD10B500F04FFAFFF751FA064C58 -S31508004E5801232370FFF7E2FC00232370FFF768FE9F -S31508004E680223237010BD00BF0C00002000B583B0D4 -S31508004E780DF107011848FFF7B7FA012810D00DF108 -S31508004E8807011548FFF704FD012812D00DF107019F -S31508004E981148FFF7C5FE012814D003B05DF804FBD6 -S31508004EA80E4B01221A709DF807100B4800F03EFABF -S31508004EB8E5E70A4B00221A709DF80710064800F025 -S31508004EC835FAE3E7054B02221A709DF807100248DF -S31508004ED800F02CFAE1E700BFD00C00200C000020F7 -S31508004EE808B5FFF767FE08BD38B504460D460E4BEC -S31508004EF81B78012B09D00C4B1B7853B10A4B1B782E -S31508004F08022B0BD000F00AFA38BDC9B2FFF746FAE9 -S31508004F18F1E7E9B22046FFF79FFCEFE7E9B220463A -S31508004F28FFF754FEEEE700BF0C000020074B1B787E -S31508004F38022B07D0032B07D0012B01D081207047FD -S31508004F48082070473F207047002070470C00002053 -S31508004F58074B1B78022B07D0032B07D0012B01D050 -S31508004F6881207047082070473F2070470020704707 -S31508004F780C00002008B500F0C9F900B1012008BDE9 -S31508004F8808B5FBF743F908BD08B5FBF744F908BDAA -S31508004F98024B002283F88220704700BF540D002078 -S31508004FA8034BFE221A7058700222A3F8862070470F -S31508004FB8540D00200378427843EA0223827843EAAC -S31508004FC80243C07843EA006070470870C0F30723B5 -S31508004FD84B70C0F307438B70000EC870704700000B -S31508004FE810B5064C002384F88130FFF7D1FFFF235C -S31508004FF823700123A4F8863010BD00BF540D002085 -S31508005008074BFF221A7000225A7093F8821099707B -S31508005018DA701A715A710622A3F88620704700BFFB -S31508005028540D002008B50020FFF7BAFF08BD000098 -S3150800503810B5094CFF232370084BC4F888300023A1 -S315080050486370A370E370211D0720FFF7BEFF0823CE -S31508005058A4F8863010BD00BF540D0020DC5900089E -S3150800506810B5064CFF2323700430FFF7A3FFC4F8D6 -S3150800507888000123A4F8863010BD00BF540D00200F -S3150800508808B53120FFF78CFF08BD000038B5084C75 -S31508005098FF23237000256570A570FFF747FFE070AA -S315080050A825716571A5710723A4F8863038BD00BF38 -S315080050B8540D002038B5FFF76BFF0F4C012584F80F -S315080050C88150FF2323700023637010226270A37037 -S315080050D8FFF72CFFE070FFF73BFF2071FFF738FF5B -S315080050E8C0F307206071A571E5710823A4F8863016 -S315080050F8FFF754FB38BD00BF540D002038B50446E9 -S31508005108FFF714FF6278904212D90B4DD5F888102C -S31508005118681CFFF7A7F9FF232B706278D5F8883043 -S315080051281344C5F8883063780133A5F8863038BD46 -S315080051382220FFF735FFFAE7540D002038B5044654 -S31508005148FFF7F4FE6378984217D9201DFFF732FF58 -S3150800515801460C4DC5F888006278681CFFF782F985 -S31508005168FF232B706278D5F888301344C5F8883041 -S3150800517863780133A5F8863038BD2220FFF710FF7B -S31508005188FAE700BF540D0020F8B50546174600246F -S3150800519806E015F8013B1C44E4B2FFF7F5FE314674 -S315080051A84E1E0029F5D13C600120F8BD30B583B004 -S315080051B8002501950B4CFF2323700430FFF7FAFEF0 -S315080051C8014601AAD4F88800FFF7DEFF6070211DA2 -S315080051D80198FFF7FAFEA570E5700823A4F886304B -S315080051E803B030BD540D002038B504460E4BD3F82D -S315080051F88850FFF79BFE621C411E2846FFF7D2FA25 -S3150800520870B1094CFF232370FFF790FE0138D4F8D4 -S3150800521888300344C4F888300123A4F8863038BD9A -S315080052283120FFF7BDFEFAE7540D002010B50446F5 -S31508005238FFF77CFE01386378984216DD134BFF2288 -S315080052481A700122A3F88620617891B1A21C0F4B27 -S31508005258D3F88800FFF7A6FA98B161780B4AD2F80E -S3150800526888300B44C2F8883010BD2220FFF798FE14 -S31508005278FAE7FFF7A7FA0028F6D13120FFF790FEDC -S31508005288F2E73120FFF78CFEEEE700BF540D002049 -S3150800529810B50B4BD3F888400430FFF78BFE014650 -S315080052A82046FFF783FA30B1054BFF221A70012210 -S315080052B8A3F8862010BD3120FFF772FEFAE700BF73 -S315080052C8540D002008B5FFF7ADF8034BFF221A70F6 -S315080052D80122A3F8862008BD540D002008B589B216 -S315080052E8FFF702FE08BD0000074B002283F881205D -S315080052F8C3F8882083F88420A3F8862083F88320B7 -S3150800530883F88220704700BF540D0020024B93F89B -S31508005318810000B101207047540D0020024B00227D -S3150800532883F88420704700BF540D002008B5037819 -S31508005338FF2B24D0354A92F88120012A2BD1C93B64 -S31508005348352B53D8DFE803F04052524F52524C439C -S31508005358494652525252525252525252525252522C -S315080053685252525252525252525252525252525207 -S315080053785252312B282E5252523452373A3DFFF7A1 -S3150800538899FE224B93F88430012B33D01F4BB3F97F -S315080053988610002932DC08BDFFF7B0FEF1E7FFF7F3 -S315080053A8CDFEEEE7FFF75CFEEBE7FFF7FFFEE8E763 -S315080053B8FFF73EFEE5E7FFF735FEE2E7FFF720FED3 -S315080053C8DFE7FFF70DFEDCE7FFF70EFFD9E7FFF784 -S315080053D82DFFD6E7FFF75AFED3E7FFF759FFD0E7C1 -S315080053E8FFF770FFCDE7FFF74BFECAE72020FFF768 -S315080053F8D7FDC6E71020FFF7D3FDC7E718460123F0 -S3150800540880F88430FFF76AFFC5E700BF540D00200F -S315080054182023038000487047480000200A23038099 -S31508005428004870476800002008B590F89C32032B9E -S3150800543801D0002008BDFFF73FFCFAE708B5FFF7DB -S315080054483BFC002008BD08B50846FFF769FC0020A4 -S3150800545808BD000008B50B7813F0600F06D14B7825 -S315080054680A2B14D00B2B17D0062B01D0002008BD09 -S315080054784B881B0A212B04D00B491722FEF7C2FEBC -S31508005488F4E7CA88172A28BF17220849F6E7012227 -S315080054980749FEF7B7FEE9E78B7813B9044A13609C -S315080054A8E4E7FEF7A3FBE1E7510000205A000020D5 -S315080054B8200E002010B50446812100F088F9012144 -S315080054C8204600F084F9002010BD000010B50446F7 -S315080054D840230222812100F06FF94023022201218C -S315080054E8204600F069F94023034A0121204600F0C6 -S315080054F8ADF9002010BD00BFE00D00200048704738 -S31508005508E00D002012230B80004870479000002009 -S3150800551804230B8000487047A40000200023934208 -S315080055281ED200B510E00CF1370C01F813C00001C3 -S315080055384FEA430C0CF1010C4FF0000E01F80CE091 -S315080055480133DBB2934209D24FEA107CB0F1204FFF -S31508005558E9D20CF1300C01F813C0E8E75DF804FB52 -S315080055687047000038B50B4BD3F8AC07D3F8B047EB -S31508005578D3F8B437C01800D138BD074D0822A91C7E -S31508005588FFF7CCFF042205F112012046FFF7C6FFF4 -S31508005598F2E700BF00F0FF1FA800002008B51A238D -S315080055A80B80FFF7DFFF014808BD00BFA8000020F1 -S315080055B808B50A4628B905490548FEF706FE034808 -S315080055C808BD02490248FEF700FEF8E7240E002047 -S315080055D8E459000810B50A46034C21460348FEF765 -S315080055E8F4FD204610BD00BF240E0020F859000817 -S315080055F808B50A4628B905490548FEF7E6FD0348E9 -S3150800560808BD02490248FEF7E0FDF8E7240E002027 -S31508005618085A000808B50A4628B905490548FEF78C -S31508005628D4FD034808BD02490248FEF7CEFDF8E74F -S31508005638240E0020105A0008022805D8DFE800F0D2 -S3150800564805040200012070470220704708B500F5D6 -S315080056582C71D0F8E802FEF779F908BD08B501EB10 -S31508005668810300EBC303D3F87C21D0F8E802FEF7E0 -S315080056789AF908BD08B501EB810300EBC303DA6B99 -S31508005688D0F8E802FEF7D5F908BD08B5D0F8E8025B -S31508005698FEF776FA08BD000010B504468368022BA3 -S315080056A809D10121D4F8E802FEF753FAD4F8E8023A -S315080056B8FEF727FA10BD8E210148FFF75DFBF0E7D4 -S315080056C8285A000810B50446FAF79EFDD4F8E802E9 -S315080056D8FEF742FAA36923B1024A136943F006039F -S315080056E8136110BD00ED00E008B5D0F8E802FEF732 -S315080056F83CFAFAF78AFD08BD10B504461F48C0F8F3 -S31508005708E842C4F8C0021E4B03600823436002231C -S3150800571883600361002383610362FBF785FE30BB60 -S31508005728182300221146D4F8C002FCF7D6FD5823E0 -S3150800573800228021D4F8C002FCF7CFFDC02300223E -S315080057488121D4F8C002FCF7C8FD4FF488730022FB -S315080057580121D4F8C002FCF7C0FD4FF4807300227B -S315080057688221D4F8C002FCF7B8FD002010BD40F22B -S315080057781B110448FFF700FBD2E700BFEC00002026 -S31508005788005C0040285A000808B5D0F8C002FBF7A4 -S31508005798B0FEFFF751FF08BD08B5D0F8C002FBF701 -S315080057A8BFFEFFF749FF08BD08B5D0F8C002FBF7EA -S315080057B8D0FEFFF741FF08BD08B594461A4663466A -S315080057C8D0F8C002FCF761FCFFF736FF08BD08B53C -S315080057D8D0F8C002FCF797FCFFF72EFF08BD08B5FE -S315080057E8D0F8C002FCF709FDFFF726FF08BD08B583 -S315080057F8D0F8C002FCF736FDFFF71EFF08BDD0F843 -S31508005808C03211F0800F08D101F07F0101EB810148 -S3150800581803EBC10191F86A01704701F07F01013174 -S3150800582801EB810103EBC1018878704708B5D0F808 -S31508005838C002FCF77DFBFFF7FFFE08BD08B5D0F8E8 -S31508005848C002FCF7B8FCFFF7F7FE08BD08B5D0F8A4 -S31508005858C002FCF78AFCFFF7EFFE08BD08B5D0F8CA -S31508005868C002FCF79FFC08BD08B5012903D0002033 -S31508005878FAF7BCFC08BD0120FAF7B8FCFAE70000FD -S3150800588870B50D4D0D4C641BA4100026A64209D10F -S315080058980B4D0C4C00F018F8641BA4100026A64201 -S315080058A805D170BD55F8043B98470136EEE755F81B -S315080058B8043B98470136F2E74C5A00084C5A000848 -S315080058C84C5A0008505A0008F8B500BFF8BC08BC7E -S315080058D89E467047F8B500BFF8BC08BC9E46704798 -S315080058E8000000000000000001020304060708097A -S315080058F80000000001020304433A2F576F726B2F0A -S31508005908736F6674776172652F4F70656E424C5473 -S315080059182F5461726765742F536F757263652F41CB -S31508005928524D434D345F53544D333246332F6361DA -S315080059386E2E630005020602060307030803090319 -S3150800594809040A040B040C040C050D050E050F05BD -S315080059580F06100610071008433A2F576F726B2F59 -S31508005968736F6674776172652F4F70656E424C5413 -S315080059782F5461726765742F536F757263652F416B -S31508005988524D434D345F53544D333246332F727359 -S315080059983233322E63000000433A2F576F726B2F4B -S315080059A8736F6674776172652F4F70656E424C54D3 -S315080059B82F5461726765742F536F757263652F412B -S315080059C8524D434D345F53544D333246332F757316 -S315080059D8622E63004F70656E424C540057696E55C7 -S315080059E853422042756C6B204465766963650000EE -S315080059F84F70656E424C542055736572000000005E -S31508005A0844656661756C740057696E555342204241 -S31508005A18756C6B20496E7465726661636500000073 -S31508005A282E2E2F5553425F4445564943452F5461F8 -S31508005A38726765742F757362645F636F6E662E632B -S30908005A48000000004C -S30908005A4CAD01000892 -S30908005A5089010008B2 -S31508005A5400127A0001000000100000000400000093 -S31508005A64D5540008BD5400085D5400080000000021 -S31508005A7400000000455400084F540008315400083B -S31508005A84000000000000000000000000195400088F -S31508005A94000000002554000809022000010100C086 -S31508005AA4320904000002FF000000070581024000D5 -S31508005AB4FF070501024000FF0A0610010000004026 -S31508005AC4010000000D55000819550008DD550008A9 -S31508005AD4B9550008A5550008F95500081D560008CB -S31508005AE41201100100000040501DAC6000010102C3 -S31508005AF403010000040309041A030000000000005F -S31508005B040000000000000000000000000000000083 -S30908005B14000000007F -S705080006CD1F +S31508002D08404242F0800223F82420097869BB33F848 +S31508002D18212092B222F4804222F0700282F44052B4 +S31508002D2842F4004242F0800223F82120A2E04CB97E +S31508002D38B2F80C446FEA44446FEA5444A4B2A2F8C1 +S31508002D480C44CFE74FEA540C14F0010F01D00CF1EC +S31508002D58010CB2F80C44A4B24FEA8C2C1FFA8CFC6E +S31508002D6844EA0C0CA2F80CC4BCE733F8212092B24A +S31508002D7822F4804222F0700282F4005242F40042A1 +S31508002D8842F0800223F8212074E0CA78022A72D019 +S31508002D980C7833F8242092B222F4E24222F0700228 +S31508002DA842F4004242F0800223F82420B3F8502067 +S31508002DB813FA82F291F800C002EB0C12B1F808C0B7 +S31508002DC84FEA5C0C4FEA4C0CA2F800C4B3F8502042 +S31508002DD813FA82F291F800C002EB0C12B1F80AC095 +S31508002DE84FEA5C0C4FEA4C0CA2F808C44A78002A49 +S31508002DF850D10C7833F8242012F4804F0CD033F8CD +S31508002E08242092B222F4E04222F0700242F44042B0 +S31508002E1842F0800223F824200C7833F8242012F094 +S31508002E28400F0CD033F8242092B222F4E04222F064 +S31508002E38700242F4004242F0C00223F8242091F8B6 +S31508002E4800C033F82C2092B222F4804222F0700295 +S31508002E5882F4405248F28004224323F82C20097849 +S31508002E6833F8212092B222F4E04222F040022243AB +S31508002E7823F8212010BD0C7833F8242092B222F4C6 +S31508002E88E04222F0700242F4014242F0800223F83E +S31508002E9824208BE70C7833F8242012F4804F0CD0C2 +S31508002EA833F8242092B222F4E04222F0700242F467 +S31508002EB8404242F0800223F824200C7833F8242074 +S31508002EC812F0400F0CD033F8242092B222F4E042D4 +S31508002ED822F0700242F4004242F0C00223F824208D +S31508002EE8CA78012A1ED00C7833F8242092B222F424 +S31508002EF8E04222F0400282F0200242F4004242F008 +S31508002F08800223F82420097833F8212092B222F483 +S31508002F18804222F0700242F4004242F0800223F80E +S31508002F282120A7E70C7833F8242092B222F4E0424D +S31508002F3822F0400242F4004242F0800223F824209C +S31508002F48E1E70B7B002B46D14B7813B30A7830F8A8 +S31508002F58223013F0400F0CD030F822309BB223F4FD +S31508002F68E04323F0700343F4004343F0C00320F81A +S31508002F7822300A7830F822309BB223F4E04323F053 +S31508002F88400343F4004343F0800320F8223000202E +S31508002F9870470A7830F8223013F4804F0CD030F88E +S31508002FA822309BB223F4E04323F0700343F44043F2 +S31508002FB843F0800320F822300A7830F822309BB292 +S31508002FC823F4804323F0700343F4004343F080035B +S31508002FD820F82230DBE74B78002B4ED10A7830F8F8 +S31508002FE8223013F4804F0CD030F822309BB223F4E9 +S31508002FF8E04323F0700343F4404343F0800320F88A +S3150800300822300A7830F8223013F0400F0CD030F806 +S3150800301822309BB223F4E04323F0700343F40043C1 +S3150800302843F0C00320F822300A7830F822309BB2E1 +S3150800303823F4E04323F0700343F4004343F0C0034A +S3150800304820F822300B7830F8232092B222F48042F6 +S3150800305822F0700248F2800C42EA0C0220F823207B +S315080030680A7830F822309BB223F4E04323F0400371 +S3150800307843EA0C0320F8223089E70A7830F8223028 +S3150800308813F4804F0CD030F822309BB223F4E04377 +S3150800309823F0700343F4404343F0800320F82230BA +S315080030A80A7830F8223013F0400F0CD030F8223066 +S315080030B89BB223F4E04323F0700343F4004343F040 +S315080030C8C00320F822300A7830F822309BB223F45D +S315080030D8E04323F0700343F4404343F0800320F8A9 +S315080030E822300B7830F8232092B222F4E04222F0FC +S315080030F8400248F2800C42EA0C0220F823200A789B +S3150800310830F822309BB223F4804323F0700343EA55 +S315080031180C0320F822303AE74B788BB10A7830F856 +S3150800312822309BB223F4E04323F0400383F01003D4 +S3150800313843F4004343F0800320F822300020704708 +S315080031480A7830F822309BB223F4804323F07003C0 +S3150800315883F4805343F4004343F0800320F8223075 +S31508003168ECE70B7B002B4BD14B7833B30A7830F856 +S31508003178223013F0400F0CD030F822309BB223F4DB +S31508003188E04323F0700343F4004343F0C00320F8F8 +S315080031982230CB78012B33D00A7830F822309BB20C +S315080031A823F4E04323F0400383F0200343F4004369 +S315080031B843F0800320F8223022E00A7830F82230DB +S315080031C813F4804F0CD030F822309BB223F4E04336 +S315080031D823F0700343F4404343F0800320F8223079 +S315080031E80A7830F822309BB223F4804323F0700320 +S315080031F883F4405343F4004343F0800320F8223015 +S315080032080020704703460122A0F840200020A3F8B2 +S3150800321844000322A3F84020704711B98023A0F878 +S315080032284C30002070470020704700207047B0F8DF +S31508003238440080B2704710B45C1C640800EB420274 +S3150800324802F5806207E00B78487843EA002322F8FB +S31508003258043B0231013C002CF5D15DF8044B70475C +S3150800326870B505460C464A78012A3BD00B7B002BDD +S3150800327840F0A6828B690A69934240F284829B1AB7 +S315080032888B61B5F8503015FA83F3217803EB0113EF +S31508003298B3F80C14C1F30901A3F80C143E2A40F23A +S315080032A87682510912F01F0F00D10139B3F80C24A0 +S315080032B892B2890289B20A4342F40042A3F80C245E +S315080032C8227835F822309BB223F4804323F0700322 +S315080032D883F4405343F4004343F0800325F822302F +S315080032E8002070BD8E6909698E4200D90E46237B77 +S315080032F873B3E378022B4DD0236A9B1B236223788A +S3150800330835F8231011F0400F00F0F581002A40F037 +S31508003318E281B5F8502015FA82F202EB0313B3F8E6 +S315080033280C24C2F30902A3F80C243E2E40F2BA81F3 +S31508003338710916F01F0F00D10139B3F80C2492B29F +S31508003348890289B20A4342F40042A3F80C24CBE165 +S31508003358B6B23346E28861692846FFF76CFFB5F8C6 +S31508003368503015FA83F3227803EB0213A3F80464A2 +S31508003378227835F822309BB223F4E04323F0400341 +S3150800338883F0300343F4004343F0800325F82230E2 +S315080033980020A6E7236A994280F06681227835F8E4 +S315080033A822309BB223F4E04323F0700343F401432D +S315080033B843F0800325F82230236A9B1B236223786F +S315080033C835F8232012F0400F00F0A7806278B2BBC8 +S315080033D8B5F8502015FA82F202EB0313B3F80C2459 +S315080033E8C2F30902A3F80C243E2E0FD9710916F068 +S315080033F81F0F00D10139B3F80C2492B2890289B299 +S315080034080A4342F40042A3F80C241AE04EB9B3F86A +S315080034180C246FEA42426FEA524292B2A3F80C248D +S315080034280FE0720816F0010F00D00132B3F80C1439 +S3150800343889B2920292B20A43A3F80C2401E0012A3F +S3150800344830D0B3B2628961692846FFF7F4FE63692A +S3150800345833446361236A226993422DD99B1B2362ED +S315080034686378002B45D1B5F8503015FA83F32278DE +S3150800347803EB0213B3F80424C2F30902A3F80424DD +S315080034883E2E1DD9710916F01F0F00D10139B3F860 +S31508003498042492B2890289B20A4342F40042A3F884 +S315080034A8042428E0B5F8502015FA82F202EB031333 +S315080034B8B2B2A3F80C24C4E7002222621E46CFE75C +S315080034C84EB9B3F804246FEA42426FEA524292B2FE +S315080034D8A3F804240FE0720816F0010F00D0013291 +S315080034E8B3F8041489B2920292B20A43A3F80424E0 +S315080034F801E0012B06D0B3B2228961692846FFF795 +S315080035089AFE35E7B5F8503015FA83F3227803EBB7 +S315080035180213B2B2A3F80424EDE76278B2BBB5F891 +S31508003528502015FA82F202EB0313B3F80424C2F307 +S315080035380902A3F804243E2E0FD9710916F01F0FA5 +S3150800354800D10139B3F8042492B2890289B20A4330 +S3150800355842F40042A3F804241AE04EB9B3F8042446 +S315080035686FEA42426FEA524292B2A3F804240FE085 +S31508003578720816F0010F00D00132B3F8041489B2A4 +S31508003588920292B20A43A3F8042401E0012A30D031 +S31508003598B3B2228961692846FFF74DFE6369334449 +S315080035A86361236A226993422DD99B1B2362637838 +S315080035B8002B45D1B5F8503015FA83F3227803EB7A +S315080035C80213B3F80C24C2F30902A3F80C243E2EFE +S315080035D81DD9710916F01F0F00D10139B3F80C244B +S315080035E892B2890289B20A4342F40042A3F80C242B +S315080035F828E0B5F8502015FA82F202EB0313B2B2A6 +S31508003608A3F80424C4E7002222621E46CFE74EB96F +S31508003618B3F80C246FEA42426FEA524292B2A3F810 +S315080036280C240FE0720816F0010F00D00132B3F827 +S315080036380C1489B2920292B20A43A3F80C2401E048 +S31508003648012B06D0B3B2628961692846FFF7F3FDF4 +S315080036588EE6B5F8503015FA83F3227803EB021391 +S31508003668B2B2A3F80C24EDE7217835F8212092B2F6 +S3150800367822F4E24222F0700242F4004242F080024A +S3150800368825F82120B5F8502015FA82F2217802EBA0 +S3150800369801129BB2A2F80434228961692846FFF709 +S315080036A8CAFD65E64EB9B3F80C246FEA42426FEADA +S315080036B8524292B2A3F80C2416E0720816F0010FCB +S315080036C800D00132B3F80C1489B2920292B20A43B6 +S315080036D8A3F80C2408E0B5F8502015FA82F202EB94 +S315080036E80313B2B2A3F80C24B3B2628961692846F7 +S315080036F8FFF7A1FD3CE6B2BBB5F8502015FA82F2F1 +S3150800370802EB0313B3F80424C2F30902A3F804244A +S315080037183E2E0FD9710916F01F0F00D10139B3F8DB +S31508003728042492B2890289B20A4342F40042A3F8F1 +S31508003738042421E04EB9B3F804246FEA42426FEA3A +S31508003748524292B2A3F8042416E0720816F0010F42 +S3150800375800D00132B3F8041489B2920292B20A432D +S31508003768A3F8042408E0B5F8502015FA82F202EB0B +S315080037780313B2B2A3F80424B3B2228961692846AE +S31508003788FFF759FDF4E500228A611A4679E54AB930 +S31508003798B3F80C246FEA42426FEA524292B2A3F88F +S315080037A80C248DE5510812F0010F00D00131B3F849 +S315080037B80C2492B2890289B21143A3F80C147FE546 +S315080037C8CB78022B4DD0012B40F02F8189692369CC +S315080037D8994240F2E680C91AA161F2B9B5F85020B3 +S315080037E815FA82F2217802EB0112B2F80414C1F331 +S315080037F80901A2F804143E2B40F2D780580913F0A1 +S315080038081F0F00D10138B2F8041489B2800280B2B9 +S31508003818014341F40041A2F804146278002A40F0F2 +S31508003828F680B5F8502015FA82F2217802EB0112D3 +S31508003838B2F80C14C1F30901A2F80C143E2B40F295 +S31508003848CD80590913F01F0F00D10139B2F80C348D +S315080038589BB2890289B20B4343F40043A2F80C349D +S315080038682EE5F2B9B0F8503010FA83F30A7803EB6C +S315080038780213B3F80424C2F30902A3F804240A6954 +S315080038883E2A31D9510912F01F0F00D10139B3F870 +S31508003898042492B2890289B20A4342F40042A3F880 +S315080038A804246378002B51D1B5F8503015FA83F300 +S315080038B8227803EB0213B3F80C24C2F30902A3F81F +S315080038C80C2422693E2A28D9510912F01F0F00D163 +S315080038D80139B3F80C2492B2890289B20A4342F430 +S315080038E80042A3F80C2433E04AB9B3F804246FEA73 +S315080038F842426FEA524292B2A3F80424D1E7510829 +S3150800390812F0010F00D00131B3F8042490B28A02EC +S3150800391892B20243A3F80424C3E74AB9B3F80C24BD +S315080039286FEA42426FEA524292B2A3F80C240FE0B9 +S31508003938510812F0010F00D00131B3F80C2490B2E7 +S315080039488A0292B20243A3F80C2401E0012B1DD087 +S31508003958E369002B3FF4B4AC227835F8221044F218 +S31508003968400303EA01008B4302D000287FF4A8AC81 +S3150800397835F822309BB223F4E04323F0700343F46E +S31508003988004343F0C00325F8223099E4B5F85030CF +S3150800399815FA83F3227803EB0213228AA3F80C2478 +S315080039A8D6E70023A3610B4617E74BB9B2F8041408 +S315080039B86FEA41416FEA514189B2A2F804142CE72B +S315080039C8590813F0010F00D00131B2F8040480B287 +S315080039D8890289B20143A2F804141EE74BB9B2F862 +S315080039E80C346FEA43436FEA53439BB2A2F80C348C +S315080039F866E4590813F0010F00D00131B2F80C3407 +S31508003A0898B28B029BB20343A2F80C3458E4012AF5 +S31508003A187FF456ACB5F8502015FA82F2217802EBF5 +S31508003A2801129BB2A2F80C344AE4012059E410B4F6 +S31508003A385C0800EB420000F5806007E030F8042BCC +S31508003A480A70C2F307224A700231013C002CF5D1EC +S31508003A5813F0010F01D003880B705DF8044B70470B +S31508003A68014B1860704700BF00000020024A13780F +S31508003A7843F00103137070470C00002010B50D4B76 +S31508003A88187301F09BFC00F132040A4B9B6813F08B +S31508003A98010F07D101F09AFF01F090FCA042F4D972 +S31508003AA8012300E000231BB9024B187BC0B200E0D3 +S31508003AB8002010BD0038004008B5034B04229A615F +S31508003AC8FF20FFF7DBFF08BD000C004810B50446C9 +S31508003AD8FF20FFF7D3FF207010BD38B501F06EFC44 +S31508003AE800F5FA75FF20FFF7C9FF044601F06EFFD7 +S31508003AF8FF2C03D001F062FCA842F3D3FF2C14BFB5 +S31508003B080020012038BD000010B5084B04229A622F +S31508003B18FF20FFF7B3FFFFF7E0FF10B101242046A7 +S31508003B2810BD0446FFF7C8FFF9E700BF000C0048B8 +S31508003B3838B504460D46FFF7D0FF00B938BD284604 +S31508003B48FFF79CFFFD2D19D04FF400752078FFF775 +S31508003B5895FF60780234FFF791FF023DF6D1FF2002 +S31508003B68FFF78CFFFF20FFF789FFFF20FFF786FF87 +S31508003B7800F01F03052B03D10120DFE70120DDE74D +S31508003B880020DBE738B504460D4610F0800F33D120 +S31508003B98FFF792FFFFF7B8FF002845D044F040002A +S31508003BA8FFF76CFF280EFFF769FFC5F30740FFF715 +S31508003BB865FFC5F30720FFF761FFE8B2FFF75EFF69 +S31508003BC854B30120082C29D0FFF758FF0C2C27D00E +S31508003BD80A24FF20FFF752FF144D287001F0F6FE5D +S31508003BE82B7813F0800F03D0631E13F0FF04F0D16F +S31508003BF80E4B1878C0B238BD00F07F040021372074 +S31508003C08FFF7C0FF094B18701B78DBB2012BBFD929 +S31508003C18064B1878C0B2EEE79520D3E78720D3E796 +S31508003C28FF20FFF72BFFD3E7FF20E4E72C06002049 +S31508003C38F8B505460E4601F0C1FB00F16407FF20FA +S31508003C48FFF71CFF044601F0C1FEFF2C03D101F063 +S31508003C58B5FBB842F3D3FE2C13D16C1C2846FFF7E4 +S31508003C6835FF20460235FFF731FF01F0AFFE023E69 +S31508003C78F3D1FF20FFF702FFFF20FFF7FFFE012021 +S31508003C88F8BD0020FCE70000F0B595B02822002111 +S31508003C980DEB020004F056FE0024049405940694DD +S31508003CA8079408940994344B5A6942F480225A6155 +S31508003CB85A6902F480220392039A5A6942F48012D6 +S31508003CC85A615A6902F480120292029ADA6942F42F +S31508003CD88042DA61DB6903F480430193019B042778 +S31508003CE804970123059303250695244E04A930460F +S31508003CF8FEF714FCB7614FF4604304930223059357 +S31508003D080695079408940523099304A91C48FEF701 +S31508003D1805FC0A944FF482730B934FF4E0630C93F3 +S31508003D280D940E944FF400730F9330231093119447 +S31508003D38129407231393134C0AA92046FEF73CFE50 +S31508003D48636823F010036360636823F008036360FD +S31508003D58636843F480536360236843F04003236031 +S31508003D680A2404E0FF20FFF789FE013CE4B2002C90 +S31508003D78F8D115B0F0BD00BF00100240000C00488D +S31508003D88000400480038004010B58AB0164C23686D +S31508003D9823F040032360002300934FF482720192B4 +S31508003DA84FF4E0620292039304934FF4007205926B +S31508003DB80693079308930723099369462046FEF74F +S31508003DC8FBFD636823F010036360636823F0080348 +S31508003DD86360636843F480536360236843F0400371 +S31508003DE823600AB010BD00BF00380040002840F024 +S31508003DF89C80F0B583B04E4B1B7813F0020404D0B0 +S31508003E084B4B1878C0B203B0F0BDFFF73DFF494BDE +S31508003E1804229A6200210846FFF7B4FE05460128DF +S31508003E2810D0454B1C60FFF747FE002C7AD0404A55 +S31508003E38137803F0FE031370FFF7A6FF3C4B1878B8 +S31508003E48C0B2E0E701F0BAFA00F57A764FF4D57110 +S31508003E580820FFF797FE01283FD1254609E0FF20ED +S31508003E68FFF70CFE05F108036B4403F8040C01354B +S31508003E78EDB2032DF3D99DF80630012BD1D19DF863 +S31508003E880730AA2BCDD101F099FAB04206D24FF0E5 +S31508003E988041A920FFF776FE0028F4D101F08EFAB2 +S31508003EA8B042BED200213A20FFF76CFE054600282C +S31508003EB8B7D1032D0AD8FF20FFF7E0FD05F108035F +S31508003EC86B4403F8040C0135EDB2F2E79DF80430AB +S31508003ED813F0400F24D00C24A3E70021A920FFF7EC +S31508003EE851FE01280CD92F4601F068FAB0420AD2C9 +S31508003EF800212846FFF746FE28B101F067FDF3E7DB +S31508003F080227A925F0E701F059FAB04289D24FF4F9 +S31508003F1800711020FFF736FE002882D13C4680E75C +S31508003F2804247EE7FFF7A2FD88E70120704700BF53 +S31508003F380C000020000C00482806002018B9034B7E +S31508003F481878C0B270470120704700BF0C000020DF +S31508003F5800283BD138B50D461C46002B38D01E4BD9 +S31508003F681B7813F0010F35D11C4B1B6813F0080F8B +S31508003F7800D15202012C1AD011461220FFF702FE70 +S31508003F8878B94FF400712846FFF752FE28B105F5AF +S31508003F98007501F01BFD013CF3D100210C20FFF749 +S31508003FA8F1FDFFF789FD201E18BF012038BD11460F +S31508003FB81120FFF7E7FD0028F3D14FF400712846D2 +S31508003FC8FFF736FE0028ECD00024EAE704207047FD +S31508003FD80420EBE70320E9E70C0000202806002068 +S31508003FE800284AD170B50D4616461C46002B46D001 +S31508003FF8264B1B7813F0010F43D1244B1B7813F07B +S31508004008040F40D1224B1B6813F0080F00D1560243 +S31508004018012C1DD013F0060F28D131461920FFF7B9 +S31508004028B1FD78B9FC212846FFF782FD28B105F5C8 +S31508004038007501F0CBFC013CF4D1FD210020FFF707 +S3150800404877FDC0B1FFF738FD201E18BF012070BDE7 +S3150800405831461820FFF796FD0028F3D1FE21284699 +S31508004068FFF766FD0028EDD00024EBE721469720E8 +S31508004078FFF788FDD1E70124E4E704207047042008 +S31508004088E5E70320E3E70220E1E700BF0C0000208C +S315080040982806002070B584B0002840F01F810D4618 +S315080040A81646904B1C7814F0010440F019810E2925 +S315080040B800F20881DFE811F00F00160006015A0021 +S315080040C8060106010601060106010601B500B90042 +S315080040D8C900D800ED00FFF717FD002840F0F88062 +S315080040E80124F0E000210920FFF74CFD044608B139 +S315080040F82C46E8E010216846FFF79AFD002800F0EC +S31508004108E9809DF800309B09012B1FD09DF80520F2 +S3150800411802F00F029DF80A3002EBD3129DF8093017 +S315080041285B0003F006031A449DF808109DF807304B +S315080041389B0003EB91139DF80610890201F4406170 +S315080041480B440133073A93403360BCE09DF80930C5 +S315080041589DF8082003EB02239DF80720120402F4B1 +S315080041687C12134401339B023360ACE05E4B1B6838 +S3150800417813F0040F20D000218D20FFF703FD08B1A6 +S315080041880124A0E0FF20FFF779FC10216846FFF715 +S315080041984FFD78B9012496E0FF20FFF76FFC013C34 +S315080041A8E4B2002CF8D19DF80A301A091023934076 +S315080041B8336088E03024F4E700210920FFF7E2FCA1 +S315080041C8044608B101247EE010216846FFF730FD51 +S315080041D8002800F08180444B1B6813F0020F10D0AA +S315080041E89DF80A305B0003F07E039DF80B2003EB6D +S315080041F8D21301339DF80D209209013A9340336092 +S3150800420861E09DF80A30C3F384029DF80B10CB00D1 +S3150800421803F0180303EB5113013302FB033333602E +S3150800422851E0314B1B6813704DE000210920FFF758 +S31508004238A9FC044608B1012445E010213046FFF7D9 +S31508004248F7FC00283FD101243DE000210A20FFF7AA +S3150800425899FC044608B1012435E010213046FFF7D9 +S31508004268E7FC80BB01242EE000213A20FFF78AFCF0 +S31508004278044660B1012426E0FF20FFF7FFFB7055CE +S3150800428801F0A4FB0135EDB2032DF5D91BE005466F +S31508004298FAE7154B1B6813F0040F01D1012412E045 +S315080042A800218D20FFF76EFC044608B101240AE0B8 +S315080042B8FF20FFF7E3FB40213046FFF7B9FC10B9AA +S315080042C8012400E00424FFF7F7FB204604B070BD7C +S315080042D82C46F8E72C46F6E70124F4E70424F4E725 +S315080042E80324F2E70C0000202806002098B108B538 +S315080042F80346D0F8B40210B10020C3F8B40209B1D5 +S31508004308C3F8B012012183F89C121A70184604F0F3 +S3150800431831FA002008BD0220704710B5044601236B +S3150800432880F89C32D0F8B4325B6801799847204601 +S3150800433804F078FA204604F065FA002010BD19B191 +S31508004348C0F8B412002070470220704708B504F078 +S3150800435861FA002008BD08B5D0F8B4322BB11B683D +S31508004368984700B908BD0220FCE70220FAE708B515 +S31508004378D0F8B4325B689847002008BD38B50446BB +S3150800438800F52A75284600F035F90123C4F8943251 +S31508004398B4F8AE32C4F8983294F8A81201F01F039C +S315080043A8012B0ED0022B11D02BB101F0800120462B +S315080043B804F053FA03E02946204600F0C9FA00201B +S315080043C838BD2946204600F0F7FAF8E72946204678 +S315080043D800F022FBF3E738B504460D4691BB1346B1 +S315080043E8D0F89422032A03D0052A24D0084633E0B5 +S315080043F8D0F86011D0F8642191420DD9891AC0F80D +S3150800440860118A4206D98AB21946204600F027FC66 +S31508004418284621E092B2F7E7D0F8B4321B691BB1F7 +S3150800442890F89C22032A04D0204600F020FC28464F +S3150800443812E09847F8E70021C0F8941204F00DFA3C +S31508004448284609E0D0F8B4329B6933B190F89C2223 +S31508004458032A04D19847002038BD0220FCE7022029 +S31508004468FAE738B504460D46002953D11346D0F85D +S315080044789422022A0CD0042A00D01AB98021204690 +S3150800448804F0EBF994F8A032012B3ED0284638BD43 +S31508004498016A426A91421BD8C169B1FBF2F302FB71 +S315080044A813132BB98A4203D8D0F8983299421CD3E9 +S315080044B8D4F8B432DB681BB194F89C22032A21D0BD +S315080044C88021204604F0C9F9204600F0DBFBD9E72D +S315080044D88A1A026292B2194600F0B9FB00231A46F4 +S315080044E81946204604F0F0F9CCE70022114600F0F8 +S315080044F8AEFB0021C4F898120B460A46204604F07B +S31508004508E3F9BFE720469847DAE7002384F8A0329C +S315080045182846BCE7D0F8B4325B6933B190F89C22D8 +S31508004528032A04D198470020B1E70220AFE7022002 +S31508004538ADE770B5044640230022114604F07AF91F +S315080045480125C4F858514026C4F864613346002248 +S315080045588021204604F06EF9A561666284F89C52AB +S315080045680023C4F894326360C4F8A432D4F8B83285 +S315080045782BB1D4F8B4325B6800212046984700204E +S3150800458870BD01740020704790F89C3280F89D32FF +S31508004598042380F89C320020704790F89C32042B3C +S315080045A801D00020704790F89D3280F89C32F8E7D1 +S315080045B808B590F89C32032B01D0002008BDD0F826 +S315080045C8B432DB69002BF8D09847F6E70346002093 +S315080045D802E00130C0B201331A78002AF9D17047CF +S315080045E808B54B88012B00D008BDC0F8A43200F0E6 +S315080045F83EFBF9E70B7803704B7843708B78CA78DB +S3150800460803EB022343800B794A7903EB0223838061 +S315080046188B79CA7903EB0223C380704710B5044621 +S31508004628802104F01AF90021204604F016F910BD75 +S3150800463830B583B005460C460023ADF806304A88DF +S31508004648130A013B062B00F2A480DFE803F00418DE +S315080046582CA2A2869300D0F8B0321B680DF1060189 +S31508004668007C9847BDF806201AB1E388002B40F06D +S315080046789480E388002B00F09A8003B030BD037C51 +S3150800468843B9D0F8B4329B6A0DF10600984702235D +S315080046984370E7E7D0F8B432DB6A0DF106009847AD +S315080046A802234370DEE7D2B2052A52D8DFE802F0C1 +S315080046B803101D2A3744D0F8B0325B6823B10DF1D0 +S315080046C80601007C9847CDE72146FFF7A7FFD4E700 +S315080046D8D0F8B0329B6823B10DF10601007C9847E3 +S315080046E8C0E72146FFF79AFFC7E7D0F8B032DB687C +S315080046F823B10DF10601007C9847B3E72146FFF779 +S315080047088DFFBAE7D0F8B0321B6923B10DF106015F +S31508004718007C9847A6E72146FFF780FFADE7D0F863 +S31508004728B0325B6923B10DF10601007C984799E719 +S315080047382146FFF773FFA0E7D0F8B0329B6923B18B +S315080047480DF10601007C98478CE72146FFF766FFBE +S3150800475893E72146FFF762FF8FE7037C33B9D0F862 +S31508004768B4325B6B0DF1060098477BE72146FFF7E5 +S3150800477855FF82E7037C43B9D0F8B4321B6B0DF1B9 +S3150800478806009847072343706CE72146FFF746FF5C +S3150800479873E72146FFF742FF6FE79A4228BF1A4692 +S315080047A8ADF806200146284600F044FA61E728468F +S315080047B800F05DFA61E738B504468B88F3B9CB880B +S315080047C8E3B94B887F2B19D803F07F0590F89C32FC +S315080047D8032B0CD080F89E52294604F065F820462B +S315080047E800F045FA35B1022384F89C3209E0FFF750 +S315080047F815FF06E0012384F89C3202E02046FFF7FD +S315080048080DFF38BD38B504460D468978284B19700A +S3150800481801290ED890F89C32022B0ED0032B21D0F2 +S315080048282946FFF7FBFE224B19782046FFF79FFD1E +S3150800483802E02946FFF7F2FE38BD81B1416003233D +S3150800484880F89C32FFF787FD022803D0204600F03F +S315080048580EFAF1E729462046FFF7E0FEECE700F0F6 +S3150800486806FAE9E789B1436899421DD0D9B2FFF734 +S315080048787EFD0F4B197861602046FFF76CFD02280C +S315080048880DD0204600F0F3F9D6E7022380F89C32CB +S315080048984160FFF76CFD204600F0E9F9CCE72946A8 +S315080048A82046FFF7BBFEC7E700F0E1F9C4E700BFFB +S315080048B82D06002008B5CB88012B0AD190F89C3222 +S315080048C8022B09D9032B09D10122011D00F0B2F9DF +S315080048D801E0FFF7A3FE08BD5BB213B9FFF79EFE1A +S315080048E8F9E70146002341F8083F012200F0A2F93A +S315080048F8F1E708B590F89C32013B022B12D8CB8811 +S31508004908022B0CD10123C360D0F8A4320BB10323C0 +S31508004918C360022200F10C0100F08CF908BDFFF70C +S315080049287DFEFBE7FFF77AFEF8E708B590F89C32B4 +S31508004938013B022B09D84B88012B00D008BD002360 +S31508004948C0F8A43200F093F9F8E7FFF767FEF5E731 +S3150800495808B50B7803F06003202B05D0402B03D04D +S3150800496843B1FFF75BFE03E0D0F8B4329B6898477B +S31508004978002008BD4B78092B1BD8DFE803F0111770 +S315080049881A141A08051A0E0BFFF752FEF0E7FFF776 +S3150800499812FFEDE7FFF736FFEAE7FFF78BFFE7E7D2 +S315080049A8FFF7A7FFE4E7FFF71BFEE1E7FFF7BDFF01 +S315080049B8DEE7FFF733FEDBE738B505460C460B7826 +S315080049C803F06003202B06D0402B04D01BB1FFF759 +S315080049D825FE002038BD95F89C32013B022B16D8D7 +S315080049E82379012B0ED8D5F8B4329B682146284678 +S315080049F89847E388002BECD10028EAD1284600F02E +S31508004A0836F9E6E721462846FFF708FEE1E7214694 +S31508004A182846FFF703FEDCE770B505468B880C7851 +S31508004A2804F06004202C07D0DAB2402C04D05CB11C +S31508004A38FFF7F4FD002405E0D5F8B4329B6828464C +S31508004A4898470024204670BD202C09D04E78012EA0 +S31508004A5833D0032E0AD0002E55D0FFF7DFFDF1E735 +S31508004A68D0F8B4329B6898470446EBE790F89C322E +S31508004A78022B04D0032B11D0FFF7D0FDE2E70AB1C9 +S31508004A88802A03D12846FFF7C9FDDBE7114603F05C +S31508004A98E4FE8021284603F0E0FED3E74B8823B9D5 +S31508004AA81AB1802A01D0CB881BB1284600F0DFF856 +S31508004AB8C8E7114603F0D1FEF7E790F89C32022BB7 +S31508004AC804D0032B11D0FFF7A9FDBBE70AB1802A4A +S31508004AD803D12846FFF7A2FDB4E7114603F0BDFE49 +S31508004AE88021284603F0B9FEACE74B88002BA9D1EC +S31508004AF812F07F0F03D1284600F0B9F8A2E711464D +S31508004B0803F0B3FEF7E790F89C02022806D00328BC +S31508004B1829D02846FFF782FD344693E70AB1802A4A +S31508004B2813D113F0800F15D102F07F0202EB82022F +S31508004B38910001F5A8712944043100230B6002226B +S31508004B48284600F077F834467CE72846FFF766FDDE +S31508004B58344677E702F07F0202EB820291001031B1 +S31508004B6829440431E9E75BB2002B1FDB02F00F008A +S31508004B7800EB800005EB8000D0F8580120B3002B25 +S31508004B8827DB02F07F0303EB83039C0004F5A87474 +S31508004B982C4404340AB1802A24D100232360022233 +S31508004BA82146284600F046F834464BE702F00F003F +S31508004BB800EB800005EB800080690028DFD12846D5 +S31508004BC8FFF72CFD34463DE72846FFF727FD344610 +S31508004BD838E702F07F0303EB83039C0010342C4468 +S31508004BE80434D7E71146284603F047FE10B10123D7 +S31508004BF82360D4E700232360D1E7D0B170B50D460A +S31508004C0816460446FFF7E2FC431C5B009BB233805A +S31508004C182B7003236B70022307E001345A1CD2B2A7 +S31508004C28E8540233DBB20021A95420780028F4D1CD +S31508004C3870BD704708B513460222C0F89422C361AE +S31508004C4803620A46002103F037FE002008BD08B5AE +S31508004C5813460A46002103F02FFE002008BD08B5B2 +S31508004C6813460A46002103F02FFE002008BD08B5A2 +S31508004C780423C0F8943200231A46194603F01CFE8A +S31508004C88002008BD08B50523C0F8943200231A4643 +S31508004C98194603F019FE002008BD72B6704762B6B9 +S31508004CA8704700002DE9F04184B004460D461746C2 +S31508004CB898466846FDF77EFD0299174BA3FB013116 +S31508004CC88909002301E00133DBB2112B1FD8134AE7 +S31508004CD812F8130002EB4302527800EB020C0CFBA5 +S31508004CE8044CB1FBFCFE0CFB1E16002EEBD11FFA7A +S31508004CF88EFCA5F800C00CF1FF3C1FFA8CFCBCF52D +S31508004D08806FE0D2387088F80020012000E0002083 +S31508004D1804B0BDE8F08100BFD34D6210FC890008D5 +S31508004D2870B58CB00023ADF82E308DF82D308DF87F +S31508004D382C300BAB0DF12D020DF12E014FF4FA7044 +S31508004D48FFF7B0FF002835D01D4C1E4B2360002501 +S31508004D5825766576A5760126E67625776577A560AC +S31508004D68E5609DF82D30013B1B0423619DF82C3026 +S31508004D78013B1B056361BDF82E3063602046FBF7CF +S31508004D88B3FD0695079508964CF6E04301930295F8 +S31508004D984FF6E073039304230493059509960E23A7 +S31508004DA80A9301A92046FBF745FE2046FBF7C5FEF0 +S31508004DB80CB070BDAF21044800F0F6FCC4E700BF8C +S31508004DC83006002000640040C089000810B588B085 +S31508004DD8024640F2E1730293002304930593069171 +S31508004DE801AB02A90B48FBF7D6FE08B108B010BDFF +S31508004DF800F0E4FA00F1320401990648FBF740FF8F +S31508004E080028F3D000F0E2FD00F0D8FAA042F3D962 +S31508004E18ECE700BF3006002010B588B003460C46FC +S31508004E2801AA00210848FBF73EFF50B9019A40F24B +S31508004E3867639A4206D1039B23B9059B2370012011 +S31508004E4800E0002008B010BD3006002008B5FFF7BE +S31508004E5824FF08BD10B500F0C5F900B910BDFBF769 +S31508004E68B7F90028FAD000F05DFDFBF7E7FC00F07B +S31508004E787DFA00F0BBF920F0604020F07F00044B73 +S31508004E88986000F0B3F94468FFF709FFA047E5E71B +S31508004E9800ED00E070B50D46044606E015F8013B3E +S31508004EA804F8013B00F092FD3246531E9EB2002AD2 +S31508004EB8F4D170BD08B5C1F3080353B903688B422A +S31508004EC809D040F8041B4FF40072FFF7E3FF0120EE +S31508004ED808BD0020FCE70120FAE72DE9F04107465E +S31508004EE8FCF720F800247F2C15D83E6806EB8408C2 +S31508004EF807EB84035D6800F069FD2A4600234146EE +S31508004F080220FCF763F8804640B956F82430AB42CD +S31508004F1806D10134E7E74FF0010801E04FF0000831 +S31508004F28FCF71AF84046BDE8F081000038B50D468A +S31508004F380C4B984211D004460B4B994207D1094CA1 +S31508004F4829462046FFF7B6FF48B1204638BDFFF781 +S31508004F58C4FF0028F4D10024F7E7044CF0E700243E +S31508004F68F3E700BF5C08002000A0000858060020E8 +S31508004F782DE9F04106460C4617461D4621F4FF78EA +S31508004F8828F001080368B3F1FF3F07D033684345A3 +S31508004F980AD13168641A3444043414E04146FFF7E8 +S31508004FA889FF0028F2D11FE041463046FFF7BEFFC9 +S31508004FB806460028EDD1002016E017F8013B04F84C +S31508004FC8013B013D0FD000F001FD311D611AB1F515 +S31508004FD8007FF2D308F500713046FFF7A7FF0646AB +S31508004FE820B1041DE9E70120BDE8F0810020FBE7B0 +S31508004FF84FF0FF33024A1360024A1360704700BF36 +S31508005008580600205C0800200B4601F1FF3C1249AF +S31508005018091A8C4519D81149884218D310B5191890 +S3150800502801390D4CA14214D820F4FF7121F0010171 +S315080050380A4CA14204D001460948FFF799FF10BD5A +S3150800504801460848FFF794FFF9E700207047002053 +S3150800505870470020F3E700BFFFFF030800A0000819 +S31508005068580600205C08002030B585B00023039355 +S315080050784A1E1F4B1B1A9A4231D820F4FF6323F0A5 +S3150800508807031C4A93422ED30A18013A184CA2421F +S315080050982BD8C01A0844C0F3CF25C0F30A0008B1B4 +S315080050A80135ADB200240094019301230293FBF75E +S315080050B839FFA5420DD900F089FC03A96846FBF714 +S315080050C8F9FF50B9019B03F5006301930134A4B2B3 +S315080050D8EFE70124FBF740FF02E00024FAE7002483 +S315080050E8204605B030BD0024FAE70024F8E700BFDB +S315080050F8FFFF030800A0000800B583B0002301934A +S31508005108134B1B68B3F1FF3F20D0114A536801932C +S3150800511891680B440193D1680B44019311690B44B8 +S31508005128019351690B44019391690B440193D26920 +S3150800513813440193DB4301930133019301AA042124 +S315080051480448FFF761FF03B05DF804FB0120FAE79E +S315080051585C08002088A100080A4B1A685968114497 +S315080051689A681144DA6811441A6911445A6911444B +S315080051789A690A44D3F88831D34201D00020704787 +S315080051880120704700A0000808B50C4B1B68B3F14E +S31508005198FF3F06D10A4B1B68B3F1FF3F07D1012031 +S315080051A808BD0648FFF799FE0028F3D1F8E7044832 +S315080051B8FFF793FE0028F3D00120F1E75C080020EA +S315080051C8580600200048704700A0000808B5FFF7F1 +S315080051D80FFF08BD08B5FFF717FF08BD08B5FFF7A5 +S315080051E843FF08BD08B5FFF7B7FF08BD08B5FFF7C1 +S315080051F8E9FF08BD08B5FFF77FFF00B908BDFFF747 +S31508005208C3FFFBE7054BDB6913F0200F04D0034BFC +S315080052189B8C0370012070470020704700480040A7 +S3150800522810B5094B188500F0C9F800F10A04064BB1 +S31508005238DB6913F0800F05D100F0C8FB00F0BEF853 +S31508005248A042F4D910BD00BF0048004010B588B088 +S315080052580C4C236823F0010323604FF46143019340 +S3150800526800230293039304930C220592069307934B +S3150800527801A92046FDF7E6FB236843F001032360EE +S3150800528808B010BD0048004070B506460D4681298D +S3150800529804D82846FFF7C4FF00240BE06F21074807 +S315080052A800F082FAF5E700F091FB305DFFF7B8FFEA +S315080052B80134A4B2ABB2A342F5D870BD208A00085F +S315080052C870B5254B1C78BCB92448FFF79BFF012805 +S315080052D801D0204670BD214B1B78013BDBB2802BE1 +S315080052E8F7D800F06BF81E4B18601E4B00221A7090 +S315080052F8194B01221A70ECE706460D46194B1B781E +S31508005308013316481844FFF77DFF0446012815D1CE +S31508005318144B1A780132D2B21A70104B1B789A427B +S3150800532801D00024D5E710493046FFF7B3FD0A4BEC +S3150800533800221A700B4B1B782B70CAE700F03EF850 +S31508005348074B1B68C833984203D90024024B1C70C4 +S31508005358BFE70024BDE700BFE20A0020600A002074 +S31508005368E40A0020E30A0020610A00204FF0E0233F +S3150800537800221A615A619A617047000008B5FFF75A +S31508005388F5FF4FF0E023044A5A6100229A61052185 +S315080053981961024B1A6008BD3F190100E80A002086 +S315080053A84FF0E0231B6913F4803F03D0024A1368C1 +S315080053B801331360704700BFE80A002008B5FFF7F5 +S315080053C8EFFF014B186808BDE80A002008B5FFF783 +S315080053D8F5FF08BD094B03F11801002232B19A748A +S315080053E800225A61064B054A1A6070479A74596131 +S315080053F8183318310132D2B2F0E700BF2C0B00205F +S315080054085C0B00200A4B1B6883B110B4084A5C6918 +S31508005418146019749860D86000225A7418600139A3 +S3150800542808445860987C5DF8044B7047FF2070471D +S315080054385C0B002038B504460D46012824D804EB31 +S315080054484403164A02EBC3035A7C1B7C9A4221D0B2 +S3150800545804EB4403114A02EBC303DA6815705A7C55 +S3150800546801325A74DA680132DA605B689A4213D9EB +S315080054780A4B04EB440253F8322004EB440403EBCA +S31508005488C404E260012008E04FF4DE71044800F025 +S315080054988BF9D4E7002000E0012038BD2C0B00204A +S315080054A8608A000808B50146024B1878FFF7C2FF5C +S315080054B808BD00BF600B002038B504460D46012814 +S315080054C822D804EB4403144A02EBC303587C10B3EE +S315080054D804EB440302EBC3039A6812782A705A7CD1 +S315080054E8013A5A749A6801329A605B689A4211D9E5 +S315080054F8094B04EB440253F8322004EB440403EB4B +S31508005508C404A260012006E04FF4EF71034800F0D6 +S315080055184BF9D6E7012038BD2C0B0020608A000815 +S3150800552808B50146024B1878FFF7C6FF08BD00BF45 +S31508005538A40B002010B50446012806D804EB440439 +S31508005548054800EBC404607C10BD4FF4FF7103489E +S3150800555800F02AF9F2E700BF2C0B0020608A000841 +S3150800556838B5FFF737FF194C4021601CFFF74AFF8B +S315080055782070174D4021681CFFF744FF28702378D0 +S31508005588FF2B18D0FF2816D0124C002212492046A5 +S31508005598FEF7ACFE11492046FEF7D1FE2046FEF777 +S315080055A8D5FED4F8C002FCF72CFD00F02FF9B0F5AB +S315080055B8FA6F05D338BD8421094800F0F5F8E3E702 +S315080055C84FF4FA6000F01CF9F4E700BF600B0020FE +S315080055D8A40B0020E80B002074000020100000200F +S315080055E8608A000810B5044CD4F8C002FCF71DFD03 +S315080055F82046FEF792FE10BDE80B002070B5064659 +S315080056080D463F2906D82846FFF74CFF012806D13C +S3150800561800240BE0B5210D4800F0C6F8F3E7B921D8 +S315080056280A4800F0C1F8F3E70134A4B2ABB2A342C2 +S315080056380BD900F0CBF9305DFFF734FF0128F3D01A +S31508005648C221024800F0B0F8EEE770BD608A00088B +S3150800565870B506460D461F4BD3F8C002FCF70EFD7B +S315080056681D4B1C789CB91D48FFF75AFF012801D025 +S31508005678204670BD194B1B78013BDBB23E2BF7D889 +S31508005688154B01221A70164B00221A70F0E7144BB4 +S315080056981B78013311481844FFF742FF04460128CE +S315080056A801D00024E4E70E4B1A780132D2B21A70F8 +S315080056B80A4B1B789A4201D00024D9E70949304693 +S315080056C8FFF7E8FB044B00221A70054B1B782B7072 +S315080056D8CEE700BFE80B0020EC0E0020AC0E002039 +S315080056E8ED0E0020AD0E002030B583B0144B1878A7 +S315080056F8FFF720FF08B30546402800D940250024AF +S3150800570805E09DF807200F4B1A550134E4B2A54267 +S315080057180DD90DF107010A4B1878FFF7CDFE0128B8 +S31508005728EFD04FF4A171084800F03EF8E9E7ABB2AC +S31508005738044A8121054803F0BFF803B030BD00BF0D +S31508005748600B0020EC0A0020608A0008E80B00209D +S3150800575870B5044602F010FF064621460F4803F0C6 +S31508005768BBF885B2002401E00134A4B2AC420CD2DD +S31508005778315D0B4B1878FFF75DFE0128F4D04FF41E +S31508005788B271084800F010F8EEE702F0F5FE024696 +S3150800579840230121014803F097F870BDE80B002063 +S315080057A8A40B0020608A000808B500F00FF9FCE78A +S315080057B808B500F001F9012806D000F0A1F918B1DA +S315080057C80C4B1B78012B00D008BDFFF7F7FD0A4BD9 +S315080057D81B680A4A1268134403F5FA739842F3D306 +S315080057E8044B00221A7000F095F90028ECD1FFF74F +S315080057F831FBE9E7F40E0020F00E0020F80E002031 +S31508005808014B1860704700BFF00E0020014B18685E +S31508005818704700BFF00E002008B5054B1B78012B12 +S3150800582800D008BDFFF7CAFD024B1860F9E700BFAC +S31508005838F40E0020F80E002008B5044B01221A7051 +S31508005848FFF7EAFFFFF7B4FF08BD00BFF40E002014 +S3150800585808B5FFF7FBFA00F0B5F8FFF78FFDFFF775 +S31508005868B5FC00F035F900F00FF8FFF7E5FF08BDBD +S3150800587808B500F0ABF8FFF793FD00F049FA00F019 +S3150800588817F8FFF795FF08BD10B500F005FEFFF7F6 +S3150800589847FA064C01232370FFF7D8FC0023237028 +S315080058A8FFF75EFE0223237010BD00BF0D0000201F +S315080058B800B583B00DF107011848FFF7ADFA0128BE +S315080058C810D00DF107011548FFF7FAFC012812D088 +S315080058D80DF107011148FFF7BBFE012814D003B0E4 +S315080058E85DF804FB0E4B01221A709DF807100B4849 +S315080058F800F0F4FDE5E70A4B00221A709DF8071038 +S31508005908064800F0EBFDE3E7054B02221A709DF8FE +S315080059180710024800F0E2FDE1E700BFFC0E002090 +S315080059280D00002008B5FFF75DFE08BD38B504462A +S315080059380D460E4B1B78012B09D00C4B1B7853B11F +S315080059480A4B1B78022B0BD000F0C0FD38BDC9B234 +S31508005958FFF73CFAF1E7E9B22046FFF795FCEFE7CF +S31508005968E9B22046FFF74AFEEEE700BF0D00002021 +S31508005978074B1B78022B07D0032B07D0012B01D026 +S3150800598881207047082070473F20704700207047DD +S315080059980D000020074B1B78022B07D0032B07D0D6 +S315080059A8012B01D081207047082070473F20704797 +S315080059B8002070470D00002008B500F07FFD00B1F3 +S315080059C8012008BD08B5FAF721FC08BD08B5FAF79D +S315080059D822FC08BD00F00F0202F13003092802D99B +S315080059E802F137007047054A9A5C02F00302022A58 +S315080059F801D0D8B27047203BFBE700BF3A910008B0 +S31508005A0838B505460C460009FFF7E4FF207005F08F +S31508005A180F00FFF7DFFF60700023A370204638BD2C +S31508005A2810B4024608461346013019460D4CA4FB25 +S31508005A380343DB080929F7D800230370094BA3FB9E +S31508005A480213DB08194603EB8303A2EB430330333F +S31508005A5800F8013D13460A46092BEFD85DF8044BB2 +S31508005A68704700BFCDCCCCCC844600210846012916 +S31508005A782AD800B509E0203B0FE00301DBB213443E +S31508005A88D8B20131C9B201291AD81CF801300F4A0F +S31508005A989A5C02F00302022AEDD0DBB2A3F13002C7 +S31508005AA8D2B2162A0BD8A3F13A0E5FFA8EFEBEF1C9 +S31508005AB8060F07D9092AE0D9373BDAB2DDE700200D +S31508005AC85DF804FB0020FBE7704700BF3A91000821 +S31508005AD808B50022064B1A700649074801F08AFFDE +S31508005AE800B908BD77210548FFF75EFEF9E700BF4C +S31508005AF8E01300209C8A0008880F0020A08A000866 +S31508005B08034B1B780BB1002070470120704700BF74 +S31508005B18E013002010B5FFF74FFF01280ED0084BF9 +S31508005B281C7814B10024204610BDFAF779FB012821 +S31508005B38F9D1034B01221A700446F4E70024F2E768 +S31508005B48E01300200378114A9A5C02F00302022A3D +S31508005B580FD0532B0FD143780C4A9A5C12F0040FD6 +S31508005B680BD0312B0BD0322B0BD0332B0BD0032079 +S31508005B787047203BEDE70320704703207047002055 +S31508005B887047012070470220704700BF3A91000805 +S31508005B9870B506460230FFF767FF054684B2043635 +S31508005BA83046FFF761FF0544EDB2013CA4B2023660 +S31508005BB8012CF5D8ED43EDB23046FFF755FFA8425C +S31508005BC801D1012070BD0020FCE700002DE9F04155 +S31508005BD8044617460E46B1B1A8B12046FFF7B2FFEC +S31508005BE80546032800F08D802046FFF7D1FF0028D8 +S31508005BF800F08980012D2DD0022D53D04DB10025F6 +S31508005C082846BDE8F08140F263214048FFF7CCFDFD +S31508005C18E3E7A01CFFF728FF1FFA80F8201DFFF707 +S31508005C2823FF05023560A01DFFF71EFF05443560F2 +S31508005C380834A8F103052DB2002FE1D0002606E0A6 +S31508005C482046FFF711FFB85502340136B6B2AE4200 +S31508005C58F6DBD5E7A01CFFF707FF1FFA80F8201D1B +S31508005C68FFF702FF05043560A01DFFF7FDFE05EBEB +S31508005C780025356004F10800FFF7F6FE054435608F +S31508005C880A34A8F104052DB2002FB9D0002606E07B +S31508005C982046FFF7E9FEB85502340136B6B2AE42D9 +S31508005CA8F6DBADE7A01CFFF7DFFE1FFA80F8201D1C +S31508005CB8FFF7DAFE05063560A01DFFF7D5FE05EBEA +S31508005CC80045356004F10800FFF7CEFE05EB002510 +S31508005CD8356004F10A00FFF7C7FE054435600C3441 +S31508005CE8A8F105052DB2002F8AD0002606E0204621 +S31508005CF8FFF7BAFEB85502340136B6B2AE42F6DB3D +S31508005D087EE700257CE74FF0FF3579E7A08A00088B +S31508005D18B54B1B78002B00F0F58170B5012B05D023 +S31508005D28022B30D0032B00F0208170BDFFF74EFA06 +S31508005D38FAF796FAAD48FAF7C7FAAD48FAF7C4FA81 +S31508005D48FAF78AFA01460122AA4801F07FFE80B9C5 +S31508005D58A948FAF7B9FAA948FAF7B6FAA848FAF725 +S31508005D68B3FAA84B00221A605A609F4B02221A708F +S31508005D78DBE79D4B00221A70A348FAF7A5FA01201B +S31508005D88FAF794FAD1E7A14C04F50C724FF480712E +S31508005D989F4802F0BBFA94F84132002B5DD1A8B1AE +S31508005DA89B48002200F5C071FFF710FF0446B0F1C2 +S31508005DB8FF3F60D0002809DD924B5B68002B67D14E +S31508005DC8934BD3F880218F4B1A6058608F4BD3F8C2 +S31508005DD84422D3F83C329A42A7D10021854802F0DA +S31508005DE847F9002840F0A780864B5B6873B382485A +S31508005DF8FAF76AFA8748FAF767FA874D814C294607 +S31508005E086068FFF70DFE2846FAF75EFA8348FAF740 +S31508005E185BFA2946E078FFF7F3FDA91CA078FFF797 +S31508005E28EFFD291D6078FFF7EBFDA91D2078FFF720 +S31508005E38E7FD2846FAF748FA7948FAF745FA61680D +S31508005E482068FFF7CBF9002800F082806A48FAF73D +S31508005E583BFA654B03221A7067E7634B00221A70F0 +S31508005E686948FAF731FA0220FAF720FA04F50C70AD +S31508005E7802F0EEF859E75C4B00221A706248FAF706 +S31508005E8823FA0320FAF712FA5A4802F0E1F84CE71F +S31508005E985F4AD2F880115B4A12681A44914203D1C4 +S31508005EA80344584A536091E75348FAF70DFA594894 +S31508005EB8FAF70AFA584E534D31466868FFF7B0FDA7 +S31508005EC83046FAF701FA5548FAF7FEF93146E878FE +S31508005ED8FFF796FDB11CA878FFF792FD311D687883 +S31508005EE8FFF78EFDB11D2878FFF78AFD3046FAF7C9 +S31508005EF8EBF94B48FAF7E8F969682868FFF76EF985 +S31508005F0860B13D48FAF7E0F93D48FAF7DDF9404B44 +S31508005F18D3F880213B4B1A605C6057E7324B002266 +S31508005F281A703948FAF7D0F90520FAF7BFF931484F +S31508005F3802F08EF8F9E62C4B00221A703248FAF766 +S31508005F48C3F90420FAF7B2F92A4802F081F8ECE610 +S31508005F58254B00221A702C48FAF7B6F90520FAF7E5 +S31508005F68A5F9244802F074F8DFE6284C04F50C7203 +S31508005F784FF48071264802F0C9F994F84132002B8B +S31508005F8856D160B1224800F5807200F5C071FFF756 +S31508005F981DFE0446B0F1FF3F58D0002863DC1B4BB2 +S31508005FA8D3F84422D3F83C329A427FF4BEAE1D4851 +S31508005FB8FAF78AF9FFF71EF9002800F096800E48C6 +S31508005FC8FAF782F91848FAF77FF90A4802F040F80A +S31508005FD81648FAF779F9044B00221A70FAF754F9B1 +S31508005FE8FEF738FFA1E600BFE0130020D08A0008B4 +S31508005FF8F48A0008B8110020248B00082C8B0008A6 +S31508006008508B0008800F00201C8B0008880F002082 +S31508006018E4130020808B0008681500208C8B000884 +S31508006028308C0008188C0008348C00084C8C000842 +S31508006038354B00221A703548FAF746F90220FAF75E +S3150800604835F904F50C7002F003F86EE62E4B0022BB +S315080060581A702F48FAF738F90320FAF727F92D485E +S3150800606801F0F6FF61E62C48FAF72EF92B4D29467A +S315080060782046FFF7D5FC2846FAF726F92848FAF7FE +S3150800608823F9284E294696F88301FFF7B9FCA91C77 +S3150800609896F88201FFF7B4FC291D96F88101FFF7E7 +S315080060A8AFFCA91D96F88001FFF7AAFC2846FAF75F +S315080060B80BF91D48FAF708F906F580722146D6F84D +S315080060C88001FFF787F818B11848FAF7FDF866E768 +S315080060D80D4B00221A701648FAF7F6F80620FAF752 +S315080060E8E5F80C4801F0B4FF1FE6074B00221A70C2 +S315080060F80F48FAF7E9F80720FAF7D8F8054801F03B +S31508006108A7FF12E6704700BFE0130020A88B000817 +S31508006118CC8B0008B8110020F08B00086815002001 +S31508006128008C0008E4130020308C0008248B000833 +S315080061381C8B0008024B002283F88220704700BF98 +S31508006148A8150020034BFE221A7058700222A3F8DD +S3150800615886207047A81500200378427843EA022368 +S31508006168827843EA0243C07843EA006070470870B9 +S31508006178C0F307234B70C0F307438B70000EC87033 +S315080061887047000010B5064C002384F88130FFF7E5 +S31508006198D1FFFF2323700123A4F8863010BD00BF62 +S315080061A8A8150020074BFF221A7000225A7093F888 +S315080061B882109970DA701A715A710622A3F8862025 +S315080061C8704700BFA815002008B50020FFF7BAFFDA +S315080061D808BD000010B5094CFF232370084BC4F806 +S315080061E8883000236370A370E370211D0720FFF72A +S315080061F8BEFF0823A4F8863010BD00BFA8150020E6 +S31508006208788C000810B5064CFF2323700430FFF776 +S31508006218A3FFC4F888000123A4F8863010BD00BF80 +S31508006228A815002008B53120FFF78CFF08BD000027 +S3150800623838B5084CFF23237000256570A570FFF74D +S3150800624897FBE07025716571A5710723A4F8863058 +S3150800625838BD00BFA815002038B5FFF751FCF8B1BE +S31508006268FFF768FF104C012584F88150FF23237037 +S315080062780023637010226270A370FFF779FBE07041 +S31508006288FFF788FB2071FFF785FBC0F307206071CD +S31508006298A571E5710823A4F88630FEF797FF38BD7F +S315080062A81020FFF74FFFFAE7A815002038B504466F +S315080062B8FFF75EFB6278904212D90B4DD5F8881025 +S315080062C8681CFEF7E7FDFF232B706278D5F888303F +S315080062D81344C5F8883063780133A5F8863038BD85 +S315080062E82220FFF72FFFFAE7A815002038B504463D +S315080062F8FFF73EFB6378984217D9201DFFF72CFF56 +S3150800630801460C4DC5F888006278681CFEF7C2FD80 +S31508006318FF232B706278D5F888301344C5F888307F +S3150800632863780133A5F8863038BD2220FFF70AFFBF +S31508006338FAE700BFA8150020F8B505461746002451 +S3150800634806E015F8013B1C44E4B2FFF73FFB31466B +S315080063584E1E0029F5D13C600120F8BD30B583B042 +S31508006368002501950B4CFF2323700430FFF7F4FE34 +S31508006378014601AAD4F88800FFF7DEFF6070211DE0 +S315080063880198FFF7F4FEA570E5700823A4F886308F +S3150800639803B030BDA815002038B504460E4BD3F80F +S315080063A88850FFF7E5FA621C411E2846FEF712FFD9 +S315080063B870B1094CFF232370FFF7DAFA0138D4F8CD +S315080063C888300344C4F888300123A4F8863038BDD9 +S315080063D83120FFF7B7FEFAE7A815002010B50446DE +S315080063E8FFF7C6FA01386378984216DD134BFF2281 +S315080063F81A700122A3F88620617891B1A21C0F4B66 +S31508006408D3F88800FEF7E6FE98B161780B4AD2F809 +S3150800641888300B44C2F8883010BD2220FFF792FE58 +S31508006428FAE7FEF7E7FE0028F6D13120FFF78AFEDD +S31508006438F2E73120FFF786FEEEE700BFA815002031 +S3150800644810B50B4BD3F888400430FFF785FE014694 +S315080064582046FEF7C3FE30B1054BFF221A7001220B +S31508006468A3F8862010BD3120FFF76CFEFAE700BFB7 +S31508006478A815002008B5FEF7EDFC034BFF221A7095 +S315080064880122A3F8862008BDA815002008B589B2F8 +S31508006498FFF74CFA08BD0000074B002283F8812055 +S315080064A8C3F8882083F88420A3F8862083F88320F5 +S315080064B883F88220704700BFA8150020024B93F87E +S315080064C8810000B101207047A8150020024B002260 +S315080064D883F88420704700BFA815002008B50378FC +S315080064E8FF2B24D0354A92F88120012A2BD1C93BA3 +S315080064F8352B53D8DFE803F04052524F52524C43DB +S31508006508494652525252525252525252525252526A +S315080065185252525252525252525252525252525245 +S315080065285252312B282E5252523452373A3DFFF7DF +S3150800653893FE224B93F88430012B33D01F4BB3F9C3 +S315080065488610002932DC08BDFFF7B0FEF1E7FFF731 +S31508006558CDFEEEE7FFF756FEEBE7FFF7FFFEE8E7A7 +S31508006568FFF738FEE5E7FFF72FFEE2E7FFF71AFE23 +S31508006578DFE7FFF707FEDCE7FFF70EFFD9E7FFF7C8 +S315080065882DFFD6E7FFF754FED3E7FFF759FFD0E705 +S31508006598FFF770FFCDE7FFF745FECAE72020FFF7AC +S315080065A8D1FDC6E71020FFF7CDFDC7E7184601233A +S315080065B880F88430FFF76AFFC5E700BFA8150020F2 +S315080065C84278007840EA02207047C278837843EA1E +S315080065D80222437843EA0223007840EA03207047F8 +S315080065E80170090A417070470170C1F307234370A7 +S315080065F8C1F307438370090EC1707047944632B1D8 +S315080066080A78013102700130BCF1010CF8D17047E3 +S3150800661801700130013AFBD1704784469CF80000A6 +S315080066280CF1010C0B780131C01A013A01D0002887 +S31508006638F4D07047034600E00133187808B1884259 +S31508006648FAD1704702394369023B8B4204D9438918 +S31508006658806A01FB030070470020704770B506463C +S315080066680D4601F11A00FFF7ABFF3378032B00D06C +S3150800667870BD044605F11400FFF7A2FF44EA00407E +S31508006688F6E770B506460C46154691B204F11A00A7 +S31508006698FFF7A6FF3378032B00D070BD290C04F149 +S315080066A81400FFF79DFFF8E72DE9F04180460E46EE +S315080066B801F11A00FFF784FF50BB357805F03F054E +S315080066C8013D05EB450305EB83050127002404E096 +S315080066D84FF6FF73984220D101340C2C0DD8124B73 +S315080066E8185D3044FFF76CFF002FF1D0FE2D12D845 +S315080066F828F8150007460135EEE7337813F0400FFA +S315080067080DD0FE2D0DD8002328F81530012000E0FD +S315080067180020BDE8F0810020FBE70020F9E701200A +S31508006728F7E70020F5E700BF148D00082DE9F843C0 +S3150800673880460F4691464B730F23CB7200240C7381 +S31508006748214607F11A00FFF74BFF09F1FF3606EB5A +S31508006758460306EB8306254602E001340C2C11D8BD +S315080067684FF6FF739D4202D038F8165001360C4B87 +S31508006778185D29463844FFF733FF002DEDD14FF64B +S31508006788FF75EAE74FF6FF739D4202D038F81630D0 +S315080067980BB949F0400987F80090BDE8F88300BFAF +S315080067A8148D000870B582B0054616461C460B229D +S315080067B8FFF724FF052C11D807231FE001310F29FD +S315080067C80CD803F0010C0CEB44045B0814F4803F66 +S315080067D8F4D084F4883484F02104EFE73388002B56 +S315080067E8EAD002360021EAE75A1E08336B4403F852 +S315080067F8081C21090F2C0AD913460C4604F00F0267 +S3150800680802F130013929EFD902F13701ECE77E2187 +S3150800681802F108036B4403F8081C002300E001335F +S31508006828934209D2E95C2029F9D105E02020591CB0 +S31508006838E854072909D80B46072AF7D802F10801A8 +S31508006848694411F8080C0132F1E702B070BD014637 +S315080068584FF00B0C0020C30143EA500308780131B6 +S3150800686850FA83F3D8B2BCF1010CF4D1704701464B +S31508006878006838B1024613781F2B06D93A2B04D07C +S315080068880132F8E74FF0FF3070473A2B01D0002065 +S31508006898704710B4034613F8010B3038092808D88E +S315080068A89A4202D04FF0FF3005E038B901320A6043 +S315080068B801E04FF0FF305DF8044B70474FF0FF30AA +S315080068C8F9E738B50D4640B1044603682BB11A787E +S315080068D81AB1D9888288914203D000232B600920EF +S315080068E838BD5878FDF72AFB10F00100F5D1236862 +S315080068F82B60F5E72DE9F041C57815B92846BDE8B6 +S31508006908F0810446C76A00F1300801233A46414631 +S315080069184078FDF765FB0546A0B90023E370236AAE +S31508006928FB1AA2699342E9D2A67808E0A3691F442C +S3150800693801233A4641466078FDF752FB013E012E8F +S31508006948F4D8DBE70125D9E770B5C36A8B4202D1CB +S315080069580026304670BD04460D46FFF7CBFF0646AF +S315080069680028F6D101232A4604F130016078FDF79C +S31508006978EFFA10B101264FF0FF35E562E9E70000A6 +S3150800698838B504460023C3704FF0FF33C362FFF7D8 +S31508006998DBFFE0B9054604F22E20FFF711FE4AF69A +S315080069A85523984215D104F16600FFF70EFE20F02C +S315080069B87F40094B98420DD004F18200FFF705FE87 +S315080069C820F07F40044B984204D0022502E00425B3 +S315080069D800E00325284638BD464154002DE9F04F06 +S315080069E885B00D46164600230B60FFF740FF071EC5 +S315080069F8C0F24181B34B53F82740002C00F0408180 +S31508006A082C6006F0FE06237873B16078FDF796FACF +S31508006A1810F0010508D1002E00F02E8110F0040FA1 +S31508006A2800F02A810A2527E100232370F8B260704E +S31508006A38FDF7DCF910F0010540F024811EB110F0CD +S31508006A48040F40F0218100212046FFF799FF02280C +S31508006A5800F0B3800027042800F01881012800F206 +S31508006A68178104F13B00FFF7ABFDB0F5007F40F056 +S31508006A78118104F14600FFF7A3FD064620B904F183 +S31508006A885400FFF7A2FD0646A66194F84020A270B6 +S31508006A98531EDBB2012B00F2FF8006FB02F894F8BE +S31508006AA83D90A4F80A90B9F1000F00F0F78009F1B3 +S31508006AB8FF3319EA030F40F0F38004F14100FFF7AA +S31508006AC87FFD8246208110F00F0F40F0EB8004F11D +S31508006AD84300FFF775FD834620B904F15000FFF718 +S31508006AE874FD834604F13E00FFF76AFD0246002856 +S31508006AF800F0DA8000EB080303EB1A139B45C0F095 +S31508006B08D580ABEB030BBBFBF9F1CB45C0F0D080C6 +S31508006B1840F6F570814268D84FF0010B4FF6F570CC +S31508006B28814201D94FF0030B01F10209C4F8149008 +S31508006B38E7613A4422623B44A362BBF1030F57D08C +S31508006B48BAF1000F00F0BA8042446262BBF1020F44 +S31508006B585FD009EB490309F0010909EB530909F262 +S31508006B68FF19B6EB592FC0F0AB804FF0FF332361FE +S31508006B78E36080232371BBF1030F4DD084F800B07E +S31508006B88514A138801339BB21380E38074E00020CE +S31508006B9804AB03EB860343F8100C0136032E0ED814 +S31508006BA804F13000330103F5DF7318440379002B29 +S31508006BB8EDD00830FFF709FDEAE70026EEE70026DC +S31508006BC80AE039462046FFF7DBFE01287FF643AF81 +S31508006BD80136032E3FF63FAF04AB03EB860353F8A3 +S31508006BE8107C002FEDD10320F2E74FF0020B95E752 +S31508006BF804F15A00FFF7E4FC00285BD1BAF1000F4C +S31508006C085AD104F15C00FFF7E0FC60624FEA890993 +S31508006C18A5E74FEA4909A2E704F16000FFF7D0FCA7 +S31508006C280128ABD1791C2046FFF78EFE0028A5D18E +S31508006C380023237104F22E20FFF7C2FC4AF65523D7 +S31508006C4898429BD104F13000FFF7BFFC1F4B9842CE +S31508006C5894D104F50570FFF7B8FC1D4B98428DD101 +S31508006C6804F50670FFF7B1FC206104F50770FFF715 +S31508006C78ACFCE06082E70B25284605B0BDE8F08F36 +S31508006C880C25F9E70325F7E70A25F5E70125F3E7CC +S31508006C980D25F1E70D25EFE70D25EDE70D25EBE7C2 +S31508006CA80D25E9E70D25E7E70D25E5E70D25E3E7D2 +S31508006CB80D25E1E70D25DFE70D25DDE70D25DBE7E2 +S31508006CC80D25D9E73416002038160020525261419E +S31508006CD872724161F8B50668012954D90C46736978 +S31508006CE88B4252D93378022B2DD0032B3AD0012B5D +S31508006CF801D0012048E001EB5105316A01EB552125 +S31508006D083046FFF721FE10B14FF0FF303CE06F1C0C +S31508006D18C5F30805354495F83050316A01EB572113 +S31508006D283046FFF711FE90BBC7F308073E4496F8AE +S31508006D38300045EA002014F0010F01D0000923E0CD +S31508006D48C0F30B0020E0316A01EB14213046FFF747 +S31508006D58FBFDF8B9600000F4FF7030303044FFF7E7 +S31508006D682FFC11E0316A01EBD4113046FFF7ECFD30 +S31508006D7898B9A00000F4FE7030303044FFF725FCBF +S31508006D8820F0704000E00120F8BD0120FCE74FF034 +S31508006D98FF30F9E74FF0FF30F6E74FF0FF30F3E73B +S31508006DA82DE9F041D0F80080B1F5001F40D206461B +S31508006DB80F4611F01F0F3DD1016184682CB998F868 +S31508006DC80030022B01D9D8F82440B4B9B8F80830ED +S31508006DD8B3EB571F30D9D8F82430B3617461B36957 +S31508006DE893B303EB5723B36108F13003C7F30801DC +S31508006DF81944F1610020BDE8F081B8F80A506D021F +S31508006E08AF420FD321463046FFF764FF0446B0F178 +S31508006E18FF3F13D0012813D9D8F81430834211D963 +S31508006E287F1BEDE721464046FFF70CFCB061D5E726 +S31508006E380220E0E70220DEE70220DCE70120DAE7A5 +S31508006E480220D8E70220D6E70220D4E72DE9F8433E +S31508006E58012940F2818005460C46164643698B424D +S31508006E687CD90378022B49D0032B5AD0012B03D09F +S31508006E7802273846BDE8F88301EB5108016A01EB99 +S31508006E885821FFF761FD07460028F2D108F10109E4 +S31508006E98C8F3080814F0010423D005EB080393F98E +S31508006EA8303003F00F03320102F47F621343DBB27A +S31508006EB8A84488F830300123EB70296A01EB592178 +S31508006EC82846FFF741FD07460028D2D1C9F3080925 +S31508006ED84CB1C6F30712A94489F830200123EB7090 +S31508006EE8C7E7F3B2E4E705EB090393F9302022F084 +S31508006EF80F02C6F303263243D2B2ECE7016A01EB66 +S31508006F081421FFF721FD07460028B2D1600000F4D6 +S31508006F18FF703030B1B22844FFF762FB0123EB70EB +S31508006F28A7E7016A01EBD411FFF70EFD074600280B +S31508006F389FD126F07046A40004F4FE7430342C441D +S31508006F482046FFF742FB00F0704131432046FFF721 +S31508006F584BFB0123EB708CE702278AE7022788E7B1 +S31508006F682DE9F041054606680F4651B9D6F80C8052 +S31508006F78B8F1000F12D07369434511D84FF00108CC +S31508006F880EE0FFF7A7FE0346012847D9B0F1FF3FF1 +S31508006F9849D07269824246D8B84601E04FF00108DE +S31508006FA844460CE021462846FFF794FE034678B186 +S31508006FB8012838D0B0F1FF3F35D0444532D00134E6 +S31508006FC87369A342EED8B8F1010F29D90224E9E773 +S31508006FD84FF0FF3221463046FFF738FF034600B91F +S31508006FE877B9A3B9F46032697369023B9A4201D248 +S31508006FF8013A3261337943F001033371234612E0CB +S31508007008224639463046FFF721FF0346E9E7012BB2 +S3150800701801D0012307E04FF0FF3304E0012302E023 +S31508007028002300E000231846BDE8F081F8B50C46B1 +S31508007038056801292ED9064611466B69A3422BD93C +S3150800704882B14FF0FF322846FFF700FF024648B1E3 +S3150800705823E001332B612B7943F001032B716B690C +S31508007068A3421AD9274621463046FFF733FE044677 +S31508007078A8B1012815D0B0F1FF3F14D0002239462F +S315080070882846FFF7E3FE024638B92B69B3F1FF3FF6 +S31508007098DFD1E4E7022200E002221046F8BD00220A +S315080070A8FBE70222F9E70122F7E72DE9F047076827 +S315080070B805698369002B6CD0044688462035B5F5E2 +S315080070C8001F68D2C5F308063EB9013383614169D2 +S315080070D879B93B89B3EB551F07D9256106F1300302 +S315080070E83B44E3610020BDE8F08700238361042060 +S315080070F8F9E77B89013B13EA5529EED1FFF7EAFD43 +S315080071088246012849D9B0F1FF3F48D07B698342B6 +S3150800711837D8B8F1000F11D061692046FFF720FF6C +S31508007128824600283DD001283DD0B0F1FF3F3CD02B +S315080071383846FFF7DFFB28B10120D4E70023A3610F +S315080071480420D0E74FF40072002107F13000FFF75A +S315080071585FFA51463846FFF775FAF8627B8999450A +S315080071680BD20123FB703846FFF7C4FBF8B909F1BF +S315080071780109FB6A0133FB62F0E7FB6AA3EB090323 +S31508007188FB62C4F814A051463846FFF75BFAA061BB +S31508007198A3E70420A7E70420A5E70220A3E7012020 +S315080071A8A1E707209FE702209DE701209BE701202A +S315080071B899E7F8B504460E4607680021FFF7F0FD7B +S315080071C80246C0B9002508E00135B54213D00121A9 +S315080071D82046FFF76AFF024668B9A1693846FFF7ED +S315080071E8B3FB024638B9E3691B78E52BECD0002BCC +S315080071F8EAD00025EBE7042A01D01046F8BD072295 +S31508007208FBE72DE9F8430446884607684FF0FF0967 +S315080072184E4604252EE00F2B19D112F0400F06D042 +S3150800722891F80D9002F0BF02236963621646B242CE +S3150800723801D0FF2618E04B7B4B4501D0FF2613E00B +S31508007248A06AFFF731FA88B3013EF6B20CE026B910 +S315080072580846FFF7FCFA48452BD04FF0FF33636220 +S3150800726827E0FF2600E0FF2600212046FFF71DFF3E +S315080072780546F0B9A169E1B13846FFF765FB054649 +S31508007288B8B9E1690A789AB1CB7A03F03F03A371D2 +S31508007298E52AE6D02E2AE6D023F02000082814BFCF +S315080072A8002001204045B6D0FF26DDE7FF26DBE7AC +S315080072B804250DB10023A3612846BDE8F88370B5F7 +S315080072C8044605680669416AB1F1FF3F18D1A16904 +S315080072D82846FFF739FB034670B9E269E5211170BC +S315080072E80122EA702269B24206D200212046FFF737 +S315080072F8DCFE03460028EAD0042B07D0184670BDE2 +S31508007308FFF74EFD03460028F8D1E0E70223F5E724 +S315080073182DE9F04F83B007468A46D1F80090856A6A +S315080073280024234613E0013609EB060219F806304D +S315080073382F2BF8D05C2BF6D0CAF800201F2823D8A4 +S315080073484FF0040824E025F81480013433465E1CFF +S3150800735819F803001F28E7D92F28E5D05C28E3D0B9 +S31508007368FE2C00F2DD80012101F024F88046002871 +S3150800737800F0D8807F28E6D801466C48FFF75AF906 +S315080073880028E0D0062084E04FF0000800E0013C21 +S3150800739844B104F10043013B35F81330202BF6D0ED +S315080073A82E2BF4D0002325F81430002C00F0BC80CE +S315080073B80B222021386AFFF72BF9002300E0013356 +S315080073C835F81320202AFAD02E2AF8D01BB148F00F +S315080073D8030800E0013C6CB104F10042013A35F8B3 +S315080073E812202E2AF6D14FF0080B4FF0000ACDF8D6 +S315080073F804A00AE0A2464FF0080B0022019204E016 +S315080074084C450BD048F003084B4603F1010935F8FB +S315080074181360F6B1202EF5D02E2EF1D0DA450FD20C +S315080074284C450DD07F2E44D8002E4FD148F003087E +S315080074385F263B6A03F80A604B460AF1010AE4E745 +S31508007448BBF10B0F28D04C4501D048F003084C4532 +S3150800745825D23B6A1A78E52A54D0BBF1080F54D0CE +S31508007468019B03F00C020C2A03D003F00303032B39 +S3150800747801D148F0020818F0020F06D1019B03F063 +S315080074880303012B46D0042A47D03B6A83F80B80AE +S31508007498002003B0BDE8F08F48F00308D9E7019B40 +S315080074A89B00DBB2019323464FF00B0B4FF0080AFB +S315080074B8ABE70021304600F07DFF064618B1A0F17B +S315080074C880061B4B9E5D48F00208ADE73146194811 +S315080074D8FFF7B0F80028A9D1A6F141039BB2192BEA +S315080074E804D8019B43F002030193A2E7A6F16103BE +S315080074F89BB2192B9DD8019B43F001030193203EAB +S31508007508B6B296E705221A70A7E7019B9B00DBB27D +S315080075180193A5E748F01008B5E748F00808B4E766 +S315080075280620B6E70620B4E70620B2E7808C0008EE +S31508007538948C00088C8C0008F8B500238B75836931 +S31508007548002B6AD006460D46436AB3F1FF3F12D0B0 +S31508007558846A002734F8020B50B1002100F02AFF8C +S3150800756828B1FE2F0BD8EA1990750137F2E70027DC +S315080075782F440023BB75AC7D0022134612E0002772 +S31508007588F6E7E52317E014B9A8182E278775A8186B +S315080075982E274772013210E010201CE0A8188375C0 +S315080075A801320B460A2B1BD8F069591CC35C202BE1 +S315080075B8F7D0052BE5D00929E5D0A8184372002C81 +S315080075C8EED1A3F14100C0B21928E7D8F069077BC4 +S315080075D80829E1D808200742E0D02033DBB2DDE7E6 +S315080075E834B9AB1800219975F3691B7B03B90A46A8 +S315080075F82A4400235372F369DB7A2B72F0691C302C +S31508007608FEF7E3FF2860F0691830FEF7D9FFA8806F +S31508007618F0691630FEF7D4FFE880F8BD2DE9F04783 +S3150800762881460F4601F11A00FEF7CAFFC8BB3E7825 +S3150800763806F03F06013E06EB460306EB83064FF0C7 +S315080076480108002506E000202CE04FF6FF73984253 +S315080076582AD101350C2D18D8174B585D3844FEF732 +S31508007668AFFF0446B8F1000FEFD0FE2EEBD800F0B6 +S31508007678BFFE804606F1010A39F8160000F0B8FE82 +S315080076888045E0D1A0465646E3E73B7813F0400F1D +S315080076980CD0B8F1000F0BD039F8163053B90120C1 +S315080076A800E00020BDE8F0870020FBE70120F9E7A5 +S315080076B80120F7E70020F5E7148D00082DE9F843BF +S315080076C80446D0F800800021FFF76AFB0646002822 +S315080076D85ED14FF0FF3363624FF0FF094F460AE069 +S315080076E84FF0FF336362FF2700212046FFF7DDFCD2 +S315080076F8064600284CD1A1694046FFF725F90646F3 +S31508007708002845D1E5692B78002B40D0E97A01F0A5 +S315080077183F02A271E52BE3D011F0080F01D00F2A1A +S31508007728DED10F2A14D027B92846FFF790F848451E +S315080077382ED0216ACB7A13F0010F04D10B222846E2 +S31508007748FEF76BFF20B34FF0FF336362FF27CBE7E3 +S31508007758A06A0028C8D013F0400F06D095F80D90F7 +S3150800776803F0BF03226962621F46BB4201D0FF27A6 +S31508007778BAE76B7B4B4501D0FF27B5E72946FFF7E4 +S315080077884DFF10B1013FFFB2AEE7FF27ACE704266D +S315080077983046BDE8F88330B583B0044601910568DC +S315080077A801E001330193019B1A782F2AF9D05C2A44 +S315080077B8F7D00022A2601B781F2B1DD901A92046E5 +S315080077C8FFF7A6FD0346F8B92046FFF777FF236AB1 +S315080077D8DA7A0346D8B912F0040F15D1A37913F04B +S315080077E8100F1BD02169C1F30801303129442846F6 +S315080077F8FEF734FFA060E1E7236A8022DA720021E7 +S315080078082046FFF7CDFA0346184603B030BD0428CC +S31508007818FAD112F0040FF7D10523F5E70523F3E7A4 +S315080078282DE9F04784B00768D0F820A0D0F828904A +S315080078389AF80B3013F0A00F40F08E800646002405 +S3150800784800E0013439F81430002BFAD10C225146DD +S3150800785801A8FEF7D3FE9DF80F3013F0010F1FD0CD +S3150800786800238AF80B30B362012500E00135632D41 +S315080078780BD82B464A4601A95046FEF793FF3046D1 +S31508007888FFF71CFF80460028F0D0642D67D0B8F1B2 +S31508007898040F1DD19DF80F308AF80B30C6F82890CA +S315080078A89DF80F3013F0020F06D00C342D4BA3FBAE +S315080078B80434A408013400E0012421463046FFF7C1 +S315080078C878FC804608B9013C06D1B8F1000F29D0E2 +S315080078D8404604B0BDE8F0873169A1EB441130464B +S315080078E8FFF75EFA80460028EFD1306AFEF7AFFF49 +S315080078F80546B1693846FFF727F880460028E4D1D7 +S315080079082B46E2B2F169B06AFEF710FF0123FB7055 +S3150800791800213046FFF7C9FB80460028D5D1013C2F +S31508007928E7D1D2E7B1693846FFF70EF8804600284E +S31508007938CED120220021F069FEF76AFE0B22316AB1 +S31508007948F069FEF75BFE336ADB7AF26903F018031F +S3150800795813730123FB70BBE74FF00608B8E74FF02F +S315080079680708B5E74FECC44E70B50446FEF7C2FFE4 +S31508007978054648B92378032B08D0002211466078B3 +S31508007988FCF788FB00B10125284670BD2379012B31 +S31508007998F3D104F130064FF4007200213046FEF7A1 +S315080079A837FE4AF6552104F22E20FEF719FE0F492E +S315080079B83046FEF719FE0E4904F50570FEF714FE63 +S315080079C8216904F50670FEF70FFEE16804F50770ED +S315080079D8FEF70AFEE2690132E2620123314660785F +S315080079E8FCF7FEFA00232371C7E700BF525261412C +S315080079F87272416110B584B00190009114460391E2 +S31508007A0803A8FEF734FF002819DB0F4B53F820307C +S31508007A180BB100221A70019B0BB100221A70019B48 +S31508007A28094A42F8203063B1012C02D0002004B07C +S31508007A3810BD002201A96846FEF7D0FFF7E70B201C +S31508007A48F5E70020F3E700BF341600202DE9F043D8 +S31508007A5893B00191002800F0AE801446064600232C +S31508007A68036002F01F073A4606A901A8FEF7B6FF03 +S31508007A78054618B1284613B0BDE8F083069B079358 +S31508007A8803AB0F934D4B1193019907A8FFF783FE94 +S31508007A98054620B90F9B93F90B30002B45DB14F0EC +S31508007AA81C0F53D0002D47D0042D40D047F00807A7 +S31508007AB8002D5AD117F0080F57D0414C21460E9879 +S31508007AC80E30FEF791FD21460E981630FEF78CFD0E +S31508007AD80E9B2022DA72DDF81880DDF838904946C0 +S31508007AE84046FEF7BBFD0446002249464046FEF7D7 +S31508007AF8C8FD00210E981C30FEF776FD069B01226C +S31508007B08DA7094B3069BD3F82C800022214607A87E +S31508007B18FFF78CFA054640BB41460698FEF714FF60 +S31508007B280546013C069BDC601FE00625B7E707A863 +S31508007B38FFF776FE0546B9E79DF8223013F0110FD0 +S31508007B4812D114F0040FB3D008250EE06DB99DF8CC +S31508007B58223013F0100F2CD114F0020F05D013F0B1 +S31508007B68010F02D007250BE007254DB917F0080FB6 +S31508007B7801D047F02007069BDB6A33620E9B7362C7 +S31508007B88002D7FF477AF069CDDF8388041462046FD +S31508007B98FEF764FDB06008F11C00FEF716FDF060FC +S31508007BA8002373747361F36137743460E388B380B0 +S31508007BB860E70425E4E709255CE700BF3C160020D2 +S31508007BC8000061482DE9F04F85B004460E46174671 +S31508007BD898460023C8F8003003A9FEF772FE0190FC +S31508007BE8002840F0B580637C0193002B40F0B080F4 +S31508007BF8237C13F0010F00F0BD80E5686369ED1A70 +S31508007C08BD4268D33D4666E0A1692046FFF762F89B +S31508007C1871E04FF0020A84F811A0CDF804A097E0A5 +S31508007C284FF0010A84F811A0CDF804A090E04FF0AF +S31508007C38020A84F811A0CDF804A089E0237C13F081 +S31508007C48400F04D0E069A0EB0900504502D34FEA7B +S31508007C584A2736E04FF4007204F1280106EB402063 +S31508007C68FEF7CCFCF3E7E2694A451AD0237C13F001 +S31508007C78400F0CD0012304F128019BF80100FCF7FA +S31508007C88AFF9002868D1237C23F040032374012325 +S31508007C984A4604F1280103984078FCF759F9002860 +S31508007CA861D1C4F81C906169C1F30801C1F5007770 +S31508007CB8BD4200D22F4628313A4621443046FEF7BF +S31508007CC89DFC3E4463693B446361D8F800303B44F5 +S31508007CD8C8F80030ED1B002D3AD06369C3F30802D3 +S31508007CE8002AE0D1039A5789013F17EA532708D192 +S31508007CF8002B89D1A06801288BD9B0F1FF3F8FD016 +S31508007D08A061DDF80CB0A1695846FEF79BFC8146D0 +S31508007D1800288CD0B9444FEA552AB5F5007FA2D376 +S31508007D2807EB0A03BBF80A20934201D9A2EB070A14 +S31508007D3853464A4631469BF80100FCF709F90028DC +S31508007D483FF47CAF4FF0010A84F811A0CDF804A0DF +S31508007D58019805B0BDE8F08F4FF0010A84F811A024 +S31508007D68CDF804A0F4E74FF0010A84F811A0CDF87D +S31508007D7804A0EDE707230193EAE72DE9F04F85B05C +S31508007D8804460E46154698460023C8F8003003A947 +S31508007D98FEF797FD0190002840F0CC80637C01939C +S31508007DA8002B40F0C780237C13F0020F00F0DC801C +S31508007DB86369EB4274D3DD4372E000212046FFF77E +S31508007DC8CFF880E0A1692046FFF7CAF87BE04FF0B4 +S31508007DD8020A84F811A0CDF804A0ABE04FF0010A16 +S31508007DE884F811A0CDF804A0A4E00123E26904F1FF +S31508007DF8280103984078FCF7F3F820B9237C23F088 +S31508007E08400323746FE04FF0010A84F811A0CDF8F7 +S31508007E1804A08FE04FF0020A84F811A0CDF804A058 +S31508007E2888E0E169A1EB0901514502D34FEA4A27DF +S31508007E3827E04FF4007206EB412104F12800FEF70B +S31508007E48DDFB237C23F040032374EFE7E3694B4506 +S31508007E5803D06269E3689A4270D3C4F81C906069D3 +S31508007E68C0F30800C0F50077BD4200D22F46283077 +S31508007E783A4631462044FEF7C1FB237C43F04003CB +S31508007E8823743E4463693B446361E268934238BF9E +S31508007E981346E360D8F800303B44C8F80030ED1BB9 +S31508007EA8002D5CD06369C3F30802002AD7D1039A68 +S31508007EB85789013F17EA532711D1002B82D1A068A9 +S31508007EC800283FF47AAF002849D001283FF47FAF4D +S31508007ED8B0F1FF3F82D0A061A36803B9A060237CF4 +S31508007EE813F0400F81D1DDF80CB0A1695846FEF7AA +S31508007EF8A9FB814600288DD0B9444FEA552AB5F51D +S31508007F08007FA3D307EB0A03BBF80A20934201D9DB +S31508007F18A2EB070A53464A4631469BF80100FCF786 +S31508007F285FF800283FF47DAF4FF0010A84F811A0E6 +S31508007F38CDF804A0019805B0BDE8F08F01234A469C +S31508007F4804F128019BF80100FCF702F8002884D000 +S31508007F584FF0010A84F811A0CDF804A0EAE7237CBB +S31508007F6843F020032374E5E707230193E2E770B596 +S31508007F7882B004460D460A290DD06368002B08DB33 +S31508007F885E1C23441D733C2E09DC6660A368013316 +S31508007F98A36002B070BD0D21FFF7E9FFEDE72146A2 +S31508007FA851F80C0B01AB3246FFF7E7FE019B9E42E0 +S31508007FB802D04FF0FF36E8E70026E6E730B583B08B +S31508007FC8044601A9FEF77DFCC0B9237C13F0200FEF +S31508007FD814D013F0400F0CD00123E26904F12801EC +S31508007FE801984078FBF7FCFF70BB237C23F040031D +S31508007FF82374216A0198FEF7A7FC08B103B030BDBF +S31508008008656AEB7A43F02003EB72A2682946206872 +S31508008018FEF737FBE16805F11C00FEF7E5FA0B49A0 +S3150800802805F11600FEF7E0FA002105F11200FEF741 +S31508008038D7FA019B0122DA700198FFF795FC237C91 +S3150800804823F020032374D9E70120D7E70000614805 +S3150800805810B582B00446FFF7B1FF08B102B010BDEB +S3150800806801A92046FEF72DFC0028F7D12060F5E780 +S315080080782DE9F04182B004460D4601A9FEF721FC18 +S315080080888046002856D194F81180B8F1000F51D1CE +S31508008098E368AB4204D2227C12F0020F00D11D46D7 +S315080080A8666900236361CDB1019B5F897F026EB162 +S315080080B86B1EB3FBF7F3013EB6FBF7F2934205D303 +S315080080C87B421E406661AE1BA56905E0A0680028CC +S315080080D834D0A0612E460546002D57D16369C3F3EF +S315080080E80803F3B1E269AA421BD0237C13F0400FB8 +S315080080F80CD0012304F1280101984078FBF770FF9A +S31508008108002870D1237C23F04003237401232A46D0 +S3150800811804F1280101984078FBF71AFF002867D16F +S31508008128E5616369E268934204D9E360237C43F016 +S3150800813820032374404602B0BDE8F081002120469A +S31508008148FEF70EFF012804D0B0F1FF3F06D0A06065 +S31508008158BFE74FF0020884F81180EBE74FF00108F3 +S3150800816884F81180E6E729462046FEF7B3FD05465A +S31508008178B5F1FF3F26D0012D29D9019B5B69AB4292 +S3150800818825D9A56163693B446361F61BBE420BD9D1 +S31508008198237C13F0020FE6D029462046FEF7E0FEB8 +S315080081A805460028E4D13E46636933446361C6F34D +S315080081B80803B3B129460198FEF744FA60B100EB03 +S315080081C856258BE74FF0010884F81180B2E74FF07F +S315080081D8020884F81180ADE74FF0020884F8118088 +S315080081E8A8E71D467AE74FF0010884F81180A1E749 +S315080081F84FF0010884F811809CE7000030B591B06B +S3150800820801900C46002205A901A8FEF7E7FB0546DA +S3150800821810B1284611B030BD02AB0D930B4B0F9326 +S31508008228019905A8FFF7B7FA05460028F1D10D9B6D +S3150800823893F90B30002B06DB002CEAD0214605A85B +S31508008248FFF77AF9E5E70625E3E700BF3C160020BD +S31508008258F0B59DB00190022205A901A8FEF7BEFB5C +S31508008268059B1193044610B120461DB0F0BD02AB1C +S315080082781993254B1B93019911A8FFF78CFA044605 +S315080082880028F1D1199B93F90B30002B1EDB9DF8BA +S315080082984A6016F0010F2AD1059F18993846FEF745 +S315080082A8DDF9054616F0100F12D00697089000213A +S315080082B806A8FEF775FD044650B9002106A8FEF77C +S315080082C8A0FF0446B0B1042802D103E0002506241D +S315080082D8002CC9D111A8FEF7F2FF044600B95DB90A +S315080082E8002CC1D10598FFF73FFB0446BCE70025DB +S315080082F80724EDE70724EBE70022294611A8FEF72D +S3150800830895FE0446ECE700BF3C1600202DE9F0412F +S3150800831882B080460E4617460446002501E0A44664 +S315080083286446731EAB4213DD6B46012201A9384623 +S31508008338FFF748FC009B012B0AD19DF804300D2B4A +S31508008348EDD0A4460CF8013B01350A2BE8D1644662 +S31508008358002323701DB1404602B0BDE8F081002015 +S31508008368FAE710B594B004460191002302930393E3 +S3150800837803E0013401A8FFF7FAFD21780029F8D1AE +S31508008388029A002A0CDB6B4604A90198FFF7F5FC4C +S3150800839848B9029A009B9A4208D1039814B010BDAE +S315080083A84FF0FF30FAE74FF0FF30F7E74FF0FF30AE +S315080083B8F4E700007F2817D931B1FF2813D8803889 +S315080083C80A4B33F81000704700237F2B07D8074A53 +S315080083D832F81320824202D001339BB2F5E703F143 +S315080083E88000C0B270470020704700BF248D00087F +S315080083F8B0F5805F07D2234B1A88002A41D09042ED +S315080084083FD310B506E0204BF6E773461A88DAB16B +S31508008418904219D303F1040E5B88190ADBB203EB01 +S31508008428020C604504DB0029EFD10EEB4303EDE7A8 +S31508008438082909D8DFE801F005090F1215181B1EC7 +S315080084482100821A3EF8120010BD831A03F00103B0 +S31508008458C01A80B2F8E7103880B2F5E7203880B23B +S31508008468F2E7303880B2EFE71A3880B2ECE708301E +S3150800847880B2E9E7503880B2E6E7A0F5E35080B263 +S31508008488E2E77047248E0008189000082023038026 +S3150800849800487047480000200A23038000487047B0 +S315080084A86800002008B590F89C32032B01D00020FC +S315080084B808BDFDF719F9FAE708B5FDF715F900201B +S315080084C808BD08B50846FDF743F9002008BD0000B1 +S315080084D808B50B7813F0600F06D14B780A2B14D021 +S315080084E80B2B17D0062B01D0002008BD4B881B0A7A +S315080084F8212B04D00B491722FCF79CFBF4E7CA8802 +S31508008508172A28BF17220849F6E701220749FCF760 +S3150800851891FBE9E78B7813B9044A1360E4E7FCF79B +S315080085287DF8E1E7510000205A0000207C18002059 +S3150800853810B50446812100F088F90121204600F08B +S3150800854884F9002010BD000010B504464023022215 +S31508008558812100F06FF9402302220121204600F00C +S3150800856869F94023034A0121204600F0ADF90020A5 +S3150800857810BD00BF3C180020004870473C18002072 +S3150800858812230B80004870479000002004230B80B4 +S3150800859800487047A4000020002393421ED200B565 +S315080085A810E00CF1370C01F813C000014FEA430C30 +S315080085B80CF1010C4FF0000E01F80CE00133DBB2A8 +S315080085C8934209D24FEA107CB0F1204FE9D20CF158 +S315080085D8300C01F813C0E8E75DF804FB70470000A3 +S315080085E838B50B4BD3F8AC07D3F8B047D3F8B4373C +S315080085F8C01800D138BD074D0822A91CFFF7CCFFC3 +S31508008608042205F112012046FFF7C6FFF2E700BF6C +S3150800861800F0FF1FA800002008B51A230B80FFF7F3 +S31508008628DFFF014808BD00BFA800002008B50A46B4 +S3150800863828B905490548FCF7E0FA034808BD024980 +S315080086480248FCF7DAFAF8E780180020D490000800 +S3150800865810B50A46034C21460348FCF7CEFA2046CD +S3150800866810BD00BF80180020E890000808B50A4623 +S3150800867828B905490548FCF7C0FA034808BD024960 +S315080086880248FCF7BAFAF8E780180020F8900008BC +S3150800869808B50A4628B905490548FCF7AEFA034855 +S315080086A808BD02490248FCF7A8FAF8E7801800202E +S315080086B800910008022805D8DFE800F00504020042 +S315080086C8012070470220704708B500F52C71D0F8CC +S315080086D8E802FBF753FE08BD08B501EB810300EB7A +S315080086E8C303D3F87C21D0F8E802FBF774FE08BD6B +S315080086F808B501EB810300EBC303DA6BD0F8E8028F +S31508008708FBF7AFFE08BD08B5D0F8E802FBF750FF3F +S3150800871808BD000010B504468368022B09D101215B +S31508008728D4F8E802FBF72DFFD4F8E802FBF701FFB7 +S3150800873810BD8E210148FDF737F8F0E718910008B3 +S3150800874810B50446F7F760FDD4F8E802FBF71CFFF6 +S31508008758A36923B1024A136943F00603136110BDDE +S3150800876800ED00E008B5D0F8E802FBF716FFF7F7C2 +S315080087784CFD08BD10B504461F48C0F8E842C4F8C1 +S31508008788C0021E4B0360082343600223836003610B +S31508008798002383610362F8F7D9FE30BB1823002249 +S315080087A81146D4F8C002F9F72AFE58230022802178 +S315080087B8D4F8C002F9F723FEC02300228121D4F891 +S315080087C8C002F9F71CFE4FF4887300220121D4F879 +S315080087D8C002F9F714FE4FF4807300228221D4F8F8 +S315080087E8C002F9F70CFE002010BD40F21B11044820 +S315080087F8FCF7DAFFD2E700BF18030020005C004048 +S315080088081891000808B5D0F8C002F8F704FFFFF772 +S3150800881851FF08BD08B5D0F8C002F8F713FFFFF7EF +S3150800882849FF08BD08B5D0F8C002F8F724FFFFF7D6 +S3150800883841FF08BD08B594461A466346D0F8C002F3 +S31508008848F9F7B5FCFFF736FF08BD08B5D0F8C0023A +S31508008858F9F7EBFCFFF72EFF08BD08B5D0F8C002FC +S31508008868F9F75DFDFFF726FF08BD08B5D0F8C00281 +S31508008878F9F78AFDFFF71EFF08BDD0F8C03211F0D8 +S31508008888800F08D101F07F0101EB810103EBC101DB +S3150800889891F86A01704701F07F01013101EB810106 +S315080088A803EBC1018878704708B5D0F8C002F9F714 +S315080088B8D1FBFFF7FFFE08BD08B5D0F8C002F9F7E7 +S315080088C80CFDFFF7F7FE08BD08B5D0F8C002F9F7A2 +S315080088D8DEFCFFF7EFFE08BD08B5D0F8C002F9F7C9 +S315080088E8F3FC08BD08B5012903D00020F7F77EFC7C +S315080088F808BD0120F7F77AFCFAE7000070B50D4DB8 +S315080089080D4C641BA4100026A64209D10B4D0C4C2D +S3150800891800F020F8641BA4100026A64205D170BDF5 +S3150800892855F8043B98470136EEE755F8043B98474F +S315080089380136F2E73C9200083C9200083C9200088F +S315080089484092000802440346934200D1704703F850 +S31508008958011BF9E7F8B500BFF8BC08BC9E46704786 +S31108008968F8B500BFF8BC08BC9E46704776 +S315080089742F626F6F746C6F672E7478740000000032 +S315080089842F64656D6F70726F675F6F6C696D65785C +S31508008994696E6F5F73746D333266332E73726563F3 +S315080089A400000000000000000000000001020304AB +S315080089B4060708090000000001020304433A2F577A +S315080089C46F726B2F736F6674776172652F4F70655C +S315080089D46E424C542F5461726765742F536F7572C7 +S315080089E463652F41524D434D345F53544D333246DC +S315080089F4332F63616E2E630005020602060307031E +S31508008A040803090309040A040B040C040C050D05E0 +S31508008A140E050F050F06100610071008433A2F57C0 +S31508008A246F726B2F736F6674776172652F4F7065FB +S31508008A346E424C542F5461726765742F536F757266 +S31508008A4463652F41524D434D345F53544D3332467B +S31508008A54332F72733233322E63000000433A2F5792 +S31508008A646F726B2F736F6674776172652F4F7065BB +S31508008A746E424C542F5461726765742F536F757226 +S31508008A8463652F41524D434D345F53544D3332463B +S31508008A94332F7573622E6300303A0000433A2F571A +S31508008AA46F726B2F736F6674776172652F4F70657B +S31508008AB46E424C542F5461726765742F536F7572E6 +S31508008AC463652F66696C652E630000004669726DDE +S31508008AD47761726520757064617465207265717555 +S31508008AE46573742064657465637465640A0D0000AF +S31508008AF44F70656E696E67206669726D7761726517 +S31508008B042066696C6520666F722072656164696E99 +S31508008B14672E2E2E000000004552524F520A0D00B1 +S31508008B244F4B0A0D000000005374617274696E6736 +S31508008B34207468652070726F6772616D6D696E67FF +S31508008B442073657175656E63650A0D0050617273ED +S31508008B54696E67206669726D776172652066696CED +S31508008B646520746F20646574656374206572617327 +S31508008B746520626C6F636B732E2E2E0045726173CB +S31508008B84696E6720000000002062797465732066A8 +S31508008B94726F6D206D656D6F7279206174203078FF +S31508008BA40000000052656164696E67206C696E6531 +S31508008BB42066726F6D2066696C652E2E2E4552529C +S31508008BC44F520A0D00000000496E76616C696420F4 +S31508008BD4636865636B73756D20666F756E642E2E98 +S31508008BE42E4552524F520A0D0000000050726F670C +S31508008BF472616D6D696E67200000000020627974E9 +S31508008C04657320746F206D656D6F727920617420A9 +S31508008C143078000057726974696E672070726F67DE +S31508008C2472616D20636865636B73756D2E2E2E00F5 +S31508008C34436C6F73696E67206669726D77617265D6 +S31508008C442066696C650A0D004669726D77617265FE +S31508008C5420757064617465207375636365737366E0 +S31508008C64756C6C7920636F6D706C657465640A0D38 +S31508008C74000000004F70656E424C5400222A3A3CAC +S31508008C843E3F7C7F000000002B2C3B3D5B5D0000D3 +S31508008C94809A45418E418F804545454949498E8F7D +S31508008CA49092924F994F555559999A9B9C9D9E9F80 +S31508008CB441494F55A5A5A6A7A8A9AAABACADAEAF81 +S31508008CC4B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF1A +S31508008CD4C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF0A +S31508008CE4D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFFA +S31508008CF4E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFEA +S31508008D04F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFD9 +S31508008D1401030507090E10121416181C1E0000007C +S31508008D24C700FC00E900E200E400E000E500E70013 +S31508008D34EA00EB00E800EF00EE00EC00C400C50012 +S31508008D44C900E600C600F400F600F200FB00F900CC +S31508008D54FF00D600DC00A200A300A500A72092010C +S31508008D64E100ED00F300FA00F100D100AA00BA0010 +S31508008D74BF001023AC00BD00BC00A100AB00BB00C3 +S31508008D8491259225932502252425612562255625B4 +S31508008D9455256325512557255D255C255B25102515 +S31508008DA4142534252C251C2500253C255E255F2500 +S31508008DB45A25542569256625602550256C25672579 +S31508008DC468256425652559255825522553256B2577 +S31508008DD46A2518250C25882584258C259025802523 +S31508008DE4B103DF009303C003A303C303B500C4039D +S31508008DF4A6039803A903B4031E22C603B5032922AE +S31508008E046122B1006522642220232123F700482227 +S31508008E14B0001922B7001A227F20B200A025A000AC +S31508008E2461001A03E0001703F8000703FF000100B6 +S31508008E3478010001300132010601390110014A01A5 +S31508008E442E017901060180014D0043028101820148 +S31508008E5482018401840186018701870189018A01C7 +S31508008E648B018B018D018E018F0190019101910176 +S31508008E7493019401F60196019701980198013D0220 +S31508008E849B019C019D0120029F01A001A001A20152 +S31508008E94A201A401A401A601A701A701A901AA0187 +S31508008EA4AB01AC01AC01AE01AF01AF01B101B20136 +S31508008EB4B301B301B501B501B701B801B801BA01E7 +S31508008EC4BB01BC01BC01BE01F701C001C101C2015D +S31508008ED4C301C401C501C401C701C801C701CA0148 +S31508008EE4CB01CA01CD011001DD0101008E01DE01AD +S31508008EF41201F3010300F101F401F401F801280158 +S31508008F04220212013A020900652C3B023B023D0289 +S31508008F14662C3F0240024102410246020A015302FC +S31508008F24400081018601550289018A0158028F0190 +S31508008F345A0290015C025D025E025F0293016102BD +S31508008F446202940164026502660267029701960149 +S31508008F546A02622C6C026D026E029C017002710236 +S31508008F649D01730274029F017602770278027902E0 +S31508008F747A027B027C02642C7E027F02A6018102AD +S31508008F848202A9018402850286028702AE0144028E +S31508008F94B101B20145028D028E028F02900291023E +S31508008FA4B7017B030300FD03FE03FF03AC030400C0 +S31508008FB48603880389038A03B1031103C2030200E3 +S31508008FC4A303A303C4030803CC0303008C038E037F +S31508008FD48F03D8031801F2030A00F903F303F40311 +S31508008FE4F503F603F703F703F903FA03FA03300460 +S31508008FF4200350041007600422018A043601C104C0 +S315080090040E01CF040100C004D004440161052604FE +S31508009014000000007D1D0100632C001E9601A01EA1 +S315080090245A01001F0806101F0606201F0806301FCF +S315080090340806401F0606511F0700591F521F5B1FCB +S31508009044541F5D1F561F5F1F601F0806701F0E0002 +S31508009054BA1FBB1FC81FC91FCA1FCB1FDA1FDB1FB6 +S31508009064F81FF91FEA1FEB1FFA1FFB1F801F0806CC +S31508009074901F0806A01F0806B01F0400B81FB91FD2 +S31508009084B21FBC1FCC1F0100C31FD01F0206E01F5E +S315080090940206E51F0100EC1FF21F0100FC1F4E210A +S315080090A40100322170211002842101008321D02479 +S315080090B41A05302C2F04602C0201672C0601752C26 +S315080090C40201802C6401002D260841FF1A030000C2 +S315080090D457696E5553422042756C6B204465766910 +S315080090E4636500004F70656E424C54205573657273 +S315080090F40000000044656661756C740057696E5516 +S3150800910453422042756C6B20496E746572666163BE +S31508009114650000002E2E2F5553425F444556494399 +S31508009124452F5461726765742F757362645F636F44 +S315080091346E662E6300002020202020202020202870 +S3150800914428282828202020202020202020202020ED +S315080091542020202020208810101010101010101025 +S315080091641010101010100404040404040404040465 +S3150800917410101010101010414141414141010101E4 +S3150800918401010101010101010101010101010101BD +S3150800919401101010101010424242424242020202CA +S315080091A4020202020202020202020202020202028D +S315080091B4021010101020000000000000000000003B +S315080091C4000000000000000000000000000000008D +S315080091D4000000000000000000000000000000007D +S315080091E4000000000000000000000000000000006D +S315080091F4000000000000000000000000000000005D +S31508009204000000000000000000000000000000004C +S31508009214000000000000000000000000000000003C +S31508009224000000000000000000000000000000002C +S30D08009234000000000000000024 +S3090800923CAD0100086A +S30908009240890100088A +S3150800924400127A000100000010000000010400006A +S315080092545185000839850008D984000800000000F3 +S3150800926400000000C1840008CB840008AD8400080F +S3150800927400000000000000000000000095840008BB +S3150800928400000000A184000809022000010100C0B2 +S31508009294320904000002FF000000070581024000AD +S315080092A4FF070501024000FF0A06100100000040FE +S315080092B4010000008985000895850008598600087C +S315080092C435860008218600087586000899860008F0 +S315080092D41201100100000040501DAC60000101029B +S315080092E403010000040309041A0300000000000037 +S315080092F4000000000000000000000000000000005C +S309080093040000000057 +S705080007F1FA diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h new file mode 100644 index 00000000..244963f3 --- /dev/null +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h @@ -0,0 +1,2252 @@ +/** + ****************************************************************************** + * @file stm32f3xx_ll_spi.h + * @author MCD Application Team + * @brief Header file of SPI LL module. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef STM32F3xx_LL_SPI_H +#define STM32F3xx_LL_SPI_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx.h" + +/** @addtogroup STM32F3xx_LL_Driver + * @{ + */ + +#if defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) + +/** @defgroup SPI_LL SPI + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup SPI_LL_ES_INIT SPI Exported Init structure + * @{ + */ + +/** + * @brief SPI Init structures definition + */ +typedef struct +{ + uint32_t TransferDirection; /*!< Specifies the SPI unidirectional or bidirectional data mode. + This parameter can be a value of @ref SPI_LL_EC_TRANSFER_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferDirection().*/ + + uint32_t Mode; /*!< Specifies the SPI mode (Master/Slave). + This parameter can be a value of @ref SPI_LL_EC_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetMode().*/ + + uint32_t DataWidth; /*!< Specifies the SPI data width. + This parameter can be a value of @ref SPI_LL_EC_DATAWIDTH. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetDataWidth().*/ + + uint32_t ClockPolarity; /*!< Specifies the serial clock steady state. + This parameter can be a value of @ref SPI_LL_EC_POLARITY. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPolarity().*/ + + uint32_t ClockPhase; /*!< Specifies the clock active edge for the bit capture. + This parameter can be a value of @ref SPI_LL_EC_PHASE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPhase().*/ + + uint32_t NSS; /*!< Specifies whether the NSS signal is managed by hardware (NSS pin) or by software using the SSI bit. + This parameter can be a value of @ref SPI_LL_EC_NSS_MODE. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetNSSMode().*/ + + uint32_t BaudRate; /*!< Specifies the BaudRate prescaler value which will be used to configure the transmit and receive SCK clock. + This parameter can be a value of @ref SPI_LL_EC_BAUDRATEPRESCALER. + @note The communication clock is derived from the master clock. The slave clock does not need to be set. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetBaudRatePrescaler().*/ + + uint32_t BitOrder; /*!< Specifies whether data transfers start from MSB or LSB bit. + This parameter can be a value of @ref SPI_LL_EC_BIT_ORDER. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferBitOrder().*/ + + uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not. + This parameter can be a value of @ref SPI_LL_EC_CRC_CALCULATION. + + This feature can be modified afterwards using unitary functions @ref LL_SPI_EnableCRC() and @ref LL_SPI_DisableCRC().*/ + + uint32_t CRCPoly; /*!< Specifies the polynomial used for the CRC calculation. + This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF. + + This feature can be modified afterwards using unitary function @ref LL_SPI_SetCRCPolynomial().*/ + +} LL_SPI_InitTypeDef; + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Constants SPI Exported Constants + * @{ + */ + +/** @defgroup SPI_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_SPI_ReadReg function + * @{ + */ +#define LL_SPI_SR_RXNE SPI_SR_RXNE /*!< Rx buffer not empty flag */ +#define LL_SPI_SR_TXE SPI_SR_TXE /*!< Tx buffer empty flag */ +#define LL_SPI_SR_BSY SPI_SR_BSY /*!< Busy flag */ +#define LL_SPI_SR_CRCERR SPI_SR_CRCERR /*!< CRC error flag */ +#define LL_SPI_SR_MODF SPI_SR_MODF /*!< Mode fault flag */ +#define LL_SPI_SR_OVR SPI_SR_OVR /*!< Overrun flag */ +#define LL_SPI_SR_FRE SPI_SR_FRE /*!< TI mode frame format error flag */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions + * @{ + */ +#define LL_SPI_CR2_RXNEIE SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */ +#define LL_SPI_CR2_TXEIE SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */ +#define LL_SPI_CR2_ERRIE SPI_CR2_ERRIE /*!< Error interrupt enable */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_MODE Operation Mode + * @{ + */ +#define LL_SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI) /*!< Master configuration */ +#define LL_SPI_MODE_SLAVE 0x00000000U /*!< Slave configuration */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_PROTOCOL Serial Protocol + * @{ + */ +#define LL_SPI_PROTOCOL_MOTOROLA 0x00000000U /*!< Motorola mode. Used as default value */ +#define LL_SPI_PROTOCOL_TI (SPI_CR2_FRF) /*!< TI mode */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_PHASE Clock Phase + * @{ + */ +#define LL_SPI_PHASE_1EDGE 0x00000000U /*!< First clock transition is the first data capture edge */ +#define LL_SPI_PHASE_2EDGE (SPI_CR1_CPHA) /*!< Second clock transition is the first data capture edge */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_SPI_POLARITY_LOW 0x00000000U /*!< Clock to 0 when idle */ +#define LL_SPI_POLARITY_HIGH (SPI_CR1_CPOL) /*!< Clock to 1 when idle */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_BAUDRATEPRESCALER Baud Rate Prescaler + * @{ + */ +#define LL_SPI_BAUDRATEPRESCALER_DIV2 0x00000000U /*!< BaudRate control equal to fPCLK/2 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV4 (SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/4 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV8 (SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/8 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV16 (SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/16 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV32 (SPI_CR1_BR_2) /*!< BaudRate control equal to fPCLK/32 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV64 (SPI_CR1_BR_2 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/64 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV128 (SPI_CR1_BR_2 | SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/128 */ +#define LL_SPI_BAUDRATEPRESCALER_DIV256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/256 */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_BIT_ORDER Transmission Bit Order + * @{ + */ +#define LL_SPI_LSB_FIRST (SPI_CR1_LSBFIRST) /*!< Data is transmitted/received with the LSB first */ +#define LL_SPI_MSB_FIRST 0x00000000U /*!< Data is transmitted/received with the MSB first */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_TRANSFER_MODE Transfer Mode + * @{ + */ +#define LL_SPI_FULL_DUPLEX 0x00000000U /*!< Full-Duplex mode. Rx and Tx transfer on 2 lines */ +#define LL_SPI_SIMPLEX_RX (SPI_CR1_RXONLY) /*!< Simplex Rx mode. Rx transfer only on 1 line */ +#define LL_SPI_HALF_DUPLEX_RX (SPI_CR1_BIDIMODE) /*!< Half-Duplex Rx mode. Rx transfer on 1 line */ +#define LL_SPI_HALF_DUPLEX_TX (SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE) /*!< Half-Duplex Tx mode. Tx transfer on 1 line */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_NSS_MODE Slave Select Pin Mode + * @{ + */ +#define LL_SPI_NSS_SOFT (SPI_CR1_SSM) /*!< NSS managed internally. NSS pin not used and free */ +#define LL_SPI_NSS_HARD_INPUT 0x00000000U /*!< NSS pin used in Input. Only used in Master mode */ +#define LL_SPI_NSS_HARD_OUTPUT (((uint32_t)SPI_CR2_SSOE << 16U)) /*!< NSS pin used in Output. Only used in Slave mode as chip select */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_DATAWIDTH Datawidth + * @{ + */ +#define LL_SPI_DATAWIDTH_4BIT (SPI_CR2_DS_0 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 4 bits */ +#define LL_SPI_DATAWIDTH_5BIT (SPI_CR2_DS_2) /*!< Data length for SPI transfer: 5 bits */ +#define LL_SPI_DATAWIDTH_6BIT (SPI_CR2_DS_2 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 6 bits */ +#define LL_SPI_DATAWIDTH_7BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 7 bits */ +#define LL_SPI_DATAWIDTH_8BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 8 bits */ +#define LL_SPI_DATAWIDTH_9BIT (SPI_CR2_DS_3) /*!< Data length for SPI transfer: 9 bits */ +#define LL_SPI_DATAWIDTH_10BIT (SPI_CR2_DS_3 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 10 bits */ +#define LL_SPI_DATAWIDTH_11BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 11 bits */ +#define LL_SPI_DATAWIDTH_12BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 12 bits */ +#define LL_SPI_DATAWIDTH_13BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2) /*!< Data length for SPI transfer: 13 bits */ +#define LL_SPI_DATAWIDTH_14BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 14 bits */ +#define LL_SPI_DATAWIDTH_15BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 15 bits */ +#define LL_SPI_DATAWIDTH_16BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 16 bits */ +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup SPI_LL_EC_CRC_CALCULATION CRC Calculation + * @{ + */ +#define LL_SPI_CRCCALCULATION_DISABLE 0x00000000U /*!< CRC calculation disabled */ +#define LL_SPI_CRCCALCULATION_ENABLE (SPI_CR1_CRCEN) /*!< CRC calculation enabled */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** @defgroup SPI_LL_EC_CRC_LENGTH CRC Length + * @{ + */ +#define LL_SPI_CRC_8BIT 0x00000000U /*!< 8-bit CRC length */ +#define LL_SPI_CRC_16BIT (SPI_CR1_CRCL) /*!< 16-bit CRC length */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_RX_FIFO_TH RX FIFO Threshold + * @{ + */ +#define LL_SPI_RX_FIFO_TH_HALF 0x00000000U /*!< RXNE event is generated if FIFO level is greater than or equal to 1/2 (16-bit) */ +#define LL_SPI_RX_FIFO_TH_QUARTER (SPI_CR2_FRXTH) /*!< RXNE event is generated if FIFO level is greater than or equal to 1/4 (8-bit) */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_RX_FIFO RX FIFO Level + * @{ + */ +#define LL_SPI_RX_FIFO_EMPTY 0x00000000U /*!< FIFO reception empty */ +#define LL_SPI_RX_FIFO_QUARTER_FULL (SPI_SR_FRLVL_0) /*!< FIFO reception 1/4 */ +#define LL_SPI_RX_FIFO_HALF_FULL (SPI_SR_FRLVL_1) /*!< FIFO reception 1/2 */ +#define LL_SPI_RX_FIFO_FULL (SPI_SR_FRLVL_1 | SPI_SR_FRLVL_0) /*!< FIFO reception full */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_TX_FIFO TX FIFO Level + * @{ + */ +#define LL_SPI_TX_FIFO_EMPTY 0x00000000U /*!< FIFO transmission empty */ +#define LL_SPI_TX_FIFO_QUARTER_FULL (SPI_SR_FTLVL_0) /*!< FIFO transmission 1/4 */ +#define LL_SPI_TX_FIFO_HALF_FULL (SPI_SR_FTLVL_1) /*!< FIFO transmission 1/2 */ +#define LL_SPI_TX_FIFO_FULL (SPI_SR_FTLVL_1 | SPI_SR_FTLVL_0) /*!< FIFO transmission full */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_DMA_PARITY DMA Parity + * @{ + */ +#define LL_SPI_DMA_PARITY_EVEN 0x00000000U /*!< Select DMA parity Even */ +#define LL_SPI_DMA_PARITY_ODD 0x00000001U /*!< Select DMA parity Odd */ + +/** + * @} + */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Macros SPI Exported Macros + * @{ + */ + +/** @defgroup SPI_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in SPI register + * @param __INSTANCE__ SPI Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in SPI register + * @param __INSTANCE__ SPI Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + +/* Exported functions --------------------------------------------------------*/ +/** @defgroup SPI_LL_Exported_Functions SPI Exported Functions + * @{ + */ + +/** @defgroup SPI_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Enable SPI peripheral + * @rmtoll CR1 SPE LL_SPI_Enable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Disable SPI peripheral + * @note When disabling the SPI, follow the procedure described in the Reference Manual. + * @rmtoll CR1 SPE LL_SPI_Disable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Check if SPI peripheral is enabled + * @rmtoll CR1 SPE LL_SPI_IsEnabled + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL); +} + +/** + * @brief Set SPI operation mode to Master or Slave + * @note This bit should not be changed when communication is ongoing. + * @rmtoll CR1 MSTR LL_SPI_SetMode\n + * CR1 SSI LL_SPI_SetMode + * @param SPIx SPI Instance + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_SPI_MODE_MASTER + * @arg @ref LL_SPI_MODE_SLAVE + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode); +} + +/** + * @brief Get SPI operation mode (Master or Slave) + * @rmtoll CR1 MSTR LL_SPI_GetMode\n + * CR1 SSI LL_SPI_GetMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_MODE_MASTER + * @arg @ref LL_SPI_MODE_SLAVE + */ +__STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI)); +} + +/** + * @brief Set serial protocol used + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR2 FRF LL_SPI_SetStandard + * @param SPIx SPI Instance + * @param Standard This parameter can be one of the following values: + * @arg @ref LL_SPI_PROTOCOL_MOTOROLA + * @arg @ref LL_SPI_PROTOCOL_TI + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard) +{ + MODIFY_REG(SPIx->CR2, SPI_CR2_FRF, Standard); +} + +/** + * @brief Get serial protocol used + * @rmtoll CR2 FRF LL_SPI_GetStandard + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_PROTOCOL_MOTOROLA + * @arg @ref LL_SPI_PROTOCOL_TI + */ +__STATIC_INLINE uint32_t LL_SPI_GetStandard(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRF)); +} + +/** + * @brief Set clock phase + * @note This bit should not be changed when communication is ongoing. + * This bit is not used in SPI TI mode. + * @rmtoll CR1 CPHA LL_SPI_SetClockPhase + * @param SPIx SPI Instance + * @param ClockPhase This parameter can be one of the following values: + * @arg @ref LL_SPI_PHASE_1EDGE + * @arg @ref LL_SPI_PHASE_2EDGE + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase); +} + +/** + * @brief Get clock phase + * @rmtoll CR1 CPHA LL_SPI_GetClockPhase + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_PHASE_1EDGE + * @arg @ref LL_SPI_PHASE_2EDGE + */ +__STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA)); +} + +/** + * @brief Set clock polarity + * @note This bit should not be changed when communication is ongoing. + * This bit is not used in SPI TI mode. + * @rmtoll CR1 CPOL LL_SPI_SetClockPolarity + * @param SPIx SPI Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_SPI_POLARITY_LOW + * @arg @ref LL_SPI_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity); +} + +/** + * @brief Get clock polarity + * @rmtoll CR1 CPOL LL_SPI_GetClockPolarity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_POLARITY_LOW + * @arg @ref LL_SPI_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL)); +} + +/** + * @brief Set baud rate prescaler + * @note These bits should not be changed when communication is ongoing. SPI BaudRate = fPCLK/Prescaler. + * @rmtoll CR1 BR LL_SPI_SetBaudRatePrescaler + * @param SPIx SPI Instance + * @param BaudRate This parameter can be one of the following values: + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256 + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_BR, BaudRate); +} + +/** + * @brief Get baud rate prescaler + * @rmtoll CR1 BR LL_SPI_GetBaudRatePrescaler + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128 + * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256 + */ +__STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR)); +} + +/** + * @brief Set transfer bit order + * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode. + * @rmtoll CR1 LSBFIRST LL_SPI_SetTransferBitOrder + * @param SPIx SPI Instance + * @param BitOrder This parameter can be one of the following values: + * @arg @ref LL_SPI_LSB_FIRST + * @arg @ref LL_SPI_MSB_FIRST + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder); +} + +/** + * @brief Get transfer bit order + * @rmtoll CR1 LSBFIRST LL_SPI_GetTransferBitOrder + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_LSB_FIRST + * @arg @ref LL_SPI_MSB_FIRST + */ +__STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST)); +} + +/** + * @brief Set transfer direction mode + * @note For Half-Duplex mode, Rx Direction is set by default. + * In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex. + * @rmtoll CR1 RXONLY LL_SPI_SetTransferDirection\n + * CR1 BIDIMODE LL_SPI_SetTransferDirection\n + * CR1 BIDIOE LL_SPI_SetTransferDirection + * @param SPIx SPI Instance + * @param TransferDirection This parameter can be one of the following values: + * @arg @ref LL_SPI_FULL_DUPLEX + * @arg @ref LL_SPI_SIMPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_TX + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE, TransferDirection); +} + +/** + * @brief Get transfer direction mode + * @rmtoll CR1 RXONLY LL_SPI_GetTransferDirection\n + * CR1 BIDIMODE LL_SPI_GetTransferDirection\n + * CR1 BIDIOE LL_SPI_GetTransferDirection + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_FULL_DUPLEX + * @arg @ref LL_SPI_SIMPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_RX + * @arg @ref LL_SPI_HALF_DUPLEX_TX + */ +__STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE)); +} + +/** + * @brief Set frame data width + * @rmtoll CR2 DS LL_SPI_SetDataWidth + * @param SPIx SPI Instance + * @param DataWidth This parameter can be one of the following values: + * @arg @ref LL_SPI_DATAWIDTH_4BIT + * @arg @ref LL_SPI_DATAWIDTH_5BIT + * @arg @ref LL_SPI_DATAWIDTH_6BIT + * @arg @ref LL_SPI_DATAWIDTH_7BIT + * @arg @ref LL_SPI_DATAWIDTH_8BIT + * @arg @ref LL_SPI_DATAWIDTH_9BIT + * @arg @ref LL_SPI_DATAWIDTH_10BIT + * @arg @ref LL_SPI_DATAWIDTH_11BIT + * @arg @ref LL_SPI_DATAWIDTH_12BIT + * @arg @ref LL_SPI_DATAWIDTH_13BIT + * @arg @ref LL_SPI_DATAWIDTH_14BIT + * @arg @ref LL_SPI_DATAWIDTH_15BIT + * @arg @ref LL_SPI_DATAWIDTH_16BIT + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth) +{ + MODIFY_REG(SPIx->CR2, SPI_CR2_DS, DataWidth); +} + +/** + * @brief Get frame data width + * @rmtoll CR2 DS LL_SPI_GetDataWidth + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_DATAWIDTH_4BIT + * @arg @ref LL_SPI_DATAWIDTH_5BIT + * @arg @ref LL_SPI_DATAWIDTH_6BIT + * @arg @ref LL_SPI_DATAWIDTH_7BIT + * @arg @ref LL_SPI_DATAWIDTH_8BIT + * @arg @ref LL_SPI_DATAWIDTH_9BIT + * @arg @ref LL_SPI_DATAWIDTH_10BIT + * @arg @ref LL_SPI_DATAWIDTH_11BIT + * @arg @ref LL_SPI_DATAWIDTH_12BIT + * @arg @ref LL_SPI_DATAWIDTH_13BIT + * @arg @ref LL_SPI_DATAWIDTH_14BIT + * @arg @ref LL_SPI_DATAWIDTH_15BIT + * @arg @ref LL_SPI_DATAWIDTH_16BIT + */ +__STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DS)); +} + +/** + * @brief Set threshold of RXFIFO that triggers an RXNE event + * @rmtoll CR2 FRXTH LL_SPI_SetRxFIFOThreshold + * @param SPIx SPI Instance + * @param Threshold This parameter can be one of the following values: + * @arg @ref LL_SPI_RX_FIFO_TH_HALF + * @arg @ref LL_SPI_RX_FIFO_TH_QUARTER + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetRxFIFOThreshold(SPI_TypeDef *SPIx, uint32_t Threshold) +{ + MODIFY_REG(SPIx->CR2, SPI_CR2_FRXTH, Threshold); +} + +/** + * @brief Get threshold of RXFIFO that triggers an RXNE event + * @rmtoll CR2 FRXTH LL_SPI_GetRxFIFOThreshold + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_RX_FIFO_TH_HALF + * @arg @ref LL_SPI_RX_FIFO_TH_QUARTER + */ +__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOThreshold(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRXTH)); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_CRC_Management CRC Management + * @{ + */ + +/** + * @brief Enable CRC + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_EnableCRC + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_CRCEN); +} + +/** + * @brief Disable CRC + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_DisableCRC + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN); +} + +/** + * @brief Check if CRC is enabled + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCEN LL_SPI_IsEnabledCRC + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR1, SPI_CR1_CRCEN) == (SPI_CR1_CRCEN)) ? 1UL : 0UL); +} + +/** + * @brief Set CRC Length + * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation. + * @rmtoll CR1 CRCL LL_SPI_SetCRCWidth + * @param SPIx SPI Instance + * @param CRCLength This parameter can be one of the following values: + * @arg @ref LL_SPI_CRC_8BIT + * @arg @ref LL_SPI_CRC_16BIT + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetCRCWidth(SPI_TypeDef *SPIx, uint32_t CRCLength) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_CRCL, CRCLength); +} + +/** + * @brief Get CRC Length + * @rmtoll CR1 CRCL LL_SPI_GetCRCWidth + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_CRC_8BIT + * @arg @ref LL_SPI_CRC_16BIT + */ +__STATIC_INLINE uint32_t LL_SPI_GetCRCWidth(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CRCL)); +} + +/** + * @brief Set CRCNext to transfer CRC on the line + * @note This bit has to be written as soon as the last data is written in the SPIx_DR register. + * @rmtoll CR1 CRCNEXT LL_SPI_SetCRCNext + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT); +} + +/** + * @brief Set polynomial for CRC calculation + * @rmtoll CRCPR CRCPOLY LL_SPI_SetCRCPolynomial + * @param SPIx SPI Instance + * @param CRCPoly This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly) +{ + WRITE_REG(SPIx->CRCPR, (uint16_t)CRCPoly); +} + +/** + * @brief Get polynomial for CRC calculation + * @rmtoll CRCPR CRCPOLY LL_SPI_GetCRCPolynomial + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->CRCPR)); +} + +/** + * @brief Get Rx CRC + * @rmtoll RXCRCR RXCRC LL_SPI_GetRxCRC + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->RXCRCR)); +} + +/** + * @brief Get Tx CRC + * @rmtoll TXCRCR TXCRC LL_SPI_GetTxCRC + * @param SPIx SPI Instance + * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF + */ +__STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_REG(SPIx->TXCRCR)); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_NSS_Management Slave Select Pin Management + * @{ + */ + +/** + * @brief Set NSS mode + * @note LL_SPI_NSS_SOFT Mode is not used in SPI TI mode. + * @rmtoll CR1 SSM LL_SPI_SetNSSMode\n + * @rmtoll CR2 SSOE LL_SPI_SetNSSMode + * @param SPIx SPI Instance + * @param NSS This parameter can be one of the following values: + * @arg @ref LL_SPI_NSS_SOFT + * @arg @ref LL_SPI_NSS_HARD_INPUT + * @arg @ref LL_SPI_NSS_HARD_OUTPUT + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS) +{ + MODIFY_REG(SPIx->CR1, SPI_CR1_SSM, NSS); + MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16U))); +} + +/** + * @brief Get NSS mode + * @rmtoll CR1 SSM LL_SPI_GetNSSMode\n + * @rmtoll CR2 SSOE LL_SPI_GetNSSMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_NSS_SOFT + * @arg @ref LL_SPI_NSS_HARD_INPUT + * @arg @ref LL_SPI_NSS_HARD_OUTPUT + */ +__STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx) +{ + uint32_t Ssm = (READ_BIT(SPIx->CR1, SPI_CR1_SSM)); + uint32_t Ssoe = (READ_BIT(SPIx->CR2, SPI_CR2_SSOE) << 16U); + return (Ssm | Ssoe); +} + +/** + * @brief Enable NSS pulse management + * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode. + * @rmtoll CR2 NSSP LL_SPI_EnableNSSPulseMgt + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableNSSPulseMgt(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_NSSP); +} + +/** + * @brief Disable NSS pulse management + * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode. + * @rmtoll CR2 NSSP LL_SPI_DisableNSSPulseMgt + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableNSSPulseMgt(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_NSSP); +} + +/** + * @brief Check if NSS pulse is enabled + * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode. + * @rmtoll CR2 NSSP LL_SPI_IsEnabledNSSPulse + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledNSSPulse(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_NSSP) == (SPI_CR2_NSSP)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_FLAG_Management FLAG Management + * @{ + */ + +/** + * @brief Check if Rx buffer is not empty + * @rmtoll SR RXNE LL_SPI_IsActiveFlag_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Tx buffer is empty + * @rmtoll SR TXE LL_SPI_IsActiveFlag_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE)) ? 1UL : 0UL); +} + +/** + * @brief Get CRC error flag + * @rmtoll SR CRCERR LL_SPI_IsActiveFlag_CRCERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR)) ? 1UL : 0UL); +} + +/** + * @brief Get mode fault error flag + * @rmtoll SR MODF LL_SPI_IsActiveFlag_MODF + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF)) ? 1UL : 0UL); +} + +/** + * @brief Get overrun error flag + * @rmtoll SR OVR LL_SPI_IsActiveFlag_OVR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR)) ? 1UL : 0UL); +} + +/** + * @brief Get busy flag + * @note The BSY flag is cleared under any one of the following conditions: + * -When the SPI is correctly disabled + * -When a fault is detected in Master mode (MODF bit set to 1) + * -In Master mode, when it finishes a data transmission and no new data is ready to be + * sent + * -In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between + * each data transfer. + * @rmtoll SR BSY LL_SPI_IsActiveFlag_BSY + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY)) ? 1UL : 0UL); +} + +/** + * @brief Get frame format error flag + * @rmtoll SR FRE LL_SPI_IsActiveFlag_FRE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_FRE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_FRE) == (SPI_SR_FRE)) ? 1UL : 0UL); +} + +/** + * @brief Get FIFO reception Level + * @rmtoll SR FRLVL LL_SPI_GetRxFIFOLevel + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_RX_FIFO_EMPTY + * @arg @ref LL_SPI_RX_FIFO_QUARTER_FULL + * @arg @ref LL_SPI_RX_FIFO_HALF_FULL + * @arg @ref LL_SPI_RX_FIFO_FULL + */ +__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOLevel(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FRLVL)); +} + +/** + * @brief Get FIFO Transmission Level + * @rmtoll SR FTLVL LL_SPI_GetTxFIFOLevel + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_TX_FIFO_EMPTY + * @arg @ref LL_SPI_TX_FIFO_QUARTER_FULL + * @arg @ref LL_SPI_TX_FIFO_HALF_FULL + * @arg @ref LL_SPI_TX_FIFO_FULL + */ +__STATIC_INLINE uint32_t LL_SPI_GetTxFIFOLevel(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FTLVL)); +} + +/** + * @brief Clear CRC error flag + * @rmtoll SR CRCERR LL_SPI_ClearFlag_CRCERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR); +} + +/** + * @brief Clear mode fault error flag + * @note Clearing this flag is done by a read access to the SPIx_SR + * register followed by a write access to the SPIx_CR1 register + * @rmtoll SR MODF LL_SPI_ClearFlag_MODF + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg_sr; + tmpreg_sr = SPIx->SR; + (void) tmpreg_sr; + CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE); +} + +/** + * @brief Clear overrun error flag + * @note Clearing this flag is done by a read access to the SPIx_DR + * register followed by a read access to the SPIx_SR register + * @rmtoll SR OVR LL_SPI_ClearFlag_OVR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->DR; + (void) tmpreg; + tmpreg = SPIx->SR; + (void) tmpreg; +} + +/** + * @brief Clear frame format error flag + * @note Clearing this flag is done by reading SPIx_SR register + * @rmtoll SR FRE LL_SPI_ClearFlag_FRE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->SR; + (void) tmpreg; +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_IT_Management Interrupt Management + * @{ + */ + +/** + * @brief Enable error interrupt + * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode). + * @rmtoll CR2 ERRIE LL_SPI_EnableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_ERRIE); +} + +/** + * @brief Enable Rx buffer not empty interrupt + * @rmtoll CR2 RXNEIE LL_SPI_EnableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE); +} + +/** + * @brief Enable Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_EnableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_TXEIE); +} + +/** + * @brief Disable error interrupt + * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode). + * @rmtoll CR2 ERRIE LL_SPI_DisableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE); +} + +/** + * @brief Disable Rx buffer not empty interrupt + * @rmtoll CR2 RXNEIE LL_SPI_DisableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE); +} + +/** + * @brief Disable Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_DisableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE); +} + +/** + * @brief Check if error interrupt is enabled + * @rmtoll CR2 ERRIE LL_SPI_IsEnabledIT_ERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Rx buffer not empty interrupt is enabled + * @rmtoll CR2 RXNEIE LL_SPI_IsEnabledIT_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE)) ? 1UL : 0UL); +} + +/** + * @brief Check if Tx buffer empty interrupt + * @rmtoll CR2 TXEIE LL_SPI_IsEnabledIT_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_DMA_Management DMA Management + * @{ + */ + +/** + * @brief Enable DMA Rx + * @rmtoll CR2 RXDMAEN LL_SPI_EnableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN); +} + +/** + * @brief Disable DMA Rx + * @rmtoll CR2 RXDMAEN LL_SPI_DisableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN); +} + +/** + * @brief Check if DMA Rx is enabled + * @rmtoll CR2 RXDMAEN LL_SPI_IsEnabledDMAReq_RX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN)) ? 1UL : 0UL); +} + +/** + * @brief Enable DMA Tx + * @rmtoll CR2 TXDMAEN LL_SPI_EnableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN); +} + +/** + * @brief Disable DMA Tx + * @rmtoll CR2 TXDMAEN LL_SPI_DisableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN); +} + +/** + * @brief Check if DMA Tx is enabled + * @rmtoll CR2 TXDMAEN LL_SPI_IsEnabledDMAReq_TX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN)) ? 1UL : 0UL); +} + +/** + * @brief Set parity of Last DMA reception + * @rmtoll CR2 LDMARX LL_SPI_SetDMAParity_RX + * @param SPIx SPI Instance + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_SPI_DMA_PARITY_ODD + * @arg @ref LL_SPI_DMA_PARITY_EVEN + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetDMAParity_RX(SPI_TypeDef *SPIx, uint32_t Parity) +{ + MODIFY_REG(SPIx->CR2, SPI_CR2_LDMARX, (Parity << SPI_CR2_LDMARX_Pos)); +} + +/** + * @brief Get parity configuration for Last DMA reception + * @rmtoll CR2 LDMARX LL_SPI_GetDMAParity_RX + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_DMA_PARITY_ODD + * @arg @ref LL_SPI_DMA_PARITY_EVEN + */ +__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_RX(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMARX) >> SPI_CR2_LDMARX_Pos); +} + +/** + * @brief Set parity of Last DMA transmission + * @rmtoll CR2 LDMATX LL_SPI_SetDMAParity_TX + * @param SPIx SPI Instance + * @param Parity This parameter can be one of the following values: + * @arg @ref LL_SPI_DMA_PARITY_ODD + * @arg @ref LL_SPI_DMA_PARITY_EVEN + * @retval None + */ +__STATIC_INLINE void LL_SPI_SetDMAParity_TX(SPI_TypeDef *SPIx, uint32_t Parity) +{ + MODIFY_REG(SPIx->CR2, SPI_CR2_LDMATX, (Parity << SPI_CR2_LDMATX_Pos)); +} + +/** + * @brief Get parity configuration for Last DMA transmission + * @rmtoll CR2 LDMATX LL_SPI_GetDMAParity_TX + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_SPI_DMA_PARITY_ODD + * @arg @ref LL_SPI_DMA_PARITY_EVEN + */ +__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_TX(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMATX) >> SPI_CR2_LDMATX_Pos); +} + +/** + * @brief Get the data register address used for DMA transfer + * @rmtoll DR DR LL_SPI_DMA_GetRegAddr + * @param SPIx SPI Instance + * @retval Address of data register + */ +__STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx) +{ + return (uint32_t) &(SPIx->DR); +} + +/** + * @} + */ + +/** @defgroup SPI_LL_EF_DATA_Management DATA Management + * @{ + */ + +/** + * @brief Read 8-Bits in the data register + * @rmtoll DR DR LL_SPI_ReceiveData8 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFF + */ +__STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx) +{ + return (*((__IO uint8_t *)&SPIx->DR)); +} + +/** + * @brief Read 16-Bits in the data register + * @rmtoll DR DR LL_SPI_ReceiveData16 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx) +{ + return (uint16_t)(READ_REG(SPIx->DR)); +} + +/** + * @brief Write 8-Bits in the data register + * @rmtoll DR DR LL_SPI_TransmitData8 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x00 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData) +{ +#if defined (__GNUC__) + __IO uint8_t *spidr = ((__IO uint8_t *)&SPIx->DR); + *spidr = TxData; +#else + *((__IO uint8_t *)&SPIx->DR) = TxData; +#endif /* __GNUC__ */ +} + +/** + * @brief Write 16-Bits in the data register + * @rmtoll DR DR LL_SPI_TransmitData16 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x00 and Max_Data=0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData) +{ +#if defined (__GNUC__) + __IO uint16_t *spidr = ((__IO uint16_t *)&SPIx->DR); + *spidr = TxData; +#else + SPIx->DR = TxData; +#endif /* __GNUC__ */ +} + +/** + * @} + */ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup SPI_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx); +ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct); +void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct); + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ +/** + * @} + */ + +/** + * @} + */ + +#if defined(SPI_I2S_SUPPORT) +/** @defgroup I2S_LL I2S + * @{ + */ + +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ + +/* Exported types ------------------------------------------------------------*/ +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2S_LL_ES_INIT I2S Exported Init structure + * @{ + */ + +/** + * @brief I2S Init structure definition + */ + +typedef struct +{ + uint32_t Mode; /*!< Specifies the I2S operating mode. + This parameter can be a value of @ref I2S_LL_EC_MODE + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetTransferMode().*/ + + uint32_t Standard; /*!< Specifies the standard used for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_STANDARD + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetStandard().*/ + + + uint32_t DataFormat; /*!< Specifies the data format for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_DATA_FORMAT + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetDataFormat().*/ + + + uint32_t MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not. + This parameter can be a value of @ref I2S_LL_EC_MCLK_OUTPUT + + This feature can be modified afterwards using unitary functions @ref LL_I2S_EnableMasterClock() or @ref LL_I2S_DisableMasterClock.*/ + + + uint32_t AudioFreq; /*!< Specifies the frequency selected for the I2S communication. + This parameter can be a value of @ref I2S_LL_EC_AUDIO_FREQ + + Audio Frequency can be modified afterwards using Reference manual formulas to calculate Prescaler Linear, Parity + and unitary functions @ref LL_I2S_SetPrescalerLinear() and @ref LL_I2S_SetPrescalerParity() to set it.*/ + + + uint32_t ClockPolarity; /*!< Specifies the idle state of the I2S clock. + This parameter can be a value of @ref I2S_LL_EC_POLARITY + + This feature can be modified afterwards using unitary function @ref LL_I2S_SetClockPolarity().*/ + +} LL_I2S_InitTypeDef; + +/** + * @} + */ +#endif /*USE_FULL_LL_DRIVER*/ + +/* Exported constants --------------------------------------------------------*/ +/** @defgroup I2S_LL_Exported_Constants I2S Exported Constants + * @{ + */ + +/** @defgroup I2S_LL_EC_GET_FLAG Get Flags Defines + * @brief Flags defines which can be used with LL_I2S_ReadReg function + * @{ + */ +#define LL_I2S_SR_RXNE LL_SPI_SR_RXNE /*!< Rx buffer not empty flag */ +#define LL_I2S_SR_TXE LL_SPI_SR_TXE /*!< Tx buffer empty flag */ +#define LL_I2S_SR_BSY LL_SPI_SR_BSY /*!< Busy flag */ +#define LL_I2S_SR_UDR SPI_SR_UDR /*!< Underrun flag */ +#define LL_I2S_SR_OVR LL_SPI_SR_OVR /*!< Overrun flag */ +#define LL_I2S_SR_FRE LL_SPI_SR_FRE /*!< TI mode frame format error flag */ +/** + * @} + */ + +/** @defgroup SPI_LL_EC_IT IT Defines + * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions + * @{ + */ +#define LL_I2S_CR2_RXNEIE LL_SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */ +#define LL_I2S_CR2_TXEIE LL_SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */ +#define LL_I2S_CR2_ERRIE LL_SPI_CR2_ERRIE /*!< Error interrupt enable */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_DATA_FORMAT Data format + * @{ + */ +#define LL_I2S_DATAFORMAT_16B 0x00000000U /*!< Data length 16 bits, Channel length 16bit */ +#define LL_I2S_DATAFORMAT_16B_EXTENDED (SPI_I2SCFGR_CHLEN) /*!< Data length 16 bits, Channel length 32bit */ +#define LL_I2S_DATAFORMAT_24B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_0) /*!< Data length 24 bits, Channel length 32bit */ +#define LL_I2S_DATAFORMAT_32B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_1) /*!< Data length 16 bits, Channel length 32bit */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_POLARITY Clock Polarity + * @{ + */ +#define LL_I2S_POLARITY_LOW 0x00000000U /*!< Clock steady state is low level */ +#define LL_I2S_POLARITY_HIGH (SPI_I2SCFGR_CKPOL) /*!< Clock steady state is high level */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_STANDARD I2s Standard + * @{ + */ +#define LL_I2S_STANDARD_PHILIPS 0x00000000U /*!< I2S standard philips */ +#define LL_I2S_STANDARD_MSB (SPI_I2SCFGR_I2SSTD_0) /*!< MSB justified standard (left justified) */ +#define LL_I2S_STANDARD_LSB (SPI_I2SCFGR_I2SSTD_1) /*!< LSB justified standard (right justified) */ +#define LL_I2S_STANDARD_PCM_SHORT (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1) /*!< PCM standard, short frame synchronization */ +#define LL_I2S_STANDARD_PCM_LONG (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1 | SPI_I2SCFGR_PCMSYNC) /*!< PCM standard, long frame synchronization */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_MODE Operation Mode + * @{ + */ +#define LL_I2S_MODE_SLAVE_TX 0x00000000U /*!< Slave Tx configuration */ +#define LL_I2S_MODE_SLAVE_RX (SPI_I2SCFGR_I2SCFG_0) /*!< Slave Rx configuration */ +#define LL_I2S_MODE_MASTER_TX (SPI_I2SCFGR_I2SCFG_1) /*!< Master Tx configuration */ +#define LL_I2S_MODE_MASTER_RX (SPI_I2SCFGR_I2SCFG_0 | SPI_I2SCFGR_I2SCFG_1) /*!< Master Rx configuration */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_PRESCALER_FACTOR Prescaler Factor + * @{ + */ +#define LL_I2S_PRESCALER_PARITY_EVEN 0x00000000U /*!< Odd factor: Real divider value is = I2SDIV * 2 */ +#define LL_I2S_PRESCALER_PARITY_ODD (SPI_I2SPR_ODD >> 8U) /*!< Odd factor: Real divider value is = (I2SDIV * 2)+1 */ +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) + +/** @defgroup I2S_LL_EC_MCLK_OUTPUT MCLK Output + * @{ + */ +#define LL_I2S_MCLK_OUTPUT_DISABLE 0x00000000U /*!< Master clock output is disabled */ +#define LL_I2S_MCLK_OUTPUT_ENABLE (SPI_I2SPR_MCKOE) /*!< Master clock output is enabled */ +/** + * @} + */ + +/** @defgroup I2S_LL_EC_AUDIO_FREQ Audio Frequency + * @{ + */ + +#define LL_I2S_AUDIOFREQ_192K 192000U /*!< Audio Frequency configuration 192000 Hz */ +#define LL_I2S_AUDIOFREQ_96K 96000U /*!< Audio Frequency configuration 96000 Hz */ +#define LL_I2S_AUDIOFREQ_48K 48000U /*!< Audio Frequency configuration 48000 Hz */ +#define LL_I2S_AUDIOFREQ_44K 44100U /*!< Audio Frequency configuration 44100 Hz */ +#define LL_I2S_AUDIOFREQ_32K 32000U /*!< Audio Frequency configuration 32000 Hz */ +#define LL_I2S_AUDIOFREQ_22K 22050U /*!< Audio Frequency configuration 22050 Hz */ +#define LL_I2S_AUDIOFREQ_16K 16000U /*!< Audio Frequency configuration 16000 Hz */ +#define LL_I2S_AUDIOFREQ_11K 11025U /*!< Audio Frequency configuration 11025 Hz */ +#define LL_I2S_AUDIOFREQ_8K 8000U /*!< Audio Frequency configuration 8000 Hz */ +#define LL_I2S_AUDIOFREQ_DEFAULT 2U /*!< Audio Freq not specified. Register I2SDIV = 2 */ +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/* Exported macro ------------------------------------------------------------*/ +/** @defgroup I2S_LL_Exported_Macros I2S Exported Macros + * @{ + */ + +/** @defgroup I2S_LL_EM_WRITE_READ Common Write and read registers Macros + * @{ + */ + +/** + * @brief Write a value in I2S register + * @param __INSTANCE__ I2S Instance + * @param __REG__ Register to be written + * @param __VALUE__ Value to be written in the register + * @retval None + */ +#define LL_I2S_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__)) + +/** + * @brief Read a value in I2S register + * @param __INSTANCE__ I2S Instance + * @param __REG__ Register to be read + * @retval Register value + */ +#define LL_I2S_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__) +/** + * @} + */ + +/** + * @} + */ + + +/* Exported functions --------------------------------------------------------*/ + +/** @defgroup I2S_LL_Exported_Functions I2S Exported Functions + * @{ + */ + +/** @defgroup I2S_LL_EF_Configuration Configuration + * @{ + */ + +/** + * @brief Select I2S mode and Enable I2S peripheral + * @rmtoll I2SCFGR I2SMOD LL_I2S_Enable\n + * I2SCFGR I2SE LL_I2S_Enable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_Enable(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE); +} + +/** + * @brief Disable I2S peripheral + * @rmtoll I2SCFGR I2SE LL_I2S_Disable + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_Disable(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE); +} + +/** + * @brief Check if I2S peripheral is enabled + * @rmtoll I2SCFGR I2SE LL_I2S_IsEnabled + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabled(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SE) == (SPI_I2SCFGR_I2SE)) ? 1UL : 0UL); +} + +/** + * @brief Set I2S data frame length + * @rmtoll I2SCFGR DATLEN LL_I2S_SetDataFormat\n + * I2SCFGR CHLEN LL_I2S_SetDataFormat + * @param SPIx SPI Instance + * @param DataFormat This parameter can be one of the following values: + * @arg @ref LL_I2S_DATAFORMAT_16B + * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED + * @arg @ref LL_I2S_DATAFORMAT_24B + * @arg @ref LL_I2S_DATAFORMAT_32B + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetDataFormat(SPI_TypeDef *SPIx, uint32_t DataFormat) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN, DataFormat); +} + +/** + * @brief Get I2S data frame length + * @rmtoll I2SCFGR DATLEN LL_I2S_GetDataFormat\n + * I2SCFGR CHLEN LL_I2S_GetDataFormat + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_DATAFORMAT_16B + * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED + * @arg @ref LL_I2S_DATAFORMAT_24B + * @arg @ref LL_I2S_DATAFORMAT_32B + */ +__STATIC_INLINE uint32_t LL_I2S_GetDataFormat(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN)); +} + +/** + * @brief Set I2S clock polarity + * @rmtoll I2SCFGR CKPOL LL_I2S_SetClockPolarity + * @param SPIx SPI Instance + * @param ClockPolarity This parameter can be one of the following values: + * @arg @ref LL_I2S_POLARITY_LOW + * @arg @ref LL_I2S_POLARITY_HIGH + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity) +{ + SET_BIT(SPIx->I2SCFGR, ClockPolarity); +} + +/** + * @brief Get I2S clock polarity + * @rmtoll I2SCFGR CKPOL LL_I2S_GetClockPolarity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_POLARITY_LOW + * @arg @ref LL_I2S_POLARITY_HIGH + */ +__STATIC_INLINE uint32_t LL_I2S_GetClockPolarity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_CKPOL)); +} + +/** + * @brief Set I2S standard protocol + * @rmtoll I2SCFGR I2SSTD LL_I2S_SetStandard\n + * I2SCFGR PCMSYNC LL_I2S_SetStandard + * @param SPIx SPI Instance + * @param Standard This parameter can be one of the following values: + * @arg @ref LL_I2S_STANDARD_PHILIPS + * @arg @ref LL_I2S_STANDARD_MSB + * @arg @ref LL_I2S_STANDARD_LSB + * @arg @ref LL_I2S_STANDARD_PCM_SHORT + * @arg @ref LL_I2S_STANDARD_PCM_LONG + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC, Standard); +} + +/** + * @brief Get I2S standard protocol + * @rmtoll I2SCFGR I2SSTD LL_I2S_GetStandard\n + * I2SCFGR PCMSYNC LL_I2S_GetStandard + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_STANDARD_PHILIPS + * @arg @ref LL_I2S_STANDARD_MSB + * @arg @ref LL_I2S_STANDARD_LSB + * @arg @ref LL_I2S_STANDARD_PCM_SHORT + * @arg @ref LL_I2S_STANDARD_PCM_LONG + */ +__STATIC_INLINE uint32_t LL_I2S_GetStandard(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC)); +} + +/** + * @brief Set I2S transfer mode + * @rmtoll I2SCFGR I2SCFG LL_I2S_SetTransferMode + * @param SPIx SPI Instance + * @param Mode This parameter can be one of the following values: + * @arg @ref LL_I2S_MODE_SLAVE_TX + * @arg @ref LL_I2S_MODE_SLAVE_RX + * @arg @ref LL_I2S_MODE_MASTER_TX + * @arg @ref LL_I2S_MODE_MASTER_RX + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetTransferMode(SPI_TypeDef *SPIx, uint32_t Mode) +{ + MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG, Mode); +} + +/** + * @brief Get I2S transfer mode + * @rmtoll I2SCFGR I2SCFG LL_I2S_GetTransferMode + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_MODE_SLAVE_TX + * @arg @ref LL_I2S_MODE_SLAVE_RX + * @arg @ref LL_I2S_MODE_MASTER_TX + * @arg @ref LL_I2S_MODE_MASTER_RX + */ +__STATIC_INLINE uint32_t LL_I2S_GetTransferMode(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG)); +} + +/** + * @brief Set I2S linear prescaler + * @rmtoll I2SPR I2SDIV LL_I2S_SetPrescalerLinear + * @param SPIx SPI Instance + * @param PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetPrescalerLinear(SPI_TypeDef *SPIx, uint8_t PrescalerLinear) +{ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV, PrescalerLinear); +} + +/** + * @brief Get I2S linear prescaler + * @rmtoll I2SPR I2SDIV LL_I2S_GetPrescalerLinear + * @param SPIx SPI Instance + * @retval PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF + */ +__STATIC_INLINE uint32_t LL_I2S_GetPrescalerLinear(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_I2SDIV)); +} + +/** + * @brief Set I2S parity prescaler + * @rmtoll I2SPR ODD LL_I2S_SetPrescalerParity + * @param SPIx SPI Instance + * @param PrescalerParity This parameter can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + * @retval None + */ +__STATIC_INLINE void LL_I2S_SetPrescalerParity(SPI_TypeDef *SPIx, uint32_t PrescalerParity) +{ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_ODD, PrescalerParity << 8U); +} + +/** + * @brief Get I2S parity prescaler + * @rmtoll I2SPR ODD LL_I2S_GetPrescalerParity + * @param SPIx SPI Instance + * @retval Returned value can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + */ +__STATIC_INLINE uint32_t LL_I2S_GetPrescalerParity(SPI_TypeDef *SPIx) +{ + return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_ODD) >> 8U); +} + +/** + * @brief Enable the master clock output (Pin MCK) + * @rmtoll I2SPR MCKOE LL_I2S_EnableMasterClock + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableMasterClock(SPI_TypeDef *SPIx) +{ + SET_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE); +} + +/** + * @brief Disable the master clock output (Pin MCK) + * @rmtoll I2SPR MCKOE LL_I2S_DisableMasterClock + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableMasterClock(SPI_TypeDef *SPIx) +{ + CLEAR_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE); +} + +/** + * @brief Check if the master clock output (Pin MCK) is enabled + * @rmtoll I2SPR MCKOE LL_I2S_IsEnabledMasterClock + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledMasterClock(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE) == (SPI_I2SPR_MCKOE)) ? 1UL : 0UL); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_FLAG FLAG Management + * @{ + */ + +/** + * @brief Check if Rx buffer is not empty + * @rmtoll SR RXNE LL_I2S_IsActiveFlag_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_RXNE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_RXNE(SPIx); +} + +/** + * @brief Check if Tx buffer is empty + * @rmtoll SR TXE LL_I2S_IsActiveFlag_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_TXE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_TXE(SPIx); +} + +/** + * @brief Get busy flag + * @rmtoll SR BSY LL_I2S_IsActiveFlag_BSY + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_BSY(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_BSY(SPIx); +} + +/** + * @brief Get overrun error flag + * @rmtoll SR OVR LL_I2S_IsActiveFlag_OVR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_OVR(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_OVR(SPIx); +} + +/** + * @brief Get underrun error flag + * @rmtoll SR UDR LL_I2S_IsActiveFlag_UDR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_UDR(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_UDR) == (SPI_SR_UDR)) ? 1UL : 0UL); +} + +/** + * @brief Get frame format error flag + * @rmtoll SR FRE LL_I2S_IsActiveFlag_FRE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_FRE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsActiveFlag_FRE(SPIx); +} + +/** + * @brief Get channel side flag. + * @note 0: Channel Left has to be transmitted or has been received\n + * 1: Channel Right has to be transmitted or has been received\n + * It has no significance in PCM mode. + * @rmtoll SR CHSIDE LL_I2S_IsActiveFlag_CHSIDE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_CHSIDE(SPI_TypeDef *SPIx) +{ + return ((READ_BIT(SPIx->SR, SPI_SR_CHSIDE) == (SPI_SR_CHSIDE)) ? 1UL : 0UL); +} + +/** + * @brief Clear overrun error flag + * @rmtoll SR OVR LL_I2S_ClearFlag_OVR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_OVR(SPI_TypeDef *SPIx) +{ + LL_SPI_ClearFlag_OVR(SPIx); +} + +/** + * @brief Clear underrun error flag + * @rmtoll SR UDR LL_I2S_ClearFlag_UDR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_UDR(SPI_TypeDef *SPIx) +{ + __IO uint32_t tmpreg; + tmpreg = SPIx->SR; + (void)tmpreg; +} + +/** + * @brief Clear frame format error flag + * @rmtoll SR FRE LL_I2S_ClearFlag_FRE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_ClearFlag_FRE(SPI_TypeDef *SPIx) +{ + LL_SPI_ClearFlag_FRE(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_IT Interrupt Management + * @{ + */ + +/** + * @brief Enable error IT + * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode). + * @rmtoll CR2 ERRIE LL_I2S_EnableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_ERR(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_ERR(SPIx); +} + +/** + * @brief Enable Rx buffer not empty IT + * @rmtoll CR2 RXNEIE LL_I2S_EnableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_RXNE(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_RXNE(SPIx); +} + +/** + * @brief Enable Tx buffer empty IT + * @rmtoll CR2 TXEIE LL_I2S_EnableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableIT_TXE(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableIT_TXE(SPIx); +} + +/** + * @brief Disable error IT + * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode). + * @rmtoll CR2 ERRIE LL_I2S_DisableIT_ERR + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_ERR(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_ERR(SPIx); +} + +/** + * @brief Disable Rx buffer not empty IT + * @rmtoll CR2 RXNEIE LL_I2S_DisableIT_RXNE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_RXNE(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_RXNE(SPIx); +} + +/** + * @brief Disable Tx buffer empty IT + * @rmtoll CR2 TXEIE LL_I2S_DisableIT_TXE + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableIT_TXE(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableIT_TXE(SPIx); +} + +/** + * @brief Check if ERR IT is enabled + * @rmtoll CR2 ERRIE LL_I2S_IsEnabledIT_ERR + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_ERR(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_ERR(SPIx); +} + +/** + * @brief Check if RXNE IT is enabled + * @rmtoll CR2 RXNEIE LL_I2S_IsEnabledIT_RXNE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_RXNE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_RXNE(SPIx); +} + +/** + * @brief Check if TXE IT is enabled + * @rmtoll CR2 TXEIE LL_I2S_IsEnabledIT_TXE + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_TXE(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledIT_TXE(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_DMA DMA Management + * @{ + */ + +/** + * @brief Enable DMA Rx + * @rmtoll CR2 RXDMAEN LL_I2S_EnableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableDMAReq_RX(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableDMAReq_RX(SPIx); +} + +/** + * @brief Disable DMA Rx + * @rmtoll CR2 RXDMAEN LL_I2S_DisableDMAReq_RX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableDMAReq_RX(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableDMAReq_RX(SPIx); +} + +/** + * @brief Check if DMA Rx is enabled + * @rmtoll CR2 RXDMAEN LL_I2S_IsEnabledDMAReq_RX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledDMAReq_RX(SPIx); +} + +/** + * @brief Enable DMA Tx + * @rmtoll CR2 TXDMAEN LL_I2S_EnableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_EnableDMAReq_TX(SPI_TypeDef *SPIx) +{ + LL_SPI_EnableDMAReq_TX(SPIx); +} + +/** + * @brief Disable DMA Tx + * @rmtoll CR2 TXDMAEN LL_I2S_DisableDMAReq_TX + * @param SPIx SPI Instance + * @retval None + */ +__STATIC_INLINE void LL_I2S_DisableDMAReq_TX(SPI_TypeDef *SPIx) +{ + LL_SPI_DisableDMAReq_TX(SPIx); +} + +/** + * @brief Check if DMA Tx is enabled + * @rmtoll CR2 TXDMAEN LL_I2S_IsEnabledDMAReq_TX + * @param SPIx SPI Instance + * @retval State of bit (1 or 0). + */ +__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx) +{ + return LL_SPI_IsEnabledDMAReq_TX(SPIx); +} + +/** + * @} + */ + +/** @defgroup I2S_LL_EF_DATA DATA Management + * @{ + */ + +/** + * @brief Read 16-Bits in data register + * @rmtoll DR DR LL_I2S_ReceiveData16 + * @param SPIx SPI Instance + * @retval RxData Value between Min_Data=0x0000 and Max_Data=0xFFFF + */ +__STATIC_INLINE uint16_t LL_I2S_ReceiveData16(SPI_TypeDef *SPIx) +{ + return LL_SPI_ReceiveData16(SPIx); +} + +/** + * @brief Write 16-Bits in data register + * @rmtoll DR DR LL_I2S_TransmitData16 + * @param SPIx SPI Instance + * @param TxData Value between Min_Data=0x0000 and Max_Data=0xFFFF + * @retval None + */ +__STATIC_INLINE void LL_I2S_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData) +{ + LL_SPI_TransmitData16(SPIx, TxData); +} + +/** + * @} + */ + +#if defined(USE_FULL_LL_DRIVER) +/** @defgroup I2S_LL_EF_Init Initialization and de-initialization functions + * @{ + */ + +ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx); +ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct); +void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct); +void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity); +#if defined (SPI_I2S_FULLDUPLEX_SUPPORT) +ErrorStatus LL_I2S_InitFullDuplex(SPI_TypeDef *I2Sxext, LL_I2S_InitTypeDef *I2S_InitStruct); +#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */ + +/** + * @} + */ +#endif /* USE_FULL_LL_DRIVER */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* SPI_I2S_SUPPORT */ + +#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) */ + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif /* STM32F3xx_LL_SPI_H */ + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c new file mode 100644 index 00000000..a3dcf239 --- /dev/null +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c @@ -0,0 +1,640 @@ +/** + ****************************************************************************** + * @file stm32f3xx_ll_spi.c + * @author MCD Application Team + * @brief SPI LL module driver. + ****************************************************************************** + * @attention + * + * Copyright (c) 2016 STMicroelectronics. + * All rights reserved. + * + * This software is licensed under terms that can be found in the LICENSE file + * in the root directory of this software component. + * If no LICENSE file comes with this software, it is provided AS-IS. + * + ****************************************************************************** + */ +#if defined(USE_FULL_LL_DRIVER) + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f3xx_ll_spi.h" +#include "stm32f3xx_ll_bus.h" +#include "stm32f3xx_ll_rcc.h" + +#ifdef USE_FULL_ASSERT +#include "stm32_assert.h" +#else +#define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +/** @addtogroup STM32F3xx_LL_Driver + * @{ + */ + +#if defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) + +/** @addtogroup SPI_LL + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ + +/* Private constants ---------------------------------------------------------*/ +/** @defgroup SPI_LL_Private_Constants SPI Private Constants + * @{ + */ +/* SPI registers Masks */ +#define SPI_CR1_CLEAR_MASK (SPI_CR1_CPHA | SPI_CR1_CPOL | SPI_CR1_MSTR | \ + SPI_CR1_BR | SPI_CR1_LSBFIRST | SPI_CR1_SSI | \ + SPI_CR1_SSM | SPI_CR1_RXONLY | SPI_CR1_CRCL | \ + SPI_CR1_CRCNEXT | SPI_CR1_CRCEN | SPI_CR1_BIDIOE | \ + SPI_CR1_BIDIMODE) +/** + * @} + */ + +/* Private macros ------------------------------------------------------------*/ +/** @defgroup SPI_LL_Private_Macros SPI Private Macros + * @{ + */ +#define IS_LL_SPI_TRANSFER_DIRECTION(__VALUE__) (((__VALUE__) == LL_SPI_FULL_DUPLEX) \ + || ((__VALUE__) == LL_SPI_SIMPLEX_RX) \ + || ((__VALUE__) == LL_SPI_HALF_DUPLEX_RX) \ + || ((__VALUE__) == LL_SPI_HALF_DUPLEX_TX)) + +#define IS_LL_SPI_MODE(__VALUE__) (((__VALUE__) == LL_SPI_MODE_MASTER) \ + || ((__VALUE__) == LL_SPI_MODE_SLAVE)) + +#define IS_LL_SPI_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_SPI_DATAWIDTH_4BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_5BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_6BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_7BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_8BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_9BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_10BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_11BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_12BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_13BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_14BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_15BIT) \ + || ((__VALUE__) == LL_SPI_DATAWIDTH_16BIT)) + +#define IS_LL_SPI_POLARITY(__VALUE__) (((__VALUE__) == LL_SPI_POLARITY_LOW) \ + || ((__VALUE__) == LL_SPI_POLARITY_HIGH)) + +#define IS_LL_SPI_PHASE(__VALUE__) (((__VALUE__) == LL_SPI_PHASE_1EDGE) \ + || ((__VALUE__) == LL_SPI_PHASE_2EDGE)) + +#define IS_LL_SPI_NSS(__VALUE__) (((__VALUE__) == LL_SPI_NSS_SOFT) \ + || ((__VALUE__) == LL_SPI_NSS_HARD_INPUT) \ + || ((__VALUE__) == LL_SPI_NSS_HARD_OUTPUT)) + +#define IS_LL_SPI_BAUDRATE(__VALUE__) (((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV2) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV4) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV8) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV16) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV32) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV64) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV128) \ + || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV256)) + +#define IS_LL_SPI_BITORDER(__VALUE__) (((__VALUE__) == LL_SPI_LSB_FIRST) \ + || ((__VALUE__) == LL_SPI_MSB_FIRST)) + +#define IS_LL_SPI_CRCCALCULATION(__VALUE__) (((__VALUE__) == LL_SPI_CRCCALCULATION_ENABLE) \ + || ((__VALUE__) == LL_SPI_CRCCALCULATION_DISABLE)) + +#define IS_LL_SPI_CRC_POLYNOMIAL(__VALUE__) ((__VALUE__) >= 0x1U) + +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup SPI_LL_Exported_Functions + * @{ + */ + +/** @addtogroup SPI_LL_EF_Init + * @{ + */ + +/** + * @brief De-initialize the SPI registers to their default reset values. + * @param SPIx SPI Instance + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are de-initialized + * - ERROR: SPI registers are not de-initialized + */ +ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx) +{ + ErrorStatus status = ERROR; + + /* Check the parameters */ + assert_param(IS_SPI_ALL_INSTANCE(SPIx)); + +#if defined(SPI1) + if (SPIx == SPI1) + { + /* Force reset of SPI clock */ + LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1); + + /* Release reset of SPI clock */ + LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1); + + status = SUCCESS; + } +#endif /* SPI1 */ +#if defined(SPI2) + if (SPIx == SPI2) + { + /* Force reset of SPI clock */ + LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2); + + /* Release reset of SPI clock */ + LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2); + + status = SUCCESS; + } +#endif /* SPI2 */ +#if defined(SPI3) + if (SPIx == SPI3) + { + /* Force reset of SPI clock */ + LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI3); + + /* Release reset of SPI clock */ + LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI3); + + status = SUCCESS; + } +#endif /* SPI3 */ +#if defined(SPI4) + if (SPIx == SPI4) + { + /* Force reset of SPI clock */ + LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI4); + + /* Release reset of SPI clock */ + LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI4); + + status = SUCCESS; + } +#endif /* SPI4 */ + + return status; +} + +/** + * @brief Initialize the SPI registers according to the specified parameters in SPI_InitStruct. + * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0), + * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned. + * @param SPIx SPI Instance + * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure + * @retval An ErrorStatus enumeration value. (Return always SUCCESS) + */ +ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct) +{ + ErrorStatus status = ERROR; + + /* Check the SPI Instance SPIx*/ + assert_param(IS_SPI_ALL_INSTANCE(SPIx)); + + /* Check the SPI parameters from SPI_InitStruct*/ + assert_param(IS_LL_SPI_TRANSFER_DIRECTION(SPI_InitStruct->TransferDirection)); + assert_param(IS_LL_SPI_MODE(SPI_InitStruct->Mode)); + assert_param(IS_LL_SPI_DATAWIDTH(SPI_InitStruct->DataWidth)); + assert_param(IS_LL_SPI_POLARITY(SPI_InitStruct->ClockPolarity)); + assert_param(IS_LL_SPI_PHASE(SPI_InitStruct->ClockPhase)); + assert_param(IS_LL_SPI_NSS(SPI_InitStruct->NSS)); + assert_param(IS_LL_SPI_BAUDRATE(SPI_InitStruct->BaudRate)); + assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->BitOrder)); + assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->CRCCalculation)); + + if (LL_SPI_IsEnabled(SPIx) == 0x00000000U) + { + /*---------------------------- SPIx CR1 Configuration ------------------------ + * Configure SPIx CR1 with parameters: + * - TransferDirection: SPI_CR1_BIDIMODE, SPI_CR1_BIDIOE and SPI_CR1_RXONLY bits + * - Master/Slave Mode: SPI_CR1_MSTR bit + * - ClockPolarity: SPI_CR1_CPOL bit + * - ClockPhase: SPI_CR1_CPHA bit + * - NSS management: SPI_CR1_SSM bit + * - BaudRate prescaler: SPI_CR1_BR[2:0] bits + * - BitOrder: SPI_CR1_LSBFIRST bit + * - CRCCalculation: SPI_CR1_CRCEN bit + */ + MODIFY_REG(SPIx->CR1, + SPI_CR1_CLEAR_MASK, + SPI_InitStruct->TransferDirection | SPI_InitStruct->Mode | + SPI_InitStruct->ClockPolarity | SPI_InitStruct->ClockPhase | + SPI_InitStruct->NSS | SPI_InitStruct->BaudRate | + SPI_InitStruct->BitOrder | SPI_InitStruct->CRCCalculation); + + /*---------------------------- SPIx CR2 Configuration ------------------------ + * Configure SPIx CR2 with parameters: + * - DataWidth: DS[3:0] bits + * - NSS management: SSOE bit + */ + MODIFY_REG(SPIx->CR2, + SPI_CR2_DS | SPI_CR2_SSOE, + SPI_InitStruct->DataWidth | (SPI_InitStruct->NSS >> 16U)); + + /* Set Rx FIFO to Quarter (1 Byte) in case of 8 Bits mode. No DataPacking by default */ + if (SPI_InitStruct->DataWidth < LL_SPI_DATAWIDTH_9BIT) + { + LL_SPI_SetRxFIFOThreshold(SPIx, LL_SPI_RX_FIFO_TH_QUARTER); + } + + /*---------------------------- SPIx CRCPR Configuration ---------------------- + * Configure SPIx CRCPR with parameters: + * - CRCPoly: CRCPOLY[15:0] bits + */ + if (SPI_InitStruct->CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE) + { + assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->CRCPoly)); + LL_SPI_SetCRCPolynomial(SPIx, SPI_InitStruct->CRCPoly); + } + status = SUCCESS; + } + +#if defined (SPI_I2S_SUPPORT) + /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */ + CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD); +#endif /* SPI_I2S_SUPPORT */ + return status; +} + +/** + * @brief Set each @ref LL_SPI_InitTypeDef field to default value. + * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure + * whose fields will be set to default values. + * @retval None + */ +void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct) +{ + /* Set SPI_InitStruct fields to default values */ + SPI_InitStruct->TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct->Mode = LL_SPI_MODE_SLAVE; + SPI_InitStruct->DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct->ClockPolarity = LL_SPI_POLARITY_LOW; + SPI_InitStruct->ClockPhase = LL_SPI_PHASE_1EDGE; + SPI_InitStruct->NSS = LL_SPI_NSS_HARD_INPUT; + SPI_InitStruct->BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2; + SPI_InitStruct->BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct->CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct->CRCPoly = 7U; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#if defined(SPI_I2S_SUPPORT) +/** @addtogroup I2S_LL + * @{ + */ + +/* Private types -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private constants ---------------------------------------------------------*/ +/** @defgroup I2S_LL_Private_Constants I2S Private Constants + * @{ + */ +/* I2S registers Masks */ +#define I2S_I2SCFGR_CLEAR_MASK (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN | \ + SPI_I2SCFGR_CKPOL | SPI_I2SCFGR_I2SSTD | \ + SPI_I2SCFGR_I2SCFG | SPI_I2SCFGR_I2SMOD ) + +#define I2S_I2SPR_CLEAR_MASK 0x0002U +/** + * @} + */ +/* Private macros ------------------------------------------------------------*/ +/** @defgroup I2S_LL_Private_Macros I2S Private Macros + * @{ + */ + +#define IS_LL_I2S_DATAFORMAT(__VALUE__) (((__VALUE__) == LL_I2S_DATAFORMAT_16B) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_16B_EXTENDED) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_24B) \ + || ((__VALUE__) == LL_I2S_DATAFORMAT_32B)) + +#define IS_LL_I2S_CPOL(__VALUE__) (((__VALUE__) == LL_I2S_POLARITY_LOW) \ + || ((__VALUE__) == LL_I2S_POLARITY_HIGH)) + +#define IS_LL_I2S_STANDARD(__VALUE__) (((__VALUE__) == LL_I2S_STANDARD_PHILIPS) \ + || ((__VALUE__) == LL_I2S_STANDARD_MSB) \ + || ((__VALUE__) == LL_I2S_STANDARD_LSB) \ + || ((__VALUE__) == LL_I2S_STANDARD_PCM_SHORT) \ + || ((__VALUE__) == LL_I2S_STANDARD_PCM_LONG)) + +#define IS_LL_I2S_MODE(__VALUE__) (((__VALUE__) == LL_I2S_MODE_SLAVE_TX) \ + || ((__VALUE__) == LL_I2S_MODE_SLAVE_RX) \ + || ((__VALUE__) == LL_I2S_MODE_MASTER_TX) \ + || ((__VALUE__) == LL_I2S_MODE_MASTER_RX)) + +#define IS_LL_I2S_MCLK_OUTPUT(__VALUE__) (((__VALUE__) == LL_I2S_MCLK_OUTPUT_ENABLE) \ + || ((__VALUE__) == LL_I2S_MCLK_OUTPUT_DISABLE)) + +#define IS_LL_I2S_AUDIO_FREQ(__VALUE__) ((((__VALUE__) >= LL_I2S_AUDIOFREQ_8K) \ + && ((__VALUE__) <= LL_I2S_AUDIOFREQ_192K)) \ + || ((__VALUE__) == LL_I2S_AUDIOFREQ_DEFAULT)) + +#define IS_LL_I2S_PRESCALER_LINEAR(__VALUE__) ((__VALUE__) >= 0x2U) + +#define IS_LL_I2S_PRESCALER_PARITY(__VALUE__) (((__VALUE__) == LL_I2S_PRESCALER_PARITY_EVEN) \ + || ((__VALUE__) == LL_I2S_PRESCALER_PARITY_ODD)) +/** + * @} + */ + +/* Private function prototypes -----------------------------------------------*/ + +/* Exported functions --------------------------------------------------------*/ +/** @addtogroup I2S_LL_Exported_Functions + * @{ + */ + +/** @addtogroup I2S_LL_EF_Init + * @{ + */ + +/** + * @brief De-initialize the SPI/I2S registers to their default reset values. + * @param SPIx SPI Instance + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are de-initialized + * - ERROR: SPI registers are not de-initialized + */ +ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx) +{ + return LL_SPI_DeInit(SPIx); +} + +/** + * @brief Initializes the SPI/I2S registers according to the specified parameters in I2S_InitStruct. + * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0), + * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned. + * @param SPIx SPI Instance + * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure + * @retval An ErrorStatus enumeration value: + * - SUCCESS: SPI registers are Initialized + * - ERROR: SPI registers are not Initialized + */ +ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct) +{ + uint32_t i2sdiv = 2U; + uint32_t i2sodd = 0U; + uint32_t packetlength = 1U; + uint32_t tmp; +#if !defined (SPI_I2S_FULLDUPLEX_SUPPORT) + LL_RCC_ClocksTypeDef rcc_clocks; +#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */ + uint32_t sourceclock; + ErrorStatus status = ERROR; + + /* Check the I2S parameters */ + assert_param(IS_I2S_ALL_INSTANCE(SPIx)); + assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode)); + assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard)); + assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat)); + assert_param(IS_LL_I2S_MCLK_OUTPUT(I2S_InitStruct->MCLKOutput)); + assert_param(IS_LL_I2S_AUDIO_FREQ(I2S_InitStruct->AudioFreq)); + assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity)); + + if (LL_I2S_IsEnabled(SPIx) == 0x00000000U) + { + /*---------------------------- SPIx I2SCFGR Configuration -------------------- + * Configure SPIx I2SCFGR with parameters: + * - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit + * - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits + * - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits + * - ClockPolarity: SPI_I2SCFGR_CKPOL bit + */ + + /* Write to SPIx I2SCFGR */ + MODIFY_REG(SPIx->I2SCFGR, + I2S_I2SCFGR_CLEAR_MASK, + I2S_InitStruct->Mode | I2S_InitStruct->Standard | + I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity | + SPI_I2SCFGR_I2SMOD); + + /*---------------------------- SPIx I2SPR Configuration ---------------------- + * Configure SPIx I2SPR with parameters: + * - MCLKOutput: SPI_I2SPR_MCKOE bit + * - AudioFreq: SPI_I2SPR_I2SDIV[7:0] and SPI_I2SPR_ODD bits + */ + + /* If the requested audio frequency is not the default, compute the prescaler (i2sodd, i2sdiv) + * else, default values are used: i2sodd = 0U, i2sdiv = 2U. + */ + if (I2S_InitStruct->AudioFreq != LL_I2S_AUDIOFREQ_DEFAULT) + { + /* Check the frame length (For the Prescaler computing) + * Default value: LL_I2S_DATAFORMAT_16B (packetlength = 1U). + */ + if (I2S_InitStruct->DataFormat != LL_I2S_DATAFORMAT_16B) + { + /* Packet length is 32 bits */ + packetlength = 2U; + } + +#if defined (SPI_I2S_FULLDUPLEX_SUPPORT) + /* If an external I2S clock has to be used, the specific define should be set + in the project configuration or in the stm32f3xx_ll_rcc.h file */ + /* Get the I2S source clock value */ + sourceclock = LL_RCC_GetI2SClockFreq(LL_RCC_I2S_CLKSOURCE); +#else /* Case for STM32F373xC and STM32F378xx series */ + /* I2S Clock source is System clock: Get System Clock frequency */ + LL_RCC_GetSystemClocksFreq(&rcc_clocks); + if (SPIx == SPI1) + { + sourceclock = rcc_clocks.PCLK2_Frequency; + } + else /* SPI2 or SPI3 */ + { + sourceclock = rcc_clocks.PCLK1_Frequency; + } + +#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */ + + /* Compute the Real divider depending on the MCLK output state with a floating point */ + if (I2S_InitStruct->MCLKOutput == LL_I2S_MCLK_OUTPUT_ENABLE) + { + /* MCLK output is enabled */ + tmp = (((((sourceclock / 256U) * 10U) / I2S_InitStruct->AudioFreq)) + 5U); + } + else + { + /* MCLK output is disabled */ + tmp = (((((sourceclock / (32U * packetlength)) * 10U) / I2S_InitStruct->AudioFreq)) + 5U); + } + + /* Remove the floating point */ + tmp = tmp / 10U; + + /* Check the parity of the divider */ + i2sodd = (tmp & (uint16_t)0x0001U); + + /* Compute the i2sdiv prescaler */ + i2sdiv = ((tmp - i2sodd) / 2U); + + /* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */ + i2sodd = (i2sodd << 8U); + } + + /* Test if the divider is 1 or 0 or greater than 0xFF */ + if ((i2sdiv < 2U) || (i2sdiv > 0xFFU)) + { + /* Set the default values */ + i2sdiv = 2U; + i2sodd = 0U; + } + + /* Write to SPIx I2SPR register the computed value */ + WRITE_REG(SPIx->I2SPR, i2sdiv | i2sodd | I2S_InitStruct->MCLKOutput); + + status = SUCCESS; + } + return status; +} + +/** + * @brief Set each @ref LL_I2S_InitTypeDef field to default value. + * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure + * whose fields will be set to default values. + * @retval None + */ +void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct) +{ + /*--------------- Reset I2S init structure parameters values -----------------*/ + I2S_InitStruct->Mode = LL_I2S_MODE_SLAVE_TX; + I2S_InitStruct->Standard = LL_I2S_STANDARD_PHILIPS; + I2S_InitStruct->DataFormat = LL_I2S_DATAFORMAT_16B; + I2S_InitStruct->MCLKOutput = LL_I2S_MCLK_OUTPUT_DISABLE; + I2S_InitStruct->AudioFreq = LL_I2S_AUDIOFREQ_DEFAULT; + I2S_InitStruct->ClockPolarity = LL_I2S_POLARITY_LOW; +} + +/** + * @brief Set linear and parity prescaler. + * @note To calculate value of PrescalerLinear(I2SDIV[7:0] bits) and PrescalerParity(ODD bit)\n + * Check Audio frequency table and formulas inside Reference Manual (SPI/I2S). + * @param SPIx SPI Instance + * @param PrescalerLinear value Min_Data=0x02 and Max_Data=0xFF. + * @param PrescalerParity This parameter can be one of the following values: + * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN + * @arg @ref LL_I2S_PRESCALER_PARITY_ODD + * @retval None + */ +void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity) +{ + /* Check the I2S parameters */ + assert_param(IS_I2S_ALL_INSTANCE(SPIx)); + assert_param(IS_LL_I2S_PRESCALER_LINEAR(PrescalerLinear)); + assert_param(IS_LL_I2S_PRESCALER_PARITY(PrescalerParity)); + + /* Write to SPIx I2SPR */ + MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV | SPI_I2SPR_ODD, PrescalerLinear | (PrescalerParity << 8U)); +} + +#if defined (SPI_I2S_FULLDUPLEX_SUPPORT) +/** + * @brief Configures the full duplex mode for the I2Sx peripheral using its extension + * I2Sxext according to the specified parameters in the I2S_InitStruct. + * @note The structure pointed by I2S_InitStruct parameter should be the same + * used for the master I2S peripheral. In this case, if the master is + * configured as transmitter, the slave will be receiver and vice versa. + * Or you can force a different mode by modifying the field I2S_Mode to the + * value I2S_SlaveRx or I2S_SlaveTx independently of the master configuration. + * @param I2Sxext SPI Instance + * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure + * @retval An ErrorStatus enumeration value: + * - SUCCESS: I2Sxext registers are Initialized + * - ERROR: I2Sxext registers are not Initialized + */ +ErrorStatus LL_I2S_InitFullDuplex(SPI_TypeDef *I2Sxext, LL_I2S_InitTypeDef *I2S_InitStruct) +{ + uint32_t mode = 0U; + ErrorStatus status = ERROR; + + /* Check the I2S parameters */ + assert_param(IS_I2S_EXT_ALL_INSTANCE(I2Sxext)); + assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode)); + assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard)); + assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat)); + assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity)); + + if (LL_I2S_IsEnabled(I2Sxext) == 0x00000000U) + { + /*---------------------------- SPIx I2SCFGR Configuration -------------------- + * Configure SPIx I2SCFGR with parameters: + * - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit + * - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits + * - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits + * - ClockPolarity: SPI_I2SCFGR_CKPOL bit + */ + + /* Reset I2SPR registers */ + WRITE_REG(I2Sxext->I2SPR, I2S_I2SPR_CLEAR_MASK); + + /* Get the mode to be configured for the extended I2S */ + if ((I2S_InitStruct->Mode == LL_I2S_MODE_MASTER_TX) || (I2S_InitStruct->Mode == LL_I2S_MODE_SLAVE_TX)) + { + mode = LL_I2S_MODE_SLAVE_RX; + } + else + { + if ((I2S_InitStruct->Mode == LL_I2S_MODE_MASTER_RX) || (I2S_InitStruct->Mode == LL_I2S_MODE_SLAVE_RX)) + { + mode = LL_I2S_MODE_SLAVE_TX; + } + } + + /* Write to SPIx I2SCFGR */ + MODIFY_REG(I2Sxext->I2SCFGR, + I2S_I2SCFGR_CLEAR_MASK, + I2S_InitStruct->Standard | + I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity | + SPI_I2SCFGR_I2SMOD | mode); + + status = SUCCESS; + } + return status; +} +#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +#endif /* SPI_I2S_SUPPORT */ + +#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) */ + +/** + * @} + */ + +#endif /* USE_FULL_LL_DRIVER */ + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h new file mode 100644 index 00000000..c51b9383 --- /dev/null +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h @@ -0,0 +1,266 @@ +/*---------------------------------------------------------------------------/ +/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016 +/---------------------------------------------------------------------------*/ + +#define _FFCONF 88100 /* Revision ID */ + +/*---------------------------------------------------------------------------/ +/ Function Configurations +/---------------------------------------------------------------------------*/ + +#define _FS_READONLY 0 +/* This option switches read-only configuration. (0:Read/Write or 1:Read-only) +/ Read-only configuration removes writing API functions, f_write(), f_sync(), +/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree() +/ and optional writing functions as well. */ + + +#define _FS_MINIMIZE 0 +/* This option defines minimization level to remove some basic API functions. +/ +/ 0: All basic functions are enabled. +/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename() +/ are removed. +/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1. +/ 3: f_lseek() function is removed in addition to 2. */ + + +#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */ +/* This option switches string functions, f_gets(), f_putc(), f_puts() and +/ f_printf(). +/ +/ 0: Disable string functions. +/ 1: Enable without LF-CRLF conversion. +/ 2: Enable with LF-CRLF conversion. */ + + +#define _USE_FIND 0 +/* This option switches filtered directory read functions, f_findfirst() and +/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */ + + +#define _USE_MKFS 0 +/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */ + + +#define _USE_FASTSEEK 0 +/* This option switches fast seek function. (0:Disable or 1:Enable) */ + + +#define _USE_EXPAND 0 +/* This option switches f_expand function. (0:Disable or 1:Enable) */ + + +#define _USE_CHMOD 0 +/* This option switches attribute manipulation functions, f_chmod() and f_utime(). +/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */ + + +#define _USE_LABEL 0 +/* This option switches volume label functions, f_getlabel() and f_setlabel(). +/ (0:Disable or 1:Enable) */ + + +#define _USE_FORWARD 0 +/* This option switches f_forward() function. (0:Disable or 1:Enable) +/ To enable it, also _FS_TINY need to be 1. */ + + +/*---------------------------------------------------------------------------/ +/ Locale and Namespace Configurations +/---------------------------------------------------------------------------*/ + +#define _CODE_PAGE 437 +/* This option specifies the OEM code page to be used on the target system. +/ Incorrect setting of the code page can cause a file open failure. +/ +/ 1 - ASCII (No extended character. Non-LFN cfg. only) +/ 437 - U.S. +/ 720 - Arabic +/ 737 - Greek +/ 771 - KBL +/ 775 - Baltic +/ 850 - Latin 1 +/ 852 - Latin 2 +/ 855 - Cyrillic +/ 857 - Turkish +/ 860 - Portuguese +/ 861 - Icelandic +/ 862 - Hebrew +/ 863 - Canadian French +/ 864 - Arabic +/ 865 - Nordic +/ 866 - Russian +/ 869 - Greek 2 +/ 932 - Japanese (DBCS) +/ 936 - Simplified Chinese (DBCS) +/ 949 - Korean (DBCS) +/ 950 - Traditional Chinese (DBCS) +*/ + + +#define _USE_LFN 1 /* 0 to 3 */ +#define _MAX_LFN 255 +/* The _USE_LFN switches the support of long file name (LFN). +/ +/ 0: Disable support of LFN. _MAX_LFN has no effect. +/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe. +/ 2: Enable LFN with dynamic working buffer on the STACK. +/ 3: Enable LFN with dynamic working buffer on the HEAP. +/ +/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added +/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and +/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255. +/ It should be set 255 to support full featured LFN operations. +/ When use stack for the working buffer, take care on stack overflow. When use heap +/ memory for the working buffer, memory management functions, ff_memalloc() and +/ ff_memfree(), must be added to the project. */ + + +#define _LFN_UNICODE 0 +/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode) +/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1. +/ This option also affects behavior of string I/O functions. */ + + +#define _STRF_ENCODE 3 +/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to +/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf(). +/ +/ 0: ANSI/OEM +/ 1: UTF-16LE +/ 2: UTF-16BE +/ 3: UTF-8 +/ +/ This option has no effect when _LFN_UNICODE == 0. */ + + +#define _FS_RPATH 0 +/* This option configures support of relative path. +/ +/ 0: Disable relative path and remove related functions. +/ 1: Enable relative path. f_chdir() and f_chdrive() are available. +/ 2: f_getcwd() function is available in addition to 1. +*/ + + +/*---------------------------------------------------------------------------/ +/ Drive/Volume Configurations +/---------------------------------------------------------------------------*/ + +#define _VOLUMES 1 +/* Number of volumes (logical drives) to be used. */ + + +#define _STR_VOLUME_ID 0 +#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3" +/* _STR_VOLUME_ID switches string support of volume ID. +/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive +/ number in the path name. _VOLUME_STRS defines the drive ID strings for each +/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for +/ the drive ID strings are: A-Z and 0-9. */ + + +#define _MULTI_PARTITION 0 +/* This option switches support of multi-partition on a physical drive. +/ By default (0), each logical drive number is bound to the same physical drive +/ number and only an FAT volume found on the physical drive will be mounted. +/ When multi-partition is enabled (1), each logical drive number can be bound to +/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk() +/ funciton will be available. */ + + +#define _MIN_SS 512 +#define _MAX_SS 512 +/* These options configure the range of sector size to be supported. (512, 1024, +/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and +/ harddisk. But a larger value may be required for on-board flash memory and some +/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured +/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the +/ disk_ioctl() function. */ + + +#define _USE_TRIM 0 +/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable) +/ To enable Trim function, also CTRL_TRIM command should be implemented to the +/ disk_ioctl() function. */ + + +#define _FS_NOFSINFO 0 +/* If you need to know correct free space on the FAT32 volume, set bit 0 of this +/ option, and f_getfree() function at first time after volume mount will force +/ a full FAT scan. Bit 1 controls the use of last allocated cluster number. +/ +/ bit0=0: Use free cluster count in the FSINFO if available. +/ bit0=1: Do not trust free cluster count in the FSINFO. +/ bit1=0: Use last allocated cluster number in the FSINFO if available. +/ bit1=1: Do not trust last allocated cluster number in the FSINFO. +*/ + + + +/*---------------------------------------------------------------------------/ +/ System Configurations +/---------------------------------------------------------------------------*/ + +#define _FS_TINY 0 +/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny) +/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes. +/ Instead of private sector buffer eliminated from the file object, common sector +/ buffer in the file system object (FATFS) is used for the file data transfer. */ + + +#define _FS_EXFAT 0 +/* This option switches support of exFAT file system in addition to the traditional +/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled. +/ Note that enabling exFAT discards C89 compatibility. */ + + +#define _FS_NORTC 1 +#define _NORTC_MON 3 +#define _NORTC_MDAY 1 +#define _NORTC_YEAR 2016 +/* The option _FS_NORTC switches timestamp functiton. If the system does not have +/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable +/ the timestamp function. All objects modified by FatFs will have a fixed timestamp +/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time. +/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be +/ added to the project to get current time form real-time clock. _NORTC_MON, +/ _NORTC_MDAY and _NORTC_YEAR have no effect. +/ These options have no effect at read-only configuration (_FS_READONLY = 1). */ + + +#define _FS_LOCK 0 +/* The option _FS_LOCK switches file lock function to control duplicated file open +/ and illegal operation to open objects. This option must be 0 when _FS_READONLY +/ is 1. +/ +/ 0: Disable file lock function. To avoid volume corruption, application program +/ should avoid illegal open, remove and rename to the open objects. +/ >0: Enable file lock function. The value defines how many files/sub-directories +/ can be opened simultaneously under file lock control. Note that the file +/ lock control is independent of re-entrancy. */ + + +#define _FS_REENTRANT 0 +#define _FS_TIMEOUT 1000 +#define _SYNC_t HANDLE +/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs +/ module itself. Note that regardless of this option, file access to different +/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs() +/ and f_fdisk() function, are always not re-entrant. Only file/directory access +/ to the same volume is under control of this function. +/ +/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect. +/ 1: Enable re-entrancy. Also user provided synchronization handlers, +/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj() +/ function, must be added to the project. Samples are available in +/ option/syscall.c. +/ +/ The _FS_TIMEOUT defines timeout period in unit of time tick. +/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*, +/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be +/ included somewhere in the scope of ff.c. */ + + +/*--- End of configuration options ---*/ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c new file mode 100644 index 00000000..15594a56 --- /dev/null +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c @@ -0,0 +1,680 @@ +/*------------------------------------------------------------------------/ +/ MMCv3/SDv1/SDv2 (in SPI mode) control module +/-------------------------------------------------------------------------/ +/ +/ Copyright (C) 2013, ChaN, all right reserved. +/ +/ * This software is a free software and there is NO WARRANTY. +/ * No restriction on use. You can use, modify and redistribute it for +/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. +/ * Redistributions of source code must retain the above copyright notice. +/ +/-------------------------------------------------------------------------*/ + + +/* + * This file was modified from a sample available from the FatFs + * web site. It was modified to work with a Olimexino-STM32F3 + * evaluation board. + * + */ +#include "diskio.h" +#include "stm32f3xx.h" /* STM32 registers and drivers */ +#include "stm32f3xx_ll_bus.h" /* STM32 LL BUS header */ +#include "stm32f3xx_ll_gpio.h" /* STM32 LL GPIO header */ +#include "stm32f3xx_ll_spi.h" /* STM32 LL SPI header */ +#include "boot.h" + + +/*-------------------------------------------------------------------------- + + Macro Definitions + +---------------------------------------------------------------------------*/ +/* MMC card type flags (MMC_GET_TYPE) */ +#define CT_MMC 0x01 /* MMC ver 3 */ +#define CT_SD1 0x02 /* SD ver 1 */ +#define CT_SD2 0x04 /* SD ver 2 */ +#define CT_SDC (CT_SD1|CT_SD2) /* SD */ +#define CT_BLOCK 0x08 /* Block addressing */ + + +/*-------------------------------------------------------------------------- + + Module Private Functions + +---------------------------------------------------------------------------*/ + +/* Definitions for MMC/SDC command */ +#define CMD0 (0) /* GO_IDLE_STATE */ +#define CMD1 (1) /* SEND_OP_COND */ +#define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */ +#define CMD8 (8) /* SEND_IF_COND */ +#define CMD9 (9) /* SEND_CSD */ +#define CMD10 (10) /* SEND_CID */ +#define CMD12 (12) /* STOP_TRANSMISSION */ +#define ACMD13 (13|0x80) /* SD_STATUS (SDC) */ +#define CMD16 (16) /* SET_BLOCKLEN */ +#define CMD17 (17) /* READ_SINGLE_BLOCK */ +#define CMD18 (18) /* READ_MULTIPLE_BLOCK */ +#define CMD23 (23) /* SET_BLOCK_COUNT */ +#define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */ +#define CMD24 (24) /* WRITE_BLOCK */ +#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */ +#define CMD41 (41) /* SEND_OP_COND (ACMD) */ +#define CMD55 (55) /* APP_CMD */ +#define CMD58 (58) /* READ_OCR */ + + +/* Control signals (Platform dependent) */ +#define CS_LOW() LL_GPIO_ResetOutputPin(GPIOD, LL_GPIO_PIN_2) /* MMC CS = L */ +#define CS_HIGH() LL_GPIO_SetOutputPin(GPIOD, LL_GPIO_PIN_2) /* MMC CS = H */ + + +#define FCLK_SLOW() /* Set slow clock (100k-400k) */ +#define FCLK_FAST() set_max_speed() /* Set fast clock (depends on the CSD) */ + +static volatile +DSTATUS Stat = STA_NOINIT; /* Disk status */ + +static +UINT CardType; + +/*-----------------------------------------------------------------------*/ +/* Transmit/Receive data to/from MMC via SPI (Platform dependent) */ +/*-----------------------------------------------------------------------*/ + +static +BYTE xchg_spi (BYTE dat) +{ + BYTE result = 0; + DWORD timeOutTime; + BYTE timeoutDetected = 0; + + /* Send byte through the SPI peripheral */ + LL_SPI_TransmitData8(SPI2, dat); + + /* Set timeout for 50 ms from now */ + timeOutTime = TimerGet() + 50; + + /* Wait to receive a byte with timeout */ + while (LL_SPI_IsActiveFlag_RXNE(SPI2) == 0) + { + /* Service the watchdog */ + CopService(); + + /* Check for timeout */ + if (TimerGet() > timeOutTime) + { + /* Set flag to remember that a timeout occurred and nothing was received */ + timeoutDetected = 1; + /* Stop waiting */ + break; + } + } + + /* Read the value of the received byte */ + if (timeoutDetected == 0) + { + result = LL_SPI_ReceiveData8(SPI2); + } + + /* Give the result back to the caller */ + return result; +} + +static +void rcvr_spi_m (BYTE *dst) +{ + *dst = xchg_spi(0xFF); +} + + +/*-----------------------------------------------------------------------*/ +/* Power Control (Platform dependent) */ +/*-----------------------------------------------------------------------*/ +/* When the target system does not support socket power control, there */ +/* is nothing to do in these functions. */ +static +void power_on (void) +{ + LL_SPI_InitTypeDef SPI_InitStruct = { 0 }; + LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 }; + BYTE n; + + /* + * This doesn't really turn the power on, but initializes the + * SSI port and pins needed to talk to the card. + */ + /* Enable SPI and GPIO peripheral clocks. */ + LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB); + LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD); + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2); + + /* Configure I/O for Chip select (PD2) */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_2; + GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + LL_GPIO_Init(GPIOD, &GPIO_InitStruct); + /* De-select the Card: Chip Select high */ + LL_GPIO_SetOutputPin(GPIOD, LL_GPIO_PIN_2); + + /* Configure SPI pins: SCK (PB13), MOSI (PB15) and MISO (PB14) */ + GPIO_InitStruct.Pin = LL_GPIO_PIN_13 | LL_GPIO_PIN_14 | LL_GPIO_PIN_15; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + GPIO_InitStruct.Alternate = LL_GPIO_AF_5; + LL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* SPI2 parameter configuration */ + SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct.Mode = LL_SPI_MODE_MASTER; + SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; + SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE; + SPI_InitStruct.NSS = LL_SPI_NSS_SOFT; + SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV128; // 36000kHz/128=281kHz < 400kHz + SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct.CRCPoly = 7; + LL_SPI_Init(SPI2, &SPI_InitStruct); + LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA); + LL_SPI_DisableNSSPulseMgt(SPI2); + LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER); + LL_SPI_Enable(SPI2); + + /* Apply more than 74 pulses to SCLK, with DI and CS high, for the card to be able to + * accept a native command at SCLK < 400 kHz. + */ + for (n = 10; n; n--) + { + xchg_spi(0xFF); /* Send 80 dummy clocks */ + } +} + +// set the SSI speed to the max setting +static +void set_max_speed(void) +{ + LL_SPI_InitTypeDef SPI_InitStruct; + + /* Disable the SPI system */ + LL_SPI_Disable(SPI2); + + /* MMC/SDC can work at the clock frequency up to 20/25MHz so pick a speed close to + * this but not higher + */ + SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX; + SPI_InitStruct.Mode = LL_SPI_MODE_MASTER; + SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT; + SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW; + SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE; + SPI_InitStruct.NSS = LL_SPI_NSS_SOFT; + SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2; // 36MHz/2=18MHz < 20MHz + SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST; + SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE; + SPI_InitStruct.CRCPoly = 7; + LL_SPI_Init(SPI2, &SPI_InitStruct); + LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA); + LL_SPI_DisableNSSPulseMgt(SPI2); + LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER); + LL_SPI_Enable(SPI2); +} + +static +void power_off (void) +{ + Stat |= STA_NOINIT; /* Force uninitialized */ +} + + +/*-----------------------------------------------------------------------*/ +/* Wait for card ready */ +/*-----------------------------------------------------------------------*/ + +static +int wait_ready (void) +{ + BYTE d; + DWORD timeOutTime; + + /* set timeout for 500 ms from now */ + timeOutTime = TimerGet() + 500; + + do { + d = xchg_spi(0xFF); + /* Service the watchdog */ + CopService(); + } while ((d != 0xFF) && (TimerGet() < timeOutTime)); + + return (d == 0xFF) ? 1 : 0; +} + + +/*-----------------------------------------------------------------------*/ +/* Deselect the card and release SPI bus */ +/*-----------------------------------------------------------------------*/ + +static +void deselect_card (void) +{ + CS_HIGH(); + xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */ +} + + + +/*-----------------------------------------------------------------------*/ +/* Select the card and wait ready */ +/*-----------------------------------------------------------------------*/ + +static +int select_card (void) /* 1:Successful, 0:Timeout */ +{ + CS_LOW(); + xchg_spi(0xFF); /* Dummy clock (force DO enabled) */ + + if (wait_ready()) return 1; /* OK */ + deselect_card(); + return 0; /* Timeout */ +} + + + +/*-----------------------------------------------------------------------*/ +/* Receive a data packet from MMC */ +/*-----------------------------------------------------------------------*/ + +static +int rcvr_datablock ( /* 1:OK, 0:Failed */ + BYTE *buff, /* Data buffer to store received data */ + UINT btr /* Byte count (must be multiple of 4) */ +) +{ + BYTE token; + DWORD timeOutTime; + + /* set timeout for 100 ms from now */ + timeOutTime = TimerGet() + 100; + + do { /* Wait for data packet in timeout of 100ms */ + token = xchg_spi(0xFF); + /* Service the watchdog */ + CopService(); + + } while ((token == 0xFF) && (TimerGet() < timeOutTime)); + + if(token != 0xFE) return 0; /* If not valid data token, retutn with error */ + + do { /* Receive the data block into buffer */ + rcvr_spi_m(buff++); + rcvr_spi_m(buff++); + /* Service the watchdog */ + CopService(); + } while (btr -= 2); + xchg_spi(0xFF); /* Discard CRC */ + xchg_spi(0xFF); + + return 1; /* Return with success */ +} + + + +/*-----------------------------------------------------------------------*/ +/* Send a data packet to MMC */ +/*-----------------------------------------------------------------------*/ + +static +int xmit_datablock ( /* 1:OK, 0:Failed */ + const BYTE *buff, /* 512 byte data block to be transmitted */ + BYTE token /* Data token */ +) +{ + BYTE resp; + UINT wc; + + + if (!wait_ready()) return 0; + + xchg_spi(token); /* Xmit a token */ + if (token != 0xFD) { /* Not StopTran token */ + wc = 512; + do { /* Xmit the 512 byte data block to MMC */ + xchg_spi(*buff++); + xchg_spi(*buff++); + } while (wc -= 2); + xchg_spi(0xFF); /* CRC (Dummy) */ + xchg_spi(0xFF); + resp = xchg_spi(0xFF); /* Receive a data response */ + if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */ + return 0; + } + + return 1; +} + + + +/*-----------------------------------------------------------------------*/ +/* Send a command packet to MMC */ +/*-----------------------------------------------------------------------*/ + +static +BYTE send_cmd ( + BYTE cmd, /* Command byte */ + DWORD arg /* Argument */ +) +{ + BYTE n/*, res*/; + static volatile BYTE res = 0; + + + if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */ + cmd &= 0x7F; + res = send_cmd(CMD55, 0); + if (res > 1) return res; + } + + /* Select the card and wait for ready */ + deselect_card(); + if (!select_card()) return 0xFF; + + /* Send command packet */ + xchg_spi(0x40 | cmd); /* Start + Command index */ + xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */ + xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */ + xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */ + xchg_spi((BYTE)arg); /* Argument[7..0] */ + n = 0x01; /* Dummy CRC + Stop */ + if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) + Stop */ + if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) + Stop */ + xchg_spi(n); + + /* Receive command response */ + if (cmd == CMD12) xchg_spi(0xFF); /* Skip a stuff byte on stop to read */ + n = 10; /* Wait for a valid response in timeout of 10 attempts */ + do { + res = xchg_spi(0xFF); + /* Service the watchdog */ + CopService(); + } while ((res & 0x80) && --n); + + return res; /* Return with the response value */ +} + + + +/*-------------------------------------------------------------------------- + + Public Functions + +---------------------------------------------------------------------------*/ + + +/*-----------------------------------------------------------------------*/ +/* Initialize Disk Drive */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_initialize ( + BYTE pdrv /* Physical drive nmuber (0) */ +) +{ + BYTE n, cmd, ty, ocr[4]; + DWORD timeOutTime; + + + if (pdrv) return STA_NOINIT; /* Supports only single drive */ + if (Stat & STA_NODISK) return Stat; /* No card in the socket */ + + power_on(); /* Force socket power on */ + + CS_LOW(); /* CS = L */ + + ty = 0; + if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ + timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */ + + if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */ + for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */ + if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ + while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle state (ACMD41 with HCS bit) */ + if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */ + for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); + ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */ + } + } + } else { /* SDv1 or MMCv3 */ + if (send_cmd(ACMD41, 0) <= 1) { + ty = CT_SD1; cmd = ACMD41; /* SDv1 */ + } else { + ty = CT_MMC; cmd = CMD1; /* MMCv3 */ + } + while ((TimerGet() < timeOutTime) && send_cmd(cmd, 0)) { /* Wait for leaving idle state */ + /* Service the watchdog */ + CopService(); + } + if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to 512 */ + ty = 0; + } + } + CardType = ty; + deselect_card(); + + if (ty) { /* Initialization succeded */ + Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */ + FCLK_FAST(); + } else { /* Initialization failed */ + power_off(); + } + + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Get Disk Status */ +/*-----------------------------------------------------------------------*/ + +DSTATUS disk_status ( + BYTE pdrv /* Physical drive nmuber (0) */ +) +{ + if (pdrv) return STA_NOINIT; /* Supports only single drive */ + return Stat; +} + + + +/*-----------------------------------------------------------------------*/ +/* Read Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_read ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + DWORD sector, /* Sector address in LBA */ + UINT count /* Number of sectors to read */ +) +{ + if (pdrv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block read */ + if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */ + && rcvr_datablock(buff, 512)) + count = 0; + } + else { /* Multiple block read */ + if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */ + do { + if (!rcvr_datablock(buff, 512)) break; + buff += 512; + /* Service the watchdog */ + CopService(); + } while (--count); + send_cmd(CMD12, 0); /* STOP_TRANSMISSION */ + } + } + deselect_card(); + + return count ? RES_ERROR : RES_OK; +} + + + +/*-----------------------------------------------------------------------*/ +/* Write Sector(s) */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_write ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + DWORD sector, /* Sector address in LBA */ + UINT count /* Number of sectors to write */ +) +{ + if (pdrv || !count) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + if (Stat & STA_PROTECT) return RES_WRPRT; + + if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */ + + if (count == 1) { /* Single block write */ + if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */ + && xmit_datablock(buff, 0xFE)) + count = 0; + } + else { /* Multiple block write */ + if (CardType & CT_SDC) send_cmd(ACMD23, count); + if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */ + do { + if (!xmit_datablock(buff, 0xFC)) break; + buff += 512; + /* Service the watchdog */ + CopService(); + } while (--count); + if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */ + count = 1; + } + } + deselect_card(); + + return count ? RES_ERROR : RES_OK; +} + + + +/*-----------------------------------------------------------------------*/ +/* Miscellaneous Functions */ +/*-----------------------------------------------------------------------*/ + +DRESULT disk_ioctl ( + BYTE pdrv, /* Physical drive nmuber (0) */ + BYTE cmd, /* Control code */ + void *buff /* Buffer to send/receive data block */ +) +{ + DRESULT res; + BYTE n, csd[16], *ptr = buff; + DWORD csz; + + + if (pdrv) return RES_PARERR; + if (Stat & STA_NOINIT) return RES_NOTRDY; + + res = RES_ERROR; + switch (cmd) { + case CTRL_SYNC : /* Flush write-back cache, Wait for end of internal process */ + if (select_card()) res = RES_OK; + break; + + case GET_SECTOR_COUNT : /* Get number of sectors on the disk (WORD) */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { + if ((csd[0] >> 6) == 1) { /* SDv2? */ + csz = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1; + *(DWORD*)buff = csz << 10; + } else { /* SDv1 or MMCv3 */ + n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2; + csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1; + *(DWORD*)buff = csz << (n - 9); + } + res = RES_OK; + } + break; + + case GET_BLOCK_SIZE : /* Get erase block size in unit of sectors (DWORD) */ + if (CardType & CT_SD2) { /* SDv2? */ + if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */ + xchg_spi(0xFF); + if (rcvr_datablock(csd, 16)) { /* Read partial block */ + for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */ + *(DWORD*)buff = 16UL << (csd[10] >> 4); + res = RES_OK; + } + } + } else { /* SDv1 or MMCv3 */ + if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */ + if (CardType & CT_SD1) { /* SDv1 */ + *(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1); + } else { /* MMCv3 */ + *(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1); + } + res = RES_OK; + } + } + break; + + case MMC_GET_TYPE : /* Get card type flags (1 byte) */ + *ptr = CardType; + res = RES_OK; + break; + + case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */ + if ((send_cmd(CMD9, 0) == 0) /* READ_CSD */ + && rcvr_datablock(buff, 16)) + res = RES_OK; + break; + + case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */ + if ((send_cmd(CMD10, 0) == 0) /* READ_CID */ + && rcvr_datablock(buff, 16)) + res = RES_OK; + break; + + case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */ + if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */ + for (n = 0; n < 4; n++) { + *((BYTE*)buff+n) = xchg_spi(0xFF); + /* Service the watchdog */ + CopService(); + } + res = RES_OK; + } + break; + + case MMC_GET_SDSTAT : /* Receive SD status as a data block (64 bytes) */ + if ((CardType & CT_SD2) && send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */ + xchg_spi(0xFF); + if (rcvr_datablock(buff, 64)) + res = RES_OK; + } + break; + + default: + res = RES_PARERR; + } + + deselect_card(); + + return res; +} + + + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld index bb15a017..66953a92 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld @@ -47,7 +47,7 @@ MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 8K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 40K - FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 40K } /* Sections */ diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml index c45fa8e6..622d6264 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec index 210f5af9..878f0727 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec @@ -1,529 +1,529 @@ S022000064656D6F70726F675F6F6C696D6578696E6F5F73746D333266332E73726563C1 -S3150800800000A0002015870008E9860008EB8600080E -S31508008010ED860008EF860008F186000800000000DB -S31508008020000000000000000000000000F3860008C1 -S31508008030F586000800000000F7860008F9860008A3 -S315080080406587000865870008658700086587000852 -S315080080506587000865870008658700086587000842 -S315080080606587000865870008658700086587000832 -S315080080706587000865870008658700086587000822 -S315080080806587000865870008658700086587000812 -S315080080906587000865870008658700086587000802 -S315080080A065870008658700086587000865870008F2 -S315080080B065870008658700086587000865870008E2 -S315080080C065870008658700086587000865870008D2 -S315080080D065870008658700086587000865870008C2 -S315080080E065870008658700086587000865870008B2 -S315080080F065870008658700086587000865870008A2 -S31508008100000000000000000000000000658700086D -S315080081106587000865870008658700086587000881 -S315080081206587000865870008658700086587000871 -S315080081306587000865870008000000000000000049 -S315080081406587000865870008658700080000000045 -S315080081500000000000000000000000000000000011 -S315080081600000000000000000658700086587000819 -S3150800817065870008000000000000000000000000FD -S311080081800000000065870008EE11AA55F3 -S3150800818C10B5054C237833B9044B13B10448AFF337 -S3150800819C00800123237010BD0C0000200000000095 -S315080081AC3CA0000808B5034B1BB103490348AFF3C1 -S315080081BC008008BD00000000100000203CA000084C -S315080081CC08B500F06FF900F03FF900F0B3F808BDF8 -S315080081DC08B500F041F900F031F908BD08B50948B1 -S315080081EC094B03604FF46143436000238360C3600B -S315080081FC03610C2242618361C3610362436201F02D -S3150800820CB9FE08BD50000020004800402DE9F04199 -S3150800821C04460D461746984601F06AFA1649A1FB1C -S3150800822C00318909002301E00133DBB2112B1FD879 -S3150800823C124A12F8130002EB4302527800EB020CB6 -S3150800824C0CFB044CB1FBFCFE0CFB1E16002EEBD1F2 -S3150800825C1FFA8EFCA5F800C00CF1FF3C1FFA8CFC2B -S3150800826CBCF5806FE0D2387088F80020012000E059 -S3150800827C0020BDE8F08100BFD34D621054A0000861 -S3150800828C70B58CB00025ADF82E508DF82D508DF8A4 -S3150800829C2C500BAB0DF12D020DF12E014FF4FA708B -S315080082ACFFF7B4FF1A4C1B4B236025766576A5762B -S315080082BC0126E67625776577A560E5609DF82D306D -S315080082CC013B1B0423619DF82C30013B1B056361A4 -S315080082DCBDF82E306360204600F08AFA069507959D -S315080082EC08964CF6E043019302954FF6E073039318 -S315080082FC04230493059509960E230A9301A920468F -S3150800830C00F01CFB204600F09CFB0CB070BD00BFB7 -S3150800831C280000200064004008B50146002301220D -S3150800832C034801F045FD08B1002008BD0120FCE713 -S3150800833C5000002008B5FFF751FFFFF7A1FF08BD55 -S3150800834CBFF34F8F0549CA6802F4E062044B134326 -S3150800835CCB60BFF34F8F00BFFDE700BF00ED00E019 -S3150800836C0400FA0508B5214B1B78B3B92048FFF76A -S3150800837CD3FF012800D008BD1D4B1B78013BDBB28F -S3150800838C802BF8D800F08FF81A4B1860174B01227F -S3150800839C1A70194B00221A70EDE7174B1B7801332C -S315080083AC13481844FFF7B8FF012813D1124A13785B -S315080083BC0133DBB213700E4A12789342DBD10B4AA7 -S315080083CC002111700A4A5278FF2AD4D1022BD2D135 -S315080083DCFFF7B6FF00F067F8064B1B686433984244 -S315080083ECC9D9024B00221A70C5E700BF5A010020F2 -S315080083FCD80000205C0100205B01002000B58BB082 -S3150800840C01AB03AA00210C4800F049FB20B9039ADA -S3150800841C40F267639A4202D00BB05DF804FB059BE9 -S3150800842C002BF9D19DF80430FF2BF5D1079B022BB5 -S3150800843CF2D1FFF785FF00BF2800002008B5FFF72B -S3150800844C91FFFFF7DBFF08BD08B5002220214FF08E -S3150800845C904000F01BFD08BD10B500F024F80F4B3A -S3150800846C1B68C31AB3F5FA7F0DD304460C4B1B785D -S3150800847C53B901220A4B1A7020214FF0904000F094 -S3150800848C05FD064B1C6010BD0022054B1A702021F9 -S3150800849C4FF0904000F0FAFCF3E700BF64010020AF -S315080084AC60010020704708B500F09CF908BD000073 -S315080084BC014A024B9A6070470080000800ED00E004 -S315080084CC10B588B000240394049405940694079474 -S315080084DC174B5A6942F480025A615A6902F48002AF -S315080084EC0092009A5A6942F400325A615A6902F4A7 -S315080084FC00320192019A5A6942F480225A615B69E8 -S3150800850C03F480230293029B224620214FF09040CD -S3150800851C00F0BCFC202303930123049305940694D2 -S3150800852C03A94FF0904000F0CDFB08B010BD00BF7A -S3150800853C0010024072B6FEE700B59FB02822002153 -S3150800854C14A801F06DFD00210F9110911191129153 -S3150800855C13913C22684601F063FD012214924FF4F4 -S3150800856C80331593189202221B921C934FF4E01336 -S3150800857C1D9314A800F090FCC0B90F230F93022189 -S3150800858C1091002311934FF48062129213930FA843 -S3150800859C00F0D4FF60B904230093002304936846C3 -S315080085AC01F0D2F830B91FB05DF804FBFFF7C2FF33 -S315080085BCFFF7C0FFFFF7BEFF08B5FFF779FF00F01E -S315080085CCF3F8FFF7B9FFFFF77BFFFFF7F9FDFFF7A6 -S315080085DCFFFDFCE782B00A4B9A6942F001029A61E8 -S315080085EC9A6902F001020092009ADA6942F0805206 -S315080085FCDA61DB6903F080530193019B02B0704783 -S3150800860C0010024000B589B0002303930493059328 -S3150800861C069307930268144B9A4202D009B05DF888 -S3150800862C04FB03F5D633DA6942F00072DA61DA69CB -S3150800863C02F000720192019A5A6942F480225A6138 -S3150800864C5B6903F480230293029B4FF440730393F4 -S3150800865C02230493032306930923079303A90348C8 -S3150800866C00F030FBDAE700BF006400400004004865 -S3150800867C00B589B0002303930493059306930793D7 -S3150800868C0268144B9A4202D009B05DF804FB03F554 -S3150800869CE433DA6942F48022DA61DA6902F4802278 -S315080086AC0192019A5A6942F480225A615B6903F471 -S315080086BC80230293029B4FF4406303930223049393 -S315080086CC032306930723079303A9034800F0FAFA32 -S315080086DCDAE700BF0048004000040048FEE7FEE762 -S315080086ECFEE7FEE7FEE770477047704708B500F0EF -S315080086FC6DF808BD034AD2F8883043F47003C2F803 -S3150800870C8830704700ED00E0DFF834D0FFF7F2FF51 -S3150800871C0C480D490D4A002302E0D458C4500433C2 -S3150800872CC4188C42F9D30A4A0A4C002301E0136098 -S3150800873C0432A242FBD301F04FFCFFF73DFFFEE7E4 -S3150800874C00A00020000000200C000020B8A00008A3 -S3150800875C0C0000206C010020FEE7000010B5044652 -S3150800876C0E4B18784FF47A73B3FBF0F30C4A106877 -S3150800877CB0FBF3F000F092FA68B90F2C01D901207E -S3150800878C0AE0002221464FF0FF3000F04FFA054B65 -S3150800879C1C60002000E0012010BD00BF0400002072 -S315080087AC000000200800002008B5074A136843F0AB -S315080087BC10031360032000F027FA0F20FFF7CEFFF3 -S315080087CCFFF708FF002008BD00200240034A116885 -S315080087DC034B1B780B441360704700BF68010020DD -S315080087EC04000020014B1868704700BF6801002080 -S315080087FC002800F0A18038B5044690F82030D3B193 -S3150800880C2268136843F001031360FFF7EBFF054674 -S3150800881C23685A6812F0010F10D1FFF7E3FF401BCB -S3150800882C0A28F5D9636A43F400336362052384F88E -S3150800883C2030012038BDFFF7E5FEE1E71A6822F083 -S3150800884C02021A60FFF7CEFF054623685A6812F033 -S3150800885C020F0DD0FFF7C6FF401B0A28F5D9636A2D -S3150800886C43F400336362052384F820300120E1E7E2 -S3150800887C227E012A3DD01A6822F080021A60637E95 -S3150800888C012B3BD02268136823F040031360A37EA8 -S3150800889C012B39D02268136823F020031360E37E7A -S315080088AC012B37D02268136843F010031360237F1B -S315080088BC012B35D02268136823F008031360637FF5 -S315080088CC012B33D02268136823F004031360A368C2 -S315080088DCE268134322691343626913436268013AD7 -S315080088EC21681343CB6100206062012384F8203091 -S315080088FCA0E71A6842F080021A60C0E7226813687B -S3150800890C43F040031360C2E72268136843F0200360 -S3150800891C1360C4E72268136823F010031360C6E7D4 -S3150800892C2268136843F008031360C8E722681368C3 -S3150800893C43F004031360CAE701207047026890F8F5 -S3150800894C2030013BDBB2012B05D9436A43F4802363 -S3150800895C43620120704730B4D2F8003243F0010369 -S3150800896CC2F800324B6903F01F03012000FA03F327 -S3150800897CD2F81C026FEA030C20EA0300C2F81C02A8 -S3150800898CC869B0B9D2F80C020CEA0000C2F80C029D -S3150800899C8C884869CD6844EA0544483042F830402A -S315080089AC0C8848698D6844EA0544483002EBC000D7 -S315080089BC4460C86901281BD0886980BBD2F80402B8 -S315080089CC0CEA0000C2F80402086970BBD2F814025B -S315080089DC0CEA0000C2F81402096A01292BD0D2F855 -S315080089EC003223F00103C2F80032002030BC704775 -S315080089FCD2F80C021843C2F80C028C8848690D6828 -S31508008A0C44EA0544483042F830408C8948698D68F8 -S31508008A1C44EA0544483002EBC0004460CCE7D2F87F -S31508008A2C04021843C2F80402CEE7D2F8140218431B -S31508008A3CC2F81402D0E7D2F81C120B43C2F81C3247 -S31508008A4CCDE770B5044690F82050EDB2012D06D04E -S31508008A5C436A43F4002343620125284670BD02236A -S31508008A6C80F820300268136823F001031360FFF7BF -S31508008A7CB9FE064623685B6813F0010F0CD0FFF7A6 -S31508008A8CB1FE831B0A2BF5D9636A43F40033636280 -S31508008A9C052384F82030E0E700256562DDE790F8C9 -S31508008AAC20C00CF1FF3C5FFA8CFCBCF1010F00F204 -S31508008ABCA58030B451B90468E46814F0030F10D1DA -S31508008ACC436A43F40013436201207EE00468246978 -S31508008ADC14F0030F05D1436A43F4001343620120D3 -S31508008AEC73E0056801F11B0424012C5904F00404F5 -S31508008AFC9460002C6BD1056801F11B0424012C59D8 -S31508008B0C640D1460046801F11B0C4FEA0C1C54F834 -S31508008B1C0C4004F00204D4600468A444DCF8045045 -S31508008B2C15F0080F5BD008241461056801F11B0CBD -S31508008B3C05EB0C156D68C5F307259561046804EB00 -S31508008B4C0C146468240C5461026802EB0112D2F806 -S31508008B5CB8211A70026802EB0112D2F8B821C2F3D6 -S31508008B6C07225A70026802EB0112D2F8B821C2F336 -S31508008B7C07429A70026802EB0112D2F8B821120E5B -S31508008B8CDA70026802EB0112D2F8BC211A7102687B -S31508008B9C02EB0112D2F8BC21C2F307225A71026801 -S31508008BAC02EB0112D2F8BC21C2F307429A71026891 -S31508008BBC02EB0112D2F8BC21120EDA71C1B90268A5 -S31508008BCCD36843F02003D360002030BC7047056897 -S31508008BDC01F11B0424012C59E408546092E701F1B5 -S31508008BEC1B0504EB0514646804F00F0414619CE778 -S31508008BFC0268136943F020031361E5E7436A43F4FB -S31508008C0C8023436201207047074AD36823F4E06344 -S31508008C1C1B041B0C000200F4E060034343F0BF6323 -S31508008C2C43F40033D360704700ED00E000B5194BF0 -S31508008C3CDB68C3F30223C3F1070CBCF1040F28BF8E -S31508008C4C4FF0040C03F1040EBEF1060F18D9033BC2 -S31508008C5C4FF0FF3E0EFA0CFC21EA0C0199400EFA75 -S31508008C6C03F322EA0303194300280BDB0901C9B2F3 -S31508008C7C00F1604000F5614080F800135DF804FBD4 -S31508008C8C0023E5E700F00F000901C9B2024B19549D -S31508008C9CF4E700BF00ED00E014ED00E00138B0F198 -S31508008CAC807F0BD24FF0E0235861054AF02182F8F9 -S31508008CBC23100020986107221A617047012070471B -S31508008CCC00ED00E0F0B583B0002362E085685E0035 -S31508008CDC0324B44025EA0405CC68B4402C438460CC -S31508008CEC446824EA0C0C4C68C4F300149C4044EA0F -S31508008CFC0C0444605EE0DD08083550F8256003F086 -S31508008D0C07044FEA840C0F2404FA0CF426EA040E22 -S31508008D1C0C6904FA0CF444EA0E0440F8254060E0A9 -S31508008D2C042400E0002404FA0EF42C430CF1020C83 -S31508008D3C524D45F82C40524CA568D44325EA0206F8 -S31508008D4C4F6817F4801F01D042EA05064C4DAE60F9 -S31508008D5CED6804EA05064F6817F4001F01D042EACD -S31508008D6C0506474DEE606D6804EA05064F6817F46C -S31508008D7C003F01D042EA0506414D6E602D682C4035 -S31508008D8C4E6816F4803F01D042EA05043C4A14604A -S31508008D9C01330A6832FA03F46ED04FF0010C0CFA60 -S31508008DAC03FC1CEA0202F3D04C6804F00304013CF1 -S31508008DBC012C8BD94C6804F00304032C0CD0C46822 -S31508008DCC5D004FF0030C0CFA05FC24EA0C0C8C68BD -S31508008DDCAC4044EA0C04C4604C6804F00304022C4E -S31508008DEC89D004684FEA430E4FF0030C0CFA0EFCBC -S31508008DFC24EA0C0C4C6804F0030404FA0EF444EA56 -S31508008E0C0C0404604C6814F4403FC1D01D4CA56991 -S31508008E1C45F00105A561A46904F001040194019CBF -S31508008E2C4FEA930C0CF10205144C54F8255003F038 -S31508008E3C03044FEA840E0F2404FA0EF425EA0405FB -S31508008E4CB0F1904F3FF46EAF0F4CA0420ED004F524 -S31508008E5C8064A0420CD004F58064A0420AD004F5C4 -S31508008E6C8064A0423FF45CAF05245CE701245AE712 -S31508008E7C022458E7032456E703B0F0BD000001406E -S31508008E8C0004014000100240000400480AB1816148 -S31508008E9C7047816270470000002800F0018370B5A6 -S31508008EAC82B00446036813F0010F3BD0B54B5B68E0 -S31508008EBC03F00C03042B1ED0B24B5B6803F00C03B7 -S31508008ECC082B13D06368B3F5803F68D0002B40F0AD -S31508008EDC928003F1804303F504331A6822F4803236 -S31508008EEC1A601A6822F480221A605DE0A54B5B684A -S31508008EFC13F4803FE6D04FF4003393FAA3F3A14B57 -S31508008F0C19684FF4003393FAA3F3B3FA83F303F017 -S31508008F1C1F03012202FA03F30B4203D06368002BEA -S31508008F2C00F0C082236813F0020F00F0C580954B41 -S31508008F3C5B6813F00C0F00F09C80924B5B6803F097 -S31508008F4C0C03082B00F08F802369002B00F0F280AD -S31508008F5C012292FAA2F3B3FA83F303F1845303F5CD -S31508008F6C84139B001A60FFF73DFC0546022393FA0F -S31508008F7CA3F3844B1968022393FAA3F3B3FA83F386 -S31508008F8C03F01F03012202FA03F30B4240F0C380DD -S31508008F9CFFF728FC401B0228E8D903208BE2794A04 -S31508008FAC136843F480331360764AD36A23F00F03AD -S31508008FBCA1680B43D3626368002B36D0FFF712FC0B -S31508008FCC05464FF4003393FAA3F36E4B19684FF426 -S31508008FDC003393FAA3F3B3FA83F303F01F030122C6 -S31508008FEC02FA03F30B429DD1FFF7FCFB401B6428E6 -S31508008FFCE7D903205FE2B3F5A02F09D0614B1A68B5 -S3150800900C22F480321A601A6822F480221A60CBE79E -S3150800901C03F18043A3F53C331A6842F480221A60A4 -S3150800902C1A6842F480321A60BEE7FFF7DBFB054686 -S3150800903C4FF4003393FAA3F3524B19684FF40033E9 -S3150800904C93FAA3F3B3FA83F303F01F03012202FA8C -S3150800905C03F30B423FF466AFFFF7C4FB401B6428CF -S3150800906CE6D9032027E2474B5B6813F4803F7FF46D -S3150800907C6BAF022393FAA3F3424B1968022393FAB4 -S3150800908CA3F3B3FA83F303F01F03012202FA03F3E3 -S3150800909C0B4203D02369934240F006823948036891 -S315080090AC23F0F8036169F82292FAA2F2B2FA82F274 -S315080090BC01FA02F213430360236813F0080F00F059 -S315080090CC8D80A369002B61D0012191FAA1F2B2FA25 -S315080090DC82F22D4B13449B001960FFF783FB054660 -S315080090EC022393FAA3F293FAA3F293FAA3F2254A6C -S315080090FC516A93FAA3F3B3FA83F303F01F0301221D -S3150800910C02FA03F30B4269D1FFF76CFB401B0228EA -S3150800911CE6D90320CFE11B48036823F0F8036169FD -S3150800912CF82292FAA2F2B2FA82F201FA02F2134386 -S3150800913C0360C1E7012393FAA3F3B3FA83F303F1AC -S3150800914C845303F584139B0000221A60FFF74AFB2D -S3150800915C0546022393FAA3F30A4B1968022393FADA -S3150800916CA3F3B3FA83F303F01F03012202FA03F302 -S3150800917C0B42A1D0FFF736FB401B0228E9D9032086 -S3150800918C99E100BF0010024020819010012292FA4A -S3150800919CA2F2B2FA82F2B74B13449B0000221A6071 -S315080091ACFFF720FB0546022393FAA3F293FAA3F2E0 -S315080091BC93FAA3F2B04A516A93FAA3F3B3FA83F378 -S315080091CC03F01F03012202FA03F30B4206D0FFF742 -S315080091DC09FB401B0228E6D903206CE1236813F02F -S315080091EC040F00F0A980A44BDB6913F0805F20D133 -S315080091FCA14BDA6942F08052DA61DB6903F08053DD -S3150800920C0193019B01259D4B1B6813F4807F12D09B -S3150800921CE368012B23D073BB03F1804303F50433B6 -S3150800922C1A6A22F001021A621A6A22F004021A62F7 -S3150800923C1AE00025E7E7914A136843F48073136034 -S3150800924CFFF7D0FA06468D4B1B6813F4807FDFD1E7 -S3150800925CFFF7C8FA801B6428F5D903202BE1864A48 -S3150800926C136A43F001031362E368002B3CD0FFF743 -S3150800927CB9FA06462BE0052B09D07F4B1A6A22F061 -S3150800928C01021A621A6A22F004021A62ECE77A4B95 -S3150800929C1A6A42F004021A621A6A42F001021A6247 -S315080092ACE2E7754B196A022393FAA3F3B3FA83F32D -S315080092BC03F01F03012202FA03F319423BD1FFF70D -S315080092CC91FA801B41F28833984200F2EF80022310 -S315080092DC93FAA3F293FAA3F3002BE2D1022393FA9F -S315080092ECA3F3654B596ADEE7FFF77CFA064615E0E9 -S315080092FC614B196A022393FAA3F3B3FA83F303F0C7 -S3150800930C1F03012202FA03F3194214D0FFF76AFA73 -S3150800931C801B41F28833984200F2CA80022393FAE2 -S3150800932CA3F293FAA3F3002BE2D1022393FAA3F345 -S3150800933C514B596ADEE7B5BBE369002B00F0BA80DE -S3150800934C4D4A526802F00C02082A00F09980022B4A -S3150800935C2FD04FF0807393FAA3F3B3FA83F303F188 -S3150800936C845303F584139B0000221A60FFF73AFA1C -S3150800937C04464FF0007393FAA3F33F4B19684FF06A -S3150800938C007393FAA3F3B3FA83F303F01F030122D2 -S3150800939C02FA03F319426BD0FFF724FA001B0228D2 -S315080093ACE7D9032087E0344AD36923F08053D36185 -S315080093BCC2E74FF0807393FAA3F3B3FA83F303F17E -S315080093CC845303F584139B0000221A60FFF70AFAEC -S315080093DC05464FF0007393FAA3F3274B19684FF021 -S315080093EC007393FAA3F3B3FA83F303F01F03012272 -S315080093FC02FA03F3194206D0FFF7F4F9401B0228C8 -S3150800940CE7D9032057E01C494B6823F47413626AA6 -S3150800941C206A024313434B604FF0807393FAA3F30D -S3150800942CB3FA83F303F1845303F584139B000122E7 -S3150800943C1A60FFF7D7F904464FF0007393FAA3F3B3 -S3150800944C0D4B19684FF0007393FAA3F3B3FA83F331 -S3150800945C03F01F03012202FA03F3194206D1FFF7A0 -S3150800946CC1F9001B0228E7D9032024E0002022E0DA -S3150800947C002020E02081901000100240007000406F -S3150800948C012B1AD0104B5B6803F48031226A914287 -S3150800949C15D103F47013626A934212D100200AE0C4 -S315080094AC01207047012006E0012004E0032002E0B9 -S315080094BC032000E0002002B070BD0120FBE701206C -S315080094CCF9E70120F7E700BF00100240164B5B686E -S315080094DC03F00C02082A01D01448704703F47011E3 -S315080094EC4FF4701292FAA2F2B2FA82F221FA02F24E -S315080094FC0F49885C0C4AD26A02F00F020F2191FAC6 -S3150800950CA1F1B1FA81F1CA400A498A5C13F4803F89 -S3150800951C05D0064BB3FBF2F303FB00F07047064B82 -S3150800952C03FB00F0704700BF0010024000127A00DF -S3150800953C90A00008A0A0000800093D00002800F033 -S3150800954CBE8070B50D460446614B1B6803F00703D5 -S3150800955C8B420BD25E4A136823F007030B43136046 -S3150800956C136803F007038B4240F0AB80236813F0B3 -S3150800957C020F06D0574A536823F0F003A1680B4331 -S3150800958C5360236813F0010F5AD06368012B2DD052 -S3150800959C022B40D0022292FAA2F24E4A10680222FC -S315080095AC92FAA2F2B2FA82F202F01F02012101FA31 -S315080095BC02F2104200F0878046494A6822F00302FC -S315080095CC13434B60FFF70EF90646424B5B6803F0F4 -S315080095DC0C036268B3EB820F32D0FFF703F9801BDA -S315080095EC41F288339842F0D9032067E04FF40032F1 -S315080095FC92FAA2F2374A10684FF4003292FAA2F2A3 -S3150800960CB2FA82F202F01F02012101FA02F20242B8 -S3150800961CD2D1012052E04FF0007292FAA2F22D4AF2 -S3150800962C10684FF0007292FAA2F2B2FA82F202F0C5 -S3150800963C1F02012101FA02F21042BDD101203DE0C0 -S3150800964C234B1B6803F00703AB420AD9204A13685D -S3150800965C23F007032B431360136803F00703AB428D -S3150800966C33D1236813F0040F06D01A4A536823F42F -S3150800967CE063E1680B435360236813F0080F07D0C7 -S3150800968C144A536823F46053216943EAC1035360AF -S3150800969CFFF71CFF0F4B5B6803F0F003F02292FAFE -S315080096ACA2F2B2FA82F2D3400B4AD35CD8400B4BE7 -S315080096BC18600B4B1868FFF751F8002070BD012095 -S315080096CC70470120FAE70120F8E70120F6E700BF0A -S315080096DC002002400010024078A00008000000207C -S315080096EC08000020014B1868704700BF00000020D6 -S315080096FC08B5FFF7F7FF074B5B6803F4E0634FF415 -S3150800970CE06292FAA2F2B2FA82F2D340024AD35C2F -S3150800971CD84008BD0010024088A0000808B5FFF71D -S3150800972CE1FF074B5B6803F460534FF4605292FAFF -S3150800973CA2F2B2FA82F2D340024AD35CD84008BDF0 -S3150800974C0010024088A00008F0B583B004460368F0 -S3150800975C13F4803F48D0914BDB6913F0805F40F0DF -S3150800976CD4808E4BDA6942F08052DA61DB6903F0F9 -S3150800977C80530193019B0125894B1B6813F4807F49 -S3150800978C00F0C580854B1B6A13F4407322D06268BF -S3150800979C02F440729A421DD08048016A21F4407640 -S315080097AC4FF4803393FAA3F2B2FA82F27D4F3A441D -S315080097BC92004FF0010CC2F800C093FAA3F3B3FA67 -S315080097CC83F33B449B0000221A60066211F0010FDA -S315080097DC40F0B280714A136A23F4407361680B43F4 -S315080097EC1362002D40F0CF80236813F0010F06D0CA -S315080097FC6A4A136B23F00303A1680B4313632368AC -S3150800980C13F0020F06D0654A136B23F44033E16854 -S3150800981C0B431363236813F0040F06D05F4A136BCC -S3150800982C23F4402321690B431363236813F0200F99 -S3150800983C06D05A4A136B23F01003E1690B431363E2 -S3150800984C236813F4003F06D0544A536823F4800364 -S3150800985CA16B0B435360236813F0400F06D04F4A95 -S3150800986C136B23F02003216A0B431363236813F04D -S3150800987C080F06D0494A136B23F4401361690B434E -S3150800988C1363236813F0100F06D0444A136B23F4A2 -S3150800989C4003A1690B431363236813F4007F06D0B6 -S315080098AC3E4A536823F40003E16A0B43536023686A -S315080098BC13F0800F06D0394AD36A23F4F873616A19 -S315080098CC0B43D362236813F4807F06D0334AD36ADA -S315080098DC23F47853A16A0B43D362236813F4805F8D -S315080098EC06D02E4A136B23F48073216B0B43136338 -S315080098FC236813F4005F4DD0284A136B23F40073C6 -S3150800990C616B0B431363002045E0002534E7244ABA -S3150800991C136843F480731360FEF764FF0646204B06 -S3150800992C1B6813F4807F7FF42DAFFEF75BFF801B5B -S3150800993C6428F4D903202EE0FEF754FF064615E0FA -S3150800994C164B196A022393FAA3F3B3FA83F303F0BB -S3150800995C1F03012202FA03F30B427FF43BAFFEF717 -S3150800996C41FF801B41F28833984211D8022393FA9F -S3150800997CA3F293FAA3F3002BE2D1022393FAA3F3EF -S3150800998C064B596ADEE7D36923F08053D3612BE77C -S3150800999C032000E0002003B0F0BD00BF0010024019 -S315080099AC0070004000819010026852E8003F23F4D2 -S315080099BC907342E800310029F6D1026802F10803D7 -S315080099CC53E8003F23F00103083242E8003100292E -S315080099DCF3D1036E012B06D02023C0F88030002368 -S315080099EC036683667047026852E8003F23F010034B -S315080099FC42E800310029F6D1EEE7000010B504461E -S31508009A0C83680269134342691343C2691A4301689E -S31508009A1C0B6823F4164323F00C0313430B600268FC -S31508009A2C536823F44053C1680B4353608269036A35 -S31508009A3C1A4301688B6823F4306313438B600368FD -S31508009A4C7B4A93420DD07B4A93421CD07A4A934266 -S31508009A5C3AD07A4A93424AD0794A93425AD010233A -S31508009A6C1FE0784B1B6B03F00303032B09D8DFE8C5 -S31508009A7C03F002040664012313E0042311E008230F -S31508009A8C0FE010230DE06F4B1B6B03F44033B3F55B -S31508009A9C003F54D013D8002B53D0B3F5803F52D186 -S31508009AAC0423E069B0F5004F69D0082B00F2B980A1 -S31508009ABCDFE803F092A890B7ABB7B7B7AE00B3F52B -S31508009ACC403F42D10223ECE75E4B1B6B03F4402369 -S31508009ADCB3F5002F3BD005D8DBB3B3F5802F3AD1BD -S31508009AEC0423DEE7B3F5402F37D10223D9E7554BCC -S31508009AFC1B6B03F44013B3F5001F30D005D883B3A2 -S31508009B0CB3F5801F2FD10423CBE7B3F5401F2CD117 -S31508009B1C0223C6E74B4B1B6B03F44003B3F5000F4C -S31508009B2C25D005D82BB3B3F5800F24D10423B8E779 -S31508009B3CB3F5400F21D10223B3E70223B1E708237B -S31508009B4CAFE70023ADE71023ABE71023A9E70823FB -S31508009B5CA7E70023A5E71023A3E71023A1E708230B -S31508009B6C9FE700239DE710239BE7102399E708231B -S31508009B7C97E7002395E7102393E7102391E7082B23 -S31508009B8C49D8DFE803F0051F25482248484809004C -S31508009B9CFFF7AEFD002840D06268530803EB40007F -S31508009BACB0FBF2F0A0F110024FF6EF739A4236D8DA -S31508009BBC83B223F00F03C0F3420018432368D8601E -S31508009BCC00201BE0FFF7AAFDE4E7FFF77FFCE1E7BF -S31508009BDC1D48E1E71C4802E0FFF78AFD18B36368E5 -S31508009BEC00EB5300B0FBF3F0A0F110024FF6EF7345 -S31508009BFC9A421AD8236880B2D86000200023A3663C -S31508009C0CE36610BDFFF78AFDE8E7FFF75FFCE5E7BB -S31508009C1C4FF40040E3E70120F0E70020EEE70120CF -S31508009C2CECE70120EAE70020E8E70120E6E700BFB9 -S31508009C3C003801400044004000480040004C0040F9 -S31508009C4C005000400010024000127A00436A13F0DC -S31508009C5C010F06D00268536823F40033816A0B435C -S31508009C6C5360436A13F0020F06D00268536823F454 -S31508009C7C8033C16A0B435360436A13F0040F06D052 -S31508009C8C0268536823F48023016B0B435360436AC1 -S31508009C9C13F0080F06D00268536823F40043416B8F -S31508009CAC0B435360436A13F0100F06D0026893688F -S31508009CBC23F48053816B0B439360436A13F0200F94 -S31508009CCC06D00268936823F40053C16B0B43936068 -S31508009CDC436A13F0400F0AD00268536823F48013C2 -S31508009CEC016C0B435360036CB3F5801F0BD0436AAE -S31508009CFC13F0800F06D00268536823F40023816C96 -S31508009D0C0B43536070470268536823F4C003416CD5 -S31508009D1C0B435360EBE72DE9F84305460F46164609 -S31508009D2C9946DDF820802C68E46937EA04030CBFF1 -S31508009D3C4FF0010C4FF0000CB44532D1B8F1FF3F8F -S31508009D4CF1D0FEF74FFDA0EB090040452CD8B8F131 -S31508009D5C000F2BD02B681A6812F0040FE3D0DA69BF -S31508009D6C12F0080F11D1DA6912F4006FDBD04FF438 -S31508009D7C00621A622846FFF717FE2023C5F88430BE -S31508009D8C002385F8783003200CE008241C6228464A -S31508009D9CFFF70AFEC5F88440002385F878300120C1 -S31508009DAC00E00020BDE8F8830320FBE70320F9E771 -S31508009DBC2DE9F04383B01E46D0F88030202B70D1A5 -S31508009DCC04460D46904600296FD00AB9012069E071 -S31508009DDC0023C0F884302222C0F880200366FEF7E0 -S31508009DEC01FD0746A4F85880A4F85A80A368B3F571 -S31508009DFC805F06D0A3B9226972B9FF22A4F85C2049 -S31508009E0C11E0226922B940F2FF12A4F85C200AE09C -S31508009E1CFF22A4F85C2006E07F22A4F85C2002E06E -S31508009E2C0022A4F85C20B4F85C80B3F5805F02D0FD -S31508009E3C4FF0000919E0236913B14FF0000914E03B -S31508009E4CA946002511E02023C4F88030032029E018 -S31508009E5C23689B8C08EA030329F8023BB4F85A20BA -S31508009E6C92B2013A92B2A4F85A20B4F85A309BB27C -S31508009E7C93B100963B46002220212046FFF74BFF64 -S31508009E8C0028E0D1002DE3D023689A8C5FFA88F37A -S31508009E9C134005F8013BE1E72023C4F88030002085 -S31508009EAC00E0022003B0BDE8F0830120FAE730B5E4 -S31508009EBC83B004460023C0F88430FEF793FC0546AD -S31508009ECC2268126812F0080F0FD123681B6813F06A -S31508009EDC040F26D12023E367C4F8803000202066BF -S31508009EEC606684F8780003B030BD6FF07E4300934B -S31508009EFC034600224FF400112046FFF70CFF0028FA -S31508009F0CE3D0226852E8003F23F0800342E8003190 -S31508009F1C0029F6D12023E367002384F87830032040 -S31508009F2CE1E76FF07E4300932B4600224FF4800145 -S31508009F3C2046FFF7F0FE0028CCD0226852E8003FF6 -S31508009F4C23F4907342E800310029F6D1226802F115 -S31508009F5C080353E8003F23F00103083242E80031B6 -S31508009F6C0029F3D12023C4F88030002384F87830F4 -S31508009F7C0320B8E768B310B50446C36F03B32423AC -S31508009F8CE3672268136823F0010313602046FFF782 -S31508009F9C35FD012813D0636ABBB92268536823F4CC -S31508009FAC904353602268936823F02A0393602268CF -S31508009FBC136843F0010313602046FFF778FF10BDC2 -S31508009FCC80F87830FEF754FBD9E72046FFF73EFEBB -S31508009FDCE3E701207047000070B50D4D0D4C641B6E -S31508009FECA4100026A64209D10B4D0C4C00F020F803 -S31508009FFC641BA4100026A64205D170BD55F8043B77 -S3150800A00C98470136EEE755F8043B98470136F2E7D0 -S3150800A01CB0A00008B0A00008B0A00008B4A00008C2 -S3150800A02C02440346934200D1704703F8011BF9E733 -S3150800A03CF8B500BFF8BC08BC9E467047F8B500BF1B -S30D0800A04CF8BC08BC9E467047EB -S3150800A05405020602060307030803090309040A049A -S3150800A0640B040C040C050D050E050F050F0610064A -S3150800A0741007100800000000000000000102030495 -S3150800A0840607080900000000010203040203040588 -S3150800A094060708090A0B0C0D0E0F1010010203041B -S3110800A0A405060708090A0B0C0D0E0F1024 -S3090800A0B0B181000864 -S3090800A0B48D81000884 -S3110800A0B800127A000100000010000000F1 -S7050800871556 +S3150800A00000A0002015A70008E9A60008EBA600088E +S3150800A010EDA60008EFA60008F1A60008000000005B +S3150800A020000000000000000000000000F3A6000881 +S3150800A030F5A6000800000000F7A60008F9A6000823 +S3150800A04065A7000865A7000865A7000865A70008B2 +S3150800A05065A7000865A7000865A7000865A70008A2 +S3150800A06065A7000865A7000865A7000865A7000892 +S3150800A07065A7000865A7000865A7000865A7000882 +S3150800A08065A7000865A7000865A7000865A7000872 +S3150800A09065A7000865A7000865A7000865A7000862 +S3150800A0A065A7000865A7000865A7000865A7000852 +S3150800A0B065A7000865A7000865A7000865A7000842 +S3150800A0C065A7000865A7000865A7000865A7000832 +S3150800A0D065A7000865A7000865A7000865A7000822 +S3150800A0E065A7000865A7000865A7000865A7000812 +S3150800A0F065A7000865A7000865A7000865A7000802 +S3150800A10000000000000000000000000065A700082D +S3150800A11065A7000865A7000865A7000865A70008E1 +S3150800A12065A7000865A7000865A7000865A70008D1 +S3150800A13065A7000865A700080000000000000000E9 +S3150800A14065A7000865A7000865A7000800000000C5 +S3150800A15000000000000000000000000000000000F1 +S3150800A160000000000000000065A7000865A70008B9 +S3150800A17065A70008000000000000000000000000BD +S3110800A1800000000065A70008EE11AA55B3 +S3150800A18C10B5054C237833B9044B13B10448AFF317 +S3150800A19C00800123237010BD0C0000200000000075 +S3150800A1AC3CC0000808B5034B1BB103490348AFF381 +S3150800A1BC008008BD00000000100000203CC000080C +S3150800A1CC08B500F06FF900F03FF900F0B3F808BDD8 +S3150800A1DC08B500F041F900F031F908BD08B5094891 +S3150800A1EC094B03604FF46143436000238360C360EB +S3150800A1FC03610C2242618361C3610362436201F00D +S3150800A20CB9FE08BD50000020004800402DE9F04179 +S3150800A21C04460D461746984601F06AFA1649A1FBFC +S3150800A22C00318909002301E00133DBB2112B1FD859 +S3150800A23C124A12F8130002EB4302527800EB020C96 +S3150800A24C0CFB044CB1FBFCFE0CFB1E16002EEBD1D2 +S3150800A25C1FFA8EFCA5F800C00CF1FF3C1FFA8CFC0B +S3150800A26CBCF5806FE0D2387088F80020012000E039 +S3150800A27C0020BDE8F08100BFD34D621054C0000821 +S3150800A28C70B58CB00025ADF82E508DF82D508DF884 +S3150800A29C2C500BAB0DF12D020DF12E014FF4FA706B +S3150800A2ACFFF7B4FF1A4C1B4B236025766576A5760B +S3150800A2BC0126E67625776577A560E5609DF82D304D +S3150800A2CC013B1B0423619DF82C30013B1B05636184 +S3150800A2DCBDF82E306360204600F08AFA069507957D +S3150800A2EC08964CF6E043019302954FF6E0730393F8 +S3150800A2FC04230493059509960E230A9301A920466F +S3150800A30C00F01CFB204600F09CFB0CB070BD00BF97 +S3150800A31C280000200064004008B5014600230122ED +S3150800A32C034801F045FD08B1002008BD0120FCE7F3 +S3150800A33C5000002008B5FFF751FFFFF7A1FF08BD35 +S3150800A34CBFF34F8F0549CA6802F4E062044B134306 +S3150800A35CCB60BFF34F8F00BFFDE700BF00ED00E0F9 +S3150800A36C0400FA0508B5214B1B78B3B92048FFF74A +S3150800A37CD3FF012800D008BD1D4B1B78013BDBB26F +S3150800A38C802BF8D800F08FF81A4B1860174B01225F +S3150800A39C1A70194B00221A70EDE7174B1B7801330C +S3150800A3AC13481844FFF7B8FF012813D1124A13783B +S3150800A3BC0133DBB213700E4A12789342DBD10B4A87 +S3150800A3CC002111700A4A5278FF2AD4D1022BD2D115 +S3150800A3DCFFF7B6FF00F067F8064B1B686433984224 +S3150800A3ECC9D9024B00221A70C5E700BF5A010020D2 +S3150800A3FCD80000205C0100205B01002000B58BB062 +S3150800A40C01AB03AA00210C4800F049FB20B9039ABA +S3150800A41C40F267639A4202D00BB05DF804FB059BC9 +S3150800A42C002BF9D19DF80430FF2BF5D1079B022B95 +S3150800A43CF2D1FFF785FF00BF2800002008B5FFF70B +S3150800A44C91FFFFF7DBFF08BD08B5002220214FF06E +S3150800A45C904000F01BFD08BD10B500F024F80F4B1A +S3150800A46C1B68C31AB3F5FA7F0DD304460C4B1B783D +S3150800A47C53B901220A4B1A7020214FF0904000F074 +S3150800A48C05FD064B1C6010BD0022054B1A702021D9 +S3150800A49C4FF0904000F0FAFCF3E700BF640100208F +S3150800A4AC60010020704708B500F09CF908BD000053 +S3150800A4BC014A024B9A60704700A0000800ED00E0C4 +S3150800A4CC10B588B000240394049405940694079454 +S3150800A4DC174B5A6942F480025A615A6902F480028F +S3150800A4EC0092009A5A6942F400325A615A6902F487 +S3150800A4FC00320192019A5A6942F480225A615B69C8 +S3150800A50C03F480230293029B224620214FF09040AD +S3150800A51C00F0BCFC202303930123049305940694B2 +S3150800A52C03A94FF0904000F0CDFB08B010BD00BF5A +S3150800A53C0010024072B6FEE700B59FB02822002133 +S3150800A54C14A801F06DFD00210F9110911191129133 +S3150800A55C13913C22684601F063FD012214924FF4D4 +S3150800A56C80331593189202221B921C934FF4E01316 +S3150800A57C1D9314A800F090FCC0B90F230F93022169 +S3150800A58C1091002311934FF48062129213930FA823 +S3150800A59C00F0D4FF60B904230093002304936846A3 +S3150800A5AC01F0D2F830B91FB05DF804FBFFF7C2FF13 +S3150800A5BCFFF7C0FFFFF7BEFF08B5FFF779FF00F0FE +S3150800A5CCF3F8FFF7B9FFFFF77BFFFFF7F9FDFFF786 +S3150800A5DCFFFDFCE782B00A4B9A6942F001029A61C8 +S3150800A5EC9A6902F001020092009ADA6942F08052E6 +S3150800A5FCDA61DB6903F080530193019B02B0704763 +S3150800A60C0010024000B589B0002303930493059308 +S3150800A61C069307930268144B9A4202D009B05DF868 +S3150800A62C04FB03F5D633DA6942F00072DA61DA69AB +S3150800A63C02F000720192019A5A6942F480225A6118 +S3150800A64C5B6903F480230293029B4FF440730393D4 +S3150800A65C02230493032306930923079303A90348A8 +S3150800A66C00F030FBDAE700BF006400400004004845 +S3150800A67C00B589B0002303930493059306930793B7 +S3150800A68C0268144B9A4202D009B05DF804FB03F534 +S3150800A69CE433DA6942F48022DA61DA6902F4802258 +S3150800A6AC0192019A5A6942F480225A615B6903F451 +S3150800A6BC80230293029B4FF4406303930223049373 +S3150800A6CC032306930723079303A9034800F0FAFA12 +S3150800A6DCDAE700BF0048004000040048FEE7FEE742 +S3150800A6ECFEE7FEE7FEE770477047704708B500F0CF +S3150800A6FC6DF808BD034AD2F8883043F47003C2F8E3 +S3150800A70C8830704700ED00E0DFF834D0FFF7F2FF31 +S3150800A71C0C480D490D4A002302E0D458C4500433A2 +S3150800A72CC4188C42F9D30A4A0A4C002301E0136078 +S3150800A73C0432A242FBD301F04FFCFFF73DFFFEE7C4 +S3150800A74C00A00020000000200C000020B8C0000863 +S3150800A75C0C0000206C010020FEE7000010B5044632 +S3150800A76C0E4B18784FF47A73B3FBF0F30C4A106857 +S3150800A77CB0FBF3F000F092FA68B90F2C01D901205E +S3150800A78C0AE0002221464FF0FF3000F04FFA054B45 +S3150800A79C1C60002000E0012010BD00BF0400002052 +S3150800A7AC000000200800002008B5074A136843F08B +S3150800A7BC10031360032000F027FA0F20FFF7CEFFD3 +S3150800A7CCFFF708FF002008BD00200240034A116865 +S3150800A7DC034B1B780B441360704700BF68010020BD +S3150800A7EC04000020014B1868704700BF6801002060 +S3150800A7FC002800F0A18038B5044690F82030D3B173 +S3150800A80C2268136843F001031360FFF7EBFF054654 +S3150800A81C23685A6812F0010F10D1FFF7E3FF401BAB +S3150800A82C0A28F5D9636A43F400336362052384F86E +S3150800A83C2030012038BDFFF7E5FEE1E71A6822F063 +S3150800A84C02021A60FFF7CEFF054623685A6812F013 +S3150800A85C020F0DD0FFF7C6FF401B0A28F5D9636A0D +S3150800A86C43F400336362052384F820300120E1E7C2 +S3150800A87C227E012A3DD01A6822F080021A60637E75 +S3150800A88C012B3BD02268136823F040031360A37E88 +S3150800A89C012B39D02268136823F020031360E37E5A +S3150800A8AC012B37D02268136843F010031360237FFB +S3150800A8BC012B35D02268136823F008031360637FD5 +S3150800A8CC012B33D02268136823F004031360A368A2 +S3150800A8DCE268134322691343626913436268013AB7 +S3150800A8EC21681343CB6100206062012384F8203071 +S3150800A8FCA0E71A6842F080021A60C0E7226813685B +S3150800A90C43F040031360C2E72268136843F0200340 +S3150800A91C1360C4E72268136823F010031360C6E7B4 +S3150800A92C2268136843F008031360C8E722681368A3 +S3150800A93C43F004031360CAE701207047026890F8D5 +S3150800A94C2030013BDBB2012B05D9436A43F4802343 +S3150800A95C43620120704730B4D2F8003243F0010349 +S3150800A96CC2F800324B6903F01F03012000FA03F307 +S3150800A97CD2F81C026FEA030C20EA0300C2F81C0288 +S3150800A98CC869B0B9D2F80C020CEA0000C2F80C027D +S3150800A99C8C884869CD6844EA0544483042F830400A +S3150800A9AC0C8848698D6844EA0544483002EBC000B7 +S3150800A9BC4460C86901281BD0886980BBD2F8040298 +S3150800A9CC0CEA0000C2F80402086970BBD2F814023B +S3150800A9DC0CEA0000C2F81402096A01292BD0D2F835 +S3150800A9EC003223F00103C2F80032002030BC704755 +S3150800A9FCD2F80C021843C2F80C028C8848690D6808 +S3150800AA0C44EA0544483042F830408C8948698D68D8 +S3150800AA1C44EA0544483002EBC0004460CCE7D2F85F +S3150800AA2C04021843C2F80402CEE7D2F814021843FB +S3150800AA3CC2F81402D0E7D2F81C120B43C2F81C3227 +S3150800AA4CCDE770B5044690F82050EDB2012D06D02E +S3150800AA5C436A43F4002343620125284670BD02234A +S3150800AA6C80F820300268136823F001031360FFF79F +S3150800AA7CB9FE064623685B6813F0010F0CD0FFF786 +S3150800AA8CB1FE831B0A2BF5D9636A43F40033636260 +S3150800AA9C052384F82030E0E700256562DDE790F8A9 +S3150800AAAC20C00CF1FF3C5FFA8CFCBCF1010F00F2E4 +S3150800AABCA58030B451B90468E46814F0030F10D1BA +S3150800AACC436A43F40013436201207EE00468246958 +S3150800AADC14F0030F05D1436A43F4001343620120B3 +S3150800AAEC73E0056801F11B0424012C5904F00404D5 +S3150800AAFC9460002C6BD1056801F11B0424012C59B8 +S3150800AB0C640D1460046801F11B0C4FEA0C1C54F814 +S3150800AB1C0C4004F00204D4600468A444DCF8045025 +S3150800AB2C15F0080F5BD008241461056801F11B0C9D +S3150800AB3C05EB0C156D68C5F307259561046804EBE0 +S3150800AB4C0C146468240C5461026802EB0112D2F8E6 +S3150800AB5CB8211A70026802EB0112D2F8B821C2F3B6 +S3150800AB6C07225A70026802EB0112D2F8B821C2F316 +S3150800AB7C07429A70026802EB0112D2F8B821120E3B +S3150800AB8CDA70026802EB0112D2F8BC211A7102685B +S3150800AB9C02EB0112D2F8BC21C2F307225A710268E1 +S3150800ABAC02EB0112D2F8BC21C2F307429A71026871 +S3150800ABBC02EB0112D2F8BC21120EDA71C1B9026885 +S3150800ABCCD36843F02003D360002030BC7047056877 +S3150800ABDC01F11B0424012C59E408546092E701F195 +S3150800ABEC1B0504EB0514646804F00F0414619CE758 +S3150800ABFC0268136943F020031361E5E7436A43F4DB +S3150800AC0C8023436201207047074AD36823F4E06324 +S3150800AC1C1B041B0C000200F4E060034343F0BF6303 +S3150800AC2C43F40033D360704700ED00E000B5194BD0 +S3150800AC3CDB68C3F30223C3F1070CBCF1040F28BF6E +S3150800AC4C4FF0040C03F1040EBEF1060F18D9033BA2 +S3150800AC5C4FF0FF3E0EFA0CFC21EA0C0199400EFA55 +S3150800AC6C03F322EA0303194300280BDB0901C9B2D3 +S3150800AC7C00F1604000F5614080F800135DF804FBB4 +S3150800AC8C0023E5E700F00F000901C9B2024B19547D +S3150800AC9CF4E700BF00ED00E014ED00E00138B0F178 +S3150800ACAC807F0BD24FF0E0235861054AF02182F8D9 +S3150800ACBC23100020986107221A61704701207047FB +S3150800ACCC00ED00E0F0B583B0002362E085685E0015 +S3150800ACDC0324B44025EA0405CC68B4402C438460AC +S3150800ACEC446824EA0C0C4C68C4F300149C4044EAEF +S3150800ACFC0C0444605EE0DD08083550F8256003F066 +S3150800AD0C07044FEA840C0F2404FA0CF426EA040E02 +S3150800AD1C0C6904FA0CF444EA0E0440F8254060E089 +S3150800AD2C042400E0002404FA0EF42C430CF1020C63 +S3150800AD3C524D45F82C40524CA568D44325EA0206D8 +S3150800AD4C4F6817F4801F01D042EA05064C4DAE60D9 +S3150800AD5CED6804EA05064F6817F4001F01D042EAAD +S3150800AD6C0506474DEE606D6804EA05064F6817F44C +S3150800AD7C003F01D042EA0506414D6E602D682C4015 +S3150800AD8C4E6816F4803F01D042EA05043C4A14602A +S3150800AD9C01330A6832FA03F46ED04FF0010C0CFA40 +S3150800ADAC03FC1CEA0202F3D04C6804F00304013CD1 +S3150800ADBC012C8BD94C6804F00304032C0CD0C46802 +S3150800ADCC5D004FF0030C0CFA05FC24EA0C0C8C689D +S3150800ADDCAC4044EA0C04C4604C6804F00304022C2E +S3150800ADEC89D004684FEA430E4FF0030C0CFA0EFC9C +S3150800ADFC24EA0C0C4C6804F0030404FA0EF444EA36 +S3150800AE0C0C0404604C6814F4403FC1D01D4CA56971 +S3150800AE1C45F00105A561A46904F001040194019C9F +S3150800AE2C4FEA930C0CF10205144C54F8255003F018 +S3150800AE3C03044FEA840E0F2404FA0EF425EA0405DB +S3150800AE4CB0F1904F3FF46EAF0F4CA0420ED004F504 +S3150800AE5C8064A0420CD004F58064A0420AD004F5A4 +S3150800AE6C8064A0423FF45CAF05245CE701245AE7F2 +S3150800AE7C022458E7032456E703B0F0BD000001404E +S3150800AE8C0004014000100240000400480AB1816128 +S3150800AE9C7047816270470000002800F0018370B586 +S3150800AEAC82B00446036813F0010F3BD0B54B5B68C0 +S3150800AEBC03F00C03042B1ED0B24B5B6803F00C0397 +S3150800AECC082B13D06368B3F5803F68D0002B40F08D +S3150800AEDC928003F1804303F504331A6822F4803216 +S3150800AEEC1A601A6822F480221A605DE0A54B5B682A +S3150800AEFC13F4803FE6D04FF4003393FAA3F3A14B37 +S3150800AF0C19684FF4003393FAA3F3B3FA83F303F0F7 +S3150800AF1C1F03012202FA03F30B4203D06368002BCA +S3150800AF2C00F0C082236813F0020F00F0C580954B21 +S3150800AF3C5B6813F00C0F00F09C80924B5B6803F077 +S3150800AF4C0C03082B00F08F802369002B00F0F2808D +S3150800AF5C012292FAA2F3B3FA83F303F1845303F5AD +S3150800AF6C84139B001A60FFF73DFC0546022393FAEF +S3150800AF7CA3F3844B1968022393FAA3F3B3FA83F366 +S3150800AF8C03F01F03012202FA03F30B4240F0C380BD +S3150800AF9CFFF728FC401B0228E8D903208BE2794AE4 +S3150800AFAC136843F480331360764AD36A23F00F038D +S3150800AFBCA1680B43D3626368002B36D0FFF712FCEB +S3150800AFCC05464FF4003393FAA3F36E4B19684FF406 +S3150800AFDC003393FAA3F3B3FA83F303F01F030122A6 +S3150800AFEC02FA03F30B429DD1FFF7FCFB401B6428C6 +S3150800AFFCE7D903205FE2B3F5A02F09D0614B1A6895 +S3150800B00C22F480321A601A6822F480221A60CBE77E +S3150800B01C03F18043A3F53C331A6842F480221A6084 +S3150800B02C1A6842F480321A60BEE7FFF7DBFB054666 +S3150800B03C4FF4003393FAA3F3524B19684FF40033C9 +S3150800B04C93FAA3F3B3FA83F303F01F03012202FA6C +S3150800B05C03F30B423FF466AFFFF7C4FB401B6428AF +S3150800B06CE6D9032027E2474B5B6813F4803F7FF44D +S3150800B07C6BAF022393FAA3F3424B1968022393FA94 +S3150800B08CA3F3B3FA83F303F01F03012202FA03F3C3 +S3150800B09C0B4203D02369934240F006823948036871 +S3150800B0AC23F0F8036169F82292FAA2F2B2FA82F254 +S3150800B0BC01FA02F213430360236813F0080F00F039 +S3150800B0CC8D80A369002B61D0012191FAA1F2B2FA05 +S3150800B0DC82F22D4B13449B001960FFF783FB054640 +S3150800B0EC022393FAA3F293FAA3F293FAA3F2254A4C +S3150800B0FC516A93FAA3F3B3FA83F303F01F030122FD +S3150800B10C02FA03F30B4269D1FFF76CFB401B0228CA +S3150800B11CE6D90320CFE11B48036823F0F8036169DD +S3150800B12CF82292FAA2F2B2FA82F201FA02F2134366 +S3150800B13C0360C1E7012393FAA3F3B3FA83F303F18C +S3150800B14C845303F584139B0000221A60FFF74AFB0D +S3150800B15C0546022393FAA3F30A4B1968022393FABA +S3150800B16CA3F3B3FA83F303F01F03012202FA03F3E2 +S3150800B17C0B42A1D0FFF736FB401B0228E9D9032066 +S3150800B18C99E100BF0010024020819010012292FA2A +S3150800B19CA2F2B2FA82F2B74B13449B0000221A6051 +S3150800B1ACFFF720FB0546022393FAA3F293FAA3F2C0 +S3150800B1BC93FAA3F2B04A516A93FAA3F3B3FA83F358 +S3150800B1CC03F01F03012202FA03F30B4206D0FFF722 +S3150800B1DC09FB401B0228E6D903206CE1236813F00F +S3150800B1EC040F00F0A980A44BDB6913F0805F20D113 +S3150800B1FCA14BDA6942F08052DA61DB6903F08053BD +S3150800B20C0193019B01259D4B1B6813F4807F12D07B +S3150800B21CE368012B23D073BB03F1804303F5043396 +S3150800B22C1A6A22F001021A621A6A22F004021A62D7 +S3150800B23C1AE00025E7E7914A136843F48073136014 +S3150800B24CFFF7D0FA06468D4B1B6813F4807FDFD1C7 +S3150800B25CFFF7C8FA801B6428F5D903202BE1864A28 +S3150800B26C136A43F001031362E368002B3CD0FFF723 +S3150800B27CB9FA06462BE0052B09D07F4B1A6A22F041 +S3150800B28C01021A621A6A22F004021A62ECE77A4B75 +S3150800B29C1A6A42F004021A621A6A42F001021A6227 +S3150800B2ACE2E7754B196A022393FAA3F3B3FA83F30D +S3150800B2BC03F01F03012202FA03F319423BD1FFF7ED +S3150800B2CC91FA801B41F28833984200F2EF800223F0 +S3150800B2DC93FAA3F293FAA3F3002BE2D1022393FA7F +S3150800B2ECA3F3654B596ADEE7FFF77CFA064615E0C9 +S3150800B2FC614B196A022393FAA3F3B3FA83F303F0A7 +S3150800B30C1F03012202FA03F3194214D0FFF76AFA53 +S3150800B31C801B41F28833984200F2CA80022393FAC2 +S3150800B32CA3F293FAA3F3002BE2D1022393FAA3F325 +S3150800B33C514B596ADEE7B5BBE369002B00F0BA80BE +S3150800B34C4D4A526802F00C02082A00F09980022B2A +S3150800B35C2FD04FF0807393FAA3F3B3FA83F303F168 +S3150800B36C845303F584139B0000221A60FFF73AFAFC +S3150800B37C04464FF0007393FAA3F33F4B19684FF04A +S3150800B38C007393FAA3F3B3FA83F303F01F030122B2 +S3150800B39C02FA03F319426BD0FFF724FA001B0228B2 +S3150800B3ACE7D9032087E0344AD36923F08053D36165 +S3150800B3BCC2E74FF0807393FAA3F3B3FA83F303F15E +S3150800B3CC845303F584139B0000221A60FFF70AFACC +S3150800B3DC05464FF0007393FAA3F3274B19684FF001 +S3150800B3EC007393FAA3F3B3FA83F303F01F03012252 +S3150800B3FC02FA03F3194206D0FFF7F4F9401B0228A8 +S3150800B40CE7D9032057E01C494B6823F47413626A86 +S3150800B41C206A024313434B604FF0807393FAA3F3ED +S3150800B42CB3FA83F303F1845303F584139B000122C7 +S3150800B43C1A60FFF7D7F904464FF0007393FAA3F393 +S3150800B44C0D4B19684FF0007393FAA3F3B3FA83F311 +S3150800B45C03F01F03012202FA03F3194206D1FFF780 +S3150800B46CC1F9001B0228E7D9032024E0002022E0BA +S3150800B47C002020E02081901000100240007000404F +S3150800B48C012B1AD0104B5B6803F48031226A914267 +S3150800B49C15D103F47013626A934212D100200AE0A4 +S3150800B4AC01207047012006E0012004E0032002E099 +S3150800B4BC032000E0002002B070BD0120FBE701204C +S3150800B4CCF9E70120F7E700BF00100240164B5B684E +S3150800B4DC03F00C02082A01D01448704703F47011C3 +S3150800B4EC4FF4701292FAA2F2B2FA82F221FA02F22E +S3150800B4FC0F49885C0C4AD26A02F00F020F2191FAA6 +S3150800B50CA1F1B1FA81F1CA400A498A5C13F4803F69 +S3150800B51C05D0064BB3FBF2F303FB00F07047064B62 +S3150800B52C03FB00F0704700BF0010024000127A00BF +S3150800B53C90C00008A0C0000800093D00002800F0D3 +S3150800B54CBE8070B50D460446614B1B6803F00703B5 +S3150800B55C8B420BD25E4A136823F007030B43136026 +S3150800B56C136803F007038B4240F0AB80236813F093 +S3150800B57C020F06D0574A536823F0F003A1680B4311 +S3150800B58C5360236813F0010F5AD06368012B2DD032 +S3150800B59C022B40D0022292FAA2F24E4A10680222DC +S3150800B5AC92FAA2F2B2FA82F202F01F02012101FA11 +S3150800B5BC02F2104200F0878046494A6822F00302DC +S3150800B5CC13434B60FFF70EF90646424B5B6803F0D4 +S3150800B5DC0C036268B3EB820F32D0FFF703F9801BBA +S3150800B5EC41F288339842F0D9032067E04FF40032D1 +S3150800B5FC92FAA2F2374A10684FF4003292FAA2F283 +S3150800B60CB2FA82F202F01F02012101FA02F2024298 +S3150800B61CD2D1012052E04FF0007292FAA2F22D4AD2 +S3150800B62C10684FF0007292FAA2F2B2FA82F202F0A5 +S3150800B63C1F02012101FA02F21042BDD101203DE0A0 +S3150800B64C234B1B6803F00703AB420AD9204A13683D +S3150800B65C23F007032B431360136803F00703AB426D +S3150800B66C33D1236813F0040F06D01A4A536823F40F +S3150800B67CE063E1680B435360236813F0080F07D0A7 +S3150800B68C144A536823F46053216943EAC10353608F +S3150800B69CFFF71CFF0F4B5B6803F0F003F02292FADE +S3150800B6ACA2F2B2FA82F2D3400B4AD35CD8400B4BC7 +S3150800B6BC18600B4B1868FFF751F8002070BD012075 +S3150800B6CC70470120FAE70120F8E70120F6E700BFEA +S3150800B6DC002002400010024078C00008000000203C +S3150800B6EC08000020014B1868704700BF00000020B6 +S3150800B6FC08B5FFF7F7FF074B5B6803F4E0634FF4F5 +S3150800B70CE06292FAA2F2B2FA82F2D340024AD35C0F +S3150800B71CD84008BD0010024088C0000808B5FFF7DD +S3150800B72CE1FF074B5B6803F460534FF4605292FADF +S3150800B73CA2F2B2FA82F2D340024AD35CD84008BDD0 +S3150800B74C0010024088C00008F0B583B004460368B0 +S3150800B75C13F4803F48D0914BDB6913F0805F40F0BF +S3150800B76CD4808E4BDA6942F08052DA61DB6903F0D9 +S3150800B77C80530193019B0125894B1B6813F4807F29 +S3150800B78C00F0C580854B1B6A13F4407322D062689F +S3150800B79C02F440729A421DD08048016A21F4407620 +S3150800B7AC4FF4803393FAA3F2B2FA82F27D4F3A44FD +S3150800B7BC92004FF0010CC2F800C093FAA3F3B3FA47 +S3150800B7CC83F33B449B0000221A60066211F0010FBA +S3150800B7DC40F0B280714A136A23F4407361680B43D4 +S3150800B7EC1362002D40F0CF80236813F0010F06D0AA +S3150800B7FC6A4A136B23F00303A1680B43136323688C +S3150800B80C13F0020F06D0654A136B23F44033E16834 +S3150800B81C0B431363236813F0040F06D05F4A136BAC +S3150800B82C23F4402321690B431363236813F0200F79 +S3150800B83C06D05A4A136B23F01003E1690B431363C2 +S3150800B84C236813F4003F06D0544A536823F4800344 +S3150800B85CA16B0B435360236813F0400F06D04F4A75 +S3150800B86C136B23F02003216A0B431363236813F02D +S3150800B87C080F06D0494A136B23F4401361690B432E +S3150800B88C1363236813F0100F06D0444A136B23F482 +S3150800B89C4003A1690B431363236813F4007F06D096 +S3150800B8AC3E4A536823F40003E16A0B43536023684A +S3150800B8BC13F0800F06D0394AD36A23F4F873616AF9 +S3150800B8CC0B43D362236813F4807F06D0334AD36ABA +S3150800B8DC23F47853A16A0B43D362236813F4805F6D +S3150800B8EC06D02E4A136B23F48073216B0B43136318 +S3150800B8FC236813F4005F4DD0284A136B23F40073A6 +S3150800B90C616B0B431363002045E0002534E7244A9A +S3150800B91C136843F480731360FEF764FF0646204BE6 +S3150800B92C1B6813F4807F7FF42DAFFEF75BFF801B3B +S3150800B93C6428F4D903202EE0FEF754FF064615E0DA +S3150800B94C164B196A022393FAA3F3B3FA83F303F09B +S3150800B95C1F03012202FA03F30B427FF43BAFFEF7F7 +S3150800B96C41FF801B41F28833984211D8022393FA7F +S3150800B97CA3F293FAA3F3002BE2D1022393FAA3F3CF +S3150800B98C064B596ADEE7D36923F08053D3612BE75C +S3150800B99C032000E0002003B0F0BD00BF00100240F9 +S3150800B9AC0070004000819010026852E8003F23F4B2 +S3150800B9BC907342E800310029F6D1026802F10803B7 +S3150800B9CC53E8003F23F00103083242E8003100290E +S3150800B9DCF3D1036E012B06D02023C0F88030002348 +S3150800B9EC036683667047026852E8003F23F010032B +S3150800B9FC42E800310029F6D1EEE7000010B50446FE +S3150800BA0C83680269134342691343C2691A4301687E +S3150800BA1C0B6823F4164323F00C0313430B600268DC +S3150800BA2C536823F44053C1680B4353608269036A15 +S3150800BA3C1A4301688B6823F4306313438B600368DD +S3150800BA4C7B4A93420DD07B4A93421CD07A4A934246 +S3150800BA5C3AD07A4A93424AD0794A93425AD010231A +S3150800BA6C1FE0784B1B6B03F00303032B09D8DFE8A5 +S3150800BA7C03F002040664012313E0042311E00823EF +S3150800BA8C0FE010230DE06F4B1B6B03F44033B3F53B +S3150800BA9C003F54D013D8002B53D0B3F5803F52D166 +S3150800BAAC0423E069B0F5004F69D0082B00F2B98081 +S3150800BABCDFE803F092A890B7ABB7B7B7AE00B3F50B +S3150800BACC403F42D10223ECE75E4B1B6B03F4402349 +S3150800BADCB3F5002F3BD005D8DBB3B3F5802F3AD19D +S3150800BAEC0423DEE7B3F5402F37D10223D9E7554BAC +S3150800BAFC1B6B03F44013B3F5001F30D005D883B382 +S3150800BB0CB3F5801F2FD10423CBE7B3F5401F2CD1F7 +S3150800BB1C0223C6E74B4B1B6B03F44003B3F5000F2C +S3150800BB2C25D005D82BB3B3F5800F24D10423B8E759 +S3150800BB3CB3F5400F21D10223B3E70223B1E708235B +S3150800BB4CAFE70023ADE71023ABE71023A9E70823DB +S3150800BB5CA7E70023A5E71023A3E71023A1E70823EB +S3150800BB6C9FE700239DE710239BE7102399E70823FB +S3150800BB7C97E7002395E7102393E7102391E7082B03 +S3150800BB8C49D8DFE803F0051F25482248484809002C +S3150800BB9CFFF7AEFD002840D06268530803EB40005F +S3150800BBACB0FBF2F0A0F110024FF6EF739A4236D8BA +S3150800BBBC83B223F00F03C0F3420018432368D860FE +S3150800BBCC00201BE0FFF7AAFDE4E7FFF77FFCE1E79F +S3150800BBDC1D48E1E71C4802E0FFF78AFD18B36368C5 +S3150800BBEC00EB5300B0FBF3F0A0F110024FF6EF7325 +S3150800BBFC9A421AD8236880B2D86000200023A3661C +S3150800BC0CE36610BDFFF78AFDE8E7FFF75FFCE5E79B +S3150800BC1C4FF40040E3E70120F0E70020EEE70120AF +S3150800BC2CECE70120EAE70020E8E70120E6E700BF99 +S3150800BC3C003801400044004000480040004C0040D9 +S3150800BC4C005000400010024000127A00436A13F0BC +S3150800BC5C010F06D00268536823F40033816A0B433C +S3150800BC6C5360436A13F0020F06D00268536823F434 +S3150800BC7C8033C16A0B435360436A13F0040F06D032 +S3150800BC8C0268536823F48023016B0B435360436AA1 +S3150800BC9C13F0080F06D00268536823F40043416B6F +S3150800BCAC0B435360436A13F0100F06D0026893686F +S3150800BCBC23F48053816B0B439360436A13F0200F74 +S3150800BCCC06D00268936823F40053C16B0B43936048 +S3150800BCDC436A13F0400F0AD00268536823F48013A2 +S3150800BCEC016C0B435360036CB3F5801F0BD0436A8E +S3150800BCFC13F0800F06D00268536823F40023816C76 +S3150800BD0C0B43536070470268536823F4C003416CB5 +S3150800BD1C0B435360EBE72DE9F84305460F461646E9 +S3150800BD2C9946DDF820802C68E46937EA04030CBFD1 +S3150800BD3C4FF0010C4FF0000CB44532D1B8F1FF3F6F +S3150800BD4CF1D0FEF74FFDA0EB090040452CD8B8F111 +S3150800BD5C000F2BD02B681A6812F0040FE3D0DA699F +S3150800BD6C12F0080F11D1DA6912F4006FDBD04FF418 +S3150800BD7C00621A622846FFF717FE2023C5F884309E +S3150800BD8C002385F8783003200CE008241C6228462A +S3150800BD9CFFF70AFEC5F88440002385F878300120A1 +S3150800BDAC00E00020BDE8F8830320FBE70320F9E751 +S3150800BDBC2DE9F04383B01E46D0F88030202B70D185 +S3150800BDCC04460D46904600296FD00AB9012069E051 +S3150800BDDC0023C0F884302222C0F880200366FEF7C0 +S3150800BDEC01FD0746A4F85880A4F85A80A368B3F551 +S3150800BDFC805F06D0A3B9226972B9FF22A4F85C2029 +S3150800BE0C11E0226922B940F2FF12A4F85C200AE07C +S3150800BE1CFF22A4F85C2006E07F22A4F85C2002E04E +S3150800BE2C0022A4F85C20B4F85C80B3F5805F02D0DD +S3150800BE3C4FF0000919E0236913B14FF0000914E01B +S3150800BE4CA946002511E02023C4F88030032029E0F8 +S3150800BE5C23689B8C08EA030329F8023BB4F85A209A +S3150800BE6C92B2013A92B2A4F85A20B4F85A309BB25C +S3150800BE7C93B100963B46002220212046FFF74BFF44 +S3150800BE8C0028E0D1002DE3D023689A8C5FFA88F35A +S3150800BE9C134005F8013BE1E72023C4F88030002065 +S3150800BEAC00E0022003B0BDE8F0830120FAE730B5C4 +S3150800BEBC83B004460023C0F88430FEF793FC05468D +S3150800BECC2268126812F0080F0FD123681B6813F04A +S3150800BEDC040F26D12023E367C4F88030002020669F +S3150800BEEC606684F8780003B030BD6FF07E4300932B +S3150800BEFC034600224FF400112046FFF70CFF0028DA +S3150800BF0CE3D0226852E8003F23F0800342E8003170 +S3150800BF1C0029F6D12023E367002384F87830032020 +S3150800BF2CE1E76FF07E4300932B4600224FF4800125 +S3150800BF3C2046FFF7F0FE0028CCD0226852E8003FD6 +S3150800BF4C23F4907342E800310029F6D1226802F1F5 +S3150800BF5C080353E8003F23F00103083242E8003196 +S3150800BF6C0029F3D12023C4F88030002384F87830D4 +S3150800BF7C0320B8E768B310B50446C36F03B324238C +S3150800BF8CE3672268136823F0010313602046FFF762 +S3150800BF9C35FD012813D0636ABBB92268536823F4AC +S3150800BFAC904353602268936823F02A0393602268AF +S3150800BFBC136843F0010313602046FFF778FF10BDA2 +S3150800BFCC80F87830FEF754FBD9E72046FFF73EFE9B +S3150800BFDCE3E701207047000070B50D4D0D4C641B4E +S3150800BFECA4100026A64209D10B4D0C4C00F020F8E3 +S3150800BFFC641BA4100026A64205D170BD55F8043B57 +S3150800C00C98470136EEE755F8043B98470136F2E7B0 +S3150800C01CB0C00008B0C00008B0C00008B4C0000822 +S3150800C02C02440346934200D1704703F8011BF9E713 +S3150800C03CF8B500BFF8BC08BC9E467047F8B500BFFB +S30D0800C04CF8BC08BC9E467047CB +S3150800C05405020602060307030803090309040A047A +S3150800C0640B040C040C050D050E050F050F0610062A +S3150800C0741007100800000000000000000102030475 +S3150800C0840607080900000000010203040203040568 +S3150800C094060708090A0B0C0D0E0F101001020304FB +S3110800C0A405060708090A0B0C0D0E0F1004 +S3090800C0B0B1A1000824 +S3090800C0B48DA1000844 +S3110800C0B800127A000100000010000000D1 +S7050800A71536 diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld index bdc02df7..654ffb3b 100644 --- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld +++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld @@ -47,7 +47,7 @@ MEMORY { CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 8K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 40K - FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 256K - 32K + FLASH (rx) : ORIGIN = 0x0800A000, LENGTH = 256K - 40K } /* Sections */